World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Структура OutdoorLocationTerrain

#include <Outdoor.h>

+ Граф связей класса OutdoorLocationTerrain:

Открытые члены

 OutdoorLocationTerrain ()
 
void _47C7A9 ()
 
void Release ()
 
void FillDMap (int X, int Y, int W, int Z)
 
int _47CB57 (unsigned char *pixels_8bit, int a2, int num_pixels)
 
bool ZeroLandscape ()
 
bool Initialize ()
 

Открытые атрибуты

uint8_tpHeightmap
 
uint8_tpTilemap
 
uint8_tpAttributemap
 
struct DMappDmap
 
int16_t field_10
 
int16_t field_12
 
int16_t field_14
 
int16_t field_16
 
int field_18
 
int field_1C
 

Подробное описание

См. определение в файле Outdoor.h строка 37

Конструктор(ы)

◆ OutdoorLocationTerrain()

OutdoorLocationTerrain::OutdoorLocationTerrain ( )
inline

См. определение в файле Outdoor.h строка 39

39  {
40  pHeightmap = nullptr;
41  pTilemap = nullptr;
42  pAttributemap = nullptr;
43  pDmap = nullptr;
44  this->field_10 = 0;
45  this->field_12 = 0;
46  }

Перекрестные ссылки field_10, field_12, pAttributemap, pDmap, pHeightmap и pTilemap.

Методы

◆ _47C7A9()

void OutdoorLocationTerrain::_47C7A9 ( )

См. определение в файле Outdoor.cpp строка 599

599  {
600  this->field_10 = 0;
601  this->field_12 = 0;
602  this->field_16 = 0;
603  this->field_14 = 0;
604  this->field_1C = 0;
605  this->field_18 = 0;
606 }

Перекрестные ссылки field_10, field_12, field_14, field_16, field_18 и field_1C.

Используется в Release().

+ Граф вызова функции:

◆ Release()

void OutdoorLocationTerrain::Release ( )

См. определение в файле Outdoor.cpp строка 609

609  { // очистить локацию
610  free(this->pHeightmap);
611  pHeightmap = nullptr;
612  free(pTilemap);
613  pTilemap = nullptr;
614  free(pAttributemap);
615  pAttributemap = nullptr;
616  free(pDmap);
617  pDmap = nullptr;
618 
619  _47C7A9();
620 }

Перекрестные ссылки _47C7A9(), pAttributemap, pDmap, pHeightmap и pTilemap.

Используется в OutdoorLocation::Release().

+ Граф вызовов:
+ Граф вызова функции:

◆ FillDMap()

void OutdoorLocationTerrain::FillDMap ( int  X,
int  Y,
int  W,
int  Z 
)

См. определение в файле Outdoor.cpp строка 623

623  {
624  double v6; // st7@1
625  double v7; // st7@2
626  double v8; // st7@2
627  int result; // eax@3
628  int v10; // eax@4
629  int v11; // ecx@5
630  int v12; // ecx@6
631  int v13; // edi@7
632  int v14; // edx@9
633  // int v15; // eax@15
634  unsigned __int8 *pMapHeight; // ebx@15
635  int v17; // eax@15
636  int v18; // ecx@15
637  int v19; // esi@15
638  int v20; // edi@15
639  int v21; // edx@15
640  int v22; // ecx@15
641  int v23; // ebx@15
642  int v24; // ecx@15
643  int v25; // ST28_4@15
644  double v26; // st7@15
645  double v27; // st6@15
646  double v28; // st5@15
647  double v29; // st7@15
648  double v30; // st7@16
649  double v31; // st7@17
650  int v32; // eax@21
651  double v33; // st7@21
652  double v34; // st6@21
653  double v35; // st5@21
654  double v36; // st7@21
655  double v37; // st7@22
656  double v38; // st7@23
657  int v39; // [sp+14h] [bp-34h]@8
658  int v40; // [sp+18h] [bp-30h]@15
659  int v41; // [sp+1Ch] [bp-2Ch]@15
660  int v42; // [sp+20h] [bp-28h]@15
661  int v44; // [sp+28h] [bp-20h]@21
662  float v45; // [sp+2Ch] [bp-1Ch]@1
663  float v46; // [sp+30h] [bp-18h]@1
664  float v47; // [sp+34h] [bp-14h]@1
665  // int v48; // [sp+38h] [bp-10h]@7
666  int v49; // [sp+3Ch] [bp-Ch]@10
667  int v50; // [sp+40h] [bp-8h]@9
668  float v51; // [sp+44h] [bp-4h]@15
669  float v52; // [sp+44h] [bp-4h]@21
670  float v53; // [sp+50h] [bp+8h]@15
671  float v54; // [sp+50h] [bp+8h]@21
672  // int v55; // [sp+54h] [bp+Ch]@15
673  float v56; // [sp+54h] [bp+Ch]@15
674  float v57; // [sp+54h] [bp+Ch]@21
675 
676  v46 = -64.0;
677  v47 = -64.0;
678  v45 = 64.0;
679  v6 = sqrt(12288.0);
680  if (v6 != 0.0) {
681  v7 = 1.0 / v6;
682  v45 = 64.0 * v7;
683  v8 = v7 * -64.0;
684  v46 = v8;
685  v47 = v8;
686  }
687  result = Y;
688  if (Y > Z) {
689  v10 = Z ^ Y;
690  Z ^= Y ^ Z;
691  result = Z ^ v10;
692  }
693  v11 = X;
694  if (X > W) {
695  v12 = W ^ X;
696  W ^= X ^ W;
697  v11 = W ^ v12;
698  }
699  // v48 = result - 1;
700  if (result - 1 <= Z) {
701  v39 = v11 - 1;
702  for (v13 = result - 1; v13 <= Z; v13++) {
703  v50 = v39;
704  if (v39 <= W) {
705  result = (v39 - 63) << 9;
706  v49 = (v39 - 63) << 9;
707  for (v14 = v39; v14 <= W; v14++) {
708  if (v13 >= 0 && result >= -32256 && v13 <= 127 &&
709  result <= 32768) {
710  // v15 = pOutLocTerrain->field_10;
711  // v55 = pOutLocTerrain->field_10;
712  pMapHeight = this->pHeightmap;
713  v17 = (int)(&pMapHeight[v13 * this->field_10] + v14);
714  v18 = -v13;
715  v19 = (64 - v13) << 9;
716  v20 = 32 * *(char *)v17;
717  v21 = 32 * *(char *)(v17 + 1);
718 
719  v22 = (v18 + 63) << 9;
720  v41 = v22;
721  v23 = (int)(&pMapHeight[this->field_10 * (v13 + 1)] +
722  v14);
723  v24 = v22 - v19;
724  v40 = 32 * *(char *)v23;
725  v42 = 32 * *(char *)(v23 + 1);
726 
727  v25 = v49 - 512 - v49;
728  v26 = (double)-((v20 - v21) * v24);
729  v51 = v26;
730  v27 = (double)-(v25 * (v42 - v21));
731  v53 = v27;
732  v28 = (double)(v25 * v24);
733  v56 = v28;
734  v29 = sqrt(v28 * v28 + v27 * v27 + v26 * v26);
735  if (v29 != 0.0) {
736  v30 = 1.0 / v29;
737  v51 = v51 * v30;
738  v53 = v53 * v30;
739  v56 = v30 * v56;
740  }
741  v31 = (v56 * v47 + v53 * v46 + v51 * v45) * 31.0;
742  if (v31 < 0.0) v31 = 0.0;
743  if (v31 > 31.0) v31 = 31.0;
744  v44 = 2 * (v14 + v13 * this->field_10);
745  // pOutLocTerrain = pOutLocTerrain2;
746  *((char *)this->pDmap + v44 + 1) = (signed __int64)v31;
747 
748  v32 = v49 - (v49 - 512);
749  v33 = (double)-((v42 - v40) * (v19 - v41));
750  v52 = v33;
751  v34 = (double)-(v32 * (v20 - v40));
752  v54 = v34;
753  v35 = (double)(v32 * (v19 - v41));
754  v57 = v35;
755  v36 = sqrt(v35 * v35 + v34 * v34 + v33 * v33);
756  if (v36 != 0.0) {
757  v37 = 1.0 / v36;
758  v52 = v52 * v37;
759  v54 = v54 * v37;
760  v57 = v37 * v57;
761  }
762  v38 = (v57 * v47 + v54 * v46 + v52 * v45) * 31.0;
763  if (v38 < 0.0) v38 = 0.0;
764  if (v38 > 31.0) v38 = 31.0;
765  // v13 = v48;
766  *((char *)this->pDmap + v44) = (signed __int64)v38;
767  // v14 = v50;
768  result = v49;
769  }
770  // ++v14;
771  result += 512;
772  // v50 = v14;
773  v49 = result;
774  }
775  }
776  // ++v13;
777  // v48 = v13;
778  }
779  // while ( v13 <= Z );
780  }
781 }

Перекрестные ссылки field_10, pDmap и pHeightmap.

Используется в OutdoorLocation::CreateDebugLocation() и OutdoorLocation::Load().

+ Граф вызова функции:

◆ _47CB57()

int OutdoorLocationTerrain::_47CB57 ( unsigned char *  pixels_8bit,
int  a2,
int  num_pixels 
)

См. определение в файле Outdoor.cpp строка 784

785  {
786  int result; // eax@2
787  // unsigned __int16 *v5; // edx@3
788  // double v6; // st7@3
789  // int v8; // eax@3
790  // int v9; // eax@4
791  // int v10; // eax@5
792  // double v11; // st6@7
793  // signed int v12; // edi@7
794  // int v13; // esi@9
795  // char *v14; // esi@10
796  // signed int v15; // ecx@10
797  // char v16[256]; // [sp+4h] [bp-124h]@9
798  // unsigned __int16 *v17; // [sp+104h] [bp-24h]@3
799  // float v22; // [sp+118h] [bp-10h]@3
800  // float v23; // [sp+11Ch] [bp-Ch]@3
801  // int i; // [sp+120h] [bp-8h]@3
802  // unsigned int v25; // [sp+124h] [bp-4h]@5
803  // signed int a2a; // [sp+134h] [bp+Ch]@3
804  // unsigned int a2b; // [sp+134h] [bp+Ch]@7
805  // float a3a; // [sp+138h] [bp+10h]@7
806  // int a3b; // [sp+138h] [bp+10h]@9
807 
808  int num_r_bits = 5;
809  int num_g_bits = 6;
810  int num_b_bits = 5;
811 
812  int r_mask = 0xF800;
813  int g_mask = 0x7E0;
814  int b_mask = 0x1F;
815 
816  // if ( render->pRenderD3D )
817  result = 0;
818  /*else
819  {
820  __debugbreak();
821  v5 = PaletteManager::Get_Dark_or_Red_LUT(a2, 0, 1);
822  v6 = 0.0;
823  v22 = 0.0;
824  v8 = 0;
825  v17 = v5;
826  v23 = 0.0;
827  a2a = 0;
828  for ( i = 0; i < num_pixels; ++i )
829  {
830  v9 = *(char *)(v8 + pixels_8bit);
831  if ( v9 )
832  {
833  v10 = v5[v9];
834  v6 = v6 + (double)((signed int)(r_mask & v10) >> (num_b_bits +
835  num_g_bits));
836  ++a2a;
837  v25 = b_mask & v10;
838  v22 = (double)((signed int)(g_mask & v10) >> num_b_bits) + v22;
839  v23 = (double)(signed int)(b_mask & v10) + v23;
840  }
841  v8 = i + 1;
842  }
843  v11 = 1.0 / (double)a2a;
844  a3a = v11;
845  v25 = (signed __int64)(a3a * v22);
846  i = (signed __int64)(a3a * v23);
847  v12 = 0;
848  a2b = num_b_bits + num_g_bits;
849  while ( 1 )
850  {
851  v13 = v17[v12];
852  a3b = abs((__int64)(signed __int64)(v11 * v6) - ((signed int)(r_mask &
853  v17[v12]) >> a2b)); BYTE3(a3b) = abs((signed)v25 - ((signed int)(g_mask &
854  v13) >> num_b_bits)) + a3b; v16[v12++] = abs((signed)i - (signed)(b_mask &
855  v13)) + BYTE3(a3b); if ( v12 >= 256 ) break;
856  }
857  result = 0;
858  v14 = (char *)&pPaletteManager->field_D1600[42][23][116];
859  v15 = 0;
860  do
861  {
862  if ( (unsigned __int8)v16[v15] < (signed int)v14 )
863  {
864  v14 = (char *)(unsigned __int8)v16[v15];
865  result = v15;
866  }
867  ++v15;
868  }
869  while ( v15 < 256 );
870  }*/
871  return result;
872 }

Используется в OutdoorLocation::_47F0E2().

+ Граф вызова функции:

◆ ZeroLandscape()

bool OutdoorLocationTerrain::ZeroLandscape ( )

См. определение в файле Outdoor.cpp строка 875

875  {
876  memset(this->pHeightmap, 0, 0x4000u);
877  memset(this->pTilemap, 90, 0x4000u);
878  memset(this->pAttributemap, 0, 0x4000u);
879  memset(this->pDmap, 0, 0x8000u);
880  this->field_12 = 128;
881  this->field_10 = 128;
882  this->field_16 = 7;
883  this->field_14 = 7;
884  this->field_1C = 127;
885  this->field_18 = 127;
886  return true;
887 }

Перекрестные ссылки field_10, field_12, field_14, field_16, field_18, field_1C, pAttributemap, pDmap, pHeightmap и pTilemap.

Используется в OutdoorLocation::CreateDebugLocation().

+ Граф вызова функции:

◆ Initialize()

bool OutdoorLocationTerrain::Initialize ( )

См. определение в файле Outdoor.cpp строка 890

890  {
891  pHeightmap = (unsigned __int8 *)malloc(0x4000); // height map
892  pTilemap = (unsigned __int8 *)malloc(0x4000); // tile map
893  pAttributemap = (unsigned __int8 *)malloc(0x4000); //карта атрибутов
894  pDmap = (struct DMap *)malloc(0x8000);
895  if (pHeightmap && pTilemap && pAttributemap && pDmap)
896  return true;
897  else
898  return false;
899 }

Перекрестные ссылки pAttributemap, pDmap, pHeightmap и pTilemap.

Используется в OutdoorLocation::CreateDebugLocation() и OutdoorLocation::Load().

+ Граф вызова функции:

Данные класса

◆ pHeightmap

◆ pTilemap

◆ pAttributemap

uint8_t* OutdoorLocationTerrain::pAttributemap

См. определение в файле Outdoor.h строка 57

Используется в Initialize(), OutdoorLocation::Load(), OutdoorLocationTerrain(), Release() и ZeroLandscape().

◆ pDmap

struct DMap* OutdoorLocationTerrain::pDmap

См. определение в файле Outdoor.h строка 58

Используется в FillDMap(), Initialize(), OutdoorLocationTerrain(), Release() и ZeroLandscape().

◆ field_10

int16_t OutdoorLocationTerrain::field_10

См. определение в файле Outdoor.h строка 59

Используется в _47C7A9(), FillDMap(), OutdoorLocationTerrain() и ZeroLandscape().

◆ field_12

int16_t OutdoorLocationTerrain::field_12

См. определение в файле Outdoor.h строка 60

Используется в _47C7A9(), OutdoorLocationTerrain() и ZeroLandscape().

◆ field_14

int16_t OutdoorLocationTerrain::field_14

См. определение в файле Outdoor.h строка 61

Используется в _47C7A9() и ZeroLandscape().

◆ field_16

int16_t OutdoorLocationTerrain::field_16

См. определение в файле Outdoor.h строка 62

Используется в _47C7A9() и ZeroLandscape().

◆ field_18

int OutdoorLocationTerrain::field_18

См. определение в файле Outdoor.h строка 63

Используется в _47C7A9() и ZeroLandscape().

◆ field_1C

int OutdoorLocationTerrain::field_1C

См. определение в файле Outdoor.h строка 64

Используется в _47C7A9() и ZeroLandscape().


Объявления и описания членов структур находятся в файлах:
OutdoorLocationTerrain::pHeightmap
uint8_t * pHeightmap
Definition: Outdoor.h:55
DMap
Definition: Outdoor.h:29
OutdoorLocationTerrain::pAttributemap
uint8_t * pAttributemap
Definition: Outdoor.h:57
result
GLuint64EXT * result
Definition: SDL_opengl_glext.h:9435
OutdoorLocationTerrain::field_18
int field_18
Definition: Outdoor.h:63
OutdoorLocationTerrain::pDmap
struct DMap * pDmap
Definition: Outdoor.h:58
OutdoorLocationTerrain::field_12
int16_t field_12
Definition: Outdoor.h:60
OutdoorLocationTerrain::field_1C
int field_1C
Definition: Outdoor.h:64
OutdoorLocationTerrain::pTilemap
uint8_t * pTilemap
Definition: Outdoor.h:56
OutdoorLocationTerrain::field_14
int16_t field_14
Definition: Outdoor.h:61
OutdoorLocationTerrain::field_10
int16_t field_10
Definition: Outdoor.h:59
OutdoorLocationTerrain::_47C7A9
void _47C7A9()
Definition: Outdoor.cpp:599
OutdoorLocationTerrain::field_16
int16_t field_16
Definition: Outdoor.h:62