Mercurial > might-and-magic-trilogy
diff DecalBuilder.h @ 0:8b8875f5b359
Initial commit
author | Nomad |
---|---|
date | Fri, 05 Oct 2012 16:07:14 +0200 |
parents | |
children | bcc051713d20 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DecalBuilder.h Fri Oct 05 16:07:14 2012 +0200 @@ -0,0 +1,206 @@ +#pragma once +#include "Render.h" + + +#pragma pack(push, 1) +struct DecalBuilder_stru0 +{ + double _43B570(); + + int field_0; + int field_4; + int field_8; + int field_C; + int field_10; + int field_14; + int field_18; + int field_1C_flags; + __int64 field_20_time; +}; +#pragma pack(pop) + + + +/* 181 */ +#pragma pack(push, 1) +struct Decal +{ + void Decal_base_ctor(); + //----- (0043B60C) -------------------------------------------------------- + inline Decal() + { + Decal_base_ctor(); + field_C1C = 0; + } + + //----- (0043B625) -------------------------------------------------------- + //void __thiscall Decal::vdtor(Decal *this, bool a2) + //----- (0043B641) -------------------------------------------------------- + virtual ~Decal() + { + } + + void (__thiscall ***vdestructor_ptr)(Decal *, bool); + int uNumVertices; + RenderVertexSoft pVertices[64]; + __int16 field_C08; + __int16 field_C0A; + __int16 field_C0C; + __int16 field_C0E; + int field_C10; + int field_C14; + DecalBuilder_stru0 *field_C18; + int field_C1C; +}; +#pragma pack(pop) + +/* 180 */ +#pragma pack(push, 1) +struct DecalBuilder +{ + //----- (0049B408) -------------------------------------------------------- + DecalBuilder() + { + char *v2; // eax@1 + signed int v3; // ecx@1 + + auto v1 = this; + /*_eh_vector_constructor_iterator_( + this->std__vector_pDecals, + 3104, + 1024, + (void (__thiscall *)(void *))Decal::Decal, + (void (__thiscall *)(void *))Decal::dtor);*/ + v1->std__vector_pDecals_size = 0; + v1->field_308008 = 0; + v2 = (char *)&v1->pVertices[0].flt_2C; + v3 = 256; + do + { + *(float *)v2 = 0.0; + v2 += 48; + --v3; + } + while ( v3 ); + } + + //----- (0049B471) -------------------------------------------------------- + virtual ~DecalBuilder() + {} + + + bool AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9); + void Reset(unsigned int bPreserveBloodsplats); + char ApplyDecals(int a2, char a3, struct stru154 *a4, int a5, struct RenderVertexSoft *a6, int a7, char a8, int a9); + char _49B790_build_decal_geometry(int a2, char a3, int a4, int a5, int a6, int a7, struct RenderVertexSoft *a8, struct stru314 *a9, signed int a10, struct RenderVertexSoft *a11, char uClipFlags); + char ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID); + char ApplyDecals_OutdoorFace(ODMFace *pFace); + bool _49BE8A(struct stru148 *a2, float a3, int a4, struct RenderVertexSoft *a5, unsigned int uStripType, char a7); + void DrawDecal(Decal *pDecal, float a2); + void DrawDecals(float a2); + void DrawBloodsplats(); + void DrawDecalDebugOutlines(); + + + + void (__thiscall ***vdestructor_ptr)(DecalBuilder *, bool); + Decal std__vector_pDecals[1024]; + unsigned int std__vector_pDecals_size; + int field_308008; + RenderVertexSoft pVertices[256]; + int std__vector_30B00C[1024]; + int uNumDecals; + float field_30C010; + float field_30C014; + float field_30C018; + float field_30C01C; + float field_30C020; + float field_30C024; + int field_30C028; + int field_30C02C; + float flt_30C030; + float field_30C034; +}; +#pragma pack(pop) + +extern struct DecalBuilder *pDecalBuilder; + + + + + +/* 158 */ +#pragma pack(push, 1) +struct Bloodsplat +{ + //----- (0043B538) -------------------------------------------------------- + inline Bloodsplat() + { + this->field_1C = 0; + this->field_20 = 0; + this->field_24 = 0; + //this->vdestructor_ptr = &Bloodsplat_pvdtor; + } + + //----- (0043B54C) -------------------------------------------------------- + //void __thiscall Bloodsplat::vdtor(Bloodsplat *this, char a2) + + //----- (0043B569) -------------------------------------------------------- + virtual ~Bloodsplat() + { + } + + void (__thiscall ***vdestructor_ptr)(Bloodsplat *, bool); + float x; + float y; + float z; + float radius; + int field_14; + char r; + char g; + char b; + char field_1B; + int field_1C; + int field_20; + int field_24; +}; +#pragma pack(pop) + +/* 159 */ +#pragma pack(push, 1) +struct BloodsplatContainer +{ + //----- (0043B688) -------------------------------------------------------- + inline BloodsplatContainer() + { + /*_eh_vector_constructor_iterator_( + this->std__vector_pBloodsplats, + 40, + 64, + (void (__thiscall *)(void *))Bloodsplat::Bloodsplat, + (void (__thiscall *)(void *))Bloodsplat::dtor); + v1->std__vector_pBloodsplats_size = 0;*/ + uNumBloodsplats = 0; + } + //----- (0043B6D6) -------------------------------------------------------- + virtual ~BloodsplatContainer() + { + //this->vdestructor_ptr = &BloodsplatContainer_pvdtor; + //_eh_vector_destructor_iterator_(this->std__vector_pBloodsplats, 40, 64, Bloodsplat::dtor); + } + + + bool AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9); + bool AddBloodsplat(float x, float y, float z, float radius, char r, char g, char b); + + + void (__thiscall ***vdestructor_ptr)(BloodsplatContainer *, bool); + Bloodsplat std__vector_pBloodsplats[64]; + unsigned int std__vector_pBloodsplats_size; + int uNumBloodsplats; +}; +#pragma pack(pop) + + + +extern struct BloodsplatContainer *pBloodsplatContainer; // idb \ No newline at end of file