OSDN Git Service

セーブデータの一部をシリアライズする事に成功、マップスクリプトとともにユニット情報もコンバートできたらいいのだが…
authorKillery <Killery@kiritani-no-mac-mini.local>
Sun, 10 Jul 2016 17:36:59 +0000 (02:36 +0900)
committerKillery <Killery@kiritani-no-Mac-mini.local>
Sun, 10 Jul 2016 17:36:59 +0000 (02:36 +0900)
Awars III/FieldScene.h
Awars III/FieldScene.m
Awars III/MapView.m
Awars III/SaveDataList.m
Awars III/UnitChipList.h
Awars III/en.lproj/MainMenu.xib

index 79e7172..9917274 100755 (executable)
 #import "LevelList.h"
 #import "LoadChipList.h"
 
+#define SAVEDATADATMAX 4096
+#define DATAFILE_NAME "data.dat"
+#define INSTANT_IMG "image.png"
+
 #define FIELD_TYPE_A 0
 #define FIELD_TYPE_B 1
 #define FIELD_TYPE_C 2
@@ -57,6 +61,16 @@ typedef struct _STATUS2{
     
 }STATUS2;
 
+typedef struct _LOADCHIPD{
+    int chipNumb;
+    
+    NSString *name;
+    NSString *nameID;
+    struct _RESIST R_C;
+    struct _STATUS2 S_C;
+
+}LOADCHIPD;
+
 typedef struct _LOADCHIP{
     
     struct _RESIST R_C;
@@ -92,6 +106,15 @@ typedef struct _BSTATUS{
     
 }BSTATUS;
 
+typedef struct _BUILDCHIPD{
+    int chipNumb;
+    
+    NSString *name;
+    NSString *nameID;
+    struct _BSTATUS S_C;
+    
+}BUILDCHIPD;
+
 typedef struct _BUILDCHIP{
     
     NSString *name;
@@ -170,15 +193,53 @@ typedef struct _UNIT{
     bool unControlable;
     bool joinArmyFromNext;
     bool persuasion;
-    int atkRange;
     
     bool targType1L;
     bool targType2L;
     bool targType1D;
     bool targType2D;
     
+    int atkRange;
+    
 }UNIT;
 
+typedef struct _UNITD{
+    bool CPU;
+    int number;
+    int team;
+    int chipNumber;
+    int chipNumberL;
+    
+    int x;
+    int y;
+    int z;
+    
+    int ix;
+    int iy;
+    int iz;
+    
+    bool dead;
+    
+    bool loadChipFlag;
+    
+    bool unControlable;
+    bool joinArmyFromNext;
+    bool persuasion;
+    
+    bool targType1L;
+    bool targType2L;
+    bool targType1D;
+    bool targType2D;
+
+    NSString *army;
+    
+    int imgAdCnt;
+    int imgAdFix;
+    NSImage *img;
+
+    struct _UNITCHIPD C;
+}UNITD;
+
 typedef struct _UNION{
     
     
@@ -204,6 +265,26 @@ typedef struct _BUILD{
 
 }BUILD;
 
+typedef struct _BUILDD{
+    
+    int number;
+    int team;
+    int chipNumber;
+    int makeLv;
+    
+    int x;
+    int y;
+    int z;
+    
+    bool dead;
+    
+    int imgAdCnt;
+    int imgAdFix;
+    NSImage *img;
+
+    struct _BUILDCHIPD C;
+    
+}BUILDD;
 
 typedef struct _PLAYER{
     
@@ -369,11 +450,15 @@ int oopsCnt;
 int lmao;
 int vaginaCnt;
 
-@interface Savedatadat : NSObject<NSCoding>{
-@public
+
+#define dUMAX 9999
+#define dBMAX 9999
+typedef struct _SAVEDATADAT{
     
     NSString *name;
     
+    int imgAdressCnt;
+    int imgAdressFix;
     NSImage *img;
     
     int MFselectedRow;
@@ -384,62 +469,72 @@ int vaginaCnt;
     NSString *levelName;
     NSString *scenarioName;
     
-    struct _MAPSCRIPT *MS;
+    int chipHeight;
+    int chipWidth;
     
-    struct _PLAYER P[10];
-    struct _UNIT *UTop;
-    struct _BUILD *BTop;
+    int posX;
+    int posY;
+    
+    int eSlctX;
+    int eSlctY;
+    
+    int registerNum;
+    int registerNumB;
     
     int esSceneProc;
     
     bool endGameCondition;
     bool initMapFlag;
-    bool TeamCountFlag;
     bool initStatusFlag;
+    bool TeamCountFlag;
     bool battleBegin;
     bool startES;
     
+    bool cpuAImodeflag;
     bool cpuModeMOVEflag;
     bool cpuModeATTACKflag;
-    
-    bool cpuAImodeflag;
     bool cpuTurnEndFlag;
     bool waitSwtichFlag;
     bool battleReadyUpFlag;
     bool setBattleModeFlag;
     
-    
     bool wtRdy;
     bool wtRdy2;
     bool wtRdy3;
     
-    struct _UNIT *Uselected;
-    struct _UNIT *unitBreak;
-    struct _UNIT *Utarget;
-    
     int chipNum[1002][1002];
     int buildNum[1002][1002];
     int unitNum[1002][1002];
     int loadNum[1002][1002];
     int buildTeam[1002][1002];
     int unitTeam[1002][1002];
-    int posX;
-    int posY;
     
-    int chipHeight;
-    int chipWidth;
+    //あったものを読み込むというよりは一部のデータをもとに再現するのにおよそ等しい
+    struct _UNITD dU[dUMAX];
+    struct _BUILDD dB[dBMAX];
     
-    int eSlctX;
-    int eSlctY;
+    struct _PLAYER P[10];
     
-    int registerNum;
-    int registerNumB;
-     
-}
-@end
+    struct _MAPSCRIPT *MS;
+    
+    /*
+    struct _UNIT *UTop;
+    struct _BUILD *BTop;
+    
+    struct _UNIT *Uselected;
+    struct _UNIT *unitBreak;
+    struct _UNIT *Utarget;
+     */
+}SAVEDATADAT;
+
+int datRow;
+SAVEDATADAT sdd;
+SAVEDATADAT sdd2[SAVEDATADATMAX];
 
-Savedatadat *sdd;
-Savedatadat *sdd2;
+int routeCnt;
+bool datExistFlag;
+NSImage *changedImg;
+bool saveFlag;
 
 bool saveDataDatFlag;
 
@@ -517,6 +612,7 @@ int mapChipDataLoadProc;
 
 int LFOLrow;
 
+char *datFilePath;
 
 @interface FieldScene : NSObject
 {
@@ -790,7 +886,7 @@ int LFOLrow;
     IBOutlet NSTableView *saveGameListTV;
     
 }
-
+-(void)loadStruct;
 
 -(IBAction)saveGameSubmit:(id)sender;
 -(IBAction)saveGameCancel:(id)sender;
index 34b30dd..96651c9 100755 (executable)
@@ -8,24 +8,6 @@
 
 #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];
@@ -13189,6 +13911,10 @@ SKIP1:
     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];
@@ -13210,10 +13936,9 @@ SKIP1:
     [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];
     
     
@@ -13252,6 +13977,13 @@ SKIP1:
 
 -(void)loadGameDataDat{
     
+    if(!datFilePath)
+        return;
+    
+    
+    
+    [self loadStruct];
+    
     
     NSString *directoryPath;
     directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
@@ -13262,200 +13994,276 @@ SKIP1:
     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];
@@ -13472,28 +14280,21 @@ SKIP1:
     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;
-    
+    */
     
     
 }
index 772fe92..a316ca5 100644 (file)
     [fileData writeToFile:pathDATA atomically:YES encoding:NSUTF8StringEncoding error:nil];
 
     
-    [mapEditor initFileDirectoryOthers];
+    //[mapEditor initFileDirectoryOthers];
     
 }
 
index 5aebabd..cf05e5f 100755 (executable)
 -(IBAction)loadButton:(id)sender{
     [SDLPanel close];
     
-    storyNumb = sdd->storyNumb;
-    scenarioNumb = sdd->scenarioNumb;
+    storyNumb = sdd.storyNumb;
+    scenarioNumb = sdd.scenarioNumb;
 
-    MFselectedRow = sdd->MFselectedRow;
+    MFselectedRow = sdd.MFselectedRow;
 
     esSceneProc = 0;
     evActive = true;
     path = [path stringByAppendingString:SAV[SDLrow]];
     
     
-    /*
-    const char *cStr = [path UTF8String];
     
-    FILE *fp = fopen(cStr, "rb");
-    fread([self sddToNSData:&sdd2], sizeof(SAVEDATADAT), 1, fp);
-    fclose(fp);
-     */
-    
-    
-    NSData *data = [[NSData alloc] initWithContentsOfFile:path];
-    
-    [self NSDataTosdd:data];
-    
-    [IVsave setImage:sdd2->img];
+    [IVsave setImage:sdd2[SDLrow].img];
     [IVsave setImageScaling:NSScaleToFit];
     
 }
     
     NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
     
-    sdd2 = [[decoder decodeObject] retain];
+    //sdd2 = [[decoder decodeObject] retain];
     
     
 }
     [saveListMA removeAllObjects];
     [self didChangeValueForKey:@"saveListMA"];
     
+    datRow = 0;
     for(int i = 0;i < [SAV count];i++){
         NSMutableDictionary* dict = [NSMutableDictionary new];
         
         [self willChangeValueForKey:@"saveListMA"];
         [saveListMA addObject:dict];
         [self didChangeValueForKey:@"saveListMA"];
-    }
+        
+        datFilePath = calloc(255, sizeof(char));
+        strcpy(datFilePath, [SAV[i] UTF8String]);
+        [fieldScene loadStruct];
+        datRow++;
+    }datRow = 0;
     
     
 }
index 0f9612c..9544908 100755 (executable)
@@ -267,6 +267,19 @@ typedef struct _STATUS{
 
 struct _SKILL;
 
+typedef struct _UNITCHIPD{
+    int chipNumb;
+    
+    NSString *name;
+    NSString *nameNick;
+    NSString *nameClass;
+    NSString *nameID;
+    
+    RESIST R_C;
+    struct _STATUS S_C;
+    
+}UNITCHIPD;
+
 typedef struct _UNITCHIP{
     
     RESIST R_C;
index fa6bc75..fd1acf8 100755 (executable)
                             <autoresizingMask key="autoresizingMask"/>
                         </scroller>
                         <scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="10395">
-                            <rect key="frame" x="465" y="1" width="16" height="480"/>
+                            <rect key="frame" x="466" y="1" width="15" height="480"/>
                             <autoresizingMask key="autoresizingMask"/>
                         </scroller>
                     </scrollView>
                                 </scroller>
                             </scrollView>
                             <textField verticalHuggingPriority="750" id="uTu-pD-Rz1">
-                                <rect key="frame" x="257" y="263" width="69" height="17"/>
+                                <rect key="frame" x="257" y="263" width="224" height="17"/>
                                 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="途中セーブ" id="Wy4-fo-bmj">
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="途中セーブ(拡張子を.savにする事)" id="Wy4-fo-bmj">
                                     <font key="font" size="13" name="AquaKana"/>
                                     <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                                     <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>