mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-24 16:51:15 +00:00
Merge branch 'master' of https://github.com/isledecomp/isle into legobuildingmanager
This commit is contained in:
commit
fa7207cd58
@ -367,7 +367,8 @@ add_library(lego1 SHARED
|
||||
LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp
|
||||
LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp
|
||||
LEGO1/lego/legoomni/src/isle/radiostate.cpp
|
||||
LEGO1/lego/legoomni/src/main/legoomni.cpp
|
||||
LEGO1/lego/legoomni/src/main/legomain.cpp
|
||||
LEGO1/lego/legoomni/src/main/scripts.cpp
|
||||
LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoanimactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoextraactor.cpp
|
||||
|
||||
@ -15,6 +15,8 @@ To access the Ghidra repository, use the following details:
|
||||
- Address: `server.mattkc.com`
|
||||
- Port: `13100`
|
||||
|
||||
**Please note that at the time of writing, much of the information found on the Ghidra server is severely outdated**. Generally, the source code found in this repository represents the latest "source of truth" and should be referenced whenever possible.
|
||||
|
||||
## General Guidelines
|
||||
|
||||
If you feel fit to contribute, feel free to create a pull request! Someone will review and merge it (or provide feedback) as soon as possible.
|
||||
@ -26,6 +28,7 @@ This repository currently has only one goal: accuracy to the original executable
|
||||
## Overview
|
||||
|
||||
* [`3rdparty`](/3rdparty): Contains code obtained from third parties, not including Mindscape. Generally, these are libraries that have been placed in the public domain or are freely available on the web. As these are unaltered files, our style guide (see below) does not apply.
|
||||
* [`CONFIG`](/CONFIG): Decompilation of `CONFIG.EXE`. It depends on some code in `LEGO1`.
|
||||
* [`ISLE`](/ISLE): Decompilation of `ISLE.EXE`. It depends on some code in `LEGO1`.
|
||||
* [`LEGO1`](/LEGO1): Decompilation of `LEGO1.DLL`. This folder contains code from Mindscape's custom in-house engine called **Omni** (file pattern: `mx*`), the LEGO Island-specific extensions for Omni and the game's code (file pattern: `lego*`) as well as several utility libraries developed by Mindscape.
|
||||
* [`tools`](/tools): A set of tools aiding in the decompilation effort.
|
||||
@ -33,7 +36,15 @@ This repository currently has only one goal: accuracy to the original executable
|
||||
|
||||
## Tooling
|
||||
|
||||
Please make yourself familiar with the [available tooling and annotations](/tools/README.md).
|
||||
Please make yourself familiar with the [available tooling and annotations](/tools/README.md). These are generally required to contribute to the project.
|
||||
|
||||
## Notes on MSVC 4.20
|
||||
|
||||
As outlined in the [`README`](/README.md), Microsoft Visual C++ 4.20 is the compiler we use to build the game.
|
||||
|
||||
One important aspect to know about this compiler in the context of the decompilation project is that the assembly code generation is somewhat erratic. We call this peculiarity "compiler randomness" or entropy. In essence, what it comes down to is that changes to the code base, for instance in a header, can pseudo-randomly affect the code generation of functions in compilation units that include this header, even if the changes are completely unrelated to those functions. For example, by adding an extra (unused) inline function or an enum declaration in a header, the code in some functions may unexpectedly wind up looking different and our main tool, [`reccmp`](/tools/README.md), will report either a (significantly) reduced or increased accuracy for those functions. This issue roughly affects around ~5% of all decompiled functions.
|
||||
|
||||
We are currently unaware of the exact nature of this phenomenon. Unfortunately it represents a significant obstacle in our effort to achieve 100% matching binaries. If you or anyone you know has knowledge about the compiler internals that lead to the described observations, please contact us.
|
||||
|
||||
## Code Style
|
||||
|
||||
@ -41,7 +52,7 @@ In general, we're not exhaustively strict about coding style, but there are some
|
||||
|
||||
### Formatting
|
||||
|
||||
We are currently using [clang-format](https://clang.llvm.org/docs/ClangFormat.html) with a configuration file that aims to replicate the code formatting employed by the original developers. There are [integrations](https://clang.llvm.org/docs/ClangFormat.html#vim-integration) available for most editors and IDEs. The required `clang-format` version is `17.x`.
|
||||
We are currently using [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) with configuration files that aim to replicate the code formatting employed by the original developers. There are [integrations](https://clang.llvm.org/docs/ClangFormat.html#vim-integration) available for most editors and IDEs. The required `clang-format` version is `17.x`.
|
||||
|
||||
### Naming conventions
|
||||
|
||||
|
||||
@ -1,17 +1,19 @@
|
||||
#include "isleapp.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "decomp.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legomain.h"
|
||||
#include "legomodelpresenter.h"
|
||||
#include "legoomni.h"
|
||||
#include "legopartpresenter.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworldpresenter.h"
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxdirectx/mxdirect3d.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxomnicreateflags.h"
|
||||
@ -20,7 +22,9 @@
|
||||
#include "mxticklemanager.h"
|
||||
#include "mxtimer.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
#include "mxvariabletable.h"
|
||||
#include "res/resource.h"
|
||||
#include "roi/legoroi.h"
|
||||
#include "viewmanager/viewmanager.h"
|
||||
|
||||
#include <dsound.h>
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#ifndef ACT1STATE_H
|
||||
#define ACT1STATE_H
|
||||
|
||||
#include "legonamedtexture.h"
|
||||
#include "legostate.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
class LegoNamedTexture;
|
||||
|
||||
// VTABLE: LEGO1 0x100d7028
|
||||
// SIZE 0x26c
|
||||
@ -81,16 +81,17 @@ class Act1State : public LegoState {
|
||||
|
||||
inline MxU32 GetUnknown18() { return m_unk0x018; }
|
||||
inline ElevatorFloor GetElevatorFloor() { return (ElevatorFloor) m_elevFloor; }
|
||||
inline MxS16 GetUnknown21() { return m_unk0x021; }
|
||||
inline MxU8 GetUnknown21() { return m_unk0x021; }
|
||||
|
||||
inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x018 = p_unk0x18; }
|
||||
inline void SetElevatorFloor(ElevatorFloor p_elevFloor) { m_elevFloor = p_elevFloor; }
|
||||
inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x021 = p_unk0x21; }
|
||||
inline void SetUnknown21(MxU8 p_unk0x21) { m_unk0x021 = p_unk0x21; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10033960
|
||||
// Act1State::`scalar deleting destructor'
|
||||
|
||||
friend class Isle;
|
||||
friend class SkateBoard;
|
||||
|
||||
protected:
|
||||
MxS32* m_unk0x008; // 0x008 FIXME: count for m_unk0x008
|
||||
@ -105,7 +106,7 @@ class Act1State : public LegoState {
|
||||
MxBool m_unk0x01f; // 0x01f
|
||||
MxBool m_planeActive; // 0x020
|
||||
undefined m_unk0x021; // 0x021
|
||||
undefined m_unk0x022; // 0x022
|
||||
MxBool m_unk0x022; // 0x022
|
||||
undefined m_unk0x023; // 0x023
|
||||
NamedPlane m_unk0x024; // 0x024
|
||||
NamedPlane m_unk0x070; // 0x070
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
#ifndef AMBULANCE_H
|
||||
#define AMBULANCE_H
|
||||
|
||||
#include "ambulancemissionstate.h"
|
||||
#include "islepathactor.h"
|
||||
|
||||
class AmbulanceMissionState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d71a8
|
||||
// SIZE 0x184
|
||||
class Ambulance : public IslePathActor {
|
||||
|
||||
@ -18,15 +18,16 @@ struct AnimInfo {
|
||||
char* m_animName; // 0x00
|
||||
MxU32 m_objectId; // 0x04
|
||||
MxS16 m_unk0x08; // 0x08
|
||||
MxU8 m_unk0x0a; // 0x0a
|
||||
MxBool m_unk0x0a; // 0x0a
|
||||
MxU8 m_unk0x0b; // 0x0b
|
||||
MxU8 m_unk0x0c; // 0x0c
|
||||
MxU8 m_unk0x0d; // 0x0d
|
||||
MxU32 m_unk0x10[4]; // 0x10
|
||||
MxU8 m_modelCount; // 0x20
|
||||
MxS16 m_unk0x22; // 0x22
|
||||
ModelInfo* m_models; // 0x24
|
||||
MxU8 m_unk0x28; // 0x28
|
||||
MxU8 m_unk0x29; // 0x29
|
||||
MxBool m_unk0x29; // 0x29
|
||||
MxS8 m_unk0x2a[3]; // 0x2a
|
||||
};
|
||||
|
||||
|
||||
@ -2,12 +2,13 @@
|
||||
#define GASSTATION_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "gasstationstate.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxstillpresenter.h"
|
||||
#include "radio.h"
|
||||
|
||||
class GasStationState;
|
||||
class MxStillPresenter;
|
||||
|
||||
// VTABLE: LEGO1 0x100d4650
|
||||
// SIZE 0x128
|
||||
class GasStation : public LegoWorld {
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
#ifndef HELICOPTER_H
|
||||
#define HELICOPTER_H
|
||||
|
||||
#include "helicopterstate.h"
|
||||
#include "islepathactor.h"
|
||||
#include "realtime/matrix.h"
|
||||
|
||||
class HelicopterState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d40f8
|
||||
// SIZE 0x230
|
||||
class Helicopter : public IslePathActor {
|
||||
@ -25,13 +26,13 @@ class Helicopter : public IslePathActor {
|
||||
return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name);
|
||||
}
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void VTable0x70(float p_float) override; // vtable+0x70
|
||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||
MxU32 VTable0xcc() override; // vtable+0xcc
|
||||
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
|
||||
MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8
|
||||
void VTable0xe4() override; // vtable+0xe4
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void VTable0x70(float p_float) override; // vtable+0x70
|
||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||
MxU32 VTable0xcc() override; // vtable+0xcc
|
||||
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
|
||||
MxU32 VTable0xd8(LegoEndAnimNotificationParam& p_param) override; // vtable+0xd8
|
||||
void VTable0xe4() override; // vtable+0xe4
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10003210
|
||||
// Helicopter::`scalar deleting destructor'
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
#include "decomp.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxstillpresenter.h"
|
||||
|
||||
class MxStillPresenter;
|
||||
|
||||
// VTABLE: LEGO1 0x100da328
|
||||
// SIZE 0x3e4
|
||||
|
||||
@ -3,11 +3,13 @@
|
||||
|
||||
#include "actionsfwd.h"
|
||||
#include "decomp.h"
|
||||
#include "hospitalstate.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxstillpresenter.h"
|
||||
#include "radio.h"
|
||||
|
||||
class HospitalState;
|
||||
class LegoControlManagerEvent;
|
||||
class MxEndActionNotificationParam;
|
||||
class MxStillPresenter;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9730
|
||||
// SIZE 0x12c
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
#include "radio.h"
|
||||
|
||||
class InfocenterState;
|
||||
class MxNotificationParam;
|
||||
class MxStillPresenter;
|
||||
class LegoControlManagerEvent;
|
||||
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
#include "decomp.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legostate.h"
|
||||
#include "mxstillpresenter.h"
|
||||
|
||||
class MxStillPresenter;
|
||||
|
||||
// VTABLE: LEGO1 0x100d93a8
|
||||
// SIZE 0x94
|
||||
|
||||
@ -2,8 +2,10 @@
|
||||
#define ISLEACTOR_H
|
||||
|
||||
#include "legoactor.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxactionnotificationparam.h"
|
||||
|
||||
class LegoWorld;
|
||||
class MxEndActionNotificationParam;
|
||||
class MxNotificationParam;
|
||||
|
||||
// VTABLE: LEGO1 0x100d5178
|
||||
// SIZE 0x7c
|
||||
|
||||
@ -1,18 +1,87 @@
|
||||
#ifndef ISLEPATHACTOR_H
|
||||
#define ISLEPATHACTOR_H
|
||||
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legopathactor.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxtype18notificationparam.h"
|
||||
#include "mxtype19notificationparam.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
class LegoEndAnimNotificationParam;
|
||||
class LegoWorld;
|
||||
class MxType19NotificationParam;
|
||||
|
||||
// VTABLE: LEGO1 0x100d4398
|
||||
// SIZE 0x160
|
||||
class IslePathActor : public LegoPathActor {
|
||||
public:
|
||||
enum {
|
||||
c_LOCATIONS_NUM = 29
|
||||
};
|
||||
|
||||
enum {
|
||||
c_spawnBit1 = 0x01,
|
||||
c_playMusic = 0x02,
|
||||
c_spawnBit3 = 0x04
|
||||
};
|
||||
|
||||
// SIZE 0x38
|
||||
struct SpawnLocation {
|
||||
SpawnLocation() {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b1b0
|
||||
SpawnLocation(
|
||||
LegoGameState::Area p_area,
|
||||
MxAtomId* p_script,
|
||||
MxS32 p_entityId,
|
||||
const char* p_path,
|
||||
MxS16 p_src,
|
||||
float p_srcScale,
|
||||
MxS16 p_dest,
|
||||
float p_destScale,
|
||||
undefined4 p_unk0x30,
|
||||
JukeboxScript::Script p_music
|
||||
)
|
||||
{
|
||||
m_area = p_area;
|
||||
m_script = p_script;
|
||||
m_entityId = p_entityId;
|
||||
strcpy(m_path, p_path);
|
||||
m_src = p_src;
|
||||
m_srcScale = p_srcScale;
|
||||
m_dest = p_dest;
|
||||
m_destScale = p_destScale;
|
||||
m_unk0x30 = p_unk0x30;
|
||||
m_music = p_music;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b230
|
||||
SpawnLocation& operator=(const SpawnLocation& p_location)
|
||||
{
|
||||
m_area = p_location.m_area;
|
||||
m_script = p_location.m_script;
|
||||
m_entityId = p_location.m_entityId;
|
||||
strcpy(m_path, p_location.m_path);
|
||||
m_src = p_location.m_src;
|
||||
m_srcScale = p_location.m_srcScale;
|
||||
m_dest = p_location.m_dest;
|
||||
m_destScale = p_location.m_destScale;
|
||||
m_unk0x30 = p_location.m_unk0x30;
|
||||
m_music = p_location.m_music;
|
||||
return *this;
|
||||
}
|
||||
|
||||
LegoGameState::Area m_area; // 0x00
|
||||
MxAtomId* m_script; // 0x04
|
||||
MxS32 m_entityId; // 0x08
|
||||
char m_path[20]; // 0x0c
|
||||
MxS16 m_src; // 0x20
|
||||
float m_srcScale; // 0x24
|
||||
MxS16 m_dest; // 0x28
|
||||
float m_destScale; // 0x2c
|
||||
undefined4 m_unk0x30; // 0x30
|
||||
JukeboxScript::Script m_music; // 0x34
|
||||
};
|
||||
|
||||
IslePathActor();
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e10
|
||||
@ -46,15 +115,15 @@ class IslePathActor : public LegoPathActor {
|
||||
virtual MxU32 VTable0xd4(LegoControlManagerEvent&) { return 0; } // vtable+0xd4
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e90
|
||||
virtual MxU32 VTable0xd8(MxType18NotificationParam&) { return 0; } // vtable+0xd8
|
||||
virtual MxU32 VTable0xd8(LegoEndAnimNotificationParam&) { return 0; } // vtable+0xd8
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e00
|
||||
virtual MxU32 VTable0xdc(MxType19NotificationParam&) { return 0; } // vtable+0xdc
|
||||
|
||||
virtual void VTable0xe0(); // vtable+0xe0
|
||||
virtual void VTable0xe4(); // vtable+0xe4
|
||||
virtual void VTable0xe8(LegoGameState::Area, MxBool, MxU8); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset);
|
||||
virtual void VTable0xe0(); // vtable+0xe0
|
||||
virtual void VTable0xe4(); // vtable+0xe4
|
||||
virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p_flags); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10002ff0
|
||||
// IslePathActor::`scalar deleting destructor'
|
||||
@ -64,6 +133,8 @@ class IslePathActor : public LegoPathActor {
|
||||
|
||||
void FUN_1001b660();
|
||||
|
||||
static void RegisterSpawnLocations();
|
||||
|
||||
protected:
|
||||
LegoWorld* m_world; // 0x154
|
||||
IslePathActor* m_unk0x158; // 0x158
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "islepathactor.h"
|
||||
#include "legocontrolmanager.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9ec8
|
||||
// SIZE 0x164
|
||||
|
||||
@ -2,11 +2,12 @@
|
||||
#define JUKEBOX_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "jukeboxstate.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
class JukeBoxState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d8958
|
||||
// SIZE 0x104
|
||||
class JukeBox : public LegoWorld {
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
#define LEGOACT2_H
|
||||
|
||||
#include "act2brick.h"
|
||||
#include "legocarraceactor.h"
|
||||
#include "legopathactor.h"
|
||||
#include "legoworld.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d82e0
|
||||
|
||||
@ -2,14 +2,15 @@
|
||||
#define LEGOACTIONCONTROLPRESENTER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legoutils.h"
|
||||
#include "extra.h"
|
||||
#include "mxmediapresenter.h"
|
||||
#include "mxstring.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d5118
|
||||
// SIZE 0x68
|
||||
class LegoActionControlPresenter : public MxMediaPresenter {
|
||||
public:
|
||||
inline LegoActionControlPresenter() { m_unk0x50 = Extra::ActionType::e_none; }
|
||||
LegoActionControlPresenter() { m_unk0x50 = Extra::ActionType::e_none; }
|
||||
~LegoActionControlPresenter() override { Destroy(TRUE); } // vtable+0x00
|
||||
|
||||
// FUNCTION: LEGO1 0x1000d0e0
|
||||
|
||||
@ -2,9 +2,10 @@
|
||||
#define LEGOACTOR_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legocachsound.h"
|
||||
#include "legoentity.h"
|
||||
|
||||
class LegoCacheSound;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6d68
|
||||
// SIZE 0x78
|
||||
class LegoActor : public LegoEntity {
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
#ifndef LEGOANIMACTOR_H
|
||||
#define LEGOANIMACTOR_H
|
||||
|
||||
#include "anim/legoanim.h"
|
||||
#include "decomp.h"
|
||||
#include "legopathactor.h"
|
||||
|
||||
class LegoAnim;
|
||||
|
||||
// SIZE 0x20
|
||||
struct LegoAnimActorStruct {
|
||||
LegoAnimActorStruct(float p_unk0x00, LegoAnim* p_AnimTreePtr, LegoROI** p_roiMap, MxU32 p_numROIs);
|
||||
|
||||
@ -2,14 +2,19 @@
|
||||
#define LEGOANIMATIONMANAGER_H
|
||||
|
||||
#include "actionsfwd.h"
|
||||
#include "animstate.h"
|
||||
#include "decomp.h"
|
||||
#include "legoentity.h"
|
||||
#include "legotraninfolist.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
|
||||
class AnimState;
|
||||
class LegoAnimPresenter;
|
||||
class LegoEntity;
|
||||
class LegoFile;
|
||||
class LegoPathBoundary;
|
||||
class LegoROIList;
|
||||
struct ModelInfo;
|
||||
class MxDSAction;
|
||||
|
||||
// SIZE 0x18
|
||||
struct Character {
|
||||
@ -36,11 +41,13 @@ struct Vehicle {
|
||||
|
||||
// SIZE 0x18
|
||||
struct Unknown0x3c {
|
||||
LegoROI* m_roi; // 0x00
|
||||
MxU32 m_id; // 0x04
|
||||
undefined m_unk0x08[0x08]; // 0x08
|
||||
float m_unk0x10; // 0x10
|
||||
undefined m_unk0x14; // 0x14
|
||||
LegoROI* m_roi; // 0x00
|
||||
MxS32 m_characterId; // 0x04
|
||||
undefined4 m_unk0x08; // 0x08
|
||||
undefined m_unk0x0c; // 0x0c
|
||||
MxBool m_unk0x0d; // 0x0d
|
||||
float m_unk0x10; // 0x10
|
||||
MxBool m_unk0x14; // 0x14
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d8c18
|
||||
@ -67,10 +74,10 @@ class LegoAnimationManager : public MxCore {
|
||||
}
|
||||
|
||||
void Reset(MxBool p_und);
|
||||
void FUN_1005ef10();
|
||||
void FUN_1005f0b0();
|
||||
void FUN_1005f6d0(MxBool);
|
||||
void FUN_1005f700(MxBool);
|
||||
void Suspend();
|
||||
void Resume();
|
||||
void FUN_1005f6d0(MxBool p_unk0x400);
|
||||
void FUN_1005f700(MxBool p_unk0x3a);
|
||||
MxResult LoadScriptInfo(MxS32 p_scriptIndex);
|
||||
MxBool FindVehicle(const char* p_name, MxU32& p_index);
|
||||
MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info);
|
||||
@ -80,13 +87,13 @@ class LegoAnimationManager : public MxCore {
|
||||
MxResult FUN_10060dc0(
|
||||
IsleScript::Script p_objectId,
|
||||
MxMatrix* p_matrix,
|
||||
undefined p_param3,
|
||||
undefined p_param4,
|
||||
undefined4 p_param5,
|
||||
undefined p_param6,
|
||||
MxBool p_param3,
|
||||
MxBool p_param4,
|
||||
LegoROI* p_roi,
|
||||
MxBool p_param6,
|
||||
MxBool p_param7,
|
||||
MxBool p_param8,
|
||||
undefined p_param9
|
||||
MxBool p_param9
|
||||
);
|
||||
void FUN_10061010(undefined4);
|
||||
void FUN_100617c0(MxS32, MxU16&, MxU16&);
|
||||
@ -96,8 +103,8 @@ class LegoAnimationManager : public MxCore {
|
||||
void FUN_100629b0(MxU32, MxBool);
|
||||
void FUN_10063270(LegoROIList*, LegoAnimPresenter*);
|
||||
void FUN_10063780(LegoROIList* p_list);
|
||||
void FUN_10064670(MxBool);
|
||||
void FUN_10064740(MxBool);
|
||||
void FUN_10064670(Vector3*);
|
||||
void FUN_10064740(Vector3*);
|
||||
|
||||
static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig);
|
||||
|
||||
@ -108,27 +115,43 @@ class LegoAnimationManager : public MxCore {
|
||||
void Init();
|
||||
MxResult FUN_100605e0(
|
||||
MxU32 p_index,
|
||||
MxU8 p_unk0x0a,
|
||||
MxBool p_unk0x0a,
|
||||
MxMatrix* p_matrix,
|
||||
undefined,
|
||||
undefined4,
|
||||
undefined,
|
||||
MxBool,
|
||||
MxBool,
|
||||
undefined
|
||||
MxBool p_bool1,
|
||||
LegoROI* p_roi,
|
||||
MxBool p_bool2,
|
||||
MxBool p_bool3,
|
||||
MxBool p_bool4,
|
||||
MxBool p_bool5
|
||||
);
|
||||
MxResult FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2);
|
||||
void DeleteAnimations();
|
||||
void FUN_10061530();
|
||||
MxU16 FUN_10062110(
|
||||
LegoROI* p_roi,
|
||||
Vector3& p_direction,
|
||||
Vector3& p_position,
|
||||
LegoPathBoundary* p_boundary,
|
||||
float p_speed,
|
||||
MxU8 p_und,
|
||||
MxBool p_unk0x14
|
||||
);
|
||||
MxS8 GetCharacterIndex(const char* p_name);
|
||||
MxBool FUN_100623a0(AnimInfo& p_info);
|
||||
void FUN_10062580(AnimInfo& p_info);
|
||||
MxBool FUN_10062710(AnimInfo& p_info);
|
||||
void FUN_10063aa0();
|
||||
void FUN_10063d10();
|
||||
void FUN_100648f0(LegoTranInfo*, MxLong);
|
||||
void FUN_10064b50(MxLong p_time);
|
||||
|
||||
MxU32 m_scriptIndex; // 0x08
|
||||
MxS32 m_scriptIndex; // 0x08
|
||||
MxU16 m_animCount; // 0x0c
|
||||
MxU16 m_unk0x0e; // 0x0e
|
||||
MxU16 m_unk0x10; // 0x10
|
||||
AnimInfo* m_anims; // 0x14
|
||||
undefined2 m_unk0x18; // 0x18
|
||||
undefined m_unk0x1a; // 0x1a
|
||||
MxBool m_unk0x1a; // 0x1a
|
||||
MxU32 m_unk0x1c; // 0x1c
|
||||
LegoTranInfoList* m_tranInfoList; // 0x20
|
||||
LegoTranInfoList* m_tranInfoList2; // 0x24
|
||||
@ -136,27 +159,27 @@ class LegoAnimationManager : public MxCore {
|
||||
MxLong m_unk0x30[2]; // 0x30
|
||||
MxBool m_unk0x38; // 0x38
|
||||
MxBool m_unk0x39; // 0x39
|
||||
undefined m_unk0x3a; // 0x3a
|
||||
MxBool m_unk0x3a; // 0x3a
|
||||
Unknown0x3c m_unk0x3c[40]; // 0x3c
|
||||
undefined4 m_unk0x3fc; // 0x3fc
|
||||
MxU8 m_unk0x400; // 0x400
|
||||
undefined m_unk0x401; // 0x401
|
||||
MxU8 m_unk0x402; // 0x402
|
||||
MxBool m_unk0x400; // 0x400
|
||||
MxBool m_unk0x401; // 0x401
|
||||
MxBool m_unk0x402; // 0x402
|
||||
MxLong m_unk0x404; // 0x404
|
||||
MxLong m_unk0x408; // 0x408
|
||||
MxLong m_unk0x40c; // 0x40c
|
||||
undefined4 m_unk0x410; // 0x410
|
||||
MxLong m_unk0x410; // 0x410
|
||||
undefined4 m_unk0x414; // 0x414
|
||||
undefined4 m_unk0x418; // 0x418
|
||||
MxU32 m_numAllowedExtras; // 0x418
|
||||
undefined4 m_unk0x41c; // 0x41c
|
||||
AnimState* m_animState; // 0x420
|
||||
LegoROIList* m_unk0x424; // 0x424
|
||||
undefined m_unk0x428; // 0x428
|
||||
undefined m_unk0x429; // 0x429
|
||||
undefined m_unk0x42a; // 0x42a
|
||||
undefined m_unk0x42b; // 0x42b
|
||||
undefined4 m_unk0x42c; // 0x42c
|
||||
undefined m_unk0x430; // 0x430
|
||||
MxBool m_unk0x428; // 0x428
|
||||
MxBool m_unk0x429; // 0x429
|
||||
MxBool m_unk0x42a; // 0x42a
|
||||
MxBool m_suspended; // 0x42b
|
||||
LegoTranInfo* m_unk0x42c; // 0x42c
|
||||
MxBool m_unk0x430; // 0x430
|
||||
undefined4 m_unk0x434[2]; // 0x434
|
||||
MxMatrix m_unk0x43c; // 0x43c
|
||||
MxMatrix m_unk0x484; // 0x484
|
||||
|
||||
@ -2,12 +2,12 @@
|
||||
#define LEGOANIMMMPRESENTER_H
|
||||
|
||||
#include "mxcompositepresenter.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
|
||||
class LegoAnimPresenter;
|
||||
class LegoWorld;
|
||||
class LegoROI;
|
||||
struct LegoTranInfo;
|
||||
class MxMatrix;
|
||||
|
||||
// VTABLE: LEGO1 0x100d7de8
|
||||
// SIZE 0x74
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
#ifndef LEGOANIMPRESENTER_H
|
||||
#define LEGOANIMPRESENTER_H
|
||||
|
||||
#include "anim/legoanim.h"
|
||||
#include "legoroilist.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxatom.h"
|
||||
#include "mxvideopresenter.h"
|
||||
|
||||
class LegoAnim;
|
||||
class LegoWorld;
|
||||
class LegoAnimClass;
|
||||
class LegoAnimActor;
|
||||
class LegoPathBoundary;
|
||||
class MxMatrix;
|
||||
class Vector3;
|
||||
|
||||
struct LegoAnimStructComparator {
|
||||
MxBool operator()(const char* const& p_a, const char* const& p_b) const { return strcmp(p_a, p_b) < 0; }
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
#define LEGOBUILDINGMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxcore.h"
|
||||
|
||||
class LegoEntity;
|
||||
class LegoROI;
|
||||
class LegoWorld;
|
||||
struct LegoBuildingData;
|
||||
class LegoStorage;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6f50
|
||||
// SIZE 0x30
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
#include "mxstl/stlcompat.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
#pragma warning(disable : 4237)
|
||||
|
||||
// SIZE 0x08
|
||||
struct LegoCacheSoundEntry {
|
||||
LegoCacheSoundEntry() : m_sound(NULL), m_name(NULL) {}
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
#define LEGOCAMERACONTROLLER_H
|
||||
|
||||
#include "legopointofviewcontroller.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxpoint32.h"
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#ifndef LEGOCARBUILDANIMPRESENTER_H
|
||||
#define LEGOCARBUILDANIMPRESENTER_H
|
||||
|
||||
#include "anim/legoanim.h"
|
||||
#include "legoanimpresenter.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d99e0
|
||||
|
||||
@ -2,13 +2,14 @@
|
||||
#define LEGOCHARACTERMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legoextraactor.h"
|
||||
#include "legovariables.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxstl/stlcompat.h"
|
||||
#include "mxtypes.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
class CustomizeAnimFileVariable;
|
||||
class LegoActor;
|
||||
class LegoExtraActor;
|
||||
class LegoStorage;
|
||||
class LegoROI;
|
||||
|
||||
#pragma warning(disable : 4237)
|
||||
@ -40,7 +41,7 @@ struct LegoCharacter {
|
||||
MxU32 m_refCount; // 0x04
|
||||
};
|
||||
|
||||
struct LegoCharacterData;
|
||||
struct LegoCharacterInfo;
|
||||
|
||||
typedef map<char*, LegoCharacter*, LegoCharacterComparator> LegoCharacterMap;
|
||||
|
||||
@ -64,8 +65,8 @@ class LegoCharacterManager {
|
||||
void FUN_10083f10(LegoROI* p_roi);
|
||||
MxBool FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo);
|
||||
LegoExtraActor* GetActor(const char* p_key);
|
||||
LegoCharacterData* GetData(const char* p_key);
|
||||
LegoCharacterData* GetData(LegoROI* p_roi);
|
||||
LegoCharacterInfo* GetInfo(const char* p_key);
|
||||
LegoCharacterInfo* GetInfo(LegoROI* p_roi);
|
||||
MxBool SwitchHat(LegoROI* p_roi);
|
||||
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
|
||||
LegoROI* FUN_10085210(const char* p_name, const char* p_lodName, MxBool p_createEntity);
|
||||
|
||||
@ -8,7 +8,7 @@ class LegoExtraActor;
|
||||
class LegoROI;
|
||||
|
||||
// SIZE 0x108
|
||||
struct LegoCharacterData {
|
||||
struct LegoCharacterInfo {
|
||||
// SIZE 0x18
|
||||
struct Part {
|
||||
MxU8* m_unk0x00; // 0x00
|
||||
@ -45,7 +45,34 @@ struct LegoCharacterLOD {
|
||||
float m_up[3]; // 0x4c
|
||||
};
|
||||
|
||||
extern LegoCharacterData g_characterDataInit[66];
|
||||
enum LegoCharacterLODs {
|
||||
c_topLOD,
|
||||
c_bodyLOD,
|
||||
c_infohatLOD,
|
||||
c_infogronLOD,
|
||||
c_headLOD,
|
||||
c_armlftLOD,
|
||||
c_armrtLOD,
|
||||
c_clawlftLOD,
|
||||
c_clawrtLOD,
|
||||
c_leglftLOD,
|
||||
c_legrtLOD
|
||||
};
|
||||
|
||||
enum LegoCharacterParts {
|
||||
c_bodyPart,
|
||||
c_infohatPart,
|
||||
c_infogronPart,
|
||||
c_headPart,
|
||||
c_armlftPart,
|
||||
c_armrtPart,
|
||||
c_clawlftPart,
|
||||
c_clawrtPart,
|
||||
c_leglftPart,
|
||||
c_legrtPart
|
||||
};
|
||||
|
||||
extern LegoCharacterInfo g_characterInfoInit[66];
|
||||
extern LegoCharacterLOD g_characterLODs[11];
|
||||
|
||||
#endif // LEGOCHARACTERS_H
|
||||
|
||||
34
LEGO1/lego/legoomni/include/legoendanimnotificationparam.h
Normal file
34
LEGO1/lego/legoomni/include/legoendanimnotificationparam.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef LEGOENDANIMNOTIFICATIONPARAM_H
|
||||
#define LEGOENDANIMNOTIFICATIONPARAM_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxnotificationparam.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d7e80
|
||||
// SIZE 0x10
|
||||
class LegoEndAnimNotificationParam : public MxNotificationParam {
|
||||
public:
|
||||
LegoEndAnimNotificationParam(NotificationId p_type, MxCore* p_sender, MxU32 p_index)
|
||||
: MxNotificationParam(p_type, p_sender), m_index(p_index)
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1004afd0
|
||||
MxNotificationParam* Clone() const override
|
||||
{
|
||||
return new LegoEndAnimNotificationParam(m_type, m_sender, m_index);
|
||||
} // vtable+0x04
|
||||
|
||||
inline MxU32 GetIndex() { return m_index; }
|
||||
|
||||
protected:
|
||||
MxU32 m_index; // 0x0c
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1004b080
|
||||
// LegoEndAnimNotificationParam::`scalar deleting destructor'
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1004b0f0
|
||||
// LegoEndAnimNotificationParam::~LegoEndAnimNotificationParam
|
||||
|
||||
#endif // LEGOENDANIMNOTIFICATIONPARAM_H
|
||||
@ -3,10 +3,11 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "extra.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxentity.h"
|
||||
#include "realtime/vector.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
class LegoROI;
|
||||
class MxDSAction;
|
||||
class Vector3;
|
||||
|
||||
// VTABLE: LEGO1 0x100d4858
|
||||
// SIZE 0x68
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
#ifndef LEGOENTITYLIST_H
|
||||
#define LEGOENTITYLIST_H
|
||||
|
||||
#include "legoentity.h"
|
||||
#include "mxlist.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
class LegoEntity;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6410
|
||||
// class MxCollection<LegoEntity *>
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "mxcompositepresenter.h"
|
||||
|
||||
class LegoEntity;
|
||||
class Vector3;
|
||||
|
||||
// VTABLE: LEGO1 0x100d8398
|
||||
// SIZE 0x50
|
||||
|
||||
@ -3,10 +3,11 @@
|
||||
|
||||
#include "mxnotificationparam.h"
|
||||
#include "mxtypes.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
class LegoROI;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6aa0
|
||||
// SIZE 0x20
|
||||
class LegoEventNotificationParam : public MxNotificationParam {
|
||||
|
||||
@ -3,14 +3,17 @@
|
||||
|
||||
#include "actionsfwd.h"
|
||||
#include "decomp.h"
|
||||
#include "legobackgroundcolor.h"
|
||||
#include "legofullscreenmovie.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxtypes.h"
|
||||
#include "mxvariabletable.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
class LegoBackgroundColor;
|
||||
class LegoFile;
|
||||
class LegoFullScreenMovie;
|
||||
class LegoState;
|
||||
class LegoStorage;
|
||||
class MxVariable;
|
||||
class MxVariableTable;
|
||||
class MxString;
|
||||
|
||||
// SIZE 0x08
|
||||
@ -54,8 +57,9 @@ class LegoGameState {
|
||||
e_unk20,
|
||||
e_unk21,
|
||||
e_pizzeriaExterior,
|
||||
|
||||
e_garageExterior = 25,
|
||||
e_unk23,
|
||||
e_unk24,
|
||||
e_garageExterior,
|
||||
e_garage,
|
||||
e_garadoor,
|
||||
e_unk28,
|
||||
@ -73,14 +77,17 @@ class LegoGameState {
|
||||
e_unk40,
|
||||
e_unk41,
|
||||
e_unk42,
|
||||
|
||||
e_unk45 = 45,
|
||||
e_unk43,
|
||||
e_unk44,
|
||||
e_unk45,
|
||||
e_act2main,
|
||||
e_act3script,
|
||||
e_unk48,
|
||||
e_unk49,
|
||||
|
||||
e_jukeboxw = 53,
|
||||
e_unk50,
|
||||
e_unk51,
|
||||
e_unk52,
|
||||
e_jukeboxw,
|
||||
e_unk54,
|
||||
e_unk55,
|
||||
e_histbook,
|
||||
|
||||
@ -3,14 +3,15 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legoeventnotificationparam.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxlist.h"
|
||||
#include "mxpresenter.h"
|
||||
#include "mxqueue.h"
|
||||
|
||||
#include <dinput.h>
|
||||
|
||||
class LegoCameraController;
|
||||
class LegoControlManager;
|
||||
class LegoWorld;
|
||||
|
||||
extern MxS32 g_unk0x100f31b0;
|
||||
extern const char* g_unk0x100f31b4;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef LEGOOMNI_H
|
||||
#define LEGOOMNI_H
|
||||
#ifndef LEGOMAIN_H
|
||||
#define LEGOMAIN_H
|
||||
|
||||
#include "compat.h"
|
||||
#include "mxdsaction.h"
|
||||
@ -27,35 +27,6 @@ class MxBackgroundAudioManager;
|
||||
class MxTransitionManager;
|
||||
class ViewLODListManager;
|
||||
|
||||
extern MxAtomId* g_copterScript;
|
||||
extern MxAtomId* g_dunecarScript;
|
||||
extern MxAtomId* g_jetskiScript;
|
||||
extern MxAtomId* g_racecarScript;
|
||||
extern MxAtomId* g_carraceScript;
|
||||
extern MxAtomId* g_carracerScript;
|
||||
extern MxAtomId* g_jetraceScript;
|
||||
extern MxAtomId* g_jetracerScript;
|
||||
extern MxAtomId* g_isleScript;
|
||||
extern MxAtomId* g_elevbottScript;
|
||||
extern MxAtomId* g_infodoorScript;
|
||||
extern MxAtomId* g_infomainScript;
|
||||
extern MxAtomId* g_infoscorScript;
|
||||
extern MxAtomId* g_regbookScript;
|
||||
extern MxAtomId* g_histbookScript;
|
||||
extern MxAtomId* g_hospitalScript;
|
||||
extern MxAtomId* g_policeScript;
|
||||
extern MxAtomId* g_garageScript;
|
||||
extern MxAtomId* g_act2mainScript;
|
||||
extern MxAtomId* g_act3Script;
|
||||
extern MxAtomId* g_jukeboxScript;
|
||||
extern MxAtomId* g_pz5Script;
|
||||
extern MxAtomId* g_introScript;
|
||||
extern MxAtomId* g_testScript;
|
||||
extern MxAtomId* g_jukeboxwScript;
|
||||
extern MxAtomId* g_sndAnimScript;
|
||||
extern MxAtomId* g_creditsScript;
|
||||
extern MxAtomId* g_nocdSourceName;
|
||||
|
||||
// VTABLE: LEGO1 0x100d8638
|
||||
// SIZE 0x140
|
||||
class LegoOmni : public MxOmni {
|
||||
@ -103,65 +74,6 @@ class LegoOmni : public MxOmni {
|
||||
MxAtomId* m_atomId; // 0x18
|
||||
};
|
||||
|
||||
// SIZE 0x38
|
||||
struct PathContainer {
|
||||
PathContainer() {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b1b0
|
||||
PathContainer(
|
||||
undefined4 p_unk0x00,
|
||||
MxAtomId* p_script,
|
||||
undefined4 p_unk0x04,
|
||||
const char* p_key,
|
||||
undefined2 p_unk0x20,
|
||||
float p_unk0x24,
|
||||
undefined2 p_unk0x28,
|
||||
float p_unk0x2c,
|
||||
undefined4 p_unk0x30,
|
||||
MxS32 p_unk0x34
|
||||
)
|
||||
{
|
||||
m_unk0x00 = p_unk0x00;
|
||||
m_script = p_script;
|
||||
m_unk0x04 = p_unk0x04;
|
||||
strcpy(m_key, p_key);
|
||||
m_unk0x20 = p_unk0x20;
|
||||
m_unk0x24 = p_unk0x24;
|
||||
m_unk0x28 = p_unk0x28;
|
||||
m_unk0x2c = p_unk0x2c;
|
||||
m_unk0x30 = p_unk0x30;
|
||||
m_unk0x34 = p_unk0x34;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b230
|
||||
PathContainer& operator=(const PathContainer& p_container)
|
||||
{
|
||||
m_unk0x00 = p_container.m_unk0x00;
|
||||
m_script = p_container.m_script;
|
||||
m_unk0x04 = p_container.m_unk0x04;
|
||||
strcpy(m_key, p_container.m_key);
|
||||
m_unk0x20 = p_container.m_unk0x20;
|
||||
m_unk0x24 = p_container.m_unk0x24;
|
||||
m_unk0x28 = p_container.m_unk0x28;
|
||||
m_unk0x2c = p_container.m_unk0x2c;
|
||||
m_unk0x30 = p_container.m_unk0x30;
|
||||
m_unk0x34 = p_container.m_unk0x34;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
undefined4 m_unk0x00; // 0x00
|
||||
MxAtomId* m_script; // 0x04
|
||||
undefined4 m_unk0x04; // 0x08
|
||||
char m_key[20]; // 0x0c
|
||||
undefined2 m_unk0x20; // 0x20
|
||||
float m_unk0x24; // 0x24
|
||||
undefined2 m_unk0x28; // 0x28
|
||||
float m_unk0x2c; // 0x2c
|
||||
undefined4 m_unk0x30; // 0x30
|
||||
MxS32 m_unk0x34; // 0x34
|
||||
};
|
||||
|
||||
LegoOmni();
|
||||
~LegoOmni() override; // vtable+00
|
||||
|
||||
@ -264,12 +176,4 @@ class LegoOmni : public MxOmni {
|
||||
MxBool m_unk0x13c; // 0x13c
|
||||
};
|
||||
|
||||
const char* GetNoCD_SourceName();
|
||||
|
||||
LegoEntity* PickEntity(MxLong, MxLong);
|
||||
LegoROI* PickROI(MxLong, MxLong);
|
||||
|
||||
void CreateScripts();
|
||||
void DestroyScripts();
|
||||
|
||||
#endif // LEGOOMNI_H
|
||||
#endif // LEGOMAIN_H
|
||||
@ -2,6 +2,7 @@
|
||||
#define LEGOMETERPRESENTER_H
|
||||
|
||||
#include "mxstillpresenter.h"
|
||||
#include "mxstring.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d7ac8
|
||||
// SIZE 0x94
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
#include "decomp.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxtypes.h"
|
||||
#include "realtime/vector.h"
|
||||
|
||||
class Vector3;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
@ -2,9 +2,10 @@
|
||||
#define LEGOPALETTEPRESENTER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxpalette.h"
|
||||
#include "mxvideopresenter.h"
|
||||
|
||||
class MxPalette;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9aa0
|
||||
// SIZE 0x68
|
||||
class LegoPalettePresenter : public MxVideoPresenter {
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
#ifndef LEGOPATHACTOR_H
|
||||
#define LEGOPATHACTOR_H
|
||||
|
||||
#include "geom/legounkown100db7f4.h"
|
||||
#include "legoactor.h"
|
||||
#include "misc/legounknown.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxtypes.h"
|
||||
#include "realtime/matrix.h"
|
||||
|
||||
struct LegoEdge;
|
||||
class LegoPathBoundary;
|
||||
class LegoPathController;
|
||||
class LegoUnknown100db7f4;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6e28
|
||||
// SIZE 0x154
|
||||
|
||||
@ -3,11 +3,10 @@
|
||||
|
||||
#include "geom/legowegedge.h"
|
||||
#include "legoanimpresenter.h"
|
||||
#include "legopathactor.h"
|
||||
#include "mxstl/stlcompat.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
class LegoPathActor;
|
||||
|
||||
struct LegoPathActorSetCompare {
|
||||
MxU32 operator()(const LegoPathActor* p_lhs, const LegoPathActor* p_rhs) const
|
||||
{
|
||||
|
||||
@ -2,12 +2,15 @@
|
||||
#define LEGOPATHCONTROLLER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legopathactor.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxstl/stlcompat.h"
|
||||
|
||||
class LegoAnimPresenter;
|
||||
class LegoPathActor;
|
||||
class LegoPathBoundary;
|
||||
class LegoWorld;
|
||||
class MxAtomId;
|
||||
class Vector3;
|
||||
|
||||
struct LegoPathControllerComparator {
|
||||
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
||||
@ -41,6 +44,14 @@ class LegoPathController : public MxCore {
|
||||
virtual void VTable0x14(MxU8* p_data, Vector3& p_location, MxAtomId& p_trigger); // vtable+0x14
|
||||
virtual void Destroy(); // vtable+0x18
|
||||
|
||||
MxResult FUN_10045c20(
|
||||
LegoPathActor* p_actor,
|
||||
const char* p_path,
|
||||
MxS32 p_src,
|
||||
float p_srcScale,
|
||||
MxS32 p_dest,
|
||||
float p_destScale
|
||||
);
|
||||
undefined4 FUN_10046770(LegoPathActor* p_actor);
|
||||
void FUN_100468f0(LegoAnimPresenter* p_presenter);
|
||||
void FUN_10046930(LegoAnimPresenter* p_presenter);
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#ifndef LEGOPATHPRESENTER_H
|
||||
#define LEGOPATHPRESENTER_H
|
||||
|
||||
#include "mxatom.h"
|
||||
#include "mxmediapresenter.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d7c10
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#define LEGOPLANTMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxcore.h"
|
||||
|
||||
class LegoEntity;
|
||||
class LegoROI;
|
||||
class LegoStorage;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6758
|
||||
// SIZE 0x2c
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
#define LEGORACEACTOR_H
|
||||
|
||||
#include "legoanimactor.h"
|
||||
#include "realtime/matrix.h"
|
||||
|
||||
class Matrix4;
|
||||
|
||||
/*
|
||||
VTABLE: LEGO1 0x100d5b78 LegoAnimActor
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
#define LEGORACECAR_H
|
||||
|
||||
#include "legocarraceactor.h"
|
||||
#include "legopathactor.h"
|
||||
#include "legoracemap.h"
|
||||
|
||||
/*
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
#ifndef LEGOSOUNDMANAGER_H
|
||||
#define LEGOSOUNDMANAGER_H
|
||||
|
||||
#include "legocachesoundmanager.h"
|
||||
#include "mxsoundmanager.h"
|
||||
|
||||
class LegoCacheSoundManager;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6b10
|
||||
// SIZE 0x44
|
||||
class LegoSoundManager : public MxSoundManager {
|
||||
|
||||
@ -4,7 +4,6 @@
|
||||
#include "decomp.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxstring.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d46c0
|
||||
// SIZE 0x08
|
||||
|
||||
@ -3,8 +3,12 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
struct AnimInfo;
|
||||
class LegoAnimMMPresenter;
|
||||
class LegoROI;
|
||||
class MxPresenter;
|
||||
|
||||
// SIZE 0x78
|
||||
struct LegoTranInfo {
|
||||
@ -30,7 +34,9 @@ struct LegoTranInfo {
|
||||
m_unk0x2c.SetIdentity();
|
||||
}
|
||||
|
||||
undefined4 m_unk0x00; // 0x00
|
||||
~LegoTranInfo() { delete m_unk0x0c; }
|
||||
|
||||
AnimInfo* m_animInfo; // 0x00
|
||||
MxU32 m_index; // 0x04
|
||||
LegoROI* m_unk0x08; // 0x08
|
||||
MxMatrix* m_unk0x0c; // 0x0c
|
||||
|
||||
@ -3,10 +3,11 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxtypes.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
#include <dsound.h>
|
||||
|
||||
class LegoROI;
|
||||
|
||||
// VTABLE: LEGO1 0x100d5778
|
||||
// SIZE 0x30
|
||||
class LegoUnknown100d5778 {
|
||||
|
||||
@ -1,27 +1,30 @@
|
||||
#ifndef LEGOUTILS_H
|
||||
#define LEGOUTILS_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "extra.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "misc/legotexture.h"
|
||||
#include "mxstring.h"
|
||||
#include "mxtypes.h"
|
||||
#include "mxutilities.h"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
class IslePathActor;
|
||||
class MxAtomId;
|
||||
class LegoEntity;
|
||||
class LegoFile;
|
||||
class LegoAnimPresenter;
|
||||
class LegoNamedTexture;
|
||||
class LegoROI;
|
||||
class LegoTreeNode;
|
||||
|
||||
LegoEntity* PickEntity(MxLong, MxLong);
|
||||
LegoROI* PickROI(MxLong, MxLong);
|
||||
MxS16 CountTotalTreeNodes(LegoTreeNode* p_node);
|
||||
void FUN_1003e050(LegoAnimPresenter* p_presenter);
|
||||
Extra::ActionType MatchActionString(const char*);
|
||||
void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
||||
void SetCameraControllerFromIsle();
|
||||
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
||||
void FUN_1003ecc0(IslePathActor* p_actor, undefined4, undefined4, MxBool);
|
||||
void FUN_1003eda0();
|
||||
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
|
||||
void FUN_1003ef00(MxBool);
|
||||
|
||||
@ -28,7 +28,7 @@ class LegoVehicleBuildState : public LegoState {
|
||||
// SYNTHETIC: LEGO1 0x100260a0
|
||||
// LegoVehicleBuildState::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
// private:
|
||||
Playlist m_unk0x08[4]; // 0x08
|
||||
|
||||
// This can be one of the following:
|
||||
@ -44,8 +44,8 @@ class LegoVehicleBuildState : public LegoState {
|
||||
// * 6 == exit(ing) build screen
|
||||
MxU32 m_animationState; // 0x48
|
||||
undefined m_unk0x4c; // 0x4c
|
||||
undefined m_unk0x4d; // 0x4d
|
||||
undefined m_unk0x4e; // 0x4e
|
||||
MxBool m_unk0x4d; // 0x4d
|
||||
MxBool m_unk0x4e; // 0x4e
|
||||
MxU8 m_placedPartCount; // 0x4f
|
||||
};
|
||||
|
||||
|
||||
@ -1,16 +1,21 @@
|
||||
#ifndef LEGOVIDEOMANAGER_H
|
||||
#define LEGOVIDEOMANAGER_H
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "decomp.h"
|
||||
#include "legophonemelist.h"
|
||||
#include "mxdirectx/mxdirect3d.h"
|
||||
#include "mxdirectx/mxstopwatch.h"
|
||||
#include "mxvideomanager.h"
|
||||
|
||||
#include <ddraw.h>
|
||||
|
||||
class Lego3DManager;
|
||||
class LegoROI;
|
||||
class MxDirect3D;
|
||||
class MxStopWatch;
|
||||
|
||||
namespace Tgl
|
||||
{
|
||||
class Renderer;
|
||||
}
|
||||
|
||||
// VTABLE: LEGO1 0x100d9c88
|
||||
// SIZE 0x590
|
||||
@ -47,6 +52,8 @@ class LegoVideoManager : public MxVideoManager {
|
||||
inline LegoROI* GetViewROI() { return this->m_viewROI; }
|
||||
inline MxDirect3D* GetDirect3D() { return this->m_direct3d; }
|
||||
inline MxBool GetRender3D() { return this->m_render3d; }
|
||||
inline double GetElapsedSeconds() { return this->m_elapsedSeconds; }
|
||||
|
||||
inline void SetRender3D(MxBool p_render3d) { this->m_render3d = p_render3d; }
|
||||
inline void SetUnk0x554(MxBool p_unk0x554) { this->m_unk0x554 = p_unk0x554; }
|
||||
|
||||
|
||||
@ -2,15 +2,14 @@
|
||||
#define LEGOWORLD_H
|
||||
|
||||
#include "legocachesoundlist.h"
|
||||
#include "legocachsound.h"
|
||||
#include "legocameracontroller.h"
|
||||
#include "legoentity.h"
|
||||
#include "legoentitylist.h"
|
||||
#include "legopathcontrollerlist.h"
|
||||
#include "mxpresenter.h"
|
||||
#include "mxpresenterlist.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
class IslePathActor;
|
||||
class LegoCameraController;
|
||||
class LegoPathBoundary;
|
||||
class LegoHideAnimPresenter;
|
||||
|
||||
@ -66,6 +65,14 @@ class LegoWorld : public LegoEntity {
|
||||
|
||||
MxBool PresentersPending();
|
||||
void Remove(MxCore* p_object);
|
||||
MxResult FUN_1001f720(
|
||||
IslePathActor* p_actor,
|
||||
const char* p_path,
|
||||
MxS32 p_src,
|
||||
float p_srcScale,
|
||||
MxS32 p_dest,
|
||||
float p_destScale
|
||||
);
|
||||
undefined4 FUN_1001fa70(IslePathActor* p_actor);
|
||||
undefined4 FUN_1001fb70(
|
||||
IslePathActor* p_actor,
|
||||
|
||||
@ -3,9 +3,6 @@
|
||||
|
||||
#include "compat.h"
|
||||
#include "decomp.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legoomni.h"
|
||||
#include "legovideomanager.h"
|
||||
// Long include path due to dependency of misc library on LegoOmni
|
||||
#include "lego/legoomni/include/actions/actionsfwd.h"
|
||||
#include "mxtypes.h"
|
||||
@ -16,6 +13,7 @@ class LegoBuildingManager;
|
||||
class LegoCharacterManager;
|
||||
class LegoControlManager;
|
||||
class LegoGameState;
|
||||
class LegoInputManager;
|
||||
class LegoNavController;
|
||||
class LegoOmni;
|
||||
class LegoPlantManager;
|
||||
@ -64,10 +62,4 @@ void PlayMusic(JukeboxScript::Script p_script);
|
||||
void SetIsWorldActive(MxBool p_isWorldActive);
|
||||
void DeleteObjects(MxAtomId* p_id, MxS32 p_first, MxS32 p_last);
|
||||
|
||||
// FUNCTION: LEGO1 0x10015890
|
||||
inline MxResult StartActionIfUnknown0x13c(MxDSAction& p_dsAction)
|
||||
{
|
||||
return LegoOmni::GetInstance()->StartActionIfUnknown0x13c(p_dsAction);
|
||||
}
|
||||
|
||||
#endif // MISC_H
|
||||
|
||||
@ -1,13 +1,12 @@
|
||||
#ifndef MXBACKGROUNDAUDIOMANAGER_H
|
||||
#define MXBACKGROUNDAUDIOMANAGER_H
|
||||
|
||||
#include "mxaudiopresenter.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxpresenter.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
class MxAudioPresenter;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9fe8
|
||||
// SIZE 0x150
|
||||
class MxBackgroundAudioManager : public MxCore {
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
#include "decomp.h"
|
||||
#include "isleactor.h"
|
||||
|
||||
class SkateBoard;
|
||||
|
||||
// VTABLE: LEGO1 0x100d7380
|
||||
// SIZE 0x9c
|
||||
class Pizza : public IsleActor {
|
||||
@ -31,18 +33,23 @@ class Pizza : public IsleActor {
|
||||
undefined4 HandleEndAction(MxEndActionNotificationParam&) override; // vtable+0x74
|
||||
undefined4 VTable0x80(MxParam&) override; // vtable+0x80
|
||||
|
||||
void FUN_100382b0();
|
||||
void FUN_10038380();
|
||||
|
||||
inline void SetSkateboard(SkateBoard* p_skateboard) { m_skateboard = p_skateboard; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100380e0
|
||||
// Pizza::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
undefined4 m_unk0x7c; // 0x7c
|
||||
undefined4 m_unk0x80; // 0x80
|
||||
undefined4 m_unk0x84; // 0x84
|
||||
undefined4 m_unk0x88; // 0x88
|
||||
undefined4 m_unk0x8c; // 0x8c
|
||||
undefined4 m_unk0x90; // 0x90
|
||||
undefined4 m_unk0x94; // 0x94
|
||||
undefined m_unk0x98; // 0x98
|
||||
undefined4 m_unk0x7c; // 0x7c
|
||||
undefined4 m_unk0x80; // 0x80
|
||||
SkateBoard* m_skateboard; // 0x84
|
||||
undefined4 m_unk0x88; // 0x88
|
||||
undefined4 m_unk0x8c; // 0x8c
|
||||
undefined4 m_unk0x90; // 0x90
|
||||
undefined4 m_unk0x94; // 0x94
|
||||
undefined m_unk0x98; // 0x98
|
||||
};
|
||||
|
||||
#endif // PIZZA_H
|
||||
|
||||
@ -2,12 +2,13 @@
|
||||
#define POLICE_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "radio.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
class LegoEventNotificationParam;
|
||||
class MxDSAction;
|
||||
class PoliceState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d8a80
|
||||
|
||||
@ -4,7 +4,6 @@
|
||||
#include "actionsfwd.h"
|
||||
#include "decomp.h"
|
||||
#include "legostate.h"
|
||||
#include "police.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d8af0
|
||||
// SIZE 0x10
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
#ifndef RADIO_H
|
||||
#define RADIO_H
|
||||
|
||||
#include "legocontrolmanager.h"
|
||||
#include "mxactionnotificationparam.h"
|
||||
#include "mxcore.h"
|
||||
#include "radiostate.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
class MxEndActionNotificationParam;
|
||||
class RadioState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6d10
|
||||
// SIZE 0x10
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
#define RADIOSTATE_H
|
||||
|
||||
#include "legostate.h"
|
||||
#include "mxdsaction.h"
|
||||
|
||||
class MxAtomId;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6d28
|
||||
// SIZE 0x30
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
#ifndef REGISTRATIONBOOK_H
|
||||
#define REGISTRATIONBOOK_H
|
||||
|
||||
#include "jukebox.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxcontrolpresenter.h"
|
||||
#include "mxstillpresenter.h"
|
||||
|
||||
class InfocenterState;
|
||||
class MxControlPresenter;
|
||||
class MxEndActionNotificationParam;
|
||||
class MxStillPresenter;
|
||||
class LegoControlManagerEvent;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9928
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
#ifndef SCORE_H
|
||||
#define SCORE_H
|
||||
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legoeventnotificationparam.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxactionnotificationparam.h"
|
||||
#include "scorestate.h"
|
||||
|
||||
class LegoControlManagerEvent;
|
||||
class MxEndActionNotificationParam;
|
||||
class ScoreState;
|
||||
|
||||
// VTABLE: LEGO1 0x100d4018
|
||||
// SIZE 0x104
|
||||
|
||||
39
LEGO1/lego/legoomni/include/scripts.h
Normal file
39
LEGO1/lego/legoomni/include/scripts.h
Normal file
@ -0,0 +1,39 @@
|
||||
#ifndef SCRIPTS_H
|
||||
#define SCRIPTS_H
|
||||
|
||||
class MxAtomId;
|
||||
|
||||
extern MxAtomId* g_copterScript;
|
||||
extern MxAtomId* g_dunecarScript;
|
||||
extern MxAtomId* g_jetskiScript;
|
||||
extern MxAtomId* g_racecarScript;
|
||||
extern MxAtomId* g_carraceScript;
|
||||
extern MxAtomId* g_carracerScript;
|
||||
extern MxAtomId* g_jetraceScript;
|
||||
extern MxAtomId* g_jetracerScript;
|
||||
extern MxAtomId* g_isleScript;
|
||||
extern MxAtomId* g_elevbottScript;
|
||||
extern MxAtomId* g_infodoorScript;
|
||||
extern MxAtomId* g_infomainScript;
|
||||
extern MxAtomId* g_infoscorScript;
|
||||
extern MxAtomId* g_regbookScript;
|
||||
extern MxAtomId* g_histbookScript;
|
||||
extern MxAtomId* g_hospitalScript;
|
||||
extern MxAtomId* g_policeScript;
|
||||
extern MxAtomId* g_garageScript;
|
||||
extern MxAtomId* g_act2mainScript;
|
||||
extern MxAtomId* g_act3Script;
|
||||
extern MxAtomId* g_jukeboxScript;
|
||||
extern MxAtomId* g_pz5Script;
|
||||
extern MxAtomId* g_introScript;
|
||||
extern MxAtomId* g_testScript;
|
||||
extern MxAtomId* g_jukeboxwScript;
|
||||
extern MxAtomId* g_sndAnimScript;
|
||||
extern MxAtomId* g_creditsScript;
|
||||
extern MxAtomId* g_nocdSourceName;
|
||||
|
||||
void CreateScripts();
|
||||
void DestroyScripts();
|
||||
const char* GetNoCD_SourceName();
|
||||
|
||||
#endif // SCRIPTS_H
|
||||
@ -4,11 +4,14 @@
|
||||
#include "decomp.h"
|
||||
#include "islepathactor.h"
|
||||
|
||||
class Act1State;
|
||||
|
||||
// VTABLE: LEGO1 0x100d55f0
|
||||
// SIZE 0x168
|
||||
class SkateBoard : public IslePathActor {
|
||||
public:
|
||||
SkateBoard();
|
||||
~SkateBoard() override;
|
||||
|
||||
// FUNCTION: LEGO1 0x1000fdd0
|
||||
inline const char* ClassName() const override // vtable+0x0c
|
||||
@ -35,9 +38,10 @@ class SkateBoard : public IslePathActor {
|
||||
// SkateBoard::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
// TODO: SkateBoard types
|
||||
undefined m_unk0x160;
|
||||
undefined m_unk0x161[0x7];
|
||||
void FUN_10010270(MxBool p_enable);
|
||||
|
||||
MxBool m_unk0x160; // 0x160
|
||||
Act1State* m_act1state; // 0x164
|
||||
};
|
||||
|
||||
#endif // SKATEBOARD_H
|
||||
|
||||
@ -23,14 +23,14 @@ class TowTrack : public IslePathActor {
|
||||
return !strcmp(p_name, TowTrack::ClassName()) || IslePathActor::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void VTable0x70(float p_float) override; // vtable+0x70
|
||||
MxU32 VTable0xcc() override; // vtable+0xcc
|
||||
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
|
||||
MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8
|
||||
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
|
||||
void VTable0xe4() override; // vtable+0xe4
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void VTable0x70(float p_float) override; // vtable+0x70
|
||||
MxU32 VTable0xcc() override; // vtable+0xcc
|
||||
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
|
||||
MxU32 VTable0xd8(LegoEndAnimNotificationParam& p_param) override; // vtable+0xd8
|
||||
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
|
||||
void VTable0xe4() override; // vtable+0xe4
|
||||
|
||||
void FUN_1004dab0();
|
||||
void FUN_1004dad0();
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "act1state.h"
|
||||
|
||||
#include "legonamedtexture.h"
|
||||
#include "legoutils.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(Act1State, 0x26c)
|
||||
@ -25,7 +26,7 @@ Act1State::Act1State() : m_unk0x00c(0), m_unk0x00e(0), m_unk0x008(NULL), m_unk0x
|
||||
m_unk0x01f = FALSE;
|
||||
m_unk0x008 = g_unk0x100f37f0;
|
||||
m_unk0x014 = -1;
|
||||
m_unk0x022 = 0;
|
||||
m_unk0x022 = FALSE;
|
||||
m_unk0x154 = NULL;
|
||||
m_unk0x158 = NULL;
|
||||
m_unk0x15c = NULL;
|
||||
@ -122,8 +123,8 @@ MxResult Act1State::Serialize(LegoFile* p_legoFile)
|
||||
}
|
||||
}
|
||||
|
||||
p_legoFile->Write(&m_unk0x010, sizeof(undefined2));
|
||||
p_legoFile->Write(&m_unk0x022, sizeof(undefined));
|
||||
p_legoFile->Write(&m_unk0x010, sizeof(m_unk0x010));
|
||||
p_legoFile->Write(&m_unk0x022, sizeof(m_unk0x022));
|
||||
}
|
||||
else if (p_legoFile->IsReadMode()) {
|
||||
if (m_unk0x108.GetName()->Compare("") != 0) {
|
||||
@ -176,8 +177,8 @@ MxResult Act1State::Serialize(LegoFile* p_legoFile)
|
||||
}
|
||||
}
|
||||
|
||||
p_legoFile->Read(&m_unk0x010, sizeof(undefined2));
|
||||
p_legoFile->Read(&m_unk0x022, sizeof(undefined));
|
||||
p_legoFile->Read(&m_unk0x010, sizeof(m_unk0x010));
|
||||
p_legoFile->Read(&m_unk0x022, sizeof(m_unk0x022));
|
||||
}
|
||||
|
||||
// TODO
|
||||
@ -205,7 +206,7 @@ MxBool Act1State::SetFlag()
|
||||
m_unk0x024.SetName("");
|
||||
m_unk0x070.SetName("");
|
||||
m_unk0x0bc.SetName("");
|
||||
m_unk0x022 = 0;
|
||||
m_unk0x022 = FALSE;
|
||||
m_unk0x108.SetName("");
|
||||
|
||||
if (m_unk0x154) {
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
#include "ambulance.h"
|
||||
|
||||
#include "ambulancemissionstate.h"
|
||||
#include "decomp.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legovariables.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxticklemanager.h"
|
||||
#include "mxtimer.h"
|
||||
#include "mxvariabletable.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(Ambulance, 0x184)
|
||||
|
||||
|
||||
@ -3,10 +3,10 @@
|
||||
#include "isle_actions.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoutils.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(Bike, 0x164)
|
||||
|
||||
|
||||
@ -3,18 +3,20 @@
|
||||
#include "act1state.h"
|
||||
#include "act3.h"
|
||||
#include "act3_actions.h"
|
||||
#include "helicopterstate.h"
|
||||
#include "isle.h"
|
||||
#include "isle_actions.h"
|
||||
#include "jukebox.h"
|
||||
#include "jukebox_actions.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legocameracontroller.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoutils.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(Helicopter, 0x230)
|
||||
DECOMP_SIZE_ASSERT(Mx3DPointFloat, 0x14)
|
||||
@ -64,17 +66,23 @@ void Helicopter::GetState()
|
||||
void Helicopter::VTable0xe4()
|
||||
{
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
VTable0xe8(LegoGameState::e_unk40, TRUE, 7);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk40,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
|
||||
IslePathActor::VTable0xe4();
|
||||
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
GameState()->SetCurrentArea(LegoGameState::e_copter);
|
||||
if (CurrentActor()) {
|
||||
if (CurrentActor()->IsA("IslePathActor")) {
|
||||
((IslePathActor*) CurrentActor())->VTable0xe8(LegoGameState::e_unk55, TRUE, 7);
|
||||
}
|
||||
if (CurrentActor() && CurrentActor()->IsA("IslePathActor")) {
|
||||
CurrentActor()->SpawnPlayer(
|
||||
LegoGameState::e_unk55,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,8 +123,12 @@ MxU32 Helicopter::VTable0xcc()
|
||||
switch (GameState()->GetCurrentAct()) {
|
||||
case LegoGameState::e_act1:
|
||||
m_script = *g_isleScript;
|
||||
AnimationManager()->FUN_10064670(FALSE);
|
||||
VTable0xe8(LegoGameState::e_unk41, TRUE, 7);
|
||||
AnimationManager()->FUN_10064670(NULL);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk41,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::e_copter);
|
||||
FUN_10015820(TRUE, 0);
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, TRUE);
|
||||
@ -248,7 +260,7 @@ MxU32 Helicopter::VTable0xd4(LegoControlManagerEvent& p_param)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003c20
|
||||
MxU32 Helicopter::VTable0xd8(MxType18NotificationParam& p_param)
|
||||
MxU32 Helicopter::VTable0xd8(LegoEndAnimNotificationParam& p_param)
|
||||
{
|
||||
MxU32 ret = 0;
|
||||
|
||||
@ -256,10 +268,18 @@ MxU32 Helicopter::VTable0xd8(MxType18NotificationParam& p_param)
|
||||
case 1: {
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(4);
|
||||
VTable0xe8(LegoGameState::e_unk42, TRUE, 7);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk42,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
else {
|
||||
VTable0xe8(LegoGameState::e_unk49, TRUE, 7);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk49,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
|
||||
m_state->SetUnknown8(2);
|
||||
@ -293,10 +313,18 @@ MxU32 Helicopter::VTable0xd8(MxType18NotificationParam& p_param)
|
||||
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(0);
|
||||
VTable0xe8(LegoGameState::e_unk41, TRUE, 7);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk41,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
else {
|
||||
VTable0xe8(LegoGameState::e_unk48, TRUE, 7);
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk48,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
}
|
||||
|
||||
m_state->SetUnknown8(0);
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
#include "isleactor.h"
|
||||
|
||||
#include "legoentity.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxnotificationparam.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(IsleActor, 0x7c)
|
||||
|
||||
@ -45,7 +45,7 @@ MxLong IsleActor::Notify(MxParam& p_param)
|
||||
case c_notificationType11:
|
||||
result = VTable0x68();
|
||||
break;
|
||||
case c_notificationType18:
|
||||
case c_notificationEndAnim:
|
||||
result = VTable0x70();
|
||||
break;
|
||||
case c_notificationType19:
|
||||
|
||||
@ -1,13 +1,25 @@
|
||||
#include "islepathactor.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "isle_actions.h"
|
||||
#include "jukebox_actions.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legonavcontroller.h"
|
||||
#include "legopathboundary.h"
|
||||
#include "legoutils.h"
|
||||
#include "legovehiclebuildstate.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxnotificationparam.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(IslePathActor, 0x160)
|
||||
DECOMP_SIZE_ASSERT(IslePathActor::SpawnLocation, 0x38)
|
||||
|
||||
// GLOBAL: LEGO1 0x10102b28
|
||||
IslePathActor::SpawnLocation g_spawnLocations[IslePathActor::c_LOCATIONS_NUM];
|
||||
|
||||
// FUNCTION: LEGO1 0x1001a200
|
||||
IslePathActor::IslePathActor()
|
||||
@ -47,8 +59,8 @@ MxLong IslePathActor::Notify(MxParam& p_param)
|
||||
case c_notificationClick:
|
||||
ret = VTable0xd4((LegoControlManagerEvent&) p_param);
|
||||
break;
|
||||
case c_notificationType18:
|
||||
ret = VTable0xd8((MxType18NotificationParam&) p_param);
|
||||
case c_notificationEndAnim:
|
||||
ret = VTable0xd8((LegoEndAnimNotificationParam&) p_param);
|
||||
break;
|
||||
case c_notificationType19:
|
||||
ret = VTable0xdc((MxType19NotificationParam&) p_param);
|
||||
@ -90,10 +102,454 @@ void IslePathActor::VTable0xe4()
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1001b2a0
|
||||
void IslePathActor::VTable0xe8(LegoGameState::Area, MxBool, MxU8)
|
||||
// FUNCTION: LEGO1 0x1001a700
|
||||
void IslePathActor::RegisterSpawnLocations()
|
||||
{
|
||||
// TODO
|
||||
g_spawnLocations[0] = SpawnLocation(
|
||||
LegoGameState::e_pizzeriaExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"int35",
|
||||
2,
|
||||
0.6,
|
||||
4,
|
||||
0.4,
|
||||
0x2a,
|
||||
JukeboxScript::c_Quiet_Audio
|
||||
);
|
||||
g_spawnLocations[1] = SpawnLocation(
|
||||
LegoGameState::e_unk23,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg00_49",
|
||||
1,
|
||||
0.43,
|
||||
2,
|
||||
0.6,
|
||||
0x27,
|
||||
JukeboxScript::c_Quiet_Audio
|
||||
);
|
||||
g_spawnLocations[2] = SpawnLocation(
|
||||
LegoGameState::e_unk24,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg00_191",
|
||||
2,
|
||||
0.5,
|
||||
0,
|
||||
0.55,
|
||||
0x26,
|
||||
JukeboxScript::c_Quiet_Audio
|
||||
);
|
||||
g_spawnLocations[3] = SpawnLocation(
|
||||
LegoGameState::e_unk4,
|
||||
g_isleScript,
|
||||
0,
|
||||
"int46",
|
||||
0,
|
||||
0.5,
|
||||
2,
|
||||
0.5,
|
||||
0x10,
|
||||
JukeboxScript::c_InformationCenter_Music
|
||||
);
|
||||
g_spawnLocations[4] = SpawnLocation(
|
||||
LegoGameState::e_jetraceExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG00_46",
|
||||
0,
|
||||
0.95,
|
||||
2,
|
||||
0.19,
|
||||
0x17,
|
||||
JukeboxScript::c_Beach_Music
|
||||
);
|
||||
g_spawnLocations[5] = SpawnLocation(
|
||||
LegoGameState::e_unk17,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG00_46",
|
||||
3,
|
||||
0.625,
|
||||
2,
|
||||
0.03,
|
||||
0x18,
|
||||
JukeboxScript::c_Beach_Music
|
||||
);
|
||||
g_spawnLocations[6] = SpawnLocation(
|
||||
LegoGameState::e_jetrace2,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG10_63",
|
||||
0,
|
||||
0.26,
|
||||
1,
|
||||
0.01,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[7] = SpawnLocation(
|
||||
LegoGameState::e_carraceExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT15",
|
||||
5,
|
||||
0.65,
|
||||
1,
|
||||
0.68,
|
||||
0x33,
|
||||
JukeboxScript::c_CentralNorthRoad_Music
|
||||
);
|
||||
g_spawnLocations[8] = SpawnLocation(
|
||||
LegoGameState::e_unk20,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT16",
|
||||
4,
|
||||
0.1,
|
||||
2,
|
||||
0,
|
||||
0x34,
|
||||
JukeboxScript::c_CentralNorthRoad_Music
|
||||
);
|
||||
g_spawnLocations[9] = SpawnLocation(
|
||||
LegoGameState::e_unk21,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT62",
|
||||
2,
|
||||
0.1,
|
||||
3,
|
||||
0.7,
|
||||
0x36,
|
||||
JukeboxScript::c_CentralNorthRoad_Music
|
||||
);
|
||||
g_spawnLocations[10] = SpawnLocation(
|
||||
LegoGameState::e_garageExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT24",
|
||||
0,
|
||||
0.55,
|
||||
2,
|
||||
0.71,
|
||||
0x08,
|
||||
JukeboxScript::c_GarageArea_Music
|
||||
);
|
||||
g_spawnLocations[11] = SpawnLocation(
|
||||
LegoGameState::e_unk28,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT24",
|
||||
2,
|
||||
0.73,
|
||||
4,
|
||||
0.71,
|
||||
0x0a,
|
||||
JukeboxScript::c_GarageArea_Music
|
||||
);
|
||||
g_spawnLocations[12] = SpawnLocation(
|
||||
LegoGameState::e_hospitalExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT19",
|
||||
0,
|
||||
0.85,
|
||||
1,
|
||||
0.28,
|
||||
0,
|
||||
JukeboxScript::c_Hospital_Music
|
||||
);
|
||||
g_spawnLocations[13] = SpawnLocation(
|
||||
LegoGameState::e_unk31,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG02_28",
|
||||
3,
|
||||
0.37,
|
||||
1,
|
||||
0.52,
|
||||
0x0c,
|
||||
JukeboxScript::c_Hospital_Music
|
||||
);
|
||||
g_spawnLocations[14] = SpawnLocation(
|
||||
LegoGameState::e_policeExterior,
|
||||
g_isleScript,
|
||||
0,
|
||||
"INT33",
|
||||
0,
|
||||
0.88,
|
||||
2,
|
||||
0.74,
|
||||
0x22,
|
||||
JukeboxScript::c_PoliceStation_Music
|
||||
);
|
||||
g_spawnLocations[15] = SpawnLocation(
|
||||
LegoGameState::e_unk33,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG02_64",
|
||||
2,
|
||||
0.24,
|
||||
0,
|
||||
0.84,
|
||||
0x23,
|
||||
JukeboxScript::c_PoliceStation_Music
|
||||
);
|
||||
g_spawnLocations[16] = SpawnLocation(
|
||||
LegoGameState::e_unk40,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_51",
|
||||
2,
|
||||
0.63,
|
||||
3,
|
||||
0.01,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[17] = SpawnLocation(
|
||||
LegoGameState::e_unk41,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_51",
|
||||
2,
|
||||
0.63,
|
||||
0,
|
||||
0.4,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[18] = SpawnLocation(
|
||||
LegoGameState::e_unk43,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_35",
|
||||
2,
|
||||
0.8,
|
||||
0,
|
||||
0.2,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[19] = SpawnLocation(
|
||||
LegoGameState::e_unk44,
|
||||
g_isleScript,
|
||||
0,
|
||||
"EDG03_01",
|
||||
2,
|
||||
0.25,
|
||||
0,
|
||||
0.75,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[20] = SpawnLocation(
|
||||
LegoGameState::e_unk45,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg10_70",
|
||||
3,
|
||||
0.25,
|
||||
0,
|
||||
0.7,
|
||||
0x44,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[21] = SpawnLocation(
|
||||
LegoGameState::e_unk42,
|
||||
g_isleScript,
|
||||
0,
|
||||
"inv_05",
|
||||
2,
|
||||
0.75,
|
||||
0,
|
||||
0.19,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[22] = SpawnLocation(
|
||||
LegoGameState::e_unk48,
|
||||
g_act3Script,
|
||||
0,
|
||||
"edg02_51",
|
||||
2,
|
||||
0.63,
|
||||
0,
|
||||
0.4,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[23] = SpawnLocation(
|
||||
LegoGameState::e_unk49,
|
||||
g_act3Script,
|
||||
0,
|
||||
"inv_05",
|
||||
2,
|
||||
0.75,
|
||||
0,
|
||||
0.19,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[24] = SpawnLocation(
|
||||
LegoGameState::e_unk50,
|
||||
g_act2mainScript,
|
||||
0,
|
||||
"EDG02_51",
|
||||
0,
|
||||
0.64,
|
||||
1,
|
||||
0.37,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[25] = SpawnLocation(
|
||||
LegoGameState::e_unk51,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_32",
|
||||
0,
|
||||
0.5,
|
||||
2,
|
||||
0.5,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[26] = SpawnLocation(
|
||||
LegoGameState::e_unk52,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_19",
|
||||
2,
|
||||
0.5,
|
||||
0,
|
||||
0.5,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[27] = SpawnLocation(
|
||||
LegoGameState::e_unk54,
|
||||
g_isleScript,
|
||||
0,
|
||||
"int36",
|
||||
0,
|
||||
0.2,
|
||||
4,
|
||||
0.4,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
g_spawnLocations[28] = SpawnLocation(
|
||||
LegoGameState::e_unk55,
|
||||
g_isleScript,
|
||||
0,
|
||||
"edg02_50",
|
||||
2,
|
||||
0.8,
|
||||
1,
|
||||
0.3,
|
||||
0,
|
||||
JukeboxScript::c_noneJukebox
|
||||
);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b2a0
|
||||
// FUNCTION: BETA10 0x100369c6
|
||||
void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p_flags)
|
||||
{
|
||||
MxS16 i;
|
||||
|
||||
for (i = 0; i < c_LOCATIONS_NUM && g_spawnLocations[i].m_area != p_area; i++) {
|
||||
}
|
||||
|
||||
assert(i != c_LOCATIONS_NUM);
|
||||
|
||||
if (i != c_LOCATIONS_NUM) {
|
||||
LegoWorld* world = FindWorld(*g_spawnLocations[i].m_script, g_spawnLocations[i].m_entityId);
|
||||
assert(world);
|
||||
|
||||
if (m_world != NULL) {
|
||||
m_world->FUN_1001fc80(this);
|
||||
m_world->Remove(this);
|
||||
VideoManager()->Get3DManager()->Remove(*m_roi);
|
||||
}
|
||||
|
||||
m_world = world;
|
||||
|
||||
if (p_und) {
|
||||
VTable0xe0();
|
||||
}
|
||||
|
||||
m_world->FUN_1001f720(
|
||||
this,
|
||||
g_spawnLocations[i].m_path,
|
||||
g_spawnLocations[i].m_src,
|
||||
g_spawnLocations[i].m_srcScale,
|
||||
g_spawnLocations[i].m_dest,
|
||||
g_spawnLocations[i].m_destScale
|
||||
);
|
||||
|
||||
if (GameState()->GetActorId() != m_actorId) {
|
||||
m_world->Add(this);
|
||||
}
|
||||
|
||||
LegoVehicleBuildState* state = NULL;
|
||||
|
||||
if (p_flags & c_spawnBit1) {
|
||||
MxBool und = FALSE;
|
||||
IsleScript::Script anim;
|
||||
|
||||
switch (g_spawnLocations[i].m_unk0x30) {
|
||||
case 0x00:
|
||||
case 0x44:
|
||||
break;
|
||||
case 0x0a:
|
||||
state = (LegoVehicleBuildState*) GameState()->GetState("LegoDuneCarBuildState");
|
||||
anim = IsleScript::c_igs008na_RunAnim;
|
||||
break;
|
||||
case 0x18:
|
||||
state = (LegoVehicleBuildState*) GameState()->GetState("LegoJetskiBuildState");
|
||||
anim = IsleScript::c_ijs006sn_RunAnim;
|
||||
break;
|
||||
case 0x23:
|
||||
state = (LegoVehicleBuildState*) GameState()->GetState("LegoCopterBuildState");
|
||||
anim = IsleScript::c_ips002ro_RunAnim;
|
||||
break;
|
||||
case 0x34:
|
||||
state = (LegoVehicleBuildState*) GameState()->GetState("LegoRaceCarBuildState");
|
||||
anim = IsleScript::c_irt007in_RunAnim;
|
||||
break;
|
||||
default:
|
||||
und = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (state != NULL && state->m_unk0x4d && !state->m_unk0x4e) {
|
||||
if (AnimationManager()->FUN_10060dc0(anim, NULL, TRUE, FALSE, NULL, FALSE, TRUE, TRUE, TRUE) ==
|
||||
SUCCESS) {
|
||||
state->m_unk0x4e = TRUE;
|
||||
und = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (und) {
|
||||
FUN_1003ecc0(this, 0, g_spawnLocations[i].m_unk0x30, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_cameraFlag) {
|
||||
FUN_1003eda0();
|
||||
}
|
||||
|
||||
if (p_flags & c_playMusic && g_spawnLocations[i].m_music != JukeboxScript::c_noneJukebox) {
|
||||
MxDSAction action;
|
||||
action.SetAtomId(*g_jukeboxScript);
|
||||
action.SetObjectId(g_spawnLocations[i].m_music);
|
||||
BackgroundAudioManager()->PlayMusic(action, 5, 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001b5b0
|
||||
|
||||
@ -6,13 +6,14 @@
|
||||
#include "jukebox_actions.h"
|
||||
#include "jukeboxstate.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoutils.h"
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxnotificationparam.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(JukeBoxEntity, 0x6c)
|
||||
|
||||
|
||||
@ -8,13 +8,13 @@ DECOMP_SIZE_ASSERT(Pizza, 0x9c)
|
||||
// FUNCTION: LEGO1 0x10037ef0
|
||||
Pizza::Pizza()
|
||||
{
|
||||
this->m_unk0x7c = 0;
|
||||
this->m_unk0x80 = 0;
|
||||
this->m_unk0x84 = 0;
|
||||
this->m_unk0x88 = 0;
|
||||
this->m_unk0x8c = -1;
|
||||
this->m_unk0x98 = 0;
|
||||
this->m_unk0x90 = 0x80000000;
|
||||
m_unk0x7c = 0;
|
||||
m_unk0x80 = 0;
|
||||
m_skateboard = NULL;
|
||||
m_unk0x88 = 0;
|
||||
m_unk0x8c = -1;
|
||||
m_unk0x98 = 0;
|
||||
m_unk0x90 = 0x80000000;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10038100
|
||||
@ -30,6 +30,16 @@ MxResult Pizza::Create(MxDSAction& p_dsAction)
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100382b0
|
||||
void Pizza::FUN_100382b0()
|
||||
{
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10038380
|
||||
void Pizza::FUN_10038380()
|
||||
{
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100383f0
|
||||
undefined4 Pizza::VTable0x68()
|
||||
{
|
||||
|
||||
@ -3,12 +3,15 @@
|
||||
#include "isle_actions.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxactionnotificationparam.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxcontrolpresenter.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "radiostate.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(Radio, 0x10)
|
||||
|
||||
@ -80,7 +83,7 @@ void Radio::Stop()
|
||||
if (m_state->IsActive()) {
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
MxControlPresenter* presenter = (MxControlPresenter*) world->Find(world->GetAtom(), 18);
|
||||
MxControlPresenter* presenter = (MxControlPresenter*) world->Find(world->GetAtom(), IsleScript::c_Radio_Ctl);
|
||||
|
||||
if (presenter) {
|
||||
presenter->VTable0x6c(0);
|
||||
|
||||
@ -1,58 +1,165 @@
|
||||
#include "skateboard.h"
|
||||
|
||||
#include "act1state.h"
|
||||
#include "decomp.h"
|
||||
#include "isle.h"
|
||||
#include "isle_actions.h"
|
||||
#include "jukebox_actions.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legoutils.h"
|
||||
#include "misc.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxstillpresenter.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
#include "pizza.h"
|
||||
#include "scripts.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(SkateBoard, 0x168)
|
||||
|
||||
// FUNCTION: LEGO1 0x1000fd40
|
||||
SkateBoard::SkateBoard()
|
||||
{
|
||||
this->m_unk0x160 = 0;
|
||||
this->m_unk0x13c = 15.0;
|
||||
this->m_unk0x150 = 3.5;
|
||||
this->m_unk0x148 = 1;
|
||||
m_unk0x160 = FALSE;
|
||||
m_unk0x13c = 15.0;
|
||||
m_unk0x150 = 3.5;
|
||||
m_unk0x148 = 1;
|
||||
|
||||
NotificationManager()->Register(this);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10010000
|
||||
// FUNCTION: LEGO1 0x1000ff80
|
||||
SkateBoard::~SkateBoard()
|
||||
{
|
||||
ControlManager()->Unregister(this);
|
||||
NotificationManager()->Unregister(this);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10010000
|
||||
MxResult SkateBoard::Create(MxDSAction& p_dsAction)
|
||||
{
|
||||
// TODO
|
||||
return SUCCESS;
|
||||
MxResult result = IslePathActor::Create(p_dsAction);
|
||||
|
||||
if (result == SUCCESS) {
|
||||
m_world = CurrentWorld();
|
||||
m_world->Add(this);
|
||||
|
||||
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
|
||||
if (pizza) {
|
||||
pizza->SetSkateboard(this);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10010050
|
||||
// FUNCTION: LEGO1 0x10010050
|
||||
void SkateBoard::VTable0xe4()
|
||||
{
|
||||
// TODO
|
||||
if (m_act1state->m_unk0x018 == 3) {
|
||||
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
|
||||
pizza->FUN_10038380();
|
||||
pizza->FUN_100382b0();
|
||||
m_unk0x160 = FALSE;
|
||||
}
|
||||
|
||||
IslePathActor::VTable0xe4();
|
||||
GameState()->m_currentArea = LegoGameState::Area::e_skateboard;
|
||||
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_SkateArms_Ctl);
|
||||
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_SkatePizza_Bitmap);
|
||||
ControlManager()->Unregister(this);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100100e0
|
||||
// FUNCTION: LEGO1 0x100100e0
|
||||
MxU32 SkateBoard::VTable0xcc()
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
Act1State* state = (Act1State*) GameState()->GetState("Act1State");
|
||||
|
||||
if (!FUN_1003ef60() && state->m_unk0x018 != 3) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
FUN_10015820(TRUE, 0);
|
||||
|
||||
((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::Area::e_skateboard);
|
||||
TransitionManager()->StartTransition(MxTransitionManager::TransitionType::e_mosaic, 50, FALSE, TRUE);
|
||||
|
||||
if (GameState()->GetActorId() != CurrentActor()->GetActorId()) {
|
||||
if (!CurrentActor()->IsA("SkateBoard")) {
|
||||
CurrentActor()->VTable0xe4();
|
||||
}
|
||||
}
|
||||
|
||||
if (!CurrentActor()->IsA("SkateBoard")) {
|
||||
VTable0xe0();
|
||||
InvokeAction(Extra::ActionType::e_start, *g_isleScript, IsleScript::c_SkateDashboard, NULL);
|
||||
GetCurrentAction().SetObjectId(-1);
|
||||
ControlManager()->Register(this);
|
||||
}
|
||||
|
||||
FUN_10010270(m_unk0x160);
|
||||
|
||||
Vector3 position = m_roi->GetWorldPosition();
|
||||
AnimationManager()->FUN_10064670(&position);
|
||||
AnimationManager()->FUN_10064740(&position);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10010230
|
||||
// FUNCTION: LEGO1 0x10010230
|
||||
MxU32 SkateBoard::VTable0xd4(LegoControlManagerEvent& p_param)
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
MxU32 result = 0;
|
||||
|
||||
if (p_param.GetUnknown0x28() == 1 && p_param.GetClickedObjectId() == IsleScript::c_SkateArms_Ctl) {
|
||||
VTable0xe4();
|
||||
GameState()->m_currentArea = LegoGameState::Area::e_unk66;
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100104f0
|
||||
// FUNCTION: LEGO1 0x10010270
|
||||
// FUNCTION: BETA10 0x100f5366
|
||||
void SkateBoard::FUN_10010270(MxBool p_enable)
|
||||
{
|
||||
m_act1state = (Act1State*) GameState()->GetState("Act1State");
|
||||
if (!m_act1state) {
|
||||
m_act1state = (Act1State*) GameState()->CreateState("Act1State");
|
||||
}
|
||||
|
||||
MxStillPresenter* presenter = (MxStillPresenter*) m_world->Find(*g_isleScript, IsleScript::c_SkatePizza_Bitmap);
|
||||
if (presenter) {
|
||||
presenter->Enable(p_enable);
|
||||
}
|
||||
else if (m_unk0x160) {
|
||||
NotificationManager()->Send(this, MxNotificationParam(c_notificationType0, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100104f0
|
||||
// FUNCTION: BETA10 0x100f5472
|
||||
MxU32 SkateBoard::VTable0xd0()
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
FUN_10010270(m_unk0x160);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10010510
|
||||
// FUNCTION: LEGO1 0x10010510
|
||||
void SkateBoard::FUN_10010510()
|
||||
{
|
||||
// TODO
|
||||
if (m_act1state->m_unk0x018 != 3) {
|
||||
PlayMusic(JukeboxScript::c_BeachBlvd_Music);
|
||||
|
||||
if (!m_act1state->m_unk0x022) {
|
||||
m_act1state->m_unk0x022 = TRUE;
|
||||
|
||||
MxMatrix mat(CurrentActor()->GetROI()->GetLocal2World());
|
||||
mat.TranslateBy(mat[2][0] * 2.5, mat[2][1] + 0.2, mat[2][2] * 2.5);
|
||||
|
||||
AnimationManager()
|
||||
->FUN_10060dc0(IsleScript::c_sns008in_RunAnim, &mat, TRUE, FALSE, NULL, FALSE, TRUE, TRUE, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ MxLong TowTrack::Notify(MxParam& p_param)
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1004cd30
|
||||
MxU32 TowTrack::VTable0xd8(MxType18NotificationParam& p_param)
|
||||
MxU32 TowTrack::VTable0xd8(LegoEndAnimNotificationParam& p_param)
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
#include "legoloadcachesoundpresenter.h"
|
||||
|
||||
#include "legocachesoundmanager.h"
|
||||
#include "legocachsound.h"
|
||||
#include "legosoundmanager.h"
|
||||
#include "misc.h"
|
||||
#include "mxdssubscriber.h"
|
||||
#include "mxstreamchunk.h"
|
||||
#include "mxwavepresenter.h"
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "legosoundmanager.h"
|
||||
|
||||
#include "legocachesoundmanager.h"
|
||||
#include "mxautolock.h"
|
||||
#include "mxomni.h"
|
||||
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
|
||||
#include "legoomni.h"
|
||||
#include "legomain.h"
|
||||
#include "misc.h"
|
||||
#include "mxaudiopresenter.h"
|
||||
#include "mxcompositepresenter.h"
|
||||
#include "mxdssound.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxpresenter.h"
|
||||
#include "mxstreamer.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxnotificationparam.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(BuildingEntity, 0x68)
|
||||
|
||||
|
||||
@ -9,8 +9,8 @@ LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType)
|
||||
{
|
||||
this->m_className = p_classType;
|
||||
this->m_unk0x4c = 0;
|
||||
this->m_unk0x4d = 0;
|
||||
this->m_unk0x4e = 0;
|
||||
this->m_unk0x4d = FALSE;
|
||||
this->m_unk0x4e = FALSE;
|
||||
this->m_placedPartCount = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -2,13 +2,15 @@
|
||||
|
||||
#include "define.h"
|
||||
#include "extra.h"
|
||||
#include "legoomni.h"
|
||||
#include "legomain.h"
|
||||
#include "legoutils.h"
|
||||
#include "mxcompositepresenter.h"
|
||||
#include "mxdssubscriber.h"
|
||||
#include "mxmediapresenter.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxstreamchunk.h"
|
||||
#include "mxticklemanager.h"
|
||||
#include "mxutilities.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoActionControlPresenter, 0x68)
|
||||
|
||||
|
||||
@ -1,18 +1,23 @@
|
||||
#include "legoanimationmanager.h"
|
||||
|
||||
#include "animstate.h"
|
||||
#include "define.h"
|
||||
#include "islepathactor.h"
|
||||
#include "legocharactermanager.h"
|
||||
#include "legoendanimnotificationparam.h"
|
||||
#include "legoextraactor.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoomni.h"
|
||||
#include "legomain.h"
|
||||
#include "legoroilist.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxticklemanager.h"
|
||||
#include "mxtimer.h"
|
||||
#include "mxutilities.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
#include <io.h>
|
||||
|
||||
@ -22,6 +27,9 @@ DECOMP_SIZE_ASSERT(Vehicle, 0x08)
|
||||
DECOMP_SIZE_ASSERT(Unknown0x3c, 0x18)
|
||||
DECOMP_SIZE_ASSERT(LegoTranInfo, 0x78)
|
||||
|
||||
// GLOBAL: LEGO1 0x100d8b28
|
||||
MxU8 g_unk0x100d8b28[] = {0, 1, 2, 4, 8, 16};
|
||||
|
||||
// GLOBAL: LEGO1 0x100f6d20
|
||||
Vehicle g_vehicles[] = {
|
||||
{"bikebd", 0, FALSE},
|
||||
@ -84,9 +92,18 @@ Character g_characters[47] = {
|
||||
{"jk", FALSE, -1, 0, FALSE, FALSE, TRUE, 1500, 20000, FALSE, 0, 0}
|
||||
};
|
||||
|
||||
// GLOBAL: LEGO1 0x100f74b0
|
||||
float g_unk0x100f74b0 = 10.0f;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f74ec
|
||||
float g_unk0x100f74ec = -1.0f;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f74f8
|
||||
MxS32 g_legoAnimationManagerConfig = 1;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f7500
|
||||
float g_unk0x100f7500 = 0.1f;
|
||||
|
||||
// FUNCTION: LEGO1 0x1005eb50
|
||||
void LegoAnimationManager::configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig)
|
||||
{
|
||||
@ -152,14 +169,14 @@ LegoAnimationManager::~LegoAnimationManager()
|
||||
// FUNCTION: BETA10 0x1003fbc0
|
||||
void LegoAnimationManager::Reset(MxBool p_und)
|
||||
{
|
||||
m_unk0x402 = 0;
|
||||
m_unk0x402 = FALSE;
|
||||
|
||||
if (p_und && m_animState != NULL) {
|
||||
m_animState->SetFlag();
|
||||
}
|
||||
|
||||
undefined unk0x42b = m_unk0x42b;
|
||||
FUN_1005ef10();
|
||||
MxBool suspended = m_suspended;
|
||||
Suspend();
|
||||
|
||||
if (m_tranInfoList != NULL) {
|
||||
delete m_tranInfoList;
|
||||
@ -172,34 +189,105 @@ void LegoAnimationManager::Reset(MxBool p_und)
|
||||
DeleteAnimations();
|
||||
Init();
|
||||
|
||||
m_unk0x42b = unk0x42b;
|
||||
m_suspended = suspended;
|
||||
m_unk0x428 = m_unk0x3a;
|
||||
m_unk0x429 = m_unk0x400;
|
||||
m_unk0x42a = m_unk0x402;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1005ef10
|
||||
void LegoAnimationManager::FUN_1005ef10()
|
||||
// FUNCTION: LEGO1 0x1005ef10
|
||||
// FUNCTION: BETA10 0x1003fc7a
|
||||
void LegoAnimationManager::Suspend()
|
||||
{
|
||||
// TODO
|
||||
m_animState = (AnimState*) GameState()->GetState("AnimState");
|
||||
if (m_animState == NULL) {
|
||||
m_animState = (AnimState*) GameState()->CreateState("AnimState");
|
||||
}
|
||||
|
||||
if (m_scriptIndex == 0) {
|
||||
m_animState->FUN_10065240(m_animCount, m_anims, m_unk0x3fc);
|
||||
}
|
||||
|
||||
if (!m_suspended) {
|
||||
m_suspended = TRUE;
|
||||
m_unk0x428 = m_unk0x3a;
|
||||
m_unk0x429 = m_unk0x400;
|
||||
m_unk0x42a = m_unk0x402;
|
||||
m_unk0x402 = FALSE;
|
||||
|
||||
FUN_10061010(0);
|
||||
|
||||
MxS32 i;
|
||||
for (i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
LegoROI* roi = m_unk0x3c[i].m_roi;
|
||||
|
||||
if (roi != NULL) {
|
||||
LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName());
|
||||
|
||||
if (actor != NULL && actor->GetController() != NULL) {
|
||||
actor->GetController()->FUN_10046770(actor);
|
||||
actor->ClearController();
|
||||
}
|
||||
|
||||
CharacterManager()->FUN_10083db0(roi);
|
||||
}
|
||||
|
||||
if (m_unk0x3c[i].m_unk0x14) {
|
||||
m_unk0x3c[i].m_unk0x14 = FALSE;
|
||||
|
||||
MxS32 vehicleId = g_characters[m_unk0x3c[i].m_characterId].m_vehicleId;
|
||||
if (vehicleId >= 0) {
|
||||
g_vehicles[vehicleId].m_unk0x05 = FALSE;
|
||||
|
||||
LegoROI* roi = Lego()->FindROI(g_vehicles[vehicleId].m_name);
|
||||
if (roi != NULL) {
|
||||
roi->SetVisibility(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_unk0x3c[i].m_roi = NULL;
|
||||
m_unk0x3c[i].m_characterId = -1;
|
||||
m_unk0x3c[i].m_unk0x10 = -1.0f;
|
||||
}
|
||||
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x1a = FALSE;
|
||||
m_unk0x3a = FALSE;
|
||||
m_unk0x400 = FALSE;
|
||||
m_unk0x414 = 0;
|
||||
m_unk0x401 = FALSE;
|
||||
|
||||
for (i = 0; i < (MxS32) _countof(g_characters); i++) {
|
||||
g_characters[i].m_unk0x04 = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1005f0b0
|
||||
void LegoAnimationManager::FUN_1005f0b0()
|
||||
// FUNCTION: LEGO1 0x1005f0b0
|
||||
// FUNCTION: BETA10 0x1003fefe
|
||||
void LegoAnimationManager::Resume()
|
||||
{
|
||||
// TODO
|
||||
if (m_suspended) {
|
||||
m_unk0x408 = m_unk0x40c = m_unk0x404 = Timer()->GetTime();
|
||||
m_unk0x410 = 5000;
|
||||
m_unk0x3a = m_unk0x428;
|
||||
m_unk0x400 = m_unk0x429;
|
||||
m_unk0x402 = m_unk0x42a;
|
||||
m_suspended = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1005f130
|
||||
// FUNCTION: BETA10 0x1003ffb7
|
||||
void LegoAnimationManager::Init()
|
||||
{
|
||||
m_unk0x402 = 0;
|
||||
m_unk0x402 = FALSE;
|
||||
m_scriptIndex = -1;
|
||||
m_animCount = 0;
|
||||
m_anims = NULL;
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x1a = 0;
|
||||
m_unk0x1a = FALSE;
|
||||
m_tranInfoList = NULL;
|
||||
m_tranInfoList2 = NULL;
|
||||
m_unk0x41c = g_legoAnimationManagerConfig <= 1 ? 10 : 20;
|
||||
@ -212,24 +300,24 @@ void LegoAnimationManager::Init()
|
||||
|
||||
for (i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
m_unk0x3c[i].m_roi = NULL;
|
||||
m_unk0x3c[i].m_id = -1;
|
||||
m_unk0x3c[i].m_characterId = -1;
|
||||
m_unk0x3c[i].m_unk0x10 = -1.0f;
|
||||
m_unk0x3c[i].m_unk0x14 = 0;
|
||||
m_unk0x3c[i].m_unk0x14 = FALSE;
|
||||
}
|
||||
|
||||
m_unk0x38 = FALSE;
|
||||
m_unk0x39 = FALSE;
|
||||
m_unk0x3a = 1;
|
||||
m_unk0x3a = TRUE;
|
||||
m_unk0x3fc = 0;
|
||||
m_unk0x400 = 0;
|
||||
m_unk0x400 = FALSE;
|
||||
m_unk0x414 = 0;
|
||||
m_unk0x418 = 5;
|
||||
m_numAllowedExtras = 5;
|
||||
m_unk0x0e = 0;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x401 = 0;
|
||||
m_unk0x42b = 0;
|
||||
m_unk0x430 = 0;
|
||||
m_unk0x42c = 0;
|
||||
m_unk0x401 = FALSE;
|
||||
m_suspended = FALSE;
|
||||
m_unk0x430 = FALSE;
|
||||
m_unk0x42c = NULL;
|
||||
m_unk0x408 = m_unk0x40c = m_unk0x404 = Timer()->GetTime();
|
||||
m_unk0x410 = 5000;
|
||||
|
||||
@ -251,16 +339,32 @@ void LegoAnimationManager::Init()
|
||||
m_unk0x424 = new LegoROIList();
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1005f6d0
|
||||
void LegoAnimationManager::FUN_1005f6d0(MxBool)
|
||||
// FUNCTION: LEGO1 0x1005f6d0
|
||||
// FUNCTION: BETA10 0x100401e7
|
||||
void LegoAnimationManager::FUN_1005f6d0(MxBool p_unk0x400)
|
||||
{
|
||||
// TODO
|
||||
if (m_suspended) {
|
||||
m_unk0x429 = p_unk0x400;
|
||||
}
|
||||
else {
|
||||
m_unk0x400 = p_unk0x400;
|
||||
|
||||
if (!p_unk0x400) {
|
||||
FUN_100627d0(TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1005f700
|
||||
void LegoAnimationManager::FUN_1005f700(MxBool)
|
||||
// FUNCTION: LEGO1 0x1005f700
|
||||
// FUNCTION: BETA10 0x1004024c
|
||||
void LegoAnimationManager::FUN_1005f700(MxBool p_unk0x3a)
|
||||
{
|
||||
// TODO
|
||||
if (m_suspended) {
|
||||
m_unk0x428 = p_unk0x3a;
|
||||
}
|
||||
else {
|
||||
m_unk0x3a = p_unk0x3a;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1005f720
|
||||
@ -287,8 +391,8 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
|
||||
|
||||
m_unk0x38 = FALSE;
|
||||
m_unk0x39 = FALSE;
|
||||
m_unk0x430 = 0;
|
||||
m_unk0x42c = 0;
|
||||
m_unk0x430 = FALSE;
|
||||
m_unk0x42c = NULL;
|
||||
|
||||
for (j = 0; j < (MxS32) _countof(g_characters); j++) {
|
||||
g_characters[j].m_active = FALSE;
|
||||
@ -364,7 +468,7 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
|
||||
}
|
||||
|
||||
m_anims[j].m_unk0x28 = GetCharacterIndex(m_anims[j].m_animName + strlen(m_anims[j].m_animName) - 2);
|
||||
m_anims[j].m_unk0x29 = 0;
|
||||
m_anims[j].m_unk0x29 = FALSE;
|
||||
|
||||
for (k = 0; k < 3; k++) {
|
||||
m_anims[j].m_unk0x2a[k] = -1;
|
||||
@ -400,15 +504,15 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
|
||||
FUN_100617c0(-1, m_unk0x0e, m_unk0x10);
|
||||
|
||||
result = SUCCESS;
|
||||
m_unk0x402 = 1;
|
||||
m_unk0x402 = TRUE;
|
||||
|
||||
if (m_unk0x42b) {
|
||||
if (m_suspended) {
|
||||
m_unk0x428 = m_unk0x3a;
|
||||
m_unk0x429 = m_unk0x400;
|
||||
m_unk0x42a = 1;
|
||||
m_unk0x3a = 0;
|
||||
m_unk0x400 = 0;
|
||||
m_unk0x402 = 0;
|
||||
m_unk0x42a = TRUE;
|
||||
m_unk0x3a = FALSE;
|
||||
m_unk0x400 = FALSE;
|
||||
m_unk0x402 = FALSE;
|
||||
}
|
||||
|
||||
if (p_scriptIndex == 0) {
|
||||
@ -541,7 +645,7 @@ MxResult LegoAnimationManager::ReadModelInfo(LegoFile* p_file, ModelInfo* p_info
|
||||
// FUNCTION: LEGO1 0x100603c0
|
||||
void LegoAnimationManager::DeleteAnimations()
|
||||
{
|
||||
undefined unk0x42b = m_unk0x42b;
|
||||
MxBool suspended = m_suspended;
|
||||
|
||||
if (m_anims != NULL) {
|
||||
for (MxS32 i = 0; i < m_animCount; i++) {
|
||||
@ -560,7 +664,7 @@ void LegoAnimationManager::DeleteAnimations()
|
||||
}
|
||||
|
||||
Init();
|
||||
m_unk0x42b = unk0x42b;
|
||||
m_suspended = suspended;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10060570
|
||||
@ -569,22 +673,100 @@ void LegoAnimationManager::FUN_10060570(MxBool)
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100605e0
|
||||
// FUNCTION: LEGO1 0x100605e0
|
||||
// FUNCTION: BETA10 0x1004152b
|
||||
MxResult LegoAnimationManager::FUN_100605e0(
|
||||
MxU32 p_index,
|
||||
MxU8 p_unk0x0a,
|
||||
MxBool p_unk0x0a,
|
||||
MxMatrix* p_matrix,
|
||||
undefined,
|
||||
undefined4,
|
||||
undefined,
|
||||
MxBool,
|
||||
MxBool,
|
||||
undefined
|
||||
MxBool p_bool1,
|
||||
LegoROI* p_roi,
|
||||
MxBool p_bool2,
|
||||
MxBool p_bool3,
|
||||
MxBool p_bool4,
|
||||
MxBool p_bool5
|
||||
)
|
||||
{
|
||||
// TODO
|
||||
return FAILURE;
|
||||
MxResult result = FAILURE;
|
||||
|
||||
if (m_scriptIndex != -1 && p_index < m_animCount && m_tranInfoList != NULL) {
|
||||
FUN_100627d0(FALSE);
|
||||
FUN_10062770();
|
||||
|
||||
MxDSAction action;
|
||||
AnimInfo& animInfo = m_anims[p_index];
|
||||
|
||||
if (!p_bool1) {
|
||||
if (m_unk0x39 || !animInfo.m_unk0x29) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (FUN_100623a0(animInfo)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (FUN_10062710(animInfo)) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
FUN_10062580(animInfo);
|
||||
|
||||
LegoTranInfo* tranInfo = new LegoTranInfo();
|
||||
tranInfo->m_animInfo = &animInfo;
|
||||
tranInfo->m_index = ++m_unk0x1c;
|
||||
tranInfo->m_unk0x10 = 0;
|
||||
tranInfo->m_unk0x08 = p_roi;
|
||||
tranInfo->m_unk0x12 = m_anims[p_index].m_unk0x08;
|
||||
tranInfo->m_unk0x14 = p_unk0x0a;
|
||||
tranInfo->m_objectId = animInfo.m_objectId;
|
||||
tranInfo->m_unk0x15 = p_bool2;
|
||||
|
||||
if (p_matrix != NULL) {
|
||||
tranInfo->m_unk0x0c = new MxMatrix(*p_matrix);
|
||||
}
|
||||
|
||||
tranInfo->m_unk0x1c = m_unk0x28;
|
||||
tranInfo->m_unk0x20 = m_unk0x30;
|
||||
tranInfo->m_unk0x28 = p_bool3;
|
||||
tranInfo->m_unk0x29 = p_bool4;
|
||||
|
||||
if (m_tranInfoList != NULL) {
|
||||
m_tranInfoList->Append(tranInfo);
|
||||
}
|
||||
|
||||
char buf[256];
|
||||
sprintf(buf, "%s:%d", g_strANIMMAN_ID, tranInfo->m_index);
|
||||
|
||||
action.SetAtomId(*Lego()->GetScriptAtom(m_scriptIndex));
|
||||
action.SetObjectId(animInfo.m_objectId);
|
||||
action.SetUnknown24(-1);
|
||||
action.AppendExtra(strlen(buf) + 1, buf);
|
||||
|
||||
if (StartActionIfUnknown0x13c(action) == SUCCESS) {
|
||||
BackgroundAudioManager()->LowerVolume();
|
||||
tranInfo->m_flags |= LegoTranInfo::c_bit2;
|
||||
animInfo.m_unk0x22++;
|
||||
m_unk0x404 = Timer()->GetTime();
|
||||
|
||||
if (p_bool5) {
|
||||
FUN_100648f0(tranInfo, m_unk0x404);
|
||||
}
|
||||
else if (p_unk0x0a) {
|
||||
IslePathActor* actor = CurrentActor();
|
||||
|
||||
if (actor != NULL) {
|
||||
actor->SetState(4);
|
||||
actor->SetWorldSpeed(0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
m_unk0x39 = TRUE;
|
||||
result = SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100609f0
|
||||
@ -597,12 +779,12 @@ MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix
|
||||
FUN_100627d0(FALSE);
|
||||
|
||||
LegoTranInfo* info = new LegoTranInfo();
|
||||
info->m_unk0x00 = 0;
|
||||
info->m_animInfo = NULL;
|
||||
info->m_index = ++m_unk0x1c;
|
||||
info->m_unk0x10 = 0;
|
||||
info->m_unk0x08 = NULL;
|
||||
info->m_unk0x12 = -1;
|
||||
info->m_unk0x14 = 0;
|
||||
info->m_unk0x14 = FALSE;
|
||||
info->m_objectId = p_objectId;
|
||||
|
||||
if (p_matrix != NULL) {
|
||||
@ -657,7 +839,7 @@ MxResult LegoAnimationManager::StartEntityAction(MxDSAction& p_dsAction, LegoEnt
|
||||
|
||||
for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
if (m_unk0x3c[i].m_roi == roi) {
|
||||
MxU32 characterId = m_unk0x3c[i].m_id;
|
||||
MxS32 characterId = m_unk0x3c[i].m_characterId;
|
||||
g_characters[characterId].m_unk0x07 = TRUE;
|
||||
MxS32 vehicleId = g_characters[characterId].m_vehicleId;
|
||||
|
||||
@ -671,7 +853,7 @@ MxResult LegoAnimationManager::StartEntityAction(MxDSAction& p_dsAction, LegoEnt
|
||||
}
|
||||
}
|
||||
|
||||
if (StartActionIfUnknown0x13c(p_dsAction) == SUCCESS) {
|
||||
if (LegoOmni::GetInstance()->StartActionIfUnknown0x13c(p_dsAction) == SUCCESS) {
|
||||
result = SUCCESS;
|
||||
}
|
||||
|
||||
@ -683,13 +865,13 @@ MxResult LegoAnimationManager::StartEntityAction(MxDSAction& p_dsAction, LegoEnt
|
||||
MxResult LegoAnimationManager::FUN_10060dc0(
|
||||
IsleScript::Script p_objectId,
|
||||
MxMatrix* p_matrix,
|
||||
undefined p_param3,
|
||||
undefined p_param4,
|
||||
undefined4 p_param5,
|
||||
undefined p_param6,
|
||||
MxBool p_param3,
|
||||
MxBool p_param4,
|
||||
LegoROI* p_roi,
|
||||
MxBool p_param6,
|
||||
MxBool p_param7,
|
||||
MxBool p_param8,
|
||||
undefined p_param9
|
||||
MxBool p_param9
|
||||
)
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
@ -702,21 +884,21 @@ MxResult LegoAnimationManager::FUN_10060dc0(
|
||||
for (MxS32 i = 0; i < m_animCount; i++) {
|
||||
if (m_anims[i].m_objectId == p_objectId) {
|
||||
found = TRUE;
|
||||
undefined unk0x0a;
|
||||
MxBool unk0x0a;
|
||||
|
||||
switch (p_param4) {
|
||||
case 0:
|
||||
case FALSE:
|
||||
unk0x0a = m_anims[i].m_unk0x0a;
|
||||
break;
|
||||
case 1:
|
||||
unk0x0a = 1;
|
||||
case TRUE:
|
||||
unk0x0a = TRUE;
|
||||
break;
|
||||
default:
|
||||
unk0x0a = 0;
|
||||
unk0x0a = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
result = FUN_100605e0(i, unk0x0a, p_matrix, p_param3, p_param5, p_param6, p_param7, p_param8, p_param9);
|
||||
result = FUN_100605e0(i, unk0x0a, p_matrix, p_param3, p_roi, p_param6, p_param7, p_param8, p_param9);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -734,6 +916,12 @@ void LegoAnimationManager::FUN_10061010(undefined4)
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10061530
|
||||
void LegoAnimationManager::FUN_10061530()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100617c0
|
||||
void LegoAnimationManager::FUN_100617c0(MxS32, MxU16&, MxU16&)
|
||||
{
|
||||
@ -758,20 +946,213 @@ LegoTranInfo* LegoAnimationManager::GetTranInfo(MxU32 p_index)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100619f0
|
||||
// FUNCTION: LEGO1 0x100619f0
|
||||
// FUNCTION: BETA10 0x100426b1
|
||||
MxLong LegoAnimationManager::Notify(MxParam& p_param)
|
||||
{
|
||||
// TODO
|
||||
if (((MxNotificationParam&) p_param).GetSender() == this) {
|
||||
if (((MxNotificationParam&) p_param).GetType() == c_notificationEndAnim) {
|
||||
FUN_100605e0(m_unk0x18, TRUE, NULL, TRUE, NULL, FALSE, TRUE, TRUE, TRUE);
|
||||
}
|
||||
}
|
||||
else if (((MxNotificationParam&) p_param).GetType() == c_notificationEndAnim && m_tranInfoList != NULL) {
|
||||
LegoTranInfoListCursor cursor(m_tranInfoList);
|
||||
LegoTranInfo* tranInfo;
|
||||
|
||||
MxU32 index = ((LegoEndAnimNotificationParam&) p_param).GetIndex();
|
||||
MxBool found = FALSE;
|
||||
|
||||
while (cursor.Next(tranInfo)) {
|
||||
if (tranInfo->m_index == index) {
|
||||
if (m_unk0x430 && m_unk0x42c == tranInfo) {
|
||||
FUN_10064b50(-1);
|
||||
}
|
||||
|
||||
if (tranInfo->m_flags & LegoTranInfo::c_bit2) {
|
||||
BackgroundAudioManager()->RaiseVolume();
|
||||
}
|
||||
|
||||
m_unk0x39 = FALSE;
|
||||
m_unk0x404 = Timer()->GetTime();
|
||||
|
||||
found = TRUE;
|
||||
cursor.Detach();
|
||||
delete tranInfo;
|
||||
|
||||
for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
LegoROI* roi = m_unk0x3c[i].m_roi;
|
||||
|
||||
if (roi != NULL) {
|
||||
LegoExtraActor* actor = CharacterManager()->GetActor(roi->GetName());
|
||||
|
||||
if (actor != NULL) {
|
||||
actor->Restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_unk0x1a && found) {
|
||||
m_unk0x18++;
|
||||
|
||||
if (m_animCount <= m_unk0x18) {
|
||||
m_unk0x1a = FALSE;
|
||||
}
|
||||
else {
|
||||
LegoEndAnimNotificationParam param(c_notificationEndAnim, this, 0);
|
||||
NotificationManager()->Send(this, param);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10061cc0
|
||||
// FUNCTION: LEGO1 0x10061cc0
|
||||
// FUNCTION: BETA10 0x1004293c
|
||||
MxResult LegoAnimationManager::Tickle()
|
||||
{
|
||||
// TODO
|
||||
FUN_10061530();
|
||||
|
||||
if (!m_unk0x402) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
IslePathActor* actor = CurrentActor();
|
||||
LegoROI* roi;
|
||||
|
||||
if (actor == NULL || (roi = actor->GetROI()) == NULL) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (m_unk0x401) {
|
||||
for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
LegoROI* roi = m_unk0x3c[i].m_roi;
|
||||
|
||||
if (roi != NULL && m_unk0x3c[i].m_unk0x0d) {
|
||||
LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName());
|
||||
|
||||
if (actor != NULL && actor->GetController() != NULL) {
|
||||
actor->GetController()->FUN_10046770(actor);
|
||||
actor->ClearController();
|
||||
}
|
||||
|
||||
CharacterManager()->FUN_10083db0(roi);
|
||||
|
||||
if (m_unk0x3c[i].m_unk0x14) {
|
||||
m_unk0x3c[i].m_unk0x14 = FALSE;
|
||||
|
||||
MxS32 vehicleId = g_characters[m_unk0x3c[i].m_characterId].m_vehicleId;
|
||||
if (vehicleId >= 0) {
|
||||
g_vehicles[vehicleId].m_unk0x05 = FALSE;
|
||||
|
||||
LegoROI* roi = Lego()->FindROI(g_vehicles[vehicleId].m_name);
|
||||
if (roi != NULL) {
|
||||
roi->SetVisibility(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_unk0x3c[i].m_roi = NULL;
|
||||
g_characters[m_unk0x3c[i].m_characterId].m_unk0x04 = FALSE;
|
||||
g_characters[m_unk0x3c[i].m_characterId].m_unk0x07 = FALSE;
|
||||
m_unk0x3c[i].m_characterId = -1;
|
||||
m_unk0x3c[i].m_unk0x0d = FALSE;
|
||||
m_unk0x414--;
|
||||
}
|
||||
}
|
||||
|
||||
m_unk0x401 = FALSE;
|
||||
}
|
||||
|
||||
MxLong time = Timer()->GetTime();
|
||||
float speed = actor->GetWorldSpeed();
|
||||
|
||||
FUN_10064b50(time);
|
||||
|
||||
if (!m_unk0x39 && time - m_unk0x404 > 10000 && speed < g_unk0x100f74b0 && speed > g_unk0x100f74ec) {
|
||||
LegoPathBoundary* boundary = actor->GetBoundary();
|
||||
|
||||
Mx3DPointFloat position(roi->GetWorldPosition());
|
||||
Mx3DPointFloat direction(roi->GetWorldDirection());
|
||||
|
||||
MxU8 und = 0;
|
||||
MxU8 actorId = GameState()->GetActorId();
|
||||
|
||||
if (actorId <= 5) {
|
||||
und = g_unk0x100d8b28[actorId];
|
||||
}
|
||||
|
||||
for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) {
|
||||
LegoROI* roi = m_unk0x3c[i].m_roi;
|
||||
|
||||
if (roi != NULL) {
|
||||
MxU16 result = FUN_10062110(roi, direction, position, boundary, speed, und, m_unk0x3c[i].m_unk0x14);
|
||||
|
||||
if (result) {
|
||||
MxMatrix mat;
|
||||
mat = roi->GetLocal2World();
|
||||
|
||||
if (FUN_100605e0(result & USHRT_MAX, FALSE, &mat, TRUE, roi, FALSE, TRUE, TRUE, TRUE) == SUCCESS) {
|
||||
m_unk0x404 = time;
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (time - m_unk0x40c > 1000) {
|
||||
FUN_10063d10();
|
||||
m_unk0x40c = time;
|
||||
}
|
||||
|
||||
if (time - m_unk0x408 < m_unk0x410) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
m_unk0x410 = (rand() * 10000 / SHRT_MAX) + 5000;
|
||||
m_unk0x408 = time;
|
||||
|
||||
if (time - m_unk0x404 > 10000) {
|
||||
FUN_100629b0(-1, FALSE);
|
||||
}
|
||||
|
||||
double elapsedSeconds = VideoManager()->GetElapsedSeconds();
|
||||
|
||||
if (elapsedSeconds < 1.0 && elapsedSeconds > 0.01) {
|
||||
g_unk0x100f7500 = (g_unk0x100f7500 * 2.0 + elapsedSeconds) / 3.0;
|
||||
|
||||
if (elapsedSeconds > 0.2 && m_numAllowedExtras > 2) {
|
||||
m_numAllowedExtras--;
|
||||
}
|
||||
else if (g_unk0x100f7500 < 0.16 && m_numAllowedExtras < m_unk0x41c) {
|
||||
m_numAllowedExtras++;
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10062110
|
||||
// FUNCTION: BETA10 0x10042f41
|
||||
MxU16 LegoAnimationManager::FUN_10062110(
|
||||
LegoROI* p_roi,
|
||||
Vector3& p_direction,
|
||||
Vector3& p_position,
|
||||
LegoPathBoundary* p_boundary,
|
||||
float p_speed,
|
||||
MxU8 p_und,
|
||||
MxBool p_unk0x14
|
||||
)
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10062360
|
||||
// FUNCTION: BETA10 0x100432dd
|
||||
MxS8 LegoAnimationManager::GetCharacterIndex(const char* p_name)
|
||||
@ -787,6 +1168,29 @@ MxS8 LegoAnimationManager::GetCharacterIndex(const char* p_name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100623a0
|
||||
// FUNCTION: BETA10 0x10043342
|
||||
MxBool LegoAnimationManager::FUN_100623a0(AnimInfo& p_info)
|
||||
{
|
||||
// TODO
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10062580
|
||||
// FUNCTION: BETA10 0x10043552
|
||||
void LegoAnimationManager::FUN_10062580(AnimInfo& p_info)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10062710
|
||||
// FUNCTION: BETA10 0x10043787
|
||||
MxBool LegoAnimationManager::FUN_10062710(AnimInfo& p_info)
|
||||
{
|
||||
// TODO
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10062770
|
||||
// FUNCTION: BETA10 0x1004381a
|
||||
void LegoAnimationManager::FUN_10062770()
|
||||
@ -811,6 +1215,7 @@ void LegoAnimationManager::FUN_100627d0(MxBool)
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100629b0
|
||||
// FUNCTION: BETA10 0x10043c10
|
||||
void LegoAnimationManager::FUN_100629b0(MxU32, MxBool)
|
||||
{
|
||||
// TODO
|
||||
@ -851,14 +1256,35 @@ void LegoAnimationManager::FUN_10063aa0()
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10063d10
|
||||
// FUNCTION: BETA10 0x10045034
|
||||
void LegoAnimationManager::FUN_10063d10()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10064670
|
||||
void LegoAnimationManager::FUN_10064670(MxBool)
|
||||
void LegoAnimationManager::FUN_10064670(Vector3*)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10064740
|
||||
void LegoAnimationManager::FUN_10064740(MxBool)
|
||||
void LegoAnimationManager::FUN_10064740(Vector3*)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100648f0
|
||||
// FUNCTION: BETA10 0x10045daf
|
||||
void LegoAnimationManager::FUN_100648f0(LegoTranInfo*, MxLong)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10064b50
|
||||
// FUNCTION: BETA10 0x10045f14
|
||||
void LegoAnimationManager::FUN_10064b50(MxLong p_time)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
#include "legoanimmmpresenter.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "decomp.h"
|
||||
#include "define.h"
|
||||
#include "islepathactor.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legoanimpresenter.h"
|
||||
#include "legoendanimnotificationparam.h"
|
||||
#include "legotraninfo.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
@ -15,7 +17,6 @@
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxobjectfactory.h"
|
||||
#include "mxtimer.h"
|
||||
#include "mxtype18notificationparam.h"
|
||||
#include "mxutilities.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoAnimMMPresenter, 0x74)
|
||||
@ -123,7 +124,7 @@ void LegoAnimMMPresenter::EndAction()
|
||||
|
||||
m_tranInfo = NULL;
|
||||
|
||||
MxType18NotificationParam param(c_notificationType18, NULL, m_animmanId);
|
||||
LegoEndAnimNotificationParam param(c_notificationEndAnim, NULL, m_animmanId);
|
||||
if (m_animmanId != 0) {
|
||||
NotificationManager()->Send(AnimationManager(), param);
|
||||
}
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
#include "legobackgroundcolor.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "decomp.h"
|
||||
#include "legoutils.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoBackgroundColor, 0x30)
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3fb0
|
||||
|
||||
@ -1,15 +1,20 @@
|
||||
#include "legocharactermanager.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "legoanimactor.h"
|
||||
#include "legocharacters.h"
|
||||
#include "legoextraactor.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legovariables.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "misc.h"
|
||||
#include "misc/legocontainer.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxvariabletable.h"
|
||||
#include "realtime/realtime.h"
|
||||
#include "roi/legolod.h"
|
||||
#include "roi/legoroi.h"
|
||||
#include "viewmanager/viewmanager.h"
|
||||
|
||||
#include <vec.h>
|
||||
|
||||
@ -35,7 +40,7 @@ MxU32 g_unk0x100fc4ec = 2;
|
||||
MxU32 g_unk0x100fc4f0 = 0;
|
||||
|
||||
// GLOBAL: LEGO1 0x10104f20
|
||||
LegoCharacterData g_characterData[66];
|
||||
LegoCharacterInfo g_chracterInfo[66];
|
||||
|
||||
// FUNCTION: LEGO1 0x10082a20
|
||||
LegoCharacterManager::LegoCharacterManager()
|
||||
@ -50,22 +55,22 @@ LegoCharacterManager::LegoCharacterManager()
|
||||
// FUNCTION: LEGO1 0x10083270
|
||||
void LegoCharacterManager::Init()
|
||||
{
|
||||
for (MxS32 i = 0; i < _countof(g_characterData); i++) {
|
||||
g_characterData[i] = g_characterDataInit[i];
|
||||
for (MxS32 i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
g_chracterInfo[i] = g_characterInfoInit[i];
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100832a0
|
||||
void LegoCharacterManager::FUN_100832a0()
|
||||
{
|
||||
for (MxS32 i = 0; i < _countof(g_characterData); i++) {
|
||||
LegoCharacterData* data = GetData(g_characterData[i].m_name);
|
||||
for (MxS32 i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
LegoCharacterInfo* info = GetInfo(g_chracterInfo[i].m_name);
|
||||
|
||||
if (data != NULL) {
|
||||
LegoExtraActor* actor = data->m_actor;
|
||||
if (info != NULL) {
|
||||
LegoExtraActor* actor = info->m_actor;
|
||||
|
||||
if (actor != NULL && actor->IsA("LegoExtraActor")) {
|
||||
LegoROI* roi = g_characterData[i].m_roi;
|
||||
LegoROI* roi = g_chracterInfo[i].m_roi;
|
||||
MxU32 refCount = GetRefCount(roi);
|
||||
|
||||
while (refCount != 0) {
|
||||
@ -82,37 +87,46 @@ MxResult LegoCharacterManager::Write(LegoStorage* p_storage)
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
|
||||
for (MxS32 i = 0; i < _countof(g_characterData); i++) {
|
||||
LegoCharacterData* data = &g_characterData[i];
|
||||
for (MxS32 i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
LegoCharacterInfo* info = &g_chracterInfo[i];
|
||||
|
||||
if (p_storage->Write(&data->m_unk0x0c, sizeof(data->m_unk0x0c)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_unk0x0c, sizeof(info->m_unk0x0c)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_unk0x10, sizeof(data->m_unk0x10)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_unk0x10, sizeof(info->m_unk0x10)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_unk0x14, sizeof(data->m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_unk0x14, sizeof(info->m_unk0x14)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[1].m_unk0x08, sizeof(data->m_parts[1].m_unk0x08)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_infohatPart].m_unk0x08, sizeof(info->m_parts[c_infohatPart].m_unk0x08)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[1].m_unk0x14, sizeof(data->m_parts[1].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_infohatPart].m_unk0x14, sizeof(info->m_parts[c_infohatPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[2].m_unk0x14, sizeof(data->m_parts[2].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(
|
||||
&info->m_parts[c_infogronPart].m_unk0x14,
|
||||
sizeof(info->m_parts[c_infogronPart].m_unk0x14)
|
||||
) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[4].m_unk0x14, sizeof(data->m_parts[4].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_armlftPart].m_unk0x14, sizeof(info->m_parts[c_armlftPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[5].m_unk0x14, sizeof(data->m_parts[5].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_armrtPart].m_unk0x14, sizeof(info->m_parts[c_armrtPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[8].m_unk0x14, sizeof(data->m_parts[8].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_leglftPart].m_unk0x14, sizeof(info->m_parts[c_leglftPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Write(&data->m_parts[9].m_unk0x14, sizeof(data->m_parts[9].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Write(&info->m_parts[c_legrtPart].m_unk0x14, sizeof(info->m_parts[c_legrtPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
@ -128,37 +142,46 @@ MxResult LegoCharacterManager::Read(LegoStorage* p_storage)
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
|
||||
for (MxS32 i = 0; i < _countof(g_characterData); i++) {
|
||||
LegoCharacterData* data = &g_characterData[i];
|
||||
for (MxS32 i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
LegoCharacterInfo* info = &g_chracterInfo[i];
|
||||
|
||||
if (p_storage->Read(&data->m_unk0x0c, sizeof(data->m_unk0x0c)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_unk0x0c, sizeof(info->m_unk0x0c)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_unk0x10, sizeof(data->m_unk0x10)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_unk0x10, sizeof(info->m_unk0x10)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_unk0x14, sizeof(data->m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_unk0x14, sizeof(info->m_unk0x14)) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[1].m_unk0x08, sizeof(data->m_parts[1].m_unk0x08)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_infohatPart].m_unk0x08, sizeof(info->m_parts[c_infohatPart].m_unk0x08)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[1].m_unk0x14, sizeof(data->m_parts[1].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_infohatPart].m_unk0x14, sizeof(info->m_parts[c_infohatPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[2].m_unk0x14, sizeof(data->m_parts[2].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(
|
||||
&info->m_parts[c_infogronPart].m_unk0x14,
|
||||
sizeof(info->m_parts[c_infogronPart].m_unk0x14)
|
||||
) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[4].m_unk0x14, sizeof(data->m_parts[4].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_armlftPart].m_unk0x14, sizeof(info->m_parts[c_armlftPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[5].m_unk0x14, sizeof(data->m_parts[5].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_armrtPart].m_unk0x14, sizeof(info->m_parts[c_armrtPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[8].m_unk0x14, sizeof(data->m_parts[8].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_leglftPart].m_unk0x14, sizeof(info->m_parts[c_leglftPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
if (p_storage->Read(&data->m_parts[9].m_unk0x14, sizeof(data->m_parts[9].m_unk0x14)) != SUCCESS) {
|
||||
if (p_storage->Read(&info->m_parts[c_legrtPart].m_unk0x14, sizeof(info->m_parts[c_legrtPart].m_unk0x14)) !=
|
||||
SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
@ -213,7 +236,7 @@ LegoROI* LegoCharacterManager::GetROI(const char* p_key, MxBool p_createEntity)
|
||||
actor->SetROI(character->m_roi, FALSE, FALSE);
|
||||
actor->SetType(LegoEntity::e_character);
|
||||
actor->SetFlag(LegoActor::c_bit2);
|
||||
GetData(p_key)->m_actor = actor;
|
||||
GetInfo(p_key)->m_actor = actor;
|
||||
}
|
||||
|
||||
return character->m_roi;
|
||||
@ -250,7 +273,7 @@ void LegoCharacterManager::FUN_10083c30(const char* p_name)
|
||||
character = (*it).second;
|
||||
|
||||
if (character->RemoveRef() == 0) {
|
||||
LegoCharacterData* data = GetData(p_name);
|
||||
LegoCharacterInfo* info = GetInfo(p_name);
|
||||
LegoEntity* entity = character->m_roi->GetEntity();
|
||||
|
||||
if (entity != NULL) {
|
||||
@ -264,18 +287,18 @@ void LegoCharacterManager::FUN_10083c30(const char* p_name)
|
||||
|
||||
m_characters->erase(it);
|
||||
|
||||
if (data != NULL) {
|
||||
if (data->m_actor != NULL) {
|
||||
data->m_actor->ClearFlag(LegoEntity::c_bit2);
|
||||
delete data->m_actor;
|
||||
if (info != NULL) {
|
||||
if (info->m_actor != NULL) {
|
||||
info->m_actor->ClearFlag(LegoEntity::c_bit2);
|
||||
delete info->m_actor;
|
||||
}
|
||||
else if (entity != NULL && entity->GetFlagsIsSet(LegoEntity::c_bit2)) {
|
||||
entity->ClearFlag(LegoEntity::c_bit2);
|
||||
delete entity;
|
||||
}
|
||||
|
||||
data->m_roi = NULL;
|
||||
data->m_actor = NULL;
|
||||
info->m_roi = NULL;
|
||||
info->m_actor = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -292,7 +315,7 @@ void LegoCharacterManager::FUN_10083db0(LegoROI* p_roi)
|
||||
|
||||
if (character->m_roi == p_roi) {
|
||||
if (character->RemoveRef() == 0) {
|
||||
LegoCharacterData* data = GetData(character->m_roi->GetName());
|
||||
LegoCharacterInfo* info = GetInfo(character->m_roi->GetName());
|
||||
LegoEntity* entity = character->m_roi->GetEntity();
|
||||
|
||||
if (entity != NULL) {
|
||||
@ -306,18 +329,18 @@ void LegoCharacterManager::FUN_10083db0(LegoROI* p_roi)
|
||||
|
||||
m_characters->erase(it);
|
||||
|
||||
if (data != NULL) {
|
||||
if (data->m_actor != NULL) {
|
||||
data->m_actor->ClearFlag(LegoEntity::c_bit2);
|
||||
delete data->m_actor;
|
||||
if (info != NULL) {
|
||||
if (info->m_actor != NULL) {
|
||||
info->m_actor->ClearFlag(LegoEntity::c_bit2);
|
||||
delete info->m_actor;
|
||||
}
|
||||
else if (entity != NULL && entity->GetFlagsIsSet(LegoEntity::c_bit2)) {
|
||||
entity->ClearFlag(LegoEntity::c_bit2);
|
||||
delete entity;
|
||||
}
|
||||
|
||||
data->m_roi = NULL;
|
||||
data->m_actor = NULL;
|
||||
info->m_roi = NULL;
|
||||
info->m_actor = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,39 +404,39 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
||||
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
||||
ViewLODListManager* lodManager = GetViewLODListManager();
|
||||
LegoTextureContainer* textureContainer = TextureContainer();
|
||||
LegoCharacterData* data = GetData(p_key);
|
||||
LegoCharacterInfo* info = GetInfo(p_key);
|
||||
|
||||
if (data == NULL) {
|
||||
if (info == NULL) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!strcmpi(p_key, "pep")) {
|
||||
LegoCharacterData* pepper = GetData("pepper");
|
||||
LegoCharacterInfo* pepper = GetInfo("pepper");
|
||||
|
||||
data->m_unk0x0c = pepper->m_unk0x0c;
|
||||
data->m_unk0x10 = pepper->m_unk0x10;
|
||||
data->m_unk0x14 = pepper->m_unk0x14;
|
||||
info->m_unk0x0c = pepper->m_unk0x0c;
|
||||
info->m_unk0x10 = pepper->m_unk0x10;
|
||||
info->m_unk0x14 = pepper->m_unk0x14;
|
||||
|
||||
for (i = 0; i < _countof(data->m_parts); i++) {
|
||||
data->m_parts[i] = pepper->m_parts[i];
|
||||
for (i = 0; i < _countof(info->m_parts); i++) {
|
||||
info->m_parts[i] = pepper->m_parts[i];
|
||||
}
|
||||
}
|
||||
|
||||
roi = new LegoROI(renderer);
|
||||
roi->SetName(p_key);
|
||||
|
||||
boundingSphere.Center()[0] = g_characterLODs[0].m_boundingSphere[0];
|
||||
boundingSphere.Center()[1] = g_characterLODs[0].m_boundingSphere[1];
|
||||
boundingSphere.Center()[2] = g_characterLODs[0].m_boundingSphere[2];
|
||||
boundingSphere.Radius() = g_characterLODs[0].m_boundingSphere[3];
|
||||
boundingSphere.Center()[0] = g_characterLODs[c_topLOD].m_boundingSphere[0];
|
||||
boundingSphere.Center()[1] = g_characterLODs[c_topLOD].m_boundingSphere[1];
|
||||
boundingSphere.Center()[2] = g_characterLODs[c_topLOD].m_boundingSphere[2];
|
||||
boundingSphere.Radius() = g_characterLODs[c_topLOD].m_boundingSphere[3];
|
||||
roi->SetBoundingSphere(boundingSphere);
|
||||
|
||||
boundingBox.Min()[0] = g_characterLODs[0].m_boundingBox[0];
|
||||
boundingBox.Min()[1] = g_characterLODs[0].m_boundingBox[1];
|
||||
boundingBox.Min()[2] = g_characterLODs[0].m_boundingBox[2];
|
||||
boundingBox.Max()[0] = g_characterLODs[0].m_boundingBox[3];
|
||||
boundingBox.Max()[1] = g_characterLODs[0].m_boundingBox[4];
|
||||
boundingBox.Max()[2] = g_characterLODs[0].m_boundingBox[5];
|
||||
boundingBox.Min()[0] = g_characterLODs[c_topLOD].m_boundingBox[0];
|
||||
boundingBox.Min()[1] = g_characterLODs[c_topLOD].m_boundingBox[1];
|
||||
boundingBox.Min()[2] = g_characterLODs[c_topLOD].m_boundingBox[2];
|
||||
boundingBox.Max()[0] = g_characterLODs[c_topLOD].m_boundingBox[3];
|
||||
boundingBox.Max()[1] = g_characterLODs[c_topLOD].m_boundingBox[4];
|
||||
boundingBox.Max()[2] = g_characterLODs[c_topLOD].m_boundingBox[5];
|
||||
roi->SetUnknown0x80(boundingBox);
|
||||
|
||||
comp = new CompoundObject();
|
||||
@ -421,7 +444,7 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
||||
|
||||
for (i = 0; i < _countof(g_characterLODs) - 1; i++) {
|
||||
char lodName[256];
|
||||
LegoCharacterData::Part& part = data->m_parts[i];
|
||||
LegoCharacterInfo::Part& part = info->m_parts[i];
|
||||
|
||||
const char* parentName;
|
||||
if (i == 0 || i == 1) {
|
||||
@ -495,14 +518,14 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
||||
}
|
||||
|
||||
CalcLocalTransform(
|
||||
Mx3DPointFloat(g_characterLODs[0].m_position),
|
||||
Mx3DPointFloat(g_characterLODs[0].m_direction),
|
||||
Mx3DPointFloat(g_characterLODs[0].m_up),
|
||||
Mx3DPointFloat(g_characterLODs[c_topLOD].m_position),
|
||||
Mx3DPointFloat(g_characterLODs[c_topLOD].m_direction),
|
||||
Mx3DPointFloat(g_characterLODs[c_topLOD].m_up),
|
||||
mat
|
||||
);
|
||||
roi->WrappedSetLocalTransform(mat);
|
||||
|
||||
data->m_roi = roi;
|
||||
info->m_roi = roi;
|
||||
success = TRUE;
|
||||
|
||||
done:
|
||||
@ -519,12 +542,12 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
|
||||
MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo)
|
||||
{
|
||||
LegoResult result = SUCCESS;
|
||||
LegoROI* head = FindChildROI(p_roi, g_characterLODs[4].m_name);
|
||||
LegoROI* head = FindChildROI(p_roi, g_characterLODs[c_headLOD].m_name);
|
||||
|
||||
if (head != NULL) {
|
||||
char lodName[256];
|
||||
|
||||
ViewLODList* lodList = GetViewLODListManager()->Lookup(g_characterLODs[4].m_parentName);
|
||||
ViewLODList* lodList = GetViewLODListManager()->Lookup(g_characterLODs[c_headLOD].m_parentName);
|
||||
MxS32 lodSize = lodList->Size();
|
||||
sprintf(lodName, "%s%s%d", p_roi->GetName(), "head", g_unk0x100fc4e8++);
|
||||
ViewLODList* dupLodList = GetViewLODListManager()->Create(lodName, lodSize);
|
||||
@ -532,8 +555,8 @@ MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_tex
|
||||
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
||||
|
||||
if (p_textureInfo == NULL) {
|
||||
LegoCharacterData* info = GetData(p_roi->GetName());
|
||||
LegoCharacterData::Part& part = info->m_parts[3];
|
||||
LegoCharacterInfo* info = GetInfo(p_roi->GetName());
|
||||
LegoCharacterInfo::Part& part = info->m_parts[c_headPart];
|
||||
p_textureInfo = TextureContainer()->Get(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]]);
|
||||
}
|
||||
|
||||
@ -565,8 +588,8 @@ MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_tex
|
||||
// FUNCTION: LEGO1 0x10084c00
|
||||
MxBool LegoCharacterManager::Exists(const char* p_key)
|
||||
{
|
||||
for (MxU32 i = 0; i < _countof(g_characterData); i++) {
|
||||
if (!strcmpi(g_characterData[i].m_name, p_key)) {
|
||||
for (MxU32 i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
if (!strcmpi(g_chracterInfo[i].m_name, p_key)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -577,46 +600,46 @@ MxBool LegoCharacterManager::Exists(const char* p_key)
|
||||
// FUNCTION: LEGO1 0x10084c40
|
||||
LegoExtraActor* LegoCharacterManager::GetActor(const char* p_key)
|
||||
{
|
||||
LegoCharacterData* data = GetData(p_key);
|
||||
LegoCharacterInfo* info = GetInfo(p_key);
|
||||
|
||||
if (data != NULL) {
|
||||
return data->m_actor;
|
||||
if (info != NULL) {
|
||||
return info->m_actor;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084c60
|
||||
LegoCharacterData* LegoCharacterManager::GetData(const char* p_key)
|
||||
LegoCharacterInfo* LegoCharacterManager::GetInfo(const char* p_key)
|
||||
{
|
||||
MxU32 i;
|
||||
|
||||
for (i = 0; i < _countof(g_characterData); i++) {
|
||||
if (!strcmpi(g_characterData[i].m_name, p_key)) {
|
||||
for (i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
if (!strcmpi(g_chracterInfo[i].m_name, p_key)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < _countof(g_characterData)) {
|
||||
return &g_characterData[i];
|
||||
if (i < _countof(g_chracterInfo)) {
|
||||
return &g_chracterInfo[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084cb0
|
||||
LegoCharacterData* LegoCharacterManager::GetData(LegoROI* p_roi)
|
||||
LegoCharacterInfo* LegoCharacterManager::GetInfo(LegoROI* p_roi)
|
||||
{
|
||||
MxU32 i;
|
||||
|
||||
for (i = 0; i < _countof(g_characterData); i++) {
|
||||
if (g_characterData[i].m_roi == p_roi) {
|
||||
for (i = 0; i < _countof(g_chracterInfo); i++) {
|
||||
if (g_chracterInfo[i].m_roi == p_roi) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < _countof(g_characterData)) {
|
||||
return &g_characterData[i];
|
||||
if (i < _countof(g_chracterInfo)) {
|
||||
return &g_chracterInfo[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -646,13 +669,13 @@ LegoROI* LegoCharacterManager::FindChildROI(LegoROI* p_roi, const char* p_name)
|
||||
// FUNCTION: LEGO1 0x10084ec0
|
||||
MxBool LegoCharacterManager::SwitchHat(LegoROI* p_roi)
|
||||
{
|
||||
LegoCharacterData* data = GetData(p_roi->GetName());
|
||||
LegoCharacterInfo* info = GetInfo(p_roi->GetName());
|
||||
|
||||
if (data == NULL) {
|
||||
if (info == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LegoCharacterData::Part& part = data->m_parts[1];
|
||||
LegoCharacterInfo::Part& part = info->m_parts[c_infohatPart];
|
||||
|
||||
part.m_unk0x08++;
|
||||
MxU8 unk0x00 = part.m_unk0x00[part.m_unk0x08];
|
||||
@ -662,7 +685,7 @@ MxBool LegoCharacterManager::SwitchHat(LegoROI* p_roi)
|
||||
unk0x00 = part.m_unk0x00[part.m_unk0x08];
|
||||
}
|
||||
|
||||
LegoROI* childROI = FindChildROI(p_roi, g_characterLODs[2].m_name);
|
||||
LegoROI* childROI = FindChildROI(p_roi, g_characterLODs[c_infohatLOD].m_name);
|
||||
|
||||
if (childROI != NULL) {
|
||||
char lodName[256];
|
||||
@ -700,14 +723,14 @@ MxBool LegoCharacterManager::SwitchHat(LegoROI* p_roi)
|
||||
// FUNCTION: LEGO1 0x10085140
|
||||
MxU32 LegoCharacterManager::FUN_10085140(LegoROI* p_roi, MxBool p_und)
|
||||
{
|
||||
LegoCharacterData* data = GetData(p_roi);
|
||||
LegoCharacterInfo* info = GetInfo(p_roi);
|
||||
|
||||
if (p_und) {
|
||||
return data->m_unk0x14 + g_unk0x100fc4dc;
|
||||
return info->m_unk0x14 + g_unk0x100fc4dc;
|
||||
}
|
||||
|
||||
if (data != NULL) {
|
||||
return data->m_unk0x0c + g_unk0x100fc4d8;
|
||||
if (info != NULL) {
|
||||
return info->m_unk0x0c + g_unk0x100fc4d8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "legocharacters.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoCharacterData, 0x108)
|
||||
DECOMP_SIZE_ASSERT(LegoCharacterData::Part, 0x18)
|
||||
DECOMP_SIZE_ASSERT(LegoCharacterInfo, 0x108)
|
||||
DECOMP_SIZE_ASSERT(LegoCharacterInfo::Part, 0x18)
|
||||
DECOMP_SIZE_ASSERT(LegoCharacterLOD, 0x58)
|
||||
|
||||
// Unclear whether g_characterLODs[0] (top) is its own global, see: LegoCharacterManager::CreateROI
|
||||
@ -172,7 +172,7 @@ const char* g_unk0x100f80a0[] =
|
||||
{"lego white", "lego black", "lego yellow", "lego red", "lego blue", "lego brown", "lego lt grey", "lego green"};
|
||||
|
||||
// GLOBAL: LEGO1 0x100f80c0
|
||||
LegoCharacterData g_characterDataInit[] = {
|
||||
LegoCharacterInfo g_characterInfoInit[] = {
|
||||
{"pepper",
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "legogamestate.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "act1state.h"
|
||||
#include "act2main_actions.h"
|
||||
#include "act3_actions.h"
|
||||
@ -28,10 +29,12 @@
|
||||
#include "jukebox_actions.h"
|
||||
#include "jukeboxw_actions.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legobackgroundcolor.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legocharactermanager.h"
|
||||
#include "legofullscreenmovie.h"
|
||||
#include "legomain.h"
|
||||
#include "legonavcontroller.h"
|
||||
#include "legoomni.h"
|
||||
#include "legoplantmanager.h"
|
||||
#include "legostate.h"
|
||||
#include "legoutils.h"
|
||||
@ -40,14 +43,18 @@
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxnotificationparam.h"
|
||||
#include "mxobjectfactory.h"
|
||||
#include "mxstring.h"
|
||||
#include "mxutilities.h"
|
||||
#include "mxvariabletable.h"
|
||||
#include "police_actions.h"
|
||||
#include "racecar.h"
|
||||
#include "racecar_actions.h"
|
||||
#include "regbook_actions.h"
|
||||
#include "roi/legoroi.h"
|
||||
#include "scripts.h"
|
||||
#include "sndanim_actions.h"
|
||||
|
||||
#include <stdio.h>
|
||||
@ -791,7 +798,7 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||
|
||||
FUN_10015820(TRUE, LegoOmni::c_disableInput | LegoOmni::c_disable3d);
|
||||
BackgroundAudioManager()->Stop();
|
||||
AnimationManager()->FUN_1005ef10();
|
||||
AnimationManager()->Suspend();
|
||||
VideoManager()->SetUnk0x554(FALSE);
|
||||
|
||||
switch (p_area) {
|
||||
@ -896,10 +903,14 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||
else {
|
||||
SetCameraControllerFromIsle();
|
||||
CurrentActor()->ResetWorldTransform(TRUE);
|
||||
AnimationManager()->FUN_1005f0b0();
|
||||
AnimationManager()->Resume();
|
||||
}
|
||||
|
||||
CurrentActor()->VTable0xe8(p_area, TRUE, 7);
|
||||
CurrentActor()->SpawnPlayer(
|
||||
p_area,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
break;
|
||||
}
|
||||
case e_hospital:
|
||||
@ -910,8 +921,12 @@ void LegoGameState::SwitchArea(Area p_area)
|
||||
LoadIsle();
|
||||
SetCameraControllerFromIsle();
|
||||
CurrentActor()->ResetWorldTransform(TRUE);
|
||||
AnimationManager()->FUN_1005f0b0();
|
||||
CurrentActor()->VTable0xe8(p_area, TRUE, 7);
|
||||
AnimationManager()->Resume();
|
||||
CurrentActor()->SpawnPlayer(
|
||||
p_area,
|
||||
TRUE,
|
||||
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
|
||||
);
|
||||
break;
|
||||
case e_police:
|
||||
VideoManager()->SetUnk0x554(TRUE);
|
||||
@ -1083,28 +1098,28 @@ void LegoGameState::Init()
|
||||
if (m_loadedAct == e_act1) {
|
||||
Isle* isle = (Isle*) FindWorld(*g_isleScript, 0);
|
||||
|
||||
Helicopter* copter = (Helicopter*) isle->Find(*g_copterScript, 1);
|
||||
Helicopter* copter = (Helicopter*) isle->Find(*g_copterScript, CopterScript::c_Helicopter_Actor);
|
||||
if (copter) {
|
||||
isle->FUN_1001fc80(copter);
|
||||
isle->VTable0x6c(copter);
|
||||
delete copter;
|
||||
}
|
||||
|
||||
DuneBuggy* dunebuggy = (DuneBuggy*) isle->Find(*g_dunecarScript, 2);
|
||||
DuneBuggy* dunebuggy = (DuneBuggy*) isle->Find(*g_dunecarScript, DunecarScript::c_DuneBugy_Actor);
|
||||
if (dunebuggy) {
|
||||
isle->FUN_1001fc80(dunebuggy);
|
||||
isle->VTable0x6c(dunebuggy);
|
||||
delete dunebuggy;
|
||||
}
|
||||
|
||||
Jetski* jetski = (Jetski*) isle->Find(*g_jetskiScript, 3);
|
||||
Jetski* jetski = (Jetski*) isle->Find(*g_jetskiScript, JetskiScript::c_Jetski_Actor);
|
||||
if (jetski) {
|
||||
isle->FUN_1001fc80(jetski);
|
||||
isle->VTable0x6c(jetski);
|
||||
delete jetski;
|
||||
}
|
||||
|
||||
RaceCar* racecar = (RaceCar*) isle->Find(*g_racecarScript, 4);
|
||||
RaceCar* racecar = (RaceCar*) isle->Find(*g_racecarScript, RacecarScript::c_RaceCar_Actor);
|
||||
if (racecar) {
|
||||
isle->FUN_1001fc80(racecar);
|
||||
isle->VTable0x6c(racecar);
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "misc.h"
|
||||
#include "misc/legoimage.h"
|
||||
#include "misc/legotexture.h"
|
||||
#include "mxdirectx/mxdirect3d.h"
|
||||
#include "tgl/d3drm/impl.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoTextureInfo, 0x10)
|
||||
|
||||
@ -1,27 +1,47 @@
|
||||
#include "legoutils.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "act1state.h"
|
||||
#include "anim/legoanim.h"
|
||||
#include "islepathactor.h"
|
||||
#include "legoanimpresenter.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legomain.h"
|
||||
#include "legonamedtexture.h"
|
||||
#include "legoomni.h"
|
||||
#include "legosoundmanager.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
#include "legoworldlist.h"
|
||||
#include "misc.h"
|
||||
#include "misc/legotree.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxstreamer.h"
|
||||
#include "mxtypes.h"
|
||||
#include "mxutilities.h"
|
||||
#include "mxvariabletable.h"
|
||||
#include "realtime/realtime.h"
|
||||
#include "scripts.h"
|
||||
|
||||
#include <process.h>
|
||||
#include <string.h>
|
||||
#include <vec.h>
|
||||
|
||||
// FUNCTION: LEGO1 0x1003dd70
|
||||
LegoROI* PickROI(MxLong p_a, MxLong p_b)
|
||||
{
|
||||
return (LegoROI*) VideoManager()->Get3DManager()->GetLego3DView()->Pick(p_a, p_b);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1003ddc0
|
||||
LegoEntity* PickEntity(MxLong, MxLong)
|
||||
{
|
||||
// TODO
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003df90
|
||||
MxS16 CountTotalTreeNodes(LegoTreeNode* p_node)
|
||||
{
|
||||
@ -320,7 +340,15 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1003ecc0
|
||||
// FUNCTION: BETA10 0x100d4b38
|
||||
void FUN_1003ecc0(IslePathActor* p_actor, undefined4, undefined4, MxBool)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003eda0
|
||||
// FUNCTION: BETA10 0x100d4bf4
|
||||
void FUN_1003eda0()
|
||||
{
|
||||
Mx3DPointFloat vec;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "legovariables.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legocharactermanager.h"
|
||||
#include "legogamestate.h"
|
||||
|
||||
@ -1,7 +1,13 @@
|
||||
#include "misc.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legomain.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxmisc.h"
|
||||
#include "roi/legoroi.h"
|
||||
#include "scripts.h"
|
||||
|
||||
// GLOBAL: LEGO1 0x100f4c58
|
||||
MxBool g_isWorldActive = TRUE;
|
||||
@ -136,6 +142,13 @@ void SetCurrentActor(IslePathActor* p_currentActor)
|
||||
LegoOmni::GetInstance()->SetCurrentActor(p_currentActor);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10015890
|
||||
// FUNCTION: BETA10 0x100e4d80
|
||||
MxResult StartActionIfUnknown0x13c(MxDSAction& p_dsAction)
|
||||
{
|
||||
return LegoOmni::GetInstance()->StartActionIfUnknown0x13c(p_dsAction);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100158b0
|
||||
void DeleteAction()
|
||||
{
|
||||
|
||||
@ -331,7 +331,6 @@ MxBool MxControlPresenter::HasTickleStatePassed(TickleState p_tickleState)
|
||||
{
|
||||
MxCompositePresenterList::iterator it = m_list.begin();
|
||||
for (MxS16 i = m_unk0x4e; i > 0; i--, it++) {
|
||||
;
|
||||
}
|
||||
|
||||
return (*it)->HasTickleStatePassed(p_tickleState);
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "legoworld.h"
|
||||
#include "misc.h"
|
||||
#include "mxbackgroundaudiomanager.h"
|
||||
#include "mxdisplaysurface.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxparam.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "legovideomanager.h"
|
||||
#include "misc.h"
|
||||
#include "mxcontrolpresenter.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxpresenter.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxbitmap.h"
|
||||
#include "mxdsaction.h"
|
||||
#include "mxutilities.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoMeterPresenter, 0x94)
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
#include "legoactor.h"
|
||||
|
||||
#include "define.h"
|
||||
#include "legocachesoundmanager.h"
|
||||
#include "legosoundmanager.h"
|
||||
#include "misc.h"
|
||||
#include "mxutilities.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoActor, 0x78)
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "legocameracontroller.h"
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legonotify.h"
|
||||
#include "legosoundmanager.h"
|
||||
@ -8,6 +9,7 @@
|
||||
#include "mxmisc.h"
|
||||
#include "mxtimer.h"
|
||||
#include "realtime/realtime.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
#include <vec.h>
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user