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

#include <PlayerFrameTable.h>

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

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

 PlayerFrameTable ()
 
unsigned int GetFrameIdByExpression (CHARACTER_EXPRESSION_ID expression)
 
PlayerFrameGetFrameBy_x (unsigned int uFramesetID, unsigned int uFrameID)
 
PlayerFrameGetFrameBy_y (int *a2, int *a3, int a4)
 
void ToFile ()
 
void FromFile (void *data_mm6, void *data_mm7, void *data_mm8)
 
int FromFileTxt (const char *Args)
 

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

unsigned int uNumFrames
 
struct PlayerFramepFrames
 

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

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

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

◆ PlayerFrameTable()

PlayerFrameTable::PlayerFrameTable ( )
inline

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

19 : uNumFrames(0), pFrames(nullptr) {}

Методы

◆ GetFrameIdByExpression()

unsigned int PlayerFrameTable::GetFrameIdByExpression ( CHARACTER_EXPRESSION_ID  expression)

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

9  {
10  for (uint i = 0; i < this->uNumFrames; i++) {
11  if (this->pFrames[i].expression == expression) return i;
12  }
13  return 0;
14 }

Перекрестные ссылки pFrames и uNumFrames.

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

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

◆ GetFrameBy_x()

PlayerFrame * PlayerFrameTable::GetFrameBy_x ( unsigned int  uFramesetID,
unsigned int  uFrameID 
)

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

18  {
19  unsigned int v3; // esi@1
20  __int16 v6; // dx@2
21  int v7; // edx@3
22  char *i; // eax@3
23  int v9; // ecx@5
24  PlayerFrame *result; // eax@6
25 
26  v3 = uFramesetID;
27  if (this->pFrames[uFramesetID].uFlags & 1 &&
28  (v6 = this->pFrames[uFramesetID].uAnimLength) != 0) {
29  v7 = ((signed int)uFrameID >> 3) % (unsigned __int16)v6;
30  for (i = (char *)&this->pFrames[uFramesetID].uAnimTime;; i += 10) {
31  v9 = *(short *)i;
32  if (v7 <= v9) break;
33  v7 -= v9;
34  ++v3;
35  }
36  result = &this->pFrames[v3];
37  } else {
38  result = &this->pFrames[uFramesetID];
39  }
40 
41  return result;
42 }

Перекрестные ссылки pFrames и PlayerFrame::uAnimTime.

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

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

◆ GetFrameBy_y()

PlayerFrame * PlayerFrameTable::GetFrameBy_y ( int *  a2,
int *  a3,
int  a4 
)

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

46  {
47  int v5; // esi@1
48  int v6; // eax@2
49 
50  v5 = a4 + *pAnimTime;
51  if (v5 < 8 * this->pFrames[*pFramesetID].uAnimTime) {
52  *pAnimTime = v5;
53  } else {
54  v6 = rand() % 4 + 21;
55  *pFramesetID = v6;
56  *pAnimTime = 8 * v5 % this->pFrames[v6].uAnimTime;
57  }
58  return &this->pFrames[*pFramesetID];
59 }

Перекрестные ссылки pFrames и PlayerFrame::uAnimTime.

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

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

◆ ToFile()

void PlayerFrameTable::ToFile ( )

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

62  {
63  PlayerFrameTable *v1; // esi@1
64  FILE *v2; // eax@1
65  FILE *v3; // edi@1
66 
67  PlayerFrameTable *Str = this;
68 
69  v1 = Str;
70  v2 = fopen("data\\dpft.bin", "wb");
71  v3 = v2;
72  if (!v2) Error("Unable to save dpft.bin");
73  fwrite(v1, 4, 1, v2);
74  fwrite(v1->pFrames, 0xAu, v1->uNumFrames, v3);
75  fclose(v3);
76 }

◆ FromFile()

void PlayerFrameTable::FromFile ( void data_mm6,
void data_mm7,
void data_mm8 
)

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

80  {
81  uint num_mm6_frames = data_mm6 ? *(int *)data_mm6 : 0,
82  num_mm7_frames = data_mm7 ? *(int *)data_mm7 : 0,
83  num_mm8_frames = data_mm8 ? *(int *)data_mm8 : 0;
84  uNumFrames = num_mm6_frames + num_mm7_frames + num_mm8_frames;
85  assert(uNumFrames);
86  assert(!num_mm8_frames);
87 
88  pFrames = (PlayerFrame *)malloc(uNumFrames * sizeof(PlayerFrame));
89  memcpy(pFrames, (char *)data_mm7 + 4, num_mm7_frames * sizeof(PlayerFrame));
90  memcpy(pFrames + num_mm7_frames, (char *)data_mm6 + 4,
91  num_mm6_frames * sizeof(PlayerFrame));
92  memcpy(pFrames + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4,
93  num_mm8_frames * sizeof(PlayerFrame));
94 }

Перекрестные ссылки pFrames и uNumFrames.

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

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

◆ FromFileTxt()

int PlayerFrameTable::FromFileTxt ( const char *  Args)

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

97  {
98  // PlayerFrameTable *v2; // ebx@1
99  FILE *v3; // eax@1
100  int v4; // esi@3
101  void *v5; // eax@10
102  FILE *v6; // ST0C_4@12
103  char *i; // eax@12
104  // __int16 v8; // ax@15
105  // const char *v9; // ST10_4@15
106  // unsigned __int16 v10; // ax@15
107  // const char *v11; // ST0C_4@15
108  int j; // esi@15
109  // int v13; // eax@17
110  int v14; // edx@22
111  int v15; // ecx@23
112  int v16; // eax@24
113  signed int k; // eax@27
114  // PlayerFrame *v18; // edx@28
115  int v19; // esi@28
116  int l; // ecx@29
117  char Buf; // [sp+Ch] [bp-2F8h]@3
118  FrameTableTxtLine v23; // [sp+200h] [bp-104h]@4
119  FrameTableTxtLine v24; // [sp+27Ch] [bp-88h]@4
120  int v25; // [sp+2F8h] [bp-Ch]@3
121  int v26; // [sp+2FCh] [bp-8h]@3
122  FILE *File; // [sp+300h] [bp-4h]@1
123  int Argsa; // [sp+30Ch] [bp+8h]@28
124 
125  __debugbreak(); // Ritor1;
126  // TileTable::dtor((TileTable *)this);
127  v3 = fopen(Args, "r");
128  File = v3;
129  if (!v3) Error("PlayerFrameTable::load - Unable to open file: %s.", Args);
130  v4 = 0;
131  v25 = 0;
132  v26 = 1;
133  if (fgets(&Buf, 490, v3)) {
134  do {
135  *strchr(&Buf, 10) = 0;
136  memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
137  if (v24.uPropCount && *v24.pProperties[0] != 47) {
138  if (v24.uPropCount < 3)
139  Error(
140  "PlayerFrameTable::load, too few arguments, %s line "
141  "%i.",
142  Args, v26);
143  ++v25;
144  }
145  ++v26;
146  } while (fgets(&Buf, 490, File));
147  v4 = v25;
148  }
149  this->uNumFrames = v4;
150  v5 = malloc(sizeof(PlayerFrame) * v4);
151  this->pFrames = (PlayerFrame *)v5;
152  if (!v5) Error("PlayerFrameTable::load - Out of Memory!");
153  v6 = File;
154  this->uNumFrames = 0;
155  fseek(v6, 0, 0);
156  for (i = fgets(&Buf, 490, File); i; i = fgets(&Buf, 490, File)) {
157  *strchr(&Buf, 10) = 0;
158  memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
159  if (v24.uPropCount && *v24.pProperties[0] != 47) {
160  // v8 = atoi(v24.pProperties[0]);
161  // v9 = v24.pProperties[1];
162  this->pFrames[this->uNumFrames].expression =
163  (CHARACTER_EXPRESSION_ID)atoi(v24.pProperties[0]);
164  // v10 = atoi(v9);
165  // v11 = v24.pProperties[2];
166  this->pFrames[this->uNumFrames].uTextureID =
167  atoi(v24.pProperties[1]);
168  this->pFrames[this->uNumFrames].uAnimTime =
169  atoi(v24.pProperties[2]);
170  this->pFrames[this->uNumFrames].uAnimLength = 0;
171  this->pFrames[this->uNumFrames].uFlags = 0;
172  for (j = 3; j < v24.uPropCount; ++j) {
173  if (!_stricmp(v24.pProperties[j], "New"))
174  this->pFrames[this->uNumFrames].uFlags |= 4;
175  }
176  ++this->uNumFrames;
177  }
178  }
179  fclose(File);
180 
181  if ((signed int)(this->uNumFrames - 1) > 0) {
182  v15 = 0;
183  for (v14 = 0; v14 < this->uNumFrames - 1; ++v14) {
184  v16 = (int)&this->pFrames[v15];
185  if (!(*(char *)(v16 + 18) & 4)) this->pFrames[v14].uFlags |= 1;
186  ++v15;
187  }
188  }
189  for (k = 0; k < (signed int)this->uNumFrames; *(short *)(Argsa + 6) = v19) {
190  // v18 = this->pFrames;
191  Argsa = (int)&this->pFrames[k];
192  v19 = *(short *)(Argsa + 4);
193  if (this->pFrames[k].uFlags & 1) {
194  ++k;
195  for (l = (int)&this->pFrames[k]; this->pFrames[k].uFlags & 1;
196  l += 10) {
197  v19 += *(short *)(l + 4);
198  ++k;
199  }
200  HEXRAYS_LOWORD(v19) = this->pFrames[k].uAnimTime + v19;
201  }
202  ++k;
203  }
204  return 1;
205 }

Перекрестные ссылки __debugbreak(), PlayerFrame::expression, l, pFrames, FrameTableTxtLine::pProperties, txt_file_frametable_parser(), PlayerFrame::uAnimLength, PlayerFrame::uAnimTime, PlayerFrame::uFlags, uNumFrames, FrameTableTxtLine::uPropCount и PlayerFrame::uTextureID.

+ Граф вызовов:

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

◆ uNumFrames

unsigned int PlayerFrameTable::uNumFrames

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

Используется в FromFile(), FromFileTxt(), GameUI_DrawPortraits(), GetFrameIdByExpression() и Party::UpdatePlayersAndHirelingsEmotions().

◆ pFrames

struct PlayerFrame* PlayerFrameTable::pFrames

Объявления и описания членов структур находятся в файлах:
PlayerFrameTable
Definition: PlayerFrameTable.h:18
FrameTableTxtLine::uPropCount
int uPropCount
Definition: FrameTableInc.h:12
FrameTableTxtLine::pProperties
const char * pProperties[30]
Definition: FrameTableInc.h:13
PlayerFrame
Definition: PlayerFrameTable.h:7
PlayerFrameTable::pFrames
struct PlayerFrame * pFrames
Definition: PlayerFrameTable.h:29
PlayerFrame::uTextureID
unsigned __int16 uTextureID
Definition: PlayerFrameTable.h:9
PlayerFrame::expression
CHARACTER_EXPRESSION_ID expression
Definition: PlayerFrameTable.h:8
result
GLuint64EXT * result
Definition: SDL_opengl_glext.h:9435
PlayerFrameTable::uNumFrames
unsigned int uNumFrames
Definition: PlayerFrameTable.h:28
CHARACTER_EXPRESSION_ID
CHARACTER_EXPRESSION_ID
Definition: Player.h:341
PlayerFrame::uAnimTime
__int16 uAnimTime
Definition: PlayerFrameTable.h:10
v1
GLfloat GLfloat v1
Definition: SDL_opengl_glext.h:694
l
uint64_t l
Definition: intreadwrite.h:1
PlayerFrame::uFlags
__int16 uFlags
Definition: PlayerFrameTable.h:12
txt_file_frametable_parser
FrameTableTxtLine * txt_file_frametable_parser(const char *str_to_parse, FrameTableTxtLine *tokens_table)
Definition: FrameTableInc.cpp:8
v2
GLfloat GLfloat GLfloat v2
Definition: SDL_opengl_glext.h:695
uint
unsigned int uint
Definition: MM7.h:4
v3
GLfloat GLfloat GLfloat GLfloat v3
Definition: SDL_opengl_glext.h:696
__debugbreak
void __cdecl __debugbreak(void)
PlayerFrame::uAnimLength
__int16 uAnimLength
Definition: PlayerFrameTable.h:11
FrameTableTxtLine
Definition: FrameTableInc.h:11