📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "AdvGrid"
#pragma link "BaseGrid"
#pragma resource "*.dfm"
TForm1 *Form1;
byte *buffer;
int buffersize;
byte *buffer2;
int buffer2size;
int mapx, mapy;
const int cobjNum = 1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
mapx = mapy = 0;
for (int i=0;i<241;i++) {
for (int j=0;j<128;j++) {
tleData[i][j].loaded = false;
tleData[i][j].imageloaded = false;
}
}
for (int i=0;i<1417;i++) {
for (int j=0;j<128;j++) {
objData[i][j].loaded = false;
objData[i][j].imageloaded = false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute()) {
Screen->Cursor = crHourGlass;
FILE *f;
char c;
int iTemp;
AnsiString Value;
f = fopen(OpenDialog1->FileName.c_str(),"rb");
if (f == NULL) {
// ShowMessage("Error Loading File");
Screen->Cursor = crDefault;
return;
}
iTemp = fgetc(f);
Value = "";
for (int i=0;i<iTemp;i++) {
c = fgetc(f);
Value = Value + AnsiString(c);
}
Memo1->Lines->Clear();
Memo1->Lines->Add(Value);
width = fgetc(f);
width += fgetc(f) << 8;
width += fgetc(f) << 16;
width += fgetc(f) << 24;
Memo1->Lines->Add("Tiles across: " + IntToStr(width));
height = fgetc(f);
height += fgetc(f) << 8;
height += fgetc(f) << 16;
height += fgetc(f) << 24;
Memo1->Lines->Add("Tiles down: " + IntToStr(height));
iTemp = fgetc(f);
Memo1->Lines->Add("Unknown ??: " + IntToStr(iTemp));
Value = "";
if (buffer != NULL) {
free(buffer);
buffer = NULL;
}
buffer = new byte[iTemp];
buffersize = iTemp;
for (int i=0;i<iTemp;i++) {
buffer[i] = fgetc(f);
Value = Value + IntToStr(buffer[i]) + ", ";
}
Value = Value.SubString(0,Value.Length()-2);
Memo1->Lines->Add(Value);
map = fgetc(f);
map += fgetc(f) << 8;
map += fgetc(f) << 16;
map += fgetc(f) << 24;
Memo1->Lines->Add("Map Number: " + IntToStr(map));
unk = fgetc(f);
unk += fgetc(f) << 8;
unk += fgetc(f) << 16;
unk += fgetc(f) << 24;
Memo1->Lines->Add("Unknown ???: " + IntToStr(unk));
if (buffer2 != NULL) {
free(buffer2);
buffer2 = NULL;
}
if (unk > 0) {
buffer2 = new byte[unk*18];
buffer2size = unk*18;
}
for (int i=0;i<unk*18;i++) {
buffer2[i] = fgetc(f);
Value = Value + IntToStr(buffer2[i]) + ", ";
if (i%18 == 0) {
// Memo1->Lines->Add(Value);
Value = "";
}
}
AdvStringGrid1->RowCount = (height*width)+1;
AdvStringGrid1->Cells[0][0] = "X/Y";
AdvStringGrid1->Cells[1][0] = "obj";
AdvStringGrid1->Cells[2][0] = "tlei*32+obj2";
AdvStringGrid1->Cells[3][0] = "tlei/8+tlef%2";
AdvStringGrid1->Cells[4][0] = "tlef/2";
AdvStringGrid1->Cells[5][0] = "cursor";
AdvStringGrid1->Cells[6][0] = "??";
AdvStringGrid1->Cells[7][0] = "??";
AdvStringGrid1->Cells[8][0] = "??";
int iRow = 1;
iTemp = 0;
iTemp = 0;
int wcurrent, hcurrent;
wcurrent = hcurrent = 0;
while (hcurrent != height) {
AdvStringGrid1->Cells[0][iRow] = IntToStr(int(hcurrent)) + " " + IntToStr(int(wcurrent));
iTemp = fgetc(f);
AdvStringGrid1->Cells[1][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].obj1 = iTemp;
if (iTemp%4 != 0) {
Memo1->Lines->Add(IntToStr(int(hcurrent)) + " " + IntToStr(int(wcurrent)));
}
iTemp = fgetc(f);
AdvStringGrid1->Cells[2][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].obj2 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[3][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].tle1 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[4][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].tle2 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[5][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].cursor1 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[6][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].unk1 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[7][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].unk2 = iTemp;
iTemp = fgetc(f);
AdvStringGrid1->Cells[8][iRow] = IntToStr(iTemp);
mapData[hcurrent][wcurrent].unk3 = iTemp;
iRow++;
wcurrent++;
if (wcurrent == width) {
wcurrent = 0;
hcurrent++;
}
}
fclose(f);
Screen->Cursor = crDefault;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
SaveDialog1->FileName = OpenDialog1->FileName;
if (SaveDialog1->Execute()) {
Screen->Cursor = crHourGlass;
FILE *f;
char c;
int iTemp;
AnsiString Value;
f = fopen(SaveDialog1->FileName.c_str(),"wb");
if (f == NULL) {
// ShowMessage("Error Loading File");
Screen->Cursor = crDefault;
return;
}
iTemp = 19;
fwrite(&iTemp,1,1,f);
Value = "RedMoon MapData 1.0";
fwrite(Value.c_str(), Value.Length(), 1, f);
fwrite(&width,4,1,f);
fwrite(&height,4,1,f);
fwrite(&buffersize,1,1,f);
fwrite(buffer,buffersize,1,f);
fwrite(&map,4,1,f);
fwrite(&unk,4,1,f);
fwrite(buffer2,buffer2size,1,f);
for (int i=1;i<AdvStringGrid1->RowCount;i++) {
iTemp = atoi(AdvStringGrid1->Cells[1][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[2][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[3][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[4][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[5][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[6][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[7][i].c_str());
fwrite(&iTemp,1,1,f);
iTemp = atoi(AdvStringGrid1->Cells[8][i].c_str());
fwrite(&iTemp,1,1,f);
}
fclose(f);
Screen->Cursor = crDefault;
}
}
//---------------------------------------------------------------------------
void TForm1::loadtle(int filenum)
{
if (tleData[filenum][0].loaded == true) {
return;
}
Screen->Cursor = crHourGlass;
FILE *f;
char c;
int iTemp;
int rmdnum, count;
AnsiString Value;
Value.sprintf("%5d",filenum);
Value = StringReplace(Value," ","0", TReplaceFlags() << rfReplaceAll);
Value = "C:\\Redmoon\\Datas\\Tle\\tle" + Value + ".rmd";
f = fopen(Value.c_str(),"rb");
if (f == NULL) {
Screen->Cursor = crDefault;
return;
}
iTemp = fgetc(f);
Value = "";
for (int i=0;i<iTemp;i++) {
c = fgetc(f);
Value = Value + AnsiString(c);
}
rmdnum = fgetc(f);
rmdnum += fgetc(f) << 8;
rmdnum += fgetc(f) << 16;
rmdnum += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
count = fgetc(f);
count += fgetc(f) << 8;
count += fgetc(f) << 16;
count += fgetc(f) << 24;
int iRow = 1;
int items = 0;
while (items <= count) {
int iNum=0;
iNum = fgetc(f);
iNum += fgetc(f) << 8;
iNum += fgetc(f) << 16;
iNum += fgetc(f) << 24;
for (int j=0;j<iNum;j++) {
for (int i=1;i<13;i++) {
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
switch (i) {
case 1:
tleData[filenum][items].xstart = iTemp;
break;
case 2:
tleData[filenum][items].ystart = iTemp;
break;
case 3:
tleData[filenum][items].xend = iTemp;
break;
case 4:
tleData[filenum][items].yend = iTemp;
break;
case 12:
tleData[filenum][items].tlenumber = iTemp;
break;
}
}
iRow++;
}
tleData[filenum][items].loaded = true;
items++;
}
fclose(f);
Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------
void TForm1::loadobj(int filenum)
{
if (objData[filenum][0].loaded == true) {
return;
}
Screen->Cursor = crHourGlass;
FILE *f;
char c;
int iTemp;
int rmdnum, count;
AnsiString Value;
Value.sprintf("%5d",filenum);
Value = StringReplace(Value," ","0", TReplaceFlags() << rfReplaceAll);
Value = "C:\\Redmoon\\Datas\\obj\\obj" + Value + ".rmd";
f = fopen(Value.c_str(),"rb");
if (f == NULL) {
// ShowMessage("Error Loading File");
Screen->Cursor = crDefault;
return;
}
iTemp = fgetc(f);
Value = "";
for (int i=0;i<iTemp;i++) {
c = fgetc(f);
Value = Value + AnsiString(c);
}
rmdnum = fgetc(f);
rmdnum += fgetc(f) << 8;
rmdnum += fgetc(f) << 16;
rmdnum += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
iTemp = fgetc(f);
count = fgetc(f);
count += fgetc(f) << 8;
count += fgetc(f) << 16;
count += fgetc(f) << 24;
int iRow = 1;
int items = 0;
while (items <= count) {
int iNum=0;
iNum = fgetc(f);
iNum += fgetc(f) << 8;
iNum += fgetc(f) << 16;
iNum += fgetc(f) << 24;
for (int j=0;j<iNum;j++) {
for (int i=1;i<13;i++) {
iTemp = fgetc(f);
iTemp += fgetc(f) << 8;
iTemp += fgetc(f) << 16;
iTemp += fgetc(f) << 24;
if (j == cobjNum) {
switch (i) {
case 1:
objData[filenum][items].xstart = iTemp;
break;
case 2:
objData[filenum][items].ystart = iTemp;
break;
case 3:
objData[filenum][items].xend = iTemp;
break;
case 4:
objData[filenum][items].yend = iTemp;
break;
case 5:
objData[filenum][items].xOffset = iTemp;
break;
case 6:
objData[filenum][items].yOffset = iTemp;
break;
case 12:
objData[filenum][items].tlenumber = iTemp;
break;
}
}
}
iRow++;
}
objData[filenum][items].loaded = true;
items++;
}
fclose(f);
Screen->Cursor = crDefault;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -