Mercurial > mm7
diff Engine/Graphics/Outdoor.h @ 2496:5abd8fc8f1c6
for ITEM_ARTIFACT_LADYS_ESCORT
author | Ritor1 |
---|---|
date | Thu, 18 Sep 2014 17:38:54 +0600 |
parents | |
children | 68cdef6879a0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Engine/Graphics/Outdoor.h Thu Sep 18 17:38:54 2014 +0600 @@ -0,0 +1,278 @@ +#pragma + +#include "Indoor.h" +#include "TileFrameTable.h" +#include "Engine/Graphics/BSPModel.h" + +#define DAY_ATTRIB_FOG 1 + +/* 256 */ +#pragma pack(push, 1) +struct ODMHeader +{ + int uVersion; + char pMagic[4]; + unsigned int uCompressedSize; + unsigned int uDecompressedSize; +}; +#pragma pack(pop) + + + +/* 78 */ +#pragma pack(push, 1) +struct OutdoorLocationTileType +{ + Tileset tileset; + unsigned __int16 uTileID; +}; +#pragma pack(pop) + +#pragma pack(push, 1) +struct DMap + { + unsigned __int8 field0; + unsigned __int8 field1; + }; +#pragma pack(pop) + +/* 79 */ +#pragma pack(push, 1) +struct OutdoorLocationTerrain +{ + //----- (0047C794) -------------------------------------------------------- + inline OutdoorLocationTerrain() + { + pHeightmap = nullptr; + pTilemap = nullptr; + pAttributemap = nullptr; + pDmap = nullptr;; + this->field_10 = 0; + this->field_12 = 0; + + + } + + void _47C7A9(); + void Release(); + void FillDMap(int X, int Y, int W, int Z); + int _47CB57(int a1, int a2, int a3); + bool ZeroLandscape(); + bool Initialize(); + + + unsigned __int8 *pHeightmap; + unsigned __int8 *pTilemap; + unsigned __int8 *pAttributemap; + struct DMap *pDmap; + __int16 field_10; + __int16 field_12; + __int16 field_14; + __int16 field_16; + int field_18; + int field_1C; +}; +#pragma pack(pop) + + +/* 81 */ +#pragma pack(push, 1) +struct ODMFace +{ + bool HasEventHint(); + + + static bool IsBackfaceNotCulled(struct RenderVertexSoft *a2, struct Polygon *polygon); + + inline bool Invisible() const {return (uAttributes & FACE_INVISIBLE) != 0;} + inline bool Visible() const {return !Invisible();} + inline bool Portal() const {return (uAttributes & FACE_PORTAL) != 0;} + inline bool Fluid() const {return (uAttributes & FACE_FLUID) != 0;} + inline bool Indoor_sky() const {return (uAttributes & FACE_INDOOR_SKY) != 0;} + inline bool Clickable() const {return (uAttributes & FACE_CLICKABLE) != 0;} + inline bool Pressure_Plate() const {return (uAttributes & FACE_PRESSURE_PLATE) != 0;} + inline bool Ethereal() const {return (uAttributes & FACE_ETHEREAL) != 0;} + + struct Plane_int_ pFacePlane; + int zCalc1; + int zCalc2; + int zCalc3; + unsigned int uAttributes; + unsigned __int16 pVertexIDs[20]; + unsigned __int16 pTextureUIDs[20]; + unsigned __int16 pTextureVIDs[20]; + signed __int16 pXInterceptDisplacements[20]; + signed __int16 pYInterceptDisplacements[20]; + signed __int16 pZInterceptDisplacements[20]; + __int16 uTextureID; + __int16 sTextureDeltaU; + __int16 sTextureDeltaV; + struct BBox_short_ pBoundingBox; + __int16 sCogNumber; + __int16 sCogTriggeredID; + __int16 sCogTriggerType; + char field_128; + char field_129; + unsigned __int8 uGradientVertex1; + unsigned __int8 uGradientVertex2; + unsigned __int8 uGradientVertex3; + unsigned __int8 uGradientVertex4; + unsigned __int8 uNumVertices; + unsigned __int8 uPolygonType; + unsigned __int8 uShadeType; + unsigned __int8 bVisible; + char field_132; + char field_133; +}; +#pragma pack(pop) + + + +#pragma pack(push, 1) +struct OutdoorLocation +{ + OutdoorLocation(); + void subconstuctor(); + + void ExecDraw(unsigned int bRedraw); + void PrepareActorsDrawList(); + void CreateDebugLocation(); + void Release(); + bool Load(const char *pFilename, ODMFace *File, size_t a4, int *thisa); + int GetTileIdByTileMapId(signed int a2); + unsigned int DoGetTileTexture(signed int uX, signed int uZ); + int _47ED83(signed int a2, signed int a3); + int ActuallyGetSomeOtherTileInfo(signed int uX, signed int uY); + int DoGetHeightOnTerrain(signed int sX, signed int sZ); + int GetSoundIdByPosition(signed int X_pos, signed int Y_pos, int a4); + int UpdateDiscoveredArea(int a2, int a3, int a4); + bool IsMapCellFullyRevealed(signed int a2, signed int a3); + bool IsMapCellPartiallyRevealed(signed int a2, signed int a3); + bool _47F0E2(); + bool PrepareDecorations(); + void ArrangeSpriteObjects(); + bool InitalizeActors(int a1); + bool LoadRoadTileset(); + bool LoadTileGroupIds(); + double GetFogDensityByTime(); + int GetSomeOtherTileInfo(int sX, int sY); + unsigned int GetTileTexture(int sX, int sZ); + int GetHeightOnTerrain(int sX, int sZ); + bool Initialize(const char *pFilename, int File, size_t uRespawnInterval, int *thisa); + //bool Release2(); + bool GetTravelDestination(signed int sPartyX, signed int sPartyZ, char *pOut, signed int a5); + void MessWithLUN(); + void UpdateSunlightVectors(); + void UpdateFog(); + int GetNumFoodRequiredToRestInCurrentPos(int x, signed int y, int z); + void SetFog(); + void Draw(); + + static void LoadActualSkyFrame(); + + + char pLevelFilename[32]; + char pLocationFileName[32]; + char pLocationFileDescription[32]; + char pSkyTextureName[32]; + char pGroundTileset[32]; + OutdoorLocationTileType pTileTypes[4]; // [3] road tileset + int uNumBModels; + struct OutdoorLocationTerrain pTerrain; + void *pCmap; + BSPModel *pBModels; + unsigned int numFaceIDListElems; + unsigned __int16 *pFaceIDLIST; + unsigned int *pOMAP; + signed int sSky_TextureID; + signed int sMainTile_BitmapID; + __int16 field_F0; + __int16 field_F2; + int field_F4; + char field_F8[968]; + unsigned int uNumSpawnPoints; + struct SpawnPointMM7 *pSpawnPoints; + struct DDM_DLV_Header ddm; + LocationTime_stru1 loc_time; + //unsigned __int64 uLastVisitDay; + //char sky_texture_name[12]; + //int day_attrib; + //int day_fogrange_1; + //int day_fogrange_2; + // char field_510[24]; + unsigned char uFullyRevealedCellOnMap[88][11];//968 the inner array is 11 bytes long, because every bit is used for a separate cell, so in the end it's 11 * 8 bits = 88 values + unsigned char uPartiallyRevealedCellOnMap[88][11];//[968] + int field_CB8; + int max_terrain_dimming_level; + int field_CC0; + unsigned int pSpriteIDs_LUN[8]; + unsigned int uSpriteID_LUNFULL; + int field_CE8; + unsigned int uSpriteID_LUN3_4_cp; + int field_CF0; + unsigned int uSpriteID_LUN1_2_cp; + int field_CF8; + unsigned int uSpriteID_LUN1_4_cp; + int field_D00; + unsigned __int16 uSpriteID_LUN_SUN; + __int16 field_D06; + int field_D08; + int field_D0C; + int field_D10; + int field_D14; + int inv_sunlight_x; + int inv_sunlight_y; + int inv_sunlight_z; + int field_D24; + int field_D28; + int field_D2C; + Vec3_int_ vSunlight; + int field_D3C; + int field_D40; + int field_D44; + int field_D48; + int field_D4C; + float field_D50; + int field_D54; + int field_D58; + int field_D5C; + int field_D60; + int field_D64; + char field_D68[111900]; + float fFogDensity; + int uLastSunlightUpdateMinute; +}; +#pragma pack(pop) + + +extern struct OutdoorLocation *pOutdoor; + +void ODM_UpdateUserInputAndOther(); +int ODM_GetFloorLevel(int X, signed int Y, int Z, int, int *pOnWater, int *bmodel_pid, int bWaterWalk); +int GetCeilingHeight(int Party_X, signed int Party_Y, int Party_ZHeight, int pFaceID); +void ODM_GetTerrainNormalAt(int pos_x, int pos_z, Vec3_int_ *out); +void UpdateActors_ODM(); +void ODM_ProcessPartyActions(); +char Is_out15odm_underwater(); +void SetUnderwaterFog(); +void ODM_Project(unsigned int uNumVertices); +void sub_487DA9(); +void ODM_LoadAndInitialize(const char *pLevelFilename, struct ODMRenderParams *thisa); +unsigned int GetLevelFogColor(); +int __fastcall sub_47C3D7_get_fog_specular(int a1, int a2, float a3); +unsigned int WorldPosToGridCellX(int); // weak +unsigned int WorldPosToGridCellZ(int); // weak +int GridCellToWorldPosX(int); // weak +int GridCellToWorldPosZ(int); // weak +void sub_481ED9_MessWithODMRenderParams(); +bool IsTerrainSlopeTooHigh(int pos_x, int pos_y); +int __fastcall GetTerrainHeightsAroundParty2(int a1, int a2, int *a3, int a4); + + + + + + + + +