mirror of
				https://github.com/isledecomp/isle.git
				synced 2025-10-26 01:44:19 +00:00 
			
		
		
		
	 b5a3c5feea
			
		
	
	b5a3c5feea
	
	
	
		
			
			* vtable enforce
* Vtable progress
* IslePathActor subclasses
* LegoState subclasses
* LegoWorld subclasses
* Presenter progress
* Remaining presenters
* All but two that need new files
* Merge into vtable branch (#3)
* Implement MxDisplaySurface::VTable0x44 (#467)
* Update mxdisplaysurface.cpp
* add arguments to header
* Fix glitched bitmaps
* WIP fixes
* Match
* Fix
* Changes
* Fixes
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Implmement PoliceState::VTable0x1c (#468)
* Implmement PoliceState::VTable0x1c
* Fixes
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Implement Lego3DView::Render (#470)
* Implement Lego3DView::Render
* use MxDouble
* Revert "use MxDouble"
This reverts commit a006b60e20.
* Begin work on Police class (#469)
* Begin work on Police class
* Use JukeBox::e_policeStation value
* Fixes
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Implement MxDisplaySurface::CreateCursorSurface (#471)
* Update mxdisplaysurface.cpp
* Fixes
* Update legovideomanager.cpp
* Match to 100%
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
---------
Co-authored-by: Misha <106913236+MishaProductions@users.noreply.github.com>
Co-authored-by: Christian Semmler <mail@csemmler.com>
Co-authored-by: Joshua Peisach <itzswirlz2020@outlook.com>
* Police fix
* Finish
* motocycle lower case
* Update historybook.h
* Update hospitalstate.h
* Update jetski.h
* Update legoinputmanager.h
* Update legolocomotionanimpresenter.h
* Update pizza.h
* Update act3shark.h
* Update ambulancemissionstate.h
* Update bumpbouy.h
* Update doors.h
---------
Co-authored-by: Misha <106913236+MishaProductions@users.noreply.github.com>
Co-authored-by: Christian Semmler <mail@csemmler.com>
Co-authored-by: Joshua Peisach <itzswirlz2020@outlook.com>
		
	
		
			
				
	
	
		
			343 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #ifndef _tgl_h
 | |
| #define _tgl_h
 | |
| 
 | |
| #include "tglvector.h"
 | |
| 
 | |
| #include <d3d.h>
 | |
| #include <ddraw.h>
 | |
| #include <windows.h>
 | |
| 
 | |
| namespace Tgl
 | |
| {
 | |
| 
 | |
| enum ColorModel {
 | |
| 	// Note: Not used in shipped game, no way to verify contents.
 | |
| 	Ramp,
 | |
| 	RGB
 | |
| };
 | |
| 
 | |
| enum ShadingModel {
 | |
| 	Wireframe,
 | |
| 	UnlitFlat,
 | |
| 	Flat,
 | |
| 	Gouraud,
 | |
| 	Phong
 | |
| };
 | |
| 
 | |
| enum LightType {
 | |
| 	Ambient,
 | |
| 	Point,
 | |
| 	Spot,
 | |
| 	Directional,
 | |
| 	ParallelPoint
 | |
| };
 | |
| 
 | |
| enum ProjectionType {
 | |
| 	Perspective,
 | |
| 	Orthographic
 | |
| };
 | |
| 
 | |
| enum TextureMappingMode {
 | |
| 	Linear,
 | |
| 	PerspectiveCorrect
 | |
| };
 | |
| 
 | |
| // Not in the Tgl leak, inferred from the assembly
 | |
| enum MaterialMode {
 | |
| 	FromParent,
 | |
| 	FromFrame,
 | |
| 	FromMesh,
 | |
| };
 | |
| 
 | |
| struct PaletteEntry {
 | |
| 	unsigned char m_red;
 | |
| 	unsigned char m_green;
 | |
| 	unsigned char m_blue;
 | |
| };
 | |
| 
 | |
| struct DeviceDirect3DCreateData {
 | |
| 	IDirect3D2* m_pDirect3D;
 | |
| 	IDirect3DDevice2* m_pDirect3DDevice;
 | |
| };
 | |
| 
 | |
| struct DeviceDirectDrawCreateData {
 | |
| 	const GUID* m_driverGUID;
 | |
| 	HWND m_hWnd;
 | |
| 	IDirectDraw* m_pDirectDraw;
 | |
| 	IDirectDrawSurface* m_pFrontBuffer;
 | |
| 	IDirectDrawSurface* m_pBackBuffer;
 | |
| 
 | |
| 	// These have possibly been removed in the shipped game
 | |
| 	// (Put them back if we can verify when we find a callsite
 | |
| 	// which constructs this type)
 | |
| 	// IDirectDrawPalette* m_pPalette;
 | |
| 	// int m_isFullScreen;
 | |
| };
 | |
| 
 | |
| // Result type used for all methods in the Tgl API
 | |
| enum Result {
 | |
| 	Error = 0,
 | |
| 	Success = 1
 | |
| };
 | |
| 
 | |
| inline int Succeeded(Result result)
 | |
| {
 | |
| 	return (result == Success);
 | |
| }
 | |
| 
 | |
| // Forward declarations
 | |
| class Renderer;
 | |
| class Object;
 | |
| class Device;
 | |
| class View;
 | |
| class Light;
 | |
| class Camera;
 | |
| class Group;
 | |
| class Mesh;
 | |
| class Texture;
 | |
| class Unk;
 | |
| 
 | |
| // VTABLE: LEGO1 0x100db980
 | |
| class Object {
 | |
| public:
 | |
| 	virtual ~Object() {}
 | |
| 
 | |
| 	virtual void* ImplementationDataPtr() = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2250
 | |
| 	// Tgl::Object::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100db948
 | |
| class Renderer : public Object {
 | |
| public:
 | |
| 	// vtable+0x08
 | |
| 	virtual Device* CreateDevice(const DeviceDirectDrawCreateData&) = 0;
 | |
| 	virtual Device* CreateDevice(const DeviceDirect3DCreateData&) = 0;
 | |
| 
 | |
| 	// vtable+0x10
 | |
| 	virtual View* CreateView(
 | |
| 		const Device*,
 | |
| 		const Camera*,
 | |
| 		unsigned long x,
 | |
| 		unsigned long y,
 | |
| 		unsigned long width,
 | |
| 		unsigned long height
 | |
| 	) = 0;
 | |
| 	virtual Camera* CreateCamera() = 0;
 | |
| 	virtual Light* CreateLight(LightType, float r, float g, float b) = 0;
 | |
| 	virtual Group* CreateGroup(const Group* pParent = 0) = 0;
 | |
| 
 | |
| 	// vtable+0x20
 | |
| 	virtual Unk* CreateUnk() = 0;
 | |
| 	virtual Texture* CreateTexture(
 | |
| 		int width,
 | |
| 		int height,
 | |
| 		int bitsPerTexel,
 | |
| 		const void* pTexels,
 | |
| 		int pTexelsArePersistent,
 | |
| 		int paletteEntryCount,
 | |
| 		const PaletteEntry* pEntries
 | |
| 	) = 0;
 | |
| 	virtual Texture* CreateTexture() = 0;
 | |
| 	virtual Result SetTextureDefaultShadeCount(unsigned long) = 0;
 | |
| 
 | |
| 	// vtable+0x30
 | |
| 	virtual Result SetTextureDefaultColorCount(unsigned long) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a17c0
 | |
| 	// Tgl::Renderer::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| Renderer* CreateRenderer();
 | |
| 
 | |
| // VTABLE: LEGO1 0x100db9b8
 | |
| class Device : public Object {
 | |
| public:
 | |
| 	// vtable+0x08
 | |
| 	virtual unsigned long GetWidth() = 0;
 | |
| 	virtual unsigned long GetHeight() = 0;
 | |
| 
 | |
| 	// vtable+0x10
 | |
| 	virtual Result SetColorModel(ColorModel) = 0;
 | |
| 	virtual Result SetShadingModel(ShadingModel) = 0;
 | |
| 	virtual Result SetShadeCount(unsigned long) = 0;
 | |
| 	virtual Result SetDither(int) = 0;
 | |
| 
 | |
| 	// vtable+0x20
 | |
| 	virtual Result Update() = 0;
 | |
| 	virtual void InitFromD3DDevice(Device*) = 0;
 | |
| 	virtual void InitFromWindowsDevice(Device*) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a28e0
 | |
| 	// Tgl::Device::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dba28
 | |
| class View : public Object {
 | |
| public:
 | |
| 	virtual Result Add(const Light*) = 0;
 | |
| 	virtual Result Remove(const Light*) = 0;
 | |
| 
 | |
| 	// vtable+0x10
 | |
| 	virtual Result SetCamera(const Camera*) = 0;
 | |
| 	virtual Result SetProjection(ProjectionType) = 0;
 | |
| 	virtual Result SetFrustrum(float frontClippingDistance, float backClippingDistance, float degrees) = 0;
 | |
| 	virtual Result SetBackgroundColor(float r, float g, float b) = 0;
 | |
| 
 | |
| 	// vtable+0x20
 | |
| 	virtual Result GetBackgroundColor(float* r, float* g, float* b) = 0;
 | |
| 	virtual Result Clear() = 0;
 | |
| 	virtual Result Render(const Light*) = 0;
 | |
| 	virtual Result ForceUpdate(unsigned long x, unsigned long y, unsigned long width, unsigned long height) = 0;
 | |
| 
 | |
| 	// vtable+0x30
 | |
| 	virtual Result TransformWorldToScreen(const float world[3], float screen[4]) = 0;
 | |
| 	virtual Result TransformScreenToWorld(const float screen[4], float world[3]) = 0;
 | |
| 
 | |
| 	// Pick():
 | |
| 	//  x, y:
 | |
| 	//      view coordinates
 | |
| 	//
 | |
| 	//  ppGroupsToPickFrom:
 | |
| 	//      array of (Group*) in any order
 | |
| 	//      Groups to pick from
 | |
| 	//
 | |
| 	//  groupsToPickFromCount:
 | |
| 	//      size of ppGroupsToPickFrom
 | |
| 	//
 | |
| 	//  rppPickedGroups:
 | |
| 	//      output parameter
 | |
| 	//      array of (Group*) representing a Group hierarchy
 | |
| 	//      top-down order (element 0 is root/scene)
 | |
| 	//      caller must deallocate array
 | |
| 	//      ref count of each element (Group*) has not been increased
 | |
| 	//      an element will be 0, if a corresponding Group was not found in ppGroupsToPickFrom
 | |
| 	//
 | |
| 	//  rPickedGroupCount:
 | |
| 	//      output parameter
 | |
| 	//      size of rppPickedGroups
 | |
| 	virtual Result Pick(
 | |
| 		unsigned long x,
 | |
| 		unsigned long y,
 | |
| 		const Group** ppGroupsToPickFrom,
 | |
| 		int groupsToPickFromCount,
 | |
| 		const Group**& rppPickedGroups,
 | |
| 		int& rPickedGroupCount
 | |
| 	) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2950
 | |
| 	// Tgl::View::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dbae8
 | |
| class Camera : public Object {
 | |
| public:
 | |
| 	virtual Result SetTransformation(FloatMatrix4&) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2a30
 | |
| 	// Tgl::Camera::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dbb08
 | |
| class Light : public Object {
 | |
| public:
 | |
| 	virtual Result SetTransformation(FloatMatrix4&) = 0;
 | |
| 	virtual Result SetColor(float r, float g, float b) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2aa0
 | |
| 	// Tgl::Light::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dbbb0
 | |
| class Mesh : public Object {
 | |
| public:
 | |
| 	virtual Result SetColor(float r, float g, float b, float a) = 0;
 | |
| 	virtual Result SetTexture(const Texture*) = 0;
 | |
| 	virtual Result GetTexture(Texture*&) = 0;
 | |
| 
 | |
| 	virtual Result SetTextureMappingMode(ProjectionType) = 0;
 | |
| 	virtual Result SetShadingModel(ShadingModel) = 0;
 | |
| 
 | |
| 	// Clone data in underlying group
 | |
| 	virtual Mesh* DeepClone(Unk*) = 0;
 | |
| 
 | |
| 	// Just get another Group pointing to the same underlying data
 | |
| 	virtual Mesh* ShallowClone(Unk*) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a3e60
 | |
| 	// Tgl::Mesh::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dbaa0
 | |
| class Group : public Object {
 | |
| public:
 | |
| 	virtual Result SetTransformation(FloatMatrix4&) = 0;
 | |
| 	virtual Result SetColor(float r, float g, float b, float a) = 0;
 | |
| 	virtual Result SetTexture(const Texture*) = 0;
 | |
| 	virtual Result GetTexture(Texture*&) = 0;
 | |
| 	virtual Result SetMaterialMode(MaterialMode) = 0;
 | |
| 	virtual Result Add(const Mesh*) = 0;
 | |
| 	virtual Result Add(const Group*) = 0;
 | |
| 	virtual Result Remove(const Mesh*) = 0;
 | |
| 	virtual Result Remove(const Group*) = 0;
 | |
| 	virtual Result RemoveAll() = 0;
 | |
| 
 | |
| 	// This is TransformLocalToWorld in the leak, however it seems
 | |
| 	// to have been replaced by something else in the shipped code.
 | |
| 	virtual Result Unknown() = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a29c0
 | |
| 	// Tgl::Group::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // Don't know what this is. Seems like another Tgl object which
 | |
| // was not in the leaked Tgl code. My suspicion is that it's
 | |
| // some kind of builder class for creating meshes.
 | |
| // VTABLE: LEGO1 0x100dbb30
 | |
| class Unk : public Object {
 | |
| public:
 | |
| 	virtual Result SetMeshData(
 | |
| 		unsigned long faceCount,
 | |
| 		unsigned long vertexCount,
 | |
| 		const float (*pPositions)[3],
 | |
| 		const float (*pNormals)[3],
 | |
| 		const float (*pTextureCoordinates)[2],
 | |
| 		unsigned long vertexPerFaceCount,
 | |
| 		unsigned long* pFaceData
 | |
| 	) = 0;
 | |
| 	virtual Result GetBoundingBox(float min[3], float max[3]) = 0;
 | |
| 	virtual Unk* Clone() = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2b10
 | |
| 	// Tgl::Unk::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| // VTABLE: LEGO1 0x100dbb68
 | |
| class Texture : public Object {
 | |
| public:
 | |
| 	// vtable+0x08
 | |
| 	virtual Result SetTexels(int width, int height, int bitsPerTexel, void* pTexels) = 0;
 | |
| 	virtual void FillRowsOfTexture(int y, int height, void* pBuffer) = 0;
 | |
| 
 | |
| 	// vtable+0x10
 | |
| 	virtual Result Changed(int texelsChanged, int paletteChanged) = 0;
 | |
| 	virtual Result GetBufferAndPalette(
 | |
| 		int* pWidth,
 | |
| 		int* pHeight,
 | |
| 		int* pDepth,
 | |
| 		void** ppBuffer,
 | |
| 		int* pPaletteSize,
 | |
| 		PaletteEntry** ppPalette
 | |
| 	) = 0;
 | |
| 	virtual Result SetPalette(int entryCount, PaletteEntry* pEntries) = 0;
 | |
| 
 | |
| 	// SYNTHETIC: LEGO1 0x100a2b80
 | |
| 	// Tgl::Texture::`scalar deleting destructor'
 | |
| };
 | |
| 
 | |
| } // namespace Tgl
 | |
| 
 | |
| #endif /* _tgl_h */
 |