diff PlayerFrameTable.cpp @ 2463:0f17a30149ec

cleaning project part 1
author zipi
date Sun, 17 Aug 2014 15:13:18 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PlayerFrameTable.cpp	Sun Aug 17 15:13:18 2014 +0100
@@ -0,0 +1,224 @@
+#define _CRTDBG_MAP_ALLOC
+#include <stdlib.h>
+#include <crtdbg.h>
+
+#define _CRT_SECURE_NO_WARNINGS
+
+#include "PlayerFrameTable.h"
+
+#include "ErrorHandling.h"
+#include "FrameTableInc.h"
+#include "mm7_data.h"
+
+
+//----- (00494AED) --------------------------------------------------------
+unsigned int PlayerFrameTable::GetFrameIdByExpression(CHARACTER_EXPRESSION_ID expression)
+{
+	for (uint i = 0; i < this->uNumFrames; i++)
+	{
+		if (this->pFrames[i].expression == expression)
+			return i;
+	}
+	return 0;
+}
+
+//----- (00494B10) --------------------------------------------------------
+PlayerFrame *PlayerFrameTable::GetFrameBy_x(unsigned int uFramesetID, unsigned int uFrameID)
+{
+	unsigned int v3; // esi@1
+	__int16 v6; // dx@2
+	int v7; // edx@3
+	char *i; // eax@3
+	int v9; // ecx@5
+	PlayerFrame *result; // eax@6
+
+	v3 = uFramesetID;
+	if (this->pFrames[uFramesetID].uFlags & 1 && (v6 = this->pFrames[uFramesetID].uAnimLength) != 0)
+	{
+		v7 = ((signed int)uFrameID >> 3) % (unsigned __int16)v6;
+		for (i = (char *)&this->pFrames[uFramesetID].uAnimTime;; i += 10)
+		{
+			v9 = *(short *)i;
+			if (v7 <= v9)
+				break;
+			v7 -= v9;
+			++v3;
+		}
+		result = &this->pFrames[v3];
+	}
+	else
+		result = &this->pFrames[uFramesetID];
+	return result;
+}
+
+//----- (00494B5E) --------------------------------------------------------
+PlayerFrame *PlayerFrameTable::GetFrameBy_y(int *pFramesetID, int *pAnimTime, int a4)
+{
+	int v5; // esi@1
+	int v6; // eax@2
+
+	v5 = a4 + *pAnimTime;
+	if (v5 < 8 * this->pFrames[*pFramesetID].uAnimTime)
+		*pAnimTime = v5;
+	else
+	{
+		v6 = rand() % 4 + 21;
+		*pFramesetID = v6;
+		*pAnimTime = 8 * v5 % this->pFrames[v6].uAnimTime;
+	}
+	return &this->pFrames[*pFramesetID];
+}
+
+//----- (00494BC3) --------------------------------------------------------
+void PlayerFrameTable::ToFile()
+{
+	PlayerFrameTable *v1; // esi@1
+	FILE *v2; // eax@1
+	FILE *v3; // edi@1
+
+	PlayerFrameTable* Str = this;
+
+	v1 = Str;
+	v2 = fopen("data\\dpft.bin", "wb");
+	v3 = v2;
+	if (!v2)
+		Error("Unable to save dpft.bin");
+	fwrite(v1, 4, 1, v2);
+	fwrite(v1->pFrames, 0xAu, v1->uNumFrames, v3);
+	fclose(v3);
+}
+
+//----- (00494C0F) --------------------------------------------------------
+void PlayerFrameTable::FromFile(void *data_mm6, void *data_mm7, void *data_mm8)
+{
+	uint num_mm6_frames = data_mm6 ? *(int *)data_mm6 : 0,
+		num_mm7_frames = data_mm7 ? *(int *)data_mm7 : 0,
+		num_mm8_frames = data_mm8 ? *(int *)data_mm8 : 0;
+	uNumFrames = num_mm6_frames + num_mm7_frames + num_mm8_frames;
+	assert(uNumFrames);
+	assert(!num_mm8_frames);
+
+	pFrames = (PlayerFrame *)malloc(uNumFrames * sizeof(PlayerFrame));
+	memcpy(pFrames, (char *)data_mm7 + 4, num_mm7_frames * sizeof(PlayerFrame));
+	memcpy(pFrames + num_mm7_frames, (char *)data_mm6 + 4, num_mm6_frames * sizeof(PlayerFrame));
+	memcpy(pFrames + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(PlayerFrame));
+}
+
+//----- (00494C5A) --------------------------------------------------------
+int PlayerFrameTable::FromFileTxt(const char *Args)
+{
+	//PlayerFrameTable *v2; // ebx@1
+	FILE *v3; // eax@1
+	int v4; // esi@3
+	void *v5; // eax@10
+	FILE *v6; // ST0C_4@12
+	char *i; // eax@12
+	//  __int16 v8; // ax@15
+	//  const char *v9; // ST10_4@15
+	//  unsigned __int16 v10; // ax@15
+	//  const char *v11; // ST0C_4@15
+	int j; // esi@15
+	//  int v13; // eax@17
+	int v14; // edx@22
+	int v15; // ecx@23
+	int v16; // eax@24
+	signed int k; // eax@27
+	//PlayerFrame *v18; // edx@28
+	int v19; // esi@28
+	int l; // ecx@29
+	char Buf; // [sp+Ch] [bp-2F8h]@3
+	FrameTableTxtLine v23; // [sp+200h] [bp-104h]@4
+	FrameTableTxtLine v24; // [sp+27Ch] [bp-88h]@4
+	int v25; // [sp+2F8h] [bp-Ch]@3
+	int v26; // [sp+2FCh] [bp-8h]@3
+	FILE *File; // [sp+300h] [bp-4h]@1
+	int Argsa; // [sp+30Ch] [bp+8h]@28
+
+	__debugbreak();//Ritor1;
+	//TileTable::dtor((TileTable *)this);
+	v3 = fopen(Args, "r");
+	File = v3;
+	if (!v3)
+		Error("PlayerFrameTable::load - Unable to open file: %s.", Args);
+	v4 = 0;
+	v25 = 0;
+	v26 = 1;
+	if (fgets(&Buf, 490, v3))
+	{
+		do
+		{
+			*strchr(&Buf, 10) = 0;
+			memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
+			if (v24.uPropCount && *v24.pProperties[0] != 47)
+			{
+				if (v24.uPropCount < 3)
+					Error("PlayerFrameTable::load, too few arguments, %s line %i.", Args, v26);
+				++v25;
+			}
+			++v26;
+		} while (fgets(&Buf, 490, File));
+		v4 = v25;
+	}
+	this->uNumFrames = v4;
+	v5 = malloc(10 * v4);
+	this->pFrames = (PlayerFrame *)v5;
+	if (!v5)
+		Error("PlayerFrameTable::load - Out of Memory!");
+	v6 = File;
+	this->uNumFrames = 0;
+	fseek(v6, 0, 0);
+	for (i = fgets(&Buf, 490, File); i; i = fgets(&Buf, 490, File))
+	{
+		*strchr(&Buf, 10) = 0;
+		memcpy(&v24, txt_file_frametable_parser(&Buf, &v23), sizeof(v24));
+		if (v24.uPropCount && *v24.pProperties[0] != 47)
+		{
+			//v8 = atoi(v24.pProperties[0]);
+			//v9 = v24.pProperties[1];
+			this->pFrames[this->uNumFrames].expression = (CHARACTER_EXPRESSION_ID)atoi(v24.pProperties[0]);
+			//v10 = atoi(v9);
+			//v11 = v24.pProperties[2];
+			this->pFrames[this->uNumFrames].uTextureID = atoi(v24.pProperties[1]);
+			this->pFrames[this->uNumFrames].uAnimTime = atoi(v24.pProperties[2]);
+			this->pFrames[this->uNumFrames].uAnimLength = 0;
+			this->pFrames[this->uNumFrames].uFlags = 0;
+			for (j = 3; j < v24.uPropCount; ++j)
+			{
+				if (!_stricmp(v24.pProperties[j], "New"))
+					this->pFrames[this->uNumFrames].uFlags |= 4;
+			}
+			++this->uNumFrames;
+		}
+	}
+	fclose(File);
+
+	if ((signed int)(this->uNumFrames - 1) > 0)
+	{
+		v15 = 0;
+		for (v14 = 0; v14 < this->uNumFrames - 1; ++v14)
+		{
+			v16 = (int)&this->pFrames[v15];
+			if (!(*(char *)(v16 + 18) & 4))
+				this->pFrames[v14].uFlags |= 1;
+			++v15;
+		}
+	}
+	for (k = 0; k < (signed int)this->uNumFrames; *(short *)(Argsa + 6) = v19)
+	{
+		//v18 = this->pFrames;
+		Argsa = (int)&this->pFrames[k];
+		v19 = *(short *)(Argsa + 4);
+		if (this->pFrames[k].uFlags & 1)
+		{
+			++k;
+			for (l = (int)&this->pFrames[k]; this->pFrames[k].uFlags & 1; l += 10)
+			{
+				v19 += *(short *)(l + 4);
+				++k;
+			}
+			LOWORD(v19) = this->pFrames[k].uAnimTime + v19;
+		}
+		++k;
+	}
+	return 1;
+}