comparison PlayerFrameTable.cpp @ 2463:0f17a30149ec

cleaning project part 1
author zipi
date Sun, 17 Aug 2014 15:13:18 +0100
parents
children
comparison
equal deleted inserted replaced
2462:1d04e48651d4 2463:0f17a30149ec
1 #define _CRTDBG_MAP_ALLOC
2 #include <stdlib.h>
3 #include <crtdbg.h>
4
5 #define _CRT_SECURE_NO_WARNINGS
6
7 #include "PlayerFrameTable.h"
8
9 #include "ErrorHandling.h"
10 #include "FrameTableInc.h"
11 #include "mm7_data.h"
12
13
14 //----- (00494AED) --------------------------------------------------------
15 unsigned int PlayerFrameTable::GetFrameIdByExpression(CHARACTER_EXPRESSION_ID expression)
16 {
17 for (uint i = 0; i < this->uNumFrames; i++)
18 {
19 if (this->pFrames[i].expression == expression)
20 return i;
21 }
22 return 0;
23 }
24
25 //----- (00494B10) --------------------------------------------------------
26 PlayerFrame *PlayerFrameTable::GetFrameBy_x(unsigned int uFramesetID, unsigned int uFrameID)
27 {
28 unsigned int v3; // esi@1
29 __int16 v6; // dx@2
30 int v7; // edx@3
31 char *i; // eax@3
32 int v9; // ecx@5
33 PlayerFrame *result; // eax@6
34
35 v3 = uFramesetID;
36 if (this->pFrames[uFramesetID].uFlags & 1 && (v6 = this->pFrames[uFramesetID].uAnimLength) != 0)
37 {
38 v7 = ((signed int)uFrameID >> 3) % (unsigned __int16)v6;
39 for (i = (char *)&this->pFrames[uFramesetID].uAnimTime;; i += 10)
40 {
41 v9 = *(short *)i;
42 if (v7 <= v9)
43 break;
44 v7 -= v9;
45 ++v3;
46 }
47 result = &this->pFrames[v3];
48 }
49 else
50 result = &this->pFrames[uFramesetID];
51 return result;
52 }
53
54 //----- (00494B5E) --------------------------------------------------------
55 PlayerFrame *PlayerFrameTable::GetFrameBy_y(int *pFramesetID, int *pAnimTime, int a4)
56 {
57 int v5; // esi@1
58 int v6; // eax@2
59
60 v5 = a4 + *pAnimTime;
61 if (v5 < 8 * this->pFrames[*pFramesetID].uAnimTime)
62 *pAnimTime = v5;
63 else
64 {
65 v6 = rand() % 4 + 21;
66 *pFramesetID = v6;
67 *pAnimTime = 8 * v5 % this->pFrames[v6].uAnimTime;
68 }
69 return &this->pFrames[*pFramesetID];
70 }
71
72 //----- (00494BC3) --------------------------------------------------------
73 void PlayerFrameTable::ToFile()
74 {
75 PlayerFrameTable *v1; // esi@1
76 FILE *v2; // eax@1
77 FILE *v3; // edi@1
78
79 PlayerFrameTable* Str = this;
80
81 v1 = Str;
82 v2 = fopen("data\\dpft.bin", "wb");
83 v3 = v2;
84 if (!v2)
85 Error("Unable to save dpft.bin");
86 fwrite(v1, 4, 1, v2);
87 fwrite(v1->pFrames, 0xAu, v1->uNumFrames, v3);
88 fclose(v3);
89 }
90
91 //----- (00494C0F) --------------------------------------------------------
92 void PlayerFrameTable::FromFile(void *data_mm6, void *data_mm7, void *data_mm8)
93 {
94 uint num_mm6_frames = data_mm6 ? *(int *)data_mm6 : 0,
95 num_mm7_frames = data_mm7 ? *(int *)data_mm7 : 0,
96 num_mm8_frames = data_mm8 ? *(int *)data_mm8 : 0;
97 uNumFrames = num_mm6_frames + num_mm7_frames + num_mm8_frames;
98 assert(uNumFrames);
99 assert(!num_mm8_frames);
100
101 pFrames = (PlayerFrame *)malloc(uNumFrames * sizeof(PlayerFrame));
102 memcpy(pFrames, (char *)data_mm7 + 4, num_mm7_frames * sizeof(PlayerFrame));
103 memcpy(pFrames + num_mm7_frames, (char *)data_mm6 + 4, num_mm6_frames * sizeof(PlayerFrame));
104 memcpy(pFrames + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(PlayerFrame));
105 }
106
107 //----- (00494C5A) --------------------------------------------------------
108 int PlayerFrameTable::FromFileTxt(const char *Args)
109 {
110 //PlayerFrameTable *v2; // ebx@1
111 FILE *v3; // eax@1
112 int v4; // esi@3
113 void *v5; // eax@10
114 FILE *v6; // ST0C_4@12
115 char *i; // eax@12
116 // __int16 v8; // ax@15
117 // const char *v9; // ST10_4@15
118 // unsigned __int16 v10; // ax@15
119 // const char *v11; // ST0C_4@15
120 int j; // esi@15
121 // int v13; // eax@17
122 int v14; // edx@22
123 int v15; // ecx@23
124 int v16; // eax@24
125 signed int k; // eax@27
126 //PlayerFrame *v18; // edx@28
127 int v19; // esi@28
128 int l; // ecx@29
129 char Buf; // [sp+Ch] [bp-2F8h]@3
130 FrameTableTxtLine v23; // [sp+200h] [bp-104h]@4
131 FrameTableTxtLine v24; // [sp+27Ch] [bp-88h]@4
132 int v25; // [sp+2F8h] [bp-Ch]@3
133 int v26; // [sp+2FCh] [bp-8h]@3
134 FILE *File; // [sp+300h] [bp-4h]@1
135 int Argsa; // [sp+30Ch] [bp+8h]@28
136
137 __debugbreak();//Ritor1;
138 //TileTable::dtor((TileTable *)this);
139 v3 = fopen(Args, "r");
140 File = v3;
141 if (!v3)
142 Error("PlayerFrameTable::load - Unable to open file: %s.", Args);
143 v4 = 0;
144 v25 = 0;
145 v26 = 1;
146 if (fgets(&Buf, 490, v3))
147 {
148 do
149 {
150 *strchr(&Buf, 10) = 0;
151 memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
152 if (v24.uPropCount && *v24.pProperties[0] != 47)
153 {
154 if (v24.uPropCount < 3)
155 Error("PlayerFrameTable::load, too few arguments, %s line %i.", Args, v26);
156 ++v25;
157 }
158 ++v26;
159 } while (fgets(&Buf, 490, File));
160 v4 = v25;
161 }
162 this->uNumFrames = v4;
163 v5 = malloc(10 * v4);
164 this->pFrames = (PlayerFrame *)v5;
165 if (!v5)
166 Error("PlayerFrameTable::load - Out of Memory!");
167 v6 = File;
168 this->uNumFrames = 0;
169 fseek(v6, 0, 0);
170 for (i = fgets(&Buf, 490, File); i; i = fgets(&Buf, 490, File))
171 {
172 *strchr(&Buf, 10) = 0;
173 memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
174 if (v24.uPropCount && *v24.pProperties[0] != 47)
175 {
176 //v8 = atoi(v24.pProperties[0]);
177 //v9 = v24.pProperties[1];
178 this->pFrames[this->uNumFrames].expression = (CHARACTER_EXPRESSION_ID)atoi(v24.pProperties[0]);
179 //v10 = atoi(v9);
180 //v11 = v24.pProperties[2];
181 this->pFrames[this->uNumFrames].uTextureID = atoi(v24.pProperties[1]);
182 this->pFrames[this->uNumFrames].uAnimTime = atoi(v24.pProperties[2]);
183 this->pFrames[this->uNumFrames].uAnimLength = 0;
184 this->pFrames[this->uNumFrames].uFlags = 0;
185 for (j = 3; j < v24.uPropCount; ++j)
186 {
187 if (!_stricmp(v24.pProperties[j], "New"))
188 this->pFrames[this->uNumFrames].uFlags |= 4;
189 }
190 ++this->uNumFrames;
191 }
192 }
193 fclose(File);
194
195 if ((signed int)(this->uNumFrames - 1) > 0)
196 {
197 v15 = 0;
198 for (v14 = 0; v14 < this->uNumFrames - 1; ++v14)
199 {
200 v16 = (int)&this->pFrames[v15];
201 if (!(*(char *)(v16 + 18) & 4))
202 this->pFrames[v14].uFlags |= 1;
203 ++v15;
204 }
205 }
206 for (k = 0; k < (signed int)this->uNumFrames; *(short *)(Argsa + 6) = v19)
207 {
208 //v18 = this->pFrames;
209 Argsa = (int)&this->pFrames[k];
210 v19 = *(short *)(Argsa + 4);
211 if (this->pFrames[k].uFlags & 1)
212 {
213 ++k;
214 for (l = (int)&this->pFrames[k]; this->pFrames[k].uFlags & 1; l += 10)
215 {
216 v19 += *(short *)(l + 4);
217 ++k;
218 }
219 LOWORD(v19) = this->pFrames[k].uAnimTime + v19;
220 }
221 ++k;
222 }
223 return 1;
224 }