OSDN Git Service

CPU射程操作バグ改善
[awarsiii/AwarsIV.git] / Awars III / FieldScene.m
1 //
2 //  FieldScene.m
3 //  Awars III
4 //
5 //  Created by Killery on 2013/02/22.
6 //  Copyright (c) 2013年 Killery. All rights reserved.
7 //
8
9 #import "FieldScene.h"
10
11 @implementation FieldScene
12
13 -(void)awakeFromNib{
14
15     [CAttackListTV setTarget:self];
16     [CAttackListTV setDoubleAction:@selector(doubleClickCAL:)];
17     [CAttackListTV setTarget:self];
18     [CAttackListTV setAction:@selector(clickCAL:)];
19     
20     [CResearchListTV setTarget:self];
21     [CResearchListTV setDoubleAction:@selector(doubleClickCRL:)];
22     [CResearchListTV setTarget:self];
23     [CResearchListTV setAction:@selector(clickCRL:)];
24     
25     [BCreateListTV setTarget:self];
26     [BCreateListTV setDoubleAction:@selector(doubleClickBCL:)];
27     [BCreateListTV setTarget:self];
28     [BCreateListTV setAction:@selector(clickBCL:)];
29     
30     [CSummonListTV setTarget:self];
31     [CSummonListTV setDoubleAction:@selector(doubleClickCSL:)];
32     [CSummonListTV setTarget:self];
33     [CSummonListTV setAction:@selector(clickCSL:)];
34     
35     
36     
37     CAttackListMA = [NSMutableArray new];
38     CResearchListMA = [NSMutableArray new];
39     BCreateListMA = [NSMutableArray new];
40     CSummonListMA = [NSMutableArray new];
41     
42     
43     [IVimage setHidden:YES];
44     [TFname setHidden:YES];
45     [TFmessage setHidden:YES];
46     [BXname setHidden:YES];
47     [BXmessage setHidden:YES];
48     [IVimage setEnabled:NO];
49     [TFname setEnabled:NO];
50     [TFmessage setEnabled:NO];
51     
52 }
53
54 -(id)init{
55
56     if(self){
57         time  = [NSTimer
58                  scheduledTimerWithTimeInterval:1.0/30
59                  target:self
60                  selector:@selector(EventLoopFS:)
61                  userInfo:nil
62                  repeats:YES
63                  ];
64         
65         fieldScene = self;
66         
67         P[0].name = @"青軍";
68         P[0].type = 0;
69         P[0].resource = 500;
70         P[0].food = 500;
71         P[0].money = 500;
72         
73         P[1].name = @"赤軍";
74         P[1].type = 0;
75         P[1].resource = 500;
76         P[1].food = 500;
77         P[1].money = 500;
78         
79         P[2].name = @"黄軍";
80         P[2].type = 0;
81         P[2].resource = 500;
82         P[2].food = 500;
83         P[2].money = 500;
84         
85         eventTime = 0;
86         
87         [self HensuuLoad];
88     }
89     
90
91     return self;
92 }
93
94 -(void)doubleClickBCL:(id)sender{
95     
96     enum{
97         MC_ANTEI,
98         MC_FUANTEI,
99         MC_CHIKURIN,
100         MC_MIZUBA,
101         MC_ASASE,
102         MC_NAIBU
103     };
104     
105     enum{
106         BC_ANTEI,
107         BC_CHIKURIN,
108         BC_ASASE,
109         BC_SONOTA
110     };
111     
112     bclRdy = false;
113     
114     U = UTop;
115     for(int i = 0;i < slctedUnitNum;i++){
116         U = U->next;
117     }
118     
119     if (MC[chipNum[possionX][possionY]].type == MC_ANTEI) {
120         
121         if(BC[U->C.S->list[crBCL]-1].type == BC_ANTEI){
122             bclRdy = true;
123         }
124         
125     }
126  
127     if (MC[chipNum[possionX][possionY]].type == MC_CHIKURIN) {
128         
129         if(BC[U->C.S->list[crBCL]-1].type == BC_CHIKURIN){
130             bclRdy = true;
131         }
132         
133     }
134     
135     if (MC[chipNum[possionX][possionY]].type == MC_ASASE) {
136         
137         if(BC[U->C.S->list[crBCL]-1].type == BC_ASASE){
138             bclRdy = true;
139         }
140         
141     }
142
143     if(BC[U->C.S->list[crBCL]].type == BC_SONOTA){
144         bclRdy = true;
145     }
146     
147     if(bclRdy){
148         bclRdy = false;
149         if(buildNum[possionX][possionY] >= 0){
150             U = UTop;
151             return;
152         }
153         
154         if(U->team == 0)
155         if(P[0].resource >= BC[U->C.S->list[crBCL]-1].Csupply){
156             if(P[0].food >= BC[U->C.S->list[crBCL]-1].Cfood){
157                 if (P[0].money >= BC[U->C.S->list[crBCL]-1].Cmoney) {
158                     P[0].resource -= BC[U->C.S->list[crBCL]-1].Csupply;
159                     P[0].food -= BC[U->C.S->list[crBCL]-1].Cfood;
160                     P[0].money -= BC[U->C.S->list[crBCL]-1].Cmoney;
161                     
162                     buildNum[possionX][possionY] = U->C.S->list[crBCL]-1;
163                     
164                     buildTeam[possionX][possionY] = 0;
165                    
166                     
167                     [self addBuildStatus];
168                     
169                     bclRdy = true;
170                 }
171             }
172         }
173         
174         if(U->team == 2)
175         if(P[1].resource >= BC[U->C.S->list[crBCL]-1].Csupply){
176             if(P[1].food >= BC[U->C.S->list[crBCL]-1].Cfood){
177                 if (P[1].money >= BC[U->C.S->list[crBCL]-1].Cmoney) {
178                     P[1].resource -= BC[U->C.S->list[crBCL]-1].Csupply;
179                     P[1].food -= BC[U->C.S->list[crBCL]-1].Cfood;
180                     P[1].money -= BC[U->C.S->list[crBCL]-1].Cmoney;
181                     
182                     buildNum[possionX][possionY] = U->C.S->list[crBCL]-1;
183                     
184                     buildTeam[possionX][possionY] = 2;
185                     
186                     [self addBuildStatus];
187                     
188                     bclRdy = true;
189                 }
190             }
191         }
192         [createPanel close];
193     }
194     
195     U = UTop;
196 }
197
198 -(void)clickBCL:(id)sender{
199     crBCL = (int)[BCreateListTV clickedRow];
200     
201     
202     
203 }
204
205
206 -(void)doubleClickCSL:(id)sender{
207    
208     U = UTop;
209     for(int i = 0;i < slctedUnitNum;i++){
210         U = U->next;
211     }
212     CSLU = U;
213     
214     SKILL *sTop = U->C.S;
215     while (U->C.S) {
216         if(U->C.S->type == 2) break;
217         U->C.S = U->C.S->next;
218     }
219     if(!U->C.S){
220         U->C.S = sTop;
221         U = UTop;
222         return;
223     }
224     
225     if(U->team == 0)
226         if(U->C.S->cost[crCSL] <= U->C.S_C.MP){
227             //U->C.S_C.MP -= U->C.S->cost[crCSL];
228             CSLUC = UC[U->C.S->list[crCSL]-1];
229             
230             U->C.S = sTop;
231             cslRdy = true;
232             [summonPanel close];
233             //unitColorInitFlag = true;
234         }
235     if(U->team == 2)
236         if(U->C.S->cost[crCSL] <= U->C.S_C.MP){
237             
238             //U->C.S_C.MP -= U->C.S->cost[crCSL];
239             CSLUC = UC[U->C.S->list[crCSL]-1];
240             
241             U->C.S = sTop;
242             cslRdy = true;
243             [summonPanel close];
244             //unitColorInitFlag = true;
245         }
246     
247     U = UTop;
248     
249 }
250
251 -(void)clickCSL:(id)sender{
252     crCSL = (int)[CSummonListTV clickedRow];
253     
254     
255 }
256
257 -(void)doubleClickCAL:(id)sender{
258     
259     if([CAttackListTV clickedRow] < 0) return;
260     
261     if(crCAL < 0)
262         crCAL = 0;
263     
264     int postCAL1 = crCAL1;
265     int postCAL2 = crCAL2;
266     
267     if(!battleSet1Flag && !battleSet2Flag){
268     U = UTop;
269     while (!(AUN[1] == U->number)) {
270         U = U->next;
271     }
272     
273         
274         
275         if(U->chipNumberL < 0){
276         
277             ATTACK *aTop = U->C.A;
278             
279             crCAL = (int)[CAttackListTV clickedRow];
280             crCAL1 = (int)[CAttackListTV clickedRow];
281             for(int i = 0;i < crCAL;i++){
282                 U->C.A = U->C.A->next;
283             }
284     
285             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
286             costVIG = U->C.A->vigor;
287     
288             if(costMP <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
289                 if(U->C.A->extent > 0){
290                     atkExtentFlag = true;
291                 }else{
292                     atkExtentFlag = false;
293                 }
294                 dcRdy = true;
295                 [atkPanel close];
296             }
297             U->C.A = aTop;
298             U = UTop;
299             crCAL1 = crCAL;
300             return;
301         }else{
302             ATTACK *aTop = U->CL.A;
303             crCAL = (int)[CAttackListTV clickedRow];
304             crCAL1 = (int)[CAttackListTV clickedRow];
305             for(int i = 0;i < crCAL;i++){
306                 U->CL.A = U->CL.A->next;
307             }
308             
309             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
310             costVIG = U->CL.A->vigor;
311             
312             if(costMP <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
313                 dcRdy = true;
314                 if(U->CL.A->extent > 0){
315                     atkExtentFlag = true;
316                 }else{
317                     atkExtentFlag = false;
318                 }
319                 [atkPanel close];
320             }
321             U->CL.A = aTop;
322             U = UTop;
323             crCAL1 = crCAL;
324             return;
325         }
326     }
327     
328     if(battleSet1Flag && !battleSet2PushedFlag){
329         
330     
331         U = UTop;
332         while (!(AUN[1] == U->number)) {
333             U = U->next;
334         }
335        
336         if(U->chipNumberL < 0){
337             ATTACK *aTop = U->C.A;
338             crCAL1 = (int)[CAttackListTV clickedRow];
339             for(int i = 0;i < crCAL1;i++){
340                 U->C.A = U->C.A->next;
341             }
342         
343             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
344             costVIG = U->C.A->vigor;
345             
346             
347             if(costMP <= U->C.S_C.MP && U->atkRange >= U->C.A->rangeA
348                && U->atkRange <= U->C.A->rangeB && costVIG >= U->C.S_C.vigor){
349                 //dcRdy = true;
350                 [atkPanel close];
351                 U->C.A = aTop;
352                 U = UTop;
353                 return;
354             }
355             U->C.A = aTop;
356             crCAL1 = crCAL;
357             U = UTop;
358             
359         }else{
360             ATTACK *aTop = U->CL.A;
361             crCAL1 = (int)[CAttackListTV clickedRow];
362             for(int i = 0;i < crCAL1;i++){
363                 U->CL.A = U->CL.A->next;
364             }
365             
366             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
367             costVIG = U->C.A->vigor;
368             
369             if(costMP <= U->CL.S_C.EN && U->atkRange >= U->CL.A->rangeA
370                && U->atkRange <= U->CL.A->rangeB && costVIG >= U->C.S_C.vigor){
371                 //dcRdy = true;
372                 [atkPanel close];
373                 U->CL.A = aTop;
374                 U = UTop;
375                 return;
376             }
377             U->CL.A = aTop;
378             crCAL1 = crCAL;
379             U = UTop;
380         }
381     
382     }
383     
384     if(battleSet2Flag && battleSet2PushedFlag){
385         U = UTop;
386         while (!(AUN[1] == U->number)) {
387             U = U->next;
388         }
389         
390         if(U->chipNumberL < 0){
391             U = UTop;
392             U = UTop;
393             while (!(AUN[1] == U->number)) {
394                 U = U->next;
395             }
396         
397             int omgRange = U->atkRange;
398         
399             U = UTop;
400             while (!(DUN[1] == U->number)) {
401                 U = U->next;
402             }
403         
404             U->atkRange = omgRange;
405         
406             ATTACK *aTop = U->C.A;
407             crCAL2 = (int)[CAttackListTV clickedRow];
408             for(int i = 0;i < crCAL2;i++){
409                 U->C.A = U->C.A->next;
410             }
411         
412             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
413             costVIG = U->C.A->vigor;
414
415         
416             if(costMP <= U->C.S_C.MP && U->atkRange >= U->C.A->rangeA
417                 && U->atkRange <= U->C.A->rangeB && U->C.S_C.vigor){
418                 //dcRdy = true;
419                 [atkPanel close];
420                 U->C.A = aTop;
421                 U = UTop;
422                 return;
423             }
424             U->C.A = aTop;
425             crCAL1 = crCAL;
426             U = UTop;
427         }else{
428             U = UTop;
429             U = UTop;
430             while (!(AUN[1] == U->number)) {
431                 U = U->next;
432             }
433             
434             int omgRange = U->atkRange;
435             
436             U = UTop;
437             while (!(DUN[1] == U->number)) {
438                 U = U->next;
439             }
440             
441             U->atkRange = omgRange;
442             
443             ATTACK *aTop = U->CL.A;
444             crCAL2 = (int)[CAttackListTV clickedRow];
445             for(int i = 0;i < crCAL2;i++){
446                 U->CL.A = U->CL.A->next;
447             }
448             
449             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
450             costVIG = U->C.A->vigor;
451
452             if(costMP <= U->CL.S_C.EN && U->atkRange >= U->CL.A->rangeA
453                && U->atkRange <= U->CL.A->rangeB && U->C.S_C.vigor){
454                 //dcRdy = true;
455                 [atkPanel close];
456                 U->CL.A = aTop;
457                 U = UTop;
458                 return;
459             }
460             U->CL.A = aTop;
461             crCAL1 = crCAL;
462             U = UTop;
463         
464         }
465         
466         U = UTop;
467         
468     }
469     
470
471     crCAL1 = postCAL1;
472     crCAL2 = postCAL2;
473 }
474
475
476 -(void)clickCAL:(id)sender{
477
478     crCAL = (int)[CAttackListTV clickedRow];
479     
480     if(!battleSetFlag){crCAL = crCAL1;
481         crCAL1 = (int)[CAttackListTV clickedRow];
482         crCAL = crCAL1;
483         U = UTop;
484         while (!(AUN[1] == U->number)) {
485             U = U->next;
486         }
487     }else if(battleSetFlag){crCAL = crCAL2;
488         crCAL2 = (int)[CAttackListTV clickedRow];
489         crCAL = crCAL2;
490         U = UTop;
491         while (!(DUN[1] == U->number)) {
492             U = U->next;
493         }
494         
495     }
496     
497     if(U->chipNumberL >= 0) {
498         U = UTop;
499         [self initCAttackSelect2];
500     }
501     else if(U->chipNumber >= 0) {
502         U = UTop;
503         [self initCAttackSelect];
504     }
505     U = UTop;
506 }
507
508 -(void)initCAttackSelect{
509     
510     U = UTop;
511     
512     while (!(AUN[1] == U->number)) {
513         U = U->next;
514     }
515     if(!battleSetFlag){crCAL = crCAL1;
516         //crCAL1 = (int)[CAttackListTV clickedRow];
517         crCAL = crCAL1;
518         U = UTop;
519         while (!(AUN[1] == U->number)) {
520             U = U->next;
521         }
522     }else if(battleSetFlag){crCAL = crCAL2;
523         //crCAL2 = (int)[CAttackListTV clickedRow];
524         crCAL = crCAL2;
525         U = UTop;
526         while (!(DUN[1] == U->number)) {
527             U = U->next;
528         }
529         
530     }
531     
532     //U = Uselected;
533     
534     [CAttackListAC setSelectionIndex:crCAL];
535     crCAL = (int)[CAttackListTV clickedRow];
536     ATTACK *aTop = U->C.A;
537     for(int i = 0;i < crCAL;i++){
538         U->C.A = U->C.A->next;
539     }
540     
541     if(!U->C.A) {
542         [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
543         [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->C.S_C.MP]];
544         [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
545         [region setStringValue:[NSString stringWithFormat:@"陸-- 宙-- 海-- 空--"]];
546         [crytical setStringValue:@""];
547         [atkProperty setStringValue:@""];
548         U->C.A = aTop;
549         return;
550     }
551     
552     if(U->C.A->bullet > 0) [bullet setStringValue:[NSString stringWithFormat:@"%d/%d", U->C.A->bulletC, U->C.A->bullet]];
553     else [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
554     if(U->C.A->MP > 0) [costP setStringValue:[NSString stringWithFormat:@"%g(%g)", U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100+0.5), U->C.S_C.MP]];
555     else [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->C.S_C.MP]];
556     if(U->C.A->vigor > 0) [costV setStringValue:[NSString stringWithFormat:@"%d(%d)", U->C.A->vigor, U->C.S_C.vigor]];
557     else [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
558     
559     NSString *Riku, *Chu, *Umi, *Sora;
560     
561     switch (U->C.A->riku) {
562         case 0:
563             Riku = [@"A" retain];
564             break;
565         case 1:
566             Riku = [@"B"retain];
567             break;
568         case 2:
569             Riku = [@"C"retain];
570             break;
571         case 3:
572             Riku = [@"D"retain];
573             break;
574         case 4:
575             Riku = [@"E"retain];
576             break;
577         case 5:
578             Riku = [@"S"retain];
579             break;
580         case 6:
581             Riku = [@"SS"retain];
582             break;
583     }
584     switch (U->C.A->chu) {
585         case 0:
586             Chu = [@"A" retain];
587             break;
588         case 1:
589             Chu = [@"B" retain];
590             break;
591         case 2:
592             Chu = [@"C" retain];
593             break;
594         case 3:
595             Chu = [@"D" retain];
596             break;
597         case 4:
598             Chu = [@"E" retain];
599             break;
600         case 5:
601             Chu = [@"S" retain];
602             break;
603         case 6:
604             Chu = [@"SS" retain];
605             break;
606     }
607     switch (U->C.A->umi) {
608         case 0:
609             Umi = [@"A" retain];
610             break;
611         case 1:
612             Umi = [@"B" retain];
613             break;
614         case 2:
615             Umi = [@"C" retain];
616             break;
617         case 3:
618             Umi = [@"D" retain];
619             break;
620         case 4:
621             Umi = [@"E" retain];
622             break;
623         case 5:
624             Umi = [@"S" retain];
625             break;
626         case 6:
627             Umi = [@"SS" retain];
628             break;
629     }
630     switch (U->C.A->sora) {
631         case 0:
632             Sora = [@"A" retain];
633             break;
634         case 1:
635             Sora = [@"B" retain];
636             break;
637         case 2:
638             Sora = [@"C" retain];
639             break;
640         case 3:
641             Sora = [@"D" retain];
642             break;
643         case 4:
644             Sora = [@"E" retain];
645             break;
646         case 5:
647             Sora = [@"S" retain];
648             break;
649         case 6:
650             Sora = [@"SS" retain];
651             break;
652     }
653     
654     if(!U->C.A->name){
655         Riku = @"--";
656         Chu = @"--";
657         Umi = @"--";
658         Sora = @"--";
659     }
660     
661     [region setStringValue:[NSString stringWithFormat:@"陸%@ 宙%@ 海%@ 空%@",  Riku, Chu, Umi, Sora]];
662     [crytical setStringValue:@""];
663     [atkProperty setStringValue:@""];
664     
665     U->C.A = aTop;
666     U = UTop;
667 }
668
669 -(void)initCAttackSelect2{
670     
671     U = UTop;
672     
673     while (!(AUN[1] == U->number)) {
674         U = U->next;
675     }
676     if(battleSet1Flag){
677         //crCAL1 = (int)[CAttackListTV clickedRow];
678         U = UTop;
679         while (!(AUN[1] == U->number)) {
680             U = U->next;
681         }
682     }
683     if(battleSet2Flag){
684         //crCAL2 = (int)[CAttackListTV clickedRow];
685         U = UTop;
686         while (!(DUN[1] == U->number)) {
687             U = U->next;
688         }
689         
690     }
691     
692     ATTACK *aTop = U->CL.A;
693     for(int i = 0;i < crCAL;i++){
694         U->CL.A = U->CL.A->next;
695     }
696     
697     if(!U->CL.A) {
698         
699         U = UTop;
700         return;
701     }
702     if(U->CL.A->bullet > 0) [bullet setStringValue:[NSString stringWithFormat:@"%d/%d", U->CL.A->bulletC, U->CL.A->bullet]];
703     else [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
704     if(U->CL.A->EN > 0) [costP setStringValue:[NSString stringWithFormat:@"%g(%g)", U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100+0.5), U->CL.S_C.EN]];
705     else [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->CL.S_C.EN]];
706     if(U->CL.A->vigor > 0) [costV setStringValue:[NSString stringWithFormat:@"%d(%d)", U->CL.A->vigor, U->C.S_C.vigor]];
707     else [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
708     
709     NSString *Riku, *Chu, *Umi, *Sora;
710     
711     switch (U->CL.A->riku) {
712         case 0:
713             Riku = @"A";
714             break;
715         case 1:
716             Riku = @"B";
717             break;
718         case 2:
719             Riku = @"C";
720             break;
721         case 3:
722             Riku = @"D";
723             break;
724         case 4:
725             Riku = @"E";
726             break;
727         case 5:
728             Riku = @"S";
729             break;
730         case 6:
731             Riku = @"SS";
732             break;
733     }
734     switch (U->CL.A->chu) {
735         case 0:
736             Chu = @"A";
737             break;
738         case 1:
739             Chu = @"B";
740             break;
741         case 2:
742             Chu = @"C";
743             break;
744         case 3:
745             Chu = @"D";
746             break;
747         case 4:
748             Chu = @"E";
749             break;
750         case 5:
751             Chu = @"S";
752             break;
753         case 6:
754             Chu = @"SS";
755             break;
756     }
757     switch (U->CL.A->umi) {
758         case 0:
759             Umi = @"A";
760             break;
761         case 1:
762             Umi = @"B";
763             break;
764         case 2:
765             Umi = @"C";
766             break;
767         case 3:
768             Umi = @"D";
769             break;
770         case 4:
771             Umi = @"E";
772             break;
773         case 5:
774             Umi = @"S";
775             break;
776         case 6:
777             Umi = @"SS";
778             break;
779     }
780     switch (U->CL.A->sora) {
781         case 0:
782             Sora = @"A";
783             break;
784         case 1:
785             Sora = @"B";
786             break;
787         case 2:
788             Sora = @"C";
789             break;
790         case 3:
791             Sora = @"D";
792             break;
793         case 4:
794             Sora = @"E";
795             break;
796         case 5:
797             Sora = @"S";
798             break;
799         case 6:
800             Sora = @"SS";
801             break;
802     }
803     
804     if(!U->CL.A->name){
805         Riku = @"--";
806         Chu = @"--";
807         Umi = @"--";
808         Sora = @"--";
809     }
810     
811     [region setStringValue:[NSString stringWithFormat:@"陸%@ 宙%@ 海%@ 空%@",  Riku, Chu, Umi, Sora]];
812     [crytical setStringValue:@""];
813     [atkProperty setStringValue:@""];
814     
815     U->CL.A = aTop;
816     U = UTop;
817 }
818
819
820 -(void)doubleClickCRL:(id)sender{
821     
822     if(crCRL == -1) return;
823     
824     if(unitBreak->team == 0)
825     if(P[0].resource >= BRU->S_M.cSupply && P[0].food >= BRU->S_M.cFood && P[0].money >= BRU->S_M.cMoney){
826         
827         P[0].resource -= BRU->S_M.cSupply;
828         P[0].food -= BRU->S_M.cFood;
829         P[0].money -= BRU->S_M.cMoney;
830         
831         unitNum[possionX][possionY] = BRUindex;
832         if(researchTeam == 0) unitTeam[possionX][possionY] = 0;
833         if(researchTeam == 2) unitTeam[possionX][possionY] = 2;
834
835         [self addUnitStatus];
836         
837         unitColorInitFlag = true;
838         
839         [researchPanel close];
840     }
841     
842     if(unitBreak->team == 2)
843         if(P[1].resource >= BRU->S_M.cSupply && P[1].food >= BRU->S_M.cFood && P[1].money >= BRU->S_M.cMoney){
844             
845             P[1].resource -= BRU->S_M.cSupply;
846             P[1].food -= BRU->S_M.cFood;
847             P[1].money -= BRU->S_M.cMoney;
848             
849             unitNum[possionX][possionY] = BRUindex;
850             if(researchTeam == 0) unitTeam[possionX][possionY] = 0;
851             if(researchTeam == 2) unitTeam[possionX][possionY] = 2;
852             
853             [self addUnitStatus];
854             
855             unitColorInitFlag = true;
856             
857             [researchPanel close];
858         }
859
860 }
861
862 -(void)clickCRL:(id)sender{
863     
864     crCRL = (int)[CResearchListTV clickedRow];
865     if(crCRL < 0)
866         return;
867     BUILDCHIP *B;
868     
869     B = &BC[buildNum[possionX][possionY]];
870     
871     
872     RESEARCH *Rtop;
873     UNITCHIP *BU;
874     
875     Rtop = B->R;
876     if(B->R){
877     BU = B->R->U;
878     BRU = BU;
879     for(int i = 0;i <= crCRL;i++){
880         BU = B->R->U;
881         BRU = BU;
882         [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
883         [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
884         [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
885         [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
886         [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
887         [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
888         [researchIMG setImage:BU->imgb];
889         [researchIMG setImageScaling:NSScaleToFit];
890         
891         B->R = B->R->next;
892     }
893     B->R = Rtop;
894         BRUindex = 0;
895     for (int i = 0; BRU->nameID != UC[i].nameID && i < UCN;i++) {
896         BRUindex++;
897         
898     }
899         return;
900     }
901     
902     if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
903         
904         int k = 0;
905         B->R = Rtop;
906         while (B->R) {
907             B->R = B->R->next;
908             k++;
909         }
910         
911         for(int i = k;i <= crCRL;i++){
912             
913             [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ATK]];
914             [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.DEF]];
915             [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.CAP]];
916             [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ACU]];
917             [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.EVA]];
918             [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp1 + i - k)-1].S_M.MOV]];
919             [researchIMG setImage:UC[*(GuildDisp1 + i - k)-1].imgb];
920             [researchIMG setImageScaling:NSScaleToFit];
921             
922         }B->R = Rtop;
923         
924         BRUindex = 0;
925         for (int i = 0; UC[*(GuildDisp1 + crCRL - k)-1].nameID != UC[i].nameID && i < UCN;i++) {
926             BRUindex++;
927         }BRU = &UC[BRUindex];
928         
929     
930         
931     }else if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
932         
933         int k = 0;
934         B->R = Rtop;
935         while (B->R) {
936             B->R = B->R->next;
937             k++;
938         }
939         
940         for(int i = k;i <= crCRL;i++){
941             
942             [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ATK]];
943             [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.DEF]];
944             [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.CAP]];
945             [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ACU]];
946             [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.EVA]];
947             [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp2 + i - k)-1].S_M.MOV]];
948             [researchIMG setImage:UC[*(GuildDisp2 + i - k)-1].imgb];
949             [researchIMG setImageScaling:NSScaleToFit];
950             
951         }B->R = Rtop;
952         
953   
954         BRUindex = 0;
955         for (int i = 0; UC[*(GuildDisp2 + crCRL - k)-1].nameID != UC[i].nameID && i < UCN;i++) {
956             BRUindex++;
957         }BRU = &UC[BRUindex];
958     }
959
960     
961     
962     
963     
964    }
965
966 -(void)SetStatusFunc{
967     double STRfix;
968     double VITfix;
969     double AGIfix;
970     double DEXfix;
971     double MENfix;
972     double INTfix;
973     double LUKfix;
974     
975     double S, V, A, D, M, I;
976     
977     
978     
979     U = UTop;
980     
981     while(U){
982     STRfix = (
983               U->C.eHandL.STR +
984               U->C.eHandR.STR +
985               U->C.eHead.STR +
986               U->C.eBody.STR +
987               U->C.eFoot.STR +
988               U->C.eArm.STR) +
989     U->C.S_M.STR *(
990                          U->C.eHandL.pSTR +
991                          U->C.eHandR.pSTR +
992                          U->C.eHead.pSTR +
993                          U->C.eBody.pSTR +
994                          U->C.eFoot.pSTR +
995                          U->C.eArm.pSTR +
996                          0)/100
997     ;
998     
999     VITfix = (
1000               U->C.eHandL.VIT +
1001               U->C.eHandR.VIT +
1002               U->C.eHead.VIT +
1003               U->C.eBody.VIT +
1004               U->C.eFoot.VIT +
1005               U->C.eArm.VIT) +
1006     U->C.S_M.VIT *(
1007                          U->C.eHandL.pVIT +
1008                          U->C.eHandR.pVIT +
1009                          U->C.eHead.pVIT +
1010                          U->C.eBody.pVIT +
1011                          U->C.eFoot.pVIT +
1012                          U->C.eArm.pVIT +
1013                          0)/100
1014     ;
1015     AGIfix = (
1016               U->C.eHandL.AGI +
1017               U->C.eHandR.AGI +
1018               U->C.eHead.AGI +
1019               U->C.eBody.AGI +
1020               U->C.eFoot.AGI +
1021               U->C.eArm.AGI) +
1022     U->C.S_M.AGI *(
1023                          U->C.eHandL.pAGI +
1024                          U->C.eHandR.pAGI +
1025                          U->C.eHead.pAGI +
1026                          U->C.eBody.pAGI +
1027                          U->C.eFoot.pAGI +
1028                          U->C.eArm.pAGI +
1029                          0)/100
1030     ;
1031     DEXfix = (
1032               U->C.eHandL.DEX +
1033               U->C.eHandR.DEX +
1034               U->C.eHead.DEX +
1035               U->C.eBody.DEX +
1036               U->C.eFoot.DEX +
1037               U->C.eArm.DEX) +
1038     U->C.S_M.DEX *(
1039                          U->C.eHandL.pDEX +
1040                          U->C.eHandR.pDEX +
1041                          U->C.eHead.pDEX +
1042                          U->C.eBody.pDEX +
1043                          U->C.eFoot.pDEX +
1044                          U->C.eArm.pDEX +
1045                          0)/100
1046     ;
1047     MENfix = (
1048               U->C.eHandL.MEN +
1049               U->C.eHandR.MEN +
1050               U->C.eHead.MEN +
1051               U->C.eBody.MEN +
1052               U->C.eFoot.MEN +
1053               U->C.eArm.MEN) +
1054     U->C.S_M.MEN *(
1055                          U->C.eHandL.pMEN +
1056                          U->C.eHandR.pMEN +
1057                          U->C.eHead.pMEN +
1058                          U->C.eBody.pMEN +
1059                          U->C.eFoot.pMEN +
1060                          U->C.eArm.pMEN +
1061                          0)/100
1062     ;
1063     INTfix = (
1064               U->C.eHandL.INT +
1065               U->C.eHandR.INT +
1066               U->C.eHead.INT +
1067               U->C.eBody.INT +
1068               U->C.eFoot.INT +
1069               U->C.eArm.INT) +
1070     U->C.S_M.INT *(
1071                          U->C.eHandL.pINT +
1072                          U->C.eHandR.pINT +
1073                          U->C.eHead.pINT +
1074                          U->C.eBody.pINT +
1075                          U->C.eFoot.pINT +
1076                          U->C.eArm.pINT +
1077                          0)/100
1078     ;
1079     LUKfix = (
1080               U->C.eHandL.LUK +
1081               U->C.eHandR.LUK +
1082               U->C.eHead.LUK +
1083               U->C.eBody.LUK +
1084               U->C.eFoot.LUK +
1085               U->C.eArm.LUK) +
1086     U->C.S_M.LUK *(
1087                          U->C.eHandL.pLUK +
1088                          U->C.eHandR.pLUK +
1089                          U->C.eHead.pLUK +
1090                          U->C.eBody.pLUK +
1091                          U->C.eFoot.pLUK +
1092                          U->C.eArm.pLUK +
1093                          0)/100
1094     ;
1095     
1096     S = U->C.S_C.STR + STRfix;
1097     V = U->C.S_C.VIT + VITfix;
1098     A = U->C.S_C.AGI + AGIfix;
1099     D = U->C.S_C.DEX + DEXfix;
1100     M = U->C.S_C.MEN + MENfix;
1101     I = U->C.S_C.INT + INTfix;
1102     
1103     U->C.S_C.ATK = (S*5 + D*2 + A)/8;
1104     U->C.S_C.DEF = (V*5 + M*2 + S)/8;
1105     U->C.S_C.CAP = (I*4 + D*1 + M*2)/7;
1106     U->C.S_C.ACU = (D*4 + A*1 + M)/6;
1107     U->C.S_C.EVA = (A*4 + A*1 + M)/6;
1108         
1109         U->C.S_C.ATK += 0.5;
1110         U->C.S_C.DEF += 0.5;
1111         U->C.S_C.CAP += 0.5;
1112         U->C.S_C.ACU += 0.5;
1113         U->C.S_C.EVA += 0.5;
1114         
1115         U->C.S_C.ATK = floor(U->C.S_C.ATK);
1116         U->C.S_C.DEF = floor(U->C.S_C.DEF);
1117         U->C.S_C.CAP = floor(U->C.S_C.CAP);
1118         U->C.S_C.ACU = floor(U->C.S_C.ACU);
1119         U->C.S_C.EVA = floor(U->C.S_C.EVA);
1120         
1121         U = U->next;
1122     }U = UTop;
1123
1124 }
1125
1126 -(void)initMapscript{
1127
1128     for(int i = 0;i < 9999;i++){
1129         Suicchi[i] = false;
1130     }
1131     
1132     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
1133     MAPSCRIPTD *MSDtop = MS.D;
1134     
1135     if(!MS.D) return;
1136     MAPSCRIPT0 *MSDPt = MS.D->P;
1137     
1138     while(MS.D){
1139         MS.D->endFlag = false;
1140         
1141         
1142         double deltaET = floor(MS.D->ET2) - floor(MS.D->ET1);
1143         int deltaR = 0;
1144         if(deltaET < 0) deltaET = 0;
1145             
1146         if(MS.D->ET1 <= eventTime && MS.D->ET2 >= eventTime){
1147             if(deltaET > 0) deltaR = rand()%(int)deltaET;
1148         }
1149
1150         MS.D->ET3 = MS.D->ET1 + (double)deltaR;
1151         MS.D->ET4 = MS.D->ET3;
1152         
1153         MSDPt = MS.D->P;
1154         while (MS.D->P) {
1155                 MS.D->P->endFlag = false;
1156             MS.D->P = MS.D->P->next;
1157         }MS.D->P = MSDPt;
1158         
1159         MS.D = MS.D->next;
1160     }
1161     
1162     MS.D = MSDtop;
1163     
1164     MSDTO = MSDtop;
1165     MF[MFselectedRow+1].MS = MS;
1166     
1167     msgLvl = 0;
1168     msgLvlMax = 0;
1169     initImgFlag = false;
1170     initStringNum = false;
1171     bugFixFlag1 = false;
1172     bugFixFlag2 = false;
1173     bugFixFlag3 = false;
1174     
1175     eventTime = 0;
1176     coolTime = true;
1177 }
1178
1179 -(void)EventLoopFS:(NSTimer*)time{
1180     
1181     
1182     U = UTop;
1183     if(U){
1184     U = UTop;
1185     for(int i = 0;i < DUN[1];i++){
1186         
1187         U = U->next;
1188     }
1189     
1190     //if(Utarget) NSLog(@"PX %d PY %d UX %d UY %d", possionX, possionY, Utarget->x, Utarget->y);
1191         U = UTop;
1192     }
1193     
1194     if(coolTime){
1195         static int lmao = 0;
1196         
1197         lmao++;
1198         
1199         if(lmao > 20){
1200             coolTime = false;
1201             lmao = 0;
1202         }
1203     
1204     }
1205     
1206     
1207     if(extentBattleFlag){
1208         battleFlag = false;
1209         battleRdy = false;
1210         battleSet1Flag = false;
1211         battleSet2Flag = false;
1212         battleSettingFlag = false;
1213         [self AttackDisplay];
1214         windowPoint.x = [mapWindow frame].origin.x;
1215         windowPoint.y = [mapWindow frame].origin.y;
1216         [battleWindow setFrameOrigin:windowPoint];
1217         [battleWindow makeKeyAndOrderFront:nil];
1218         extentBattleFlag = false;
1219         extentBattleFlag2 = true;
1220     }
1221     if(cpuAtkExtendFlag2){
1222         battleFlag = false;
1223         battleRdy = false;
1224         battleSet1Flag = false;
1225         battleSet2Flag = false;
1226         battleSettingFlag = false;
1227         [self AttackDisplay];
1228         windowPoint.x = [mapWindow frame].origin.x;
1229         windowPoint.y = [mapWindow frame].origin.y;
1230         [battleWindow setFrameOrigin:windowPoint];
1231         [battleWindow makeKeyAndOrderFront:nil];
1232         extentBattleFlag = false;
1233         extentBattleFlag2 = true;
1234         cpuAtkExtendFlag2 = false;
1235         [battlePanel close];
1236     }if(extentBattleFlag2){
1237         battleFlag = false;
1238     }
1239     
1240     if(!setBattleModeFlag){
1241         if(!battleReadyUpFlag){battleReadyUpFlag = true;
1242         
1243             P[0].resource = 500;
1244             P[0].food = 500;
1245             P[0].money = 500;
1246             P[1].resource = 500;
1247             P[1].food = 500;
1248             P[1].money = 500;
1249             P[2].resource = 500;
1250             P[2].food = 500;
1251             P[2].money = 500;
1252         
1253         }
1254     }
1255     
1256     if(setBattleModeFlag){
1257         if(!battleReadyUpFlag){battleReadyUpFlag = true;
1258         [battleReadyUpPN1 setStringValue:P[0].name];
1259         [battleReadyUpPN2 setStringValue:P[1].name];
1260         
1261         NSString *string = @"";
1262         string = [string stringByAppendingFormat:@"%@の勝利条件\n", P[0].name];
1263         if(MF[MFselectedRow+1].MS.EGClight.endType1 == 1){
1264            string = [string stringByAppendingString:@"敵の壊滅\n"];
1265             
1266         }else if(MF[MFselectedRow+1].MS.EGClight.endType1 == 2){
1267             string = [string stringByAppendingString:@"味方の壊滅\n"];
1268             
1269         }
1270         
1271         string = [string stringByAppendingString:@"\n"];
1272         
1273         string = [string stringByAppendingFormat:@"%@の勝利条件\n", P[1].name];
1274         if(MF[MFselectedRow+1].MS.EGCdark.endType1 == 2){
1275             string = [string stringByAppendingString:@"敵の壊滅\n"];
1276         }else if(MF[MFselectedRow+1].MS.EGClight.endType1 == 1){
1277             string = [string stringByAppendingString:@"味方の壊滅\n"];
1278             
1279         }
1280     
1281         
1282         [battleReadyUpSupply1 setIntValue:P[0].resource];
1283         [battleReadyUpFood1 setIntValue:P[0].food];
1284         [battleReadyUpMoney1 setIntValue:P[0].money];
1285         
1286         [battleReadyUpSupply2 setIntValue:P[1].resource];
1287         [battleReadyUpFood2 setIntValue:P[1].food];
1288         [battleReadyUpMoney2 setIntValue:P[1].money];
1289         
1290         if(MF[MFselectedRow+1].MS.playerSet1 == 0){
1291             [battleReadyUpMAN1A setEnabled:YES];
1292             [battleReadyUpMAN1B setEnabled:YES];
1293             [battleReadyUpMAN1A setState:1];
1294             [battleReadyUpMAN1B setState:0];
1295             
1296         }else if(MF[MFselectedRow+1].MS.playerSet1 == 1){
1297             [battleReadyUpMAN1A setEnabled:NO];
1298             [battleReadyUpMAN1B setEnabled:NO];
1299             [battleReadyUpMAN1A setState:1];
1300             [battleReadyUpMAN1B setState:0];
1301         }else if(MF[MFselectedRow+1].MS.playerSet1 == 2){
1302             [battleReadyUpMAN1A setEnabled:NO];
1303             [battleReadyUpMAN1B setEnabled:NO];
1304             [battleReadyUpMAN1A setState:0];
1305             [battleReadyUpMAN1B setState:1];
1306         }
1307         
1308         if(MF[MFselectedRow+1].MS.playerSet2 == 0){
1309             [battleReadyUpMAN2A setEnabled:YES];
1310             [battleReadyUpMAN2B setEnabled:YES];
1311             [battleReadyUpMAN2A setState:1];
1312             [battleReadyUpMAN2B setState:0];
1313             
1314         }else if(MF[MFselectedRow+1].MS.playerSet2 == 1){
1315             [battleReadyUpMAN2A setEnabled:NO];
1316             [battleReadyUpMAN2B setEnabled:NO];
1317             [battleReadyUpMAN2A setState:1];
1318             [battleReadyUpMAN2B setState:0];
1319         }else if(MF[MFselectedRow+1].MS.playerSet2 == 2){
1320             [battleReadyUpMAN2A setEnabled:NO];
1321             [battleReadyUpMAN2B setEnabled:NO];
1322             [battleReadyUpMAN2A setState:0];
1323             [battleReadyUpMAN2B setState:1];
1324         }
1325         }
1326         if(retardhelp1){
1327             if([battleReadyUpMAN1A state] != 0)
1328                 MF[MFselectedRow+1].MS.playerSet1 = 1;
1329             else
1330                 MF[MFselectedRow+1].MS.playerSet1 = 2;
1331         }
1332         if(retardhelp2){
1333             if([battleReadyUpMAN2A state] != 0)
1334                 MF[MFselectedRow+1].MS.playerSet2 = 1;
1335             else
1336                 MF[MFselectedRow+1].MS.playerSet2 = 2;
1337         }
1338         return;
1339     }
1340     
1341
1342     
1343     if(buildNum[possionX][possionY] < 0){
1344         [selectMesh setImage:MC[chipNum[possionX][possionY]].img];
1345         [selectMeshText setStringValue:MC[chipNum[possionX][possionY]].name];
1346         [selectMeshValue setStringValue:[NSString stringWithFormat:@"%d%", MC[chipNum[possionX][possionY]].dmgfix]];
1347     }else{
1348         [selectMesh setImage:BC[buildNum[possionX][possionY]].img];
1349         [selectMeshText setStringValue:BC[buildNum[possionX][possionY]].name];
1350         [selectMeshValue setStringValue:[NSString stringWithFormat:@"%d%", BC[buildNum[possionX][possionY]].dmgfix]];
1351     }
1352     [self SetStatusFunc];
1353     
1354     if(initStatusFlag){
1355         
1356         
1357         if(1){
1358
1359             
1360             
1361             
1362             if(Uselected){
1363             if(Uselected->chipNumberL < 0){
1364             if(!Uselected->dead){
1365                 
1366                 if(Uselected->team == 0){
1367                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
1368                 }
1369                 if(Uselected->team == 2){
1370                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
1371                 }
1372                 
1373                 [tfName setStringValue:[NSString stringWithFormat:@"%@", Uselected->C.name]];
1374                 [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->C.S_C.HP, Uselected->C.S_M.HP]];
1375                 [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", Uselected->C.S_C.HP/Uselected->C.S_M.HP*100 + 0.5] intValue]];
1376                 [MPbarTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", Uselected->C.S_C.MP, Uselected->C.S_M.MP]];
1377                 [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 %g", Uselected->C.S_C.ATK]];
1378                 [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 %g", Uselected->C.S_C.DEF]];
1379                 [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 %g", Uselected->C.S_C.CAP]];
1380                 [tfHit setStringValue:[NSString stringWithFormat:@"命中値 %g", Uselected->C.S_C.ACU]];
1381                 [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 %g", Uselected->C.S_C.EVA]];
1382                 [tfMove setStringValue:[NSString stringWithFormat:@"移動力 %d", Uselected->C.S_C.MOV]];
1383                 [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", Uselected->C.S_C.WT]];
1384                 [selectChara setImage:Uselected->C.imgb];
1385                 [selectChara setImageScaling:NSScaleToFit];
1386                 
1387                 
1388                
1389             }else{
1390                 [tfName setStringValue:[NSString stringWithFormat:@"----"]];
1391                 [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
1392                 [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
1393                 [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
1394                 [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
1395                 [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
1396                 [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
1397                 [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
1398                 [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
1399                 [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
1400                 [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
1401                 [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
1402                 [selectChara setImage:NULL];
1403                 
1404             
1405             }
1406             }else{
1407                 if(!Uselected->dead){
1408                     
1409                     if(Uselected->team == 0){
1410                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
1411                     }
1412                     if(Uselected->team == 2){
1413                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
1414                     }
1415                     
1416                     [tfName setStringValue:[NSString stringWithFormat:@"%@", Uselected->CL.name]];
1417                     [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->CL.S_C.HP, Uselected->CL.S_M.HP]];
1418                     [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", Uselected->CL.S_C.HP/Uselected->CL.S_M.HP*100 + 0.5] intValue]];
1419                     [MPbarTF setStringValue:[NSString stringWithFormat:@"EN %g/%g", Uselected->CL.S_C.EN, Uselected->CL.S_M.EN]];
1420                     [tfAttack setStringValue:[NSString stringWithFormat:@"移動力 %d", Uselected->CL.S_C.MOV]];
1421                     [tfDefence setStringValue:[NSString stringWithFormat:@"運動性 %g", Uselected->CL.S_C.MOB]];
1422                     [tfCalc setStringValue:[NSString stringWithFormat:@"装甲 %g", Uselected->CL.S_C.ARM]];
1423                     [tfHit setStringValue:[NSString stringWithFormat:@"限界 %g", Uselected->CL.S_C.LIM]];
1424                     [tfDodge setStringValue:[NSString stringWithFormat:@""]];
1425                     [tfMove setStringValue:[NSString stringWithFormat:@""]];
1426                     [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", Uselected->CL.S_C.WT]];
1427                     [selectChara setImage:Uselected->CL.imgb];
1428                     [selectChara setImageScaling:NSScaleToFit];
1429                     
1430                     
1431                 }else{
1432                     [tfName setStringValue:[NSString stringWithFormat:@"----"]];
1433                     [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
1434                     [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
1435                     [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
1436                     [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
1437                     [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
1438                     [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
1439                     [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
1440                     [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
1441                     [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
1442                     [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
1443                     [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
1444                     [selectChara setImage:NULL];
1445                     
1446                 }
1447             
1448             
1449             
1450             }
1451             }else{
1452                 [tfName setStringValue:[NSString stringWithFormat:@"----"]];
1453                 [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
1454                 [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
1455                 [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
1456                 [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
1457                 [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
1458                 [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
1459                 [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
1460                 [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
1461                 [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
1462                 [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
1463                 [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
1464                 [selectChara setImage:NULL];
1465                 
1466             }
1467         }
1468    
1469     }
1470     
1471     if(unitBreak){
1472     if(unitBreak->team == 0){
1473         [tfResource setStringValue:[NSString stringWithFormat:@"資源 %d", P[0].resource]];
1474         [tfFood setStringValue:[NSString stringWithFormat:@"食料 %d", P[0].food]];
1475         [tfMoney setStringValue:[NSString stringWithFormat:@"資金 %d", P[0].money]];
1476     }else if(unitBreak->team == 2){
1477         [tfResource setStringValue:[NSString stringWithFormat:@"資源 %d", P[1].resource]];
1478         [tfFood setStringValue:[NSString stringWithFormat:@"食料 %d", P[1].food]];
1479         [tfMoney setStringValue:[NSString stringWithFormat:@"資金 %d", P[1].money]];
1480     }
1481     }
1482     
1483     if(menuDisplayFlag){
1484         [self SetMenu];
1485         [self initBCreateList];
1486         [self initCSummonList];
1487     }
1488     
1489     if (initMapFlag && !initStatusFlag) {
1490         [self initUnitStatus];
1491         [self initBuildStatus];
1492         
1493         //NSLog(@"%d", unitNum[1][1]);
1494         U = UTop;
1495         
1496         while (U != NULL) {
1497             U->C.S_C.HP = U->C.S_M.HP;
1498             
1499             U = U->next;
1500         }
1501         U = UTop;
1502         
1503         initStatusFlag = true;
1504         unitBreak = U;
1505         TeamCountFlag = true;
1506         
1507         unitColorInitFlag = true;
1508         
1509         MFselectedRow = 0;
1510         for (int i = 1;i < 512;i++) {
1511             if([[SC[storyNumb].nameMAP objectAtIndex:scenarioNumb] isEqualToString:[NSString stringWithFormat:@"%@", MF[i].fileName]])
1512                 break;
1513             MFselectedRow++;
1514         }
1515         [self setTargetList];
1516         
1517         
1518         [self initMapscript];
1519         
1520         initMapEventFlag = true;
1521         fieldViewBattleInitFlag = true;
1522         
1523         
1524         for(int i = 0;i < 255;i++){
1525             AUN[i] = 0;
1526             DUN[i] = 0;
1527         }
1528         
1529         [self initGuildList];
1530         cpuTurnEndFlag = false;
1531         mapChipDataLoadProc = 0;
1532     }
1533     
1534     if(unitBreak){
1535         if(unitBreak->team == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2){
1536             unitBreak->CPU = true;
1537             cpuAImodeflag = true;
1538             //NSLog(@"OMFG");
1539         }else if(unitBreak->team == 0 && MF[MFselectedRow+1].MS.playerSet1 == 2){
1540             unitBreak->CPU = true;
1541             cpuAImodeflag = true;
1542             //NSLog(@"OMFG");
1543         }else if(unitBreak->team == 1){
1544             unitBreak->CPU = true;
1545             cpuAImodeflag = true;
1546             //NSLog(@"OMFG");
1547         }
1548         else{
1549             unitBreak->CPU = false;
1550             cpuAImodeflag = false;
1551         }
1552     }
1553    
1554     
1555     if(cpuAImodeflag){
1556         if(!cpuTurnEndFlag && wtRdy && unitBreak->C.S_C.WT == 0){
1557             [fieldView modeCPUturn];
1558             CPUturn = true;
1559             //NSLog(@"%d", U->x);
1560         }else{
1561             CPUturn = false;
1562         }
1563         
1564     }else{
1565         CPUturn = false;
1566     }
1567
1568     
1569     
1570     [self EventFunc:true];
1571     if(wtRdy3)
1572         return;
1573     
1574     U = UTop;
1575     U = unitBreak;
1576     if(battleBegin && !wtRdy2)
1577         while (!wtRdy) {
1578             wtPx = 0;
1579             wtPy = 0;
1580             
1581             while (U) {
1582                 if(!U->dead && U->C.S_C.WT > 0) U->C.S_C.WT -= 1;
1583                 if(U->dead) {
1584                     U->C.S_C.WT = 999999;
1585                     //goto lolwtfshit;
1586                 }
1587                 if(U->C.S_C.WT <= 0 && !U->dead){//WTターン周り
1588                     U->C.S_C.WT = 0;
1589                     
1590                     
1591                     wtUnitNum = U->number;
1592                     wtPx = U->x;
1593                     wtPy = U->y;
1594                     wtRdy = true;
1595                     wtRdy2 = true;
1596                     unitBreak = U;
1597                     Uselected = U;
1598                     possionX = unitBreak->x;
1599                     possionY = unitBreak->y;
1600                     //おまんちん
1601                     stanbyFlag = false;
1602                     wtMovedFlag = false;
1603                     wtAttackedFlag = false;
1604                     guildRE1 = false;
1605                     guildRE2 = false;
1606                     
1607                     [fieldView scrollPoint:NSMakePoint((wtPx-8)*32, (wtPy-8)*32)];
1608                     
1609                     if(buildNum[U->x][U->y] >= 0){
1610                         B = BTop;
1611                         while(B){
1612                         
1613                             if(B->x == U->x && B->y == U->y){
1614                                 break;
1615                             }
1616                             B = B->next;
1617                         }
1618                         
1619                         if(!B){
1620                             B = BTop;
1621                             goto wtfshit;
1622                            
1623                         }
1624                         
1625                         if(B->C.recHP > 0){
1626                             U->C.S_C.HP += floor(U->C.S_M.HP*B->C.recHP/100);
1627                             if(U->C.S_C.HP >= U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
1628                         }
1629                         
1630                         if(B->C.recMP > 0){
1631                             U->C.S_C.MP += floor(U->C.S_M.MP*B->C.recMP/100);
1632                             if(U->C.S_C.MP >= U->C.S_M.MP) U->C.S_C.MP = U->C.S_M.MP;
1633                         }
1634                         
1635                         if(B->C.recEN > 0){
1636                             U->CL.S_C.EN += floor(U->CL.S_M.EN*B->C.recEN/100);
1637                             if(U->CL.S_C.EN >= U->CL.S_M.EN) U->CL.S_C.EN = U->CL.S_M.EN;
1638                         }
1639                         
1640                         if(B->C.recHPL > 0){
1641                             U->CL.S_C.HP += floor(U->CL.S_M.HP*B->C.recHPL/100);
1642                             if(U->CL.S_C.HP >= U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
1643                         }
1644                         
1645                         
1646                         B = BTop;
1647                     }
1648                     
1649                     eventTime++;
1650                     U = UTop;
1651                     
1652                     [self EventFunc:false];
1653                     pussyCumsOnlyOnceFlag = false;
1654                     
1655                     goto lolwtfshit;
1656                 }
1657                 
1658             wtfshit:{}
1659                 
1660                 U = U->next;
1661                 if(!U) {
1662                     BTop = B;
1663                     while(B){
1664                         if(!B->dead) B->C.S_C.WTE -= 1;
1665                         if(B->C.S_C.WTE <= 0){
1666                             
1667                             if(B->team == 0){
1668                                 P[0].resource += B->C.Esupply;
1669                                 P[0].food += B->C.Efood;
1670                                 P[0].money += B->C.Emoney;
1671                             }
1672                             if(B->team == 2){
1673                                 P[1].resource += B->C.Esupply;
1674                                 P[1].food += B->C.Efood;
1675                                 P[1].money += B->C.Emoney;
1676                             }
1677                             if(B->team == 1){
1678                                 P[2].resource += B->C.Esupply;
1679                                 P[2].food += B->C.Efood;
1680                                 P[2].money += B->C.Emoney;
1681                             }
1682                             
1683                             B->C.S_C.WTE = B->C.S_M.WTE;
1684                         }
1685                         B = B->next;
1686                     }B = BTop;
1687                 }
1688             }
1689             eventTime++;
1690             U = UTop;
1691             
1692             [self EventFunc:false];
1693             
1694             pussyCumsOnlyOnceFlag = false;
1695             wtRdy = false;
1696             
1697             if(!U) break;
1698             
1699         }
1700     lolwtfshit:{}
1701     U = UTop;
1702     
1703     if(battleWindowFlag){battleFlag = true; battleWindowFlag = false;
1704         
1705     }
1706     
1707     while(1){
1708     if(battleFlag){
1709         /*
1710         static int openWait = 0;
1711         
1712         if(openWait < 100){
1713             openWait++;
1714             break;
1715         }else{
1716             openWait = 0;
1717         }*/
1718         
1719         
1720         if(!battleSettingFlag){
1721             windowPoint.x = [mapWindow frame].origin.x;
1722             windowPoint.y = [mapWindow frame].origin.y;
1723             [battlePanel setFrameOrigin:windowPoint];
1724             [battlePanel makeKeyAndOrderFront:nil];
1725         }
1726         [self setBattlePanel];
1727     }
1728         break;
1729     }
1730     if(battleSetUp){
1731         if(!battleSetUpIgnore){
1732             [self AttackDisplay];
1733             
1734         windowPoint.x = [mapWindow frame].origin.x;
1735         windowPoint.y = [mapWindow frame].origin.y;
1736         [battleWindow setFrameOrigin:windowPoint];
1737         [battleWindow makeKeyAndOrderFront:nil];
1738         battleRdy = true;
1739         }else{
1740             [mapWindow makeKeyAndOrderFront:nil];
1741         }
1742             
1743     }
1744     
1745     
1746     if(battleRdy){
1747         [self DisplayMessage];
1748     }
1749     
1750     if(buildSelectedFlag){
1751         windowPoint.x = [mapWindow frame].origin.x;
1752         windowPoint.y = [mapWindow frame].origin.y;
1753         [researchPanel setFrameOrigin:windowPoint];
1754         if([self setBuildList]){
1755             [researchPanel makeKeyAndOrderFront:nil];
1756         };
1757         buildSelectedFlag = false;
1758     }
1759     
1760     if(mapChipDataLoadFail){
1761         [endGamePanel close];
1762         
1763         endGameCondition = false;
1764         initMapFlag = false;
1765         TeamCountFlag = false;
1766         initStatusFlag = false;
1767         battleBegin = false;
1768         startES = true;
1769         
1770         redWinFlag = false;
1771         blueWinFlag = false;
1772         battleFlag = false;
1773         battleRdy = false;
1774         
1775         mapChipDataLoadFail = false;
1776         return;
1777     }else if(initMapFlag){
1778         mapChipDataLoadProc++;
1779     }
1780     
1781     if(mapChipDataLoadProc > 2)
1782         mapChipDataLoadProc = 2;
1783     
1784     if(mapChipDataLoadProc == 1){
1785         [fsWindow makeKeyAndOrderFront:nil];
1786         [esWindow close];
1787         [titleWindow close];
1788         mapChipDataLoadProc++;
1789     }
1790     
1791     if(TeamCountFlag && !endGameCondition){
1792         U = UTop;
1793         TeamCount0 = 0;
1794         TeamCount2 = 0;
1795         while(U){
1796             if((U->team == 0 || U->team == 1) && !U->dead){
1797                 TeamCount0++;
1798             }
1799             else if(U->team == 2 && !U->dead){
1800                 TeamCount2++;
1801             }
1802             U = U->next;
1803         }
1804         U = UTop;
1805         
1806         
1807         if(targType1cnt[1] == 0 || targType2cnt[1] == 0){
1808             endGameCondition = true;
1809             redWinFlag = true;
1810             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1811             
1812         }
1813         if(targType1cnt[0] == 0 || targType2cnt[0] == 0){
1814             endGameCondition = true;
1815             blueWinFlag = true;
1816             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1817             
1818         }
1819         
1820         if(targType2Dflag){
1821             endGameCondition = true;
1822             redWinFlag = true;
1823             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1824             
1825         }
1826         if(targType2Lflag){
1827             endGameCondition = true;
1828             blueWinFlag = true;
1829             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1830             
1831         }
1832         
1833         if(TeamCount0 == 0 && (MF[MFselectedRow+1].MS.EGCdark.endType1 == 2 || MF[MFselectedRow+1].MS.EGCdark.endType2 == 2)){
1834             endGameCondition = true;
1835             redWinFlag = true;
1836             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1837         }
1838         if(TeamCount2 == 0 && (MF[MFselectedRow+1].MS.EGClight.endType1 == 1 || MF[MFselectedRow+1].MS.EGClight.endType2 == 1)){
1839             endGameCondition = true;
1840             blueWinFlag = true;
1841             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1842             
1843         }
1844     }
1845     
1846     
1847     static int endGamePanelWait = 100;
1848     
1849     if(endGameCondition && !battleRdy){
1850         
1851         if(redWinFlag && blueWinFlag){
1852             
1853         
1854         }else{
1855             windowPoint.x = [mapWindow frame].origin.x+30;
1856             windowPoint.y = [mapWindow frame].origin.y+200;
1857             [endGamePanel setFrameOrigin:windowPoint];
1858             [endGamePanel makeKeyAndOrderFront:nil];
1859             endGamePanelWait--;
1860             if(endGamePanelWait > 0) return;
1861         }
1862         
1863         [endGamePanel close];
1864
1865         [fsWindow close];
1866         
1867         esSceneProc = 0;
1868         
1869         [BGMsub stop];
1870         
1871         endGameCondition = false;
1872         initMapFlag = false;
1873         TeamCountFlag = false;
1874         initStatusFlag = false;
1875         battleBegin = false;
1876         startES = true;
1877         
1878         cpuModeMOVEflag = false;
1879         cpuModeATTACKflag = false;
1880         
1881         redWinFlag = false;
1882         blueWinFlag = false;
1883         cpuAImodeflag = false;
1884         cpuTurnEndFlag = true;
1885         waitSwtichFlag = false;
1886         
1887         wtRdy = false;
1888         wtRdy2 = false;
1889         Uselected = NULL;
1890         
1891         endGamePanelWait = 100;
1892         stageClearFlag = false;
1893         stageClearFlag2 = false;
1894         battleReadyUpFlag = false;
1895         setBattleModeFlag = false;
1896     }
1897     if(backTitleFlag){
1898     
1899         [titleWindow makeKeyAndOrderFront:nil];
1900         [fsWindow close];
1901         
1902         esSceneProc = 0;
1903         
1904         [BGMsub stop];
1905         
1906         endGameCondition = false;
1907         initMapFlag = false;
1908         TeamCountFlag = false;
1909         initStatusFlag = false;
1910         battleBegin = false;
1911         startES = true;
1912         
1913         cpuModeMOVEflag = false;
1914         cpuModeATTACKflag = false;
1915         
1916         redWinFlag = false;
1917         blueWinFlag = false;
1918         cpuAImodeflag = false;
1919         cpuTurnEndFlag = true;
1920         backTitleFlag = false;
1921         backTitleFlag2 = true;
1922         waitSwtichFlag = false;
1923         battleReadyUpFlag = false;
1924         setBattleModeFlag = false;
1925         
1926         
1927         wtRdy = false;
1928         wtRdy2 = false;
1929         
1930         Uselected = NULL;
1931     
1932     }if(stageClearFlag){
1933         
1934         if(stageClearFlag2){
1935         
1936             endGameCondition = true;
1937             blueWinFlag = true;
1938             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1939         
1940         
1941         
1942             return;
1943         }
1944         
1945         [fsWindow close];
1946         
1947         esSceneProc = 0;
1948         
1949         [BGMsub stop];
1950         
1951         endGameCondition = false;
1952         initMapFlag = false;
1953         TeamCountFlag = false;
1954         initStatusFlag = false;
1955         battleBegin = false;
1956         startES = true;
1957         
1958         cpuModeMOVEflag = false;
1959         cpuModeATTACKflag = false;
1960         
1961         redWinFlag = false;
1962         blueWinFlag = false;
1963         cpuAImodeflag = false;
1964         cpuTurnEndFlag = true;
1965         stageClearFlag = false;
1966         waitSwtichFlag = false;
1967         battleReadyUpFlag = false;
1968         setBattleModeFlag = false;
1969         
1970         wtRdy = false;
1971         wtRdy2 = false;
1972         
1973         
1974         Uselected = NULL;
1975         
1976     }
1977     
1978     if(gameOverFlag){
1979         
1980         
1981         [GameOverIV setImage:gaov.img];
1982         
1983         
1984         [GameOverWindow makeKeyAndOrderFront:nil];
1985         [fsWindow close];
1986         
1987         endGameCondition = false;
1988         initMapFlag = false;
1989         TeamCountFlag = false;
1990         initStatusFlag = false;
1991         battleBegin = false;
1992         startES = true;
1993         
1994         cpuModeMOVEflag = false;
1995         cpuModeATTACKflag = false;
1996         
1997         redWinFlag = false;
1998         blueWinFlag = false;
1999         cpuAImodeflag = false;
2000         cpuTurnEndFlag = true;
2001         backTitleFlag = false;
2002         gameOverFlag = false;
2003         gameOverFlag2 = true;
2004         waitSwtichFlag = false;
2005         battleReadyUpFlag = false;
2006         setBattleModeFlag = false;
2007         
2008         wtRdy = false;
2009         wtRdy2 = false;
2010         Uselected = NULL;
2011         
2012     }
2013     
2014     /*
2015     if(Uselected)
2016         if(!Uselected->dead){
2017             
2018             U = UTop;
2019             
2020             while (U->number != wtUnitNum) {
2021                 U = U->next;
2022             }
2023             
2024             if(!wtMovedFlag && !wtAttackedFlag){
2025                 U->C.S_C.WT = floor(U->C.S_M.WT/4 + 0.5);
2026             }else if(wtMovedFlag && wtAttackedFlag){
2027                 U->C.S_C.WT =  floor(U->C.S_M.WT + 0.5);
2028             }else if(wtMovedFlag){
2029                 U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
2030             }else if(wtAttackedFlag){
2031                 U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
2032             }
2033             
2034             U = UTop;
2035             
2036             wtRdy = false;
2037         }
2038     */
2039     if(summonRdyFlag){
2040         U = UTop;
2041         
2042         
2043         U = UTop;
2044         [self addSummonStatus];
2045         
2046         U = CSLU;
2047         
2048         if(U->team == 0){
2049             
2050             SKILL *sTop = U->C.S;
2051             
2052             while (U->C.S) {
2053                 if(U->C.S->type == 2) break;
2054                 U->C.S = U->C.S->next;
2055             }
2056             
2057             U->C.S_C.MP -= U->C.S->cost[crCSL];
2058             
2059             if(!U->C.S){
2060                 U->C.S = sTop;
2061                 U = UTop;
2062                 return;
2063             }
2064             
2065             
2066             unitNum[possionX][possionY] = U->C.S->list[crCSL]-1;
2067             unitTeam[possionX][possionY] = 0;
2068             
2069             U->C.S = sTop;
2070             unitColorInitFlag = true;
2071         }
2072         if(U->team == 2){
2073             
2074             SKILL *sTop = U->C.S;
2075             
2076             while (U->C.S) {
2077                 if(U->C.S->type == 2) break;
2078                 U->C.S = U->C.S->next;
2079             }
2080             
2081             U->C.S_C.MP -= U->C.S->cost[crCSL];
2082             
2083             if(!U->C.S){
2084                 U->C.S = sTop;
2085                 U = UTop;
2086                 return;
2087             }
2088             
2089             unitNum[possionX][possionY] = U->C.S->list[crCSL]-1;
2090             unitTeam[possionX][possionY] = 2;
2091             
2092             U->C.S = sTop;
2093             unitColorInitFlag = true;
2094         }
2095     
2096         summonRdyFlag = false;
2097         cslRdy = false;
2098         
2099         U = UTop;
2100     }
2101     
2102     
2103     
2104     if(unitMoveEndFlag){
2105         pussyLoopFlag = false;
2106     }
2107     
2108     
2109     w000p:
2110     
2111     if(CPUAttackSubmitFlag){
2112         battleFlag = true;
2113         CPUAttackSubmitFlag = false;
2114         windowPoint.x = [mapWindow frame].origin.x;
2115         windowPoint.y = [mapWindow frame].origin.y;
2116         [atkPanel setFrameOrigin:windowPoint];
2117     }
2118     
2119     
2120     static int oopsCnt = 30;
2121     
2122     U = UTop;
2123     
2124     
2125     if(Utarget){
2126     
2127     if(battleFlag &&
2128        ((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
2129         (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
2130         (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2))
2131        ){
2132         if(!(AVpreview.rate > 0) && !animationFlag1 && !animationFlag2)
2133             oopsCnt--;
2134         if(oopsCnt > 0)
2135             return;
2136         else{
2137             oopsCnt = 30;//cpu攻撃ナビ
2138         }
2139         
2140         battleFlag = false;
2141         battleRdy = false;
2142         battleSet1Flag = false;
2143         battleSet2Flag = false;
2144         battleSettingFlag = false;
2145         [self AttackDisplay];
2146         windowPoint.x = [mapWindow frame].origin.x;
2147         windowPoint.y = [mapWindow frame].origin.y;
2148         [battleWindow setFrameOrigin:windowPoint];
2149         [battleWindow makeKeyAndOrderFront:nil];
2150         [battlePanel close];
2151     }
2152     }
2153     if(Utarget){
2154     if(battleRdy &&
2155        ((Utarget && MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
2156         (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
2157         (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2)
2158         )
2159        ){
2160         
2161         if(!(AVpreview.rate > 0) && !animationFlag1 && !animationFlag2)
2162             oopsCnt--;
2163         if(oopsCnt > 0)
2164             return;
2165         else{
2166             oopsCnt = 30;//cpu攻撃準備
2167         }
2168         
2169        bLoopFlag = false;
2170     }
2171     }
2172     U = UTop;
2173     
2174
2175 }
2176
2177 -(void)EventFunc:(bool)eventLoopProcFlag{
2178     
2179     if(battleBegin && !pussyLoopFlag){
2180         wtRdy3 = true;
2181         bool proccessTrue = false;
2182         static bool onlyBigin = false;
2183         MAPSCRIPT MS = MF[MFselectedRow+1].MS;
2184         MAPSCRIPTD *MSDtop;
2185         MSDtop = MSDTO;
2186         if(!MSDtop){
2187             wtRdy3 = false;
2188             return;
2189         }
2190         
2191         
2192         if(!onlyBigin){
2193             MSDP0top = MS.D->P;
2194             onlyBigin = true;
2195         }
2196         
2197         
2198         
2199         while (MS.D) {
2200             int proccesType = -1;
2201             
2202             bool EventFailFlag = false;
2203             static bool PtopFlag = false;
2204             
2205             
2206             enum{
2207                 ENTIRE_MAP,
2208                 CENTER_POINT
2209             };
2210             
2211             while(MS.D){
2212                 if(MS.D->endFlag){
2213                     MS.D = MS.D->next;
2214                 }
2215                 else
2216                     break;
2217             }
2218             PtopFlag = false;
2219             if(!MS.D) break;
2220             
2221             if(!PtopFlag){
2222                 MSDPtop = MS.D->P;
2223                 PtopFlag = true;
2224             }
2225             
2226             if(MS.D)
2227                 while(MS.D->P){
2228                     if(MS.D->P->endFlag)
2229                         MS.D->P = MS.D->P->next;
2230                     else
2231                         break;
2232                 }
2233             if(!MS.D->P){
2234                 MS.D->endFlag = true;
2235                 messageDialog = false;
2236                 [self setMessage:NULL];
2237                 MS.D->P = MSDPtop;
2238                 PtopFlag = false;
2239                 
2240                 
2241                 MAPSCRIPT0 *MSDPT = MS.D->P;
2242                 
2243                 if(MS.D->ETtype == 0){
2244                     
2245                 }else if(MS.D->ETtype == 1){
2246                     bool resultFailFlag = false;
2247                     while(MS.D->P){
2248                         if(!MS.D->P->endFlag)
2249                             resultFailFlag = true;
2250                         MS.D->P = MS.D->P->next;
2251                     }MS.D->P = MSDPT;
2252                     
2253                     if(resultFailFlag)
2254                         while(MS.D->P){
2255                             MS.D->P->endFlag = false;
2256                             MS.D->P = MS.D->P->next;
2257                         }MS.D->P = MSDPT;
2258                     
2259                 }else if(MS.D->ETtype == 2){
2260                     
2261                     bool resultFailFlag = false;
2262                     while(MS.D->P){
2263                         if(!MS.D->P->succeessfulFlag)
2264                             resultFailFlag = true;
2265                         MS.D->P = MS.D->P->next;
2266                     }MS.D->P = MSDPT;
2267                     
2268                     if(resultFailFlag)
2269                         while(MS.D->P){
2270                             MS.D->P->endFlag = false;
2271                             MS.D->P = MS.D->P->next;
2272                         }MS.D->P = MSDPT;
2273                 }else if(MS.D->ETtype == 3){
2274                     
2275                     bool resultFailFlag = false;
2276                     while(MS.D->P){
2277                         if(!MS.D->P->succeessfulFlag){
2278                             resultFailFlag = false;
2279                             break;
2280                         }
2281                         MS.D->P = MS.D->P->next;
2282                         resultFailFlag = true;
2283                     }MS.D->P = MSDPT;
2284                     
2285                     if(resultFailFlag)
2286                         while(MS.D->P){
2287                             MS.D->P->endFlag = false;
2288                             MS.D->P = MS.D->P->next;
2289                         }MS.D->P = MSDPT;
2290                     //NSLog(@"%d", UTop->x);
2291                 }else if(MS.D->ETtype == 4){
2292                     while(MS.D->P){
2293                         MS.D->P->endFlag = false;
2294                         MS.D->P = MS.D->P->next;
2295                     }MS.D->P = MSDPT;
2296                 }
2297                 
2298                 MS.D->P = MSDPT;
2299                 MS.D = MS.D->next;
2300                 
2301             }
2302             if(!MS.D) {
2303                 
2304                 break;
2305             }
2306             
2307             if(!PtopFlag){
2308                 MSDPtop = MS.D->P;
2309                 PtopFlag = true;
2310             }
2311             
2312             if(MS.D->switch1)
2313                 for(int i = 0;*(MS.D->switch1+i)>0;i++){
2314                     if(Suicchi[*(MS.D->switch1+i)])
2315                         continue;
2316                     
2317                     EventFailFlag = true;
2318                 }
2319             
2320             if(MS.D->switch2)
2321                 for(int i = 0;*(MS.D->switch2+i)>0;i++){
2322                     if(!Suicchi[*(MS.D->switch2+i)])
2323                         continue;
2324                     
2325                     EventFailFlag = true;
2326                 }
2327             
2328             
2329             if(eventTime == MS.D->ET4 || MS.D->ET4 == 0){
2330                 proccessTrue = true;
2331                 if(MS.D->ET4 > 0){
2332                     
2333                     double deltaET = floor(MS.D->ET2) - floor(MS.D->ET1);
2334                     int deltaR = 0;
2335                     if(deltaET < 0) deltaET = 0;
2336                     
2337                     if(MS.D->ET1 <= eventTime && MS.D->ET2 >= eventTime){
2338                         if(deltaET > 0) deltaR = rand()%(int)deltaET;
2339                     }
2340                     
2341                     MS.D->ET3 = MS.D->ET1 + (double)deltaR;
2342                     
2343                     MS.D->ET4 += MS.D->ET3;
2344                 }
2345                 
2346                // NSLog(@"%g %d", eventTime, P[0].resource);
2347             }else{
2348             
2349                 MS.D = MS.D->next;
2350                 
2351                 continue;
2352             }
2353             
2354             
2355             
2356             if(MS.D->type == -1 && !EventFailFlag)
2357                 proccesType = ENTIRE_MAP;
2358             if(MS.D->type == 0 && pushStanbyFlag && (Uselected->x == MS.D->x && Uselected->y == MS.D->y) && !EventFailFlag)
2359                 proccesType = CENTER_POINT;
2360             else if(MS.D->type == 0){
2361                 proccesType = CENTER_POINT;
2362                 proccessTrue = false;
2363                 EventFailFlag = true;
2364             }
2365             
2366             if(MS.D->endFlag)
2367                 continue;
2368             
2369             if(!MS.D->ET4 == 0 && pussyCumsOnlyOnceFlag){
2370                 EventFailFlag = true;
2371             }
2372             
2373             if(EventFailFlag  || !proccessTrue){
2374                 while (MS.D->P) {
2375                     //MS.D->P->endFlag = true;
2376                     MS.D->P = MS.D->P->next;
2377                 }
2378                 MS.D->P = MSDPtop;
2379                 MS.D = MS.D->next;
2380                 continue;
2381             }
2382             
2383             if(proccessTrue)
2384                 switch (proccesType) {
2385                         
2386                     case ENTIRE_MAP:
2387                         MS.D->P = [self setEvent:MS.D->P];
2388                         if(messageDialog){
2389                             MS.D->P = MSDPtop;
2390                             MS.D = MSDtop;
2391                             return;
2392                         }
2393                         if(waitSwtichFlag) {
2394                             MS.D->P = MSDPtop;
2395                             MS.D = MSDtop;
2396                             return;
2397                         }if(backTitleFlag){
2398                             MS.D->P = MSDPtop;
2399                             MS.D = MSDtop;
2400                             return;
2401                             
2402                         }if(stageClearFlag){
2403                             MS.D->P = MSDPtop;
2404                             MS.D = MSDtop;
2405                             return;
2406                             
2407                         }if(gameOverFlag){
2408                             MS.D->P = MSDPtop;
2409                             MS.D = MSDtop;
2410                             return;
2411                             
2412                         }
2413                         MS.D->P = MSDPtop;
2414                         break;
2415                     case CENTER_POINT:
2416                         MS.D->P = [self setEvent:MS.D->P];
2417                         if(messageDialog){
2418                             MS.D->P = MSDPtop;
2419                             MS.D = MSDtop;
2420                             return;
2421                         }
2422                         if(waitSwtichFlag) {
2423                             MS.D->P = MSDPtop;
2424                             MS.D = MSDtop;
2425                             return;
2426                         }if(backTitleFlag){
2427                             MS.D->P = MSDPtop;
2428                             MS.D = MSDtop;
2429                             return;
2430                             
2431                         }if(stageClearFlag){
2432                             MS.D->P = MSDPtop;
2433                             MS.D = MSDtop;
2434                             return;
2435                             
2436                         }if(gameOverFlag){
2437                             MS.D->P = MSDPtop;
2438                             MS.D = MSDtop;
2439                             return;
2440                             
2441                         }
2442                         MS.D->P = MSDPtop;
2443                         break;
2444                         
2445                     default:
2446                         MS.D->P = MSDPtop;
2447                         break;
2448                 }
2449             
2450             MS.D->P = MSDPtop;
2451             continue;
2452         }
2453         MS.D = MSDTO;
2454         
2455         while(MS.D){
2456             
2457             MAPSCRIPT0 *MSDPT = MS.D->P;
2458             if(MS.D->ETtype == 0){
2459                 while(MS.D->P){
2460                     MS.D->P->succeessfulFlag = true;
2461                     MS.D->endFlag = true;
2462                     MS.D->P = MS.D->P->next;
2463                 }MS.D->P = MSDPT;
2464             }else if(MS.D->ETtype == 1){
2465                 bool resultFailFlag = false;
2466                 while(MS.D->P){
2467                     if(!MS.D->P->endFlag)
2468                         resultFailFlag = true;
2469                     MS.D->P = MS.D->P->next;
2470                 }MS.D->P = MSDPT;
2471                 
2472                 if(resultFailFlag)
2473                     while(MS.D->P){
2474                         MS.D->P->succeessfulFlag = false;
2475                         MS.D->endFlag = false;
2476                         MS.D->P = MS.D->P->next;
2477                     }MS.D->P = MSDPT;
2478                 
2479             }else if(MS.D->ETtype == 2){
2480                 
2481                 bool resultFailFlag = false;
2482                 while(MS.D->P){
2483                     if(!MS.D->P->succeessfulFlag)
2484                         resultFailFlag = true;
2485                     MS.D->P = MS.D->P->next;
2486                 }MS.D->P = MSDPT;
2487                 
2488                 if(resultFailFlag)
2489                     while(MS.D->P){
2490                         MS.D->P->succeessfulFlag = false;
2491                         MS.D->endFlag = false;
2492                         MS.D->P = MS.D->P->next;
2493                     }MS.D->P = MSDPT;
2494             }else if(MS.D->ETtype == 3){
2495                 
2496                 bool resultFailFlag = false;
2497                 while(MS.D->P){
2498                     if(!MS.D->P->succeessfulFlag){
2499                         resultFailFlag = false;
2500                         break;
2501                     }
2502                     resultFailFlag = true;
2503                     MS.D->P = MS.D->P->next;
2504                 }MS.D->P = MSDPT;
2505                 
2506                 if(resultFailFlag)
2507                     while(MS.D->P){
2508                         MS.D->P->succeessfulFlag = false;
2509                         MS.D->endFlag = false;
2510                         MS.D->P = MS.D->P->next;
2511                     }MS.D->P = MSDPtop;
2512             }else if(MS.D->ETtype == 4){
2513                 while(MS.D->P){
2514                     MS.D->P->succeessfulFlag = false;
2515                     MS.D->endFlag = false;
2516                     MS.D->P = MS.D->P->next;
2517                 }MS.D->P = MSDPT;
2518             }
2519             
2520             MS.D->P = MSDPT;
2521             MS.D = MS.D->next;
2522         }
2523         
2524         MS.D = MSDtop;
2525         
2526         
2527         
2528         MF[MFselectedRow+1].MS.D = MS.D;
2529         cpuTurnEndFlag = false;
2530         battleSetUpIgnore = false;
2531         if(!eventLoopProcFlag)
2532             pussyCumsOnlyOnceFlag = true;
2533         wtRdy3 = false;
2534     }
2535
2536
2537 }
2538
2539 -(MAPSCRIPT0*)setEvent:(MAPSCRIPT0*)MS0{
2540
2541     enum{
2542         MESSAGE_FLAG,
2543         SELECTION_FLAG,
2544         INPUTNUMBER_FLAG,
2545         SWITCH_FLAG,
2546         VALUE_FLAG,
2547         TIMER_FLAG,
2548         BRANCH_FLAG,
2549         LABEL_FLAG,
2550         LABELJUMP_FLAG,
2551         COMMENT_FLAG,
2552         RESOURCE_FLAG,
2553         APPEARANCE_FLAG = 22,
2554         DISSAPPEARANCE_FLAG = 23,
2555         WAIT_FLAG = 25,
2556         BGM_FLAG =28,
2557         SE_FLAG =30,
2558         GAMEOVER_FLAG = 35,
2559         STAGECLEAR_FLAG = 36,
2560         TITLE_FLAG = 37,
2561     };
2562
2563     int Proc = -1;
2564     
2565     if(MS0->type == 0)
2566         Proc = MESSAGE_FLAG;
2567     if(MS0->type == 1)
2568         Proc = SELECTION_FLAG;
2569     if(MS0->type == 2)
2570         Proc = INPUTNUMBER_FLAG;
2571     if(MS0->type == 3)
2572         Proc = SWITCH_FLAG;
2573     if(MS0->type == 4)
2574         Proc = VALUE_FLAG;
2575     if(MS0->type == 5)
2576         Proc = TIMER_FLAG;
2577     if(MS0->type == 6)
2578         Proc = BRANCH_FLAG;
2579     if(MS0->type == 7)
2580         Proc = LABEL_FLAG;
2581     if(MS0->type == 8)
2582         Proc = LABELJUMP_FLAG;
2583     if(MS0->type == 9)
2584         Proc = COMMENT_FLAG;
2585     if(MS0->type == 10)
2586         Proc = RESOURCE_FLAG;
2587     if(MS0->type == 22)
2588         Proc = APPEARANCE_FLAG;
2589     if(MS0->type == 23)
2590         Proc = DISSAPPEARANCE_FLAG;
2591     if(MS0->type == 25)
2592         Proc = WAIT_FLAG;
2593     if(MS0->type == 28)
2594         Proc = BGM_FLAG;
2595     if(MS0->type == 30)
2596         Proc = SE_FLAG;
2597     if(MS0->type == 35)
2598         Proc = GAMEOVER_FLAG;
2599     if(MS0->type == 36)
2600         Proc = STAGECLEAR_FLAG;
2601     if(MS0->type == 37)
2602         Proc = TITLE_FLAG;
2603     
2604
2605         
2606     
2607     switch(Proc){
2608             
2609         case MESSAGE_FLAG:
2610             messageDialog = true;
2611             [self setMessage:MS0];
2612             coolTime = true;
2613             break;
2614         case SELECTION_FLAG:
2615             
2616             MS0 = [self setSelection:MS0];
2617             coolTime = true;
2618             break;
2619         case INPUTNUMBER_FLAG:
2620             MS0 = [self setDefault:MS0];
2621             coolTime = true;
2622             break;
2623     
2624         case SWITCH_FLAG:
2625             MS0 = [self setSwitch:MS0];
2626             break;
2627         case VALUE_FLAG:
2628             MS0 = [self setDefault:MS0];
2629             break;
2630         case TIMER_FLAG:
2631             MS0 = [self setDefault:MS0];
2632             break;
2633         case BRANCH_FLAG:
2634             MS0 = [self setBranch:MS0];
2635             break;
2636         case LABEL_FLAG:
2637             MS0 = [self setLabel:MS0];
2638             break;
2639         case LABELJUMP_FLAG:
2640             MS0 = [self setLabelJump:MS0];
2641             break;
2642         case COMMENT_FLAG:
2643             MS0 = [self setComment:MS0];
2644             break;
2645         case RESOURCE_FLAG:
2646             MS0 = [self setResource:MS0];
2647             break;
2648         case APPEARANCE_FLAG:
2649             MS0 = [self setAppearance:MS0];
2650             break;
2651         case DISSAPPEARANCE_FLAG:
2652             MS0 = [self setDissappearance:MS0];
2653             break;
2654         case WAIT_FLAG:
2655             MS0 = [self setWait:MS0];
2656             break;
2657         case BGM_FLAG:
2658             MS0 = [self setBGM:MS0];
2659             break;
2660         case SE_FLAG:
2661             MS0 = [self setSE:MS0];
2662             break;
2663         case GAMEOVER_FLAG:
2664             MS0 = [self setGameOver:MS0];
2665             coolTime = true;
2666             break;
2667         case STAGECLEAR_FLAG:
2668             MS0 = [self setStageClear:MS0];
2669             break;
2670         case TITLE_FLAG:
2671             MS0 = [self setTitleBack:MS0];
2672             break;
2673             
2674     }
2675     
2676
2677     return MS0;
2678 }
2679
2680
2681 -(void)setTargetList{
2682
2683     targType1cnt[0] = -1;
2684     targType1cnt[1] = -1;
2685     targType2cnt[0] = -1;
2686     targType2cnt[1] = -1;
2687     targType2Lflag = false;
2688     targType2Dflag = false;
2689     
2690     
2691     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
2692     
2693     while(1) {
2694         
2695         for (int i = 0;i < 64;i++) {
2696             if(!MS.EGClight.etValue1[i]) break;
2697             NSArray *array1 = [MS.EGClight.etValue1[i] componentsSeparatedByString:@"["];
2698             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2699             
2700             int Tx = [[array2 objectAtIndex:0] intValue];
2701             int Ty = [[array2 objectAtIndex:1] intValue];
2702             if(MS.EGClight.endType1 == 3){
2703                 U = UTop;
2704                 while (U) {
2705                     if(U->x == Tx && U->y == Ty){
2706                         U->targType1L = true;
2707                         if(targType1cnt[0] < 0)
2708                             targType1cnt[0] = 0;
2709                         targType1cnt[0]++;
2710                         break;
2711                     }
2712                     U = U->next;
2713                 }U = UTop;
2714             }
2715             if(MS.EGClight.endType1 == 4){
2716                 U = UTop;
2717                 while (U) {
2718                     if(U->x == Tx && U->y == Ty){
2719                         U->targType2L = true;
2720                         if(targType2cnt[0] < 0)
2721                             targType2cnt[0] = 0;
2722                         targType2cnt[0]++;
2723                         break;
2724                     }
2725                     U = U->next;
2726                 }U = UTop;
2727             }
2728         }
2729         for (int i = 0;i < 64;i++) {
2730             if(!MS.EGClight.etValue2[i]) break;
2731             NSArray *array1 = [MS.EGClight.etValue2[i] componentsSeparatedByString:@"["];
2732             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2733             
2734             int Tx = [[array2 objectAtIndex:0] intValue];
2735             int Ty = [[array2 objectAtIndex:1] intValue];
2736             
2737             if(MS.EGClight.endType2 == 3){
2738             U = UTop;
2739                 while (U) {
2740                     if(U->x == Tx && U->y == Ty){
2741                         U->targType1L = true;
2742                         if(targType1cnt[0] < 0)
2743                             targType1cnt[0] = 0;
2744                         targType1cnt[0]++;
2745                         break;
2746                     }
2747                     U = U->next;
2748                 }U = UTop;
2749             }
2750             if(MS.EGClight.endType2 == 4){
2751                 U = UTop;
2752                 while (U) {
2753                     if(U->x == Tx && U->y == Ty){
2754                         U->targType2L = true;
2755                         if(targType2cnt[0] < 0)
2756                             targType2cnt[0] = 0;
2757                         targType2cnt[0]++;
2758                         break;
2759                     }
2760                     U = U->next;
2761                 }U = UTop;
2762             }
2763         }
2764         for (int i = 0;i < 64;i++) {
2765             if(!MS.EGCdark.etValue1[i]) break;
2766             NSArray *array1 = [MS.EGCdark.etValue1[i] componentsSeparatedByString:@"["];
2767             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2768             
2769             int Tx = [[array2 objectAtIndex:0] intValue];
2770             int Ty = [[array2 objectAtIndex:1] intValue];
2771             
2772             if(MS.EGCdark.endType1 == 3){
2773                     U = UTop;
2774                 while (U) {
2775                     if(U->x == Tx && U->y == Ty){
2776                         U->targType1D = true;
2777                         if(targType1cnt[1] < 0)
2778                             targType1cnt[1] = 0;
2779                         targType1cnt[1]++;
2780                         break;
2781                     }
2782                     U = U->next;
2783                 }U = UTop;
2784             }
2785             if(MS.EGCdark.endType1 == 4){
2786                 U = UTop;
2787                 while (U) {
2788                     if(U->x == Tx && U->y == Ty){
2789                         U->targType2D = true;
2790                         if(targType2cnt[1] < 0)
2791                             targType2cnt[1] = 0;
2792                         targType2cnt[1]++;
2793                         break;
2794                     }
2795                     U = U->next;
2796                 }U = UTop;
2797             }
2798         }
2799         for (int i = 0;i < 64;i++) {
2800             if(!MS.EGCdark.etValue2[i]) break;
2801             NSArray *array1 = [MS.EGCdark.etValue2[i] componentsSeparatedByString:@"["];
2802             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2803             
2804             int Tx = [[array2 objectAtIndex:0] intValue];
2805             int Ty = [[array2 objectAtIndex:1] intValue];
2806             
2807             if(MS.EGCdark.endType2 == 3){
2808                 U = UTop;
2809                 while (U) {
2810                     if(U->x == Tx && U->y == Ty){
2811                         U->targType1D = true;
2812                         if(targType1cnt[1] < 0)
2813                             targType1cnt[1] = 0;
2814                         targType1cnt[1]++;
2815                         break;
2816                     }
2817                     U = U->next;
2818                 }U = UTop;
2819             }
2820             if(MS.EGCdark.endType2 == 4){
2821                 U = UTop;
2822                 while (U) {
2823                     if(U->x == Tx && U->y == Ty){
2824                         U->targType2D = true;
2825                         if(targType2cnt[1] < 0)
2826                             targType2cnt[1] = 0;
2827                         targType2cnt[1]++;
2828                         break;
2829                     }
2830                     U = U->next;
2831                 }U = UTop;
2832             }
2833         }
2834         break;
2835     }
2836
2837
2838
2839
2840 }
2841
2842 -(bool)setBuildList{
2843
2844     crCRL = 0;
2845     
2846     [self willChangeValueForKey:@"CResearchListMA"];
2847     [CResearchListMA removeAllObjects];
2848     [self didChangeValueForKey:@"CResearchListMA"];
2849     
2850     [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
2851     [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
2852     [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
2853     [researchACU setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
2854     [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
2855     [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
2856     
2857     BUILDCHIP *B0;
2858     
2859     B = BTop;
2860     
2861     while (B && B->x != possionX && B->y != possionY) {
2862         B = B->next;
2863     }
2864     B0 = &BC[buildNum[possionX][possionY]];
2865     
2866     RESEARCH *Rtop;
2867     UNITCHIP *BU;
2868     
2869     Rtop = B0->R;
2870     
2871     
2872     if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
2873     
2874         
2875         if(GCnum1 < 0)
2876         if(!B0->R){
2877
2878         return false;
2879     
2880         }
2881     }else if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
2882     
2883     
2884         if(GCnum2 < 0)
2885         if(!B0->R){
2886
2887             return false;
2888             
2889         }
2890     }
2891     
2892     while(B0->R){
2893         BU = B0->R->U;
2894         
2895         if(B->makeLv >= B0->R->Lv){
2896         NSMutableDictionary* dict = [NSMutableDictionary new];
2897         [dict setValue:[NSString stringWithFormat:@"%@", BU->nameClass] forKey:@"name"];
2898         [dict setValue:[NSString stringWithFormat:@"%g", BU->S_M.HP] forKey:@"HP"];
2899         [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d", BU->S_M.cSupply, BU->S_M.cFood, BU->S_M.cMoney] forKey:@"cost"];
2900         [dict setValue:BU->img forKey:@"img"];
2901
2902         
2903         [self willChangeValueForKey:@"CResearchListMA"];
2904         [CResearchListMA addObject:dict];
2905         [self didChangeValueForKey:@"CResearchListMA"];
2906         }
2907         B0->R = B0->R->next;
2908     }
2909     B0->R = Rtop;
2910     
2911     B = BTop;
2912     
2913     BUILDCHIP *B;
2914     
2915     B = &BC[buildNum[possionX][possionY]];
2916     
2917     
2918     if(B0->R){
2919     Rtop = B->R;
2920     
2921     BU = B->R->U;
2922     BRU = BU;
2923     
2924     for(int i = 0;i <= crCRL && B->R;i++){
2925         BU = B->R->U;
2926         BRU = BU;
2927         [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
2928         [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
2929         [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
2930         [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
2931         [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
2932         [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
2933         [researchIMG setImage:BU->imgb];
2934         [researchIMG setImageScaling:NSScaleToFit];
2935         
2936         B->R = B->R->next;
2937     }
2938     B->R = Rtop;
2939     }
2940     
2941     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
2942     
2943     if(B->GuildFlag &&( buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1)){
2944     
2945         int a = MS.guildListRegistNum12 - MS.guildListRegistNum11;
2946         
2947         if(!guildRE1){
2948         Gnum1 = 0;
2949         if(a > 0)
2950             Gnum1 = MS.guildListRegistNum11 + arc4random()%(MS.guildListRegistNum12 - MS.guildListRegistNum11+1);
2951         else
2952             Gnum1 = MS.guildListRegistNum12;
2953         
2954         if(Gnum1 > GCnum1+1)
2955             Gnum1 = GCnum1;
2956         }
2957         int n = 0;
2958         guildc = 0;
2959         saveGuildList = calloc((GCnum1+1), sizeof(int));
2960         if(!guildRE1) GuildDisp1 = calloc(Gnum1, sizeof(int));
2961         for(int i = 0;i < Gnum1;i++){
2962             
2963             if(!guildRE1){
2964                 n = [self chooseGuildList:GuildChosen1 gcnum:GCnum1];
2965             if(n == -1)
2966                 return false;
2967                 *(GuildDisp1 + i) = *(GuildChosen1 + n);
2968             }
2969         
2970             if(*(GuildDisp1 + i) <= 0)
2971                 break;
2972             
2973             NSMutableDictionary* dict = [NSMutableDictionary new];
2974             [dict setValue:[NSString stringWithFormat:@"%@", UC[*(GuildDisp1 + i)-1].name] forKey:@"name"];
2975             [dict setValue:[NSString stringWithFormat:@"%g", UC[*(GuildDisp1 + i)-1].S_M.HP] forKey:@"HP"];
2976             [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"];
2977             [dict setValue:UC[*(GuildDisp1 + i)-1].img forKey:@"img"];
2978             
2979             
2980             [self willChangeValueForKey:@"CResearchListMA"];
2981             [CResearchListMA addObject:dict];
2982             [self didChangeValueForKey:@"CResearchListMA"];
2983     
2984         }
2985
2986         
2987         
2988         int k = 0;
2989         B->R = Rtop;
2990         
2991         while (B->R) {
2992             B->R = B->R->next;
2993             k++;
2994         }
2995         
2996         for(int i = k;i <= crCRL;i++){
2997             
2998             [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ATK]];
2999             [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.DEF]];
3000             [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp1 + i - k)-1].S_M.CAP]];
3001             [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.ACU]];
3002             [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp1 + i - k)-1].S_M.EVA]];
3003             [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp1 + i - k)-1].S_M.MOV]];
3004             [researchIMG setImage:UC[*(GuildDisp1 + i - k)-1].imgb];
3005             [researchIMG setImageScaling:NSScaleToFit];
3006             
3007         }B->R = Rtop;
3008         
3009         guildRE1 = true;
3010     }else if(B->GuildFlag && (buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3)){
3011     
3012         int a = MS.guildListRegistNum22 - MS.guildListRegistNum21;
3013         
3014         if(!guildRE2){
3015         Gnum2 = 0;
3016         if(a > 0)
3017             Gnum2 = MS.guildListRegistNum21 + arc4random()%(MS.guildListRegistNum22 - MS.guildListRegistNum21+1);
3018         else
3019             Gnum2 = MS.guildListRegistNum22;
3020         
3021         if(Gnum2 > GCnum2+1)
3022             Gnum2 = GCnum2;
3023         }
3024         int n = 0;
3025         
3026         guildc = 0;
3027         saveGuildList = calloc((GCnum2+1), sizeof(int));
3028         if(!guildRE2) GuildDisp2 = calloc(Gnum2, sizeof(int));
3029         for(int i = 0;i < Gnum2;i++){
3030             if(!guildRE2){
3031                 n = [self chooseGuildList:GuildChosen2 gcnum:GCnum2];
3032                 if(n == -1)
3033                     return false;
3034                 *(GuildDisp2 + i) = *(GuildChosen2 + n);
3035             }
3036             
3037             if(*(GuildDisp2 + i) <= 0)
3038                 break;
3039             
3040             NSMutableDictionary* dict = [NSMutableDictionary new];
3041             [dict setValue:[NSString stringWithFormat:@"%@", UC[*(GuildDisp2 + i)-1].name] forKey:@"name"];
3042             [dict setValue:[NSString stringWithFormat:@"%g", UC[*(GuildDisp2 + i)-1].S_M.HP] forKey:@"HP"];
3043             [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"];
3044             [dict setValue:UC[*(GuildDisp2 + i)-1].img forKey:@"img"];
3045             
3046             
3047             [self willChangeValueForKey:@"CResearchListMA"];
3048             [CResearchListMA addObject:dict];
3049             [self didChangeValueForKey:@"CResearchListMA"];
3050         }
3051         
3052         int k = 0;
3053         B->R = Rtop;
3054         while (B->R) {
3055             B->R = B->R->next;
3056             k++;
3057         }
3058         
3059         for(int i = k;i <= crCRL;i++){
3060             
3061             [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ATK]];
3062             [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.DEF]];
3063             [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", UC[*(GuildDisp2 + i - k)-1].S_M.CAP]];
3064             [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.ACU]];
3065             [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", UC[*(GuildDisp2 + i - k)-1].S_M.EVA]];
3066             [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", UC[*(GuildDisp2 + i - k)-1].S_M.MOV]];
3067             [researchIMG setImage:UC[*(GuildDisp2 + i - k)-1].imgb];
3068             [researchIMG setImageScaling:NSScaleToFit];
3069             
3070         }B->R = Rtop;
3071         
3072         
3073         guildRE2 = true;
3074     }
3075     
3076     
3077     
3078     
3079     
3080     
3081     
3082     
3083     return true;
3084 }
3085 -(int)chooseGuildList:(int*)value gcnum:(int)gcnum{
3086
3087     int a = 0;
3088     while(1){
3089         bool sameFlag = false;
3090         bool sameFlag2 = false;
3091         
3092         if(guildc >= gcnum+1){
3093             a = -1;
3094             break;
3095         }
3096         
3097         a = arc4random()%(gcnum+1);
3098         
3099         for(int i = 0;i < guildc;i++){
3100             if(*(saveGuildList+i) == a){
3101                 sameFlag2 = true;
3102                 break;
3103             }
3104         }
3105         
3106         if(sameFlag2)
3107             continue;
3108         
3109         *(saveGuildList+guildc) = a;
3110         
3111         guildc++;
3112         
3113         U = UTop;
3114         while(U){
3115             if([UC[*(value + a)-1].nameID isEqualToString:U->C.nameID]){
3116                 sameFlag = true;
3117                 break;
3118             }
3119             U = U->next;
3120         }U = UTop;
3121         
3122         if(!sameFlag)
3123             break;
3124     }
3125
3126
3127     return a;
3128 }
3129
3130 -(void)initGuildList{
3131
3132     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
3133     
3134     GuildChosen1 = calloc(UCN, sizeof(int));
3135     GuildChosen2 = calloc(UCN, sizeof(int));
3136
3137     GCnum1 = -1;
3138     for (int i = 0;i < UCN;i++) {
3139         if(MS.guildListRegist[i]){
3140             GCnum1++;
3141             *(GuildChosen1 + GCnum1) = i+1;
3142         }
3143     }
3144     GCnum2 = -1;
3145     for (int i = 0;i < UCN;i++) {
3146         if(MS.guildListRegist2[i]){
3147             GCnum2++;
3148             *(GuildChosen2 + GCnum2) = i+1;
3149         }
3150     }
3151
3152 }
3153
3154
3155 -(void)SetMenu{
3156     
3157     [self setCommandPanel];
3158     [menuPanel makeKeyAndOrderFront:nil];
3159 }
3160
3161 -(IBAction)pushMove:(id)sender{menuDisplayFlag = false;
3162     [menuPanel close];
3163     moveFlag = true;
3164     attackFlag = false;
3165     createFlag = false;
3166     summonFlag = false;
3167 }
3168 -(IBAction)pushAttack:(id)sender{menuDisplayFlag = false;
3169     [menuPanel close];
3170     attackFlag = true;
3171     moveFlag = false;
3172     windowPoint.x = [mapWindow frame].origin.x;
3173     windowPoint.y = [mapWindow frame].origin.y;
3174     [atkPanel setFrameOrigin:windowPoint];
3175     
3176     U = UTop;
3177     while (!(AUN[1] == U->number)) {
3178         U = U->next;
3179     }
3180     
3181     if(U->chipNumberL >= 0){
3182         U = UTop;
3183         [self initCAttackList2];
3184         [self initCAttackSelect2];
3185     }
3186     else if(U->chipNumber >= 0) {
3187         U = UTop;
3188         [self initCAttackList];
3189         [self initCAttackSelect];
3190     }
3191     U = UTop;
3192     [atkPanel makeKeyAndOrderFront:nil];
3193 }
3194 -(IBAction)pushStandby:(id)sender{menuDisplayFlag = false;
3195     
3196     U = UTop;
3197     
3198     while (U->number != wtUnitNum) {
3199         U = U->next;
3200     }
3201     
3202     if(!wtMovedFlag && !wtAttackedFlag){
3203         U->C.S_C.WT = floor(U->C.S_M.WT/4 + 0.5);
3204     }else if(wtMovedFlag && wtAttackedFlag){
3205         U->C.S_C.WT =  floor(U->C.S_M.WT + 0.5);
3206     }else if(wtMovedFlag){
3207         U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
3208     }else if(wtAttackedFlag){
3209         U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
3210     }
3211     
3212     BTop = B;
3213     while (B) {
3214         if(B->x == possionX && B->y == possionY && B->C.capture){
3215             buildCaptureFlag = true;
3216             unitMoveEndFlag = true;
3217         }
3218         B = B->next;
3219     }B = BTop;
3220     
3221     U = UTop;
3222     
3223     wtRdy = false;
3224     wtRdy2 = false;
3225     pushStanbyFlag = true;
3226     pussyLoopFlag = false;
3227     [menuPanel close];
3228 }
3229 -(IBAction)pushCreate:(id)sender{menuDisplayFlag = false;
3230     [menuPanel close];
3231     createFlag = true;
3232     moveFlag = false;
3233     
3234     windowPoint.x = [mapWindow frame].origin.x;
3235     windowPoint.y = [mapWindow frame].origin.y;
3236     [createPanel setFrameOrigin:windowPoint];
3237     
3238     [self initBCreateList];
3239     [createPanel makeKeyAndOrderFront:nil];
3240 }
3241
3242 -(IBAction)pushSummon:(id)sender{menuDisplayFlag = false;
3243     [menuPanel close];
3244     summonFlag = true;
3245     moveFlag = false;
3246     
3247     windowPoint.x = [mapWindow frame].origin.x;
3248     windowPoint.y = [mapWindow frame].origin.y;
3249     [summonPanel setFrameOrigin:windowPoint];
3250     
3251     [self initCSummonList];
3252     [summonPanel makeKeyAndOrderFront:nil];
3253 }
3254
3255
3256
3257 -(void)initStatusWindow{
3258
3259     U = UTop;
3260
3261     [STIV setImage:Uselected->C.imgb];
3262     [STnameTF setStringValue:Uselected->C.name];
3263     [STclassTF setStringValue:Uselected->C.nameClass];
3264     [SThpTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->C.S_C.HP, Uselected->C.S_M.HP]];
3265     [STmpTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", Uselected->C.S_C.MP, Uselected->C.S_M.MP]];
3266     [STatkTF setStringValue:[NSString stringWithFormat:@"ATK %g", Uselected->C.S_C.ATK]];
3267     [STdefTF setStringValue:[NSString stringWithFormat:@"DEF %g", Uselected->C.S_C.DEF]];
3268     [STcapTF setStringValue:[NSString stringWithFormat:@"CAP %g", Uselected->C.S_C.CAP]];
3269     [STacuTF setStringValue:[NSString stringWithFormat:@"ACU %g", Uselected->C.S_C.ACU]];
3270     [STevaTF setStringValue:[NSString stringWithFormat:@"EVA %g", Uselected->C.S_C.EVA]];
3271     [STstrTF setStringValue:[NSString stringWithFormat:@"STR %g", Uselected->C.S_C.STR]];
3272     [STvitTF setStringValue:[NSString stringWithFormat:@"VIT %g", Uselected->C.S_C.VIT]];
3273     [STagiTF setStringValue:[NSString stringWithFormat:@"AGI %g", Uselected->C.S_C.AGI]];
3274     [STdexTF setStringValue:[NSString stringWithFormat:@"DEX %g", Uselected->C.S_C.DEX]];
3275     [STmenTF setStringValue:[NSString stringWithFormat:@"MEN %g", Uselected->C.S_C.MEN]];
3276     [STintTF setStringValue:[NSString stringWithFormat:@"INT %g", Uselected->C.S_C.INT]];
3277     [STmelTF setStringValue:[NSString stringWithFormat:@"MEL %g", Uselected->C.S_C.MEL]];
3278     [STmisTF setStringValue:[NSString stringWithFormat:@"MIS %g", Uselected->C.S_C.MIS]];
3279     [SThitTF setStringValue:[NSString stringWithFormat:@"HIT %g", Uselected->C.S_C.HIT]];
3280     [STdodTF setStringValue:[NSString stringWithFormat:@"DOD %g", Uselected->C.S_C.DOD]];
3281     [STreaTF setStringValue:[NSString stringWithFormat:@"REA %g", Uselected->C.S_C.REA]];
3282     [STskiTF setStringValue:[NSString stringWithFormat:@"SKI %g", Uselected->C.S_C.SKI]];
3283     [STvigTF setStringValue:[NSString stringWithFormat:@"VIG %d", Uselected->C.S_C.vigor]];
3284
3285
3286
3287
3288
3289
3290
3291     U = UTop;
3292 }
3293
3294 -(IBAction)pushStatus:(id)sender{menuDisplayFlag = false;
3295     
3296     [self initStatusWindow];
3297     
3298     windowPoint.x = [mapWindow frame].origin.x;
3299     windowPoint.y = [mapWindow frame].origin.y;
3300     [STwindow setFrameOrigin:windowPoint];
3301     [STwindow makeKeyAndOrderFront:nil];
3302     
3303     
3304     
3305     [menuPanel close];
3306 }
3307
3308 -(IBAction)STsubmit:(id)sender{
3309
3310     [STwindow close];
3311 }
3312
3313 -(IBAction)pushCancel:(id)sender{menuDisplayFlag = false;
3314     moveFlag = false;
3315     attackFlag = false;
3316     summonFlag = false;
3317     [menuPanel close];
3318 }
3319 -(IBAction)pushCancelCAL:(id)sender{
3320     attackFlag = false;
3321     [atkPanel close];
3322 }
3323
3324 -(IBAction)pushCancelBCL:(id)sender{
3325     createFlag = false;
3326     [createPanel close];
3327 }
3328
3329 -(IBAction)pushCancelCSL:(id)sender{
3330     summonFlag = false;
3331     [summonPanel close];
3332 }
3333
3334 -(void)addBuildStatus{
3335     //おまんちん
3336     
3337     registerNumB++;
3338     
3339     if(registerNumB == 1){
3340         B = calloc(1, sizeof(BUILD));
3341         BTop = B;
3342     }
3343     
3344     int omgCnt = 0;
3345     B = BTop;
3346     if(B)
3347     while (B->next) {omgCnt++;
3348         B = B->next;
3349     }
3350     if(registerNumB != 1){
3351         B->next = calloc(1, sizeof(BUILD));
3352         if(registerNumB == 2)
3353             BTop = B;
3354         B = B->next;
3355     }
3356         B->next = NULL;
3357     
3358     B->number = registerNumB;
3359     
3360     
3361     B->chipNumber = BC[buildNum[possionX][possionY]].chipNumb;
3362     B->x = possionX;
3363     B->y = possionY;
3364     B->C = BC[buildNum[possionX][possionY]];
3365     B->img = [BC[buildNum[possionX][possionY]].img retain];
3366     unitColorInitFlag = true;
3367     
3368     if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
3369         B->team = 0;
3370         if(unitTeam[possionX][possionY] == 0){
3371             U->joinArmyFromNext = true;
3372             U->persuasion = true;
3373         }
3374     }
3375     if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
3376         B->team = 2;
3377     }
3378     if(buildTeam[possionX][possionY] == 4 || buildTeam[possionX][possionY] == 5){
3379         B->team = 1;
3380     }
3381     if(buildTeam[possionX][possionY] == -1){
3382         B->team = -1;
3383
3384     }
3385     
3386     B = BTop;
3387 }
3388
3389
3390 -(void)addUnitStatus{
3391     int omgCnt = 0;
3392     UTop = U;
3393     while (U->next) {omgCnt++;
3394         U = U->next;
3395     }
3396     U->next = calloc(1, sizeof(UNIT));
3397     U = U->next;
3398     U->next = NULL;
3399     if(omgCnt == 0) UTop = U;
3400     U->number = registerNum;
3401     
3402     for(int i = 0;i < UCN;i++){
3403         if([U->C.nameID isEqualToString:UC[i].nameID])
3404             U->chipNumber = i;
3405     }
3406     
3407     U->chipNumber = unitNum[possionX][possionY];
3408     U->chipNumberL = loadNum[possionX][possionY];
3409     U->C.chipNumb = unitNum[possionX][possionY];
3410     U->CL.chipNumb = loadNum[possionX][possionY];
3411     U->x = possionX;
3412     U->y = possionY;
3413     U->C = *BRU;
3414                 if(unitTeam[possionX][possionY] == 0 || unitTeam[possionX][possionY] == 1){
3415                     U->team = 0;
3416                     if(unitTeam[possionX][possionY] == 1){
3417                         U->joinArmyFromNext = true;
3418                         U->persuasion = true;
3419                     }
3420                     
3421                     if(MF[MFselectedRow+1].MS.playerSet1 == 2){
3422                         U->CPU = true;
3423                     }
3424                 }
3425                 if(unitTeam[possionX][possionY] == 2 || unitTeam[possionX][possionY] == 3){
3426                     U->team = 2;
3427                     if(unitTeam[possionX][possionY] == 3){
3428                         U->joinArmyFromNext = true;
3429                         U->persuasion = true;
3430                     }
3431                     
3432                     if(MF[MFselectedRow+1].MS.playerSet2 == 2){
3433                         U->CPU = true;
3434                     }
3435                 }
3436                 if(unitTeam[possionX][possionY] == 4 || unitTeam[possionX][possionY] == 5){
3437                     U->team = 1;
3438                     if(unitTeam[possionX][possionY] == 5){
3439                         U->joinArmyFromNext = true;
3440                         U->persuasion = true;
3441                     }
3442                     U->CPU = true;
3443                 }
3444                 if(unitTeam[possionX][possionY] == -1){
3445                     U->team = -1;
3446                     if(unitTeam[possionX][possionY] == 0){
3447                         U->joinArmyFromNext = false;
3448                         U->persuasion = true;
3449                     }
3450                     U->CPU = true;
3451                 }
3452
3453     
3454                 [self SetUnitStatus:unitNum[possionX][possionY]];
3455     registerNum++;
3456     U = UTop;
3457 }
3458
3459 -(void)addSummonStatus{
3460     
3461     int omgCnt = 0;
3462     UTop = U;
3463     while (U->next) {omgCnt++;
3464         U = U->next;
3465     }
3466     U->next = calloc(1, sizeof(UNIT));
3467     U = U->next;
3468     U->next = NULL;
3469     if(omgCnt == 0) UTop = U;
3470     
3471     
3472     U->x = possionX;
3473     U->y = possionY;
3474
3475     U->C = CSLUC;
3476     if(unitTeam[CSLU->x][CSLU->y] == 0 || unitTeam[CSLU->x][CSLU->y] == 1){
3477         U->team = 0;
3478         if(unitTeam[CSLU->x][CSLU->y] == 1){
3479             U->joinArmyFromNext = true;
3480             U->persuasion = true;
3481         }
3482     }
3483     if(unitTeam[CSLU->x][CSLU->y] == 2 || unitTeam[CSLU->x][CSLU->y] == 3){
3484         U->team = 2;
3485         if(unitTeam[CSLU->x][CSLU->y] == 3){
3486             U->joinArmyFromNext = true;
3487             U->persuasion = true;
3488         }
3489     }
3490     if(unitTeam[CSLU->x][CSLU->y] == 4 || unitTeam[CSLU->x][CSLU->y] == 5){
3491         U->team = 1;
3492         if(unitTeam[CSLU->x][CSLU->y] == 5){
3493             U->joinArmyFromNext = true;
3494             U->persuasion = true;
3495         }
3496     }
3497     if(unitTeam[CSLU->x][CSLU->y] == -1){
3498         U->team = -1;
3499         if(unitTeam[CSLU->x][CSLU->y] == 0){
3500             U->joinArmyFromNext = false;
3501             U->persuasion = true;
3502         }
3503     }
3504     
3505     [self SetUnitStatus:unitNum[possionX][possionY]];
3506     
3507     for(int i = 0;i < UCN;i++){
3508         if([U->C.nameID isEqualToString:UC[i].nameID])
3509             U->chipNumber = i;
3510     }
3511     for(int i = 0;i < LCN;i++){
3512         if([U->CL.nameID isEqualToString:LC[i].nameID])
3513             U->chipNumberL = i;
3514     }
3515     for(int i = 0;i < UCN;i++){
3516         if([U->C.nameID isEqualToString:UC[i].nameID])
3517             U->C.chipNumb = i;
3518     }
3519     for(int i = 0;i < LCN;i++){
3520         if([U->CL.nameID isEqualToString:LC[i].nameID])
3521             U->CL.chipNumb = i;
3522     }
3523     
3524     registerNum++;
3525     U = UTop;
3526
3527 }
3528
3529 -(void)initUnitStatus{
3530     registerNum = 1;
3531     U = NULL;
3532     UTop = NULL;
3533     for(int i=1;i <= chipHeight;i++){
3534         for(int j=1;j<= chipWidth;j++){
3535             if(unitNum[j][i] >= 0 || loadNum[j][i] >= 0){
3536                 if(registerNum == 1){
3537                     U = calloc(1, sizeof(UNIT));
3538                     UTop = U;
3539                 }
3540                 if(registerNum > 1)
3541                     U = U->next;
3542                 U->x = j;
3543                 U->y = i;
3544                 U->number = registerNum;
3545                 U->chipNumber = unitNum[j][i];
3546                 U->chipNumberL = loadNum[j][i];
3547                 U->C.chipNumb = U->chipNumber;
3548                 U->CL.chipNumb = U->chipNumberL;
3549                 
3550                 registerNum++;
3551                 if(unitTeam[j][i] == 0 || unitTeam[j][i] == 1){
3552                     U->team = 0;
3553                     if(unitTeam[j][i] == 1){
3554                         U->joinArmyFromNext = true;
3555                         U->persuasion = true;
3556                     }
3557                     if(MF[MFselectedRow+1].MS.playerSet1 == 2)
3558                         U->CPU = true;
3559                 }
3560                 if(unitTeam[j][i] == 2 || unitTeam[j][i] == 3){
3561                     U->team = 2;
3562                     if(unitTeam[i][j] == 2){
3563                         U->joinArmyFromNext = true;
3564                         U->persuasion = true;
3565                     }
3566                     if(MF[MFselectedRow+1].MS.playerSet2 == 2)
3567                         U->CPU = true;
3568                 }
3569                 if(unitTeam[j][i] == 4 || unitTeam[j][i] == 5){
3570                     U->team = 1;
3571                     if(unitTeam[j][i] == 5){
3572                         U->joinArmyFromNext = true;
3573                         U->persuasion = true;
3574                     }
3575                     U->CPU = true;
3576                 }
3577                 if(unitTeam[j][i] == -1){
3578                     U->team = -1;
3579                     if(unitTeam[j][i] == -1){
3580                         U->joinArmyFromNext = false;
3581                         U->persuasion = true;
3582                     }
3583                     U->CPU = true;
3584                 }
3585                 if(unitNum[j][i] >= 0) [self SetUnitStatus:unitNum[j][i]];
3586                 if(loadNum[j][i] >= 0) [self SetUnitStatus2:loadNum[j][i]];
3587                 
3588                 U->next = calloc(1, sizeof(UNIT));
3589                 U->atkRange = 0;
3590                 
3591                 U->ix = U->x;
3592                 U->iy = U->y;
3593                 U->iz = 0;
3594                 
3595                 UNIT *Ucrnt = U;
3596                 
3597                 U = UTop;
3598                 while(U){
3599                     if(Ucrnt->x == U->x && Ucrnt->y == U->y){
3600                         Ucrnt->iz++;
3601                     }
3602                     U = U->next;
3603                 }
3604                 
3605                 U = Ucrnt;
3606             }
3607         
3608         }
3609     }
3610     
3611     if(U) U->next = NULL;
3612     
3613     U = UTop;
3614 }
3615
3616 -(void)initBuildStatus{
3617     B = NULL;
3618     BTop = NULL;
3619     for(int i=1;i <= chipHeight;i++){
3620         for(int j=1;j<= chipWidth;j++){
3621             if(buildNum[j][i] >= 0){
3622                 registerNumB++;
3623                 if(registerNumB == 1){
3624                     B = calloc(1, sizeof(BUILD));
3625                     BTop = B;
3626                 }
3627                 if(registerNumB > 1)
3628                     B = B->next;
3629                 B->x = j;
3630                 B->y = i;
3631                 B->number = registerNumB;
3632                 B->chipNumber = buildNum[j][i];
3633                 B->makeLv = 1;
3634                 if(buildTeam[j][i] == 0 || buildTeam[j][i] == 1){
3635                     B->team = 0;
3636
3637                 }
3638                 if(buildTeam[j][i] == 2 || buildTeam[j][i] == 3){
3639                     B->team = 2;
3640
3641                 }
3642                 if(buildTeam[j][i] == 4 || buildTeam[j][i] == 5){
3643                     B->team = 1;
3644
3645                 }
3646                 if(buildTeam[j][i] == -1){
3647                     B->team = -1;
3648
3649                 }
3650                 //[self SetUnitStatus:unitNum[j][i]];
3651                 
3652                 B->C = BC[buildNum[j][i]];
3653                 
3654                 B->next = calloc(1, sizeof(BUILD));
3655
3656             }
3657             
3658         }
3659     }
3660     if(B) B->next = NULL;
3661     B = BTop;
3662     
3663 }
3664
3665 -(void)SetUnitStatus:(int)UN{
3666     
3667     U->C = UC[UN];
3668     U->C.S_C.vigor = 100;
3669     
3670     ATTACK *Atop;
3671     ATTACK *AtopE1;
3672     ATTACK *AtopE2;
3673     ATTACK *UAtop;
3674     Atop = UC[UN].A;
3675     AtopE1 = UC[UN].eHandL.A;
3676     AtopE2 = UC[UN].eHandR.A;
3677     U->C.A = calloc(1, sizeof(ATTACK));
3678     UAtop = U->C.A;
3679     
3680     bool ow1 = false;
3681     bool ow2 = false;
3682     
3683     while(UC[UN].eHandR.A != NULL){ow1 = true;
3684         *U->C.A = *UC[UN].eHandR.A;
3685         U->C.A->next = calloc(1, sizeof(ATTACK));
3686         U->C.A->next->next = NULL;
3687         if(UC[UN].eHandR.A->next != NULL) U->C.A = U->C.A->next;
3688         UC[UN].eHandR.A = UC[UN].eHandR.A->next;
3689         U->C.attackListNum++;
3690     }
3691     UC[UN].eHandR.A = AtopE2;
3692     
3693     
3694     if(ow1) {
3695         U->C.A = U->C.A->next;
3696         ow1 = false;
3697     }
3698     while(UC[UN].eHandL.A != NULL){ow2 = true;
3699         *U->C.A = *UC[UN].eHandL.A;
3700         U->C.A->next = calloc(1, sizeof(ATTACK));
3701         U->C.A->next->next = NULL;
3702         if(UC[UN].eHandL.A->next != NULL) U->C.A = U->C.A->next;
3703         UC[UN].eHandL.A = UC[UN].eHandL.A->next;
3704         U->C.attackListNum++;
3705     }
3706     UC[UN].eHandL.A = AtopE1;
3707     
3708     if(ow2) {
3709         U->C.A = U->C.A->next;
3710         ow2 = false;
3711     }
3712     while(UC[UN].A != NULL){
3713         *U->C.A = *UC[UN].A;
3714         U->C.A->next = calloc(1, sizeof(ATTACK));
3715         U->C.A->next->next = NULL;
3716         if(UC[UN].A->next != NULL) U->C.A = U->C.A->next;
3717         UC[UN].A = UC[UN].A->next;
3718     }
3719     U->C.A->next = NULL;
3720     UC[UN].A = Atop;
3721     U->C.A = UAtop;
3722     if(U->C.A) if(!U->C.A->name)
3723         U->C.A = NULL;
3724     
3725 }
3726
3727 -(void)SetUnitStatus2:(int)UN{
3728     
3729     U->CL = LC[UN];
3730     
3731     ATTACK *Atop;
3732     ATTACK *UAtop;
3733     Atop = LC[UN].A;
3734     U->CL.A = calloc(1, sizeof(ATTACK));
3735     UAtop = U->CL.A;
3736     while(LC[UN].A != NULL){
3737         *U->CL.A = *LC[UN].A;
3738         U->CL.A->next = calloc(1, sizeof(ATTACK));
3739         U->CL.A->next->next = NULL;
3740         if(LC[UN].A->next != NULL) U->CL.A = U->CL.A->next;
3741         LC[UN].A = LC[UN].A->next;
3742     }
3743     U->CL.A->next = NULL;
3744     LC[UN].A = Atop;
3745     U->CL.A = UAtop;
3746     
3747 }
3748
3749
3750 -(void)initCAttackList2{
3751     crCAL = 0;
3752     
3753     CAttackListMA = [NSMutableArray new];
3754     
3755     [self willChangeValueForKey:@"CAttackListMA"];
3756     [CAttackListMA removeAllObjects];
3757     [self didChangeValueForKey:@"CAttackListMA"];
3758     
3759     U = UTop;
3760     if(!battleSet2PushedFlag){
3761         ATTACK *Atop;
3762         while (!(AUN[1] == U->number)) {
3763             U = U->next;
3764         }
3765         Atop = U->CL.A;
3766         for(int i = 0;i < U->CL.attackListNum;i++){
3767             if(!U->CL.A) break;
3768             NSMutableDictionary* dict = [NSMutableDictionary new];
3769             [dict setValue:[NSString stringWithFormat:@"%@", U->CL.A->name] forKey:@"name"];
3770             [dict setValue:[NSString stringWithFormat:@"%g", U->CL.A->totalD] forKey:@"atk"];
3771             if(U->CL.A->rangeA != U->CL.A->rangeB){
3772                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->CL.A->rangeA, U->CL.A->rangeB] forKey:@"range"];
3773             }else{
3774                 [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->rangeA] forKey:@"range"];
3775             }
3776             [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->hitPercent] forKey:@"hit"];
3777             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3778             
3779             [self willChangeValueForKey:@"CAttackListMA"];
3780             [CAttackListMA addObject:dict];
3781             [self didChangeValueForKey:@"CAttackListMA"];
3782             
3783             U->CL.A = U->CL.A->next;
3784         }
3785         
3786         U->CL.A = Atop;
3787     }else{
3788         ATTACK *Atop;
3789         while (!(DUN[1] == U->number)) {
3790             U = U->next;
3791         }
3792         Atop = U->CL.A;
3793         for(int i = 0;i < U->CL.attackListNum;i++){
3794             
3795             if(!U->CL.A){
3796                 U->CL.attackListNum = i;
3797                 break;
3798             }
3799             NSMutableDictionary* dict = [NSMutableDictionary new];
3800             [dict setValue:[NSString stringWithFormat:@"%@", U->CL.A->name] forKey:@"name"];
3801             [dict setValue:[NSString stringWithFormat:@"%g", U->CL.A->totalD] forKey:@"atk"];
3802             if(U->CL.A->rangeA != U->CL.A->rangeB){
3803                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->CL.A->rangeA, U->CL.A->rangeB] forKey:@"range"];
3804             }else{
3805                 [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->rangeA] forKey:@"range"];
3806             }
3807             [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->hitPercent] forKey:@"hit"];
3808             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3809             
3810             [self willChangeValueForKey:@"CAttackListMA"];
3811             [CAttackListMA addObject:dict];
3812             [self didChangeValueForKey:@"CAttackListMA"];
3813             
3814             U->CL.A = U->CL.A->next;
3815         }
3816         
3817         U->CL.A = Atop;
3818         
3819     }
3820     U = UTop;
3821     
3822     [CAttackListAC setSelectionIndex:crCAL];
3823     
3824     [self initCAttackSelect2];
3825
3826
3827
3828
3829 }
3830
3831 -(void)initCAttackList{
3832     crCAL = 0;
3833     CAttackListMA = [NSMutableArray new];
3834     
3835     [self willChangeValueForKey:@"CAttackListMA"];
3836     [CAttackListMA removeAllObjects];
3837     [self didChangeValueForKey:@"CAttackListMA"];
3838
3839     U = UTop;
3840     if(!battleSet2PushedFlag){
3841         ATTACK *Atop;
3842     while (!(AUN[1] == U->number)) {
3843         U = U->next;
3844     }
3845     Atop = U->C.A;
3846         for(int i = 0;i < U->C.attackListNum;i++){
3847             if(!U->C.A) {
3848                 U->C.attackListNum = i;
3849                 break;
3850             };
3851         NSMutableDictionary* dict = [NSMutableDictionary new];
3852         [dict setValue:[NSString stringWithFormat:@"%@", U->C.A->name] forKey:@"name"];
3853         [dict setValue:[NSString stringWithFormat:@"%g", U->C.A->totalD] forKey:@"atk"];
3854         if(U->C.A->rangeA != U->C.A->rangeB){
3855             [dict setValue:[NSString stringWithFormat:@"%d-%d", U->C.A->rangeA, U->C.A->rangeB] forKey:@"range"];
3856         }else{
3857             [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->rangeA] forKey:@"range"];
3858         }
3859         [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->hitPercent] forKey:@"hit"];
3860         //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3861     
3862         [self willChangeValueForKey:@"CAttackListMA"];
3863         [CAttackListMA addObject:dict];
3864         [self didChangeValueForKey:@"CAttackListMA"];
3865         
3866         U->C.A = U->C.A->next;
3867     }
3868     
3869     U->C.A = Atop;
3870     }else{
3871         
3872         ATTACK *Atop;
3873         while (!(DUN[1] == U->number)) {
3874             U = U->next;
3875         }
3876         Atop = U->C.A;
3877         for(int i = 0;i < U->C.attackListNum;i++){
3878             NSMutableDictionary* dict = [NSMutableDictionary new];
3879             [dict setValue:[NSString stringWithFormat:@"%@", U->C.A->name] forKey:@"name"];
3880             [dict setValue:[NSString stringWithFormat:@"%g", U->C.A->totalD] forKey:@"atk"];
3881             if(U->C.A->rangeA != U->C.A->rangeB){
3882                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->C.A->rangeA, U->C.A->rangeB] forKey:@"range"];
3883             }else{
3884                 [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->rangeA] forKey:@"range"];
3885             }
3886             [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->hitPercent] forKey:@"hit"];
3887             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3888             
3889             [self willChangeValueForKey:@"CAttackListMA"];
3890             [CAttackListMA addObject:dict];
3891             [self didChangeValueForKey:@"CAttackListMA"];
3892             
3893             U->C.A = U->C.A->next;
3894         }
3895         
3896         U->C.A = Atop;
3897     
3898     }
3899     U = UTop;
3900     
3901     [CAttackListAC setSelectionIndex:crCAL];
3902     
3903     [self initCAttackSelect];
3904 }
3905
3906 -(void)initBCreateList{
3907     BCreateListMA = [NSMutableArray new];
3908     
3909     [self willChangeValueForKey:@"BCreateListMA"];
3910     [BCreateListMA removeAllObjects];
3911     [self didChangeValueForKey:@"BCreateListMA"];
3912     buildSkillFlag = false;
3913     
3914     U = UTop;
3915     SKILL *Stop;
3916     while (!(AUN[1] == U->number)) {
3917         U = U->next;
3918     }
3919     Stop = U->C.S;
3920     if(!U->C.S) {
3921         U = UTop;
3922         return;
3923     }
3924     while (U->C.S->type != 1 && U->C.S->next) {
3925         U->C.S = U->C.S->next;
3926     }
3927     if(U->C.S->type != 1) {
3928         U->C.S = Stop;
3929         U = UTop;
3930         return;
3931     }
3932     for(int i = 0;U->C.S->list[i] > 0;i++){
3933         NSMutableDictionary* dict = [NSMutableDictionary new];
3934         [dict setValue:[NSString stringWithFormat:@"%@", BC[U->C.S->list[i]-1].name] forKey:@"name"];
3935         [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d",
3936                         BC[U->C.S->list[i]-1].Csupply, BC[U->C.S->list[i]-1].Cfood, BC[U->C.S->list[i]-1].Cmoney] forKey:@"cost"];
3937         [dict setValue:BC[U->C.S->list[i]-1].img forKey:@"img"];
3938         
3939         [self willChangeValueForKey:@"BCreateListMA"];
3940         [BCreateListMA addObject:dict];
3941         [self didChangeValueForKey:@"BCreateListMA"];
3942         
3943         buildSkillFlag = true;
3944     }
3945     U->C.S = Stop;
3946     U = UTop;
3947 }
3948
3949 -(void)initCSummonList{
3950     CSummonListMA = [NSMutableArray new];
3951     
3952     [self willChangeValueForKey:@"CSummonListMA"];
3953     [CSummonListMA removeAllObjects];
3954     [self didChangeValueForKey:@"CSummonListMA"];
3955     
3956     summonSkillFlag = false;
3957     
3958     U = UTop;
3959     SKILL *Stop;
3960     while (!(AUN[1] == U->number)) {
3961         U = U->next;
3962     }
3963     Stop = U->C.S;
3964     if(!U->C.S) {
3965         U = UTop;
3966         return;
3967     }
3968     while (U->C.S->type != 2 && U->C.S->next) {
3969         U->C.S = U->C.S->next;
3970     }
3971     if(U->C.S->type != 2) {
3972         U->C.S = Stop;
3973         U = UTop;
3974         return;
3975     }
3976     for(int i = 0;U->C.S->list[i] > 0;i++){
3977         NSMutableDictionary* dict = [NSMutableDictionary new];
3978         [dict setValue:[NSString stringWithFormat:@"%@", UC[U->C.S->list[i]-1].nameClass] forKey:@"name"];
3979         [dict setValue:[NSString stringWithFormat:@"%g", UC[U->C.S->list[i]-1].S_M.HP] forKey:@"HP"];
3980         [dict setValue:[NSString stringWithFormat:@"%g", U->C.S->cost[i]] forKey:@"cost"];
3981         [dict setValue:UC[U->C.S->list[i]-1].img forKey:@"img"];
3982         
3983         [self willChangeValueForKey:@"CSummonListMA"];
3984         [CSummonListMA addObject:dict];
3985         [self didChangeValueForKey:@"CSummonListMA"];
3986         
3987         summonSkillFlag = true;
3988     }
3989     U->C.S = Stop;
3990     U = UTop;
3991     
3992 }
3993
3994
3995 -(void)AttackDisplay{
3996
3997     if(battleRdy) return;
3998     
3999     U = UTop;
4000     while (!(AUN[1] == U->number)) {
4001         U = U->next;
4002     }
4003     [bplayer1 setImage:U->C.imgb];
4004     [bplayer1 setImageScaling:NSScaleToFit];
4005     [nplayer1 setStringValue:U->C.name];
4006     [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4007     [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
4008     [iplayer1 setImage:MC[chipNum[U->x][U->y]].img];
4009     [mplayer1 setStringValue:MC[chipNum[U->x][U->y]].name];
4010     [rplayer1 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U->x][U->y]].dmgfix]];
4011     
4012     U = UTop;
4013     
4014     
4015     U = UTop;
4016     while (!(DUN[1] == U->number)) {
4017         U = U->next;
4018     }
4019     [bplayer2 setImage:U->C.imgb];
4020     [bplayer1 setImageScaling:NSScaleToFit];
4021     [nplayer2 setStringValue:U->C.name];
4022     [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4023     [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
4024     [iplayer2 setImage:MC[chipNum[U->x][U->y]].img];
4025     [mplayer2 setStringValue:MC[chipNum[U->x][U->y]].name];
4026     [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U->x][U->y]].dmgfix]];
4027     U = UTop;
4028     
4029     [self AttackDisplay2];
4030     
4031     messageProcess = 0;
4032     [battleDialog setStringValue:@"攻撃開始!"];
4033     
4034     battleRdy = true;
4035
4036 }
4037
4038 -(void)AttackDisplay2{
4039
4040     U = UTop;
4041     
4042     while (!(DUN[1] == U->number)) {
4043         U = U->next;
4044     }
4045     U2 = U;
4046     U = UTop;
4047     while (!(AUN[1] == U->number)) {
4048         U = U->next;
4049     }
4050     
4051     
4052     if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){U = UTop;
4053     
4054         U = UTop;
4055         while (!(AUN[1] == U->number)) {
4056             U = U->next;
4057         }
4058         [bplayer1 setImage:U->CL.imgb];
4059         [bplayer1 setImageScaling:NSScaleToFit];
4060         [nplayer1 setStringValue:U->CL.name];
4061         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4062         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
4063         
4064         U = UTop;
4065         
4066         
4067         U = UTop;
4068         while (!(DUN[1] == U->number)) {
4069             U = U->next;
4070         }
4071         [bplayer2 setImage:U->CL.imgb];
4072         [bplayer1 setImageScaling:NSScaleToFit];
4073         [nplayer2 setStringValue:U->CL.name];
4074         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4075         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
4076         U = UTop;
4077     
4078     
4079     }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){U = UTop;
4080         U = UTop;
4081         while (!(AUN[1] == U->number)) {
4082             U = U->next;
4083         }
4084         [bplayer1 setImage:U->CL.imgb];
4085         [bplayer1 setImageScaling:NSScaleToFit];
4086         [nplayer1 setStringValue:U->CL.name];
4087         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4088         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
4089         
4090         U = UTop;
4091         
4092         
4093         U = UTop;
4094         while (!(DUN[1] == U->number)) {
4095             U = U->next;
4096         }
4097         [bplayer2 setImage:U->C.imgb];
4098         [bplayer1 setImageScaling:NSScaleToFit];
4099         [nplayer2 setStringValue:U->C.name];
4100         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4101         [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
4102         U = UTop;
4103         
4104         
4105         
4106         
4107     }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){U = UTop;
4108         U = UTop;
4109         while (!(AUN[1] == U->number)) {
4110             U = U->next;
4111         }
4112         [bplayer1 setImage:U->C.imgb];
4113         [bplayer1 setImageScaling:NSScaleToFit];
4114         [nplayer1 setStringValue:U->C.name];
4115         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4116         [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
4117         
4118         U = UTop;
4119         
4120         
4121         U = UTop;
4122         while (!(DUN[1] == U->number)) {
4123             U = U->next;
4124         }
4125         [bplayer2 setImage:U->CL.imgb];
4126         [bplayer1 setImageScaling:NSScaleToFit];
4127         [nplayer2 setStringValue:U->CL.name];
4128         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4129         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
4130         U = UTop;
4131     }
4132
4133
4134     U = UTop;
4135 }
4136
4137 -(void)setBattlePanel{
4138     //おまんちん
4139     U = UTop;
4140     
4141     while (!(DUN[1] == U->number)) {
4142         U = U->next;
4143     }
4144     U2 = U;
4145     U = UTop;
4146     while (!(AUN[1] == U->number)) {
4147         U = U->next;
4148     }
4149     
4150     if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
4151         U = UTop;
4152         [self setBattlePanelT2];
4153         return;
4154     }else if(U->chipNumberL >= 0 && U2->chipNumberL <= 0){
4155         U = UTop;
4156         [self setBattlePanelT3];
4157         return;
4158     }else if(U->chipNumberL <= 0 && U2->chipNumberL >= 0){
4159         U = UTop;
4160         [self setBattlePanelT4];
4161         return;
4162     }
4163     
4164     U = UTop;
4165     while (!(AUN[1] == U->number)) {
4166         U = U->next;
4167     }
4168     
4169     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 || MF[MFselectedRow+1].MS.playerSet2 == 2)){
4170         cpuModeBATTLEflag = false;
4171     int mostDmg = 0;
4172     int mostDmg2 = 0;
4173     int mostHit = 0;
4174     int mostNum = 0;
4175     int num = 0;
4176     ATTACK *aTop2 = U->C.A;
4177     int mpCost = 0;
4178     if(U->C.A)
4179         if(!U->C.A->D){
4180             U->C.A = NULL;
4181             aTop2 = U->C.A;
4182         }
4183         
4184         
4185         
4186     while(U->C.A){
4187         
4188         double urSupposedToGet;
4189         
4190         if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
4191         
4192         double asItIs;
4193         
4194         if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
4195         
4196         
4197         double oopsIsRight = 0;
4198         
4199         if(U->C.A){
4200             if(U->C.A->melee){
4201                 oopsIsRight = U->C.S_C.MEL;
4202             }else
4203                 oopsIsRight = U->C.S_C.MIS;
4204         }
4205         oopsIsRight = oopsIsRight/100;
4206         
4207         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4208         
4209         if(!U2->C.aura && U->C.A->D){
4210             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
4211                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4212             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
4213                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4214             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
4215                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4216             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
4217                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4218             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
4219                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4220             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
4221         }else if(U->C.A->D){
4222             double val = val = 1/log(3+U2->C.S_C.MP/64);
4223             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
4224                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4225             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
4226                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4227             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
4228                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4229             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
4230                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4231             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
4232                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4233             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
4234         }
4235         double val2 = log(3+U2->C.S_C.MP/64);
4236         if(U->C.aura){
4237             mostDmg2 = mostDmg2*val2;
4238         }
4239         if(U->C.A->D){
4240             if(U->C.A->D->fix == 2){
4241                 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;
4242                 
4243                 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;
4244                 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;
4245                 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;
4246                 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;
4247                 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;
4248                 
4249                 
4250             }else if(U->C.A->D->fix == 1){
4251                 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;
4252                 
4253                 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;
4254                 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;
4255                 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;
4256                 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;
4257                 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;
4258                 
4259             }else if(U->C.A->D->fix == 0){
4260                 
4261             }
4262         }
4263
4264         
4265         U2A = U->C.A;
4266         costVIG = U->C.A->vigor;
4267         UNIT *oops = U;
4268         U = U2;
4269         mostDmg2 = [self dmgResist:mostDmg2];
4270         
4271         //NSLog(@"crCAL1 %d", crCAL1);
4272         if(mostDmg2 < 0) mostDmg2 = 1;
4273         U = oops;
4274         if(U->C.A->D)
4275         if(mostDmg < mostDmg2 && U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4276             
4277             mostDmg = mostDmg2;
4278             
4279             //mostDmg = U->C.A->totalD;
4280             mostNum = num;
4281         }
4282         if(U->C.A->D)
4283         if(mostHit < U->C.A->hitPercent && hit < 50 && mostDmg/2 < mostDmg2 && U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4284             //mostDmg = U->C.A->totalD;
4285             mostHit = U->C.A->hitPercent;
4286             mostNum = num;
4287         }
4288         U->C.A = U->C.A->next;
4289         num++;
4290     }
4291     U->C.A = aTop2;
4292
4293         if(U->C.A->extent == 0 && mostNum >= 0 && !CPUmostDmgChoice){
4294             
4295             U->C.A = aTop2;
4296             crCAL1 = 0;
4297             for(int i = 0;i < mostNum;i++){
4298                 U->C.A = U->C.A->next;
4299                 crCAL1++;
4300             }
4301         }
4302         else{
4303         U->C.A = aTop2;
4304             for(int i = 0;i < crCAL1;i++){
4305                 U->C.A = U->C.A->next;
4306             }
4307         }
4308         
4309         CPUmostDmgChoice = false;
4310
4311    if(U->C.A){
4312         mostNumSub = mostNum;
4313         
4314        
4315         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4316        costVIG = U->C.A->vigor;
4317        
4318         if(U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange
4319            && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
4320             
4321         }else{
4322         
4323         }
4324         
4325     }U->C.A = aTop2;
4326     }
4327     U = UTop;
4328
4329     while (!(AUN[1] == U->number)) {
4330         U = U->next;
4331     }
4332     U2 = U;
4333     
4334     ATTACK *aTop = U->C.A;
4335     ATTACK *u2A;
4336     
4337     for(int i = 0;i < crCAL1;i++){
4338         U->C.A = U->C.A->next;
4339     }
4340     
4341     //NSLog(@"%@", U->C.A->name);
4342     
4343     if(battleSet1Flag){
4344         U->C.A = aTop;
4345         for (int i = 0;i < crCAL1;i++) {
4346             U->C.A = U->C.A->next;
4347         }
4348         
4349     }
4350     
4351     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4352     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4353     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4354     //NSLog(@"crCAL1 %d", crCAL1);
4355     if(U->C.A){
4356         [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
4357         
4358     }
4359     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4360     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4361     double oops = U->C.S_C.HP/U->C.S_M.HP*100;
4362     [combatLHP1 setIntValue:(int)oops];
4363     oops = U->C.S_C.MP/U->C.S_M.MP*100;
4364     [combatLMP1 setIntValue:(int)oops];
4365     
4366     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
4367     //NSLog(@"mostNumSub %d crCAL1 %d", mostNumSub, crCAL1);
4368     hitFix = U->C.A->hitPercent;
4369     
4370     u2A = U->C.A;
4371     U->C.A = aTop;
4372     
4373     if(battleDef1Flag){
4374         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4375         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4376         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4377         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
4378         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4379         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4380         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4381     }
4382     if(battleDod1Flag){
4383         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4384         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4385         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4386         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4387         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4388         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4389         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4390
4391     }
4392     
4393     
4394     
4395     
4396     
4397     
4398     
4399     U = UTop;
4400     while (!(DUN[1] == U->number)) {
4401         U = U->next;
4402     }
4403     
4404     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
4405     
4406     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
4407     if(hi < 0) hi = 0;
4408     
4409     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
4410
4411     if(battleDod2Flag) hit = hit / 2;
4412     hit = floor(hit);
4413     
4414     if(hit > 100) hit = 100;
4415     if(hit < 0) hit = 0;
4416     
4417     if(u2A->D->sort == 1){
4418         hit = 100;
4419     }
4420     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4421     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4422     
4423     
4424     
4425     int mostDmg = 0;
4426     int mostDmg2 = 0;
4427     int mostHit = 0;
4428     int mostNum = 0;
4429     int num = 0;
4430     ATTACK *aTop2 = U->C.A;
4431     int mpCost = 0;
4432
4433     
4434     while(U->C.A){
4435         
4436         double urSupposedToGet;
4437         
4438         if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
4439         
4440         double asItIs;
4441         if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
4442         
4443         double oopsIsRight = 0;
4444         
4445         if(U->C.A){
4446             if(U->C.A->melee){
4447                 oopsIsRight = U->C.S_C.MEL;
4448             }else
4449                 oopsIsRight = U->C.S_C.MIS;
4450         }
4451         oopsIsRight = oopsIsRight/100;
4452         
4453         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4454         
4455         if(!U2->C.aura && U->C.A->D){
4456             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
4457                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4458             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
4459                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4460             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
4461                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4462             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
4463                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4464             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
4465                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4466             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
4467         }else if(U->C.A->D){
4468             double val = val = 1/log(3+U2->C.S_C.MP/64);
4469             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
4470                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4471             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
4472                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4473             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
4474                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4475             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
4476                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4477             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
4478                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4479             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
4480         }
4481         double val2 = log(3+U2->C.S_C.MP/64);
4482         if(U->C.aura){
4483             mostDmg2 = mostDmg2*val2;
4484         }
4485         if(U->C.A->D){
4486             if(U->C.A->D->fix == 2){
4487                 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;
4488                 
4489                 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;
4490                 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;
4491                 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;
4492                 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;
4493                 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;
4494                 
4495                 
4496             }else if(U->C.A->D->fix == 1){
4497                 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;
4498                 
4499                 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;
4500                 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;
4501                 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;
4502                 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;
4503                 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;
4504                 
4505             }else if(U->C.A->D->fix == 0){
4506                 
4507             }
4508         }
4509
4510         U2A = U->C.A;
4511         
4512         UNIT *oops = U;
4513         U = U2;
4514         mostDmg2 = [self dmgResist:mostDmg2];
4515         U = oops;
4516         
4517         costVIG = U->C.A->vigor;
4518
4519         if(U->C.A->D)
4520         if(mostDmg < mostDmg2 && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4521             
4522             mostDmg = mostDmg2;
4523             
4524             //mostDmg = U->C.A->totalD;
4525             mostNum = num;
4526         }
4527         if(U->C.A->D)
4528         if(mostHit < U->C.A->hitPercent && hit < 50 && mostDmg/2 < mostDmg2 && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 &&costVIG <= U->C.S_C.vigor){
4529             //mostDmg = U->C.A->totalD;
4530             mostHit = U->C.A->hitPercent;
4531             mostNum = num;
4532         }
4533         U->C.A = U->C.A->next;
4534         num++;
4535     }
4536     
4537    
4538     
4539     U->C.A = aTop2;
4540     if(U->C.A){
4541     mostNumSub = mostNum;
4542     
4543     for(int i = 0;i < mostNum;i++){
4544         U->C.A = U->C.A->next;
4545     }
4546     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4547     
4548         
4549         costVIG = U->C.A->vigor;
4550         
4551
4552     if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
4553         
4554     }else while(U->C.A){
4555         U->C.A = U->C.A->next;
4556     }
4557     
4558     }
4559     
4560     
4561     
4562     if(battleSet2Flag){
4563             U->C.A = aTop2;
4564         //NSLog(@"%@", U->C.name);
4565         for (int i = 0;i < crCAL2;i++) {
4566             U->C.A = U->C.A->next;
4567         }
4568     }
4569     
4570     
4571     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4572     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4573     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4574     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4575     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4576     double oops2 = U->C.S_C.HP/U->C.S_M.HP*100;
4577     [combatLHP2 setIntValue:(int)oops2];
4578     oops2 = U->C.S_C.MP/U->C.S_M.MP*100;
4579     [combatLMP2 setIntValue:(int)oops2];
4580     
4581     bool counter;
4582     int mpCost2 = 0;
4583     if(U->C.A){
4584         mpCost2 = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4585         costVIG = U->C.A->vigor;
4586         
4587     }
4588     if(U->C.A && U->C.A->D){
4589     if(U->C.A && !(u2A->D->sort == 1) && U->C.A->D->sort != 1 && mpCost2 <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
4590         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
4591         hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
4592         hitFix = U->C.A->hitPercent;
4593         counter = true;
4594     }else if(u2A->D->sort == 1 || !U->C.A || U->C.A->D->sort == 1){
4595         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4596     }
4597     }else{
4598         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4599     }
4600     
4601     U->C.A = aTop2;
4602     
4603     if(battleDef2Flag){
4604         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4605         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4606         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4607         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4608         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
4609         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4610         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4611     }
4612     
4613     if(battleDod2Flag){
4614         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4615         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4616         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4617         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4618         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4619         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4620         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4621         
4622     }
4623     U = UTop;
4624     while (!(DUN[1] == U->number)) {
4625         U = U->next;
4626     }
4627     U2 = U;
4628     
4629     U = UTop;
4630     while (!(AUN[1] == U->number)) {
4631         U = U->next;
4632     }
4633     
4634     if(counter){
4635         
4636         double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
4637         
4638         
4639         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
4640         if(hi < 0) hi = 0;
4641         
4642         hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
4643         if(battleDod1Flag) hit /= 2;
4644         hit = floor(hit);
4645         
4646         if(hit > 100) hit = 100;
4647         if(hit < 0) hit = 0;
4648         
4649         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4650         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4651         
4652     }else{
4653         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4654     }
4655     
4656     U = UTop;
4657     
4658     if(CPUAttackSubmitFlag){
4659         if(unitCPUAttackFlag){
4660             [battleCancelBtn setEnabled:NO];
4661             [battleCancelBtn setTransparent:YES];
4662         }else{
4663             [battleCancelBtn setEnabled:YES];
4664             [battleCancelBtn setTransparent:NO];
4665         }
4666     }
4667     
4668     U = UTop;
4669     while (!(AUN[1] == U->number)) {
4670         U = U->next;
4671     }
4672     
4673     if(U->CPU){
4674         [battleAttackBtn1 setEnabled:NO];
4675         [battleAttackBtn1 setTransparent:YES];
4676         [battleGuardBtn1 setEnabled:NO];
4677         [battleGuardBtn1 setTransparent:YES];
4678         [battleDodgeBtn1 setEnabled:NO];
4679         [battleDodgeBtn1 setTransparent:YES];
4680     }else{
4681         [battleAttackBtn1 setEnabled:YES];
4682         [battleAttackBtn1 setTransparent:NO];
4683         [battleGuardBtn1 setEnabled:YES];
4684         [battleGuardBtn1 setTransparent:NO];
4685         [battleDodgeBtn1 setEnabled:YES];
4686         [battleDodgeBtn1 setTransparent:NO];
4687     }U = UTop;
4688     
4689     U = UTop;
4690     while (!(DUN[1] == U->number)) {
4691         U = U->next;
4692     }
4693     if(U->CPU){
4694         [battleAttackBtn2 setEnabled:NO];
4695         [battleAttackBtn2 setTransparent:YES];
4696         [battleGuardBtn2 setEnabled:NO];
4697         [battleGuardBtn2 setTransparent:YES];
4698         [battleDodgeBtn2 setEnabled:NO];
4699         [battleDodgeBtn2 setTransparent:YES];
4700     }else{
4701         [battleAttackBtn2 setEnabled:YES];
4702         [battleAttackBtn2 setTransparent:NO];
4703         [battleGuardBtn2 setEnabled:YES];
4704         [battleGuardBtn2 setTransparent:NO];
4705         [battleDodgeBtn2 setEnabled:YES];
4706         [battleDodgeBtn2 setTransparent:NO];
4707     }U = UTop;
4708
4709     
4710     
4711     U = UTop;
4712     
4713     for (int i = 1; i < DUN[1]; i++) {
4714         U = U->next;
4715              
4716     }
4717
4718     
4719     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
4720        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
4721        ){
4722         [battleStartBtn setEnabled:NO];
4723         [battleStartBtn setTransparent:YES];
4724     }else{
4725         [battleStartBtn setEnabled:YES];
4726         [battleStartBtn setTransparent:NO];
4727     }
4728    
4729     U = UTop;
4730     
4731     avPlayerFlag1 = false;
4732     avPlayerFlag2 = false;
4733 }
4734
4735 -(void)setBattlePanelT2{
4736     
4737     U = UTop;
4738     int mpCost = 0;
4739     ATTACK *aTop2 = U->CL.A;
4740     while (!(AUN[1] == U->number)) {
4741         U = U->next;
4742     }
4743     
4744     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 || MF[MFselectedRow+1].MS.playerSet2 == 2)){
4745         cpuModeBATTLEflag = false;
4746     int mostDmg = 0;
4747     int mostHit = 0;
4748     int mostNum = -1;
4749     int num = 0;
4750     int mpCost = 0;
4751     while(U->CL.A){
4752         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4753         costVIG = U->C.A->vigor;
4754         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4755             mostDmg = U->CL.A->totalD;
4756             mostNum = num;
4757         }
4758         if(mostHit < U->CL.A->hitPercent && mostDmg/2 < U->CL.A->totalD && U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4759             //mostDmg = U->C.A->totalD;
4760             mostHit = U->CL.A->hitPercent;
4761             mostNum = num;
4762         }
4763         U->CL.A = U->CL.A->next;
4764         num++;
4765     }
4766         U->CL.A = aTop2;
4767         
4768         for(int i = 0;i < crCAL1;i++){
4769             U->CL.A = U->CL.A->next;
4770             
4771         }
4772         ATTACK *ua = U->CL.A;
4773         
4774         U->CL.A = aTop2;
4775     
4776     mostNumSub = mostNum;
4777     
4778         U->CL.A = aTop2;
4779         
4780         for(int i = 0;i < mostNum;i++){
4781             U->C.A = U->CL.A->next;
4782         }
4783         if(U->CL.A->extent == 0){
4784             
4785             U->CL.A = aTop2;
4786             crCAL1 = 0;
4787             for(int i = 0;i < mostNum;i++){
4788                 U->CL.A = U->CL.A->next;
4789                 crCAL1++;
4790             }
4791         }
4792         else{
4793             U->CL.A = aTop2;
4794             for(int i = 0;i < crCAL1;i++){
4795                 U->CL.A = U->CL.A->next;
4796             }
4797         }
4798     }else{
4799         
4800         U->CL.A = NULL;
4801     }
4802     if(U->CL.A){
4803         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4804         costVIG = U->C.A->vigor;
4805     }
4806     if(U->CL.A){
4807         if(U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
4808             
4809         }else while(U->CL.A){
4810             U->CL.A = U->CL.A->next;
4811             crCAL1++;
4812         }
4813     }U->CL.A = aTop2;
4814     
4815     
4816     U = UTop;
4817     while (!(AUN[1] == U->number)) {
4818         U = U->next;
4819     }
4820     U2 = U;
4821     
4822     ATTACK *aTop = U->CL.A;
4823     ATTACK *u2A;
4824     
4825     if(U->C.A)
4826         crCAL1 = crCAL;
4827     
4828     for(int i = 0;i < crCAL1;i++){
4829         U->CL.A = U->CL.A->next;
4830     }
4831
4832     
4833     if(battleSet1Flag){
4834         
4835         U->CL.A = aTop;
4836         for (int i = 0;i < crCAL1;i++) {
4837             U->CL.A = U->CL.A->next;
4838         }
4839         
4840     }
4841     
4842     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4843     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4844     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4845     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
4846     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4847     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4848     double oops = U->CL.S_C.HP/U->CL.S_M.HP*100;
4849     [combatLHP1 setIntValue:(int)oops];
4850     oops = U->CL.S_C.EN/U->CL.S_M.EN*100;
4851     [combatLMP1 setIntValue:(int)oops];
4852     
4853     hit = U->CL.S_C.MOB + U->C.S_C.HIT*U->C.S_C.HP/U->C.S_M.HP;
4854     hitFix = U->CL.A->hitPercent;
4855     
4856     u2A = U->CL.A;
4857     U->CL.A = aTop;
4858     
4859     if(battleDef1Flag){
4860         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4861         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4862         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4863         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
4864         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4865         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4866         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4867     }
4868     if(battleDod1Flag){
4869         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4870         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4871         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4872         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4873         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4874         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4875         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4876         
4877     }
4878     
4879     
4880     
4881     
4882     
4883     
4884     
4885     U = UTop;
4886     while (!(DUN[1] == U->number)) {
4887         U = U->next;
4888     }
4889     
4890     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
4891     if(battleDod2Flag) hit = hit / 2;
4892     hit = floor(hit);
4893     
4894     if(hit > 100) hit = 100;
4895     if(hit < 0) hit = 0;
4896     
4897     if(u2A->D->sort == 1){
4898         hit = 100;
4899     }
4900     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4901     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4902     
4903     
4904     
4905     int mostDmg = 0;
4906     int mostHit = 0;
4907     int mostNum = -1;
4908     int num = 0;
4909     costVIG = U->C.A->vigor;
4910     while(U->CL.A){
4911         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4912         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4913             mostDmg = U->CL.A->totalD;
4914             mostNum = num;
4915         }
4916         if(mostHit < U->CL.A->hitPercent && mostDmg/2 < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
4917             //mostDmg = U->C.A->totalD;
4918             mostHit = U->CL.A->hitPercent;
4919             mostNum = num;
4920         }
4921         U->CL.A = U->CL.A->next;
4922         num++;
4923     }
4924     
4925     U->CL.A = aTop2;
4926     
4927     mostNumSub = mostNum;
4928     
4929     if(mostNum >= 0){
4930     for(int i = 0;i < mostNum;i++){
4931         U->CL.A = U->CL.A->next;
4932     }
4933     }else{
4934     
4935         U->CL.A = NULL;
4936     }
4937     if(U->CL.A){
4938         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4939         costVIG = U->C.A->vigor;
4940     }
4941     if(U->CL.A){
4942     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
4943         
4944     }else while(U->CL.A){
4945         U->CL.A = U->CL.A->next;
4946     }
4947     }
4948     
4949     
4950     
4951     if(battleSet2Flag){
4952         
4953         U->CL.A = aTop2;
4954         
4955         for (int i = 0;i < crCAL2;i++) {
4956             U->CL.A = U->CL.A->next;
4957         }
4958         
4959     }
4960     
4961     
4962     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4963     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4964     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4965     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4966     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4967     double oops2 = U->CL.S_C.HP/U->CL.S_M.HP*100;
4968     [combatLHP2 setIntValue:(int)oops2];
4969     oops2 = U->CL.S_C.EN/U->CL.S_M.EN*100;
4970     [combatLMP2 setIntValue:(int)oops2];
4971     
4972     bool counter;
4973     int mpCost2 = 0;
4974     if(U->CL.A && U->CL.A->D){
4975     if(U->CL.A->name){
4976         
4977     if(U->CL.A){
4978         mpCost2 = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4979         
4980     }
4981     if(U->CL.A && !(u2A->D->sort == 1) && U->CL.A->D->sort != 1 && mpCost2 <= U->CL.S_C.EN){
4982         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
4983         hit = U->CL.S_C.MOB + U->C.S_C.HIT;
4984         hitFix = U->CL.A->hitPercent;
4985         counter = true;
4986     }else if(u2A->D->sort == 1 || !U->CL.A || U->CL.A->D->sort == 1){
4987         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4988     }
4989     
4990     }else{
4991         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4992     }
4993     }else{
4994         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4995     }
4996     U->CL.A = aTop2;
4997     
4998     if(battleDef2Flag){
4999         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5000         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5001         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5002         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5003         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
5004         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5005         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5006     }
5007     
5008     if(battleDod2Flag){
5009         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5010         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5011         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5012         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5013         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5014         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5015         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5016         
5017     }
5018     U = UTop;
5019     while (!(AUN[1] == U->number)) {
5020         U = U->next;
5021     }
5022     
5023     if(counter){
5024         hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
5025         if(battleDod1Flag) hit /= 2;
5026         hit = floor(hit);
5027         
5028         if(hit > 100) hit = 100;
5029         if(hit < 0) hit = 0;
5030         
5031         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5032         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5033         
5034     }else{
5035         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5036     }
5037     
5038     U = UTop;
5039     while (!(AUN[1] == U->number)) {
5040         U = U->next;
5041     }
5042     
5043     if(U->CPU){
5044         [battleAttackBtn1 setEnabled:NO];
5045         [battleAttackBtn1 setTransparent:YES];
5046         [battleGuardBtn1 setEnabled:NO];
5047         [battleGuardBtn1 setTransparent:YES];
5048         [battleDodgeBtn1 setEnabled:NO];
5049         [battleDodgeBtn1 setTransparent:YES];
5050     }else{
5051         [battleAttackBtn1 setEnabled:YES];
5052         [battleAttackBtn1 setTransparent:NO];
5053         [battleGuardBtn1 setEnabled:YES];
5054         [battleGuardBtn1 setTransparent:NO];
5055         [battleDodgeBtn1 setEnabled:YES];
5056         [battleDodgeBtn1 setTransparent:NO];
5057     }U = UTop;
5058     
5059     U = UTop;
5060     while (!(DUN[1] == U->number)) {
5061         U = U->next;
5062     }
5063     if(U->CPU){
5064         [battleAttackBtn2 setEnabled:NO];
5065         [battleAttackBtn2 setTransparent:YES];
5066         [battleGuardBtn2 setEnabled:NO];
5067         [battleGuardBtn2 setTransparent:YES];
5068         [battleDodgeBtn2 setEnabled:NO];
5069         [battleDodgeBtn2 setTransparent:YES];
5070     }else{
5071         [battleAttackBtn2 setEnabled:YES];
5072         [battleAttackBtn2 setTransparent:NO];
5073         [battleGuardBtn2 setEnabled:YES];
5074         [battleGuardBtn2 setTransparent:NO];
5075         [battleDodgeBtn2 setEnabled:YES];
5076         [battleDodgeBtn2 setTransparent:NO];
5077     }U = UTop;
5078     
5079     U = UTop;
5080     
5081     for (int i = 1; i < DUN[1]; i++) {
5082         U = U->next;
5083     }
5084
5085     
5086     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
5087        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
5088        ){
5089         [battleStartBtn setEnabled:NO];
5090         [battleStartBtn setTransparent:YES];
5091     }else{
5092         [battleStartBtn setEnabled:YES];
5093         [battleStartBtn setTransparent:NO];
5094     }
5095     
5096     U = UTop;
5097     
5098     avPlayerFlag1 = false;
5099     avPlayerFlag2 = false;
5100 }
5101
5102 -(void)setBattlePanelT3{
5103     
5104     
5105     U = UTop;
5106     while (!(AUN[1] == U->number)) {
5107         U = U->next;
5108     }
5109     
5110     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 &&MF[MFselectedRow+1].MS.playerSet2 == 2)){
5111         cpuModeBATTLEflag = false;
5112     int mostDmg = 0;
5113     int mostHit = 0;
5114     int mostNum = 0;
5115     int num = 0;
5116     ATTACK *aTop2 = U->C.A;
5117     int mpCost = 0;
5118     while(U->C.A){
5119         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
5120         
5121         costVIG = U->C.A->vigor;
5122         if(U->C.A->D)
5123         if(mostDmg < U->C.A->totalD && U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5124             mostDmg = U->C.A->totalD;
5125             mostNum = num;
5126         }
5127         if(U->C.A->D)
5128         if(mostHit < U->C.A->hitPercent && mostDmg/2 < U->C.A->totalD && U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5129             //mostDmg = U->C.A->totalD;
5130             mostHit = U->C.A->hitPercent;
5131             mostNum = num;
5132         }
5133         U->C.A = U->C.A->next;
5134         num++;
5135     }
5136         U->C.A = aTop2;
5137         
5138         for(int i = 0;i < crCAL1;i++){
5139             U->C.A = U->C.A->next;
5140             
5141         }
5142         ATTACK *ua = U->C.A;
5143         
5144         U->C.A = aTop2;
5145     
5146     mostNumSub = mostNum;
5147         U->C.A = aTop2;
5148         
5149         for(int i = 0;i < mostNum;i++){
5150             U->C.A = U->C.A->next;
5151         }
5152         if(U->C.A->extent == 0 && mostNum > 0){
5153             
5154             U->C.A = aTop2;
5155             crCAL1 = 0;
5156             for(int i = 0;i < mostNum;i++){
5157                 U->C.A = U->C.A->next;
5158                 crCAL1++;
5159             }
5160         }
5161         else{
5162             U->C.A = aTop2;
5163             for(int i = 0;i < crCAL1;i++){
5164                 U->C.A = U->C.A->next;
5165             }
5166         }
5167     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
5168         costVIG = U->C.A->vigor;
5169         
5170
5171     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){
5172         
5173     }else{
5174     
5175     }
5176       U->C.A = aTop2;
5177     }
5178     
5179     U = UTop;
5180     while (!(AUN[1] == U->number)) {
5181         U = U->next;
5182     }
5183     U2 = U;
5184     
5185     
5186     ATTACK *aTop = U->CL.A;
5187     ATTACK *u2A;
5188     
5189     if(U->C.A)
5190         crCAL1 = crCAL;
5191     
5192     for(int i = 0;i < crCAL1;i++){
5193         U->CL.A = U->CL.A->next;
5194     }
5195     
5196     if(battleSet1Flag){
5197         
5198         U->CL.A = aTop;
5199         for (int i = 0;i < crCAL1;i++) {
5200             U->CL.A = U->CL.A->next;
5201         }
5202         
5203     }
5204     
5205     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5206     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5207     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5208     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
5209     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5210     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5211     double oops = U->CL.S_C.HP/U->CL.S_M.HP*100;
5212     [combatLHP1 setIntValue:(int)oops];
5213     oops = U->CL.S_C.EN/U->CL.S_M.EN*100;
5214     [combatLMP1 setIntValue:(int)oops];
5215     
5216     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
5217     hitFix = U->CL.A->hitPercent;
5218     
5219     u2A = U->CL.A;
5220     U->CL.A = aTop;
5221     
5222     if(battleDef1Flag){
5223         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5224         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5225         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5226         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
5227         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5228         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5229         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5230     }
5231     if(battleDod1Flag){
5232         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5233         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5234         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5235         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5236         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5237         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5238         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5239         
5240     }
5241     
5242     
5243     
5244     
5245     
5246     U = UTop;
5247     while (!(AUN[1] == U->number)) {
5248         U = U->next;
5249     }
5250     U2 = U;
5251     
5252     U = UTop;
5253     while (!(DUN[1] == U->number)) {
5254         U = U->next;
5255     }
5256     
5257     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
5258     
5259     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
5260     if(hi < 0) hi = 0;
5261     
5262     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
5263     if(battleDod2Flag) hit = hit / 2;
5264     hit = floor(hit);
5265     
5266     if(hit > 100) hit = 100;
5267     if(hit < 0) hit = 0;
5268     
5269     if(u2A->D->sort == 1){
5270         hit = 100;
5271     }
5272     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5273     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5274     
5275     
5276     
5277     int mostDmg = 0;
5278     int mostHit = 0;
5279     int mostNum = 0;
5280     int num = 0;
5281     ATTACK *aTop2 = U->C.A;
5282     int mpCost = 0;
5283     while(U->C.A){
5284         
5285         costVIG = U->C.A->vigor;
5286         
5287         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
5288         if(U->C.A->D)
5289         if(mostDmg < U->C.A->totalD && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5290             mostDmg = U->C.A->totalD;
5291             mostNum = num;
5292         }
5293         if(U->C.A->D)
5294         if(mostHit < U->C.A->hitPercent && mostDmg/2 < U->C.A->totalD && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && U->C.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5295             //mostDmg = U->C.A->totalD;
5296             mostHit = U->C.A->hitPercent;
5297             mostNum = num;
5298         }
5299         U->C.A = U->C.A->next;
5300         num++;
5301     }
5302     
5303     U->C.A = aTop2;
5304     
5305     mostNumSub = mostNum;
5306     
5307     for(int i = 0;i < mostNum;i++){
5308         U->C.A = U->C.A->next;
5309     }
5310     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
5311     costVIG = U->C.A->vigor;
5312     
5313     if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
5314         
5315     }else while(U->C.A){
5316         U->C.A = U->C.A->next;
5317     }
5318     
5319     
5320     if(battleSet2Flag){
5321         
5322         U->C.A = aTop2;
5323         
5324         for (int i = 0;i < crCAL2;i++) {
5325             U->C.A = U->C.A->next;
5326         }
5327         
5328     }
5329     
5330     
5331     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5332     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5333     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5334     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5335     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5336     double oops2 = U->C.S_C.HP/U->C.S_M.HP*100;
5337     [combatLHP2 setIntValue:(int)oops2];
5338     oops2 = U->C.S_C.MP/U->C.S_M.MP*100;
5339     [combatLMP2 setIntValue:(int)oops2];
5340     
5341     bool counter;
5342     int mpCost2 = 0;
5343     if(U->C.A){
5344         mpCost2 = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
5345         costVIG = U->C.A->vigor;
5346
5347     }
5348     if(U->C.A &&U->C.A->D){
5349     if(U->C.A && !(u2A->D->sort == 1) && U->C.A->D->sort != 1 && mpCost2 <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
5350         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
5351         hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
5352         hitFix = U->C.A->hitPercent;
5353         counter = true;
5354     }else if(u2A->D->sort == 1 || !U->C.A || U->C.A->D->sort == 1){
5355         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5356     }}else{
5357         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5358     }
5359     
5360     U->C.A = aTop2;
5361     
5362     if(battleDef2Flag){
5363         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5364         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5365         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5366         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5367         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
5368         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5369         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5370     }
5371     
5372     if(battleDod2Flag){
5373         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5374         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5375         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5376         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5377         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5378         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5379         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5380         
5381     }
5382     U = UTop;
5383     while (!(AUN[1] == U->number)) {
5384         U = U->next;
5385     }
5386     
5387     if(counter){
5388         hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
5389         if(battleDod1Flag) hit /= 2;
5390         hit = floor(hit);
5391         
5392         if(hit > 100) hit = 100;
5393         if(hit < 0) hit = 0;
5394         
5395         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5396         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5397         
5398     }else{
5399         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5400     }
5401     
5402     U = UTop;
5403     while (!(AUN[1] == U->number)) {
5404         U = U->next;
5405     }
5406     
5407     if(U->CPU){
5408         [battleAttackBtn1 setEnabled:NO];
5409         [battleAttackBtn1 setTransparent:YES];
5410         [battleGuardBtn1 setEnabled:NO];
5411         [battleGuardBtn1 setTransparent:YES];
5412         [battleDodgeBtn1 setEnabled:NO];
5413         [battleDodgeBtn1 setTransparent:YES];
5414     }else{
5415         [battleAttackBtn1 setEnabled:YES];
5416         [battleAttackBtn1 setTransparent:NO];
5417         [battleGuardBtn1 setEnabled:YES];
5418         [battleGuardBtn1 setTransparent:NO];
5419         [battleDodgeBtn1 setEnabled:YES];
5420         [battleDodgeBtn1 setTransparent:NO];
5421     }U = UTop;
5422     
5423     U = UTop;
5424     while (!(DUN[1] == U->number)) {
5425         U = U->next;
5426     }
5427     if(U->CPU){
5428         [battleAttackBtn2 setEnabled:NO];
5429         [battleAttackBtn2 setTransparent:YES];
5430         [battleGuardBtn2 setEnabled:NO];
5431         [battleGuardBtn2 setTransparent:YES];
5432         [battleDodgeBtn2 setEnabled:NO];
5433         [battleDodgeBtn2 setTransparent:YES];
5434     }else{
5435         [battleAttackBtn2 setEnabled:YES];
5436         [battleAttackBtn2 setTransparent:NO];
5437         [battleGuardBtn2 setEnabled:YES];
5438         [battleGuardBtn2 setTransparent:NO];
5439         [battleDodgeBtn2 setEnabled:YES];
5440         [battleDodgeBtn2 setTransparent:NO];
5441     }U = UTop;
5442     
5443     
5444     U = UTop;
5445     
5446     for (int i = 1; i < DUN[1]; i++) {
5447         U = U->next;
5448     }
5449     
5450     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
5451        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
5452        ){
5453         [battleStartBtn setEnabled:NO];
5454         [battleStartBtn setTransparent:YES];
5455     }else{
5456         [battleStartBtn setEnabled:YES];
5457         [battleStartBtn setTransparent:NO];
5458     }
5459     
5460     U = UTop;
5461     
5462     avPlayerFlag1 = false;
5463     avPlayerFlag2 = false;
5464 }
5465
5466 -(void)setBattlePanelT4{
5467
5468     U = UTop;
5469     
5470     while (!(AUN[1] == U->number)) {
5471         U = U->next;
5472     }
5473     
5474     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2)){
5475         cpuModeBATTLEflag = false;
5476     int mostDmg = 0;
5477     int mostHit = 0;
5478     int mostNum = 0;
5479     int num = 0;
5480     ATTACK *aTop2 = U->CL.A;
5481     int mpCost = 0;
5482     while(U->CL.A){
5483         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5484         costVIG = U->C.A->vigor;
5485         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5486             mostDmg = U->CL.A->totalD;
5487             mostNum = num;
5488         }
5489         if(mostHit < U->CL.A->hitPercent && mostDmg/2 < U->CL.A->totalD && U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5490             //mostDmg = U->C.A->totalD;
5491             mostHit = U->CL.A->hitPercent;
5492             mostNum = num;
5493         }
5494         U->CL.A = U->CL.A->next;
5495         num++;
5496     }
5497     
5498     mostNumSub = mostNum;
5499         U->CL.A = aTop2;
5500         
5501         for(int i = 0;i < mostNum;i++){
5502             U->CL.A = U->CL.A->next;
5503         }
5504         if(U->CL.A->extent == 0){
5505             
5506             U->CL.A = aTop2;
5507             crCAL1 = 0;
5508             for(int i = 0;i < mostNum;i++){
5509                 U->CL.A = U->CL.A->next;
5510                 crCAL1++;
5511             }
5512         }
5513         else{
5514             U->CL.A = aTop2;
5515             for(int i = 0;i < crCAL1;i++){
5516                 U->CL.A = U->CL.A->next;
5517             }
5518         }
5519     mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5520         costVIG = U->C.A->vigor;
5521     if(U->CL.A->rangeA <= unitBreak->atkRange && U->CL.A->rangeB >= unitBreak->atkRange && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
5522         
5523     }else while(U->CL.A){
5524         U->CL.A = U->CL.A->next;
5525         crCAL1++;
5526     }
5527       U->CL.A = aTop2;
5528     }
5529     U = UTop;
5530     
5531     while (!(AUN[1] == U->number)) {
5532         U = U->next;
5533     }
5534     U2 = U;
5535     
5536     ATTACK *aTop = U->C.A;
5537     ATTACK *u2A;
5538     
5539     if(U->C.A)
5540         crCAL1 = crCAL;
5541     
5542     for(int i = 0;i < crCAL1;i++){
5543         U->C.A = U->C.A->next;
5544     }
5545     
5546     if(battleSet1Flag){
5547         
5548         U->C.A = aTop;
5549         for (int i = 0;i < crCAL1;i++) {
5550             U->C.A = U->C.A->next;
5551         }
5552         
5553     }
5554     
5555     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5556     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5557     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5558     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
5559     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5560     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5561     double oops = U->C.S_C.HP/U->C.S_M.HP*100;
5562     [combatLHP1 setIntValue:(int)oops];
5563     oops = U->C.S_C.MP/U->C.S_M.MP*100;
5564     [combatLMP1 setIntValue:(int)oops];
5565     
5566     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
5567     hitFix = U->C.A->hitPercent;
5568     
5569     u2A = U->C.A;
5570     U->C.A = aTop;
5571     
5572     if(battleDef1Flag){
5573         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5574         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5575         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5576         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
5577         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5578         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5579         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5580     }
5581     if(battleDod1Flag){
5582         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5583         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5584         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5585         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5586         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5587         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5588         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5589         
5590     }
5591     
5592     
5593     
5594     
5595     
5596     
5597     
5598     U = UTop;
5599     while (!(DUN[1] == U->number)) {
5600         U = U->next;
5601     }
5602     
5603     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
5604     if(battleDod2Flag) hit = hit / 2;
5605     hit = floor(hit);
5606     
5607     if(hit > 100) hit = 100;
5608     if(hit < 0) hit = 0;
5609     
5610     if(u2A->D->sort == 1){
5611         hit = 100;
5612     }
5613     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5614     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5615     
5616     
5617     
5618     int mostDmg = 0;
5619     int mostHit = 0;
5620     int mostNum = 0;
5621     int num = 0;
5622     ATTACK *aTop2 = U->CL.A;
5623     int mpCost = 0;
5624     while(U->CL.A){
5625         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5626         costVIG = U->C.A->vigor;
5627         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5628             mostDmg = U->CL.A->totalD;
5629             mostNum = num;
5630         }
5631         if(mostHit < U->CL.A->hitPercent && mostDmg/2 < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && U->CL.A->D->sort != 1 && costVIG <= U->C.S_C.vigor){
5632             //mostDmg = U->C.A->totalD;
5633             mostHit = U->CL.A->hitPercent;
5634             mostNum = num;
5635         }
5636         U->CL.A = U->CL.A->next;
5637         num++;
5638     }
5639     
5640     mostNumSub = mostNum;
5641     
5642     U->CL.A = aTop2;
5643     
5644     for(int i = 0;i < mostNum;i++){
5645         U->CL.A = U->CL.A->next;
5646     }
5647     mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5648     costVIG = U->C.A->vigor;
5649     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
5650         
5651     }else while(U->CL.A){
5652         U->CL.A = U->CL.A->next;
5653     }
5654     
5655     
5656     if(battleSet2Flag){
5657         
5658         U->CL.A = aTop2;
5659         
5660         for (int i = 0;i < crCAL2;i++) {
5661             U->CL.A = U->CL.A->next;
5662         }
5663         
5664     }
5665     
5666     
5667     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5668     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5669     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5670     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5671     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5672     double oops2 = U->CL.S_C.HP/U->CL.S_M.HP*100;
5673     [combatLHP2 setIntValue:(int)oops2];
5674     oops2 = U->CL.S_C.EN/U->CL.S_M.EN*100;
5675     [combatLMP2 setIntValue:(int)oops2];
5676     
5677     bool counter;
5678     int mpCost2 = 0;
5679     if(U->CL.A){
5680         mpCost2 = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5681         
5682     }
5683     if(U->CL.A && U->CL.A->D){
5684     if(U->CL.A && !(u2A->D->sort == 1) && U->CL.A->D->sort != 1 && mpCost2 <= U->CL.S_C.EN){
5685         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
5686         hit = U->CL.S_C.MOB + U->C.S_C.HIT;
5687         hitFix = U->CL.A->hitPercent;
5688         counter = true;
5689     }else if(u2A->D->sort == 1 || !U->CL.A || U->CL.A->D->sort == 1){
5690         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5691     }}else{
5692         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5693     }
5694     
5695     U->CL.A = aTop2;
5696     
5697     if(battleDef2Flag){
5698         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5699         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5700         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5701         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5702         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
5703         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5704         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5705     }
5706     
5707     if(battleDod2Flag){
5708         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5709         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5710         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5711         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5712         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5713         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5714         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5715         
5716     }
5717     
5718     U = UTop;
5719     while (!(DUN[1] == U->number)) {
5720         U = U->next;
5721     }
5722     U2 = U;
5723     
5724     U = UTop;
5725     while (!(AUN[1] == U->number)) {
5726         U = U->next;
5727     }
5728     
5729     if(counter){
5730         
5731         double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
5732         
5733         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
5734         if(hi < 0) hi = 0;
5735         
5736         hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
5737         if(battleDod1Flag) hit /= 2;
5738         hit = floor(hit);
5739         
5740         if(hit > 100) hit = 100;
5741         if(hit < 0) hit = 0;
5742         
5743         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5744         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5745         
5746     }else{
5747         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5748     }
5749     
5750     U = UTop;
5751     while (!(AUN[1] == U->number)) {
5752         U = U->next;
5753     }
5754     
5755     if(U->CPU){
5756         [battleAttackBtn1 setEnabled:NO];
5757         [battleAttackBtn1 setTransparent:YES];
5758         [battleGuardBtn1 setEnabled:NO];
5759         [battleGuardBtn1 setTransparent:YES];
5760         [battleDodgeBtn1 setEnabled:NO];
5761         [battleDodgeBtn1 setTransparent:YES];
5762     }else{
5763         [battleAttackBtn1 setEnabled:YES];
5764         [battleAttackBtn1 setTransparent:NO];
5765         [battleGuardBtn1 setEnabled:YES];
5766         [battleGuardBtn1 setTransparent:NO];
5767         [battleDodgeBtn1 setEnabled:YES];
5768         [battleDodgeBtn1 setTransparent:NO];
5769     }U = UTop;
5770     
5771     U = UTop;
5772     while (!(DUN[1] == U->number)) {
5773         U = U->next;
5774     }
5775     if(U->CPU){
5776         [battleAttackBtn2 setEnabled:NO];
5777         [battleAttackBtn2 setTransparent:YES];
5778         [battleGuardBtn2 setEnabled:NO];
5779         [battleGuardBtn2 setTransparent:YES];
5780         [battleDodgeBtn2 setEnabled:NO];
5781         [battleDodgeBtn2 setTransparent:YES];
5782     }else{
5783         [battleAttackBtn2 setEnabled:YES];
5784         [battleAttackBtn2 setTransparent:NO];
5785         [battleGuardBtn2 setEnabled:YES];
5786         [battleGuardBtn2 setTransparent:NO];
5787         [battleDodgeBtn2 setEnabled:YES];
5788         [battleDodgeBtn2 setTransparent:NO];
5789     }U = UTop;
5790     
5791     
5792     U = UTop;
5793     
5794     for (int i = 1; i < DUN[1]; i++) {
5795         U = U->next;
5796     }
5797     
5798     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
5799        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
5800        ){
5801         [battleStartBtn setEnabled:NO];
5802         [battleStartBtn setTransparent:YES];
5803     }else{
5804         [battleStartBtn setEnabled:YES];
5805         [battleStartBtn setTransparent:NO];
5806     }
5807     
5808     U = UTop;
5809     
5810     avPlayerFlag1 = false;
5811     avPlayerFlag2 = false;
5812 }
5813
5814 -(void)DisplayMessage{
5815     
5816     if(!battleVeryBegunFlag){
5817     [btHITtf1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5818     [btDMGtf1 setStringValue:[NSString stringWithFormat:@"ダメージ値 ----"]];
5819     [btHITtf2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5820     [btDMGtf2 setStringValue:[NSString stringWithFormat:@"ダメージ値 ----"]];
5821     }
5822     battleVeryBegunFlag = true;
5823     
5824     if(AVpreview){
5825     if(AVpreview.rate > 0){
5826         //[battleWindow setIgnoresMouseEvents:YES];
5827         [battleWindow makeKeyAndOrderFront:nil];
5828         //NSLog(@"%g", AVpreview.rate);
5829         return;
5830     }else{
5831         //[battleWindow setIgnoresMouseEvents:NO];
5832         //NSLog(@"%g", AVpreview.rate);
5833         AVpreview = NULL;
5834         if(avPlayerFlag1){
5835             
5836             [AVPV setHidden:YES];
5837         }
5838         else if(avPlayerFlag2){
5839             [AVPV setHidden:YES];
5840         }
5841     }
5842     }
5843     if(animationFlag3){
5844         if(animationFlag1){
5845             animationFlag1 = false;
5846             U = effCun;
5847             U->C.A = attackTop;
5848         }
5849         if(animationFlag2){
5850             animationFlag2 = false;
5851             U = effCun;
5852             U->C.A = attackTop2;
5853         }
5854         U = UTop;
5855     }else{
5856         if(animationFlag1 || animationFlag2){
5857             return;
5858         }
5859     }
5860     
5861     double def2 = (double)31/32;
5862     NSString *message = @"";
5863     
5864     enum{
5865         RIKU,
5866         UMI,
5867         CHU,
5868         SORA
5869     };
5870     
5871     enum{
5872         A,
5873         B,
5874         C,
5875         D,
5876         E,
5877         S,
5878         SS
5879     };
5880     static bool extentbool = false;
5881     static bool extentbool2 = false;
5882     
5883     
5884     if(cpuAtkExtendFlag){
5885         extentBattleFlag2 = true;
5886     }
5887     
5888     if(!extentbool && extentBattleFlag2){
5889         extentbool = true;
5890         extentMPcostFlag = false;
5891         DUNnum = 1;
5892     }
5893     
5894     switch (messageProcess) {
5895         case 0:
5896             if(bLoopFlag) break;
5897             
5898             [battleDialog setStringValue:@"攻撃開始!"];
5899             if(!baseDistanceCompFlag)
5900                 break;
5901             bLoopFlag = true;
5902             messageProcess++;
5903             DUNnum = 1;
5904             
5905             break;
5906         case 1:
5907             
5908             if(bLoopFlag) break;
5909             
5910             
5911             if(DUNnum > 1){
5912                 
5913                 
5914                 btHitExtendFlag1 = true;
5915                 
5916                 if(btHitExtendProc1 >= 3){
5917                     btHitExtendProc1 = 0;
5918                 }
5919             }
5920             
5921                 BTunitAttackFlag1 = true;
5922             if(battleDef1Flag || battleDod1Flag)
5923                 BTunitAttackFlag1 = false;
5924             
5925             U = UTop;
5926             while (!(DUN[DUNnum] == U->number)) {
5927                 U = U->next;
5928                 
5929             }
5930             U2 = U;
5931             U = UTop;
5932             while (!(AUN[1] == U->number)) {
5933                 U = U->next;
5934             }
5935             
5936             if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
5937                 U = UTop;
5938                 [self DisplayMessageMod1A];
5939                 return;
5940             }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){
5941                 U = UTop;
5942                 [self DisplayMessageMod2A];
5943                 return;
5944             }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){
5945                 U = UTop;
5946                 [self DisplayMessageMod3A];
5947                 return;
5948             }
5949             
5950             
5951             U = UTop;
5952             if(bLoopFlag) break;
5953             
5954             U = UTop;
5955             while (!(AUN[1] == U->number)) {
5956                 U = U->next;
5957             }
5958             ATTACK *aTop = U->C.A;
5959             attackTop = aTop;
5960             for(int i = 0;i < crCAL1;i++){
5961                 U->C.A = U->C.A->next;
5962             }
5963             effCun = U;
5964             attackCR = U->C.A;
5965             
5966             if(btAttackMoveValue1 < 2 && BTunitAttackFlag1){
5967                 
5968                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
5969                 
5970                 [battleDialog setStringValue:message];
5971                 U->C.A = aTop;
5972                 U = UTop;
5973                 
5974                 return;
5975             }
5976             
5977             if(btHitExtendFlag1 && btHitExtendProc1 < 2){
5978                 
5979                 
5980                 
5981                 
5982                 U->C.A = aTop;
5983                 U = UTop;
5984                 
5985                 return;
5986             }
5987             
5988             if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
5989             
5990             
5991             [bplayer2 setImage:U2->C.imgb];
5992             [bplayer2 setImageScaling:NSScaleToFit];
5993             [nplayer2 setStringValue:U2->C.name];
5994             [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U2->C.S_C.HP, U2->C.S_M.HP]];
5995             [lplayer2 setIntValue:U2->C.S_C.HP/U2->C.S_M.HP*100];
5996             [iplayer2 setImage:MC[chipNum[U2->x][U2->y]].img];
5997             [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
5998             [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
5999             
6000             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){
6001                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
6002             
6003                 NSString *path = @"data/AttackList/ALdata";
6004             
6005                 path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
6006             
6007                 path = [path stringByAppendingFormat:@"/"];
6008             
6009                 path = [path stringByAppendingString:U->C.A->AN.movName];
6010             
6011                 NSData *AVData = [NSData dataWithContentsOfFile:path];
6012                 
6013                 if(AVData)
6014                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6015                 
6016                 
6017                 if(!AVpreview){
6018                 
6019                     NSString *path = @"data/AttackList3/IALdata";
6020                     
6021                     path = [path stringByAppendingFormat:@"%dE", U->C.A->indexE];
6022                     
6023                     path = [path stringByAppendingFormat:@"/"];
6024                     
6025                     path = [path stringByAppendingString:U->C.A->AN.movName];
6026                     
6027                     
6028                     NSData *AVData = [NSData dataWithContentsOfFile:path];
6029                     
6030                     if(AVData)
6031                     AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6032                     
6033                 
6034                 }
6035                 
6036                 if(AVpreview) {
6037                     AVPV.player = [AVpreview retain];
6038                 }else{
6039                     goto avAWESOME;
6040                 }
6041                 
6042                 
6043                 [AVPV setHidden:NO];
6044                 [AVpreview play];
6045                 [battleDialog setStringValue:message];
6046                 
6047                 avPlayerFlag1 = true;
6048                 
6049                 
6050                 U->C.A = aTop;
6051                 U = UTop;
6052                 return;
6053             }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUNnum == 1){
6054             
6055                 [battleDialog setStringValue:message];
6056                 animationFlag1 = true;
6057                 aniFrameCnt = 0;
6058                 return;
6059             }
6060             
6061         avAWESOME:{}
6062
6063             double urSupposedToGet;
6064            
6065             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
6066             
6067             double asItIs;
6068             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
6069             
6070             double oopsIsRight;
6071             
6072             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
6073             else oopsIsRight = U->C.S_C.MIS;
6074             
6075             oopsIsRight = oopsIsRight/100;
6076             double val;
6077             if(!U2->C.aura && U->C.A->D){
6078             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
6079                                             - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6080             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
6081                                             - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6082             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
6083                                             - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6084             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
6085                                             - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6086             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
6087                                             - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6088             if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
6089             }else if(U->C.A->D){
6090                 val = 1/log(3+U2->C.S_C.MP/64);
6091                 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
6092                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6093                 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
6094                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6095                 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
6096                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6097                 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
6098                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6099                 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
6100                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6101                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD*val;
6102             }
6103             double val2 = log(3+U2->C.S_C.MP/64);
6104             if(U->C.aura){
6105                 dmg = dmg*val2;
6106             }
6107             
6108             if(U->C.A->D){
6109             if(U->C.A->D->fix == 2){
6110                 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;
6111
6112                 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;
6113                 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;
6114                 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;
6115                 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;
6116                 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;
6117                 
6118             
6119             }else if(U->C.A->D->fix == 1){
6120                 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;
6121                 
6122                 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;
6123                 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;
6124                 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;
6125                 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;
6126                 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;
6127                 
6128             }else if(U->C.A->D->fix == 0){
6129                 
6130             }
6131             }
6132             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
6133             
6134             if(extentMPcostFlag && extentBattleFlag2){
6135                 
6136             }else{
6137                 U->C.S_C.MP -= costMP;
6138                 extentMPcostFlag = true;
6139             }
6140             
6141             hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
6142             hitFix = U->C.A->hitPercent;
6143             
6144             U2A = U->C.A;
6145             U->C.A = aTop;
6146             
6147             U = UTop;
6148             while (!(AUN[1] == U->number)) {
6149                 U = U->next;
6150             }
6151             U2 = U;
6152             
6153             U = UTop;
6154             while (!(DUN[DUNnum] == U->number)) {
6155                 U = U->next;
6156             }
6157             
6158             double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
6159             
6160             double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
6161             if(hi < 0) hi = 0;
6162             
6163             hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
6164             if(hit > 100) hit = 100;
6165             if(hit < 0) hit = 0;
6166             if(U2A->D->sort == 1){
6167                 hit = 100;
6168             }
6169             
6170             healFlag = false;
6171             
6172             int wtf = 100;
6173             if(battleDod2Flag) wtf = 50;
6174             if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
6175                 
6176                 if(U2A->D->sort == 0){
6177                     if(U2A->D->type == 0) NSLog(@"計算式:((%g+%g)*%g-%g)*%g*%g", U2->C.S_C.ATK,U2A->totalD,oopsIsRight,U->C.S_C.DEF, val, val2);
6178                     if(U2A->D->type == 4) NSLog(@"計算式:((%g+%g)*%g-%g)*%g*%g", U2->C.S_C.CAP,U2A->totalD,oopsIsRight,U->C.S_C.CAP, val, val2);
6179                     NSLog(@"修正前のダメージ:%g", dmg);
6180                     dmg = [self dmgResist:dmg];
6181                     NSLog(@"属性後のダメージ:%g", dmg);
6182                     def2 = pow(def2, U->C.S_C.DEF);
6183                     int omfg = rand()%100;
6184                     NSLog(@"ダメージ幅:%g〜%g", floor(dmg), floor(dmg + dmg/10));
6185                     dmg = (dmg*omfg/100/10 + dmg);
6186                     NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
6187                     if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
6188                     else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
6189                     
6190                     if(U->C.S_C.typeMOVE == RIKU){
6191                         if(U2A->riku == A) dmg = dmg*1.2;
6192                         if(U2A->riku == B) dmg = dmg*1.0;
6193                         if(U2A->riku == C) dmg = dmg*0.6;
6194                         if(U2A->riku == D) dmg = dmg*0.2;
6195                         if(U2A->riku == E) dmg = 0;
6196                         if(U2A->riku == S) dmg = dmg*1.5;
6197                         if(U2A->riku == SS) dmg = dmg*2.0;
6198                     } if(U->C.S_C.typeMOVE == UMI &&
6199                        (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
6200                         if(U2A->umi == A) dmg = dmg*1.2;
6201                         if(U2A->umi == B) dmg = dmg*1.0;
6202                         if(U2A->umi == C) dmg = dmg*0.6;
6203                         if(U2A->umi == D) dmg = dmg*0.2;
6204                         if(U2A->umi == E) dmg = 0;
6205                         if(U2A->umi == S) dmg = dmg*1.5;
6206                         if(U2A->umi == SS) dmg = dmg*2.0;
6207                     }else if(U->C.S_C.typeMOVE == UMI){
6208                         if(U2A->riku == A) dmg = dmg*1.2;
6209                         if(U2A->riku == B) dmg = dmg*1.0;
6210                         if(U2A->riku == C) dmg = dmg*0.6;
6211                         if(U2A->riku == D) dmg = dmg*0.2;
6212                         if(U2A->riku == E) dmg = 0;
6213                         if(U2A->riku == S) dmg = dmg*1.5;
6214                         if(U2A->riku == SS) dmg = dmg*2.0;
6215                     
6216                     } if(U->C.S_C.typeMOVE == CHU){
6217                         if(U2A->chu == A) dmg = dmg*1.2;
6218                         if(U2A->chu == B) dmg = dmg*1.0;
6219                         if(U2A->chu == C) dmg = dmg*0.6;
6220                         if(U2A->chu == D) dmg = dmg*0.2;
6221                         if(U2A->chu == E) dmg = 0;
6222                         if(U2A->chu == S) dmg = dmg*1.5;
6223                         if(U2A->chu == SS) dmg = dmg*2.0;
6224                     } if(U->C.S_C.typeMOVE == SORA){
6225                         if(U2A->sora == A) dmg = dmg*1.2;
6226                         if(U2A->sora == B) dmg = dmg*1.0;
6227                         if(U2A->sora == C) dmg = dmg*0.6;
6228                         if(U2A->sora == D) dmg = dmg*0.2;
6229                         if(U2A->sora == E) dmg = 0;
6230                         if(U2A->sora == S) dmg = dmg*1.5;
6231                         if(U2A->sora == SS) dmg = dmg*2.0;
6232                     }
6233                     
6234                     NSLog(@"ユニットの地形適用後:%g", dmg);
6235                     if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
6236                     graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
6237                     
6238                     grazeFlag = false;
6239                     omfg = rand()%100;
6240                     if(graze > omfg && !healFlag) {dmg = dmg/5;
6241                         grazeFlag = true;
6242                     }
6243                     if(battleDef2Flag) dmg -= dmg*0.5;
6244                     battleDef2Flag = false;
6245                     dmg = floor(dmg);
6246                     if(dmg < 0) dmg = 0;
6247                     U->C.S_C.HP -= dmg;
6248                     U->C.S_C.vigor++;
6249                     
6250                     [btHITtf1 setStringValue:[NSString stringWithFormat:@"命中率 %g%", floor(hit)]];
6251                     [btDMGtf1 setStringValue:[NSString stringWithFormat:@"ダメージ値 %g", dmg]];
6252                     
6253                     
6254                     
6255                 }else if(U2A->D->sort == 1){
6256                     dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
6257                     dmg = floor(dmg);
6258                     
6259                     U->C.S_C.HP += dmg;
6260                     if(U->C.S_C.HP > U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
6261                     healFlag = true;
6262                 }
6263                 
6264                 while(1){
6265                     if(U->C.S_C.HP <= 0) {
6266                         U->C.S_C.HP = 0;
6267                         U2->C.S_C.vigor += 5;
6268                         
6269                         messageProcess = 2;
6270                         if(U->dead) break;
6271                         U->dead = true;
6272                         
6273                         
6274                         if(U->targType1L)
6275                             targType1cnt[0]--;
6276                         if(U->targType2L) {
6277                             targType2cnt[0]--;
6278                             targType2Lflag = true;
6279                         }
6280                         
6281                         if(U->targType1D)
6282                             targType1cnt[1]--;
6283                         if(U->targType2D) {
6284                             targType2cnt[1]--;
6285                             targType2Dflag = true;
6286                         }
6287                         
6288                         break;
6289                     }
6290                     break;
6291                 }
6292                 
6293             [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
6294             [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
6295             
6296                 if(![U2A->msg isEqualToString:@""]){
6297                     
6298                     message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
6299                                                                 [self originalMessage:U2A->msg subj:U2->C.name obje:U->C.name]]];
6300                     
6301                 }
6302                 
6303             if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
6304                 if(!healFlag) {
6305                     message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
6306                 btHitFlag1 = true;
6307                 }
6308             else {
6309                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
6310                 btHitFlag1 = false;
6311             }
6312             }else if(battleDef1Flag){
6313             
6314                 
6315                 U = UTop;
6316                 while (!(AUN[1] == U->number)) {
6317                     U = U->next;
6318                 }
6319                 
6320                 
6321                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
6322             
6323                 btHitFlag1 = false;
6324             
6325             }else if(battleDod1Flag){
6326             
6327                 U = UTop;
6328                 while (!(AUN[1] == U->number)) {
6329                     U = U->next;
6330                 }
6331                 
6332                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
6333                 
6334                 btHitFlag1 = false;
6335             }else{
6336             
6337                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
6338                 btHitFlag1 = false;
6339             
6340             }
6341                 [battleDialog setStringValue:message];
6342             
6343             [btHITtf1 setStringValue:[NSString stringWithFormat:@"命中率 %g%", floor(hit)]];
6344             
6345             U = UTop;
6346             
6347             bLoopFlag = true;
6348             
6349             if(!extentBattleFlag2){
6350             if(healFlag) {
6351                 messageProcess++;
6352                  };
6353             messageProcess++;
6354             }else if(extentBattleFlag2){
6355                 if(btHitExtendProc1 == 2)
6356                     btHitExtendProc1 = 3;
6357                 if(btHitExtendProc1 >= 2)
6358                     btHitExtendFix1 = 1;
6359                 
6360                 btHitFlagCnt1 = 0;
6361                 DUNnum++;
6362                 messageProcess = 1;
6363                 if(DUN[DUNnum] <= 0){
6364                     messageProcess++;
6365                     messageProcess++;
6366                     extentBattleFlag2 = false;
6367                     extentbool = false;
6368                     extentMPcostFlag = false;
6369                 }
6370             }
6371             message = @"";
6372             avPlayerFlag1 = false;
6373             animationFlag3 = false;
6374             break;
6375         
6376         case 2:
6377             
6378             if(bLoopFlag) break;
6379             BTunitAttackFlag1 = false;
6380             BTunitAttackFlag2 = true;
6381             if(battleDef2Flag || battleDod2Flag)
6382                 BTunitAttackFlag2 = false;
6383             btHitFlag1 = false;
6384             
6385             
6386             U = UTop;
6387             while (!(DUN[1] == U->number)) {
6388                 U = U->next;
6389             }
6390             U2 = U;
6391             U = UTop;
6392             while (!(AUN[1] == U->number)) {
6393                 U = U->next;
6394             }
6395             
6396             if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
6397                 U = UTop;
6398                 [self DisplayMessageMod1B];
6399                 return;
6400             }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){
6401                 U = UTop;
6402                 [self DisplayMessageMod2B];
6403                 return;
6404             }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){
6405                 U = UTop;
6406                 [self DisplayMessageMod3B];
6407                 return;
6408             }
6409             U = UTop;
6410             
6411             if(bLoopFlag) break;
6412             
6413             U = UTop;
6414             while (!(AUN[1] == U->number)) {
6415                 U = U->next;
6416             }
6417             U2 = U;
6418             U = UTop;
6419             
6420             U = UTop;
6421             while (!(DUN[1] == U->number)) {
6422                 U = U->next;
6423             }
6424             
6425             ATTACK *aTop2 = U->C.A;
6426             attackTop2 = aTop2;
6427             int mostDmg = 0;
6428             int mostDmg2 = 0;
6429             int mostNum = 0;
6430             int num = 0;
6431             int mpCost =0;
6432             
6433             if(!U->C.A) goto SKIP3;
6434             
6435             
6436             
6437             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
6438             
6439             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
6440
6441             
6442             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
6443             else oopsIsRight = U->C.S_C.MIS;
6444             
6445             oopsIsRight = oopsIsRight/100;
6446             
6447             if(U->C.A) {
6448                 mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
6449             }
6450             while(U->C.A){
6451                 mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
6452                 if(!U2->C.aura && U->C.A->D){
6453                     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
6454                                                          - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6455                     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
6456                                                          - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6457                     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
6458                                                          - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6459                     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
6460                                                          - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6461                     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
6462                                                          - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6463                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
6464                 }else if(U->C.A->D){
6465                     val = 1/log(3+U2->C.S_C.MP/64);
6466                     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
6467                                                          - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6468                     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
6469                                                          - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6470                     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
6471                                                          - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6472                     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
6473                                                          - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor)*asItIs*val;
6474                     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
6475                                                          - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6476                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
6477                 }
6478                 double val2 = log(3+U2->C.S_C.MP/64);
6479                 if(U->C.aura){
6480                     mostDmg2 = mostDmg2*val2;
6481                 }
6482                 if(U->C.A->D){
6483                     if(U->C.A->D->fix == 2){
6484                         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;
6485                         
6486                         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;
6487                         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;
6488                         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;
6489                         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;
6490                         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;
6491                         
6492                         
6493                     }else if(U->C.A->D->fix == 1){
6494                         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;
6495                         
6496                         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;
6497                         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;
6498                         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;
6499                         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;
6500                         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;
6501                         
6502                     }else if(U->C.A->D->fix == 0){
6503                         
6504                     }
6505                 }
6506                 
6507                 U2A = U->C.A;
6508                 UNIT *oops = U;
6509                 U = U2;
6510                 mostDmg2 = [self dmgResist:mostDmg2];
6511                 U = oops;
6512                 
6513                 costVIG = U->C.A->vigor;
6514                 if(U->C.A->D)
6515                 if(mostDmg < mostDmg2 && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1 && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
6516                     
6517             
6518                     mostDmg = mostDmg2;
6519                     
6520                     
6521                     //mostDmg = U->C.A->totalD;
6522                     mostNum = num;
6523                 }
6524                 U->C.A = U->C.A->next;
6525                 num++;
6526             }
6527             
6528             U->C.A = aTop2;
6529             
6530             if(!battleSet2PushedFlag){
6531                 for(int i = 0;i < mostNumSub;i++){
6532                 U->C.A = U->C.A->next;
6533             }
6534             
6535             }else{
6536             for(int i = 0;i < crCAL2;i++){
6537                 U->C.A = U->C.A->next;
6538             }
6539             
6540             
6541             }
6542             if(U->C.A->D){
6543             if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1){
6544             
6545             }else while(U->C.A){
6546                 U->C.A = U->C.A->next;
6547             }}
6548             
6549             if(!U->C.A){
6550                 U->C.A = aTop2;
6551                 U = UTop;
6552                 BTunitAttackFlag2 = false;
6553                 message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
6554                 goto SKIP1;
6555             }
6556             effCun = U;
6557             attackCR2 = U->C.A;
6558             
6559             if(btAttackMoveValue2 < 2 && BTunitAttackFlag2){
6560                 
6561                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
6562                 
6563                 [battleDialog setStringValue:message];
6564                 U->C.A = aTop2;
6565                 U = UTop;
6566                 
6567                 return;
6568             }
6569             
6570             if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
6571             
6572             if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
6573                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
6574                 
6575                 NSString *path = @"data/AttackList/ALdata";
6576                 
6577                 path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
6578                 
6579                 path = [path stringByAppendingFormat:@"/"];
6580                 
6581                 path = [path stringByAppendingString:U->C.A->AN.movName];
6582                 
6583                 
6584                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6585                 
6586                 if(AVpreview) {
6587                     AVPV.player = [AVpreview retain];
6588                 }else{
6589                     goto avAWESOME2;
6590                 }
6591                 
6592                 [AVPV setControlsStyle:0];
6593                 [AVPV setHidden:NO];
6594                 [AVpreview play];
6595                 [battleDialog setStringValue:message];
6596                 
6597                 avPlayerFlag2 = true;
6598                 
6599                 U->C.A = aTop2;
6600                 U = UTop;
6601                 return;
6602             }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
6603                 
6604                 
6605                 animationFlag2 = true;
6606                 aniFrameCnt = 0;
6607                 return;
6608             }
6609
6610             
6611         avAWESOME2:{}
6612             U2A = U->C.A;
6613             
6614             /*
6615             if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
6616             if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
6617             if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
6618             if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
6619             if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
6620             if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
6621             */
6622             
6623             U->C.A = aTop2;
6624             U = UTop;
6625             while (!(AUN[1] == U->number)) {
6626                 U = U->next;
6627             }
6628             U2 = U;
6629             U = UTop;
6630             while (!(DUN[1] == U->number)) {
6631                 U = U->next;
6632             }
6633             NSString *string = [U2A->name retain];
6634             while (![U->C.A->name isEqualToString:string] && U->C.A) {
6635                 U->C.A = U->C.A->next;
6636             }
6637             
6638             if(!U->C.A) U->C.A = aTop2;
6639             
6640             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
6641             
6642             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
6643             
6644             
6645             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
6646             else oopsIsRight = U->C.S_C.MIS;
6647             
6648             oopsIsRight = oopsIsRight/100;
6649
6650             
6651             if(!U2->C.aura && U->C.A->D){
6652                 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
6653                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6654                 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
6655                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6656                 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
6657                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6658                 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
6659                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6660                 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
6661                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6662                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
6663             }else if(U->C.A->D){
6664                 double val = val = 1/log(3+U2->C.S_C.MP/64);
6665                 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
6666                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6667                 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
6668                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6669                 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
6670                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6671                 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
6672                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6673                 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
6674                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6675                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD*val;
6676             }
6677             val2 = log(3+U2->C.S_C.MP/64);
6678             if(U->C.aura){
6679                 dmg = dmg*val2;
6680             }
6681             if(U->C.A->D){
6682                 if(U->C.A->D->fix == 2){
6683                     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;
6684                     
6685                     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;
6686                     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;
6687                     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;
6688                     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;
6689                     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;
6690                     
6691                     
6692                 }else if(U->C.A->D->fix == 1){
6693                     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;
6694                     
6695                     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;
6696                     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;
6697                     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;
6698                     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;
6699                     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;
6700                     
6701                 }else if(U->C.A->D->fix == 0){
6702                     
6703                 }
6704             }
6705             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
6706             U->C.S_C.MP -= costMP;
6707             
6708             hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
6709             hitFix = U->C.A->hitPercent;
6710             
6711             U2A = U->C.A;
6712             
6713             U->C.A = aTop2;
6714             
6715             U = UTop;
6716             while (!(DUN[1] == U->number)) {
6717                 U = U->next;
6718             }
6719             U2 = U;
6720             
6721             U = UTop;
6722             while (!(AUN[1] == U->number)) {
6723                 U = U->next;
6724             }
6725             
6726             hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
6727             
6728             hi = U->C.S_C.LUK - U2->C.S_C.LUK;
6729             if(hi < 0) hi = 0;
6730             
6731             hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
6732             if(hit > 100) hit = 100;
6733             if(hit < 0) hit = 0;
6734             
6735             battleDod1Flag = false;
6736             
6737             U = UTop;
6738             while (!(DUN[1] == U->number)) {
6739                 U = U->next;
6740             }
6741             U2 = U;
6742             
6743             U = UTop;
6744             while (!(AUN[1] == U->number)) {
6745                 U = U->next;
6746             }
6747             
6748             int omg = 100;
6749             if(battleDod1Flag) omg = 50;
6750             
6751             if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
6752                 if(U2A->D->type == 0) NSLog(@"計算式:((%g+%g)*%g-%g)*%g*%g", U2->C.S_C.ATK,U2A->totalD,oopsIsRight,U->C.S_C.DEF, val, val2);
6753                 if(U2A->D->type == 4) NSLog(@"計算式:((%g+%g)*%g-%g)*%g%g", U2->C.S_C.CAP,U2A->totalD,oopsIsRight,U->C.S_C.CAP, val, val2);
6754                 NSLog(@"修正前のダメージ:%g", dmg);
6755                 dmg = [self dmgResist:dmg];
6756                 NSLog(@"属性後のダメージ:%g", dmg);
6757             def2 = pow(def2, U->C.S_C.DEF);
6758             int omfg = rand()%100;
6759                 NSLog(@"ダメージ幅:%g〜%g", floor(dmg), floor(dmg + dmg/10));
6760                 dmg = (dmg*omfg/100/10 + dmg);
6761                 NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
6762                 if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
6763                 else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
6764             
6765                 if(U->C.S_C.typeMOVE == RIKU){
6766                     if(U2A->riku == A) dmg = dmg*1.2;
6767                     if(U2A->riku == B) dmg = dmg*1.0;
6768                     if(U2A->riku == C) dmg = dmg*0.6;
6769                     if(U2A->riku == D) dmg = dmg*0.2;
6770                     if(U2A->riku == E) dmg = 0;
6771                     if(U2A->riku == S) dmg = dmg*1.5;
6772                     if(U2A->riku == SS) dmg = dmg*2.0;
6773                 } if(U->C.S_C.typeMOVE == UMI &&
6774                      (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
6775                     if(U2A->umi == A) dmg = dmg*1.2;
6776                     if(U2A->umi == B) dmg = dmg*1.0;
6777                     if(U2A->umi == C) dmg = dmg*0.6;
6778                     if(U2A->umi == D) dmg = dmg*0.2;
6779                     if(U2A->umi == E) dmg = 0;
6780                     if(U2A->umi == S) dmg = dmg*1.5;
6781                     if(U2A->umi == SS) dmg = dmg*2.0;
6782                 }else if(U->C.S_C.typeMOVE == UMI){
6783                     if(U2A->riku == A) dmg = dmg*1.2;
6784                     if(U2A->riku == B) dmg = dmg*1.0;
6785                     if(U2A->riku == C) dmg = dmg*0.6;
6786                     if(U2A->riku == D) dmg = dmg*0.2;
6787                     if(U2A->riku == E) dmg = 0;
6788                     if(U2A->riku == S) dmg = dmg*1.5;
6789                     if(U2A->riku == SS) dmg = dmg*2.0;
6790                     
6791                 } if(U->C.S_C.typeMOVE == CHU){
6792                     if(U2A->chu == A) dmg = dmg*1.2;
6793                     if(U2A->chu == B) dmg = dmg*1.0;
6794                     if(U2A->chu == C) dmg = dmg*0.6;
6795                     if(U2A->chu == D) dmg = dmg*0.2;
6796                     if(U2A->chu == E) dmg = 0;
6797                     if(U2A->chu == S) dmg = dmg*1.5;
6798                     if(U2A->chu == SS) dmg = dmg*2.0;
6799                 } if(U->C.S_C.typeMOVE == SORA){
6800                     if(U2A->sora == A) dmg = dmg*1.2;
6801                     if(U2A->sora == B) dmg = dmg*1.0;
6802                     if(U2A->sora == C) dmg = dmg*0.6;
6803                     if(U2A->sora == D) dmg = dmg*0.2;
6804                     if(U2A->sora == E) dmg = 0;
6805                     if(U2A->sora == S) dmg = dmg*1.5;
6806                     if(U2A->sora == SS) dmg = dmg*2.0;
6807                 }
6808                 
6809                 NSLog(@"ユニットの地形適用後:%g", dmg);
6810                 
6811                 
6812                 graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
6813                 
6814                 grazeFlag = false;
6815                 omfg = rand()&100;
6816                 if(graze > omfg && !healFlag) {dmg = dmg/5;
6817                     grazeFlag = true;
6818                 }
6819
6820             if(battleDef1Flag) dmg -= dmg*0.5;
6821             battleDef1Flag = false;
6822                 dmg = floor(dmg);
6823                 if(dmg < 0) dmg = 0;
6824                 U->C.S_C.HP -= dmg;
6825                 U->C.S_C.vigor++;
6826
6827                 [btHITtf2 setStringValue:[NSString stringWithFormat:@"命中率 %g%", floor(hit)]];
6828                 [btDMGtf2 setStringValue:[NSString stringWithFormat:@"ダメージ値 %g", dmg]];
6829                 
6830                 while(1){
6831                 if(U->C.S_C.HP <= 0) {
6832                     U->C.S_C.HP = 0;
6833                     U2->C.S_C.vigor += 5;
6834                 
6835                     messageProcess = 2;
6836                     if(U->dead) break;
6837                     U->dead = true;
6838                     
6839                     
6840                     if(U->targType1L)
6841                         targType1cnt[0]--;
6842                     if(U->targType2L) {
6843                         targType2cnt[0]--;
6844                         targType2Lflag = true;
6845                     }
6846                 
6847                     if(U->targType1D)
6848                         targType1cnt[1]--;
6849                     if(U->targType2D) {
6850                         targType2cnt[1]--;
6851                         targType2Dflag = true;
6852                     }
6853                     
6854                     break;
6855                 }
6856                     break;
6857                 }
6858                 
6859       
6860         
6861                 [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
6862             
6863                 [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
6864             
6865                 if(![U2A->msg isEqualToString:@""]){
6866                     message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
6867                                                                 [self originalMessage:U2A->msg subj:U2->C.name obje:U->C.name]]];
6868                 }
6869                 
6870                 
6871            
6872                 if(grazeFlag)
6873                     message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
6874             
6875                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
6876                 btHitFlag2 = true;
6877            
6878             }else if(battleDef2Flag){
6879                 
6880                 
6881                 U = UTop;
6882                 while (!(DUN[1] == U->number)) {
6883                     U = U->next;
6884                 }
6885                 
6886                 
6887                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
6888                 btHitFlag2 = false;
6889                 
6890             }else if(battleDod2Flag){
6891                 
6892                 U = UTop;
6893                 while (!(DUN[1] == U->number)) {
6894                     U = U->next;
6895                 }
6896                 
6897                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
6898                 
6899                 btHitFlag2 = false;
6900             }else{
6901             
6902                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
6903                 btHitFlag2 = false;
6904             }
6905         SKIP1:
6906             [battleDialog setStringValue:message];
6907         SKIP3:
6908             U = UTop;
6909             [btHITtf2 setStringValue:[NSString stringWithFormat:@"命中率 %g%", floor(hit)]];
6910             bLoopFlag = true;
6911             messageProcess++;
6912             message = @"";
6913             avPlayerFlag2 = false;
6914             animationFlag3 = false;
6915             break;
6916         case 3:
6917             if(bLoopFlag) break;
6918             if(cpuAImodeflag && !cpuTurnEndFlag) {
6919                 wtRdy = false;
6920             wtRdy2 = false;
6921             }
6922             battleSetUp = false;
6923             battleSetFlag = false;
6924             battleFlag = false;
6925             battleRdy = false;
6926             battleSet2PushedFlag = false;
6927             cpuModeBATTLEendFlag = true;
6928             crCAL1 = 0;
6929             crCAL2 = 0;
6930             [battleWindow close];
6931             pussyLoopFlag = false;
6932             cpuAtkExtendFlag3 = false;
6933             cpuOMFGmoveATKfixFlag = false;
6934             unitNoMoveFlag = false;
6935             UA = NULL;
6936             Utarget = NULL;
6937             CPUmostDmgChoice = false;
6938             //おまんちん
6939             cpuIsAttackingFlag = false;
6940             for(int g = 0;g < chipWidth;g++){
6941                 for(int k = 0;k < chipHeight;k++){
6942                     g_attackRangeExtent[g][k] = 0;
6943                 }
6944             }
6945             
6946             btDistanceX1 = 0;
6947             btDistanceX2 = 0;
6948             BTunitAttackFlag1 = false;
6949             BTunitAttackFlag2 = false;
6950             BTunitAttackFlag1 = false;
6951             btAttackMoveValue1 = 0;
6952             btAttackMoveValue2 = 0;
6953             btHitFlag1 = false;
6954             btHitFlag2 = false;
6955             btHitFlagCnt1 = 0;
6956             btHitFlagCnt2 = 0;
6957             btHitExtendFlag1 = false;
6958             btHitExtendProc1 = 0;
6959             btHitExtendMove1 = 0;
6960             btHitExtendFlag2 = false;
6961             btHitExtendProc2 = 0;
6962             btHitExtendMove2 = 0;
6963             baseDistanceCompFlag = false;
6964             battleVeryBegunFlag = false;
6965             break;
6966             
6967         default:
6968             break;
6969     }
6970
6971
6972     UCselected = UC[-1];
6973
6974
6975 }
6976
6977 -(void)DisplayMessageMod1A{//両方モビール
6978
6979     double def2 = (double)31/32;
6980     NSString *message = @"";
6981     
6982     enum{
6983         RIKU,
6984         UMI,
6985         CHU,
6986         SORA,
6987     };
6988     
6989     enum{
6990         A,
6991         B,
6992         C,
6993         D,
6994         E,
6995         S,
6996         SS
6997     };
6998
6999     
7000     
7001     if(bLoopFlag) return;
7002     U = UTop;
7003     while (!(AUN[1] == U->number)) {
7004         U = U->next;
7005     }
7006     U2 = U;
7007     ATTACK *aTop = U->CL.A;
7008     for(int i = 0;i < crCAL1;i++){
7009         U->CL.A = U->CL.A->next;
7010     }
7011     
7012     
7013     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
7014     
7015     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
7016         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7017         
7018         NSString *path = @"data/AttackList/ALdata";
7019         
7020         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7021         
7022         path = [path stringByAppendingFormat:@"/"];
7023         
7024         path = [path stringByAppendingString:U->CL.A->AN.movName];
7025         
7026         NSData *AVData = [NSData dataWithContentsOfFile:path];
7027         
7028         if(AVData)
7029             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7030         
7031         
7032         if(!AVpreview){
7033             
7034             NSString *path = @"data/AttackList3/IALdata";
7035             
7036             path = [path stringByAppendingFormat:@"%dE", U->CL.A->indexE];
7037             
7038             path = [path stringByAppendingFormat:@"/"];
7039             
7040             path = [path stringByAppendingString:U->CL.A->AN.movName];
7041             
7042             
7043             NSData *AVData = [NSData dataWithContentsOfFile:path];
7044             
7045             if(AVData)
7046                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7047             
7048             
7049         }
7050         
7051         if(AVpreview) {
7052             AVPV.player = [AVpreview retain];
7053         }else{
7054             goto avAWESOME1A;
7055         }
7056         
7057         
7058         [AVPV setHidden:NO];
7059         [AVpreview play];
7060         [battleDialog setStringValue:message];
7061         
7062         avPlayerFlag1 = true;
7063         
7064         U->CL.A = aTop;
7065         
7066         U = UTop;
7067         return;
7068     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
7069         
7070         [battleDialog setStringValue:message];
7071         animationFlag1 = true;
7072         aniFrameCnt = 0;
7073         return;
7074     }
7075     
7076 avAWESOME1A:{}
7077     
7078     dmg = U->CL.A->totalD;
7079     
7080     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7081     U->CL.S_C.EN -= costMP;
7082     
7083     hit = U->CL.S_C.MOB+U->C.S_C.HIT;
7084     hitFix = U->CL.A->hitPercent;
7085     
7086     U2A = U->CL.A;
7087     U->CL.A = aTop;
7088     
7089     U = UTop;
7090     while (!(DUN[1] == U->number)) {
7091         U = U->next;
7092     }
7093     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
7094     if(hit > 100) hit = 100;
7095     if(U2A->D->sort == 1){
7096         hit = 100;
7097     }
7098     
7099     healFlag = false;
7100     
7101     int wtf = 100;
7102     if(battleDod2Flag) wtf = 50;
7103     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
7104         
7105         if(U2A->D->sort == 0){
7106             NSLog(@"修正前のダメージ:%g", dmg);
7107             dmg = [self dmgResist:dmg];
7108             NSLog(@"属性後のダメージ:%g", dmg);
7109             def2 = pow(def2, U->CL.S_C.ARM);
7110             int omfg = rand()%100;
7111             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
7112             
7113             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg + dmg - U->CL.S_C.ARM));
7114             dmg = (dmg*omfg/100 + dmg - U->CL.S_C.ARM);
7115             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7116             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7117             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7118             
7119             if(U->CL.S_C.typeMOVE == RIKU){
7120                 if(U2A->riku == A) dmg = dmg*1.2;
7121                 if(U2A->riku == B) dmg = dmg*1.0;
7122                 if(U2A->riku == C) dmg = dmg*0.6;
7123                 if(U2A->riku == D) dmg = dmg*0.2;
7124                 if(U2A->riku == E) dmg = 0;
7125                 if(U2A->riku == S) dmg = dmg*1.5;
7126                 if(U2A->riku == SS) dmg = dmg*2.0;
7127             } if(U->CL.S_C.typeMOVE == UMI &&
7128                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7129                 if(U2A->umi == A) dmg = dmg*1.2;
7130                 if(U2A->umi == B) dmg = dmg*1.0;
7131                 if(U2A->umi == C) dmg = dmg*0.6;
7132                 if(U2A->umi == D) dmg = dmg*0.2;
7133                 if(U2A->umi == E) dmg = 0;
7134                 if(U2A->umi == S) dmg = dmg*1.5;
7135                 if(U2A->umi == SS) dmg = dmg*2.0;
7136             }else if(U->CL.S_C.typeMOVE == UMI){
7137                 if(U2A->riku == A) dmg = dmg*1.2;
7138                 if(U2A->riku == B) dmg = dmg*1.0;
7139                 if(U2A->riku == C) dmg = dmg*0.6;
7140                 if(U2A->riku == D) dmg = dmg*0.2;
7141                 if(U2A->riku == E) dmg = 0;
7142                 if(U2A->riku == S) dmg = dmg*1.5;
7143                 if(U2A->riku == SS) dmg = dmg*2.0;
7144                 
7145             } if(U->CL.S_C.typeMOVE == CHU){
7146                 if(U2A->chu == A) dmg = dmg*1.2;
7147                 if(U2A->chu == B) dmg = dmg*1.0;
7148                 if(U2A->chu == C) dmg = dmg*0.6;
7149                 if(U2A->chu == D) dmg = dmg*0.2;
7150                 if(U2A->chu == E) dmg = 0;
7151                 if(U2A->chu == S) dmg = dmg*1.5;
7152                 if(U2A->chu == SS) dmg = dmg*2.0;
7153             } if(U->CL.S_C.typeMOVE == SORA){
7154                 if(U2A->sora == A) dmg = dmg*1.2;
7155                 if(U2A->sora == B) dmg = dmg*1.0;
7156                 if(U2A->sora == C) dmg = dmg*0.6;
7157                 if(U2A->sora == D) dmg = dmg*0.2;
7158                 if(U2A->sora == E) dmg = 0;
7159                 if(U2A->sora == S) dmg = dmg*1.5;
7160                 if(U2A->sora == SS) dmg = dmg*2.0;
7161             }
7162             
7163             NSLog(@"ユニットの地形適用後:%g", dmg);
7164             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
7165             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7166             
7167             grazeFlag = false;
7168             omfg = rand()%100;
7169             if(graze > omfg && !healFlag) {dmg = dmg/5;
7170                 grazeFlag = true;
7171             }
7172             if(battleDef2Flag) dmg -= dmg*0.5;
7173             battleDef2Flag = false;
7174             dmg = floor(dmg);
7175             if(dmg < 0) dmg = 0;
7176             U->CL.S_C.HP -= dmg;
7177             U->C.S_C.vigor++;
7178             
7179         }else if(U2A->D->sort == 1){
7180             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
7181             dmg = floor(dmg);
7182             
7183             U->CL.S_C.HP += dmg;
7184             
7185             if(U->CL.S_C.HP > U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
7186             healFlag = true;
7187         }
7188         
7189         while(1){
7190             if(U->CL.S_C.HP <= 0) {
7191                 U->CL.S_C.HP = 0;
7192                 U2->C.S_C.vigor += 5;
7193                 
7194                 messageProcess = 2;
7195                 if(U->dead) break;
7196                 U->dead = true;
7197                 
7198                 
7199                 if(U->targType1L)
7200                     targType1cnt[0]--;
7201                 if(U->targType2L) {
7202                     targType2cnt[0]--;
7203                     targType2Lflag = true;
7204                 }
7205                 
7206                 if(U->targType1D)
7207                     targType1cnt[1]--;
7208                 if(U->targType2D) {
7209                     targType2cnt[1]--;
7210                     targType2Dflag = true;
7211                 }
7212                 
7213                 break;
7214             }
7215             break;
7216         }
7217         
7218         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
7219         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
7220         
7221         if(![U2A->msg isEqualToString:@""]){
7222             
7223             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7224                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->CL.name]]];
7225             
7226         }
7227         
7228         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7229         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
7230         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->CL.name, dmg]];
7231     }else if(battleDef1Flag){
7232         
7233         
7234         U = UTop;
7235         while (!(AUN[1] == U->number)) {
7236             U = U->next;
7237         }
7238         
7239         
7240         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
7241         
7242         
7243     }else if(battleDod1Flag){
7244         
7245         U = UTop;
7246         while (!(AUN[1] == U->number)) {
7247             U = U->next;
7248         }
7249         
7250         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
7251         
7252         
7253     }else{
7254         
7255         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
7256         
7257     }
7258     [battleDialog setStringValue:message];
7259     
7260     
7261     U = UTop;
7262     
7263     bLoopFlag = true;
7264     
7265     if(healFlag) {
7266         messageProcess++;
7267     };
7268     messageProcess++;
7269     
7270     return;
7271
7272 }
7273
7274 -(void)DisplayMessageMod1B{
7275
7276     double def2 = (double)31/32;
7277     NSString *message = @"";
7278     
7279     enum{
7280         RIKU,
7281         UMI,
7282         CHU,
7283         SORA,
7284     };
7285     
7286     enum{
7287         A,
7288         B,
7289         C,
7290         D,
7291         E,
7292         S,
7293         SS
7294     };
7295
7296     
7297     if(bLoopFlag) return;
7298     
7299     U = UTop;
7300     while (!(AUN[1] == U->number)) {
7301         U = U->next;
7302     }
7303     U2 = U;
7304     U = UTop;
7305     
7306     U = UTop;
7307     while (!(DUN[1] == U->number)) {
7308         U = U->next;
7309     }
7310     
7311     ATTACK *aTop2 = U->CL.A;
7312     int mostDmg = 0;
7313     int mostNum = 0;
7314     int num = 0;
7315     int mpCost =0;
7316     if(U->CL.A) {
7317         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7318         costVIG = U->C.A->vigor;
7319     }
7320     while(U->CL.A){
7321         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7322         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1 && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
7323             mostDmg = U->CL.A->totalD;
7324             mostNum = num;
7325         }
7326         U->CL.A = U->CL.A->next;
7327         num++;
7328     }
7329     
7330     U->CL.A = aTop2;
7331     
7332     if(!battleSet2PushedFlag){
7333         for(int i = 0;i < mostNumSub;i++){
7334             U->CL.A = U->CL.A->next;
7335         }
7336         
7337     }else{
7338         for(int i = 0;i < crCAL2;i++){
7339             U->CL.A = U->CL.A->next;
7340         }
7341     }
7342     
7343     if(!U->CL.A->name){
7344     
7345         U->CL.A = NULL;
7346     }
7347     if(U->CL.A){
7348     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1){
7349     }else while(U->CL.A){
7350         U->CL.A = U->CL.A->next;
7351     }
7352     }
7353     
7354     if(!U->CL.A){
7355         U->CL.A = aTop2;
7356         U = UTop;
7357         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
7358         goto SKIP1;
7359     }
7360     
7361     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
7362     
7363     
7364     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
7365         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7366         
7367         NSString *path = @"data/AttackList/ALdata";
7368         
7369         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7370         
7371         path = [path stringByAppendingFormat:@"/"];
7372         
7373         path = [path stringByAppendingString:U->CL.A->AN.movName];
7374         
7375         
7376         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7377         
7378         if(AVpreview) {
7379             AVPV.player = [AVpreview retain];
7380         }else{
7381             goto avAWESOME1B;
7382         }
7383         
7384         [AVPV setControlsStyle:0];
7385         [AVPV setHidden:NO];
7386         [AVpreview play];
7387         [battleDialog setStringValue:message];
7388         
7389         avPlayerFlag2 = true;
7390         
7391         U->CL.A = aTop2;
7392         U = UTop;
7393         return;
7394     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
7395         
7396         
7397         animationFlag2 = true;
7398         aniFrameCnt = 0;
7399         return;
7400     }
7401     
7402     
7403 avAWESOME1B:{}
7404     
7405     dmg = U->CL.A->totalD;
7406     
7407     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7408     U->CL.S_C.EN -= costMP;
7409     
7410     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
7411     hitFix = U->CL.A->hitPercent;
7412     
7413     U2A = U->CL.A;
7414     U->CL.A = aTop2;
7415     
7416     
7417     U = UTop;
7418     while (!(AUN[1] == U->number)) {
7419         U = U->next;
7420     }
7421     
7422     
7423     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
7424     if(hit > 100) hit = 100;
7425     
7426     battleDod1Flag = false;
7427     
7428     int omg = 100;
7429     if(battleDod1Flag) omg = 50;
7430     
7431     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
7432         NSLog(@"修正前のダメージ:%g", dmg);
7433         dmg = [self dmgResist:dmg];
7434         NSLog(@"属性後のダメージ:%g", dmg);
7435         def2 = pow(def2, U->CL.S_C.ARM);
7436         int omfg = rand()%100;
7437         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
7438         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg + dmg - U->CL.S_C.ARM));
7439         dmg = (dmg*omfg/100 + dmg - U->CL.S_C.ARM);
7440         
7441         
7442         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7443         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7444         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7445         
7446         if(U->CL.S_C.typeMOVE == RIKU){
7447             if(U2A->riku == A) dmg = dmg*1.2;
7448             if(U2A->riku == B) dmg = dmg*1.0;
7449             if(U2A->riku == C) dmg = dmg*0.6;
7450             if(U2A->riku == D) dmg = dmg*0.2;
7451             if(U2A->riku == E) dmg = 0;
7452             if(U2A->riku == S) dmg = dmg*1.5;
7453             if(U2A->riku == SS) dmg = dmg*2.0;
7454         } if(U->CL.S_C.typeMOVE == UMI &&
7455              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7456             if(U2A->umi == A) dmg = dmg*1.2;
7457             if(U2A->umi == B) dmg = dmg*1.0;
7458             if(U2A->umi == C) dmg = dmg*0.6;
7459             if(U2A->umi == D) dmg = dmg*0.2;
7460             if(U2A->umi == E) dmg = 0;
7461             if(U2A->umi == S) dmg = dmg*1.5;
7462             if(U2A->umi == SS) dmg = dmg*2.0;
7463         }else if(U->CL.S_C.typeMOVE == UMI){
7464             if(U2A->riku == A) dmg = dmg*1.2;
7465             if(U2A->riku == B) dmg = dmg*1.0;
7466             if(U2A->riku == C) dmg = dmg*0.6;
7467             if(U2A->riku == D) dmg = dmg*0.2;
7468             if(U2A->riku == E) dmg = 0;
7469             if(U2A->riku == S) dmg = dmg*1.5;
7470             if(U2A->riku == SS) dmg = dmg*2.0;
7471             
7472         } if(U->CL.S_C.typeMOVE == CHU){
7473             if(U2A->chu == A) dmg = dmg*1.2;
7474             if(U2A->chu == B) dmg = dmg*1.0;
7475             if(U2A->chu == C) dmg = dmg*0.6;
7476             if(U2A->chu == D) dmg = dmg*0.2;
7477             if(U2A->chu == E) dmg = 0;
7478             if(U2A->chu == S) dmg = dmg*1.5;
7479             if(U2A->chu == SS) dmg = dmg*2.0;
7480         } if(U->CL.S_C.typeMOVE == SORA){
7481             if(U2A->sora == A) dmg = dmg*1.2;
7482             if(U2A->sora == B) dmg = dmg*1.0;
7483             if(U2A->sora == C) dmg = dmg*0.6;
7484             if(U2A->sora == D) dmg = dmg*0.2;
7485             if(U2A->sora == E) dmg = 0;
7486             if(U2A->sora == S) dmg = dmg*1.5;
7487             if(U2A->sora == SS) dmg = dmg*2.0;
7488         }
7489         
7490         NSLog(@"ユニットの地形適用後:%g", dmg);
7491         
7492         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7493         
7494         grazeFlag = false;
7495         omfg = rand()&100;
7496         if(graze > omfg && !healFlag) {dmg = dmg/5;
7497             grazeFlag = true;
7498         }
7499         
7500         if(battleDef1Flag) dmg -= dmg*0.5;
7501         battleDef1Flag = false;
7502         dmg = floor(dmg);
7503         if(dmg < 0) dmg = 0;
7504         U->CL.S_C.HP -= dmg;
7505         U->C.S_C.vigor++;
7506         
7507         while(1){
7508             if(U->CL.S_C.HP <= 0) {
7509                 U->CL.S_C.HP = 0;
7510                 U2->C.S_C.vigor += 5;
7511                 
7512                 messageProcess = 2;
7513                 if(U->dead) break;
7514                 U->dead = true;
7515                 
7516                 
7517                 if(U->targType1L)
7518                     targType1cnt[0]--;
7519                 if(U->targType2L) {
7520                     targType2cnt[0]--;
7521                     targType2Lflag = true;
7522                 }
7523                 
7524                 if(U->targType1D)
7525                     targType1cnt[1]--;
7526                 if(U->targType2D) {
7527                     targType2cnt[1]--;
7528                     targType2Dflag = true;
7529                 }
7530                 
7531                 break;
7532             }
7533             break;
7534         }
7535         
7536         
7537         
7538         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
7539         
7540         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
7541         
7542         if(![U2A->msg isEqualToString:@""]){
7543             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7544                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->CL.name]]];
7545         }
7546         
7547         
7548         
7549         if(grazeFlag)
7550             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7551         
7552         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
7553         
7554     }else if(battleDef2Flag){
7555         
7556         
7557         U = UTop;
7558         while (!(DUN[1] == U->number)) {
7559             U = U->next;
7560         }
7561         
7562         
7563         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
7564         
7565         
7566     }else if(battleDod2Flag){
7567         
7568         U = UTop;
7569         while (!(DUN[1] == U->number)) {
7570             U = U->next;
7571         }
7572         
7573         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
7574         
7575         
7576     }else{
7577         
7578         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
7579     }
7580 SKIP1:
7581     [battleDialog setStringValue:message];
7582     
7583     U = UTop;
7584     bLoopFlag = true;
7585     messageProcess++;
7586     return;
7587
7588 }
7589
7590 -(void)DisplayMessageMod2A{//攻撃側モビール
7591
7592     double def2 = (double)31/32;
7593     NSString *message = @"";
7594     
7595     enum{
7596         RIKU,
7597         UMI,
7598         CHU,
7599         SORA,
7600     };
7601     
7602     enum{
7603         A,
7604         B,
7605         C,
7606         D,
7607         E,
7608         S,
7609         SS
7610     };
7611
7612
7613     if(bLoopFlag) return;
7614     U = UTop;
7615     
7616     while (!(DUN[1] == U->number)) {
7617         U = U->next;
7618     }
7619     U2 = U;
7620     
7621     U = UTop;
7622     while (!(AUN[1] == U->number)) {
7623         U = U->next;
7624     }
7625     
7626     ATTACK *aTop = U->CL.A;
7627     for(int i = 0;i < crCAL1;i++){
7628         U->CL.A = U->CL.A->next;
7629     }
7630     
7631     
7632     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
7633     
7634     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
7635         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7636         
7637         NSString *path = @"data/AttackList/ALdata";
7638         
7639         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7640         
7641         path = [path stringByAppendingFormat:@"/"];
7642         
7643         path = [path stringByAppendingString:U->CL.A->AN.movName];
7644         
7645         NSData *AVData = [NSData dataWithContentsOfFile:path];
7646         
7647         if(AVData)
7648             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7649         
7650         
7651         if(!AVpreview){
7652             
7653             NSString *path = @"data/AttackList3/IALdata";
7654             
7655             path = [path stringByAppendingFormat:@"%dE", U->CL.A->indexE];
7656             
7657             path = [path stringByAppendingFormat:@"/"];
7658             
7659             path = [path stringByAppendingString:U->CL.A->AN.movName];
7660             
7661             
7662             NSData *AVData = [NSData dataWithContentsOfFile:path];
7663             
7664             if(AVData)
7665                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7666             
7667             
7668         }
7669         
7670         if(AVpreview) {
7671             AVPV.player = [AVpreview retain];
7672         }else{
7673             goto avAWESOME2A;
7674         }
7675         
7676         
7677         [AVPV setHidden:NO];
7678         [AVpreview play];
7679         [battleDialog setStringValue:message];
7680         
7681         avPlayerFlag1 = true;
7682         
7683         U->CL.A = aTop;
7684         
7685         U = UTop;
7686         return;
7687     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
7688         
7689         [battleDialog setStringValue:message];
7690         animationFlag1 = true;
7691         aniFrameCnt = 0;
7692         return;
7693     }
7694     
7695 avAWESOME2A:{}
7696     
7697     dmg = U->CL.A->totalD;
7698     double val = 1/log(3+U2->C.S_C.MP/64);
7699     if(U2->C.aura){
7700         dmg = dmg*val;
7701     }
7702     
7703     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7704     U->CL.S_C.EN -= costMP;
7705     
7706     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
7707     hitFix = U->CL.A->hitPercent;
7708     
7709     U2A = U->CL.A;
7710     U->CL.A = aTop;
7711     
7712     U = UTop;
7713     while (!(DUN[1] == U->number)) {
7714         U = U->next;
7715     }
7716     
7717     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
7718     
7719     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
7720     if(hi < 0) hi = 0;
7721     
7722     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
7723     if(hit > 100) hit = 100;
7724     if(U2A->D->sort == 1){
7725         hit = 100;
7726     }
7727     
7728     healFlag = false;
7729     
7730     int wtf = 100;
7731     if(battleDod2Flag) wtf = 50;
7732     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
7733         
7734         if(U2A->D->sort == 0){
7735             NSLog(@"修正前のダメージ:%g", dmg);
7736             dmg = [self dmgResist:dmg];
7737             NSLog(@"属性後のダメージ:%g", dmg);
7738             def2 = pow(def2, U->C.S_C.DEF);
7739             int omfg = rand()%100;
7740             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->C.S_C.DEF);
7741             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->C.S_C.DEF), (dmg/10 + dmg - U->C.S_C.DEF));
7742             dmg = (dmg*omfg/100/10 + dmg - U->C.S_C.DEF);
7743             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7744             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7745             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7746             
7747             if(U->C.S_C.typeMOVE == RIKU){
7748                 if(U2A->riku == A) dmg = dmg*1.2;
7749                 if(U2A->riku == B) dmg = dmg*1.0;
7750                 if(U2A->riku == C) dmg = dmg*0.6;
7751                 if(U2A->riku == D) dmg = dmg*0.2;
7752                 if(U2A->riku == E) dmg = 0;
7753                 if(U2A->riku == S) dmg = dmg*1.5;
7754                 if(U2A->riku == SS) dmg = dmg*2.0;
7755             } if(U->C.S_C.typeMOVE == UMI &&
7756                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7757                 if(U2A->umi == A) dmg = dmg*1.2;
7758                 if(U2A->umi == B) dmg = dmg*1.0;
7759                 if(U2A->umi == C) dmg = dmg*0.6;
7760                 if(U2A->umi == D) dmg = dmg*0.2;
7761                 if(U2A->umi == E) dmg = 0;
7762                 if(U2A->umi == S) dmg = dmg*1.5;
7763                 if(U2A->umi == SS) dmg = dmg*2.0;
7764             }else if(U->C.S_C.typeMOVE == UMI){
7765                 if(U2A->riku == A) dmg = dmg*1.2;
7766                 if(U2A->riku == B) dmg = dmg*1.0;
7767                 if(U2A->riku == C) dmg = dmg*0.6;
7768                 if(U2A->riku == D) dmg = dmg*0.2;
7769                 if(U2A->riku == E) dmg = 0;
7770                 if(U2A->riku == S) dmg = dmg*1.5;
7771                 if(U2A->riku == SS) dmg = dmg*2.0;
7772                 
7773             } if(U->C.S_C.typeMOVE == CHU){
7774                 if(U2A->chu == A) dmg = dmg*1.2;
7775                 if(U2A->chu == B) dmg = dmg*1.0;
7776                 if(U2A->chu == C) dmg = dmg*0.6;
7777                 if(U2A->chu == D) dmg = dmg*0.2;
7778                 if(U2A->chu == E) dmg = 0;
7779                 if(U2A->chu == S) dmg = dmg*1.5;
7780                 if(U2A->chu == SS) dmg = dmg*2.0;
7781             } if(U->C.S_C.typeMOVE == SORA){
7782                 if(U2A->sora == A) dmg = dmg*1.2;
7783                 if(U2A->sora == B) dmg = dmg*1.0;
7784                 if(U2A->sora == C) dmg = dmg*0.6;
7785                 if(U2A->sora == D) dmg = dmg*0.2;
7786                 if(U2A->sora == E) dmg = 0;
7787                 if(U2A->sora == S) dmg = dmg*1.5;
7788                 if(U2A->sora == SS) dmg = dmg*2.0;
7789             }
7790             
7791             NSLog(@"ユニットの地形適用後:%g", dmg);
7792             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
7793             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7794             
7795             grazeFlag = false;
7796             omfg = rand()%100;
7797             if(graze > omfg && !healFlag) {dmg = dmg/5;
7798                 grazeFlag = true;
7799             }
7800             if(battleDef2Flag) dmg -= dmg*0.5;
7801             battleDef2Flag = false;
7802             dmg = floor(dmg);
7803             if(dmg < 0) dmg = 0;
7804             U->C.S_C.HP -= dmg;
7805             U->C.S_C.vigor++;
7806             
7807         }else if(U2A->D->sort == 1){
7808             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
7809             dmg = floor(dmg);
7810             
7811             U->CL.S_C.HP += dmg;
7812             
7813             if(U->CL.S_C.HP > U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
7814             healFlag = true;
7815         }
7816         
7817         while(1){
7818             if(U->C.S_C.HP <= 0) {
7819                 U->C.S_C.HP = 0;
7820                 U2->C.S_C.vigor += 5;
7821                 
7822                 messageProcess = 2;
7823                 if(U->dead) break;
7824                 U->dead = true;
7825                 
7826                 
7827                 if(U->targType1L)
7828                     targType1cnt[0]--;
7829                 if(U->targType2L) {
7830                     targType2cnt[0]--;
7831                     targType2Lflag = true;
7832                 }
7833                 
7834                 if(U->targType1D)
7835                     targType1cnt[1]--;
7836                 if(U->targType2D) {
7837                     targType2cnt[1]--;
7838                     targType2Dflag = true;
7839                 }
7840                 
7841                 break;
7842             }
7843             break;
7844         }
7845         
7846         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
7847         [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
7848         
7849         if(![U2A->msg isEqualToString:@""]){
7850             
7851             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7852                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->C.name]]];
7853             
7854         }
7855         
7856         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7857         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
7858         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
7859     }else if(battleDef1Flag){
7860         
7861         
7862         U = UTop;
7863         while (!(AUN[1] == U->number)) {
7864             U = U->next;
7865         }
7866         
7867         
7868         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
7869         
7870         
7871     }else if(battleDod1Flag){
7872         
7873         U = UTop;
7874         while (!(AUN[1] == U->number)) {
7875             U = U->next;
7876         }
7877         
7878         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
7879         
7880         
7881     }else{
7882         
7883         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
7884         
7885     }
7886     [battleDialog setStringValue:message];
7887     
7888     
7889     U = UTop;
7890     
7891     bLoopFlag = true;
7892     
7893     if(healFlag) {
7894         messageProcess++;
7895     };
7896     messageProcess++;
7897     
7898     return;
7899
7900
7901 }
7902
7903 -(void)DisplayMessageMod2B{
7904     
7905     double def2 = (double)31/32;
7906     NSString *message = @"";
7907     
7908     enum{
7909         RIKU,
7910         UMI,
7911         CHU,
7912         SORA,
7913     };
7914     
7915     enum{
7916         A,
7917         B,
7918         C,
7919         D,
7920         E,
7921         S,
7922         SS
7923     };
7924
7925     
7926     if(bLoopFlag) return;
7927     
7928     U = UTop;
7929     while (!(AUN[1] == U->number)) {
7930         U = U->next;
7931     }
7932     U2 = U;
7933     U = UTop;
7934     
7935     U = UTop;
7936     while (!(DUN[1] == U->number)) {
7937         U = U->next;
7938     }
7939     
7940     ATTACK *aTop2 = U->C.A;
7941     int mostDmg = 0;
7942     int mostNum = -1;
7943     int num = 0;
7944     int mpCost =0;
7945     if(U->C.A) {
7946         mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7947         costVIG = U->C.A->vigor;
7948         }
7949     while(U->C.A){
7950         costVIG = U->C.A->vigor;
7951
7952         mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7953         if(U->C.A->D)
7954         if(mostDmg < U->C.A->totalD && U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1 && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
7955             mostDmg = U->C.A->totalD;
7956             mostNum = num;
7957         }
7958         U->C.A = U->C.A->next;
7959         num++;
7960     }
7961     
7962     U->C.A = aTop2;
7963     
7964     if(!battleSet2PushedFlag){
7965         for(int i = 0;i < mostNumSub;i++){
7966             U->C.A = U->C.A->next;
7967         }
7968         
7969         if(mostNum < 0) U->C.A = NULL;
7970     }else{
7971         for(int i = 0;i < crCAL2;i++){
7972             U->C.A = U->C.A->next;
7973         }
7974     }
7975     if(U->C.A){
7976         if(U->C.A->D){
7977     if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1){
7978     }else while(U->CL.A){
7979         U->C.A = U->C.A->next;
7980     }}
7981     }
7982     if(!U->C.A){
7983         U->C.A = aTop2;
7984         U = UTop;
7985         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
7986         goto SKIP1;
7987     }
7988     if(!U->C.A->name){
7989         U->C.A = aTop2;
7990         U = UTop;
7991         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
7992         goto SKIP1;
7993     }
7994     
7995     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
7996
7997     
7998     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
7999         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
8000         
8001         NSString *path = @"data/AttackList/ALdata";
8002         
8003         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
8004         
8005         path = [path stringByAppendingFormat:@"/"];
8006         
8007         path = [path stringByAppendingString:U->C.A->AN.movName];
8008         
8009         
8010         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
8011         
8012         if(AVpreview) {
8013             AVPV.player = [AVpreview retain];
8014         }else{
8015             goto avAWESOME2B;
8016         }
8017         
8018         [AVPV setControlsStyle:0];
8019         [AVPV setHidden:NO];
8020         [AVpreview play];
8021         [battleDialog setStringValue:message];
8022         
8023         avPlayerFlag2 = true;
8024         
8025         U->C.A = aTop2;
8026         U = UTop;
8027         return;
8028     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
8029         
8030         
8031         animationFlag2 = true;
8032         aniFrameCnt = 0;
8033         return;
8034     }
8035     
8036     
8037 avAWESOME2B:{}
8038     
8039     
8040     /*
8041     if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
8042     if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
8043     if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
8044     if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
8045     if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
8046     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
8047     */
8048
8049     double urSupposedToGet;
8050     
8051     if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
8052     
8053     double oopsIsRight;
8054     bool lolFlag = false;
8055     if(U->C.A) {
8056     if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
8057     else oopsIsRight = U->C.S_C.MIS;
8058         
8059         if(U->C.A->D){
8060     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/100;
8061     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/100;
8062     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/100;
8063     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/100;
8064     if(U->C.A->D->type == 4) {
8065         lolFlag = true;
8066         dmg = (U->C.S_C.CAP + urSupposedToGet)*oopsIsRight/100;
8067     }
8068     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
8069         }}
8070         costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
8071     U->C.S_C.MP -= costMP;
8072     
8073     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
8074     hitFix = U->C.A->hitPercent;
8075     
8076     U2A = U->C.A;
8077     U->C.A = aTop2;
8078     
8079     U = UTop;
8080     while (!(AUN[1] == U->number)) {
8081         U = U->next;
8082     }
8083     
8084     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
8085     if(hit > 100) hit = 100;
8086     
8087     battleDod1Flag = false;
8088     
8089     int omg = 100;
8090     if(battleDod1Flag) omg = 50;
8091     
8092     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
8093         NSLog(@"修正前のダメージ:%g, %g", dmg, U2A->D->seed);
8094         
8095         dmg = [self dmgResist:dmg];
8096         NSLog(@"属性後のダメージ:%g", dmg);
8097         def2 = pow(def2, U->CL.S_C.ARM);
8098         int omfg = rand()%100;
8099         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
8100         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg/10 + dmg - U->CL.S_C.ARM));
8101         if(lolFlag) dmg = (dmg*omfg/100/10 + dmg);
8102         else dmg = (dmg*omfg/100/10+ dmg - U->CL.S_C.ARM);
8103
8104         
8105         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
8106         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
8107         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
8108         
8109         if(U->CL.S_C.typeMOVE == RIKU){
8110             if(U2A->riku == A) dmg = dmg*1.2;
8111             if(U2A->riku == B) dmg = dmg*1.0;
8112             if(U2A->riku == C) dmg = dmg*0.6;
8113             if(U2A->riku == D) dmg = dmg*0.2;
8114             if(U2A->riku == E) dmg = 0;
8115             if(U2A->riku == S) dmg = dmg*1.5;
8116             if(U2A->riku == SS) dmg = dmg*2.0;
8117         } if(U->CL.S_C.typeMOVE == UMI &&
8118              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
8119             if(U2A->umi == A) dmg = dmg*1.2;
8120             if(U2A->umi == B) dmg = dmg*1.0;
8121             if(U2A->umi == C) dmg = dmg*0.6;
8122             if(U2A->umi == D) dmg = dmg*0.2;
8123             if(U2A->umi == E) dmg = 0;
8124             if(U2A->umi == S) dmg = dmg*1.5;
8125             if(U2A->umi == SS) dmg = dmg*2.0;
8126         }else if(U->CL.S_C.typeMOVE == UMI){
8127             if(U2A->riku == A) dmg = dmg*1.2;
8128             if(U2A->riku == B) dmg = dmg*1.0;
8129             if(U2A->riku == C) dmg = dmg*0.6;
8130             if(U2A->riku == D) dmg = dmg*0.2;
8131             if(U2A->riku == E) dmg = 0;
8132             if(U2A->riku == S) dmg = dmg*1.5;
8133             if(U2A->riku == SS) dmg = dmg*2.0;
8134             
8135         } if(U->CL.S_C.typeMOVE == CHU){
8136             if(U2A->chu == A) dmg = dmg*1.2;
8137             if(U2A->chu == B) dmg = dmg*1.0;
8138             if(U2A->chu == C) dmg = dmg*0.6;
8139             if(U2A->chu == D) dmg = dmg*0.2;
8140             if(U2A->chu == E) dmg = 0;
8141             if(U2A->chu == S) dmg = dmg*1.5;
8142             if(U2A->chu == SS) dmg = dmg*2.0;
8143         } if(U->CL.S_C.typeMOVE == SORA){
8144             if(U2A->sora == A) dmg = dmg*1.2;
8145             if(U2A->sora == B) dmg = dmg*1.0;
8146             if(U2A->sora == C) dmg = dmg*0.6;
8147             if(U2A->sora == D) dmg = dmg*0.2;
8148             if(U2A->sora == E) dmg = 0;
8149             if(U2A->sora == S) dmg = dmg*1.5;
8150             if(U2A->sora == SS) dmg = dmg*2.0;
8151         }
8152         
8153         NSLog(@"ユニットの地形適用後:%g", dmg);
8154         
8155         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
8156         
8157         grazeFlag = false;
8158         omfg = rand()&100;
8159         if(graze > omfg && !healFlag) {dmg = dmg/5;
8160             grazeFlag = true;
8161         }
8162         
8163         if(battleDef1Flag) dmg -= dmg*0.5;
8164         battleDef1Flag = false;
8165         dmg = floor(dmg);
8166         if(dmg < 0) dmg = 0;
8167         U->CL.S_C.HP -= dmg;
8168         U->C.S_C.vigor++;
8169         
8170         while(1){
8171             if(U->CL.S_C.HP <= 0) {
8172                 U->CL.S_C.HP = 0;
8173                 U2->C.S_C.vigor += 5;
8174                 
8175                 messageProcess = 2;
8176                 if(U->dead) break;
8177                 U->dead = true;
8178                
8179                 
8180                 if(U->targType1L)
8181                     targType1cnt[0]--;
8182                 if(U->targType2L) {
8183                     targType2cnt[0]--;
8184                     targType2Lflag = true;
8185                 }
8186                 
8187                 if(U->targType1D)
8188                     targType1cnt[1]--;
8189                 if(U->targType2D) {
8190                     targType2cnt[1]--;
8191                     targType2Dflag = true;
8192                 }
8193                 
8194                 break;
8195             }
8196             break;
8197         }
8198         
8199         
8200         
8201         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
8202         
8203         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
8204         
8205         if(![U2A->msg isEqualToString:@""]){
8206             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
8207                                                         [self originalMessage:U2A->msg subj:U2->C.name obje:U->CL.name]]];
8208         }
8209         
8210         
8211         
8212         if(grazeFlag)
8213             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
8214         
8215         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
8216         
8217     }else if(battleDef2Flag){
8218         
8219         
8220         U = UTop;
8221         while (!(DUN[1] == U->number)) {
8222             U = U->next;
8223         }
8224         
8225         
8226         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
8227         
8228         
8229     }else if(battleDod2Flag){
8230         
8231         U = UTop;
8232         while (!(DUN[1] == U->number)) {
8233             U = U->next;
8234         }
8235         
8236         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
8237         
8238         
8239     }else{
8240         
8241         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
8242     }
8243 SKIP1:
8244     [battleDialog setStringValue:message];
8245     
8246     U = UTop;
8247     bLoopFlag = true;
8248     messageProcess++;
8249     return;
8250
8251
8252 }
8253
8254 -(void)DisplayMessageMod3A{//防御側モビール
8255
8256     double def2 = (double)31/32;
8257     NSString *message = @"";
8258     
8259     enum{
8260         RIKU,
8261         UMI,
8262         CHU,
8263         SORA,
8264     };
8265     
8266     enum{
8267         A,
8268         B,
8269         C,
8270         D,
8271         E,
8272         S,
8273         SS
8274     };
8275     
8276     static bool extentbool3 = false;
8277     static bool extentbool4 = false;
8278     if(!extentbool3 && extentBattleFlag2){
8279         extentbool3 = true;
8280         extentMPcostFlag = false;
8281         DUNnum = 1;
8282     }
8283     if(!extentBattleFlag2){
8284         DUNnum = 1;
8285     }
8286     
8287     if(bLoopFlag) return;
8288     U = UTop;
8289     U = UTop;
8290     while (!(DUN[DUNnum] == U->number)) {
8291         U = U->next;
8292     }
8293     U2 = U;
8294     
8295     U = UTop;
8296     while (!(AUN[1] == U->number)) {
8297         U = U->next;
8298     }
8299     
8300     ATTACK *aTop = U->C.A;
8301     for(int i = 0;i < crCAL1;i++){
8302         U->C.A = U->C.A->next;
8303     }
8304     
8305     
8306     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
8307     
8308     
8309     [bplayer2 setImage:U2->CL.imgb];
8310     //[bplayer2 setImageScaling:NSScaleToFit];
8311     [nplayer2 setStringValue:U2->CL.name];
8312     [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U2->CL.S_C.HP, U2->CL.S_M.HP]];
8313     [lplayer2 setIntValue:U2->CL.S_C.HP/U2->CL.S_M.HP*100];
8314     [iplayer2 setImage:MC[chipNum[U2->x][U2->y]].img];
8315     [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
8316     [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
8317     
8318     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){
8319         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
8320         
8321         NSString *path = @"data/AttackList/ALdata";
8322         
8323         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
8324         
8325         path = [path stringByAppendingFormat:@"/"];
8326         
8327         path = [path stringByAppendingString:U->C.A->AN.movName];
8328         
8329         NSData *AVData = [NSData dataWithContentsOfFile:path];
8330         
8331         if(AVData)
8332             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
8333         
8334         
8335         if(!AVpreview){
8336             
8337             NSString *path = @"data/AttackList3/IALdata";
8338             
8339             path = [path stringByAppendingFormat:@"%dE", U->C.A->indexE];
8340             
8341             path = [path stringByAppendingFormat:@"/"];
8342             
8343             path = [path stringByAppendingString:U->C.A->AN.movName];
8344             
8345             
8346             NSData *AVData = [NSData dataWithContentsOfFile:path];
8347             
8348             if(AVData)
8349                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
8350             
8351             
8352         }
8353         
8354         if(AVpreview) {
8355             AVPV.player = [AVpreview retain];
8356         }else{
8357             goto avAWESOME3A;
8358         }
8359         
8360         
8361         [AVPV setHidden:NO];
8362         [AVpreview play];
8363         [battleDialog setStringValue:message];
8364         
8365         avPlayerFlag1 = true;
8366         
8367         
8368         U->C.A = aTop;
8369         U = UTop;
8370         return;
8371     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUN[DUNnum] == 1){
8372         
8373         [battleDialog setStringValue:message];
8374         animationFlag1 = true;
8375         aniFrameCnt = 0;
8376         return;
8377     }
8378     
8379 avAWESOME3A:{}
8380     
8381     /*
8382     if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
8383     if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
8384     if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
8385     if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
8386     if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
8387     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
8388     */
8389     
8390     double urSupposedToGet;
8391     
8392     if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
8393     
8394     double oopsIsRight;
8395     
8396     if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
8397     else oopsIsRight = U->C.S_C.MIS;
8398     bool lolflag = false;
8399     if(U->C.A->D){
8400     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/100;
8401     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/100;
8402     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/100;
8403     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/100;
8404     
8405     if(U->C.A->D->type == 4){
8406         lolflag = true;
8407         dmg = (U->C.S_C.CAP + U->C.A->totalD)*oopsIsRight/100;
8408     
8409     }
8410     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
8411     double val2 = log(3+U2->C.S_C.MP/64);
8412         if(U->C.aura){
8413             dmg = dmg*val2;
8414         }
8415     }
8416     costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
8417     
8418     if(extentMPcostFlag && extentBattleFlag2){
8419         
8420     }else{
8421         U->C.S_C.MP -= costMP;
8422         extentMPcostFlag = true;
8423     }
8424     
8425     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
8426     hitFix = U->C.A->hitPercent;
8427     
8428     U2A = U->C.A;
8429     U->C.A = aTop;
8430     
8431     U = UTop;
8432     while (!(DUN[DUNnum] == U->number)) {
8433         U = U->next;
8434     }
8435     hit = 60 + hit/(U->CL.S_C.MOB*U->C.S_C.DOD/100)*10 - (U->CL.S_C.MOB*U->C.S_C.DOD/100)/hit*10 + hitFix;
8436     if(hit > 100) hit = 100;
8437     if(U2A->D->sort == 1){
8438         hit = 100;
8439     }
8440     
8441     healFlag = false;
8442     
8443     int wtf = 100;
8444     if(battleDod2Flag) wtf = 50;
8445     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
8446         
8447         if(U2A->D->sort == 0){
8448             NSLog(@"修正前のダメージ:%g", dmg);
8449             dmg = [self dmgResist:dmg];
8450             NSLog(@"属性後のダメージ:%g", dmg);
8451             def2 = pow(def2, U->CL.S_C.ARM);
8452             int omfg = rand()%100;
8453             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, (U->CL.S_C.ARM));
8454             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg/10 + dmg - U->CL.S_C.ARM));
8455             if(lolflag) dmg = (dmg*omfg/100/10 + dmg);
8456             else dmg = (dmg*omfg/100/10 + dmg - U->CL.S_C.ARM);
8457             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
8458             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
8459             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
8460             
8461             if(U->CL.S_C.typeMOVE == RIKU){
8462                 if(U2A->riku == A) dmg = dmg*1.2;
8463                 if(U2A->riku == B) dmg = dmg*1.0;
8464                 if(U2A->riku == C) dmg = dmg*0.6;
8465                 if(U2A->riku == D) dmg = dmg*0.2;
8466                 if(U2A->riku == E) dmg = 0;
8467                 if(U2A->riku == S) dmg = dmg*1.5;
8468                 if(U2A->riku == SS) dmg = dmg*2.0;
8469             } if(U->CL.S_C.typeMOVE == UMI &&
8470                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
8471                 if(U2A->umi == A) dmg = dmg*1.2;
8472                 if(U2A->umi == B) dmg = dmg*1.0;
8473                 if(U2A->umi == C) dmg = dmg*0.6;
8474                 if(U2A->umi == D) dmg = dmg*0.2;
8475                 if(U2A->umi == E) dmg = 0;
8476                 if(U2A->umi == S) dmg = dmg*1.5;
8477                 if(U2A->umi == SS) dmg = dmg*2.0;
8478             }else if(U->CL.S_C.typeMOVE == UMI){
8479                 if(U2A->riku == A) dmg = dmg*1.2;
8480                 if(U2A->riku == B) dmg = dmg*1.0;
8481                 if(U2A->riku == C) dmg = dmg*0.6;
8482                 if(U2A->riku == D) dmg = dmg*0.2;
8483                 if(U2A->riku == E) dmg = 0;
8484                 if(U2A->riku == S) dmg = dmg*1.5;
8485                 if(U2A->riku == SS) dmg = dmg*2.0;
8486                 
8487             } if(U->CL.S_C.typeMOVE == CHU){
8488                 if(U2A->chu == A) dmg = dmg*1.2;
8489                 if(U2A->chu == B) dmg = dmg*1.0;
8490                 if(U2A->chu == C) dmg = dmg*0.6;
8491                 if(U2A->chu == D) dmg = dmg*0.2;
8492                 if(U2A->chu == E) dmg = 0;
8493                 if(U2A->chu == S) dmg = dmg*1.5;
8494                 if(U2A->chu == SS) dmg = dmg*2.0;
8495             } if(U->CL.S_C.typeMOVE == SORA){
8496                 if(U2A->sora == A) dmg = dmg*1.2;
8497                 if(U2A->sora == B) dmg = dmg*1.0;
8498                 if(U2A->sora == C) dmg = dmg*0.6;
8499                 if(U2A->sora == D) dmg = dmg*0.2;
8500                 if(U2A->sora == E) dmg = 0;
8501                 if(U2A->sora == S) dmg = dmg*1.5;
8502                 if(U2A->sora == SS) dmg = dmg*2.0;
8503             }
8504             
8505             NSLog(@"ユニットの地形適用後:%g", dmg);
8506             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
8507             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
8508             
8509             grazeFlag = false;
8510             omfg = rand()%100;
8511             if(graze > omfg && !healFlag) {dmg = dmg/5;
8512                 grazeFlag = true;
8513             }
8514             if(battleDef2Flag) dmg -= dmg*0.5;
8515             battleDef2Flag = false;
8516             dmg = floor(dmg);
8517             if(dmg < 0) dmg = 0;
8518             U->CL.S_C.HP -= dmg;
8519             U->C.S_C.vigor++;
8520             
8521         }else if(U2A->D->sort == 1){
8522             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
8523             dmg = floor(dmg);
8524             
8525             U->C.S_C.HP += dmg;
8526             if(U->C.S_C.HP > U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
8527             healFlag = true;
8528         }
8529         
8530         while(1){
8531             if(U->CL.S_C.HP <= 0) {
8532                 U->CL.S_C.HP = 0;
8533                 U2->C.S_C.vigor += 5;
8534                 
8535                 messageProcess = 2;
8536                 if(U->dead) break;
8537                 U->dead = true;
8538                 
8539                 
8540                 if(U->targType1L)
8541                     targType1cnt[0]--;
8542                 if(U->targType2L) {
8543                     targType2cnt[0]--;
8544                     targType2Lflag = true;
8545                 }
8546                 
8547                 if(U->targType1D)
8548                     targType1cnt[1]--;
8549                 if(U->targType2D) {
8550                     targType2cnt[1]--;
8551                     targType2Dflag = true;
8552                 }
8553                 
8554                 break;
8555             }
8556             break;
8557         }
8558         
8559         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
8560         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
8561         
8562         if(![U2A->msg isEqualToString:@""]){
8563             
8564             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
8565                                                         [self originalMessage:U2A->msg subj:U2->C.name obje:U->CL.name]]];
8566             
8567         }
8568         
8569         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
8570         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
8571         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->CL.name, dmg]];
8572     }else if(battleDef1Flag){
8573         
8574         
8575         U = UTop;
8576         while (!(AUN[1] == U->number)) {
8577             U = U->next;
8578         }
8579         
8580         
8581         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
8582         
8583         
8584     }else if(battleDod1Flag){
8585         
8586         U = UTop;
8587         while (!(AUN[1] == U->number)) {
8588             U = U->next;
8589         }
8590         
8591         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
8592         
8593         
8594     }else{
8595         
8596         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
8597         
8598     }
8599     [battleDialog setStringValue:message];
8600     
8601     
8602     U = UTop;
8603     
8604     bLoopFlag = true;
8605     
8606     if(!extentBattleFlag2){
8607         if(healFlag) {
8608             messageProcess++;
8609         };
8610         messageProcess++;
8611     }else if(extentBattleFlag2){
8612         DUNnum++;
8613         messageProcess = 1;
8614         if(DUN[DUNnum] <= 0){
8615             DUNnum = 1;
8616             messageProcess++;
8617             messageProcess++;
8618             extentBattleFlag2 = false;
8619             extentbool3 = false;
8620             extentMPcostFlag = false;
8621         }
8622     }
8623     return;
8624
8625 }
8626
8627 -(void)DisplayMessageMod3B{
8628
8629     
8630     double def2 = (double)31/32;
8631     NSString *message = @"";
8632     
8633     enum{
8634         RIKU,
8635         UMI,
8636         CHU,
8637         SORA,
8638     };
8639     
8640     enum{
8641         A,
8642         B,
8643         C,
8644         D,
8645         E,
8646         S,
8647         SS
8648     };
8649
8650     
8651     if(bLoopFlag) return;
8652     U = UTop;
8653     
8654     U = UTop;
8655     while (!(AUN[1] == U->number)) {
8656         U = U->next;
8657     }
8658     U2 = U;
8659     
8660     U = UTop;
8661     while (!(DUN[1] == U->number)) {
8662         U = U->next;
8663     }
8664     ATTACK *aTop2 = U->CL.A;
8665     int mostDmg = 0;
8666     int mostNum = -1;
8667     int num = 0;
8668     int mpCost =0;
8669     if(U->CL.A) {
8670         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8671         costVIG = U->C.A->vigor;
8672     }
8673     while(U->CL.A){
8674         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8675         if(mostDmg < U->CL.A->totalD && U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1 && mpCost <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
8676             mostDmg = U->CL.A->totalD;
8677             mostNum = num;
8678         }
8679         U->CL.A = U->CL.A->next;
8680         num++;
8681     }
8682     
8683     if(mostNum < 0) U->C.A = NULL;
8684     
8685     U->CL.A = aTop2;
8686     
8687     if(!battleSet2PushedFlag){
8688         for(int i = 0;i < mostNumSub;i++){
8689             U->CL.A = U->CL.A->next;
8690         }
8691         
8692         
8693     }else{
8694         for(int i = 0;i < crCAL2;i++){
8695             U->CL.A = U->C.A->next;
8696         }
8697     }
8698     
8699     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1){
8700     }else while(U->CL.A){
8701         U->CL.A = U->CL.A->next;
8702     }
8703     
8704     if(!U->CL.A){
8705         U->CL.A = aTop2;
8706         U = UTop;
8707         
8708         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
8709         goto SKIP1;
8710     }
8711     
8712     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
8713     
8714     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
8715         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
8716         
8717         NSString *path = @"data/AttackList/ALdata";
8718         
8719         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
8720         
8721         path = [path stringByAppendingFormat:@"/"];
8722         
8723         path = [path stringByAppendingString:U->CL.A->AN.movName];
8724         
8725         
8726         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
8727         
8728         if(AVpreview) {
8729             AVPV.player = [AVpreview retain];
8730         }else{
8731             goto avAWESOME3B;
8732         }
8733         
8734         [AVPV setControlsStyle:0];
8735         [AVPV setHidden:NO];
8736         [AVpreview play];
8737         [battleDialog setStringValue:message];
8738         
8739         avPlayerFlag2 = true;
8740         
8741         U->CL.A = aTop2;
8742         U = UTop;
8743         return;
8744     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
8745         
8746         
8747         animationFlag2 = true;
8748         aniFrameCnt = 0;
8749         return;
8750     }
8751     
8752     
8753 avAWESOME3B:{}
8754     
8755     
8756
8757     dmg = U->CL.A->totalD;
8758     
8759     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8760     U->CL.S_C.EN -= costMP;
8761     
8762     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
8763     hitFix = U->CL.A->hitPercent;
8764     
8765     U2A = U->CL.A;
8766     U->CL.A = aTop2;
8767     
8768     U = UTop;
8769     while (!(AUN[1] == U->number)) {
8770         U = U->next;
8771     }
8772     
8773     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
8774     
8775     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
8776     if(hi < 0) hi = 0;
8777     
8778     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi/10+1)*hit2/hit*10;
8779     if(hit > 100) hit = 100;
8780     
8781     battleDod1Flag = false;
8782     
8783     int omg = 100;
8784     if(battleDod1Flag) omg = 50;
8785     
8786     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
8787         NSLog(@"修正前のダメージ:%g", dmg);
8788         dmg = [self dmgResist:dmg];
8789         NSLog(@"属性後のダメージ:%g", dmg);
8790         def2 = pow(def2, U->C.S_C.DEF);
8791         int omfg = rand()%100;
8792         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->C.S_C.DEF);
8793         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->C.S_C.DEF), (dmg/10 + dmg - U->C.S_C.DEF));
8794         dmg = (dmg*omfg/100/10 + dmg - U->C.S_C.DEF);
8795         
8796         
8797         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
8798         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
8799         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
8800         
8801         if(U->C.S_C.typeMOVE == RIKU){
8802             if(U2A->riku == A) dmg = dmg*1.2;
8803             if(U2A->riku == B) dmg = dmg*1.0;
8804             if(U2A->riku == C) dmg = dmg*0.6;
8805             if(U2A->riku == D) dmg = dmg*0.2;
8806             if(U2A->riku == E) dmg = 0;
8807             if(U2A->riku == S) dmg = dmg*1.5;
8808             if(U2A->riku == SS) dmg = dmg*2.0;
8809         } if(U->C.S_C.typeMOVE == UMI &&
8810              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
8811             if(U2A->umi == A) dmg = dmg*1.2;
8812             if(U2A->umi == B) dmg = dmg*1.0;
8813             if(U2A->umi == C) dmg = dmg*0.6;
8814             if(U2A->umi == D) dmg = dmg*0.2;
8815             if(U2A->umi == E) dmg = 0;
8816             if(U2A->umi == S) dmg = dmg*1.5;
8817             if(U2A->umi == SS) dmg = dmg*2.0;
8818         }else if(U->C.S_C.typeMOVE == UMI){
8819             if(U2A->riku == A) dmg = dmg*1.2;
8820             if(U2A->riku == B) dmg = dmg*1.0;
8821             if(U2A->riku == C) dmg = dmg*0.6;
8822             if(U2A->riku == D) dmg = dmg*0.2;
8823             if(U2A->riku == E) dmg = 0;
8824             if(U2A->riku == S) dmg = dmg*1.5;
8825             if(U2A->riku == SS) dmg = dmg*2.0;
8826             
8827         } if(U->C.S_C.typeMOVE == CHU){
8828             if(U2A->chu == A) dmg = dmg*1.2;
8829             if(U2A->chu == B) dmg = dmg*1.0;
8830             if(U2A->chu == C) dmg = dmg*0.6;
8831             if(U2A->chu == D) dmg = dmg*0.2;
8832             if(U2A->chu == E) dmg = 0;
8833             if(U2A->chu == S) dmg = dmg*1.5;
8834             if(U2A->chu == SS) dmg = dmg*2.0;
8835         } if(U->C.S_C.typeMOVE == SORA){
8836             if(U2A->sora == A) dmg = dmg*1.2;
8837             if(U2A->sora == B) dmg = dmg*1.0;
8838             if(U2A->sora == C) dmg = dmg*0.6;
8839             if(U2A->sora == D) dmg = dmg*0.2;
8840             if(U2A->sora == E) dmg = 0;
8841             if(U2A->sora == S) dmg = dmg*1.5;
8842             if(U2A->sora == SS) dmg = dmg*2.0;
8843         }
8844         
8845         NSLog(@"ユニットの地形適用後:%g", dmg);
8846         
8847         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
8848         
8849         grazeFlag = false;
8850         omfg = rand()&100;
8851         if(graze > omfg && !healFlag) {dmg = dmg/5;
8852             grazeFlag = true;
8853         }
8854         
8855         if(battleDef1Flag) dmg -= dmg*0.5;
8856         battleDef1Flag = false;
8857         dmg = floor(dmg);
8858         if(dmg < 0) dmg = 0;
8859         U->C.S_C.HP -= dmg;
8860         U->C.S_C.vigor++;
8861         
8862         while(1){
8863             if(U->C.S_C.HP <= 0) {
8864                 U->C.S_C.HP = 0;
8865                 U2->C.S_C.vigor += 5;
8866                 
8867                 messageProcess = 2;
8868                 if(U->dead) break;
8869                 U->dead = true;
8870                
8871                 
8872                 if(U->targType1L)
8873                     targType1cnt[0]--;
8874                 if(U->targType2L) {
8875                     targType2cnt[0]--;
8876                     targType2Lflag = true;
8877                 }
8878                 
8879                 if(U->targType1D)
8880                     targType1cnt[1]--;
8881                 if(U->targType2D) {
8882                     targType2cnt[1]--;
8883                     targType2Dflag = true;
8884                 }
8885                 
8886                 break;
8887             }
8888             break;
8889         }
8890         
8891         
8892         
8893         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
8894         
8895         [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
8896         
8897         if(![U2A->msg isEqualToString:@""]){
8898             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
8899                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->C.name]]];
8900         }
8901         
8902         
8903         
8904         if(grazeFlag)
8905             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
8906         
8907         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
8908         
8909     }else if(battleDef2Flag){
8910         
8911         
8912         U = UTop;
8913         while (!(DUN[1] == U->number)) {
8914             U = U->next;
8915         }
8916         
8917         
8918         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
8919         
8920         
8921     }else if(battleDod2Flag){
8922         
8923         U = UTop;
8924         while (!(DUN[1] == U->number)) {
8925             U = U->next;
8926         }
8927         
8928         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
8929         
8930         
8931     }else{
8932         
8933         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
8934     }
8935 SKIP1:
8936     [battleDialog setStringValue:message];
8937     
8938     U = UTop;
8939     bLoopFlag = true;
8940     messageProcess++;
8941     return;
8942
8943 }
8944
8945 -(NSString*)originalMessage:(NSString*)str subj:(NSString*)subj obje:(NSString*)obje{
8946
8947     NSString *string;
8948     NSArray *array;
8949     NSString *result = @"";
8950     
8951     string = [str copy];
8952     
8953     array = [string componentsSeparatedByString:@"$subj"];
8954     
8955     for(int i = 0;i < [array count];i++){
8956         if(i != 0)
8957             result = [[result stringByAppendingString:[NSString stringWithFormat:@"%@", subj]] retain];
8958         
8959         result = [[result stringByAppendingString:[array objectAtIndex:i]] retain];
8960     }
8961     
8962     string = [result copy];
8963     
8964     array = [string componentsSeparatedByString:@"$obje"];
8965     
8966     result = @"";
8967     
8968     for(int i = 0;i < [array count];i++){
8969         if(i != 0)
8970             result = [[result stringByAppendingString:[NSString stringWithFormat:@"%@", obje]] retain];
8971         
8972         result = [[result stringByAppendingString:[array objectAtIndex:i]] retain];
8973     }
8974     
8975     //NSLog(@"%@", result);
8976     
8977     return result;
8978 }
8979
8980
8981
8982 -(double)dmgResist:(double)DMG{
8983
8984     int sd[22];
8985     
8986     sd[0] = U->C.R_C.blow + U->C.R_F.blow;
8987     sd[1] = U->C.R_C.slash + U->C.R_F.slash;
8988     sd[2] = U->C.R_C.stub + U->C.R_F.stub;
8989     sd[3] = U->C.R_C.arrow + U->C.R_F.arrow;
8990     sd[4] = U->C.R_C.gun + U->C.R_F.gun;
8991     sd[5] = U->C.R_C.shell + U->C.R_F.shell;
8992              
8993     sd[6] = U->C.R_C.flame + U->C.R_F.flame;
8994     sd[7] = U->C.R_C.cold + U->C.R_F.cold;
8995     sd[8] = U->C.R_C.electoric + U->C.R_F.electoric;
8996     sd[9] = U->C.R_C.air + U->C.R_F.air;
8997     sd[10] = U->C.R_C.water + U->C.R_F.water;
8998     sd[11] = U->C.R_C.gas + U->C.R_F.gas;
8999     sd[12] = U->C.R_C.holy + U->C.R_F.holy;
9000     sd[13] = U->C.R_C.dark + U->C.R_F.dark;
9001     sd[14] = U->C.R_C.explosion + U->C.R_F.explosion;
9002     sd[15] = U->C.R_C.blood + U->C.R_F.blood;
9003     
9004     sd[16] = U->C.R_C.paralysis + U->C.R_F.paralysis;
9005     sd[17] = U->C.R_C.confusion + U->C.R_F.confusion;
9006     sd[18] = U->C.R_C.poison + U->C.R_F.poison;
9007     sd[19] = U->C.R_C.sleep + U->C.R_F.sleep;
9008     sd[20] = U->C.R_C.charm + U->C.R_F.charm;
9009     sd[21] = U->C.R_C.silent + U->C.R_F.silent;
9010
9011     
9012     
9013     for(int i = 0;i <= 21;i++)
9014         sd[i] &= ~(sd[i] >> 31);
9015     
9016     if(U2A->D){
9017         
9018     if(U2A->D->seed == 0) DMG = DMG * sd[0]/100;
9019     if(U2A->D->seed == 1) DMG = DMG * sd[1]/100;
9020     if(U2A->D->seed == 2) DMG = DMG * sd[2]/100;
9021     if(U2A->D->seed == 3) DMG = DMG * sd[3]/100;
9022     if(U2A->D->seed == 4) DMG = DMG * sd[4]/100;
9023     if(U2A->D->seed == 5) DMG = DMG * sd[5]/100;
9024     
9025     if(U2A->D->seed == 6) DMG = DMG * sd[6]/100;
9026     if(U2A->D->seed == 7) DMG = DMG * sd[7]/100;
9027     if(U2A->D->seed == 8) DMG = DMG * sd[8]/100;
9028     if(U2A->D->seed == 9) DMG = DMG * sd[9]/100;
9029     if(U2A->D->seed == 10) DMG = DMG * sd[10]/100;
9030     if(U2A->D->seed == 11) DMG = DMG * sd[11]/100;
9031     if(U2A->D->seed == 12) DMG = DMG * sd[12]/100;
9032     if(U2A->D->seed == 13) DMG = DMG * sd[13]/100;
9033     if(U2A->D->seed == 14) DMG = DMG * sd[14]/100;
9034     if(U2A->D->seed == 15) DMG = DMG * sd[15]/100;
9035     
9036     if(U2A->D->seed == 16) DMG = DMG * sd[16]/100;
9037     if(U2A->D->seed == 17) DMG = DMG * sd[17]/100;
9038     if(U2A->D->seed == 18) DMG = DMG * sd[18]/100;
9039     if(U2A->D->seed == 19) DMG = DMG * sd[19]/100;
9040     if(U2A->D->seed == 20) DMG = DMG * sd[20]/100;
9041     if(U2A->D->seed == 21) DMG = DMG * sd[21]/100;
9042     }
9043     return DMG;
9044 }
9045
9046 -(IBAction)battleStart:(id)sender{
9047     battleFlag = false;
9048     battleSetUp = true;
9049     battleSet1Flag = false;
9050     battleSet2Flag = false;
9051     battleSettingFlag = false;
9052
9053     [battlePanel close];
9054 }
9055
9056
9057 -(void)battleStartCPU{
9058     battleFlag = false;
9059     battleSetUp = true;
9060     battleSet1Flag = false;
9061     battleSet2Flag = false;
9062     battleSettingFlag = false;
9063     battleRdy = false;
9064     [self AttackDisplay];
9065     
9066     windowPoint.x = [mapWindow frame].origin.x;
9067     windowPoint.y = [mapWindow frame].origin.y;
9068     [battleWindow setFrameOrigin:windowPoint];
9069     [battleWindow makeKeyAndOrderFront:nil];
9070     [battlePanel close];
9071 }
9072
9073 -(IBAction)battleSet1:(id)sender{
9074     battleSetFlag = false;
9075     battleSet1Flag = true;
9076     battleDef1Flag = false;
9077     battleDod1Flag = false;
9078     battleSettingFlag = true;
9079     battleSet2PushedFlag = false;
9080     
9081     U = UTop;
9082     while (!(AUN[1] == U->number)) {
9083         U = U->next;
9084     }
9085     if(U->chipNumberL >= 0)
9086     {
9087         U = UTop;
9088         [self initCAttackList2];
9089         [self initCAttackSelect2];
9090     }
9091     else if(U->chipNumber >= 0) {
9092         U = UTop;
9093         [self initCAttackList];
9094         [self initCAttackSelect];
9095     }
9096     U = UTop;
9097     
9098     [atkPanel makeKeyAndOrderFront:nil];
9099 }
9100 -(IBAction)battleDef1:(id)sender{
9101     battleDef1Flag = true;
9102     battleSet1Flag = false;
9103     battleDod1Flag = false;
9104 }
9105 -(IBAction)battleDod1:(id)sender{
9106     battleDod1Flag = true;
9107     battleDef1Flag = false;
9108     battleSet1Flag = false;
9109 }
9110 -(IBAction)battleSet2:(id)sender{
9111     battleSetFlag = true;
9112     battleSet2Flag = true;
9113     battleDef2Flag = false;
9114     battleDod2Flag = false;
9115     battleSettingFlag = true;
9116     battleSet2PushedFlag = true;
9117     
9118     U = UTop;
9119     while (!(DUN[1] == U->number)) {
9120         U = U->next;
9121     }
9122     
9123     if(U->chipNumberL >= 0){
9124         U = UTop;
9125         [self initCAttackList2];
9126         [self initCAttackSelect2];
9127     }
9128     else if(U->chipNumber >= 0) {
9129         U = UTop;
9130         [self initCAttackList];
9131         [self initCAttackSelect];
9132     }
9133     U = UTop;
9134     [atkPanel makeKeyAndOrderFront:nil];
9135 }
9136 -(IBAction)battleDef2:(id)sender{
9137     battleDef2Flag = true;
9138     battleSet2Flag = false;
9139     battleDod2Flag = false;
9140 }
9141 -(IBAction)battleDod2:(id)sender{
9142     battleDod2Flag = true;
9143     battleDef2Flag = false;
9144     battleSet2Flag = false;
9145 }
9146
9147 -(IBAction)battleCancel:(id)sender{
9148     battleFlag = false;
9149     battleSettingFlag = false;
9150     
9151     battleSet2PushedFlag = false;
9152     
9153     [battlePanel close];
9154 }
9155
9156 -(IBAction)researchCancel:(id)sender{
9157     [researchPanel close];
9158 }
9159
9160 -(void)setCommandPanel{
9161     
9162     menuPoint.x = [mapWindow frame].origin.x + possionLocalX*32;
9163     menuPoint.y = [mapWindow frame].origin.y + possionLocalY*32 - 180;
9164     
9165     
9166     if(buildSkillFlag) {
9167         cIncludeCreateFlag = true;
9168         menuPoint.y -= 20;
9169     }else cIncludeCreateFlag = false;
9170     if(summonSkillFlag) {
9171         cIncludeSummonFlag = true;
9172         menuPoint.y -= 20;
9173     }else cIncludeSummonFlag = false;
9174     int plusBtnValue = 0;
9175     
9176     if(cIncludeCreateFlag && cIncludeSummonFlag){
9177         
9178         plusBtnValue = 200;
9179         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
9180         
9181         
9182         plusBtnValue -= moveBtn.frame.size.height + 12;
9183         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9184         [[commandPanel contentView] addSubview:moveBtn];
9185         
9186         plusBtnValue -= attackBtn.frame.size.height + 2;
9187         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9188         [[commandPanel contentView] addSubview:attackBtn];
9189         
9190         plusBtnValue -= stanbyBtn.frame.size.height + 2;
9191         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9192         [[commandPanel contentView] addSubview:stanbyBtn];
9193         
9194         [createBtn setTransparent: NO];
9195         [createBtn setEnabled: YES];
9196         plusBtnValue -= createBtn.frame.size.height + 2;
9197         [createBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9198         [[commandPanel contentView] addSubview:createBtn];
9199         
9200         [summonBtn setTransparent: NO];
9201         [summonBtn setEnabled: YES];
9202         plusBtnValue -= summonBtn.frame.size.height + 2;
9203         [summonBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9204         [[commandPanel contentView] addSubview:summonBtn];
9205         
9206         plusBtnValue -= statusBtn.frame.size.height + 2;
9207         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9208         [[commandPanel contentView] addSubview:statusBtn];
9209         
9210         plusBtnValue -= cancelBtn.frame.size.height + 2;
9211         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9212         [[commandPanel contentView] addSubview:cancelBtn];
9213         
9214     }
9215     else if(cIncludeCreateFlag && !cIncludeSummonFlag){
9216         plusBtnValue = 180;
9217         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
9218         
9219         plusBtnValue -= moveBtn.frame.size.height + 12;
9220         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9221         [[commandPanel contentView] addSubview:moveBtn];
9222         
9223         plusBtnValue -= attackBtn.frame.size.height + 2;
9224         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9225         [[commandPanel contentView] addSubview:attackBtn];
9226         
9227         plusBtnValue -= stanbyBtn.frame.size.height + 2;
9228         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9229         [[commandPanel contentView] addSubview:stanbyBtn];
9230         
9231         [createBtn setTransparent: NO];
9232         [createBtn setEnabled: YES];
9233         plusBtnValue -= createBtn.frame.size.height + 2;
9234         [createBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9235         [[commandPanel contentView] addSubview:createBtn];
9236         
9237         [summonBtn setTransparent: YES];
9238         [summonBtn setEnabled: NO];
9239         
9240         plusBtnValue -= statusBtn.frame.size.height + 2;
9241         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9242         [[commandPanel contentView] addSubview:statusBtn];
9243         
9244         plusBtnValue -= cancelBtn.frame.size.height + 2;
9245         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9246         [[commandPanel contentView] addSubview:cancelBtn];
9247         
9248         
9249     }else if(cIncludeSummonFlag && !cIncludeCreateFlag){
9250         
9251         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, 210) display:YES];
9252         
9253         plusBtnValue = 180;
9254         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
9255         
9256         
9257         plusBtnValue -= moveBtn.frame.size.height + 12;
9258         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9259         [[commandPanel contentView] addSubview:moveBtn];
9260         
9261         plusBtnValue -= attackBtn.frame.size.height + 2;
9262         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9263         [[commandPanel contentView] addSubview:attackBtn];
9264         
9265         plusBtnValue -= stanbyBtn.frame.size.height + 2;
9266         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9267         [[commandPanel contentView] addSubview:stanbyBtn];
9268         
9269         [createBtn setTransparent: YES];
9270         [createBtn setEnabled: NO];
9271         
9272         [summonBtn setTransparent: NO];
9273         [summonBtn setEnabled: YES];
9274         plusBtnValue -= summonBtn.frame.size.height + 2;
9275         [summonBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9276         [[commandPanel contentView] addSubview:summonBtn];
9277         
9278         plusBtnValue -= statusBtn.frame.size.height + 2;
9279         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9280         [[commandPanel contentView] addSubview:statusBtn];
9281         
9282         plusBtnValue -= cancelBtn.frame.size.height + 2;
9283         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9284         [[commandPanel contentView] addSubview:cancelBtn];
9285     }else{
9286         
9287         plusBtnValue = 160;
9288         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
9289         
9290         plusBtnValue -= moveBtn.frame.size.height + 12;
9291         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9292         [[commandPanel contentView] addSubview:moveBtn];
9293         
9294         plusBtnValue -= attackBtn.frame.size.height + 2;
9295         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9296         [[commandPanel contentView] addSubview:attackBtn];
9297         
9298         plusBtnValue -= stanbyBtn.frame.size.height + 2;
9299         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9300         [[commandPanel contentView] addSubview:stanbyBtn];
9301         
9302         [createBtn setTransparent: YES];
9303         [createBtn setEnabled: NO];
9304         
9305         [summonBtn setTransparent: YES];
9306         [summonBtn setEnabled: NO];
9307         
9308         plusBtnValue -= statusBtn.frame.size.height + 2;
9309         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9310         [[commandPanel contentView] addSubview:statusBtn];
9311         
9312         plusBtnValue -= cancelBtn.frame.size.height + 2;
9313         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
9314         [[commandPanel contentView] addSubview:cancelBtn];
9315     }
9316     
9317
9318 }
9319
9320 -(void)openMessage{
9321     [IVimage setHidden:NO];
9322     [TFname setHidden:NO];
9323     [TFmessage setHidden:NO];
9324     [BXname setHidden:NO];
9325     [BXmessage setHidden:NO];
9326     [IVimage setEnabled:YES];
9327     [TFname setEnabled:YES];
9328     [TFmessage setEnabled:YES];
9329 }
9330
9331 -(void)closeMessage{
9332     [IVimage setHidden:YES];
9333     [TFname setHidden:YES];
9334     [TFmessage setHidden:YES];
9335     [BXname setHidden:YES];
9336     [BXmessage setHidden:YES];
9337     [IVimage setEnabled:NO];
9338     [TFname setEnabled:NO];
9339     [TFmessage setEnabled:NO];
9340 }
9341
9342 -(MAPSCRIPT0*)setMessage:(MAPSCRIPT0*)MS0{
9343
9344     
9345     if(!messageDialog){
9346         [self closeMessage];
9347     }else{
9348         [self openMessage];
9349     
9350         if(!initStringNum){
9351             msgLvl = 0;
9352             msgCnt = 0;
9353             initStringNum = true;
9354         }
9355     
9356     NSString *string = @"";
9357     
9358         string = [MS0->S1.str retain];
9359         msgMax = (int)[string length];
9360         if(!initImgFlag)
9361         {
9362             [self loadImg];
9363             initImgFlag = true;
9364         }
9365         
9366         [IVimage setImage:MS0->S1.img];
9367         [TFname setStringValue:MS0->S1.name];
9368     
9369         if(msgCnt <= msgMax){
9370             [TFmessage setStringValue:[string substringToIndex:msgCnt]];
9371             msgCnt++;
9372         }
9373         
9374         
9375         if(messageEndFlag){
9376             MS0->endFlag = true;
9377             messageEndFlag = false;
9378             messageDialog = false;
9379             MS0->succeessfulFlag = true;
9380             [self setMessage:NULL];
9381         }
9382         
9383         return MS0;
9384     }
9385     
9386     
9387     return MS0;
9388 }
9389
9390 -(void) loadImg{
9391     
9392     NSString *directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
9393     [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
9394     
9395     NSString *path = @"Map/";
9396     NSString *fileData = nil;
9397     NSArray *fileDataArray;
9398     
9399     path = [path stringByAppendingFormat:@"%@"  ,MF[MFselectedRow+1].fileName];
9400     
9401     fileData = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
9402     
9403     fileDataArray = [fileData componentsSeparatedByString:@"\n"];
9404     
9405     MAPSCRIPT0 *MS00 = MF[MFselectedRow+1].MS.D->P;
9406     MAPSCRIPT0 *m00Top = MS00;
9407     for (int i = 0; i < [fileDataArray count]; i++) {
9408         if(!MS00) break;
9409         NSRange range = [[fileDataArray objectAtIndex:i] rangeOfString:@"◆"];
9410         if(range.location != NSNotFound){
9411             
9412             NSArray *array2 = [[fileDataArray objectAtIndex:i] componentsSeparatedByString:@","];
9413             if(MS00->type == 1)
9414             {
9415                 MS00->S1.iName = [[array2 objectAtIndex:2] retain];
9416             
9417             for(int k = 0; k < UCN;k++){
9418                 
9419                 if([MS00->S1.iName isEqualToString:UC[k].nameClass]){
9420                     MS00->S1.img = [UC[k].imgb retain];
9421                     MS00 = MS00->next;
9422                     break;
9423                 }
9424             
9425             }
9426             }
9427             
9428         }
9429     }
9430     
9431     MS00 = m00Top;
9432     
9433 }
9434
9435
9436 -(MAPSCRIPT0*)setSwitch:(MAPSCRIPT0*)MS0{
9437     
9438     if(MS0->switch1)
9439     for(int i = 0;*(MS0->switch1 + i) >0;i++){
9440         Suicchi[*(MS0->switch1+i)] = true;
9441     
9442     }
9443     if(MS0->switch2)
9444     for(int i = 0;*(MS0->switch2 + i) >0;i++){
9445         Suicchi[*(MS0->switch2+i)] = false;
9446         
9447     }
9448     
9449     MS0->succeessfulFlag = true;
9450     MS0->endFlag = true;
9451     return MS0;
9452 }
9453
9454 -(MAPSCRIPT0*)setBranch:(MAPSCRIPT0*)MS0{
9455
9456     MAPSCRIPT0 *CRMS0 = MS0;
9457     bool branchEndFlag = false;
9458     bool branchSuceedFlag = false;
9459     bool trueFlag = true;
9460     
9461     
9462     if(MS0->endFlag)
9463         return MS0;
9464     
9465     if(1){
9466         
9467         if(MS0->S4.suicchiFlag){
9468             if(MS0->S4.suicchiONOFF == 0){
9469                 if(MS0->S4.suicchi)
9470                 for (int i = 0;*(MS0->S4.suicchi + i);i++) {
9471                     if(!Suicchi[*(MS0->S4.suicchi + i)]){
9472                         trueFlag = false;
9473                     }
9474                 }
9475             }else{
9476                 if(MS0->S4.suicchi)
9477                     for (int i = 0;*(MS0->S4.suicchi + i);i++) {
9478                         if(Suicchi[*(MS0->S4.suicchi + i)]){
9479                             trueFlag = false;
9480                         }
9481                     }
9482             }
9483         }
9484         
9485         if(MS0->S4.hensuFlag){
9486         
9487             if(MS0->S4.teisuFlag){
9488                 if(MS0->S4.hensuType == 0){
9489                     if([Hensuu[MS0->S4.hensu1] intValue] == MS0->S4.teisuValue){
9490                         
9491                     }else{
9492                         trueFlag = false;
9493                     }
9494                 }else if(MS0->S4.hensuType == 1){
9495                     if([Hensuu[MS0->S4.hensu1] intValue] >= MS0->S4.teisuValue){
9496                         
9497                     }else{
9498                         trueFlag = false;
9499                     }
9500                 }else if(MS0->S4.hensuType == 2){
9501                     if([Hensuu[MS0->S4.hensu1] intValue] <= MS0->S4.teisuValue){
9502                         
9503                     }else{
9504                         trueFlag = false;
9505                     }
9506                 }else if(MS0->S4.hensuType == 3){
9507                     if([Hensuu[MS0->S4.hensu1] intValue] > MS0->S4.teisuValue){
9508                         
9509                     }else{
9510                         trueFlag = false;
9511                     }
9512                 }else if(MS0->S4.hensuType == 4){
9513                     if([Hensuu[MS0->S4.hensu1] intValue] < MS0->S4.teisuValue){
9514                         
9515                     }else{
9516                         trueFlag = false;
9517                     }
9518                 }else if(MS0->S4.hensuType == 5){
9519                     if([Hensuu[MS0->S4.hensu1] intValue] != MS0->S4.teisuValue){
9520                         
9521                     }else{
9522                         trueFlag = false;
9523                     }
9524                 }
9525             
9526             }if(MS0->S4.hensu2flag){
9527                 if(MS0->S4.hensuType == 0){
9528                     if([Hensuu[MS0->S4.hensu1] isEqualToString:Hensuu[MS0->S4.hensu2]]){
9529                         
9530                     }else{
9531                         trueFlag = false;
9532                     }
9533                 }else if(MS0->S4.hensuType == 1){
9534                     if([Hensuu[MS0->S4.hensu1] intValue] >= [Hensuu[MS0->S4.hensu2] intValue]){
9535                         
9536                     }else{
9537                         trueFlag = false;
9538                     }
9539                 }else if(MS0->S4.hensuType == 2){
9540                     if([Hensuu[MS0->S4.hensu1] intValue] <= [Hensuu[MS0->S4.hensu2] intValue]){
9541                         
9542                     }else{
9543                         trueFlag = false;
9544                     }
9545                 }else if(MS0->S4.hensuType == 3){
9546                     if([Hensuu[MS0->S4.hensu1] intValue] > [Hensuu[MS0->S4.hensu2] intValue]){
9547                         
9548                     }else{
9549                         trueFlag = false;
9550                     }
9551                 }else if(MS0->S4.hensuType == 4){
9552                     if([Hensuu[MS0->S4.hensu1] intValue] < [Hensuu[MS0->S4.hensu2] intValue]){
9553                         
9554                     }else{
9555                         trueFlag = false;
9556                     }
9557                 }else if(MS0->S4.hensuType == 5){
9558                     if(![Hensuu[MS0->S4.hensu1] isEqualToString:Hensuu[MS0->S4.hensu2]]){
9559                         
9560                     }else{
9561                         trueFlag = false;
9562                     }
9563                 }
9564             }
9565             
9566         }
9567         if(MS0->S4.timerFlag){
9568         
9569             if(MS0->S4.timerType == 0){
9570                 if(MS0->S4.timerMin <= cntTimerMin){
9571                 
9572                 }else if(MS0->S4.timerSec <= cntTimerSec && MS0->S4.timerMin <= cntTimerMin){
9573                 
9574                 }else{
9575                     trueFlag = false;
9576                 }
9577             
9578             
9579             
9580             }else{
9581                 if(MS0->S4.timerMin >= cntTimerMin){
9582                     
9583                 }else if(MS0->S4.timerSec >= cntTimerSec && MS0->S4.timerMin >= cntTimerMin){
9584                     
9585                 }else{
9586                     trueFlag = false;
9587                 }
9588             
9589             }
9590         }
9591         
9592
9593         
9594         if(MS0->S4.unitNumFlag){
9595             
9596             
9597             int Unum = 0;
9598             U = UTop;;
9599             while (U) {
9600                 Unum++;
9601                 U = U->next;
9602             }U = UTop;
9603             
9604             int objeSCSunitCnt = 0;
9605             
9606             if(MS0->S4.objeFlag){
9607                 
9608                 UNIT2 *objeT = MS0->S4.obje;
9609                 
9610                 while (MS0->S4.obje) {
9611                     
9612                     
9613                     
9614                     U = UTop;
9615                     static bool okflag = true;
9616                     while(U){
9617                         for (int i = 0;i < 1002;i++) {
9618                             for (int k = 0;k < 1002;k++) {
9619                                 objeR[i][k] = 0;
9620                             }
9621                         }
9622                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
9623                         
9624                         int Cnum = 0;
9625                         
9626                         for(int bx=1;bx<=chipWidth;bx++){
9627                             for(int by=1;by<=chipHeight;by++){
9628                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
9629                                     
9630                                     if(objeR[U->x][U->y] > 0){
9631                                         Cnum++;
9632                                         if(Unum < Cnum) goto omfgUnitOver2;
9633                                         
9634                                         
9635                                         
9636                                         
9637                                         
9638                                         if(UP)
9639                                         {
9640                                             if(!UPT){
9641                                                 UPT = UP;
9642                                             }
9643                                             
9644                                             UP = UPT;
9645                                             while (UP) {
9646                                                 if(UP->x == U->x && UP->y == U->y){
9647                                                     
9648                                                     break;
9649                                                 }else{
9650                                                     okflag = true;
9651                                                 }
9652                                                 
9653                                                 UP = UP->next;
9654                                             }
9655                                             
9656                                         }
9657                                         UP = UPT;
9658                                         
9659                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9660                                         else if(UP){
9661                                             while(UP->next) UP = UP->next;
9662                                         }
9663                                         if(okflag){
9664                                             UP->x = U->x;
9665                                             UP->y = U->y;
9666                                             UP->next = calloc(1, sizeof(UNITPOINT));
9667                                             okflag = false;
9668                                             objeSCSunitCnt++;
9669                                         }
9670                                     }
9671                                     
9672                                 }
9673                             }
9674                         }
9675                         
9676                     omfgUnitOver2:
9677                         UP = NULL;
9678                         UPT = NULL;
9679                         
9680                         //NSLog(@"%@, %d, %d", U->C.name, objeSCSunitCnt, objeR[0][0]);
9681                         
9682                         U = U->next;
9683                     }U = UTop;
9684                     okflag = true;
9685                     MS0->S4.obje = MS0->S4.obje->next;
9686                 }
9687                 MS0->S4.obje = objeT;
9688             }
9689             
9690             
9691             if(MS0->S4.buildFlag){
9692                 if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
9693                 
9694                 }
9695                 
9696                 if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
9697                    BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
9698                    Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
9699                 
9700                 }
9701             }
9702             
9703             int team0num = 0;
9704             int team1num = 0;
9705             int team2num = 0;
9706             if(MS0->S4.team == 0){
9707                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9708                 UTop = U;
9709                 while (U) {
9710                     if(U->team == 0 && !U->dead)
9711                         team0num++;
9712                     U = U->next;
9713                 }U = UTop;
9714                 }
9715                 if(MS0->S4.unitType == 0){
9716                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team0num = MS0->S4.unitNum;
9717                     
9718                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9719                         
9720                     }else if((MS0->S4.unitNum == team0num) && !MS0->S4.objeFlag){
9721                         
9722                     }else{
9723                         trueFlag = false;
9724                     }
9725                 }else if(MS0->S4.unitType == 1){
9726                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team0num = 65000;
9727                     
9728                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9729                         
9730                     }else if((MS0->S4.unitNum <= team0num) && !MS0->S4.objeFlag){
9731                         
9732                     }else{
9733                         trueFlag = false;
9734                     }
9735                 }else if(MS0->S4.unitType == 2){
9736                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9737                         
9738                     }else if((MS0->S4.unitNum >= team0num) && !MS0->S4.objeFlag){
9739                         
9740                     }else{
9741                         trueFlag = false;
9742                     }
9743                 }
9744
9745             
9746             }else if(MS0->S4.team == 1){
9747                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9748                 UTop = U;
9749                 while (U) {
9750                     if(U->team == 1 && !U->dead)
9751                         team1num++;
9752                     U = U->next;
9753                 }U = UTop;
9754                 }
9755                 if(MS0->S4.unitType == 0){
9756                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team1num = MS0->S4.unitNum;
9757                     
9758                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9759                         
9760                     }else if((MS0->S4.unitNum == team1num) && !MS0->S4.objeFlag){
9761                         
9762                     }else{
9763                         trueFlag = false;
9764                     }
9765                 }else if(MS0->S4.unitType == 1){
9766                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team1num = 65000;
9767                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9768                         
9769                     }else if((MS0->S4.unitNum <= team1num) && !MS0->S4.objeFlag){
9770                         
9771                     }else{
9772                         trueFlag = false;
9773                     }
9774                 }else if(MS0->S4.unitType == 2){
9775                     
9776                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9777                         
9778                     }else if((MS0->S4.unitNum >= team1num) && !MS0->S4.objeFlag){
9779                         
9780                     }else{
9781                         trueFlag = false;
9782                     }
9783                 }
9784             }else if(MS0->S4.team == 2){
9785                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9786                 UTop = U;
9787                 while (U) {
9788                     if(U->team == 2 && !U->dead)
9789                         team2num++;
9790                     U = U->next;
9791                 }U = UTop;
9792                 }
9793                 if(MS0->S4.unitType == 0){
9794                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team2num = MS0->S4.unitNum;
9795                     
9796                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9797                         
9798                     }else if((MS0->S4.unitNum == team2num) && !MS0->S4.objeFlag){
9799                         
9800                     }else{
9801                         trueFlag = false;
9802                     }
9803                 }else if(MS0->S4.unitType == 1){
9804                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team2num = 65000;
9805                     
9806                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9807                         
9808                     }else if((MS0->S4.unitNum <= team2num) && !MS0->S4.objeFlag){
9809                         
9810                     }else{
9811                         trueFlag = false;
9812                     }
9813                 }else if(MS0->S4.unitType == 2){
9814                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9815                         
9816                     }else if((MS0->S4.unitNum >= team2num) && !MS0->S4.objeFlag){
9817                         
9818                     }else{
9819                         trueFlag = false;
9820                     }
9821                 }
9822             }
9823         
9824         }
9825         
9826     
9827
9828         if(MS0->S4.unitTypeFlag && MS0->S4.unitNumFlag){
9829             UNIT2 *sjt = MS0->S4.subj;
9830             UNIT *chosen = NULL;
9831             UNIT *chosenT = NULL;
9832             int cntUnit = 0;
9833             bool lmao = false;
9834             while(MS0->S4.subj){
9835                 U = UTop;
9836                 while(U){
9837                     if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
9838                         if(chosen){
9839                             chosen->next = calloc(1, sizeof(UNIT));
9840                             if(!lmao){
9841                                 chosenT = chosen;
9842                                 lmao = true;
9843                             }
9844                             chosen = chosen->next;
9845                         }
9846                         if(!chosen){
9847                             chosen = calloc(1, sizeof(UNIT));
9848                         }
9849                         chosen->x = U->x;
9850                         chosen->y = U->y;
9851                         chosen->C.name = U->C.name;
9852                         
9853                         if(!U->dead)
9854                             cntUnit++;
9855                     }
9856                     U = U->next;
9857                 }U = UTop;
9858                 if(!lmao){
9859                     chosenT = chosen;
9860                     lmao = true;
9861                 }
9862                 MS0->S4.subj = MS0->S4.subj->next;
9863             }MS0->S4.subj = sjt;
9864             chosen = chosenT;
9865
9866             int objeSCSunitCnt = 0;
9867             
9868             
9869             int Unum = 0;
9870             
9871             
9872             while (chosen) {
9873                 Unum++;
9874                 chosen = chosen->next;
9875             }chosen = chosenT;
9876             
9877             if(MS0->S4.unitTypeFlag && MS0->S4.objeFlag){
9878                 
9879                 UNIT2 *objeT = MS0->S4.obje;
9880                 
9881                 while (MS0->S4.obje) {
9882                     
9883                     
9884                     
9885                     chosen = chosenT;
9886                     static bool okflag = true;
9887                     while(chosen){
9888                         for (int i = 0;i < 1002;i++) {
9889                             for (int k = 0;k < 1002;k++) {
9890                                 objeR[i][k] = 0;
9891                             }
9892                         }
9893                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:chosen scsCnt:&objeSCSunitCnt];
9894                         
9895                         int Cnum = 0;
9896                         
9897                         for(int bx=1;bx<=chipWidth;bx++){
9898                             for(int by=1;by<=chipHeight;by++){
9899                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
9900                                     
9901                                     if(objeR[chosen->x][chosen->y] > 0){
9902                                         Cnum++;
9903                                         if(Unum < Cnum) goto omfgUnitOver3;
9904                                         
9905                                         
9906                                         
9907                                         
9908                                         
9909                                         if(UP)
9910                                         {
9911                                             if(!UPT){
9912                                                 UPT = UP;
9913                                             }
9914                                             
9915                                             UP = UPT;
9916                                             while (UP) {
9917                                                 if(UP->x == chosen->x && UP->y == chosen->y){
9918                                                     
9919                                                     break;
9920                                                 }else{
9921                                                     okflag = true;
9922                                                 }
9923                                                 
9924                                                 UP = UP->next;
9925                                             }
9926                                             
9927                                         }
9928                                         UP = UPT;
9929                                         
9930                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9931                                         else if(UP){
9932                                             while(UP->next) UP = UP->next;
9933                                         }
9934                                         if(okflag){
9935                                             UP->x = chosen->x;
9936                                             UP->y = chosen->y;
9937                                             UP->next = calloc(1, sizeof(UNITPOINT));
9938                                             okflag = false;
9939                                             objeSCSunitCnt++;
9940                                         }
9941                                     }
9942                                     
9943                                 }
9944                             }
9945                         }
9946                         
9947                     omfgUnitOver3:
9948                         UP = NULL;
9949                         UPT = NULL;
9950                         
9951                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
9952                         
9953                         chosen = chosen->next;
9954                     }chosen = chosenT;
9955                     okflag = true;
9956                     MS0->S4.obje = MS0->S4.obje->next;
9957                 }
9958                 MS0->S4.obje = objeT;
9959             }else if(MS0->S4.objeFlag){
9960                 
9961                 UNIT2 *objeT = MS0->S4.obje;
9962                 
9963                 while (MS0->S4.obje) {
9964                     
9965                     
9966                     
9967                     U = UTop;
9968                     static bool okflag = true;
9969                     while(U){
9970                         if(U->team != MS0->S4.team){
9971                             U = U->next;
9972                             continue;
9973                         }
9974                         for (int i = 0;i < 1002;i++) {
9975                             for (int k = 0;k < 1002;k++) {
9976                                 objeR[i][k] = 0;
9977                             }
9978                         }
9979                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
9980                         
9981                         int Cnum = 0;
9982                         
9983                         for(int bx=1;bx<=chipWidth;bx++){
9984                             for(int by=1;by<=chipHeight;by++){
9985                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
9986                                     
9987                                     if(objeR[chosen->x][chosen->y] > 0){
9988                                         Cnum++;
9989                                         if(Unum < Cnum) goto omfgUnitOver30;
9990                                         
9991                                         
9992                                         
9993                                         
9994                                         
9995                                         if(UP)
9996                                         {
9997                                             if(!UPT){
9998                                                 UPT = UP;
9999                                             }
10000                                             
10001                                             UP = UPT;
10002                                             while (UP) {
10003                                                 if(UP->x == chosen->x && UP->y == chosen->y){
10004                                                     
10005                                                     break;
10006                                                 }else{
10007                                                     okflag = true;
10008                                                 }
10009                                                 
10010                                                 UP = UP->next;
10011                                             }
10012                                             
10013                                         }
10014                                         UP = UPT;
10015                                         
10016                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10017                                         else if(UP){
10018                                             while(UP->next) UP = UP->next;
10019                                         }
10020                                         if(okflag){
10021                                             UP->x = chosen->x;
10022                                             UP->y = chosen->y;
10023                                             UP->next = calloc(1, sizeof(UNITPOINT));
10024                                             okflag = false;
10025                                             objeSCSunitCnt++;
10026                                         }
10027                                     }
10028                                     
10029                                 }
10030                             }
10031                         }
10032                         
10033                     omfgUnitOver30:
10034                         UP = NULL;
10035                         UPT = NULL;
10036                         
10037                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
10038                         
10039                         chosen = chosen->next;
10040                     }chosen = chosenT;
10041                     okflag = true;
10042                     MS0->S4.obje = MS0->S4.obje->next;
10043                 }
10044                 MS0->S4.obje = objeT;
10045                 U = UTop;
10046             }
10047
10048             
10049             int team0num = 0;
10050             int team1num = 0;
10051             int team2num = 0;
10052             if(MS0->S4.team == 0){
10053                 if(!MS0->S4.unitTypeFlag){
10054                 UTop = U;
10055                 while (U) {
10056                     if(U->team == 0 && !U->dead)
10057                         team0num++;
10058                     U = U->next;
10059                 }U = UTop;
10060                 }
10061                 if(MS0->S4.unitType == 0){
10062                     if(MS0->S4.unitTypeFlag) team0num = MS0->S4.unitNum;
10063                     
10064                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == cntUnit)
10065                        && (MS0->S4.unitNum == objeSCSunitCnt)){
10066                         
10067                     }else if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
10068                     
10069                     }else{
10070                         trueFlag = false;
10071                     }
10072                 }else if(MS0->S4.unitType == 1){
10073                     if(MS0->S4.unitTypeFlag) team0num = 65000;
10074                     
10075                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= cntUnit)
10076                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
10077                         
10078                     }else if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
10079                     
10080                     }else{
10081                         trueFlag = false;
10082                     }
10083                 }else if(MS0->S4.unitType == 2){
10084                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= cntUnit)
10085                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
10086                         
10087                     }else if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
10088                     
10089                     }else{
10090                         trueFlag = false;
10091                     }
10092                 }
10093                 
10094                 
10095             }else if(MS0->S4.team == 1){
10096                 if(!MS0->S4.unitTypeFlag){
10097                 UTop = U;
10098                 while (U) {
10099                     if(U->team == 1 && !U->dead)
10100                         team1num++;
10101                     U = U->next;
10102                 }U = UTop;
10103                 }
10104                 if(MS0->S4.unitType == 0){
10105                     if(MS0->S4.unitTypeFlag) team1num = MS0->S4.unitNum;
10106                     
10107                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == cntUnit)
10108                        && (MS0->S4.unitNum == objeSCSunitCnt)){
10109                         
10110                     }else if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
10111                     
10112                     }else{
10113                         trueFlag = false;
10114                     }
10115                 }else if(MS0->S4.unitType == 1){
10116                     if(MS0->S4.unitTypeFlag) team1num = 65000;
10117                     
10118                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= cntUnit)
10119                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
10120                         
10121                     }else if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
10122                     
10123                     }else{
10124                         trueFlag = false;
10125                     }
10126                 }else if(MS0->S4.unitType == 2){
10127                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= cntUnit)
10128                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
10129                         
10130                     }else if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
10131                     
10132                     }else{
10133                         trueFlag = false;
10134                     }
10135                 }
10136             }else if(MS0->S4.team == 2){
10137                 if(!MS0->S4.unitTypeFlag){
10138                 UTop = U;
10139                 while (U) {
10140                     if(U->team == 2 && !U->dead)
10141                         team2num++;
10142                     U = U->next;
10143                 }U = UTop;
10144                 }
10145                 if(MS0->S4.unitType == 0){
10146                     if(MS0->S4.unitTypeFlag) team2num = MS0->S4.unitNum;
10147                     
10148                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == cntUnit)
10149                        && (MS0->S4.unitNum == objeSCSunitCnt)){
10150                         
10151                     }else if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
10152                     
10153                     }else{
10154                         trueFlag = false;
10155                     }
10156                 }else if(MS0->S4.unitType == 1){
10157                     if(MS0->S4.unitTypeFlag) team2num = 65000;
10158                     
10159                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= cntUnit)
10160                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
10161                         
10162                     }else if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
10163                     
10164                     }else{
10165                         trueFlag = false;
10166                     }
10167                 }else if(MS0->S4.unitType == 2){
10168                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= cntUnit)
10169                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
10170                         
10171                     }else if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
10172                     
10173                     }else{
10174                         trueFlag = false;
10175                     }
10176                 }
10177             }
10178         
10179         
10180         
10181         
10182         
10183         
10184         }
10185         
10186         
10187         
10188         
10189         if(MS0->S4.placeFlag && MS0->S4.unitNumFlag){
10190             int Unum = 0;
10191             U = UTop;;
10192             while (U) {
10193                 Unum++;
10194                 U = U->next;
10195             }U = UTop;
10196             
10197             
10198          
10199             UNIT2 *sjt = MS0->S4.subj;
10200             UNIT *chosen = NULL;
10201             UNIT *chosenT = NULL;
10202             int cntUnit = 0;
10203             bool lmao = false;
10204             if(MS0->S4.unitTypeFlag){
10205                 while(MS0->S4.subj){
10206                     U = UTop;
10207                     while(U){
10208                         if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
10209                             if(chosen){
10210                                 chosen->next = calloc(1, sizeof(UNIT));
10211                                 if(!lmao){
10212                                     chosenT = chosen;
10213                                     lmao = true;
10214                                 }
10215                                 chosen = chosen->next;
10216                             }
10217                             if(!chosen){
10218                                 chosen = calloc(1, sizeof(UNIT));
10219                             }
10220                             chosen->x = U->x;
10221                             chosen->y = U->y;
10222                             chosen->C.name = U->C.name;
10223                             
10224                             if(!U->dead)
10225                                 cntUnit++;
10226                         }
10227                         U = U->next;
10228                     }U = UTop;
10229                     if(!lmao){
10230                         chosenT = chosen;
10231                         lmao = true;
10232                     }
10233                     MS0->S4.subj = MS0->S4.subj->next;
10234                 }MS0->S4.subj = sjt;
10235                 chosen = chosenT;
10236                 
10237     
10238                 
10239                 Unum = 0;
10240                 while (chosen) {
10241                     Unum++;
10242                     chosen = chosen->next;
10243                 }chosen = chosenT;
10244                 
10245             }
10246             
10247             
10248                 PLACEMENT *wpt = MS0->S4.wayp;
10249                 int waypCnt = 0;
10250                 int waypSCScnt = 0;
10251                 bool waypSCS = false;
10252                 int waypSCSunitCnt = 0;
10253             
10254             
10255             if(!MS0->S4.unitTypeFlag){
10256         
10257             while (MS0->S4.wayp) {
10258                     waypCnt++;
10259                     
10260                     
10261                     
10262                     
10263                     if(MS0->S4.wayp->type == 0){
10264                     U = UTop;
10265                     while(U){
10266                         if(U->team != MS0->S4.team){
10267                             U = U->next;
10268                             continue;
10269                         }
10270                         if(MS0->S4.wayp->x == U->x && MS0->S4.wayp->y == U->y){
10271                             waypSCScnt++;
10272                             waypSCSunitCnt++;
10273                             break;
10274                         }
10275                         U = U->next;
10276                     }U = UTop;
10277                         
10278                     }else if(MS0->S4.wayp->type == 1){
10279                         U = UTop;
10280                         static bool okflag = true;
10281                         while(U){
10282                             if(U->team != MS0->S4.team){
10283                                 U = U->next;
10284                                 continue;
10285                             }
10286                             for (int i = 0;i < 1002;i++) {
10287                                 for (int k = 0;k < 1002;k++) {
10288                                     waypR[i][k] = 0;
10289                                 }
10290                             }
10291                             [self checkPlaceHani:MS0->S4.wayp->z+1 tX:MS0->S4.wayp->y tY:MS0->S4.wayp->x aMap:waypR u:U scsCnt:&waypSCSunitCnt];
10292                             
10293                             int Cnum = 0;
10294                             
10295                             for(int bx=1;bx<=chipWidth;bx++){
10296                                 for(int by=1;by<=chipHeight;by++){
10297                                     if(waypR[bx][by] != 999 && waypR[bx][by] > 0){
10298                                         
10299                                         if(waypR[U->x][U->y] > 0){
10300                                             Cnum++;
10301                                             if(Unum < Cnum) goto omfgUnitOver;
10302                                             
10303                                             
10304
10305                                             
10306                                             
10307                                             if(UP)
10308                                             {
10309                                                 if(!UPT){
10310                                                     UPT = UP;
10311                                                 }
10312                                                 
10313                                                 UP = UPT;
10314                                                 while (UP) {
10315                                                     if(UP->x == U->x && UP->y == U->y){
10316                                                         
10317                                                         break;
10318                                                     }else{
10319                                                         okflag = true;
10320                                                     }
10321                                                     
10322                                                     UP = UP->next;
10323                                                 }
10324                                             
10325                                             }
10326                                             UP = UPT;
10327                                             
10328                                             if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10329                                             else if(UP){
10330                                                 while(UP->next) UP = UP->next;
10331                                             }
10332                                             if(okflag){
10333                                                 UP->x = U->x;
10334                                                 UP->y = U->y;
10335                                                 UP->next = calloc(1, sizeof(UNITPOINT));
10336                                                 okflag = false;
10337                                                 waypSCSunitCnt++;
10338                                             }
10339                                         }
10340                                         
10341                                     }
10342                                 }
10343                             }
10344                             
10345                         omfgUnitOver:
10346                             UP = NULL;
10347                             UPT = NULL;
10348                    //         NSLog(@"%d", waypSCSunitCnt);
10349                             
10350                              U = U->next;
10351                         }U = UTop;
10352                         okflag = true;
10353                     
10354                     
10355                     
10356                     }else if(MS0->S4.wayp->type == 2){
10357                         U = UTop;
10358                         waypSCSunitCnt = 0;
10359                         static bool okflag = true;
10360                         while(U){
10361                             if(U->team != MS0->S4.team){
10362                                 U = U->next;
10363                                 continue;
10364                             }
10365                             if((MS0->S4.wayp->x <= U->x) && (MS0->S4.wayp->x2 >= U->x) &&
10366                                (MS0->S4.wayp->y <= U->y) && (MS0->S4.wayp->y2 >= U->y)){
10367                                 
10368                                 
10369                                 int Cnum = 0;
10370                                 
10371                                 if(1){
10372                                     Cnum++;
10373                                     if(Unum < Cnum) goto omfgUnitOver;
10374                                     
10375                                     
10376                                     
10377                                     
10378                                     
10379                                     if(UP)
10380                                     {
10381                                         if(!UPT){
10382                                             UPT = UP;
10383                                         }
10384                                         
10385                                         UP = UPT;
10386                                         while (UP) {
10387                                             if(UP->x == U->x && UP->y == U->y){
10388                                                 
10389                                                 break;
10390                                             }else{
10391                                                 okflag = true;
10392                                             }
10393                                             
10394                                             UP = UP->next;
10395                                         }
10396                                         
10397                                     }
10398                                     UP = UPT;
10399                                     
10400                                     if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10401                                     else if(UP){
10402                                         while(UP->next) UP = UP->next;
10403                                     }
10404                                     if(okflag){
10405                                         UP->x = U->x;
10406                                         UP->y = U->y;
10407                                         UP->next = calloc(1, sizeof(UNITPOINT));
10408                                         okflag = false;
10409                                         waypSCScnt++;
10410                                         waypSCSunitCnt++;
10411                                     }
10412                                 }
10413                                 
10414                                 
10415                                 
10416                                 
10417                             }
10418                             U = U->next;
10419                         }U = UTop;
10420                         okflag = true;
10421                     }
10422                     
10423                     MS0->S4.wayp = MS0->S4.wayp->next;
10424                 }MS0->S4.wayp = wpt;
10425            // NSLog(@"%d", waypSCSunitCnt);
10426             
10427             if(waypSCScnt >= waypCnt)
10428                 waypSCS = true;
10429             
10430             }else if(MS0->S4.unitTypeFlag){
10431             
10432                 while (MS0->S4.wayp) {
10433                     waypCnt++;
10434                     
10435                     
10436                     
10437                     
10438                     if(MS0->S4.wayp->type == 0){
10439                         chosen = chosenT;
10440                         while(chosen){
10441                             if(MS0->S4.wayp->x == chosen->x && MS0->S4.wayp->y == chosen->y){
10442                                 waypSCScnt++;
10443                                 waypSCSunitCnt++;
10444                                 break;
10445                             }
10446                             chosen = chosen->next;
10447                         }chosen = chosenT;
10448                         
10449                     }else if(MS0->S4.wayp->type == 1){
10450                         chosen = chosenT;
10451                         static bool okflag = true;
10452                         while(chosen){
10453                             for (int i = 0;i < 1002;i++) {
10454                                 for (int k = 0;k < 1002;k++) {
10455                                     waypR[i][k] = 0;
10456                                 }
10457                             }
10458                             [self checkPlaceHani:MS0->S4.wayp->z+1 tX:MS0->S4.wayp->y tY:MS0->S4.wayp->x aMap:waypR u:chosen scsCnt:&waypSCSunitCnt];
10459                             
10460                             int Cnum = 0;
10461                             
10462                             for(int bx=1;bx<=chipWidth;bx++){
10463                                 for(int by=1;by<=chipHeight;by++){
10464                                     if(waypR[bx][by] != 999 && waypR[bx][by] > 0){
10465                                         
10466                                         if(waypR[chosen->x][chosen->y] > 0){
10467                                             Cnum++;
10468                                             if(Unum < Cnum) goto omfgUnitOver5;
10469                                             
10470                                             
10471                                             
10472                                             
10473                                             
10474                                             if(UP)
10475                                             {
10476                                                 if(!UPT){
10477                                                     UPT = UP;
10478                                                 }
10479                                                 
10480                                                 UP = UPT;
10481                                                 while (UP) {
10482                                                     if(UP->x == chosen->x && UP->y == chosen->y){
10483                                                         
10484                                                         break;
10485                                                     }else{
10486                                                         okflag = true;
10487                                                     }
10488                                                     
10489                                                     UP = UP->next;
10490                                                 }
10491                                                 
10492                                             }
10493                                             UP = UPT;
10494                                             
10495                                             if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10496                                             else if(UP){
10497                                                 while(UP->next) UP = UP->next;
10498                                             }
10499                                             if(okflag){
10500                                                 UP->x = chosen->x;
10501                                                 UP->y = chosen->y;
10502                                                 UP->next = calloc(1, sizeof(UNITPOINT));
10503                                                 okflag = false;
10504                                                 waypSCSunitCnt++;
10505                                             }
10506                                         }
10507                                         
10508                                     }
10509                                 }
10510                             }
10511                             
10512                         omfgUnitOver5:
10513                             UP = NULL;
10514                             UPT = NULL;
10515                             
10516                           //           NSLog(@"%d", waypSCSunitCnt);
10517                             
10518                             chosen = chosen->next;
10519                         }chosen = chosenT;
10520                         okflag = true;
10521                         
10522                         
10523                         
10524                     }else if(MS0->S4.wayp->type == 2){
10525                         chosen = chosenT;
10526                         waypSCSunitCnt = 0;
10527                         static bool okflag = true;
10528                         while(chosen){
10529                             if((MS0->S4.wayp->x <= chosen->x) && (MS0->S4.wayp->x2 >= chosen->x) &&
10530                                (MS0->S4.wayp->y <= chosen->y) && (MS0->S4.wayp->y2 >= chosen->y)){
10531                                 
10532                                 
10533                                 int Cnum = 0;
10534                                 
10535                                 if(1){
10536                                     Cnum++;
10537                                     if(Unum < Cnum) goto omfgUnitOver;
10538                                     
10539                                     
10540                                     
10541                                     
10542                                     
10543                                     if(UP)
10544                                     {
10545                                         if(!UPT){
10546                                             UPT = UP;
10547                                         }
10548                                         
10549                                         UP = UPT;
10550                                         while (UP) {
10551                                             if(UP->x == chosen->x && UP->y == chosen->y){
10552                                                 
10553                                                 break;
10554                                             }else{
10555                                                 okflag = true;
10556                                             }
10557                                             
10558                                             UP = UP->next;
10559                                         }
10560                                         
10561                                     }
10562                                     UP = UPT;
10563                                     
10564                                     if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10565                                     else if(UP){
10566                                         while(UP->next) UP = UP->next;
10567                                     }
10568                                     if(okflag){
10569                                         UP->x = chosen->x;
10570                                         UP->y = chosen->y;
10571                                         UP->next = calloc(1, sizeof(UNITPOINT));
10572                                         okflag = false;
10573                                         waypSCScnt++;
10574                                         waypSCSunitCnt++;
10575                                     }
10576                                 }
10577                                 
10578                                 
10579                                 
10580                                 
10581                             }
10582                             chosen = chosen->next;
10583                         }chosen = chosenT;
10584                         okflag = true;
10585                     }
10586                     
10587                     MS0->S4.wayp = MS0->S4.wayp->next;
10588                 }MS0->S4.wayp = wpt;
10589               //  NSLog(@"%d", waypSCSunitCnt);
10590                 
10591                 if(waypSCScnt >= waypCnt)
10592                     waypSCS = true;
10593             
10594             
10595             
10596             
10597             
10598             }
10599             
10600             int team0num = 0;
10601             int team1num = 0;
10602             int team2num = 0;
10603             if(MS0->S4.team == 0){
10604                 if(!MS0->S4.placeFlag){
10605                 UTop = U;
10606                 while (U) {
10607                     if(U->team == 0 && !U->dead)
10608                         team0num++;
10609                     U = U->next;
10610                 }U = UTop;
10611                 }
10612                 if(MS0->S4.unitType == 0){
10613                     if(MS0->S4.placeFlag) team0num = MS0->S4.unitNum;
10614                     
10615                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == waypSCSunitCnt)){
10616                         
10617                     }else{
10618                         trueFlag = false;
10619                     }
10620                 }else if(MS0->S4.unitType == 1){
10621                     if(MS0->S4.placeFlag) team0num = 65000;
10622                     
10623                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
10624                         
10625                     }else{
10626                         trueFlag = false;
10627                     }
10628                 }else if(MS0->S4.unitType == 2){
10629                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
10630                         
10631                     }else{
10632                         trueFlag = false;
10633                     }
10634                 }
10635                 
10636                 
10637             }else if(MS0->S4.team == 1){
10638                 if(!MS0->S4.placeFlag){
10639                 UTop = U;
10640                 while (U) {
10641                     if(U->team == 1 && !U->dead)
10642                         team1num++;
10643                     U = U->next;
10644                 }U = UTop;
10645                 }
10646                 if(MS0->S4.unitType == 0){
10647                     if(MS0->S4.placeFlag) team1num = MS0->S4.unitNum;
10648                     
10649                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum = waypSCSunitCnt)){
10650                         
10651                     }else{
10652                         trueFlag = false;
10653                     }
10654                 }else if(MS0->S4.unitType == 1){
10655                     if(MS0->S4.placeFlag) team1num = 65000;
10656                     
10657                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
10658                         
10659                     }else{
10660                         trueFlag = false;
10661                     }
10662                 }else if(MS0->S4.unitType == 2){
10663                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
10664                         
10665                     }else{
10666                         trueFlag = false;
10667                     }
10668                 }
10669             }else if(MS0->S4.team == 2){
10670                 if(!MS0->S4.placeFlag){
10671                 UTop = U;
10672                 while (U) {
10673                     if(U->team == 2 && !U->dead)
10674                         team2num++;
10675                     U = U->next;
10676                 }U = UTop;
10677                 }
10678                 if(MS0->S4.unitType == 0){
10679                     if(MS0->S4.placeFlag) team2num = MS0->S4.unitNum;
10680                     
10681                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == waypSCSunitCnt)){
10682                         
10683                     }else{
10684                         trueFlag = false;
10685                     }
10686                 }else if(MS0->S4.unitType == 1){
10687                     if(MS0->S4.placeFlag) team2num = 65000;
10688                     
10689                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
10690                         
10691                     }else{
10692                         trueFlag = false;
10693                     }
10694                 }else if(MS0->S4.unitType == 2){
10695                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
10696                         
10697                     }else{
10698                         trueFlag = false;
10699                     }
10700                 }
10701             }
10702             
10703         }
10704         
10705         
10706         if(MS0->S4.unitCMDflag){
10707             
10708             UNIT2 *sjt = MS0->S4.subj;
10709             UNIT *chosen = NULL;
10710             UNIT *chosenT = NULL;
10711             int cntUnit = 0;
10712             bool lmao = false;
10713             while(MS0->S4.subj){
10714                 U = UTop;
10715                 while(U){
10716                     if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
10717                         if(chosen){
10718                             chosen->next = calloc(1, sizeof(UNIT));
10719                             if(!lmao){
10720                                 chosenT = chosen;
10721                                 lmao = true;
10722                             }
10723                             chosen = chosen->next;
10724                         }
10725                         if(!chosen){
10726                             chosen = calloc(1, sizeof(UNIT));
10727                         }
10728                         chosen->x = U->x;
10729                         chosen->y = U->y;
10730                         chosen->C.name = U->C.name;
10731                         
10732                         if(!U->dead)
10733                             cntUnit++;
10734                     }
10735                     U = U->next;
10736                 }U = UTop;
10737                 if(!lmao){
10738                     chosenT = chosen;
10739                     lmao = true;
10740                 }
10741                 MS0->S4.subj = MS0->S4.subj->next;
10742             }MS0->S4.subj = sjt;
10743             chosen = chosenT;
10744             
10745             int objeSCSunitCnt = 0;
10746             
10747             
10748             int Unum = 0;
10749             
10750             
10751             while (chosen) {
10752                 Unum++;
10753                 chosen = chosen->next;
10754             }chosen = chosenT;
10755             
10756             if(MS0->S4.unitTypeFlag && MS0->S4.objeFlag){
10757                 
10758                 UNIT2 *objeT = MS0->S4.obje;
10759                 
10760                 while (MS0->S4.obje) {
10761                     
10762                     
10763                     
10764                     chosen = chosenT;
10765                     static bool okflag = true;
10766                     while(chosen){
10767                         for (int i = 0;i < 1002;i++) {
10768                             for (int k = 0;k < 1002;k++) {
10769                                 objeR[i][k] = 0;
10770                             }
10771                         }
10772                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:chosen scsCnt:&objeSCSunitCnt];
10773                         
10774                         int Cnum = 0;
10775                         
10776                         for(int bx=1;bx<=chipWidth;bx++){
10777                             for(int by=1;by<=chipHeight;by++){
10778                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
10779                                     
10780                                     if(objeR[chosen->x][chosen->y] > 0){
10781                                         Cnum++;
10782                                         if(Unum < Cnum) goto omfgUnitOver31;
10783                                         
10784                                         
10785                                         
10786                                         
10787                                         
10788                                         if(UP)
10789                                         {
10790                                             if(!UPT){
10791                                                 UPT = UP;
10792                                             }
10793                                             
10794                                             UP = UPT;
10795                                             while (UP) {
10796                                                 if(UP->x == chosen->x && UP->y == chosen->y){
10797                                                     
10798                                                     break;
10799                                                 }else{
10800                                                     okflag = true;
10801                                                 }
10802                                                 
10803                                                 UP = UP->next;
10804                                             }
10805                                             
10806                                         }
10807                                         UP = UPT;
10808                                         
10809                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10810                                         else if(UP){
10811                                             while(UP->next) UP = UP->next;
10812                                         }
10813                                         if(okflag){
10814                                             UP->x = chosen->x;
10815                                             UP->y = chosen->y;
10816                                             UP->next = calloc(1, sizeof(UNITPOINT));
10817                                             okflag = false;
10818                                             objeSCSunitCnt++;
10819                                         }
10820                                     }
10821                                     
10822                                 }
10823                             }
10824                         }
10825                         
10826                     omfgUnitOver31:
10827                         UP = NULL;
10828                         UPT = NULL;
10829                         
10830                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
10831                         
10832                         chosen = chosen->next;
10833                     }chosen = chosenT;
10834                     okflag = true;
10835                     MS0->S4.obje = MS0->S4.obje->next;
10836                 }
10837                 MS0->S4.obje = objeT;
10838             }else if(MS0->S4.objeFlag){
10839                 
10840                 UNIT2 *objeT = MS0->S4.obje;
10841                 
10842                 while (MS0->S4.obje) {
10843                     
10844                     
10845                     
10846                     U = UTop;
10847                     static bool okflag = true;
10848                     while(U){
10849                         if(U->team != MS0->S4.team){
10850                             U = U->next;
10851                             continue;
10852                         }
10853                         for (int i = 0;i < 1002;i++) {
10854                             for (int k = 0;k < 1002;k++) {
10855                                 objeR[i][k] = 0;
10856                             }
10857                         }
10858                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
10859                         
10860                         int Cnum = 0;
10861                         
10862                         for(int bx=1;bx<=chipWidth;bx++){
10863                             for(int by=1;by<=chipHeight;by++){
10864                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
10865                                     
10866                                     if(objeR[chosen->x][chosen->y] > 0){
10867                                         Cnum++;
10868                                         if(Unum < Cnum) goto omfgUnitOver32;
10869                                         
10870                                         
10871                                         
10872                                         
10873                                         
10874                                         if(UP)
10875                                         {
10876                                             if(!UPT){
10877                                                 UPT = UP;
10878                                             }
10879                                             
10880                                             UP = UPT;
10881                                             while (UP) {
10882                                                 if(UP->x == chosen->x && UP->y == chosen->y){
10883                                                     
10884                                                     break;
10885                                                 }else{
10886                                                     okflag = true;
10887                                                 }
10888                                                 
10889                                                 UP = UP->next;
10890                                             }
10891                                             
10892                                         }
10893                                         UP = UPT;
10894                                         
10895                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10896                                         else if(UP){
10897                                             while(UP->next) UP = UP->next;
10898                                         }
10899                                         if(okflag){
10900                                             UP->x = chosen->x;
10901                                             UP->y = chosen->y;
10902                                             UP->next = calloc(1, sizeof(UNITPOINT));
10903                                             okflag = false;
10904                                             objeSCSunitCnt++;
10905                                         }
10906                                     }
10907                                     
10908                                 }
10909                             }
10910                         }
10911                         
10912                     omfgUnitOver32:
10913                         UP = NULL;
10914                         UPT = NULL;
10915                         
10916                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
10917                         
10918                         chosen = chosen->next;
10919                     }chosen = chosenT;
10920                     okflag = true;
10921                     MS0->S4.obje = MS0->S4.obje->next;
10922                 }
10923                 MS0->S4.obje = objeT;
10924                 U = UTop;
10925             }
10926
10927             if(MS0->S4.team == 0){
10928                 
10929                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
10930                 
10931                 if(MS0->S4.unitCMD == 0){
10932                     if(pushStanbyFlag){
10933                         
10934                     }else{
10935                         trueFlag = false;
10936                     }
10937                 }else if(MS0->S4.unitCMD == 1){
10938                     if(battleSetUp){
10939                         battleSetUpIgnore = true;
10940                     }else{
10941                         trueFlag = false;
10942                     }
10943                 }else if(MS0->S4.unitCMD == 2){
10944                     
10945                 }
10946                 
10947                 
10948                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
10949                     
10950                     
10951                     
10952                     BUILD2 *bldt = MS0->S4.build;
10953                     
10954                     while(MS0->S4.build){
10955                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10956                         
10957                         if(MS0->S4.unitCMD == 0){
10958                             if(pushStanbyFlag){
10959                                 
10960                             }else{
10961                                 trueFlag = false;
10962                             }
10963                         }else if(MS0->S4.unitCMD == 1){
10964                             if(battleSetUp){
10965                                 battleSetUpIgnore = true;
10966                             }else{
10967                                 trueFlag = false;
10968                                 
10969                             }
10970                             
10971                         }else if(MS0->S4.unitCMD == 2){
10972                             
10973                             
10974                         }
10975                     }else{
10976                         trueFlag = false;
10977                     }
10978                         MS0->S4.build = MS0->S4.build->next;
10979                     }MS0->S4.build = bldt;
10980                     
10981                     
10982                 }else if(MS0->S4.subj && !MS0->S4.obje){
10983                     
10984                     
10985                     UNIT2 *sbjt = MS0->S4.subj;
10986                     
10987                     while(MS0->S4.subj){
10988                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
10989                     
10990                     if(MS0->S4.unitCMD == 0){
10991                         if(pushStanbyFlag){
10992                             
10993                         }else{
10994                             trueFlag = false;
10995                         }
10996                     }else if(MS0->S4.unitCMD == 1){
10997                         if(battleSetUp){
10998                             battleSetUpIgnore = true;
10999                         }else{
11000                             trueFlag = false;
11001                     
11002                         }
11003                    
11004                     }else if(MS0->S4.unitCMD == 2){
11005                         
11006                     
11007                     }
11008                     }else{
11009                         trueFlag = false;
11010                     }
11011                     
11012                         MS0->S4.subj = MS0->S4.subj->next;
11013                     }MS0->S4.subj = sbjt;
11014                 
11015                     
11016                 }else if(MS0->S4.subj && MS0->S4.obje){
11017                     
11018                     UNIT2 *sbjt = MS0->S4.subj;
11019                     UNIT2 *objt = MS0->S4.obje;
11020                     
11021                     while(MS0->S4.subj){
11022                         while(MS0->S4.obje){
11023                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11024                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
11025                     
11026                     if(MS0->S4.unitCMD == 0){
11027                         
11028                         if(MS0->S4.unitType == 0){
11029                         if(objeSCSunitCnt == MS0->S4.unitNum){
11030                         
11031                             if(pushStanbyFlag){
11032                                 
11033                             }else{
11034                                 trueFlag = false;
11035                             }
11036                         }
11037                         
11038                         }else if(MS0->S4.unitType == 1){
11039                             if(objeSCSunitCnt >= MS0->S4.unitNum){
11040                                 
11041                                 if(pushStanbyFlag){
11042                                     
11043                                 }else{
11044                                     trueFlag = false;
11045                                 }
11046                             }
11047                         
11048                         }else if(MS0->S4.unitType == 2){
11049                             if(objeSCSunitCnt <= MS0->S4.unitNum){
11050                                 
11051                                 if(pushStanbyFlag){
11052                                     
11053                                 }else{
11054                                     trueFlag = false;
11055                                 }
11056                             }
11057                         }
11058                         
11059                     }else if(MS0->S4.unitCMD == 1){
11060
11061                         if(MS0->S4.unitType == 0){
11062                             if(objeSCSunitCnt == MS0->S4.unitNum){
11063                                 
11064                                 if(battleSetUp){
11065                                     battleSetUpIgnore = true;
11066                                 }else{
11067                                     trueFlag = false;
11068                                 }
11069                             }
11070                             
11071                         }else if(MS0->S4.unitType == 1){
11072                             if(objeSCSunitCnt >= MS0->S4.unitNum){
11073                                 
11074                                 if(battleSetUp){
11075                                     battleSetUpIgnore = true;
11076                                 }else{
11077                                     trueFlag = false;
11078                                 }
11079                             }
11080                             
11081                         }else if(MS0->S4.unitType == 2){
11082                             if(objeSCSunitCnt <= MS0->S4.unitNum){
11083                                 
11084                                 if(battleSetUp){
11085                                     battleSetUpIgnore = true;
11086                                 }else{
11087                                     trueFlag = false;
11088                                 }
11089                             }
11090                         }
11091                         
11092                     }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
11093                         
11094                         
11095                     }
11096                     
11097                     
11098                     
11099                     
11100                     
11101                     }else{
11102                         trueFlag = false;
11103                     }
11104                         MS0->S4.obje = MS0->S4.obje->next;
11105                         }MS0->S4.obje = objt;
11106                         MS0->S4.subj = MS0->S4.subj->next;
11107                     }MS0->S4.subj = sbjt;
11108                     
11109                 }if(MS0->S4.subj && MS0->S4.build){
11110                 
11111                     
11112                     UNIT2 *sbjt = MS0->S4.subj;
11113                     BUILD2 *bldt = MS0->S4.build;
11114                     
11115                     while(MS0->S4.subj){
11116                         while(MS0->S4.build){
11117                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11118                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
11119                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
11120                         
11121                         if(MS0->S4.unitCMD == 0){
11122                             if(pushStanbyFlag){
11123                                 
11124                             }else{
11125                                 trueFlag = false;
11126                             }
11127                         }else if(MS0->S4.unitCMD == 1){
11128                             if(battleSetUp){
11129                                 battleSetUpIgnore = true;
11130                             }else{
11131                                 trueFlag = false;
11132                                 
11133                             }
11134                             
11135                         }else if(MS0->S4.unitCMD == 2){
11136                             
11137                             
11138                         }
11139                 
11140                 
11141                     }else{
11142                         trueFlag = false;
11143                     }
11144                         MS0->S4.build = MS0->S4.build->next;
11145                         }MS0->S4.build = bldt;
11146
11147                         MS0->S4.subj = MS0->S4.subj->next;
11148                 }
11149                    MS0->S4.subj = sbjt;
11150                 
11151                 }
11152             }else if(MS0->S4.team == 1){
11153                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
11154                     
11155                     if(MS0->S4.unitCMD == 0){
11156                         if(pushStanbyFlag){
11157                             
11158                         }else{
11159                             trueFlag = false;
11160                         }
11161                     }else if(MS0->S4.unitCMD == 1){
11162                         if(battleSetUp){
11163                             battleSetUpIgnore = true;
11164                         }else{
11165                             trueFlag = false;
11166                         }
11167                     }else if(MS0->S4.unitCMD == 2){
11168                         
11169                     }
11170                     
11171                     
11172                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
11173                     
11174                     
11175                     
11176                     BUILD2 *bldt = MS0->S4.build;
11177                     while(MS0->S4.build){
11178                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
11179                         
11180                         if(MS0->S4.unitCMD == 0){
11181                             if(pushStanbyFlag){
11182                                 
11183                             }else{
11184                                 trueFlag = false;
11185                             }
11186                         }else if(MS0->S4.unitCMD == 1){
11187                             if(battleSetUp){
11188                                 battleSetUpIgnore = true;
11189                             }else{
11190                                 trueFlag = false;
11191                                 
11192                             }
11193                             
11194                         }else if(MS0->S4.unitCMD == 2){
11195                             
11196                             
11197                         }
11198                     }else{
11199                         trueFlag = false;
11200                     }
11201                         MS0->S4.build = MS0->S4.build->next;
11202                     }MS0->S4.build = bldt;
11203                     
11204                     
11205                 }else if(MS0->S4.subj && !MS0->S4.obje){
11206                     
11207                     
11208                     
11209                     UNIT2 *sbjt = MS0->S4.subj;
11210                     
11211                     while(MS0->S4.subj){
11212                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
11213                         
11214                         if(MS0->S4.unitCMD == 0){
11215                             if(pushStanbyFlag){
11216                                 
11217                             }else{
11218                                 trueFlag = false;
11219                             }
11220                         }else if(MS0->S4.unitCMD == 1){
11221                             if(battleSetUp){
11222                                 battleSetUpIgnore = true;
11223                             }else{
11224                                 trueFlag = false;
11225                                 
11226                             }
11227                             
11228                         }else if(MS0->S4.unitCMD == 2){
11229                             
11230                             
11231                         }
11232                     }else{
11233                         trueFlag = false;
11234                     }
11235                     
11236                         MS0->S4.subj = MS0->S4.subj->next;
11237                     }MS0->S4.subj = sbjt;
11238                     
11239                 }else if(MS0->S4.subj && MS0->S4.obje){
11240                     
11241                     UNIT2 *sbjt = MS0->S4.subj;
11242                     UNIT2 *objt = MS0->S4.obje;
11243                     
11244                     while(MS0->S4.subj){
11245                         while(MS0->S4.obje){
11246                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11247                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
11248                         
11249                         if(MS0->S4.unitCMD == 0){
11250                             
11251                             if(MS0->S4.unitType == 0){
11252                                 if(objeSCSunitCnt == MS0->S4.unitNum){
11253                                     
11254                                     if(pushStanbyFlag){
11255                                         
11256                                     }else{
11257                                         trueFlag = false;
11258                                     }
11259                                 }
11260                                 
11261                             }else if(MS0->S4.unitType == 1){
11262                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
11263                                     
11264                                     if(pushStanbyFlag){
11265                                         
11266                                     }else{
11267                                         trueFlag = false;
11268                                     }
11269                                 }
11270                                 
11271                             }else if(MS0->S4.unitType == 2){
11272                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
11273                                     
11274                                     if(pushStanbyFlag){
11275                                         
11276                                     }else{
11277                                         trueFlag = false;
11278                                     }
11279                                 }
11280                             }
11281                             
11282                         }else if(MS0->S4.unitCMD == 1){
11283                             
11284                             if(MS0->S4.unitType == 0){
11285                                 if(objeSCSunitCnt == MS0->S4.unitNum){
11286                                     
11287                                     if(battleSetUp){
11288                                         battleSetUpIgnore = true;
11289                                     }else{
11290                                         trueFlag = false;
11291                                     }
11292                                 }
11293                                 
11294                             }else if(MS0->S4.unitType == 1){
11295                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
11296                                     
11297                                     if(battleSetUp){
11298                                         battleSetUpIgnore = true;
11299                                     }else{
11300                                         trueFlag = false;
11301                                     }
11302                                 }
11303                                 
11304                             }else if(MS0->S4.unitType == 2){
11305                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
11306                                     
11307                                     if(battleSetUp){
11308                                         battleSetUpIgnore = true;
11309                                     }else{
11310                                         trueFlag = false;
11311                                     }
11312                                 }
11313                             }
11314                             
11315                         }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
11316                             
11317                             
11318                         }
11319
11320                         
11321                         
11322                         
11323                     }else{
11324                         trueFlag = false;
11325                     }
11326
11327                         
11328                             MS0->S4.obje = MS0->S4.obje->next;
11329                         }MS0->S4.obje = objt;
11330                         MS0->S4.subj = MS0->S4.subj->next;
11331                     }MS0->S4.subj = sbjt;
11332                     
11333                 }if(MS0->S4.subj && MS0->S4.build){
11334                     
11335                     UNIT2 *sbjt = MS0->S4.subj;
11336                     BUILD2 *bldt = MS0->S4.build;
11337                     while(MS0->S4.subj){
11338                         while(MS0->S4.build){
11339                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11340                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
11341                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
11342                         
11343                         if(MS0->S4.unitCMD == 0){
11344                             if(pushStanbyFlag){
11345                                 
11346                             }else{
11347                                 trueFlag = false;
11348                             }
11349                         }else if(MS0->S4.unitCMD == 1){
11350                             if(battleSetUp){
11351                                 battleSetUpIgnore = true;
11352                             }else{
11353                                 trueFlag = false;
11354                                 
11355                             }
11356                             
11357                         }else if(MS0->S4.unitCMD == 2){
11358                             
11359                             
11360                         }
11361                         
11362                         
11363                     }else{
11364                         trueFlag = false;
11365                     }
11366                         MS0->S4.build = MS0->S4.build->next;
11367                         }MS0->S4.build = bldt;
11368                         MS0->S4.subj = MS0->S4.subj->next;
11369                     }MS0->S4.subj = sbjt;
11370                 }
11371             }else if(MS0->S4.team == 2){
11372                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
11373                     
11374                     if(MS0->S4.unitCMD == 0){
11375                         if(pushStanbyFlag){
11376                             
11377                         }else{
11378                             trueFlag = false;
11379                         }
11380                     }else if(MS0->S4.unitCMD == 1){
11381                         if(battleSetUp){
11382                             battleSetUpIgnore = true;
11383                         }else{
11384                             trueFlag = false;
11385                         }
11386                     }else if(MS0->S4.unitCMD == 2){
11387                         
11388                     }
11389                     
11390                     
11391                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
11392                     
11393                     
11394                     
11395                     BUILD2 *bldt = MS0->S4.build;
11396                     while(MS0->S4.build){
11397                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
11398                         
11399                         if(MS0->S4.unitCMD == 0){
11400                             if(pushStanbyFlag){
11401                                 
11402                             }else{
11403                                 trueFlag = false;
11404                             }
11405                         }else if(MS0->S4.unitCMD == 1){
11406                             if(battleSetUp){
11407                                 battleSetUpIgnore = true;
11408                             }else{
11409                                 trueFlag = false;
11410                                 
11411                             }
11412                             
11413                         }else if(MS0->S4.unitCMD == 2){
11414                             
11415                             
11416                         }
11417                     }else{
11418                         trueFlag = false;
11419                     }
11420                         MS0->S4.build = MS0->S4.build->next;
11421                     }MS0->S4.build = bldt;
11422                     
11423                     
11424                 }else if(MS0->S4.subj && !MS0->S4.obje){
11425   
11426                     UNIT2 *sbjt = MS0->S4.subj;
11427                     
11428                     while(MS0->S4.subj){
11429                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
11430                         
11431                         if(MS0->S4.unitCMD == 0){
11432                             if(pushStanbyFlag){
11433                                 
11434                             }else{
11435                                 trueFlag = false;
11436                             }
11437                         }else if(MS0->S4.unitCMD == 1){
11438                             if(battleSetUp){
11439                                 battleSetUpIgnore = true;
11440                             }else{
11441                                 trueFlag = false;
11442                                 
11443                             }
11444                             
11445                         }else if(MS0->S4.unitCMD == 2){
11446                             
11447                             
11448                         }
11449                     }else{
11450                         trueFlag = false;
11451                     }
11452                       MS0->S4.subj = MS0->S4.subj->next;
11453                     }MS0->S4.subj = sbjt;
11454                     
11455                 }else if(MS0->S4.subj && MS0->S4.obje){
11456                     
11457                     UNIT2 *sbjt = MS0->S4.subj;
11458                     UNIT2 *objt = MS0->S4.obje;
11459                     
11460                     while(MS0->S4.subj){
11461                         while(MS0->S4.obje){
11462                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11463                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
11464                         
11465                         if(MS0->S4.unitCMD == 0){
11466                             
11467                             if(MS0->S4.unitType == 0){
11468                                 if(objeSCSunitCnt == MS0->S4.unitNum){
11469                                     
11470                                     if(pushStanbyFlag){
11471                                         
11472                                     }else{
11473                                         trueFlag = false;
11474                                     }
11475                                 }
11476                                 
11477                             }else if(MS0->S4.unitType == 1){
11478                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
11479                                     
11480                                     if(pushStanbyFlag){
11481                                         
11482                                     }else{
11483                                         trueFlag = false;
11484                                     }
11485                                 }
11486                                 
11487                             }else if(MS0->S4.unitType == 2){
11488                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
11489                                     
11490                                     if(pushStanbyFlag){
11491                                         
11492                                     }else{
11493                                         trueFlag = false;
11494                                     }
11495                                 }
11496                             }
11497                             
11498                         }else if(MS0->S4.unitCMD == 1){
11499                             
11500                             if(MS0->S4.unitType == 0){
11501                                 if(objeSCSunitCnt == MS0->S4.unitNum){
11502                                     
11503                                     if(battleSetUp){
11504                                         battleSetUpIgnore = true;
11505                                     }else{
11506                                         trueFlag = false;
11507                                     }
11508                                 }
11509                                 
11510                             }else if(MS0->S4.unitType == 1){
11511                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
11512                                     
11513                                     if(battleSetUp){
11514                                         battleSetUpIgnore = true;
11515                                     }else{
11516                                         trueFlag = false;
11517                                     }
11518                                 }
11519                                 
11520                             }else if(MS0->S4.unitType == 2){
11521                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
11522                                     
11523                                     if(battleSetUp){
11524                                         battleSetUpIgnore = true;
11525                                     }else{
11526                                         trueFlag = false;
11527                                     }
11528                                 }
11529                             }
11530                             
11531                         }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
11532                             
11533                             
11534                         }
11535
11536                     }else{
11537                         trueFlag = false;
11538                     }
11539                             MS0->S4.obje = MS0->S4.obje->next;
11540                         }MS0->S4.obje = objt;
11541                         MS0->S4.subj = MS0->S4.subj->next;
11542                     }MS0->S4.subj = sbjt;
11543                 }if(MS0->S4.subj && MS0->S4.build){
11544                     
11545                     UNIT2 *sbjt = MS0->S4.subj;
11546                     BUILD2 *bldt = MS0->S4.build;
11547                     while(MS0->S4.subj){
11548                         while(MS0->S4.build){
11549                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
11550                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
11551                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
11552                         
11553                         if(MS0->S4.unitCMD == 0){
11554                             if(pushStanbyFlag){
11555                                 
11556                             }else{
11557                                 trueFlag = false;
11558                             }
11559                         }else if(MS0->S4.unitCMD == 1){
11560                             if(battleSetUp){
11561                                 battleSetUpIgnore = true;
11562                             }else{
11563                                 trueFlag = false;
11564                                 
11565                             }
11566                             
11567                         }else if(MS0->S4.unitCMD == 2){
11568                             
11569                             
11570                         }
11571                         
11572                         
11573                     }else{
11574                         trueFlag = false;
11575                     }
11576                         MS0->S4.build = MS0->S4.build->next;
11577                         }MS0->S4.build = bldt;
11578                         MS0->S4.subj = MS0->S4.subj->next;
11579                     }MS0->S4.subj = sbjt;
11580                 }
11581             }
11582         }
11583     
11584     
11585     
11586     
11587     
11588     
11589     
11590     
11591     
11592     
11593     
11594         
11595         
11596         
11597         
11598         
11599         
11600         
11601         
11602         
11603         
11604     
11605     
11606     
11607     
11608     }
11609     
11610         
11611     
11612     
11613     
11614     
11615     
11616     
11617     branchEndFlag = true;
11618     MS0->succeessfulFlag = false;
11619     if(trueFlag){
11620         branchSuceedFlag = true;
11621         MS0->succeessfulFlag = true;
11622     }else{
11623         MS0->succeessfulFlag = false;
11624     }
11625     
11626     CRMS0 = MS0;
11627     if(branchEndFlag){
11628         if(!branchSuceedFlag){
11629             MS0 = MSDPtop;
11630             while(MS0){
11631                 MS0->endFlag = false;
11632                 MS0 = MS0->next;
11633             }
11634             
11635             MS0 = CRMS0;
11636             MS0->endFlag = true;
11637             MS0 = MSDPtop;
11638             
11639             if([CRMS0->S4.FAILrabel isEqualToString:MS0->label]){
11640                 MS0->succeessfulFlag = false;
11641                 MS0->endFlag = false;
11642             }else{
11643                 
11644                 while (MS0) {
11645                     
11646                     if(MS0->next)
11647                         if([CRMS0->S4.FAILrabel isEqualToString:MS0->next->label]){
11648                             if(MS0->type == 6 && MS0->endFlag){
11649                                 
11650                             }else{
11651                                 MS0->succeessfulFlag = true;
11652                             }
11653                             MS0->endFlag = true;
11654                             MS0 = MS0->next;
11655                             break;
11656                         }
11657                     if(MS0->type == 6 && MS0->endFlag){
11658                         
11659                     }else{
11660                         MS0->succeessfulFlag = true;
11661                     }
11662                     MS0->endFlag = true;
11663                     MS0 = MS0->next;
11664                 }
11665             }
11666             
11667             if(!MS0){
11668                 MS0 = CRMS0;
11669                 return MS0;
11670             }
11671
11672         }else if(branchSuceedFlag){
11673             MS0 = MSDPtop;
11674             while(MS0){
11675                 MS0->endFlag = false;
11676                 MS0 = MS0->next;
11677             }
11678             
11679             MS0 = CRMS0;
11680             MS0->endFlag = true;
11681             
11682             MS0 = MSDPtop;
11683             
11684             if([CRMS0->S4.COMPrabel isEqualToString:MS0->label]){
11685                 MS0->succeessfulFlag = false;
11686                 MS0->endFlag = false;
11687             }else{
11688                 
11689                 while (MS0) {
11690                     
11691                     if(MS0->next)
11692                         if([CRMS0->S4.COMPrabel isEqualToString:MS0->next->label]){
11693                             
11694                             if(MS0->type == 6 && MS0->endFlag){
11695                                 
11696                             }else{
11697                                 MS0->succeessfulFlag = true;
11698                             }
11699                             MS0->endFlag = true;
11700                             MS0 = MS0->next;
11701                             break;
11702                         }
11703                     
11704                     if(MS0->type == 6 && MS0->endFlag){
11705                         
11706                     }else{
11707                         MS0->succeessfulFlag = true;
11708                     }
11709                     MS0->endFlag = true;
11710                     MS0 = MS0->next;
11711                 }
11712             }
11713             
11714             if(!MS0){
11715                 MS0 = CRMS0;
11716                 return MS0;
11717             }
11718         }
11719     }
11720     
11721     //NSLog(@"%d", MSDPtop->succeessfulFlag);
11722     return MS0;
11723 }
11724
11725
11726 -(void)checkPlaceHani:(int)cnsPow tX:(int)startX tY:(int)startY aMap:(int[][1002])aMap u:(UNIT*)u scsCnt:(int*)scsCnt{
11727     
11728     if(cnsPow < 0) return;
11729     
11730     int i0;
11731     int *j0 = scsCnt;
11732     if(aMap[startY][startX] <= cnsPow)
11733         aMap[startY][startX] = cnsPow;
11734     
11735     if(startY < 0) startY = 0;
11736     if(startX < 0) startX = 0;
11737     if(cnsPow < 0) cnsPow = 0;
11738     
11739     i0 = cnsPow - 1;
11740     
11741     if(aMap[startY-1][startX] >= 0 && cnsPow > 0)
11742         [self checkPlaceHani:i0 tX:startX tY:startY-1 aMap:aMap u:u scsCnt:j0];
11743     
11744     i0 = cnsPow - 1;
11745     if(aMap[startY+1][startX] >= 0 && cnsPow > 0)
11746         [self checkPlaceHani:i0 tX:startX tY:startY+1 aMap:aMap u:u scsCnt:j0];
11747     
11748     i0 = cnsPow - 1;
11749     if(aMap[startY][startX-1] >= 0 && cnsPow > 0)
11750         [self checkPlaceHani:i0 tX:startX-1 tY:startY aMap:aMap u:u scsCnt:j0];
11751     
11752     i0 = cnsPow - 1;
11753     if(aMap[startY][startX+1] >= 0 && cnsPow > 0)
11754         [self checkPlaceHani:i0 tX:startX+1 tY:startY aMap:aMap u:u scsCnt:j0];
11755     
11756     
11757 }
11758
11759 -(MAPSCRIPT0*)setLabelJump:(MAPSCRIPT0*)MS0{
11760     
11761     MAPSCRIPT0 *CRMS0 = MS0;
11762     MS0 = MSDPtop;
11763     while(MS0){
11764         MS0->endFlag = false;
11765         MS0 = MS0->next;
11766     }
11767     MS0 = CRMS0;
11768     MS0->endFlag = true;
11769     MS0->succeessfulFlag = true;
11770     
11771     MS0 = MSDPtop;
11772     
11773     if([CRMS0->labelJump isEqualToString:MS0->label]){
11774         MS0->succeessfulFlag = false;
11775         MS0->endFlag = false;
11776     }else{
11777         
11778         while (MS0) {
11779             
11780             if(MS0->next)
11781                 if([CRMS0->labelJump isEqualToString:MS0->next->label]){
11782                     if(MS0->type == 6 && MS0->endFlag){
11783                         
11784                     }else{
11785                         MS0->succeessfulFlag = true;
11786                     }
11787                     MS0->endFlag = true;
11788                     MS0 = MS0->next;
11789                     break;
11790                 }
11791             if(MS0->type == 6 && MS0->endFlag){
11792                 
11793             }else{
11794                 MS0->succeessfulFlag = true;
11795             }
11796             MS0->endFlag = true;
11797                 MS0 = MS0->next;
11798         }
11799     }
11800     if(!MS0){
11801         MS0 = CRMS0;
11802         return MS0;
11803     }
11804     
11805     return MS0;
11806 }
11807
11808 -(MAPSCRIPT0*)setDefault:(MAPSCRIPT0*)MS0{
11809     
11810     MS0->succeessfulFlag = true;
11811     MS0->endFlag = true;
11812     return MS0;
11813 }
11814
11815 -(MAPSCRIPT0*)setResource:(MAPSCRIPT0*)MS0{
11816     
11817     if(MS0->S6.team == 0){
11818         
11819         if(MS0->S6.RCsupply){
11820             if(MS0->S6.RCsupplyS){
11821                 if(MS0->S6.RCsupplyAdd)
11822                     P[0].resource += MS0->S6.RCsupplyValue;
11823                 else
11824                     P[0].resource -= MS0->S6.RCsupplyValue;
11825             }else{
11826                 if(MS0->S6.RCsupplyAdd)
11827                     P[0].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11828                 else
11829                     P[0].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11830             }
11831         }
11832         if(MS0->S6.RCfood){
11833             if(MS0->S6.RCfoodS){
11834                 if(MS0->S6.RCfoodAdd)
11835                     P[0].food += MS0->S6.RCfoodValue;
11836                 else
11837                     P[0].food -= MS0->S6.RCfoodValue;
11838             }else{
11839                 if(MS0->S6.RCfoodAdd)
11840                     P[0].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11841                 else
11842                     P[0].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11843             }
11844         }
11845         if(MS0->S6.RCmoney){
11846             if(MS0->S6.RCmoneyS){
11847                 if(MS0->S6.RCmoneyAdd)
11848                     P[0].money += MS0->S6.RCmoneyValue;
11849                 else
11850                     P[0].money -= MS0->S6.RCmoneyValue;
11851             }else{
11852                 if(MS0->S6.RCmoneyAdd)
11853                     P[0].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11854                 else
11855                     P[0].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11856             }
11857         }
11858         
11859     }else if(MS0->S6.team == 1){
11860         if(MS0->S6.RCsupply){
11861         if(MS0->S6.RCsupplyS){
11862             if(MS0->S6.RCsupplyAdd)
11863                 P[1].resource += MS0->S6.RCsupplyValue;
11864             else
11865                 P[1].resource -= MS0->S6.RCsupplyValue;
11866         }else{
11867             if(MS0->S6.RCsupplyAdd)
11868                 P[1].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11869             else
11870                 P[1].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11871         }
11872         }
11873     if(MS0->S6.RCfood){
11874         if(MS0->S6.RCfoodS){
11875             if(MS0->S6.RCfoodAdd)
11876                 P[1].food += MS0->S6.RCfoodValue;
11877             else
11878                 P[1].food -= MS0->S6.RCfoodValue;
11879         }else{
11880             if(MS0->S6.RCfoodAdd)
11881                 P[1].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11882             else
11883                 P[1].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11884         }
11885     }
11886     if(MS0->S6.RCmoney){
11887         if(MS0->S6.RCmoneyS){
11888             if(MS0->S6.RCmoneyAdd)
11889                 P[1].money += MS0->S6.RCmoneyValue;
11890             else
11891                 P[1].money -= MS0->S6.RCmoneyValue;
11892         }else{
11893             if(MS0->S6.RCmoneyAdd)
11894                 P[1].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11895             else
11896                 P[1].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11897         }
11898     }
11899     }else if(MS0->S6.team == 2){
11900         if(MS0->S6.RCsupply){
11901         if(MS0->S6.RCsupplyS){
11902             if(MS0->S6.RCsupplyAdd)
11903                 P[2].resource += MS0->S6.RCsupplyValue;
11904             else
11905                 P[2].resource -= MS0->S6.RCsupplyValue;
11906         }else{
11907             if(MS0->S6.RCsupplyAdd)
11908                 P[2].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11909             else
11910                 P[2].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11911         }
11912         }
11913     
11914     if(MS0->S6.RCfood){
11915         if(MS0->S6.RCfoodS){
11916             if(MS0->S6.RCfoodAdd)
11917                 P[2].food += MS0->S6.RCfoodValue;
11918             else
11919                 P[2].food -= MS0->S6.RCfoodValue;
11920         }else{
11921             if(MS0->S6.RCfoodAdd)
11922                 P[2].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11923             else
11924                 P[2].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11925         }
11926     }
11927     if(MS0->S6.RCmoney){
11928         if(MS0->S6.RCmoneyS){
11929             if(MS0->S6.RCmoneyAdd)
11930                 P[2].money += MS0->S6.RCmoneyValue;
11931             else
11932                 P[2].money -= MS0->S6.RCmoneyValue;
11933         }else{
11934             if(MS0->S6.RCmoneyAdd)
11935                 P[2].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11936             else
11937                 P[2].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11938         }
11939     }
11940     }
11941     
11942     if(P[0].resource < 0) P[0].resource = 0;
11943     if(P[1].resource < 0) P[1].resource = 0;
11944     if(P[2].resource < 0) P[2].resource = 0;
11945     
11946     if(P[0].food < 0) P[0].food = 0;
11947     if(P[1].food < 0) P[1].food = 0;
11948     if(P[2].food < 0) P[2].food = 0;
11949     
11950     if(P[0].money < 0) P[0].money = 0;
11951     if(P[1].money < 0) P[1].money = 0;
11952     if(P[2].money < 0) P[2].money = 0;
11953     
11954     MS0->succeessfulFlag = true;
11955     MS0->endFlag = true;
11956     return MS0;
11957 }
11958
11959 -(MAPSCRIPT0*)setLabel:(MAPSCRIPT0*)MS0{
11960
11961     //NSLog(@"%d", MSDP0top->succeessfulFlag);
11962     MS0->succeessfulFlag = true;
11963     MS0->endFlag = true;
11964     return MS0;
11965 }
11966
11967 -(MAPSCRIPT0*)setComment:(MAPSCRIPT0*)MS0{
11968     
11969     MS0->succeessfulFlag = true;
11970     MS0->endFlag = true;
11971     return MS0;
11972 }
11973
11974
11975 -(MAPSCRIPT0*)setSelection:(MAPSCRIPT0*)MS0{
11976     
11977     static bool initFlag = false;
11978     
11979     if(!initFlag){
11980         initFlag = true;
11981         
11982         MAPSCRIPT2 *MS2top = MS0->S2;
11983         
11984         slctPoint.x = [mapWindow frame].origin.x + 100;
11985         slctPoint.y = [mapWindow frame].origin.y + 300;
11986         
11987         [slctBtn1 setHidden:YES];
11988         [slctBtn2 setHidden:YES];
11989         [slctBtn3 setHidden:YES];
11990         [slctBtn4 setHidden:YES];
11991         [slctBtn5 setHidden:YES];
11992         [slctBtn6 setHidden:YES];
11993         [slctBtn7 setHidden:YES];
11994         [slctBtn8 setHidden:YES];
11995         [slctBtn9 setHidden:YES];
11996         
11997         for(int i = 1;MS0->S2;i++){
11998             
11999             if(i == 1){
12000                 [slctBtn1 setTitle:MS0->S2->selection];
12001                 [slctBtn1 setHidden:NO];
12002                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 60) display:YES];
12003             }
12004             if(i == 2){
12005                 [slctBtn2 setTitle:MS0->S2->selection];
12006                 [slctBtn2 setHidden:NO];
12007                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 90) display:YES];
12008             }
12009             if(i == 3){
12010                 [slctBtn3 setTitle:MS0->S2->selection];
12011                 [slctBtn3 setHidden:NO];
12012                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 120) display:YES];
12013             }
12014             
12015             if(i == 4){
12016                 [slctBtn4 setTitle:MS0->S2->selection];
12017                 [slctBtn4 setHidden:NO];
12018                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 150) display:YES];
12019             }
12020             if(i == 5){
12021                 [slctBtn5 setTitle:MS0->S2->selection];
12022                 [slctBtn5 setHidden:NO];
12023                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 180) display:YES];
12024             }
12025             if(i == 6){
12026                 [slctBtn6 setTitle:MS0->S2->selection];
12027                 [slctBtn6 setHidden:NO];
12028                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 210) display:YES];
12029             }
12030             if(i == 7){
12031                 [slctBtn7 setTitle:MS0->S2->selection];
12032                 [slctBtn7 setHidden:NO];
12033                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 240) display:YES];
12034             }
12035             if(i == 8){
12036                 [slctBtn8 setTitle:MS0->S2->selection];
12037                 [slctBtn8 setHidden:NO];
12038                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 270) display:YES];
12039             }
12040             if(i == 9){
12041                 [slctBtn9 setTitle:MS0->S2->selection];
12042                 [slctBtn9 setHidden:NO];
12043                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 300) display:YES];
12044             }
12045             slctBtnNum = i;
12046             if(slctBtnNum > 9)
12047                 slctBtnNum = 9;
12048             MS0->S2 = MS0->S2->next;
12049         }
12050         MS0->S2 = MS2top;
12051         
12052         
12053         
12054         [selectionWindow makeKeyAndOrderFront:nil];
12055     }
12056     
12057     
12058     if(slctedBtnNum > 0){
12059         MAPSCRIPT0 *CRMS0 = MS0;
12060         
12061         MS0 = MSDPtop;
12062         while(MS0){
12063             MS0->endFlag = false;
12064             MS0 = MS0->next;
12065         }MS0 = CRMS0;
12066         
12067         MAPSCRIPT2 *MS2top = MS0->S2;
12068         MAPSCRIPT2 *CRMS2;
12069         
12070         for(int i = 1;i < slctedBtnNum;i++){
12071             MS0->S2 = MS0->S2->next;
12072         }
12073             CRMS2 = MS0->S2;
12074         
12075         MS0->S2 = MS2top;
12076         
12077         MS0 = MSDPtop;
12078         if([CRMS2->labelJump isEqualToString:MS0->label]){
12079             MS0->endFlag = false;
12080         }else{
12081             
12082             while (MS0) {
12083                 
12084                 if(MS0->next)
12085                     if([CRMS2->labelJump isEqualToString:MS0->next->label]){
12086                         if(MS0->type == 6 && MS0->endFlag){
12087                             
12088                         }else{
12089                             MS0->succeessfulFlag = true;
12090                         }
12091                         MS0->endFlag = true;
12092                         MS0 = MS0->next;
12093                         break;
12094                     }
12095                 if(MS0->type == 6 && MS0->endFlag){
12096                     
12097                 }else{
12098                     MS0->succeessfulFlag = true;
12099                 }
12100                 MS0->endFlag = true;
12101                 MS0 = MS0->next;
12102             }
12103         }
12104         if(!MS0){
12105             MS0 = CRMS0;
12106             return MS0;
12107         }
12108         
12109         MS0->endFlag = true;
12110         MS0->succeessfulFlag = true;
12111         initFlag = false;
12112         slctedBtnNum = 0;
12113         }
12114     
12115     return MS0;
12116 }
12117
12118 -(MAPSCRIPT0*)setAppearance:(MAPSCRIPT0*)MS0{
12119     
12120     MS3T = MS0->S3;
12121     while(MS0->S3){
12122         int x, y;
12123         UNITCHIP u;
12124         u = MS0->S3->U;
12125         x = MS0->S3->x;
12126         y = MS0->S3->y;
12127     
12128         if(unitNum[x][y] == -1){
12129             
12130             if(MS0->S3->flag){
12131                 
12132                 
12133             }else{
12134                 unitTeam[x][y] = MS0->S3->team;
12135                 unitNum[x][y] = u.chipNumb;
12136                 loadNum[x][y] = u.chipNumb;
12137                 [self addAppearanceStatus:u x:x y:y];
12138             }
12139         }else{
12140             
12141             if(MS0->S3->flag){
12142             
12143             
12144             }else{
12145                 int *p = calloc(1, sizeof(int));
12146                 int *o = calloc(1, sizeof(int));
12147                 appearanceSAIKIflag = false;
12148                 wtflag = 0;
12149                 
12150                 for (int i = 0;i < 1002;i++) {
12151                     for (int k = 0;k < 1002;k++) {
12152                         apprR[i][k] = 0;
12153                     }
12154                 }
12155                 
12156                 [self checkAppearanceRange:5 tX:y tY:x aMap:apprR];
12157                 
12158                 int postInt = 0;
12159                 for (int i = 0;i < 1002;i++) {
12160                     for (int k = 0;k < 1002;k++) {
12161                         if(apprR[i][k] > postInt && unitNum[i][k] == -1){
12162                             postInt = apprR[i][k];
12163                             *p = i;
12164                             *o = k;
12165                         }
12166                     }
12167                 }
12168                 
12169                 if(*p > 0 && *o >0){
12170                     x = *p;
12171                     y = *o;
12172                     unitTeam[x][y] = MS0->S3->team;
12173                     unitNum[x][y] = u.chipNumb;
12174                     loadNum[x][y] = u.chipNumb;
12175                     [self addAppearanceStatus:u x:x y:y];
12176                 }else{
12177                     MS0->succeessfulFlag = false;
12178                     MS0->endFlag = true;
12179                     MS0->S3 = MS3T;
12180                     return MS0;
12181                 }
12182             }
12183         }
12184         MS0->S3 = MS0->S3->next;
12185     }MS0->S3 = MS3T;
12186     unitColorInitFlag = true;
12187     
12188     MS0->succeessfulFlag = true;
12189     MS0->endFlag = true;
12190     return MS0;
12191 }
12192
12193 -(MAPSCRIPT0*)setDissappearance:(MAPSCRIPT0*)MS0{
12194     
12195     MS5T = MS0->S5;
12196     while(MS0->S5){
12197         int x, y;
12198         UNITCHIP u;
12199         u = MS0->S5->U;
12200         x = MS0->S5->x;
12201         y = MS0->S5->y;
12202         
12203         if(1){
12204
12205
12206             if(MS0->S5->unitNum >= 0){
12207                 unitNum[x][y] = -1;
12208                 unitTeam[x][y] = -1;
12209                 unitNum[x][y] = -1;
12210                 loadNum[x][y] = -1;
12211                 
12212                 U = UTop;
12213                 while(U){
12214                     if(U->ix == x && U->iy == y)
12215                         break;
12216                     U = U->next;
12217                 }
12218                 if(U)
12219                     U->dead = true;
12220                 
12221                 U = UTop;
12222           
12223             }else{
12224                 MS0->succeessfulFlag = false;
12225                 MS0->endFlag = true;
12226                 MS0->S5 = MS5T;
12227                 return MS0;
12228             }
12229             
12230         }
12231         MS0->S5 = MS0->S5->next;
12232     }MS0->S5 = MS5T;
12233     unitColorInitFlag = true;
12234     
12235     MS0->succeessfulFlag = true;
12236     MS0->endFlag = true;
12237     return MS0;
12238 }
12239
12240
12241 -(void)checkAppearanceRange:(int)cnsPow tX:(int)startX tY:(int)startY aMap:(int[][1002])aMap{
12242
12243     if(cnsPow < 0) return;
12244     
12245     int i0;
12246     if(aMap[startY][startX] <= cnsPow)
12247         aMap[startY][startX] = cnsPow;
12248     
12249     if(startY < 0) startY = 0;
12250     if(startX < 0) startX = 0;
12251     if(cnsPow < 0) cnsPow = 0;
12252     
12253     i0 = cnsPow - 1;
12254     
12255     if(aMap[startY-1][startX] >= 0 && cnsPow > 0)
12256         [self checkAppearanceRange:i0 tX:startX tY:startY-1 aMap:aMap];
12257     
12258     i0 = cnsPow - 1;
12259     if(aMap[startY+1][startX] >= 0 && cnsPow > 0)
12260         [self checkAppearanceRange:i0 tX:startX tY:startY+1 aMap:aMap];
12261     
12262     i0 = cnsPow - 1;
12263     if(aMap[startY][startX-1] >= 0 && cnsPow > 0)
12264         [self checkAppearanceRange:i0 tX:startX-1 tY:startY aMap:aMap];
12265     
12266     i0 = cnsPow - 1;
12267     if(aMap[startY][startX+1] >= 0 && cnsPow > 0)
12268         [self checkAppearanceRange:i0 tX:startX+1 tY:startY aMap:aMap];
12269     
12270 }
12271
12272 -(void)addAppearanceStatus:(UNITCHIP)u x:(int)x y:(int)y{
12273     
12274     int omgCnt = 0;
12275     UTop = U;
12276     while (U->next) {omgCnt++;
12277         U = U->next;
12278     }
12279     U->next = calloc(1, sizeof(UNIT));
12280     U = U->next;
12281     U->next = NULL;
12282     if(omgCnt == 0) UTop = U;
12283     U->number = registerNum;
12284     U->chipNumber = -1;
12285     U->chipNumberL = -1;
12286     U->C.chipNumb = -1;
12287     U->CL.chipNumb = -1;
12288     
12289     U->x = x;
12290     U->y = y;
12291     
12292     U->C = u;
12293     if(unitTeam[x][y] == 0 || unitTeam[x][y] == 1){
12294         U->team = 0;
12295         if(unitTeam[x][y] == 1){
12296             U->joinArmyFromNext = true;
12297             U->persuasion = true;
12298         }
12299         if(MF[MFselectedRow+1].MS.playerSet1 == 2)
12300             U->CPU = true;
12301     
12302     }
12303     if(unitTeam[x][y] == 2 || unitTeam[x][y] == 3){
12304         U->team = 2;
12305         if(unitTeam[x][y] == 3){
12306             U->joinArmyFromNext = true;
12307             U->persuasion = true;
12308         }
12309         if(MF[MFselectedRow+1].MS.playerSet2 == 2)
12310             U->CPU = true;
12311         
12312     }
12313     if(unitTeam[x][y] == 4 || unitTeam[x][y] == 5){
12314         U->team = 1;
12315         if(unitTeam[x][y] == 5){
12316             U->joinArmyFromNext = true;
12317             U->persuasion = true;
12318         }
12319         U->CPU = true;
12320     }
12321     if(unitTeam[x][y] == -1){
12322         U->team = -1;
12323         if(unitTeam[x][y] == 0){
12324             U->joinArmyFromNext = false;
12325             U->persuasion = true;
12326         }
12327         U->CPU = true;
12328     }
12329     unitNum[x][y] = u.chipNumb;
12330     [self SetUnitStatus:unitNum[x][y]];
12331     
12332     for(int i = 0;i < UCN;i++){
12333         if([U->C.nameID isEqualToString:UC[i].nameID])
12334             U->chipNumber = i;
12335     }
12336     for(int i = 0;i < LCN;i++){
12337         if([U->CL.nameID isEqualToString:LC[i].nameID])
12338             U->chipNumberL = i;
12339     }
12340     for(int i = 0;i < UCN;i++){
12341         if([U->C.nameID isEqualToString:UC[i].nameID])
12342             U->C.chipNumb = i;
12343     }
12344     for(int i = 0;i < LCN;i++){
12345         if([U->CL.nameID isEqualToString:LC[i].nameID])
12346             U->CL.chipNumb = i;
12347     }
12348     
12349     registerNum++;
12350     U = UTop;
12351     
12352 }
12353
12354
12355 -(MAPSCRIPT0*)setWait:(MAPSCRIPT0*)MS0{
12356     
12357     static bool waitin = false;
12358     
12359     if(!waitin){
12360         waitinTime = 0;
12361         waitinTime = MS0->wait;
12362         
12363         waitin = true;
12364     }
12365     
12366     waitSwtichFlag = true;
12367     
12368     if(waitAllOverFlag){
12369         MS0->succeessfulFlag = true;
12370         MS0->endFlag = true;
12371         waitAllOverFlag = false;
12372         waitSwtichFlag = false;
12373         waitin = false;
12374         waitx10flag = false;
12375         waitinTime = 0;
12376     }
12377     
12378     return MS0;
12379 }
12380
12381 -(MAPSCRIPT0*)setBGM:(MAPSCRIPT0*)MS0{
12382     
12383 //    if(BGMsub) [BGMsub stop];
12384     BGMsub = [MS0->BGM.snd retain];
12385     
12386     [BGMsub play];
12387     
12388     MS0->succeessfulFlag = true;
12389     MS0->endFlag = true;
12390     
12391     return MS0;
12392 }
12393
12394 -(MAPSCRIPT0*)setSE:(MAPSCRIPT0*)MS0{
12395     
12396     if(SEsub)
12397         [SEsub stop];
12398     SEsub = [MS0->SE.snd retain];
12399     
12400     [SEsub play];
12401     
12402     MS0->succeessfulFlag = true;
12403     MS0->endFlag = true;
12404     
12405     return MS0;
12406 }
12407
12408 -(MAPSCRIPT0*)setTitleBack:(MAPSCRIPT0*)MS0{
12409     
12410     backTitleFlag = true;
12411     battleBegin = false;
12412     
12413     MS0->succeessfulFlag = true;
12414     MS0->endFlag = true;
12415     
12416     return MS0;
12417 }
12418
12419 -(MAPSCRIPT0*)setStageClear:(MAPSCRIPT0*)MS0{
12420     
12421     stageClearFlag = true;
12422     
12423     if(MS0->sc.edcdFlag)
12424         stageClearFlag2 = true;
12425     battleBegin = false;
12426     
12427     MS0->succeessfulFlag = true;
12428     MS0->endFlag = true;
12429     
12430     return MS0;
12431 }
12432
12433 -(MAPSCRIPT0*)setGameOver:(MAPSCRIPT0*)MS0{
12434     
12435     gaov.img = MS0->gaov.img;
12436     
12437     gameOverFlag = true;
12438     battleBegin = false;
12439     
12440     MS0->succeessfulFlag = true;
12441     MS0->endFlag = true;
12442     
12443     return MS0;
12444 }
12445
12446 -(IBAction)gameOverSubmit:(id)sender{
12447
12448     
12449     gaov.img = nil;
12450     
12451     [BGMsub stop];
12452     
12453     [GameOverWindow close];
12454     [titleWindow makeKeyAndOrderFront:nil];
12455     
12456 }
12457
12458 -(IBAction)battleReadyUpStartBtn:(id)sender{
12459
12460
12461     P[0].resource = [battleReadyUpSupply1 intValue];
12462     P[0].food = [battleReadyUpFood1 intValue];
12463     P[0].money = [battleReadyUpMoney1 intValue];
12464     
12465     P[1].resource = [battleReadyUpSupply2 intValue];
12466     P[1].food = [battleReadyUpFood2 intValue];
12467     P[1].money = [battleReadyUpMoney2 intValue];
12468
12469     setBattleModeFlag = false;
12470     [bsWindow close];
12471     
12472 }
12473
12474 -(IBAction)battleReadyUpState1:(id)sender{
12475     retardhelp1 = true;
12476 }
12477 -(IBAction)battleReadyUpState2:(id)sender{
12478     retardhelp2 = true;
12479 }
12480
12481
12482
12483
12484
12485
12486
12487 -(IBAction)selectionBtn1:(id)sender{
12488     slctedBtnNum = 1;
12489     [selectionWindow close];
12490 }
12491 -(IBAction)selectionBtn2:(id)sender{
12492     slctedBtnNum = 2;
12493     [selectionWindow close];
12494 }
12495 -(IBAction)selectionBtn3:(id)sender{
12496     slctedBtnNum = 3;
12497     [selectionWindow close];
12498 }
12499 -(IBAction)selectionBtn4:(id)sender{
12500     slctedBtnNum = 4;
12501     [selectionWindow close];
12502 }
12503 -(IBAction)selectionBtn5:(id)sender{
12504     slctedBtnNum = 5;
12505     [selectionWindow close];
12506 }
12507 -(IBAction)selectionBtn6:(id)sender{
12508     slctedBtnNum = 6;
12509     [selectionWindow close];
12510 }
12511 -(IBAction)selectionBtn7:(id)sender{
12512     slctedBtnNum = 7;
12513     [selectionWindow close];
12514 }
12515 -(IBAction)selectionBtn8:(id)sender{
12516     slctedBtnNum = 8;
12517     [selectionWindow close];
12518 }
12519 -(IBAction)selectionBtn9:(id)sender{
12520     slctedBtnNum = 9;
12521     [selectionWindow close];
12522 }
12523
12524
12525
12526 -(void)HensuuLoad{
12527     
12528     NSString *directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
12529     [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
12530     
12531     
12532     NSData *InitialData = [NSData dataWithContentsOfFile:@"data/Others/var.txt"];
12533     NSString *pathVar = @"data/Others/var.txt";
12534     NSString *fileData = @"";
12535     
12536     if(!InitialData){
12537         [[NSFileManager defaultManager] createFileAtPath:pathVar contents:nil attributes:nil];
12538     }
12539     
12540     HensuuNum = 0;
12541     fileData = [NSString stringWithContentsOfFile:pathVar encoding:NSUTF8StringEncoding error:nil];
12542     NSArray *fileDataArray = [fileData componentsSeparatedByString:@"\n"];
12543     
12544     for(int i = 0;i < [fileDataArray count];i++){
12545         
12546         NSArray *item = [[fileDataArray objectAtIndex:i] componentsSeparatedByString:@","];
12547         
12548         Hensuu[i] = [[item objectAtIndex:1] retain];
12549         HensuuName[i] = [[item objectAtIndex:2] retain];
12550         HensuuNum++;
12551     }
12552     
12553     
12554 }
12555 @end
12556
12557
12558
12559
12560
12561 @implementation FieldSceneEF
12562
12563
12564 -(BOOL)isFlipped{
12565     return YES;
12566 }
12567
12568 - (id)initWithFrame:(NSRect)frame
12569 {
12570     self = [super initWithFrame:frame];
12571     if (self) {
12572         // Initialization code here.
12573         time  = [NSTimer
12574                  scheduledTimerWithTimeInterval:0.015
12575                  target:self
12576                  selector:@selector(EventLoopBV:)
12577                  userInfo:nil
12578                  repeats:YES
12579                  ];
12580     }
12581     
12582     return self;
12583 }
12584
12585 -(void)scrollWheel:(NSEvent *)theEvent{
12586
12587     theEvent = NULL;
12588
12589 }
12590
12591 -(void)EventLoopBV:(NSTimer*)timer{
12592     
12593     [battleView setNeedsDisplay:YES];
12594     
12595     static int aniFrame = 0;
12596     
12597     if(animationFlag3){
12598         aniFrame = 0;
12599         aniFrameCnt = 0;
12600         return;
12601     }
12602     
12603     if(!animationFlag1 && !animationFlag2){
12604         aniFrame = 0;
12605         aniFrameCnt = 0;
12606         return;
12607     }
12608     
12609     U = effCun;
12610     
12611     if(animationFlag1)
12612         U->C.A = attackCR;
12613     if(animationFlag2)
12614         U->C.A = attackCR2;
12615     
12616     static bool pussyMikoto = false;
12617     
12618     if(aniFrame == 0){
12619         
12620         ani = U->C.A->AN.ANI;
12621         ANI *aniTop = ani;
12622         
12623         for (int i = 0; i < aniFrameCnt;i++) {
12624             ani = ani->next;
12625         }
12626         
12627         if(ani->snd){
12628             [ani->snd setCurrentTime:0];
12629             [ani->snd play];
12630             ani->snd.loops = NO;
12631         }
12632         if(!ani->next){
12633             pussyMikoto = true;
12634         }
12635         ani = aniTop;
12636         
12637         U->C.A->AN.ANI = ani;
12638     }
12639     
12640     if(aniFrame < U->C.A->AN.frame){
12641         aniFrame++;
12642     }else{
12643         aniFrame = 0;
12644         aniFrameCnt++;
12645         if(pussyMikoto){
12646             pussyMikoto = false;
12647             animationFlag3 = true;
12648         }
12649     }
12650     
12651     
12652     
12653     
12654     
12655     [self setNeedsDisplay:YES];
12656     
12657     
12658 }
12659
12660 -(void)DrawImage:(NSImage*)image x:(float)x y:(float)y a:(float)a{
12661     NSRect frRect;
12662     frRect.size.height = image.size.height;
12663     frRect.size.width = image.size.width;
12664     
12665     frRect.origin.x = 0;
12666     frRect.origin.y = 0;
12667     
12668     NSRect drRect;
12669     drRect.origin.x = x;
12670     drRect.origin.y = y;
12671     drRect.size.height = image.size.height;
12672     drRect.size.width = image.size.width;
12673     
12674     [image drawInRect:drRect fromRect:frRect operation:NSCompositeSourceOver fraction:a respectFlipped:YES hints:nil];
12675     
12676 }
12677
12678 - (void)drawRect:(NSRect)dirtyRect
12679 {
12680     // Drawing code here.
12681     if(animationFlag3) return;
12682     
12683
12684
12685     
12686     if(animationFlag1 || animationFlag2){
12687         U = effCun;
12688         
12689         if(animationFlag1)
12690                 U->C.A = attackCR;
12691         if(animationFlag2)
12692             U->C.A = attackCR2;
12693         
12694     ani = U->C.A->AN.ANI;
12695     
12696     ANI *aniTop = ani;
12697     
12698         
12699     for (int i = 0; i < aniFrameCnt;i++) {
12700         ani = ani->next;
12701     }
12702         if(!ani)
12703         {
12704             ani = aniTop;
12705             return;
12706         }
12707     [self DrawImage:ani->img x:ani->x + ani->ax y:ani->y + ani->ay a:1.0f];
12708     ani = aniTop;
12709     }
12710
12711     
12712
12713     
12714 }
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725 @end
12726
12727
12728
12729
12730
12731
12732
12733
12734