OSDN Git Service

スクロール対応
[awarsiii/AwarsIV.git] / Awars III / FieldScene.m
index 9b7e5b3..95bc506 100755 (executable)
 
     if(self){
         time  = [NSTimer
-                 scheduledTimerWithTimeInterval:0.015
+                 scheduledTimerWithTimeInterval:1.0/30
                  target:self
                  selector:@selector(EventLoopFS:)
                  userInfo:nil
                  repeats:YES
                  ];
+        
+        fieldScene = self;
+        
         P[0].name = @"青軍";
         P[0].type = 0;
         P[0].resource = 500;
 -(void)clickCRL:(id)sender{
     
     crCRL = (int)[CResearchListTV clickedRow];
-    
+    if(crCRL < 0)
+        return;
     BUILDCHIP *B;
     
     B = &BC[buildNum[possionX][possionY]];
     
+    
     RESEARCH *Rtop;
     UNITCHIP *BU;
     
     Rtop = B->R;
-
+    if(B->R){
     BU = B->R->U;
     BRU = BU;
-    
     for(int i = 0;i <= crCRL;i++){
         BU = B->R->U;
         BRU = BU;
         B->R = B->R->next;
     }
     B->R = Rtop;
-    BRUindex = 0;
-    for (int i = 0; BRU->nameID != UC[i].nameID;i++) {
+        BRUindex = 0;
+    for (int i = 0; BRU->nameID != UC[i].nameID && i < UCN;i++) {
         BRUindex++;
+        
+    }
+        return;
     }
     
-}
+    if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
+        
+        int k = 0;
+        B->R = Rtop;
+        while (B->R) {
+            B->R = B->R->next;
+            k++;
+        }
+        
+        for(int i = k;i <= crCRL;i++){
+            
+            [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ATK]];
+            [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.DEF]];
+            [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.CAP]];
+            [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ACU]];
+            [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.EVA]];
+            [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp1 + i - k)-1].S_M.MOV]];
+            [researchIMG setImage:UC[*(GuildDisp1 + i - k)-1].imgb];
+            [researchIMG setImageScaling:NSScaleToFit];
+            
+        }B->R = Rtop;
+        
+        BRUindex = 0;
+        for (int i = 0; UC[*(GuildDisp1 + crCRL - k)-1].nameID != UC[i].nameID && i < UCN;i++) {
+            BRUindex++;
+        }BRU = &UC[BRUindex];
+        
+    
+        
+    }else if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
+        
+        int k = 0;
+        B->R = Rtop;
+        while (B->R) {
+            B->R = B->R->next;
+            k++;
+        }
+        
+        for(int i = k;i <= crCRL;i++){
+            
+            [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ATK]];
+            [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.DEF]];
+            [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.CAP]];
+            [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ACU]];
+            [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.EVA]];
+            [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp2 + i - k)-1].S_M.MOV]];
+            [researchIMG setImage:UC[*(GuildDisp2 + i - k)-1].imgb];
+            [researchIMG setImageScaling:NSScaleToFit];
+            
+        }B->R = Rtop;
+        
+  
+        BRUindex = 0;
+        for (int i = 0; UC[*(GuildDisp2 + crCRL - k)-1].nameID != UC[i].nameID && i < UCN;i++) {
+            BRUindex++;
+        }BRU = &UC[BRUindex];
+    }
+
+    
+    
+    
+    
+   }
 
 -(void)SetStatusFunc{
     double STRfix;
 
 -(void)EventLoopFS:(NSTimer*)time{
     
+    
+    U = UTop;
+    if(U){
+    U = UTop;
+    for(int i = 0;i < DUN[1];i++){
+        
+        U = U->next;
+    }
+    
+    //if(Utarget) NSLog(@"PX %d PY %d UX %d UY %d", possionX, possionY, Utarget->x, Utarget->y);
+        U = UTop;
+    }
+    
     if(coolTime){
         static int lmao = 0;
         
         lmao++;
         
-        if(lmao > 50){
+        if(lmao > 20){
             coolTime = false;
             lmao = 0;
         }
         [battleWindow makeKeyAndOrderFront:nil];
         extentBattleFlag = false;
         extentBattleFlag2 = true;
-        cpuAtkExtendFlag = false;
         cpuAtkExtendFlag2 = false;
         [battlePanel close];
     }if(extentBattleFlag2){
     
     if(initStatusFlag){
         
-        U = UTop;
-        while(U != NULL){
-            if(U->x == possionX && U->y == possionY && U->dead == true){
-                break;
-            }
-            
+        
+        if(1){
+
             
             
             
-            if(U->chipNumberL < 0){
-            if(U->x == possionX && U->y == possionY && U->dead == false && Uselected){
+            if(Uselected){
+            if(Uselected->chipNumberL < 0){
+            if(!Uselected->dead){
                 
-                if(U->x == Uselected->x && U->y == Uselected->y && U->team == 0){
+                if(Uselected->team == 0){
                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
                 }
-                if(U->x == Uselected->x && U->y == Uselected->y && U->team == 2){
+                if(Uselected->team == 2){
                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
                 }
                 
-                [tfName setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
-                [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
-                [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", U->C.S_C.HP/U->C.S_M.HP*100 + 0.5] intValue]];
-                [MPbarTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", U->C.S_C.MP, U->C.S_M.MP]];
-                [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 %g", U->C.S_C.ATK]];
-                [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 %g", U->C.S_C.DEF]];
-                [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 %g", U->C.S_C.CAP]];
-                [tfHit setStringValue:[NSString stringWithFormat:@"命中値 %g", U->C.S_C.ACU]];
-                [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 %g", U->C.S_C.EVA]];
-                [tfMove setStringValue:[NSString stringWithFormat:@"移動力 %d", U->C.S_C.MOV]];
-                [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", U->C.S_C.WT]];
-                [selectChara setImage:U->C.imgb];
+                [tfName setStringValue:[NSString stringWithFormat:@"%@", Uselected->C.name]];
+                [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->C.S_C.HP, Uselected->C.S_M.HP]];
+                [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", Uselected->C.S_C.HP/Uselected->C.S_M.HP*100 + 0.5] intValue]];
+                [MPbarTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", Uselected->C.S_C.MP, Uselected->C.S_M.MP]];
+                [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 %g", Uselected->C.S_C.ATK]];
+                [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 %g", Uselected->C.S_C.DEF]];
+                [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 %g", Uselected->C.S_C.CAP]];
+                [tfHit setStringValue:[NSString stringWithFormat:@"命中値 %g", Uselected->C.S_C.ACU]];
+                [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 %g", Uselected->C.S_C.EVA]];
+                [tfMove setStringValue:[NSString stringWithFormat:@"移動力 %d", Uselected->C.S_C.MOV]];
+                [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", Uselected->C.S_C.WT]];
+                [selectChara setImage:Uselected->C.imgb];
                 [selectChara setImageScaling:NSScaleToFit];
                 
                 
-                break;
+               
             }else{
                 [tfName setStringValue:[NSString stringWithFormat:@"----"]];
                 [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
             
             }
             }else{
-                if(U->x == possionX && U->y == possionY && U->dead == false && Uselected){
+                if(!Uselected->dead){
                     
-                    if(U->x == Uselected->x && U->y == Uselected->y && U->team == 0){
+                    if(Uselected->team == 0){
                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
                     }
-                    if(U->x == Uselected->x && U->y == Uselected->y && U->team == 2){
+                    if(Uselected->team == 2){
                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
                     }
                     
-                    [tfName setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
-                    [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
-                    [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", U->CL.S_C.HP/U->CL.S_M.HP*100 + 0.5] intValue]];
-                    [MPbarTF setStringValue:[NSString stringWithFormat:@"EN %g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
-                    [tfAttack setStringValue:[NSString stringWithFormat:@"移動力 %d", U->CL.S_C.MOV]];
-                    [tfDefence setStringValue:[NSString stringWithFormat:@"運動性 %g", U->CL.S_C.MOB]];
-                    [tfCalc setStringValue:[NSString stringWithFormat:@"装甲 %g", U->CL.S_C.ARM]];
-                    [tfHit setStringValue:[NSString stringWithFormat:@"限界 %g", U->CL.S_C.LIM]];
+                    [tfName setStringValue:[NSString stringWithFormat:@"%@", Uselected->CL.name]];
+                    [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->CL.S_C.HP, Uselected->CL.S_M.HP]];
+                    [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", Uselected->CL.S_C.HP/Uselected->CL.S_M.HP*100 + 0.5] intValue]];
+                    [MPbarTF setStringValue:[NSString stringWithFormat:@"EN %g/%g", Uselected->CL.S_C.EN, Uselected->CL.S_M.EN]];
+                    [tfAttack setStringValue:[NSString stringWithFormat:@"移動力 %d", Uselected->CL.S_C.MOV]];
+                    [tfDefence setStringValue:[NSString stringWithFormat:@"運動性 %g", Uselected->CL.S_C.MOB]];
+                    [tfCalc setStringValue:[NSString stringWithFormat:@"装甲 %g", Uselected->CL.S_C.ARM]];
+                    [tfHit setStringValue:[NSString stringWithFormat:@"限界 %g", Uselected->CL.S_C.LIM]];
                     [tfDodge setStringValue:[NSString stringWithFormat:@""]];
                     [tfMove setStringValue:[NSString stringWithFormat:@""]];
-                    [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", U->CL.S_C.WT]];
-                    [selectChara setImage:U->CL.imgb];
+                    [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", Uselected->CL.S_C.WT]];
+                    [selectChara setImage:Uselected->CL.imgb];
                     [selectChara setImageScaling:NSScaleToFit];
                     
-                    break;
+                    
                 }else{
                     [tfName setStringValue:[NSString stringWithFormat:@"----"]];
                     [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
             
             
             }
-            U = U->next;
+            }else{
+                [tfName setStringValue:[NSString stringWithFormat:@"----"]];
+                [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
+                [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
+                [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
+                [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
+                [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
+                [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
+                [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
+                [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
+                [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
+                [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
+                [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
+                [selectChara setImage:NULL];
+                
+            }
         }
-        U = UTop;
-        
-        U = UTop;
-        
+   
     }
     
     if(unitBreak){
             DUN[i] = 0;
         }
         
+        [self initGuildList];
+        cpuTurnEndFlag = false;
     }
     
+    if(unitBreak){
+        if(unitBreak->team == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2){
+            unitBreak->CPU = true;
+            cpuAImodeflag = true;
+            //NSLog(@"OMFG");
+        }else if(unitBreak->team == 0 && MF[MFselectedRow+1].MS.playerSet1 == 2){
+            unitBreak->CPU = true;
+            cpuAImodeflag = true;
+            //NSLog(@"OMFG");
+        }else if(unitBreak->team == 1){
+            unitBreak->CPU = true;
+            cpuAImodeflag = true;
+            //NSLog(@"OMFG");
+        }
+        else{
+            unitBreak->CPU = false;
+            cpuAImodeflag = false;
+        }
+    }
+    
+    [self EventFunc];
+    if(wtRdy3)
+        return;
     
     U = UTop;
     U = unitBreak;
-    if(battleBegin)
+    if(battleBegin && !wtRdy2)
         while (!wtRdy) {
             wtPx = 0;
             wtPy = 0;
-            wtMovedFlag = false;
-            wtAttackedFlag = false;
             
             while (U) {
                 if(!U->dead) U->C.S_C.WT -= 1;
-                if(U->dead) U->C.S_C.WT = 999999;
+                if(U->dead) {
+                    U->C.S_C.WT = 999999;
+                    //goto lolwtfshit;
+                }
                 if(U->C.S_C.WT <= 0 && !U->dead){//WTターン周り
                     U->C.S_C.WT = 0;
+                    
+                    
                     wtUnitNum = U->number;
                     wtPx = U->x;
                     wtPy = U->y;
                     wtRdy = true;
+                    wtRdy2 = true;
                     unitBreak = U;
+                    Uselected = U;
                     possionX = unitBreak->x;
                     possionY = unitBreak->y;
+                    //おまんちん
+                    stanbyFlag = false;
+                    wtMovedFlag = false;
+                    wtAttackedFlag = false;
+                    guildRE1 = false;
+                    guildRE2 = false;
                     
+                    [fieldView scrollPoint:NSMakePoint((wtPx-8)*32, (wtPy-8)*32)];
                     
                     if(buildNum[U->x][U->y] >= 0){
                         B = BTop;
             }
             eventTime++;
             U = UTop;
+            pussyCumsOnlyOnceFlag = false;
+            wtRdy = false;
+            
             if(!U) break;
+            
         }
     lolwtfshit:{}
     U = UTop;
     
     if(battleWindowFlag){battleFlag = true; battleWindowFlag = false;
-    
+        
     }
     
+    while(1){
     if(battleFlag){
+        /*
+        static int openWait = 0;
+        
+        if(openWait < 100){
+            openWait++;
+            break;
+        }else{
+            openWait = 0;
+        }*/
+        
+        
         if(!battleSettingFlag){
             windowPoint.x = [mapWindow frame].origin.x;
             windowPoint.y = [mapWindow frame].origin.y;
         }
         [self setBattlePanel];
     }
+        break;
+    }
     if(battleSetUp){
         if(!battleSetUpIgnore){
             [self AttackDisplay];
         waitSwtichFlag = false;
         
         wtRdy = false;
+        wtRdy2 = false;
         Uselected = NULL;
         
         endGamePanelWait = 100;
         
         
         wtRdy = false;
+        wtRdy2 = false;
+        
         Uselected = NULL;
     
     }if(stageClearFlag){
         setBattleModeFlag = false;
         
         wtRdy = false;
+        wtRdy2 = false;
+        
+        
         Uselected = NULL;
         
     }
         setBattleModeFlag = false;
         
         wtRdy = false;
+        wtRdy2 = false;
         Uselected = NULL;
         
     }
         U = UTop;
     }
     
+    
+    
     if(unitMoveEndFlag){
         pussyLoopFlag = false;
     }
     
-    if(battleBegin && !pussyLoopFlag){
+    
+    w000p:
+    
+    if(CPUAttackSubmitFlag){
+        battleFlag = true;
+        CPUAttackSubmitFlag = false;
+        windowPoint.x = [mapWindow frame].origin.x;
+        windowPoint.y = [mapWindow frame].origin.y;
+        [atkPanel setFrameOrigin:windowPoint];
+    }
+    
+    
+    static int oopsCnt = 30;
+    
+    U = UTop;
+    
+    
+    if(Utarget){
+    
+    if(battleFlag &&
+       ((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
+        (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
+        (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2))
+       ){
+        if(!(AVpreview.rate > 0) && !animationFlag1 && !animationFlag2)
+            oopsCnt--;
+        if(oopsCnt > 0)
+            return;
+        else{
+            oopsCnt = 30;//cpu攻撃ナビ
+        }
+        
+        battleFlag = false;
+        battleRdy = false;
+        battleSet1Flag = false;
+        battleSet2Flag = false;
+        battleSettingFlag = false;
+        [self AttackDisplay];
+        windowPoint.x = [mapWindow frame].origin.x;
+        windowPoint.y = [mapWindow frame].origin.y;
+        [battleWindow setFrameOrigin:windowPoint];
+        [battleWindow makeKeyAndOrderFront:nil];
+        [battlePanel close];
+    }
+    }
+    if(Utarget){
+    if(battleRdy &&
+       ((Utarget && MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
+        (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
+        (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2)
+        )
+       ){
+        
+        if(!(AVpreview.rate > 0) && !animationFlag1 && !animationFlag2)
+            oopsCnt--;
+        if(oopsCnt > 0)
+            return;
+        else{
+            oopsCnt = 30;//cpu攻撃準備
+        }
+        
+       bLoopFlag = false;
+    }
+    }
+    U = UTop;
+    
+
+}
+
+-(void)EventFunc{
+    
+    if(battleBegin && !pussyLoopFlag && !pussyCumsOnlyOnceFlag){
+        wtRdy3 = true;
         bool proccessTrue = false;
         static bool onlyBigin = false;
         MAPSCRIPT MS = MF[MFselectedRow+1].MS;
         MAPSCRIPTD *MSDtop;
         MSDtop = MSDTO;
-        if(!MSDtop)
-            goto w000p;
+        if(!MSDtop){
+            wtRdy3 = false;
+            return;
+        }
         
         
         if(!onlyBigin){
             
             
             enum{
-            ENTIRE_MAP,
-            CENTER_POINT
+                ENTIRE_MAP,
+                CENTER_POINT
             };
             
             while(MS.D){
             }
             
             if(MS.D)
-            while(MS.D->P){
-                if(MS.D->P->endFlag)
-                    MS.D->P = MS.D->P->next;
-                else
-                    break;
-            }
+                while(MS.D->P){
+                    if(MS.D->P->endFlag)
+                        MS.D->P = MS.D->P->next;
+                    else
+                        break;
+                }
             if(!MS.D->P){
                 MS.D->endFlag = true;
                 messageDialog = false;
                     }MS.D->P = MSDPT;
                     
                     if(resultFailFlag)
-                    while(MS.D->P){
-                        MS.D->P->endFlag = false;
-                        MS.D->P = MS.D->P->next;
-                    }MS.D->P = MSDPT;
+                        while(MS.D->P){
+                            MS.D->P->endFlag = false;
+                            MS.D->P = MS.D->P->next;
+                        }MS.D->P = MSDPT;
                     
                 }else if(MS.D->ETtype == 2){
                     
                     }MS.D->P = MSDPT;
                     
                     if(resultFailFlag)
-                    while(MS.D->P){
-                        MS.D->P->endFlag = false;
-                        MS.D->P = MS.D->P->next;
-                    }MS.D->P = MSDPT;
+                        while(MS.D->P){
+                            MS.D->P->endFlag = false;
+                            MS.D->P = MS.D->P->next;
+                        }MS.D->P = MSDPT;
                 }else if(MS.D->ETtype == 3){
                     
                     bool resultFailFlag = false;
                     }MS.D->P = MSDPT;
                     
                     if(resultFailFlag)
-                    while(MS.D->P){
-                        MS.D->P->endFlag = false;
-                        MS.D->P = MS.D->P->next;
-                    }MS.D->P = MSDPT;
+                        while(MS.D->P){
+                            MS.D->P->endFlag = false;
+                            MS.D->P = MS.D->P->next;
+                        }MS.D->P = MSDPT;
                     //NSLog(@"%d", UTop->x);
                 }else if(MS.D->ETtype == 4){
                     while(MS.D->P){
             }
             
             if(MS.D->switch1)
-            for(int i = 0;*(MS.D->switch1+i)>0;i++){
-                if(Suicchi[*(MS.D->switch1+i)])
-                    continue;
-                
-                EventFailFlag = true;
-            }
+                for(int i = 0;*(MS.D->switch1+i)>0;i++){
+                    if(Suicchi[*(MS.D->switch1+i)])
+                        continue;
+                    
+                    EventFailFlag = true;
+                }
             
             if(MS.D->switch2)
-            for(int i = 0;*(MS.D->switch2+i)>0;i++){
-                if(!Suicchi[*(MS.D->switch2+i)])
-                    continue;
-                
-                EventFailFlag = true;
-            }
+                for(int i = 0;*(MS.D->switch2+i)>0;i++){
+                    if(!Suicchi[*(MS.D->switch2+i)])
+                        continue;
+                    
+                    EventFailFlag = true;
+                }
             
             
             if(MS.D->ET3 <= eventTime)
                 proccessTrue = false;
                 EventFailFlag = true;
             }
-           
+            
             if(MS.D->endFlag)
                 continue;
             
                 continue;
             }
             
-        if(proccessTrue)
-        switch (proccesType) {
-                
-            case ENTIRE_MAP:
-                MS.D->P = [self setEvent:MS.D->P];
-                if(messageDialog){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                }
-                if(waitSwtichFlag) {
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                }if(backTitleFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                
-                }if(stageClearFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                    
-                }if(gameOverFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                    
-                }
-                MS.D->P = MSDPtop;
-                break;
-            case CENTER_POINT:
-                MS.D->P = [self setEvent:MS.D->P];
-                if(messageDialog){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                }
-                if(waitSwtichFlag) {
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                }if(backTitleFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                    
-                }if(stageClearFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                    
-                }if(gameOverFlag){
-                    MS.D->P = MSDPtop;
-                    MS.D = MSDtop;
-                    return;
-                    
+            if(proccessTrue)
+                switch (proccesType) {
+                        
+                    case ENTIRE_MAP:
+                        MS.D->P = [self setEvent:MS.D->P];
+                        if(messageDialog){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                        }
+                        if(waitSwtichFlag) {
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                        }if(backTitleFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }if(stageClearFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }if(gameOverFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }
+                        MS.D->P = MSDPtop;
+                        break;
+                    case CENTER_POINT:
+                        MS.D->P = [self setEvent:MS.D->P];
+                        if(messageDialog){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                        }
+                        if(waitSwtichFlag) {
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                        }if(backTitleFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }if(stageClearFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }if(gameOverFlag){
+                            MS.D->P = MSDPtop;
+                            MS.D = MSDtop;
+                            return;
+                            
+                        }
+                        MS.D->P = MSDPtop;
+                        break;
+                        
+                    default:
+                        MS.D->P = MSDPtop;
+                        break;
                 }
-                MS.D->P = MSDPtop;
-                break;
-                
-            default:
-                MS.D->P = MSDPtop;
-                break;
-        }
             
             MS.D->P = MSDPtop;
             continue;
         }
         MS.D = MSDTO;
-   
+        
         while(MS.D){
             
             MAPSCRIPT0 *MSDPT = MS.D->P;
-        if(MS.D->ETtype == 0){
-            while(MS.D->P){
-                MS.D->P->succeessfulFlag = true;
-                MS.D->endFlag = true;
-                MS.D->P = MS.D->P->next;
-            }MS.D->P = MSDPT;
-        }else if(MS.D->ETtype == 1){
-            bool resultFailFlag = false;
-            while(MS.D->P){
-                if(!MS.D->P->endFlag)
-                    resultFailFlag = true;
-                MS.D->P = MS.D->P->next;
-            }MS.D->P = MSDPT;
-            
-            if(resultFailFlag)
+            if(MS.D->ETtype == 0){
                 while(MS.D->P){
-                    MS.D->P->succeessfulFlag = false;
-                    MS.D->endFlag = false;
+                    MS.D->P->succeessfulFlag = true;
+                    MS.D->endFlag = true;
                     MS.D->P = MS.D->P->next;
                 }MS.D->P = MSDPT;
-            
-        }else if(MS.D->ETtype == 2){
-            
-            bool resultFailFlag = false;
-            while(MS.D->P){
-                if(!MS.D->P->succeessfulFlag)
-                    resultFailFlag = true;
-                MS.D->P = MS.D->P->next;
-            }MS.D->P = MSDPT;
-            
-            if(resultFailFlag)
+            }else if(MS.D->ETtype == 1){
+                bool resultFailFlag = false;
                 while(MS.D->P){
-                    MS.D->P->succeessfulFlag = false;
-                    MS.D->endFlag = false;
+                    if(!MS.D->P->endFlag)
+                        resultFailFlag = true;
                     MS.D->P = MS.D->P->next;
                 }MS.D->P = MSDPT;
-        }else if(MS.D->ETtype == 3){
-            
-            bool resultFailFlag = false;
-            while(MS.D->P){
-                if(!MS.D->P->succeessfulFlag){
-                    resultFailFlag = false;
-                    break;
-                }
-                resultFailFlag = true;
-                MS.D->P = MS.D->P->next;
-            }MS.D->P = MSDPT;
-            
-            if(resultFailFlag)
+                
+                if(resultFailFlag)
+                    while(MS.D->P){
+                        MS.D->P->succeessfulFlag = false;
+                        MS.D->endFlag = false;
+                        MS.D->P = MS.D->P->next;
+                    }MS.D->P = MSDPT;
+                
+            }else if(MS.D->ETtype == 2){
+                
+                bool resultFailFlag = false;
+                while(MS.D->P){
+                    if(!MS.D->P->succeessfulFlag)
+                        resultFailFlag = true;
+                    MS.D->P = MS.D->P->next;
+                }MS.D->P = MSDPT;
+                
+                if(resultFailFlag)
+                    while(MS.D->P){
+                        MS.D->P->succeessfulFlag = false;
+                        MS.D->endFlag = false;
+                        MS.D->P = MS.D->P->next;
+                    }MS.D->P = MSDPT;
+            }else if(MS.D->ETtype == 3){
+                
+                bool resultFailFlag = false;
+                while(MS.D->P){
+                    if(!MS.D->P->succeessfulFlag){
+                        resultFailFlag = false;
+                        break;
+                    }
+                    resultFailFlag = true;
+                    MS.D->P = MS.D->P->next;
+                }MS.D->P = MSDPT;
+                
+                if(resultFailFlag)
+                    while(MS.D->P){
+                        MS.D->P->succeessfulFlag = false;
+                        MS.D->endFlag = false;
+                        MS.D->P = MS.D->P->next;
+                    }MS.D->P = MSDPtop;
+            }else if(MS.D->ETtype == 4){
                 while(MS.D->P){
                     MS.D->P->succeessfulFlag = false;
                     MS.D->endFlag = false;
                     MS.D->P = MS.D->P->next;
-                }MS.D->P = MSDPtop;
-        }else if(MS.D->ETtype == 4){
-            while(MS.D->P){
-                MS.D->P->succeessfulFlag = false;
-                MS.D->endFlag = false;
-                MS.D->P = MS.D->P->next;
-            }MS.D->P = MSDPT;
+                }MS.D->P = MSDPT;
+            }
+            
+            MS.D->P = MSDPT;
+            MS.D = MS.D->next;
         }
         
-        MS.D->P = MSDPT;
-        MS.D = MS.D->next;
-    }
-
-    MS.D = MSDtop;
-    
-    
-    
+        MS.D = MSDtop;
+        
+        
+        
         MF[MFselectedRow+1].MS.D = MS.D;
         cpuTurnEndFlag = false;
         battleSetUpIgnore = false;
+        pussyCumsOnlyOnceFlag = true;
+        wtRdy3 = false;
     }
-w000p:
 
-    if(!unitBreak)
-        return;
-
-    if(unitBreak->team == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2){
-        unitBreak->CPU = true;
-        cpuAImodeflag = true;
-        //NSLog(@"OMFG");
-    }else if(unitBreak->team == 0 && MF[MFselectedRow+1].MS.playerSet1 == 2){
-        unitBreak->CPU = true;
-        cpuAImodeflag = true;
-        //NSLog(@"OMFG");
-    }else if(unitBreak->team == 1){
-        unitBreak->CPU = true;
-        cpuAImodeflag = true;
-        //NSLog(@"OMFG");
-    }
-    else{
-        unitBreak->CPU = false;
-        cpuAImodeflag = false;
-    }
-    
-    if(CPUAttackSubmitFlag){
-        battleFlag = true;
-        CPUAttackSubmitFlag = false;
-        windowPoint.x = [mapWindow frame].origin.x;
-        windowPoint.y = [mapWindow frame].origin.y;
-        [atkPanel setFrameOrigin:windowPoint];
-    }
-    
-    
-    static int oopsCnt = 20;
-    
-    U = UTop;
-    
-    
-    if(Utarget){
-    
-    if(battleFlag &&
-       ((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
-        (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
-        (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2))
-       ){
-        oopsCnt--;
-        if(oopsCnt > 0)
-            return;
-        else{
-            oopsCnt = 50;//cpu攻撃ナビ
-        }
-        
-        battleFlag = false;
-        battleRdy = false;
-        battleSet1Flag = false;
-        battleSet2Flag = false;
-        battleSettingFlag = false;
-        [self AttackDisplay];
-        windowPoint.x = [mapWindow frame].origin.x;
-        windowPoint.y = [mapWindow frame].origin.y;
-        [battleWindow setFrameOrigin:windowPoint];
-        [battleWindow makeKeyAndOrderFront:nil];
-        [battlePanel close];
-    }
-    }
-    if(Utarget){
-    if(battleRdy &&
-       ((Utarget && MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
-        (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
-        (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2)
-        )
-       ){
-        
-        oopsCnt--;
-        if(oopsCnt > 0)
-            return;
-        else{
-            oopsCnt = 50;//cpu攻撃準備
-        }
-        
-       bLoopFlag = false;
-    }
-    }
-    U = UTop;
-    
 
 }
 
@@ -2621,15 +2769,24 @@ w000p:
 
 -(bool)setBuildList{
 
+    crCRL = 0;
+    
     [self willChangeValueForKey:@"CResearchListMA"];
     [CResearchListMA removeAllObjects];
     [self didChangeValueForKey:@"CResearchListMA"];
     
+    [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
+    [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
+    [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
+    [researchACU setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
+    [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
+    [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
+    
     BUILDCHIP *B0;
     
     B = BTop;
     
-    while (B->x == possionX && B->y == possionY) {
+    while (B && B->x != possionX && B->y != possionY) {
         B = B->next;
     }
     B0 = &BC[buildNum[possionX][possionY]];
@@ -2639,8 +2796,25 @@ w000p:
     
     Rtop = B0->R;
     
-    if(!B0->R){
+    
+    if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
+    
+        
+        if(GCnum1 < 0)
+        if(!B0->R){
+
         return false;
+    
+        }
+    }else if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
+    
+    
+        if(GCnum2 < 0)
+        if(!B0->R){
+
+            return false;
+            
+        }
     }
     
     while(B0->R){
@@ -2654,44 +2828,258 @@ w000p:
         [dict setValue:BU->img forKey:@"img"];
 
         
-        [self willChangeValueForKey:@"CResearchListMA"];
-        [CResearchListMA addObject:dict];
-        [self didChangeValueForKey:@"CResearchListMA"];
+        [self willChangeValueForKey:@"CResearchListMA"];
+        [CResearchListMA addObject:dict];
+        [self didChangeValueForKey:@"CResearchListMA"];
+        }
+        B0->R = B0->R->next;
+    }
+    B0->R = Rtop;
+    
+    B = BTop;
+    
+    BUILDCHIP *B;
+    
+    B = &BC[buildNum[possionX][possionY]];
+    
+    
+    if(B0->R){
+    Rtop = B->R;
+    
+    BU = B->R->U;
+    BRU = BU;
+    
+    for(int i = 0;i <= crCRL && B->R;i++){
+        BU = B->R->U;
+        BRU = BU;
+        [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
+        [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
+        [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
+        [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
+        [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
+        [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
+        [researchIMG setImage:BU->imgb];
+        [researchIMG setImageScaling:NSScaleToFit];
+        
+        B->R = B->R->next;
+    }
+    B->R = Rtop;
+    }
+    
+    MAPSCRIPT MS = MF[MFselectedRow+1].MS;
+    
+    if(B->GuildFlag &&( buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1)){
+    
+        int a = MS.guildListRegistNum12 - MS.guildListRegistNum11;
+        
+        if(!guildRE1){
+        Gnum1 = 0;
+        if(a > 0)
+            Gnum1 = MS.guildListRegistNum11 + arc4random()%(MS.guildListRegistNum12 - MS.guildListRegistNum11+1);
+        else
+            Gnum1 = MS.guildListRegistNum12;
+        
+        if(Gnum1 > GCnum1+1)
+            Gnum1 = GCnum1;
+        }
+        int n = 0;
+        guildc = 0;
+        saveGuildList = calloc((GCnum1+1), sizeof(int));
+        if(!guildRE1) GuildDisp1 = calloc(Gnum1, sizeof(int));
+        for(int i = 0;i < Gnum1;i++){
+            
+            if(!guildRE1){
+                n = [self chooseGuildList:GuildChosen1 gcnum:GCnum1];
+            if(n == -1)
+                return false;
+                *(GuildDisp1 + i) = *(GuildChosen1 + n);
+            }
+        
+            if(*(GuildDisp1 + i) <= 0)
+                break;
+            
+            NSMutableDictionary* dict = [NSMutableDictionary new];
+            [dict setValue:[NSString stringWithFormat:@"%@", UC[*(GuildDisp1 + i)-1].name] forKey:@"name"];
+            [dict setValue:[NSString stringWithFormat:@"%g", UC[*(GuildDisp1 + i)-1].S_M.HP] forKey:@"HP"];
+            [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d", UC[*(GuildDisp1 + i)-1].S_M.cSupply, UC[*(GuildDisp1 + i)-1].S_M.cFood, UC[*(GuildDisp1 + i)-1].S_M.cMoney] forKey:@"cost"];
+            [dict setValue:UC[*(GuildDisp1 + i)-1].img forKey:@"img"];
+            
+            
+            [self willChangeValueForKey:@"CResearchListMA"];
+            [CResearchListMA addObject:dict];
+            [self didChangeValueForKey:@"CResearchListMA"];
+    
+        }
+
+        
+        
+        int k = 0;
+        B->R = Rtop;
+        
+        while (B->R) {
+            B->R = B->R->next;
+            k++;
+        }
+        
+        for(int i = k;i <= crCRL;i++){
+            
+            [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ATK]];
+            [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.DEF]];
+            [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.CAP]];
+            [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ACU]];
+            [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.EVA]];
+            [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp1 + i - k)-1].S_M.MOV]];
+            [researchIMG setImage:UC[*(GuildDisp1 + i - k)-1].imgb];
+            [researchIMG setImageScaling:NSScaleToFit];
+            
+        }B->R = Rtop;
+        
+        guildRE1 = true;
+    }else if(B->GuildFlag && (buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3)){
+    
+        int a = MS.guildListRegistNum22 - MS.guildListRegistNum21;
+        
+        if(!guildRE2){
+        Gnum2 = 0;
+        if(a > 0)
+            Gnum2 = MS.guildListRegistNum21 + arc4random()%(MS.guildListRegistNum22 - MS.guildListRegistNum21+1);
+        else
+            Gnum2 = MS.guildListRegistNum22;
+        
+        if(Gnum2 > GCnum2+1)
+            Gnum2 = GCnum2;
         }
-        B0->R = B0->R->next;
+        int n = 0;
+        
+        guildc = 0;
+        saveGuildList = calloc((GCnum2+1), sizeof(int));
+        if(!guildRE2) GuildDisp2 = calloc(Gnum2, sizeof(int));
+        for(int i = 0;i < Gnum2;i++){
+            if(!guildRE2){
+                n = [self chooseGuildList:GuildChosen2 gcnum:GCnum2];
+                if(n == -1)
+                    return false;
+                *(GuildDisp2 + i) = *(GuildChosen2 + n);
+            }
+            
+            if(*(GuildDisp2 + i) <= 0)
+                break;
+            
+            NSMutableDictionary* dict = [NSMutableDictionary new];
+            [dict setValue:[NSString stringWithFormat:@"%@", UC[*(GuildDisp2 + i)-1].name] forKey:@"name"];
+            [dict setValue:[NSString stringWithFormat:@"%g", UC[*(GuildDisp2 + i)-1].S_M.HP] forKey:@"HP"];
+            [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d", UC[*(GuildDisp2 + i)-1].S_M.cSupply, UC[*(GuildDisp2 + i)-1].S_M.cFood, UC[*(GuildDisp2 + i)-1].S_M.cMoney] forKey:@"cost"];
+            [dict setValue:UC[*(GuildDisp2 + i)-1].img forKey:@"img"];
+            
+            
+            [self willChangeValueForKey:@"CResearchListMA"];
+            [CResearchListMA addObject:dict];
+            [self didChangeValueForKey:@"CResearchListMA"];
+        }
+        
+        int k = 0;
+        B->R = Rtop;
+        while (B->R) {
+            B->R = B->R->next;
+            k++;
+        }
+        
+        for(int i = k;i <= crCRL;i++){
+            
+            [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ATK]];
+            [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.DEF]];
+            [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.CAP]];
+            [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ACU]];
+            [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.EVA]];
+            [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp2 + i - k)-1].S_M.MOV]];
+            [researchIMG setImage:UC[*(GuildDisp2 + i - k)-1].imgb];
+            [researchIMG setImageScaling:NSScaleToFit];
+            
+        }B->R = Rtop;
+        
+        
+        guildRE2 = true;
     }
-    B0->R = Rtop;
     
-    B = BTop;
     
-    BUILDCHIP *B;
     
-    B = &BC[buildNum[possionX][possionY]];
     
-    Rtop = B->R;
     
-    BU = B->R->U;
-    BRU = BU;
     
-    for(int i = 0;i <= crCRL;i++){
-        BU = B->R->U;
-        BRU = BU;
-        [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
-        [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
-        [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
-        [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
-        [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
-        [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
-        [researchIMG setImage:BU->imgb];
-        [researchIMG setImageScaling:NSScaleToFit];
+    
+    
+    return true;
+}
+-(int)chooseGuildList:(int*)value gcnum:(int)gcnum{
+
+    int a = 0;
+    while(1){
+        bool sameFlag = false;
+        bool sameFlag2 = false;
         
-        B->R = B->R->next;
+        if(guildc >= gcnum+1){
+            a = -1;
+            break;
+        }
+        
+        a = arc4random()%(gcnum+1);
+        
+        for(int i = 0;i < guildc;i++){
+            if(*(saveGuildList+i) == a){
+                sameFlag2 = true;
+                break;
+            }
+        }
+        
+        if(sameFlag2)
+            continue;
+        
+        *(saveGuildList+guildc) = a;
+        
+        guildc++;
+        
+        U = UTop;
+        while(U){
+            if([UC[*(value + a)-1].nameID isEqualToString:U->C.nameID]){
+                sameFlag = true;
+                break;
+            }
+            U = U->next;
+        }U = UTop;
+        
+        if(!sameFlag)
+            break;
     }
-    B->R = Rtop;
+
+
+    return a;
+}
+
+-(void)initGuildList{
+
+    MAPSCRIPT MS = MF[MFselectedRow+1].MS;
     
-    return true;
+    GuildChosen1 = calloc(UCN, sizeof(int));
+    GuildChosen2 = calloc(UCN, sizeof(int));
+
+    GCnum1 = -1;
+    for (int i = 0;i < UCN;i++) {
+        if(MS.guildListRegist[i]){
+            GCnum1++;
+            *(GuildChosen1 + GCnum1) = i+1;
+        }
+    }
+    GCnum2 = -1;
+    for (int i = 0;i < UCN;i++) {
+        if(MS.guildListRegist2[i]){
+            GCnum2++;
+            *(GuildChosen2 + GCnum2) = i+1;
+        }
+    }
+
 }
 
+
 -(void)SetMenu{
     
     [self setCommandPanel];
@@ -2761,6 +3149,7 @@ w000p:
     U = UTop;
     
     wtRdy = false;
+    wtRdy2 = false;
     pushStanbyFlag = true;
     pussyLoopFlag = false;
     [menuPanel close];
@@ -2871,16 +3260,22 @@ w000p:
 }
 
 -(void)addBuildStatus{
-    
+    //おまんちん
     int omgCnt = 0;
-    BTop = B;
+    B = BTop;
+    if(B)
     while (B->next) {omgCnt++;
         B = B->next;
     }
-    B->next = calloc(1, sizeof(BUILD));
-    B = B->next;
-    B->next = NULL;
-    if(omgCnt == 0) BTop = B;
+    if(!B){
+        B = calloc(1, sizeof(BUILD));
+        BTop = B;
+    }else{
+        
+        B->next = calloc(1, sizeof(BUILD));
+        B = B->next;
+        B->next = NULL;
+    }
     B->number = registerNumB;
     
     
@@ -2944,6 +3339,10 @@ w000p:
                         U->joinArmyFromNext = true;
                         U->persuasion = true;
                     }
+                    
+                    if(MF[MFselectedRow+1].MS.playerSet1 == 2){
+                        U->CPU = true;
+                    }
                 }
                 if(unitTeam[possionX][possionY] == 2 || unitTeam[possionX][possionY] == 3){
                     U->team = 2;
@@ -2951,6 +3350,10 @@ w000p:
                         U->joinArmyFromNext = true;
                         U->persuasion = true;
                     }
+                    
+                    if(MF[MFselectedRow+1].MS.playerSet2 == 2){
+                        U->CPU = true;
+                    }
                 }
                 if(unitTeam[possionX][possionY] == 4 || unitTeam[possionX][possionY] == 5){
                     U->team = 1;
@@ -2958,6 +3361,7 @@ w000p:
                         U->joinArmyFromNext = true;
                         U->persuasion = true;
                     }
+                    U->CPU = true;
                 }
                 if(unitTeam[possionX][possionY] == -1){
                     U->team = -1;
@@ -2965,7 +3369,10 @@ w000p:
                         U->joinArmyFromNext = false;
                         U->persuasion = true;
                     }
+                    U->CPU = true;
                 }
+
+    
                 [self SetUnitStatus:unitNum[possionX][possionY]];
     registerNum++;
     U = UTop;
@@ -3651,7 +4058,7 @@ w000p:
 }
 
 -(void)setBattlePanel{
-    
+    //おまんちん
     U = UTop;
     
     while (!(DUN[1] == U->number)) {
@@ -3723,29 +4130,29 @@ w000p:
         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
         
         if(!U2->C.aura && U->C.A->D){
-            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
+            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
         }else if(U->C.A->D){
             double val = val = 1/log(3+U2->C.S_C.MP/64);
-            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
+            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
         }
         double val2 = log(3+U2->C.S_C.MP/64);
@@ -3753,21 +4160,38 @@ w000p:
             mostDmg2 = mostDmg2*val2;
         }
         if(U->C.A->D){
-        if(U->C.A->D->fix == 2){
-            mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
-            
-        }else if(U->C.A->D->fix == 1){
-            mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
-            
-        }else if(U->C.A->D->fix == 0){
-            mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
-        }}
+            if(U->C.A->D->fix == 2){
+                mostDmg2 = mostDmg2/2 + (U->C.S_C.HIT/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                
+                if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                
+                
+            }else if(U->C.A->D->fix == 1){
+                mostDmg2 = mostDmg2/2 + ((U->C.S_C.ATK/2+U->C.S_C.HIT/2)/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                
+                if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                
+            }else if(U->C.A->D->fix == 0){
+                
+            }
+        }
+
         
         U2A = U->C.A;
         costVIG = U->C.A->vigor;
         UNIT *oops = U;
         U = U2;
         mostDmg2 = [self dmgResist:mostDmg2];
+        
+        //NSLog(@"crCAL1 %d", crCAL1);
         if(mostDmg2 < 0) mostDmg2 = 1;
         U = oops;
         if(U->C.A->D)
@@ -3788,11 +4212,8 @@ w000p:
         num++;
     }
     U->C.A = aTop2;
-        
-        for(int i = 0;i < mostNum;i++){
-            U->C.A = U->C.A->next;
-        }
-        if(U->C.A->extent == 0){
+
+        if(U->C.A->extent == 0 && mostNum >= 0 && !CPUmostDmgChoice){
             
             U->C.A = aTop2;
             crCAL1 = 0;
@@ -3807,6 +4228,8 @@ w000p:
                 U->C.A = U->C.A->next;
             }
         }
+        
+        CPUmostDmgChoice = false;
 
    if(U->C.A){
         mostNumSub = mostNum;
@@ -3818,9 +4241,8 @@ w000p:
         if(U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange
            && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
             
-        }else while(U->C.A){
-            U->C.A = U->C.A->next;
-            crCAL1++;
+        }else{
+        
         }
         
     }U->C.A = aTop2;
@@ -3865,6 +4287,7 @@ w000p:
     [combatLMP1 setIntValue:(int)oops];
     
     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
+    //NSLog(@"mostNumSub %d crCAL1 %d", mostNumSub, crCAL1);
     hitFix = U->C.A->hitPercent;
     
     u2A = U->C.A;
@@ -3906,7 +4329,7 @@ w000p:
     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
     if(hi < 0) hi = 0;
     
-    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
 
     if(battleDod2Flag) hit = hit / 2;
     hit = floor(hit);
@@ -3953,29 +4376,29 @@ w000p:
         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
         
         if(!U2->C.aura && U->C.A->D){
-            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
+            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
         }else if(U->C.A->D){
             double val = val = 1/log(3+U2->C.S_C.MP/64);
-            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
+            if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+            if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
         }
         double val2 = log(3+U2->C.S_C.MP/64);
@@ -3983,15 +4406,30 @@ w000p:
             mostDmg2 = mostDmg2*val2;
         }
         if(U->C.A->D){
-        if(U->C.A->D->fix == 2){
-            mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
-            
-        }else if(U->C.A->D->fix == 1){
-            mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
-            
-        }else if(U->C.A->D->fix == 0){
-            mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
-        }}
+            if(U->C.A->D->fix == 2){
+                mostDmg2 = mostDmg2/2 + (U->C.S_C.HIT/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                
+                if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                
+                
+            }else if(U->C.A->D->fix == 1){
+                mostDmg2 = mostDmg2/2 + ((U->C.S_C.ATK/2+U->C.S_C.HIT/2)/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                
+                if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                
+            }else if(U->C.A->D->fix == 0){
+                
+            }
+        }
+
         U2A = U->C.A;
         
         UNIT *oops = U;
@@ -4124,7 +4562,7 @@ w000p:
         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
         if(hi < 0) hi = 0;
         
-        hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+        hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
         if(battleDod1Flag) hit /= 2;
         hit = floor(hit);
         
@@ -4634,7 +5072,7 @@ w000p:
         for(int i = 0;i < mostNum;i++){
             U->C.A = U->C.A->next;
         }
-        if(U->C.A->extent == 0){
+        if(U->C.A->extent == 0 && mostNum > 0){
             
             U->C.A = aTop2;
             crCAL1 = 0;
@@ -4655,10 +5093,8 @@ w000p:
 
     if(U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
         
-    }else while(U->C.A){
-        U->C.A = U->C.A->next;
-        crCAL1++;
-        
+    }else{
+    
     }
       U->C.A = aTop2;
     }
@@ -4746,7 +5182,7 @@ w000p:
     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
     if(hi < 0) hi = 0;
     
-    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
     if(battleDod2Flag) hit = hit / 2;
     hit = floor(hit);
     
@@ -5220,7 +5656,7 @@ w000p:
         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
         if(hi < 0) hi = 0;
         
-        hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+        hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
         if(battleDod1Flag) hit /= 2;
         hit = floor(hit);
         
@@ -5300,16 +5736,16 @@ w000p:
 
 -(void)DisplayMessage{
     
-    
+    battleVeryBegunFlag = true;
     
     if(AVpreview){
     if(AVpreview.rate > 0){
-        [battleWindow setIgnoresMouseEvents:YES];
+        //[battleWindow setIgnoresMouseEvents:YES];
         [battleWindow makeKeyAndOrderFront:nil];
         //NSLog(@"%g", AVpreview.rate);
         return;
     }else{
-        [battleWindow setIgnoresMouseEvents:NO];
+        //[battleWindow setIgnoresMouseEvents:NO];
         //NSLog(@"%g", AVpreview.rate);
         AVpreview = NULL;
         if(avPlayerFlag1){
@@ -5360,25 +5796,48 @@ w000p:
     };
     static bool extentbool = false;
     static bool extentbool2 = false;
+    
+    
+    if(cpuAtkExtendFlag){
+        extentBattleFlag2 = true;
+    }
+    
     if(!extentbool && extentBattleFlag2){
         extentbool = true;
         extentMPcostFlag = false;
         DUNnum = 1;
     }
-    if(!extentBattleFlag2){
-        DUNnum = 1;
-    }
     
     switch (messageProcess) {
         case 0:
             if(bLoopFlag) break;
             
             [battleDialog setStringValue:@"攻撃開始!"];
+            if(!baseDistanceCompFlag)
+                break;
             bLoopFlag = true;
             messageProcess++;
+            DUNnum = 1;
             break;
         case 1:
             
+            if(bLoopFlag) break;
+            
+            
+            if(DUNnum > 1){
+                
+                
+                btHitExtendFlag1 = true;
+                
+                if(btHitExtendProc1 >= 3){
+                    btHitExtendProc1 = 0;
+                }
+            }
+            
+                BTunitAttackFlag1 = true;
+            if(battleDef1Flag || battleDod1Flag)
+                BTunitAttackFlag1 = false;
+            
             U = UTop;
             while (!(DUN[DUNnum] == U->number)) {
                 U = U->next;
@@ -5407,6 +5866,7 @@ w000p:
             
             U = UTop;
             if(bLoopFlag) break;
+            
             U = UTop;
             while (!(AUN[1] == U->number)) {
                 U = U->next;
@@ -5419,6 +5879,28 @@ w000p:
             effCun = U;
             attackCR = U->C.A;
             
+            if(btAttackMoveValue1 < 2 && BTunitAttackFlag1){
+                
+                message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
+                
+                [battleDialog setStringValue:message];
+                U->C.A = aTop;
+                U = UTop;
+                
+                return;
+            }
+            
+            if(btHitExtendFlag1 && btHitExtendProc1 < 2){
+                
+                
+                
+                
+                U->C.A = aTop;
+                U = UTop;
+                
+                return;
+            }
+            
             if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
             
             
@@ -5431,7 +5913,7 @@ w000p:
             [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
             [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
             
-            if(!avPlayerFlag1 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL && DUNnum == 1){
+            if(!battleDef1Flag && !battleDod1Flag && !battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL && DUNnum == 1){
                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
             
                 NSString *path = @"data/AttackList/ALdata";
@@ -5484,7 +5966,7 @@ w000p:
                 U->C.A = aTop;
                 U = UTop;
                 return;
-            }else if(!avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUNnum == 1){
+            }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUNnum == 1){
             
                 [battleDialog setStringValue:message];
                 animationFlag1 = true;
@@ -5509,29 +5991,29 @@ w000p:
             oopsIsRight = oopsIsRight/100;
             double val;
             if(!U2->C.aura && U->C.A->D){
-            if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                            - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                            - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                            - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                            - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-            if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                            - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
+            if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                            - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                            - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                            - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                            - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+            if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                            - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
             if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
             }else if(U->C.A->D){
                 val = 1/log(3+U2->C.S_C.MP/64);
-                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
+                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD*val;
             }
             double val2 = log(3+U2->C.S_C.MP/64);
@@ -5541,14 +6023,28 @@ w000p:
             
             if(U->C.A->D){
             if(U->C.A->D->fix == 2){
-                dmg = dmg/2 + U->C.S_C.HIT/2;
+                dmg = dmg/2 + (U->C.S_C.HIT/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+
+                if(U->C.A->D->type == 0) dmg -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) dmg -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) dmg -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) dmg -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) dmg -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                
             
             }else if(U->C.A->D->fix == 1){
-                dmg = dmg/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
+                dmg = dmg/2 + ((U->C.S_C.ATK/2+U->C.S_C.HIT/2)/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                
+                if(U->C.A->D->type == 0) dmg -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) dmg -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) dmg -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) dmg -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) dmg -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
                 
             }else if(U->C.A->D->fix == 0){
-                dmg = dmg/2 + U->C.S_C.ATK/2;
-            }}
+                
+            }
+            }
             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
             
             if(extentMPcostFlag && extentBattleFlag2){
@@ -5580,7 +6076,7 @@ w000p:
             double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
             if(hi < 0) hi = 0;
             
-            hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+            hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
             if(hit > 100) hit = 100;
             if(hit < 0) hit = 0;
             if(U2A->D->sort == 1){
@@ -5716,8 +6212,14 @@ w000p:
                 }
                 
             if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
-            if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
-                else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
+                if(!healFlag) {
+                    message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
+                btHitFlag1 = true;
+                }
+            else {
+                message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
+                btHitFlag1 = false;
+            }
             }else if(battleDef1Flag){
             
                 
@@ -5729,6 +6231,7 @@ w000p:
                 
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
             
+                btHitFlag1 = false;
             
             }else if(battleDod1Flag){
             
@@ -5739,10 +6242,11 @@ w000p:
                 
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
                 
-            
+                btHitFlag1 = false;
             }else{
             
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
+                btHitFlag1 = false;
             
             }
                 [battleDialog setStringValue:message];
@@ -5758,10 +6262,15 @@ w000p:
                  };
             messageProcess++;
             }else if(extentBattleFlag2){
+                if(btHitExtendProc1 == 2)
+                    btHitExtendProc1 = 3;
+                if(btHitExtendProc1 >= 2)
+                    btHitExtendFix1 = 1;
+                
+                btHitFlagCnt1 = 0;
                 DUNnum++;
                 messageProcess = 1;
-                if(DUN[DUNnum] == -1){
-                    DUNnum = 1;
+                if(DUN[DUNnum] <= 0){
                     messageProcess++;
                     messageProcess++;
                     extentBattleFlag2 = false;
@@ -5776,6 +6285,13 @@ w000p:
         
         case 2:
             
+            if(bLoopFlag) break;
+            BTunitAttackFlag1 = false;
+            BTunitAttackFlag2 = true;
+            if(battleDef2Flag || battleDod2Flag)
+                BTunitAttackFlag2 = false;
+            btHitFlag1 = false;
+            
             
             U = UTop;
             while (!(DUN[1] == U->number)) {
@@ -5844,29 +6360,29 @@ w000p:
             while(U->C.A){
                 mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
                 if(!U2->C.aura && U->C.A->D){
-                    if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                    if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                    if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                    if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                    if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
+                    if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
                 }else if(U->C.A->D){
                     val = 1/log(3+U2->C.S_C.MP/64);
-                    if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                    if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                    if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                    if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                    if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                         - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
+                    if(U->C.A->D->type == 0) mostDmg2 = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                    if(U->C.A->D->type == 1) mostDmg2 = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                    if(U->C.A->D->type == 2) mostDmg2 = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                    if(U->C.A->D->type == 3) mostDmg2 = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor)*asItIs*val;
+                    if(U->C.A->D->type == 4) mostDmg2 = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                         - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
                 }
                 double val2 = log(3+U2->C.S_C.MP/64);
@@ -5874,14 +6390,29 @@ w000p:
                     mostDmg2 = mostDmg2*val2;
                 }
                 if(U->C.A->D){
-                if(U->C.A->D->fix == 2){
-                    mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
-                    
-                }else if(U->C.A->D->fix == 1){
-                    mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
-                }else if(U->C.A->D->fix == 0){
-                    mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
-                }}
+                    if(U->C.A->D->fix == 2){
+                        mostDmg2 = mostDmg2/2 + (U->C.S_C.HIT/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                        
+                        if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        
+                        
+                    }else if(U->C.A->D->fix == 1){
+                        mostDmg2 = mostDmg2/2 + ((U->C.S_C.ATK/2+U->C.S_C.HIT/2)/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                        
+                        if(U->C.A->D->type == 0) mostDmg2 -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 1) mostDmg2 -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 2) mostDmg2 -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 3) mostDmg2 -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        if(U->C.A->D->type == 4) mostDmg2 -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                        
+                    }else if(U->C.A->D->fix == 0){
+                        
+                    }
+                }
                 
                 U2A = U->C.A;
                 UNIT *oops = U;
@@ -5928,14 +6459,27 @@ w000p:
             if(!U->C.A){
                 U->C.A = aTop2;
                 U = UTop;
+                BTunitAttackFlag2 = false;
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
                 goto SKIP1;
             }
             effCun = U;
             attackCR2 = U->C.A;
+            
+            if(btAttackMoveValue2 < 2 && BTunitAttackFlag2){
+                
+                message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
+                
+                [battleDialog setStringValue:message];
+                U->C.A = aTop2;
+                U = UTop;
+                
+                return;
+            }
+            
             if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
             
-            if(!avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
+            if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
                 
                 NSString *path = @"data/AttackList/ALdata";
@@ -5965,7 +6509,7 @@ w000p:
                 U->C.A = aTop2;
                 U = UTop;
                 return;
-            }else if(!avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
+            }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
                 
                 
                 animationFlag2 = true;
@@ -6015,29 +6559,29 @@ w000p:
 
             
             if(!U2->C.aura && U->C.A->D){
-                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
-                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs;
+                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
             }else if(U->C.A->D){
                 double val = val = 1/log(3+U2->C.S_C.MP/64);
-                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
-                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet)*oopsIsRight
-                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2)*asItIs*val;
+                if(U->C.A->D->type == 0) dmg = ((U->C.S_C.ATK*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 1) dmg = ((U->C.S_C.DEF*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 2) dmg = ((U->C.S_C.ACU*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 3) dmg = ((U->C.S_C.EVA*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
+                if(U->C.A->D->type == 4) dmg = ((U->C.S_C.CAP*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight
+                                                - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD*val;
             }
             val2 = log(3+U2->C.S_C.MP/64);
@@ -6045,15 +6589,29 @@ w000p:
                 dmg = dmg*val2;
             }
             if(U->C.A->D){
-            if(U->C.A->D->fix == 2){
-                dmg = dmg/2 + U->C.S_C.HIT/2;
-                
-            }else if(U->C.A->D->fix == 1){
-                dmg = dmg/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
-                
-            }else if(U->C.A->D->fix == 0){
-                dmg = dmg/2 + U->C.S_C.ATK/2;
-            }}
+                if(U->C.A->D->fix == 2){
+                    dmg = dmg/2 + (U->C.S_C.HIT/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                    
+                    if(U->C.A->D->type == 0) dmg -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 1) dmg -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 2) dmg -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 3) dmg -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 4) dmg -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    
+                    
+                }else if(U->C.A->D->fix == 1){
+                    dmg = dmg/2 + ((U->C.S_C.ATK/2+U->C.S_C.HIT/2)/2*U->C.S_C.HP/U->C.S_M.HP+urSupposedToGet*U->C.S_C.vigor/100)*oopsIsRight;
+                    
+                    if(U->C.A->D->type == 0) dmg -=  (U2->C.S_C.DEF/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 1) dmg -=  (U2->C.S_C.ATK/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 2) dmg -=  (U2->C.S_C.EVA/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 3) dmg -=  (U2->C.S_C.ACU/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    if(U->C.A->D->type == 4) dmg -=  (U2->C.S_C.CAP/2*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
+                    
+                }else if(U->C.A->D->fix == 0){
+                    
+                }
+            }
             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
             U->C.S_C.MP -= costMP;
             
@@ -6080,7 +6638,7 @@ w000p:
             hi = U->C.S_C.LUK - U2->C.S_C.LUK;
             if(hi < 0) hi = 0;
             
-            hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+            hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
             if(hit > 100) hit = 100;
             if(hit < 0) hit = 0;
             
@@ -6222,6 +6780,7 @@ w000p:
                     message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
             
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
+                btHitFlag2 = true;
            
             }else if(battleDef2Flag){
                 
@@ -6233,7 +6792,7 @@ w000p:
                 
                 
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
-                
+                btHitFlag2 = false;
                 
             }else if(battleDod2Flag){
                 
@@ -6244,10 +6803,11 @@ w000p:
                 
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
                 
-                
+                btHitFlag2 = false;
             }else{
             
                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
+                btHitFlag2 = false;
             }
         SKIP1:
             [battleDialog setStringValue:message];
@@ -6261,6 +6821,10 @@ w000p:
             break;
         case 3:
             if(bLoopFlag) break;
+            if(cpuAImodeflag && !cpuTurnEndFlag) {
+                wtRdy = false;
+            wtRdy2 = false;
+            }
             battleSetUp = false;
             battleSetFlag = false;
             battleFlag = false;
@@ -6275,14 +6839,35 @@ w000p:
             cpuOMFGmoveATKfixFlag = false;
             unitNoMoveFlag = false;
             UA = NULL;
-            wtRdy = false;
             Utarget = NULL;
+            CPUmostDmgChoice = false;
+            //おまんちん
             cpuIsAttackingFlag = false;
             for(int g = 0;g < chipWidth;g++){
                 for(int k = 0;k < chipHeight;k++){
                     g_attackRangeExtent[g][k] = 0;
                 }
             }
+            
+            btDistanceX1 = 0;
+            btDistanceX2 = 0;
+            BTunitAttackFlag1 = false;
+            BTunitAttackFlag2 = false;
+            BTunitAttackFlag1 = false;
+            btAttackMoveValue1 = 0;
+            btAttackMoveValue2 = 0;
+            btHitFlag1 = false;
+            btHitFlag2 = false;
+            btHitFlagCnt1 = 0;
+            btHitFlagCnt2 = 0;
+            btHitExtendFlag1 = false;
+            btHitExtendProc1 = 0;
+            btHitExtendMove1 = 0;
+            btHitExtendFlag2 = false;
+            btHitExtendProc2 = 0;
+            btHitExtendMove2 = 0;
+            baseDistanceCompFlag = false;
+            battleVeryBegunFlag = false;
             break;
             
         default:
@@ -6333,7 +6918,7 @@ w000p:
     
     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
     
-    if(!avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -6386,7 +6971,7 @@ w000p:
         
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
         
         [battleDialog setStringValue:message];
         animationFlag1 = true;
@@ -6682,7 +7267,7 @@ avAWESOME1A:{}
     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
     
     
-    if(!avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -6712,7 +7297,7 @@ avAWESOME1A:{}
         U->CL.A = aTop2;
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
         
         
         animationFlag2 = true;
@@ -6952,7 +7537,7 @@ SKIP1:
     
     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
     
-    if(!avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -7005,7 +7590,7 @@ SKIP1:
         
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
         
         [battleDialog setStringValue:message];
         animationFlag1 = true;
@@ -7040,7 +7625,7 @@ avAWESOME2A:{}
     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
     if(hi < 0) hi = 0;
     
-    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
     if(hit > 100) hit = 100;
     if(U2A->D->sort == 1){
         hit = 100;
@@ -7316,7 +7901,7 @@ avAWESOME2A:{}
     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
 
     
-    if(!avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -7346,7 +7931,7 @@ avAWESOME2A:{}
         U->C.A = aTop2;
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
         
         
         animationFlag2 = true;
@@ -7636,7 +8221,7 @@ SKIP1:
     [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
     [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
     
-    if(!avPlayerFlag1 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL && DUN[DUNnum] == 1){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL && DUN[DUNnum] == 1){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -7689,7 +8274,7 @@ SKIP1:
         U->C.A = aTop;
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUN[DUNnum] == 1){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUN[DUNnum] == 1){
         
         [battleDialog setStringValue:message];
         animationFlag1 = true;
@@ -7932,7 +8517,7 @@ avAWESOME3A:{}
     }else if(extentBattleFlag2){
         DUNnum++;
         messageProcess = 1;
-        if(DUN[DUNnum] == -1){
+        if(DUN[DUNnum] <= 0){
             DUNnum = 1;
             messageProcess++;
             messageProcess++;
@@ -8025,13 +8610,14 @@ avAWESOME3A:{}
     if(!U->CL.A){
         U->CL.A = aTop2;
         U = UTop;
+        
         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
         goto SKIP1;
     }
     
     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
     
-    if(!avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
+    if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
         
         NSString *path = @"data/AttackList/ALdata";
@@ -8061,7 +8647,7 @@ avAWESOME3A:{}
         U->CL.A = aTop2;
         U = UTop;
         return;
-    }else if(!avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
+    }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
         
         
         animationFlag2 = true;
@@ -8095,7 +8681,7 @@ avAWESOME3B:{}
     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
     if(hi < 0) hi = 0;
     
-    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
+    hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
     if(hit > 100) hit = 100;
     
     battleDod1Flag = false;
@@ -8446,14 +9032,18 @@ SKIP1:
 
 -(void)setCommandPanel{
     
-    if(buildSkillFlag) cIncludeCreateFlag = true;
-    else cIncludeCreateFlag = false;
-    if(summonSkillFlag) cIncludeSummonFlag = true;
-    else cIncludeSummonFlag = false;
+    menuPoint.x = [mapWindow frame].origin.x + possionLocalX*32;
+    menuPoint.y = [mapWindow frame].origin.y + possionLocalY*32 - 180;
     
-    menuPoint.x = [mapWindow frame].origin.x + 200;
-    menuPoint.y = [mapWindow frame].origin.y + 200;
     
+    if(buildSkillFlag) {
+        cIncludeCreateFlag = true;
+        menuPoint.y -= 20;
+    }else cIncludeCreateFlag = false;
+    if(summonSkillFlag) {
+        cIncludeSummonFlag = true;
+        menuPoint.y -= 20;
+    }else cIncludeSummonFlag = false;
     int plusBtnValue = 0;
     
     if(cIncludeCreateFlag && cIncludeSummonFlag){
@@ -11222,6 +11812,18 @@ SKIP1:
     }
     }
     
+    if(P[0].resource < 0) P[0].resource = 0;
+    if(P[1].resource < 0) P[1].resource = 0;
+    if(P[2].resource < 0) P[2].resource = 0;
+    
+    if(P[0].food < 0) P[0].food = 0;
+    if(P[1].food < 0) P[1].food = 0;
+    if(P[2].food < 0) P[2].food = 0;
+    
+    if(P[0].money < 0) P[0].money = 0;
+    if(P[1].money < 0) P[1].money = 0;
+    if(P[2].money < 0) P[2].money = 0;
+    
     MS0->succeessfulFlag = true;
     MS0->endFlag = true;
     return MS0;
@@ -11567,6 +12169,9 @@ SKIP1:
             U->joinArmyFromNext = true;
             U->persuasion = true;
         }
+        if(MF[MFselectedRow+1].MS.playerSet1 == 2)
+            U->CPU = true;
+    
     }
     if(unitTeam[x][y] == 2 || unitTeam[x][y] == 3){
         U->team = 2;
@@ -11574,6 +12179,9 @@ SKIP1:
             U->joinArmyFromNext = true;
             U->persuasion = true;
         }
+        if(MF[MFselectedRow+1].MS.playerSet2 == 2)
+            U->CPU = true;
+        
     }
     if(unitTeam[x][y] == 4 || unitTeam[x][y] == 5){
         U->team = 1;
@@ -11581,6 +12189,7 @@ SKIP1:
             U->joinArmyFromNext = true;
             U->persuasion = true;
         }
+        U->CPU = true;
     }
     if(unitTeam[x][y] == -1){
         U->team = -1;
@@ -11588,6 +12197,7 @@ SKIP1:
             U->joinArmyFromNext = false;
             U->persuasion = true;
         }
+        U->CPU = true;
     }
     unitNum[x][y] = u.chipNumb;
     [self SetUnitStatus:unitNum[x][y]];
@@ -11845,8 +12455,16 @@ SKIP1:
     return self;
 }
 
+-(void)scrollWheel:(NSEvent *)theEvent{
+
+    theEvent = NULL;
+
+}
+
 -(void)EventLoopBV:(NSTimer*)timer{
     
+    [battleView setNeedsDisplay:YES];
+    
     static int aniFrame = 0;
     
     if(animationFlag3){
@@ -11908,6 +12526,8 @@ SKIP1:
     
     
     [self setNeedsDisplay:YES];
+    
+    
 }
 
 -(void)DrawImage:(NSImage*)image x:(float)x y:(float)y a:(float)a{