feat: Add landscape mesh support to MshConverter

- Auto-detect Model vs Landscape mesh types
- Model: uses indexed triangles (06, 0D, 07)
- Landscape: uses direct triangles (0B, 15)
- Add MSH_FORMAT.md documentation (Russian)
- Add Ghidra decompiled code for CLandscape
This commit is contained in:
bird_egop
2025-12-05 18:04:50 +03:00
parent 4951550420
commit fcfb8d0e8a
7 changed files with 4264 additions and 98 deletions
@@ -0,0 +1,10 @@
typedef struct BoundingBox {
Vector3 BottomFrontLeft;
Vector3 BottomFrontRight;
Vector3 BottomBackRight;
Vector3 BottomBackLeft;
Vector3 TopBackRight;
Vector3 TopFrontRight;
Vector3 TopBackLeft;
Vector3 TopFrontLeft;
} BoundingBox;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,60 @@
typedef struct CLandscape {
IComponent * IComponent;
CGameObject game_object;
ITerrain * ITerrain;
IMesh2 * IMesh2;
I0x1 * I0x1;
IControl * IControl;
I0x22 * IUnknown_0x22;
undefined4 01_data_ptr;
MSH_02_file * msh_02_data_ptr;
undefined4 0b_data_ptr;
// collapse unknown fields
int[3][5] field_532;
// collapse unknown fields
undefined4 IComponent_owner;
KindaArray array_0x278;
int _count_unk_obj_array_elemsize_212;
undefined4 vertices_count;
uint 15_element_count;
// collapse unknown fields
Vector3 * 03_vertices_data_ptr;
int 03_vertices_stride;
undefined4 04_data_ptr;
undefined4 04_stride;
// collapse unknown fields
undefined4 05_data_ptr;
undefined4 05_stride;
undefined4 12_microtexture_mapping_data_ptr;
undefined4 12_microtexture_mapping_stride;
// collapse unknown fields
MshMetaForLandscape * mshmeta_ptr;
// collapse unknown fields
KindaArray array_0x7a40;
BoundingBox bounding_box_from_msh_02;
IMatManager * * IMatManager;
undefined4 wear_ptr;
IEffectManager * * ResolvedIEffectManager;
ISystemArealMap * * ResolvedISystemArealMap;
ICollManager * * ResolvedICollManager;
ISoundPool * * ISoundPool;
I3DSound * * I3DSound;
ILightManager * * ILightManager_owned;
KindaArray array_0x7c00;
KindaArray array_0x7c0c;
CShade * Shade;
undefined4 I3DRender??;
undefined4 field_31776;
undefined4 flags_of_mesh_part;
INResFile * * INResFile;
KindaArray array_0x7c2c;
undefined4 current_visible_primitives_count;
IMesh2 * * meshes;
IGameObject * * game_objects;
// collapse unknown fields
KindaArray array_0x7c84;
undefined4 * field_31888;
undefined4 _CheckMaxBasementAngleStep;
CollisionContext m_CollisionContext;
BoundingBox bounding_box;
} CLandscape;
File diff suppressed because it is too large Load Diff