#import "FieldScene.h"
-@implementation Savedatadat
-
--(id)init{
-
- sdd = self;
- sdd2 = self;
-
- oopsCnt = 30;
-
- return self;
-}
-
-
-
-
-@end
-
-
@implementation FieldScene
-(void)awakeFromNib{
[loadFileOutputListTV setTarget:self];
[loadFileOutputListTV setAction:@selector(clickLFOL:)];
+ [saveGameListTV setTarget:self];
+ [saveGameListTV setAction:@selector(clickSGL)];
+
+
CAttackListMA = [NSMutableArray new];
CResearchListMA = [NSMutableArray new];
return self;
}
+-(void)writeInt:(FILE*)fp val:(int)val{
+ int counter;
+
+ for(counter = INT_MAX;counter > 0;counter>>=8){
+ unsigned char nowData = val&0xFF;
+ val >>= 8;
+ fwrite(&nowData, sizeof(unsigned char), 1, fp);
+ }
+}
+
+-(void)writeNSString:(FILE*)fp str:(NSString*)str{
+ int length = (int)[str length];
+ [self writeInt:fp val:length];
+ fwrite([str UTF8String], sizeof(str), length, fp);
+}
+
+-(void)writeNSImage:(FILE*)fp str:(NSImage*)img{
+ FILE *fpx;
+
+ NSString *directoryPath;
+
+ directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
+
+ NSString* Cpath = @"Awars IV.app/Contents/Resources/";
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:Cpath];
+
+ NSString *path = @DATAFILE_NAME;
+ NSString *path2 = @INSTANT_IMG;
+
+ if(1){
+ NSData *imgData = [img TIFFRepresentation];
+ NSBitmapImageRep *brep = [NSBitmapImageRep imageRepWithData:imgData];
+ imgData = [brep representationUsingType:NSPNGFileType properties:nil];
+ [imgData writeToFile:path2 atomically:YES];
+
+ fpx = fopen(INSTANT_IMG, "rb");
+ [self fcopy:fpx wfp:fp len:0];
+ fclose(fpx);
+ }
+
+ routeCnt++;
+}
+
+
+-(int)fcopy:(FILE *)rfp wfp:(FILE *)wfp len:(int)len{
+
+ unsigned char in_buf[1024], out_buf[1024];
+ int rinf;
+
+ sdd.imgAdressCnt = 0;
+ sdd.imgAdressFix = 0;
+
+ fpos_t fpt = 0;
+ while (!feof(rfp)) {
+ fgetpos(wfp, &fpt);
+ rinf = (int)fread((void*)in_buf, 1, 1024, rfp);
+ if(rinf < 0){
+ return (-1);
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, wfp);
+ if(rinf < 0){
+ return (-1);
+ }
+ sdd.imgAdressCnt++;
+ sdd.imgAdressFix = rinf;
+ }
+
+ fpt -= (sdd.imgAdressCnt-1)*1024;
+ fsetpos(wfp, &fpt);
+ [self writeInt:wfp val:(int)sdd.imgAdressCnt];
+ [self writeInt:wfp val:(int)sdd.imgAdressFix];
+
+ fpt = 0;
+ fsetpos(rfp, &fpt);
+ while (!feof(rfp)) {
+ rinf = (int)fread((void*)in_buf, 1, 1024, rfp);
+ if(rinf < 0){
+ return (-1);
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, wfp);
+ if(rinf < 0){
+ return (-1);
+ }
+ }
+
+ return(0);
+}
+
+-(int)readInt:(FILE*)fp{
+ int counter;
+ int result = 0;
+ int shiftLen = 0;
+
+ for(counter= INT_MAX;counter > 0;counter >>= 8){
+ unsigned char nowData = 0;
+ fread(&nowData, sizeof(unsigned char), 1, fp);
+ result |= (int)nowData << shiftLen;
+ shiftLen += 8;
+ }
+
+ return result;
+}
+
+-(NSString*)readNSString:(FILE*)fp strOut:(NSString*)strOut{
+ int length = [self readInt:fp];
+ char strOutcc[1024];
+ fread(strOutcc, sizeof(strOut), length, fp);
+ strOut = [[NSString stringWithUTF8String:strOutcc] retain];
+
+ return strOut;
+}
+
+-(NSImage*)readNSImage:(FILE*)fp imgOut:(NSImage*)imgOut dcnt:(int)dcnt dfix:(int)dfix{
+ unsigned char idat[1024];
+ int size = 0;
+
+ NSMutableData *binaryData = [NSMutableData dataWithCapacity:sizeof(idat)];
+
+ fpos_t fpt = 0;
+ for(int i = 0;i < dcnt;i++){
+ size += fread(idat, 1, 1024, fp);
+
+ if(dcnt-1 == i){
+ fpt += dfix;
+ fsetpos(fp, &fpt);
+ }
+
+ fgetpos(fp, &fpt);
+
+ NSMutableData* data = [NSMutableData dataWithBytes:idat length:sizeof(unsigned char)*1024];
+ [binaryData appendData:data];
+ }
+
+
+ imgOut = [[[NSImage alloc] initWithData:binaryData] retain];
+
+ return imgOut;
+}
+
+-(void)readBiuldD:(FILE*)fp row:(int)r{
+
+ sdd2[datRow].dB[r].number = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].team = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].chipNumber = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].makeLv = (int)[self readInt:fp];
+
+ sdd2[datRow].dB[r].x = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].y = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].z = (int)[self readInt:fp];
+
+ sdd2[datRow].dB[r].dead = (int)[self readInt:fp];
+
+ sdd2[datRow].dB[r].imgAdCnt = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].imgAdFix = (int)[self readInt:fp];
+ sdd2[datRow].dB[r].img = [self readNSImage:fp imgOut:sdd2[datRow].dB[r].img dcnt:sdd2[datRow].dB[r].imgAdCnt dfix:sdd2[datRow].dB[r].imgAdFix];
+
+ [self readBuildChipD:fp val:&sdd2[datRow].dB[r].C];
+}
+
+-(void)readBuildChipD:(FILE*)fp val:(BUILDCHIPD*)val{
+
+ val->chipNumb = (int)[self readInt:fp];
+ val->name = [self readNSString:fp strOut:val->name];
+ val->nameID = [self readNSString:fp strOut:val->nameID];
+
+ fread(&val->S_C, sizeof(STATUS), 1, fp);
+
+ NSLog(@"awww man...");
+}
+
+-(void)readUnitD:(FILE*)fp row:(int)r{
+
+ sdd2[datRow].dU[r].CPU = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].number = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].team = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].chipNumber = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].chipNumberL = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].x = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].y = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].z = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].ix = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].iy = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].iz = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].dead = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].loadChipFlag = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].unControlable = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].joinArmyFromNext = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].persuasion = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].targType1L = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].targType2L = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].targType1D = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].targType2D = (int)[self readInt:fp];
+
+ sdd2[datRow].dU[r].army = [self readNSString:fp strOut:sdd2[datRow].dU[r].army];
+ sdd2[datRow].dU[r].imgAdCnt = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].imgAdFix = (int)[self readInt:fp];
+ sdd2[datRow].dU[r].img = [self readNSImage:fp imgOut:sdd2[datRow].dU[r].img dcnt:sdd2[datRow].dU[r].imgAdCnt dfix:sdd2[datRow].dU[r].imgAdFix];
+
+
+ [self readUnitChipD:fp val:&sdd2[datRow].dU[r].C];
+
+}
+
+-(void)readUnitChipD:(FILE*)fp val:(UNITCHIPD*)val{
+
+ val->chipNumb = (int)[self readInt:fp];
+ val->name = [self readNSString:fp strOut:val->name];
+ val->nameNick = [self readNSString:fp strOut:val->nameNick];
+ val->nameClass = [self readNSString:fp strOut:val->nameClass];
+ val->nameID = [self readNSString:fp strOut:val->nameID];
+
+
+
+ fread(&val->R_C, sizeof(RESIST), 1, fp);
+ fread(&val->S_C, sizeof(STATUS), 1, fp);
+
+ NSLog(@"creepy jude...");
+}
+
+-(void)inputFileData{
+
+ [self saveStruct];
+ [self loadStruct];
+}
+
+-(void)saveStruct{
+ NSString *directoryPath;
+
+ directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
+
+
+ NSString* Cpath = @"SaveData/";
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:Cpath];
+
+ NSString *path = [[NSString alloc] initWithUTF8String:datFilePath];
+
+ if([[NSFileManager defaultManager] fileExistsAtPath:path]){
+ [self loadStruct];
+ if(datRow < 0)
+ return;
+
+
+ if(1){
+
+ sdd.name = sdd2[datRow].name;
+ sdd.imgAdressCnt = sdd2[datRow].imgAdressCnt;
+ sdd.imgAdressFix = sdd2[datRow].imgAdressFix;
+ sdd.img = sdd2[datRow].img;
+
+ sdd.MFselectedRow = sdd2[datRow].MFselectedRow;
+ sdd.storyNumb = sdd2[datRow].storyNumb;
+ sdd.scenarioNumb = sdd2[datRow].scenarioNumb;
+
+ sdd.mapfileName = [sdd2[datRow].mapfileName retain];
+ sdd.levelName = [sdd2[datRow].levelName retain];
+ sdd.levelName = [sdd2[datRow].scenarioName retain];
+
+ sdd.chipHeight = sdd2[datRow].chipHeight;
+ sdd.chipWidth = sdd2[datRow].chipWidth;
+
+ sdd.posX = sdd2[datRow].posX;
+ sdd.posY = sdd2[datRow].posY;
+
+ sdd.eSlctX = sdd2[datRow].eSlctX;
+ sdd.eSlctY = sdd2[datRow].eSlctY;
+
+ sdd.registerNum = sdd2[datRow].registerNum;
+ sdd.registerNumB = sdd2[datRow].registerNumB;
+
+ sdd.esSceneProc = sdd2[datRow].esSceneProc;
+
+ sdd.endGameCondition = sdd2[datRow].endGameCondition;
+ sdd.initMapFlag = sdd2[datRow].initMapFlag;
+ sdd.initStatusFlag = sdd2[datRow].initStatusFlag;
+ sdd.TeamCountFlag = sdd2[datRow].TeamCountFlag;
+ sdd.battleBegin = sdd2[datRow].battleBegin;
+ sdd.startES = sdd2[datRow].startES;
+
+ sdd.cpuAImodeflag = sdd2[datRow].cpuAImodeflag;
+ sdd.cpuModeATTACKflag = sdd2[datRow].cpuModeATTACKflag;
+ sdd.cpuModeMOVEflag = sdd2[datRow].cpuModeMOVEflag;
+ sdd.cpuTurnEndFlag = sdd2[datRow].cpuTurnEndFlag;
+ sdd.waitSwtichFlag = sdd2[datRow].waitSwtichFlag;
+ sdd.battleReadyUpFlag = sdd2[datRow].battleReadyUpFlag;
+ sdd.setBattleModeFlag = sdd2[datRow].setBattleModeFlag;
+
+ sdd.wtRdy = sdd2[datRow].wtRdy;
+ sdd.wtRdy2 = sdd2[datRow].wtRdy2;
+ sdd.wtRdy3 = sdd2[datRow].wtRdy3;
+
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.chipNum[i][j] = sdd2[datRow].chipNum[i][j];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.buildNum[i][j] = sdd2[datRow].buildNum[i][j];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.unitNum[i][j] = sdd2[datRow].unitNum[i][j];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.loadNum[i][j] = sdd2[datRow].loadNum[i][j];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.buildTeam[i][j] = sdd2[datRow].buildTeam[i][j];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd.unitTeam[i][j] = sdd2[datRow].unitTeam[i][j];
+
+ for(int i = 0;i < registerNum-1;i++)
+ sdd.dU[i] = sdd2[datRow].dU[i];
+ for(int i = 0;i < registerNumB-1;i++)
+ sdd.dB[i] = sdd2[datRow].dB[i];
+ }
+
+ datExistFlag = true;
+ }else{
+ datExistFlag = false;
+ }
+
+ if(saveFlag || ![[NSFileManager defaultManager] fileExistsAtPath:path]){
+ FILE *fpo;
+
+ fpo = fopen(datFilePath, "wb");
+ if(!fpo)
+ return;
+
+
+ [self writeNSString:fpo str:sdd.name];
+ [self writeNSImage:fpo str:sdd.img];
+
+
+ [self writeInt:fpo val:sdd.MFselectedRow];
+ [self writeInt:fpo val:sdd.storyNumb];
+ [self writeInt:fpo val:sdd.scenarioNumb];
+ [self writeNSString:fpo str:sdd.mapfileName];
+ [self writeNSString:fpo str:sdd.levelName];
+ [self writeNSString:fpo str:sdd.scenarioName];
+
+ [self writeInt:fpo val:sdd.chipHeight];
+ [self writeInt:fpo val:sdd.chipWidth];
+ [self writeInt:fpo val:sdd.posX];
+ [self writeInt:fpo val:sdd.posY];
+ [self writeInt:fpo val:sdd.eSlctX];
+ [self writeInt:fpo val:sdd.eSlctY];
+ [self writeInt:fpo val:sdd.registerNum];
+ [self writeInt:fpo val:sdd.registerNumB];
+ [self writeInt:fpo val:sdd.esSceneProc];
+ [self writeInt:fpo val:sdd.endGameCondition];
+
+ [self writeInt:fpo val:sdd.initMapFlag];
+ [self writeInt:fpo val:sdd.initStatusFlag];
+ [self writeInt:fpo val:sdd.TeamCountFlag];
+ [self writeInt:fpo val:sdd.battleBegin];
+ [self writeInt:fpo val:sdd.startES];
+
+ [self writeInt:fpo val:sdd.cpuAImodeflag];
+ [self writeInt:fpo val:sdd.cpuModeATTACKflag];
+ [self writeInt:fpo val:sdd.cpuModeMOVEflag];
+ [self writeInt:fpo val:sdd.cpuTurnEndFlag];
+ [self writeInt:fpo val:sdd.waitSwtichFlag];
+ [self writeInt:fpo val:sdd.battleReadyUpFlag];
+ [self writeInt:fpo val:sdd.setBattleModeFlag];
+
+ [self writeInt:fpo val:sdd.wtRdy];
+ [self writeInt:fpo val:sdd.wtRdy2];
+ [self writeInt:fpo val:sdd.wtRdy3];
+
+
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.chipNum[i][j]];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.buildNum[i][j]];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.unitNum[i][j]];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.loadNum[i][j]];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.buildTeam[i][j]];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ [self writeInt:fpo val:sdd.unitTeam[i][j]];
+
+ for(int i = 0;i < registerNum-1;i++)
+ [self writeUnitD:fpo row:i];
+ for(int i = 0;i < registerNumB-1;i++)
+ [self writeBiuldD:fpo row:i];
+ NSLog(@"\n(保存)%@:IMGADRESS %p\n", sdd.name,sdd.img);
+
+
+ fclose(fpo);
+
+ routeCnt = 0;
+
+ saveFlag = false;
+ }
+ [self loadStruct];
+}
+
+-(void)writeBiuldD:(FILE*)fp row:(int)r{
+
+ [self writeInt:fp val:sdd.dB[r].number];
+ [self writeInt:fp val:sdd.dB[r].team];
+ [self writeInt:fp val:sdd.dB[r].chipNumber];
+ [self writeInt:fp val:sdd.dB[r].makeLv];
+
+ [self writeInt:fp val:sdd.dB[r].x];
+ [self writeInt:fp val:sdd.dB[r].y];
+ [self writeInt:fp val:sdd.dB[r].z];
+
+ [self writeInt:fp val:sdd.dB[r].dead];
+
+ //[self writeBuildDimage:fp row:r];
+ [self writeBuildChipD:fp val:sdd.dB[r].C];
+}
+
+-(void)writeBuildChipD:(FILE*)fp val:(BUILDCHIPD)val{
+
+ [self writeInt:fp val:val.chipNumb];
+ [self writeNSString:fp str:val.name];
+ [self writeNSString:fp str:val.nameID];
+
+ fwrite(&val.S_C, sizeof(STATUS), 1, fp);
+
+ NSLog(@"gj folks...");
+}
+
+-(void)writeBuildDimage:(FILE*)fp row:(int)r{
+ FILE *fpx;
+
+ NSString *directoryPath;
+
+ directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
+
+ NSString* Cpath = @"Awars IV.app/Contents/Resources/";
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:Cpath];
+
+ NSString *path2 = @INSTANT_IMG;
+
+ if(1){
+ NSData *imgData = [sdd.dB[r].img TIFFRepresentation];
+ NSBitmapImageRep *brep = [NSBitmapImageRep imageRepWithData:imgData];
+ imgData = [brep representationUsingType:NSPNGFileType properties:nil];
+ [imgData writeToFile:path2 atomically:YES];
+
+ fpx = fopen(INSTANT_IMG, "rb");
+
+ unsigned char in_buf[1024], out_buf[1024];
+ int rinf;
+
+ sdd.dB[r].imgAdCnt = 0;
+ sdd.dB[r].imgAdFix = 0;
+
+ fpos_t fpt = 0;
+ while (!feof(fpx)) {
+ fgetpos(fp, &fpt);
+ rinf = (int)fread((void*)in_buf, 1, 1024, fpx);
+ if(rinf < 0){
+ break;
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, fp);
+ if(rinf < 0){
+ break;
+ }
+ sdd.dB[r].imgAdCnt++;
+ sdd.dB[r].imgAdFix = rinf;
+ }
+
+ fpt -= (sdd.dB[r].imgAdCnt-1)*1024;
+ fsetpos(fp, &fpt);
+ [self writeInt:fp val:(int)sdd.dB[r].imgAdCnt];
+ [self writeInt:fp val:(int)sdd.dB[r].imgAdFix];
+
+ fpt = 0;
+ fsetpos(fpx, &fpt);
+ while (!feof(fpx)) {
+ rinf = (int)fread((void*)in_buf, 1, 1024, fpx);
+ if(rinf < 0){
+ break;
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, fp);
+ if(rinf < 0){
+ break;
+ }
+ }
+
+
+
+ fclose(fpx);
+ }
+}
+
+-(void)writeUnitD:(FILE*)fp row:(int)r{
+
+ [self writeInt:fp val:sdd.dU[r].CPU];
+ [self writeInt:fp val:sdd.dU[r].number];
+ [self writeInt:fp val:sdd.dU[r].team];
+ [self writeInt:fp val:sdd.dU[r].chipNumber];
+ [self writeInt:fp val:sdd.dU[r].chipNumberL];
+
+ [self writeInt:fp val:sdd.dU[r].x];
+ [self writeInt:fp val:sdd.dU[r].y];
+ [self writeInt:fp val:sdd.dU[r].z];
+
+ [self writeInt:fp val:sdd.dU[r].ix];
+ [self writeInt:fp val:sdd.dU[r].iy];
+ [self writeInt:fp val:sdd.dU[r].iz];
+
+ [self writeInt:fp val:sdd.dU[r].dead];
+
+ [self writeInt:fp val:sdd.dU[r].loadChipFlag];
+
+ [self writeInt:fp val:sdd.dU[r].unControlable];
+ [self writeInt:fp val:sdd.dU[r].joinArmyFromNext];
+ [self writeInt:fp val:sdd.dU[r].persuasion];
+
+ [self writeInt:fp val:sdd.dU[r].targType1L];
+ [self writeInt:fp val:sdd.dU[r].targType2L];
+ [self writeInt:fp val:sdd.dU[r].targType1D];
+ [self writeInt:fp val:sdd.dU[r].targType2D];
+
+ [self writeNSString:fp str:sdd.dU[r].army];
+ //[self writeUnitDimage:fp row:r];
+
+
+ [self writeUnitChipD:fp val:sdd.dU[r].C];
+
+}
+
+-(void)writeUnitChipD:(FILE*)fp val:(UNITCHIPD)val{
+
+ [self writeInt:fp val:val.chipNumb];
+ [self writeNSString:fp str:val.name];
+ [self writeNSString:fp str:val.nameNick];
+ [self writeNSString:fp str:val.nameClass];
+ [self writeNSString:fp str:val.nameID];
+
+
+
+ fwrite(&val.R_C, sizeof(RESIST), 1, fp);
+ fwrite(&val.S_C, sizeof(STATUS), 1, fp);
+
+ NSLog(@"oops is right youre supposed to get...");
+}
+
+-(void)writeUnitDimage:(FILE*)fp row:(int)r{
+ FILE *fpx;
+
+ NSString *directoryPath;
+
+ directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
+
+ NSString* Cpath = @"Awars IV.app/Contents/Resources/";
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:Cpath];
+
+ NSString *path2 = @INSTANT_IMG;
+
+ if(1){
+ NSData *imgData = [sdd.dU[r].img TIFFRepresentation];
+ NSBitmapImageRep *brep = [NSBitmapImageRep imageRepWithData:imgData];
+ imgData = [brep representationUsingType:NSPNGFileType properties:nil];
+ [imgData writeToFile:path2 atomically:YES];
+
+ fpx = fopen(INSTANT_IMG, "rb");
+
+ unsigned char in_buf[1024], out_buf[1024];
+ int rinf;
+
+ sdd.dU[r].imgAdCnt = 0;
+ sdd.dU[r].imgAdFix = 0;
+
+ fpos_t fpt = 0;
+ while (!feof(fpx)) {
+ fgetpos(fp, &fpt);
+ rinf = (int)fread((void*)in_buf, 1, 1024, fpx);
+ if(rinf < 0){
+ break;
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, fp);
+ if(rinf < 0){
+ break;
+ }
+ sdd.dU[r].imgAdCnt++;
+ sdd.dU[r].imgAdFix = rinf;
+ }
+
+ fpt -= (sdd.dU[r].imgAdCnt-1)*1024;
+ fsetpos(fp, &fpt);
+ [self writeInt:fp val:(int)sdd.dU[r].imgAdCnt];
+ [self writeInt:fp val:(int)sdd.dU[r].imgAdFix];
+
+ fpt = 0;
+ fsetpos(fpx, &fpt);
+ while (!feof(fpx)) {
+ rinf = (int)fread((void*)in_buf, 1, 1024, fpx);
+ if(rinf < 0){
+ break;
+ }
+ memcpy((void*)out_buf, (void*)in_buf, 1024);
+ rinf = (int)fwrite((void*)out_buf, 1, rinf, fp);
+ if(rinf < 0){
+ break;
+ }
+ }
+
+
+
+ fclose(fpx);
+ }
+}
+
+-(void)loadStruct{
+ NSString *directoryPath;
+
+ directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
+
+
+ NSString* Cpath = @"SaveData/";
+ [[NSFileManager defaultManager] changeCurrentDirectoryPath:Cpath];
+
+ if(datRow < 0)
+ return;
+
+ FILE *fpi;
+
+ fpi = fopen(datFilePath, "rb");
+ if(!fpi)
+ return;
+
+
+ sdd2[datRow].name = [self readNSString:fpi strOut:sdd2[datRow].name];
+
+ sdd2[datRow].imgAdressCnt = (int)[self readInt:fpi];
+ sdd2[datRow].imgAdressFix = (int)[self readInt:fpi];
+ sdd2[datRow].img = [self readNSImage:fpi imgOut:sdd2[datRow].img dcnt:sdd2[datRow].imgAdressCnt dfix:sdd2[datRow].imgAdressFix];
+
+ sdd2[datRow].MFselectedRow = (int)[self readInt:fpi];
+ sdd2[datRow].storyNumb = (int)[self readInt:fpi];
+ sdd2[datRow].scenarioNumb = (int)[self readInt:fpi];
+ sdd2[datRow].mapfileName = [self readNSString:fpi strOut:sdd2[datRow].mapfileName];
+ sdd2[datRow].levelName = [self readNSString:fpi strOut:sdd2[datRow].levelName];
+ sdd2[datRow].scenarioName = [self readNSString:fpi strOut:sdd2[datRow].scenarioName];
+
+ sdd2[datRow].chipHeight = (int)[self readInt:fpi];
+ sdd2[datRow].chipWidth = (int)[self readInt:fpi];
+ sdd2[datRow].posX = (int)[self readInt:fpi];
+ sdd2[datRow].posY = (int)[self readInt:fpi];
+ sdd2[datRow].eSlctX = (int)[self readInt:fpi];
+ sdd2[datRow].eSlctY = (int)[self readInt:fpi];
+ sdd2[datRow].registerNum = (int)[self readInt:fpi];
+ sdd2[datRow].registerNumB = (int)[self readInt:fpi];
+ sdd2[datRow].esSceneProc = (int)[self readInt:fpi];
+ sdd2[datRow].endGameCondition = (int)[self readInt:fpi];
+
+ sdd2[datRow].initMapFlag = (int)[self readInt:fpi];
+ sdd2[datRow].initStatusFlag = (int)[self readInt:fpi];
+ sdd2[datRow].TeamCountFlag = (int)[self readInt:fpi];
+ sdd2[datRow].battleBegin = (int)[self readInt:fpi];
+ sdd2[datRow].startES = (int)[self readInt:fpi];
+
+ sdd2[datRow].cpuAImodeflag = (int)[self readInt:fpi];
+ sdd2[datRow].cpuModeATTACKflag = (int)[self readInt:fpi];
+ sdd2[datRow].cpuModeMOVEflag = (int)[self readInt:fpi];
+ sdd2[datRow].cpuTurnEndFlag = (int)[self readInt:fpi];
+ sdd2[datRow].waitSwtichFlag = (int)[self readInt:fpi];
+ sdd2[datRow].battleReadyUpFlag = (int)[self readInt:fpi];
+ sdd2[datRow].setBattleModeFlag = (int)[self readInt:fpi];
+
+ sdd2[datRow].wtRdy = (int)[self readInt:fpi];
+ sdd2[datRow].wtRdy2 = (int)[self readInt:fpi];
+ sdd2[datRow].wtRdy3 = (int)[self readInt:fpi];
+
+
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].chipNum[i][j] = (int)[self readInt:fpi];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].buildNum[i][j] = (int)[self readInt:fpi];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].unitNum[i][j] = (int)[self readInt:fpi];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].loadNum[i][j] = (int)[self readInt:fpi];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].buildTeam[i][j] = (int)[self readInt:fpi];
+ for(int i = 0;i < 1002;i++)
+ for(int j = 0;j < 1002;j++)
+ sdd2[datRow].unitTeam[i][j] = (int)[self readInt:fpi];
+
+ for(int i = 0;i < registerNum-1;i++)
+ [self readUnitD:fpi row:i];
+ for(int i = 0;i < registerNumB-1;i++)
+ [self readBiuldD:fpi row:i];
+
+ NSLog(@"\n(読み込み)%@:IMGADRESS %p\n",sdd2[datRow].name,sdd2[datRow].img);
+
+
+ fclose(fpi);
+}
+
+
+
+
+
+
+
+
+-(void)clickSGL:(id)sender{
+
+ datRow = (int)[saveGameListTV clickedRow];
+}
+
-(void)clickLFOL:(id)sender{
LFOLrow = (int)[loadFileOutputListTV selectedRow];
if([[saveGameTF stringValue] isEqualToString:@""])
return;
+ sdd.name = [[saveGameTF stringValue] retain];
+ datFilePath = calloc(255, sizeof(char));
+ strcpy(datFilePath, [sdd.name UTF8String]);
+
[self saveGameDataDatViewImage];
[self saveGameDataDat];
[saveDataList initSaveList];
[fieldView unlockFocus];
NSMutableData* data = [rep representationUsingType:NSPNGFileType properties:nil];
- sdd = [Savedatadat new];
- sdd->img = [[[NSImage alloc] initWithData:data] retain];
+ sdd.img = [[[NSImage alloc] initWithData:data] retain];
- [saveGameIV setImage:sdd->img];
+ [saveGameIV setImage:sdd.img];
[saveGameIV setImageScaling:NSScaleToFit];
-(void)loadGameDataDat{
+ if(!datFilePath)
+ return;
+
+
+
+ [self loadStruct];
+
NSString *directoryPath;
directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
path = [path stringByAppendingString:SAV[SDLrow]];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
+
+ MFselectedRow = sdd2[datRow].MFselectedRow;
+ MF[MFselectedRow+1].fileName = sdd2[datRow].mapfileName;
+ //MF[MFselectedRow+1].MS = *sdd.MS;
- [saveDataList NSDataTosdd:data];
-
- sdd = sdd2;
-
- /*
- const char *cStr = [SAV[SDLrow] UTF8String];
- FILE *fp = fopen(cStr, "rb");
- fread(sdd, sizeof(SAVEDATADAT), 1, fp);
- fclose(fp);*/
-
- MF[MFselectedRow+1].MS = *(sdd->MS);
+ storyNumb = sdd2[datRow].storyNumb;
+ scenarioNumb = sdd2[datRow].scenarioNumb;
+
+ SC[storyNumb].name = sdd2[datRow].levelName;
+ SC[storyNumb].nameMAP[scenarioNumb] = sdd2[datRow].scenarioName;
- MFselectedRow = sdd->MFselectedRow;
- storyNumb = sdd->storyNumb;
- scenarioNumb = sdd->scenarioNumb;
+ posX = sdd2[datRow].posX;
+ posX = sdd2[datRow].posY;
- P[0] = sdd->P[0];
- P[1] = sdd->P[1];
- P[2] = sdd->P[2];
- UTop = sdd->UTop;
- BTop = sdd->BTop;
+ chipHeight = sdd2[datRow].chipHeight;
+ chipWidth = sdd2[datRow].chipWidth;
+ eSlctX = sdd2[datRow].eSlctX;
+ eSlctY = sdd2[datRow].eSlctY;
- esSceneProc = sdd->esSceneProc;
+ registerNum = sdd2[datRow].registerNum;
+ registerNumB = sdd2[datRow].registerNumB;
- endGameCondition = sdd->endGameCondition;
- initMapFlag = sdd->initMapFlag;
- TeamCountFlag = sdd->TeamCountFlag;
- initStatusFlag = sdd->initStatusFlag;
- battleBegin = sdd->battleBegin;
- startES = sdd->startES;
+ esSceneProc = sdd2[datRow].esSceneProc;
- cpuModeMOVEflag = sdd->cpuModeMOVEflag;
- cpuModeATTACKflag = sdd->cpuModeATTACKflag;
+ endGameCondition = sdd2[datRow].endGameCondition;
+ initMapFlag = sdd2[datRow].initMapFlag;
+ TeamCountFlag = sdd2[datRow].TeamCountFlag;
+ initStatusFlag = sdd2[datRow].initStatusFlag;
+ battleBegin = sdd2[datRow].battleBegin;
+ startES = sdd2[datRow].startES;
- cpuAImodeflag = sdd->cpuAImodeflag;
- cpuTurnEndFlag = sdd->cpuTurnEndFlag;
- waitSwtichFlag = sdd->waitSwtichFlag;
- battleReadyUpFlag = sdd->battleReadyUpFlag;
- setBattleModeFlag = sdd->setBattleModeFlag;
+ cpuAImodeflag = sdd2[datRow].cpuAImodeflag;
+ cpuTurnEndFlag = sdd2[datRow].cpuTurnEndFlag;
+ cpuModeMOVEflag = sdd2[datRow].cpuModeMOVEflag;
+ cpuModeATTACKflag = sdd2[datRow].cpuModeATTACKflag;
+ waitSwtichFlag = sdd2[datRow].waitSwtichFlag;
+ battleReadyUpFlag = sdd2[datRow].battleReadyUpFlag;
+ setBattleModeFlag = sdd2[datRow].setBattleModeFlag;
+ wtRdy = sdd2[datRow].wtRdy;
+ wtRdy2 = sdd2[datRow].wtRdy2;
+ wtRdy3 = sdd2[datRow].wtRdy3;
- wtRdy = sdd->wtRdy;
- wtRdy2 = sdd->wtRdy2;
- wtRdy3 = sdd->wtRdy3;
+ /*
+ P[0] = sdd.P[0];
+ P[1] = sdd.P[1];
+ P[2] = sdd.P[2];
+ UTop = sdd.UTop;
+ BTop = sdd.BTop;
+
- Uselected = sdd->Uselected;
- unitBreak = sdd->unitBreak;
- Utarget = sdd->Utarget;
+ Uselected = sdd.Uselected;
+ unitBreak = sdd.unitBreak;
+ Utarget = sdd.Utarget;
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- chipNum[i][j] = sdd->chipNum[i][j];
+ chipNum[i][j] = sdd.chipNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- buildNum[i][j] = sdd->buildNum[i][j];
+ buildNum[i][j] = sdd.buildNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- unitNum[i][j] = sdd->unitNum[i][j];
+ unitNum[i][j] = sdd.unitNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- loadNum[i][j] = sdd->loadNum[i][j];
+ loadNum[i][j] = sdd.loadNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- buildTeam[i][j] = sdd->buildTeam[i][j];
+ buildTeam[i][j] = sdd.buildTeam[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- unitTeam[i][j] = sdd->unitTeam[i][j];
+ unitTeam[i][j] = sdd.unitTeam[i][j];
}
}
- posX = sdd->posX;
- posX = sdd->posY;
- chipHeight = sdd->chipHeight;
- chipWidth = sdd->chipWidth;
- eSlctX = sdd->eSlctX;
- eSlctY = sdd->eSlctY;
-
- registerNum = sdd->registerNum;
- registerNumB = sdd->registerNumB;
+ */
}
-(void)saveGameDataDat{
- sdd->name = [[saveGameTF stringValue] retain];
-
- MAPSCRIPT MS = MF[MFselectedRow+1].MS;
- sdd->MFselectedRow = MFselectedRow;
- sdd->storyNumb = storyNumb;
- sdd->scenarioNumb = scenarioNumb;
- sdd->mapfileName = MF[MFselectedRow+1].fileName;
- sdd->levelName = SC[storyNumb].name;
- sdd->scenarioName = SC[storyNumb].nameMAP[scenarioNumb];
+ sdd.name = [[saveGameTF stringValue] retain];
+
+ sdd.MFselectedRow = MFselectedRow;
+ sdd.storyNumb = storyNumb;
+ sdd.scenarioNumb = scenarioNumb;
+
+ sdd.mapfileName = MF[MFselectedRow+1].fileName;
+ sdd.levelName = SC[storyNumb].name;
+ sdd.scenarioName = SC[storyNumb].nameMAP[scenarioNumb];
+
+ sdd.posX = posX;
+ sdd.posX = posY;
- sdd->MS = &MS;
+ sdd.chipHeight = chipHeight;
+ sdd.chipWidth = chipWidth;
+ sdd.eSlctX = eSlctX;
+ sdd.eSlctY = eSlctY;
- sdd->P[0] = P[0];
- sdd->P[1] = P[1];
- sdd->P[2] = P[2];
- sdd->UTop = UTop;
- sdd->BTop = BTop;
+ sdd.registerNum = registerNum;
+ sdd.registerNumB = registerNumB;
- sdd->esSceneProc = esSceneProc;
+ sdd.esSceneProc = esSceneProc;
- sdd->endGameCondition = endGameCondition;
- sdd->initMapFlag = initMapFlag;
- sdd->TeamCountFlag = TeamCountFlag;
- sdd->initStatusFlag = initStatusFlag;
- sdd->battleBegin = battleBegin;
- sdd->startES = startES;
+ sdd.endGameCondition = endGameCondition;
+ sdd.initMapFlag = initMapFlag;
+ sdd.TeamCountFlag = TeamCountFlag;
+ sdd.initStatusFlag = initStatusFlag;
+ sdd.battleBegin = battleBegin;
+ sdd.startES = startES;
+
+ sdd.cpuModeMOVEflag = cpuModeMOVEflag;
+ sdd.cpuModeATTACKflag = cpuModeATTACKflag;
+
+ sdd.cpuAImodeflag = cpuAImodeflag;
+ sdd.cpuTurnEndFlag = cpuTurnEndFlag;
+ sdd.waitSwtichFlag = waitSwtichFlag;
+ sdd.battleReadyUpFlag = battleReadyUpFlag;
+ sdd.setBattleModeFlag = setBattleModeFlag;
+
+
+ sdd.wtRdy = wtRdy;
+ sdd.wtRdy2 = wtRdy2;
+ sdd.wtRdy3 = wtRdy3;
- sdd->cpuModeMOVEflag = cpuModeMOVEflag;
- sdd->cpuModeATTACKflag = cpuModeATTACKflag;
- sdd->cpuAImodeflag = cpuAImodeflag;
- sdd->cpuTurnEndFlag = cpuTurnEndFlag;
- sdd->waitSwtichFlag = waitSwtichFlag;
- sdd->battleReadyUpFlag = battleReadyUpFlag;
- sdd->setBattleModeFlag = setBattleModeFlag;
- sdd->wtRdy = wtRdy;
- sdd->wtRdy2 = wtRdy2;
- sdd->wtRdy3 = wtRdy3;
- sdd->Uselected = Uselected;
- sdd->unitBreak = unitBreak;
- sdd->Utarget = Utarget;
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->chipNum[i][j] = chipNum[i][j];
+ sdd.chipNum[i][j] = chipNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->buildNum[i][j] = buildNum[i][j];
+ sdd.buildNum[i][j] = buildNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->unitNum[i][j] = unitNum[i][j];
+ sdd.unitNum[i][j] = unitNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->loadNum[i][j] = loadNum[i][j];
+ sdd.loadNum[i][j] = loadNum[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->buildTeam[i][j] = buildTeam[i][j];
+ sdd.buildTeam[i][j] = buildTeam[i][j];
}
}
for(int i = 0;i < 1002;i++){
for(int j = 0;j < 1002;j++){
- sdd->unitTeam[i][j] = unitTeam[i][j];
+ sdd.unitTeam[i][j] = unitTeam[i][j];
}
}
+
+
+ U = UTop;
+ int r = 0;
+ while(U && r < registerNum){
+ sdd.dU[r].CPU = U->CPU;
+ sdd.dU[r].number = U->number;
+ sdd.dU[r].team = U->team;
+ sdd.dU[r].chipNumber = U->chipNumber;
+ sdd.dU[r].chipNumberL = U->chipNumberL;
+
+ sdd.dU[r].x = U->x;
+ sdd.dU[r].y = U->y;
+ sdd.dU[r].z = U->z;
+
+ sdd.dU[r].ix = U->ix;
+ sdd.dU[r].iy = U->iy;
+ sdd.dU[r].iz = U->iz;
+
+ sdd.dU[r].dead = U->dead;
+
+ sdd.dU[r].loadChipFlag = U->loadChipFlag;
+
+ sdd.dU[r].unControlable = U->unControlable;
+ sdd.dU[r].joinArmyFromNext = U->joinArmyFromNext;
+ sdd.dU[r].persuasion = U->persuasion;
+
+ sdd.dU[r].targType1L = U->targType1L;
+ sdd.dU[r].targType2L = U->targType2L;
+ sdd.dU[r].targType1D = U->targType1D;
+ sdd.dU[r].targType2D = U->targType2D;
+
+ sdd.dU[r].army = U->army;
+ sdd.dU[r].img = [U->img retain];
+
+ sdd.dU[r].C.chipNumb = U->C.chipNumb;
+ sdd.dU[r].C.name = [U->C.name retain];
+ sdd.dU[r].C.nameNick = [U->C.nameNick retain];
+ sdd.dU[r].C.nameClass = [U->C.nameClass retain];
+ sdd.dU[r].C.nameID = [U->C.nameID retain];
+
+ sdd.dU[r].C.R_C = U->C.R_C;
+ sdd.dU[r].C.S_C = U->C.S_C;
- sdd->posX = posX;
- sdd->posX = posY;
+ U = U->next;
+ r++;
+ }U = UTop;
- sdd->chipHeight = chipHeight;
- sdd->chipWidth = chipWidth;
- sdd->eSlctX = eSlctX;
- sdd->eSlctY = eSlctY;
+ B = BTop;
+ r = 0;
+ while(B && r < registerNumB){
+ sdd.dB[r].number = B->number;
+ sdd.dB[r].team = B->team;
+ sdd.dB[r].chipNumber = B->chipNumber;
+ sdd.dB[r].makeLv = B->makeLv;
+
+ sdd.dB[r].x = B->x;
+ sdd.dB[r].y = B->y;
+ sdd.dB[r].z = B->z;
+
+ sdd.dB[r].dead = B->dead;
+
+ sdd.dB[r].img = [B->img retain];
+ sdd.dB[r].C.chipNumb = B->C.chipNumb;
+ sdd.dB[r].C.name = B->C.name;
+ sdd.dB[r].C.nameID = B->C.nameID;
+ sdd.dB[r].C.S_C = B->C.S_C;
+
+ B = B->next;
+ r++;
+ }B = BTop;
- sdd->registerNum = registerNum;
- sdd->registerNumB = registerNumB;
+ //MAPSCRIPT MS = MF[MFselectedRow+1].MS;
+ /*
+ sdd->MS = &MS;
+
+ sdd->P[0] = P[0];
+ sdd->P[1] = P[1];
+ sdd->P[2] = P[2];
+ sdd->UTop = UTop;
+ sdd->BTop = BTop;
+
+
+ sdd->Uselected = Uselected;
+ sdd->unitBreak = unitBreak;
+ sdd->Utarget = Utarget;
NSString *directoryPath;
directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
if([ary count] < 2){
path = [[path stringByAppendingString:@".sav"] retain];
}
-
- /*
- const char *cStr = [path UTF8String];
-
- FILE *fp = fopen(cStr, "wb");
- fwrite(&sdd, sizeof(SAVEDATADAT), 1, fp);
- fclose(fp);
*/
-
- [self sddToNSData:path];
+
+ [self saveStruct];
}
-(NSData *)sddToNSData:(NSString *) path{
-
+ /*
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:sdd];
[archivedData writeToFile:path atomically:YES];
return archivedData;
-
+ */
}