OSDN Git Service

戦闘画面ボタンバグ修正
[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:0.015
59                  target:self
60                  selector:@selector(EventLoopFS:)
61                  userInfo:nil
62                  repeats:YES
63                  ];
64         P[0].name = @"青軍";
65         P[0].type = 0;
66         P[0].resource = 500;
67         P[0].food = 500;
68         P[0].money = 500;
69         
70         P[1].name = @"赤軍";
71         P[1].type = 0;
72         P[1].resource = 500;
73         P[1].food = 500;
74         P[1].money = 500;
75         
76         P[2].name = @"黄軍";
77         P[2].type = 0;
78         P[2].resource = 500;
79         P[2].food = 500;
80         P[2].money = 500;
81         
82         eventTime = 0;
83         
84         [self HensuuLoad];
85     }
86     
87
88     return self;
89 }
90
91 -(void)doubleClickBCL:(id)sender{
92     
93     enum{
94         MC_ANTEI,
95         MC_FUANTEI,
96         MC_CHIKURIN,
97         MC_MIZUBA,
98         MC_ASASE,
99         MC_NAIBU
100     };
101     
102     enum{
103         BC_ANTEI,
104         BC_CHIKURIN,
105         BC_ASASE,
106         BC_SONOTA
107     };
108     
109     bclRdy = false;
110     
111     U = UTop;
112     for(int i = 0;i < slctedUnitNum;i++){
113         U = U->next;
114     }
115     
116     if (MC[chipNum[possionX][possionY]].type == MC_ANTEI) {
117         
118         if(BC[U->C.S->list[crBCL]-1].type == BC_ANTEI){
119             bclRdy = true;
120         }
121         
122     }
123  
124     if (MC[chipNum[possionX][possionY]].type == MC_CHIKURIN) {
125         
126         if(BC[U->C.S->list[crBCL]-1].type == BC_CHIKURIN){
127             bclRdy = true;
128         }
129         
130     }
131     
132     if (MC[chipNum[possionX][possionY]].type == MC_ASASE) {
133         
134         if(BC[U->C.S->list[crBCL]-1].type == BC_ASASE){
135             bclRdy = true;
136         }
137         
138     }
139
140     if(BC[U->C.S->list[crBCL]].type == BC_SONOTA){
141         bclRdy = true;
142     }
143     
144     if(bclRdy){
145         bclRdy = false;
146         if(buildNum[possionX][possionY] >= 0){
147             U = UTop;
148             return;
149         }
150         
151         if(U->team == 0)
152         if(P[0].resource >= BC[U->C.S->list[crBCL]-1].Csupply){
153             if(P[0].food >= BC[U->C.S->list[crBCL]-1].Cfood){
154                 if (P[0].money >= BC[U->C.S->list[crBCL]-1].Cmoney) {
155                     P[0].resource -= BC[U->C.S->list[crBCL]-1].Csupply;
156                     P[0].food -= BC[U->C.S->list[crBCL]-1].Cfood;
157                     P[0].money -= BC[U->C.S->list[crBCL]-1].Cmoney;
158                     
159                     buildNum[possionX][possionY] = U->C.S->list[crBCL]-1;
160                     
161                     buildTeam[possionX][possionY] = 0;
162                    
163                     
164                     [self addBuildStatus];
165                     
166                     bclRdy = true;
167                 }
168             }
169         }
170         
171         if(U->team == 2)
172         if(P[1].resource >= BC[U->C.S->list[crBCL]-1].Csupply){
173             if(P[1].food >= BC[U->C.S->list[crBCL]-1].Cfood){
174                 if (P[1].money >= BC[U->C.S->list[crBCL]-1].Cmoney) {
175                     P[1].resource -= BC[U->C.S->list[crBCL]-1].Csupply;
176                     P[1].food -= BC[U->C.S->list[crBCL]-1].Cfood;
177                     P[1].money -= BC[U->C.S->list[crBCL]-1].Cmoney;
178                     
179                     buildNum[possionX][possionY] = U->C.S->list[crBCL]-1;
180                     
181                     buildTeam[possionX][possionY] = 2;
182                     
183                     [self addBuildStatus];
184                     
185                     bclRdy = true;
186                 }
187             }
188         }
189         [createPanel close];
190     }
191     
192     U = UTop;
193 }
194
195 -(void)clickBCL:(id)sender{
196     crBCL = (int)[BCreateListTV clickedRow];
197     
198     
199     
200 }
201
202
203 -(void)doubleClickCSL:(id)sender{
204    
205     U = UTop;
206     for(int i = 0;i < slctedUnitNum;i++){
207         U = U->next;
208     }
209     CSLU = U;
210     
211     SKILL *sTop = U->C.S;
212     while (U->C.S) {
213         if(U->C.S->type == 2) break;
214         U->C.S = U->C.S->next;
215     }
216     if(!U->C.S){
217         U->C.S = sTop;
218         U = UTop;
219         return;
220     }
221     
222     if(U->team == 0)
223         if(U->C.S->cost[crCSL] <= U->C.S_C.MP){
224             //U->C.S_C.MP -= U->C.S->cost[crCSL];
225             CSLUC = UC[U->C.S->list[crCSL]-1];
226             
227             U->C.S = sTop;
228             cslRdy = true;
229             [summonPanel close];
230             //unitColorInitFlag = true;
231         }
232     if(U->team == 2)
233         if(U->C.S->cost[crCSL] <= U->C.S_C.MP){
234             
235             //U->C.S_C.MP -= U->C.S->cost[crCSL];
236             CSLUC = UC[U->C.S->list[crCSL]-1];
237             
238             U->C.S = sTop;
239             cslRdy = true;
240             [summonPanel close];
241             //unitColorInitFlag = true;
242         }
243     
244     U = UTop;
245     
246 }
247
248 -(void)clickCSL:(id)sender{
249     crCSL = (int)[CSummonListTV clickedRow];
250     
251     
252 }
253
254 -(void)doubleClickCAL:(id)sender{
255     
256     if([CAttackListTV clickedRow] < 0) return;
257     
258     if(crCAL < 0)
259         crCAL = 0;
260     
261     int postCAL1 = crCAL1;
262     int postCAL2 = crCAL2;
263     
264     if(!battleSet1Flag && !battleSet2Flag){
265     U = UTop;
266     while (!(AUN[1] == U->number)) {
267         U = U->next;
268     }
269     
270         
271         
272         if(U->chipNumberL < 0){
273         
274             ATTACK *aTop = U->C.A;
275             
276             crCAL = (int)[CAttackListTV clickedRow];
277             crCAL1 = (int)[CAttackListTV clickedRow];
278             for(int i = 0;i < crCAL;i++){
279                 U->C.A = U->C.A->next;
280             }
281     
282             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
283             costVIG = U->C.A->vigor;
284     
285             if(costMP <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
286                 if(U->C.A->extent > 0){
287                     atkExtentFlag = true;
288                 }else{
289                     atkExtentFlag = false;
290                 }
291                 dcRdy = true;
292                 [atkPanel close];
293             }
294             U->C.A = aTop;
295             U = UTop;
296             crCAL1 = crCAL;
297             return;
298         }else{
299             ATTACK *aTop = U->CL.A;
300             crCAL = (int)[CAttackListTV clickedRow];
301             crCAL1 = (int)[CAttackListTV clickedRow];
302             for(int i = 0;i < crCAL;i++){
303                 U->CL.A = U->CL.A->next;
304             }
305             
306             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
307             costVIG = U->CL.A->vigor;
308             
309             if(costMP <= U->CL.S_C.EN && costVIG <= U->C.S_C.vigor){
310                 dcRdy = true;
311                 if(U->CL.A->extent > 0){
312                     atkExtentFlag = true;
313                 }else{
314                     atkExtentFlag = false;
315                 }
316                 [atkPanel close];
317             }
318             U->CL.A = aTop;
319             U = UTop;
320             crCAL1 = crCAL;
321             return;
322         }
323     }
324     
325     if(battleSet1Flag && !battleSet2PushedFlag){
326         
327     
328         U = UTop;
329         while (!(AUN[1] == U->number)) {
330             U = U->next;
331         }
332        
333         if(U->chipNumberL < 0){
334             ATTACK *aTop = U->C.A;
335             crCAL1 = (int)[CAttackListTV clickedRow];
336             for(int i = 0;i < crCAL1;i++){
337                 U->C.A = U->C.A->next;
338             }
339         
340             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
341             costVIG = U->C.A->vigor;
342             
343             
344             if(costMP <= U->C.S_C.MP && U->atkRange >= U->C.A->rangeA
345                && U->atkRange <= U->C.A->rangeB && costVIG >= U->C.S_C.vigor){
346                 //dcRdy = true;
347                 [atkPanel close];
348                 U->C.A = aTop;
349                 U = UTop;
350                 return;
351             }
352             U->C.A = aTop;
353             crCAL1 = crCAL;
354             U = UTop;
355             
356         }else{
357             ATTACK *aTop = U->CL.A;
358             crCAL1 = (int)[CAttackListTV clickedRow];
359             for(int i = 0;i < crCAL1;i++){
360                 U->CL.A = U->CL.A->next;
361             }
362             
363             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
364             costVIG = U->C.A->vigor;
365             
366             if(costMP <= U->CL.S_C.EN && U->atkRange >= U->CL.A->rangeA
367                && U->atkRange <= U->CL.A->rangeB && costVIG >= U->C.S_C.vigor){
368                 //dcRdy = true;
369                 [atkPanel close];
370                 U->CL.A = aTop;
371                 U = UTop;
372                 return;
373             }
374             U->CL.A = aTop;
375             crCAL1 = crCAL;
376             U = UTop;
377         }
378     
379     }
380     
381     if(battleSet2Flag && battleSet2PushedFlag){
382         U = UTop;
383         while (!(AUN[1] == U->number)) {
384             U = U->next;
385         }
386         
387         if(U->chipNumberL < 0){
388             U = UTop;
389             U = UTop;
390             while (!(AUN[1] == U->number)) {
391                 U = U->next;
392             }
393         
394             int omgRange = U->atkRange;
395         
396             U = UTop;
397             while (!(DUN[1] == U->number)) {
398                 U = U->next;
399             }
400         
401             U->atkRange = omgRange;
402         
403             ATTACK *aTop = U->C.A;
404             crCAL2 = (int)[CAttackListTV clickedRow];
405             for(int i = 0;i < crCAL2;i++){
406                 U->C.A = U->C.A->next;
407             }
408         
409             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
410             costVIG = U->C.A->vigor;
411
412         
413             if(costMP <= U->C.S_C.MP && U->atkRange >= U->C.A->rangeA
414                 && U->atkRange <= U->C.A->rangeB && U->C.S_C.vigor){
415                 //dcRdy = true;
416                 [atkPanel close];
417                 U->C.A = aTop;
418                 U = UTop;
419                 return;
420             }
421             U->C.A = aTop;
422             crCAL1 = crCAL;
423             U = UTop;
424         }else{
425             U = UTop;
426             U = UTop;
427             while (!(AUN[1] == U->number)) {
428                 U = U->next;
429             }
430             
431             int omgRange = U->atkRange;
432             
433             U = UTop;
434             while (!(DUN[1] == U->number)) {
435                 U = U->next;
436             }
437             
438             U->atkRange = omgRange;
439             
440             ATTACK *aTop = U->CL.A;
441             crCAL2 = (int)[CAttackListTV clickedRow];
442             for(int i = 0;i < crCAL2;i++){
443                 U->CL.A = U->CL.A->next;
444             }
445             
446             costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
447             costVIG = U->C.A->vigor;
448
449             if(costMP <= U->CL.S_C.EN && U->atkRange >= U->CL.A->rangeA
450                && U->atkRange <= U->CL.A->rangeB && U->C.S_C.vigor){
451                 //dcRdy = true;
452                 [atkPanel close];
453                 U->CL.A = aTop;
454                 U = UTop;
455                 return;
456             }
457             U->CL.A = aTop;
458             crCAL1 = crCAL;
459             U = UTop;
460         
461         }
462         
463         U = UTop;
464         
465     }
466     
467
468     crCAL1 = postCAL1;
469     crCAL2 = postCAL2;
470 }
471
472
473 -(void)clickCAL:(id)sender{
474
475     crCAL = (int)[CAttackListTV clickedRow];
476     
477     if(!battleSetFlag){crCAL = crCAL1;
478         crCAL1 = (int)[CAttackListTV clickedRow];
479         crCAL = crCAL1;
480         U = UTop;
481         while (!(AUN[1] == U->number)) {
482             U = U->next;
483         }
484     }else if(battleSetFlag){crCAL = crCAL2;
485         crCAL2 = (int)[CAttackListTV clickedRow];
486         crCAL = crCAL2;
487         U = UTop;
488         while (!(DUN[1] == U->number)) {
489             U = U->next;
490         }
491         
492     }
493     
494     if(U->chipNumberL >= 0) {
495         U = UTop;
496         [self initCAttackSelect2];
497     }
498     else if(U->chipNumber >= 0) {
499         U = UTop;
500         [self initCAttackSelect];
501     }
502     U = UTop;
503 }
504
505 -(void)initCAttackSelect{
506     
507     U = UTop;
508     
509     while (!(AUN[1] == U->number)) {
510         U = U->next;
511     }
512     if(!battleSetFlag){crCAL = crCAL1;
513         //crCAL1 = (int)[CAttackListTV clickedRow];
514         crCAL = crCAL1;
515         U = UTop;
516         while (!(AUN[1] == U->number)) {
517             U = U->next;
518         }
519     }else if(battleSetFlag){crCAL = crCAL2;
520         //crCAL2 = (int)[CAttackListTV clickedRow];
521         crCAL = crCAL2;
522         U = UTop;
523         while (!(DUN[1] == U->number)) {
524             U = U->next;
525         }
526         
527     }
528     
529     //U = Uselected;
530     
531     [CAttackListAC setSelectionIndex:crCAL];
532     crCAL = (int)[CAttackListTV clickedRow];
533     ATTACK *aTop = U->C.A;
534     for(int i = 0;i < crCAL;i++){
535         U->C.A = U->C.A->next;
536     }
537     
538     if(!U->C.A) {
539         [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
540         [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->C.S_C.MP]];
541         [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
542         [region setStringValue:[NSString stringWithFormat:@"陸-- 宙-- 海-- 空--"]];
543         [crytical setStringValue:@""];
544         [atkProperty setStringValue:@""];
545         U->C.A = aTop;
546         return;
547     }
548     
549     if(U->C.A->bullet > 0) [bullet setStringValue:[NSString stringWithFormat:@"%d/%d", U->C.A->bulletC, U->C.A->bullet]];
550     else [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
551     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]];
552     else [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->C.S_C.MP]];
553     if(U->C.A->vigor > 0) [costV setStringValue:[NSString stringWithFormat:@"%d(%d)", U->C.A->vigor, U->C.S_C.vigor]];
554     else [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
555     
556     NSString *Riku, *Chu, *Umi, *Sora;
557     
558     switch (U->C.A->riku) {
559         case 0:
560             Riku = [@"A" retain];
561             break;
562         case 1:
563             Riku = [@"B"retain];
564             break;
565         case 2:
566             Riku = [@"C"retain];
567             break;
568         case 3:
569             Riku = [@"D"retain];
570             break;
571         case 4:
572             Riku = [@"E"retain];
573             break;
574         case 5:
575             Riku = [@"S"retain];
576             break;
577         case 6:
578             Riku = [@"SS"retain];
579             break;
580     }
581     switch (U->C.A->chu) {
582         case 0:
583             Chu = [@"A" retain];
584             break;
585         case 1:
586             Chu = [@"B" retain];
587             break;
588         case 2:
589             Chu = [@"C" retain];
590             break;
591         case 3:
592             Chu = [@"D" retain];
593             break;
594         case 4:
595             Chu = [@"E" retain];
596             break;
597         case 5:
598             Chu = [@"S" retain];
599             break;
600         case 6:
601             Chu = [@"SS" retain];
602             break;
603     }
604     switch (U->C.A->umi) {
605         case 0:
606             Umi = [@"A" retain];
607             break;
608         case 1:
609             Umi = [@"B" retain];
610             break;
611         case 2:
612             Umi = [@"C" retain];
613             break;
614         case 3:
615             Umi = [@"D" retain];
616             break;
617         case 4:
618             Umi = [@"E" retain];
619             break;
620         case 5:
621             Umi = [@"S" retain];
622             break;
623         case 6:
624             Umi = [@"SS" retain];
625             break;
626     }
627     switch (U->C.A->sora) {
628         case 0:
629             Sora = [@"A" retain];
630             break;
631         case 1:
632             Sora = [@"B" retain];
633             break;
634         case 2:
635             Sora = [@"C" retain];
636             break;
637         case 3:
638             Sora = [@"D" retain];
639             break;
640         case 4:
641             Sora = [@"E" retain];
642             break;
643         case 5:
644             Sora = [@"S" retain];
645             break;
646         case 6:
647             Sora = [@"SS" retain];
648             break;
649     }
650     
651     if(!U->C.A->name){
652         Riku = @"--";
653         Chu = @"--";
654         Umi = @"--";
655         Sora = @"--";
656     }
657     
658     [region setStringValue:[NSString stringWithFormat:@"陸%@ 宙%@ 海%@ 空%@",  Riku, Chu, Umi, Sora]];
659     [crytical setStringValue:@""];
660     [atkProperty setStringValue:@""];
661     
662     U->C.A = aTop;
663     U = UTop;
664 }
665
666 -(void)initCAttackSelect2{
667     
668     U = UTop;
669     
670     while (!(AUN[1] == U->number)) {
671         U = U->next;
672     }
673     if(battleSet1Flag){
674         //crCAL1 = (int)[CAttackListTV clickedRow];
675         U = UTop;
676         while (!(AUN[1] == U->number)) {
677             U = U->next;
678         }
679     }
680     if(battleSet2Flag){
681         //crCAL2 = (int)[CAttackListTV clickedRow];
682         U = UTop;
683         while (!(DUN[1] == U->number)) {
684             U = U->next;
685         }
686         
687     }
688     
689     ATTACK *aTop = U->CL.A;
690     for(int i = 0;i < crCAL;i++){
691         U->CL.A = U->CL.A->next;
692     }
693     
694     if(!U->CL.A) {
695         
696         U = UTop;
697         return;
698     }
699     if(U->CL.A->bullet > 0) [bullet setStringValue:[NSString stringWithFormat:@"%d/%d", U->CL.A->bulletC, U->CL.A->bullet]];
700     else [bullet setStringValue:[NSString stringWithFormat:@"---/---"]];
701     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]];
702     else [costP setStringValue:[NSString stringWithFormat:@"---(%g)", U->CL.S_C.EN]];
703     if(U->CL.A->vigor > 0) [costV setStringValue:[NSString stringWithFormat:@"%d(%d)", U->CL.A->vigor, U->C.S_C.vigor]];
704     else [costV setStringValue:[NSString stringWithFormat:@"---(%d)",  U->C.S_C.vigor]];
705     
706     NSString *Riku, *Chu, *Umi, *Sora;
707     
708     switch (U->CL.A->riku) {
709         case 0:
710             Riku = @"A";
711             break;
712         case 1:
713             Riku = @"B";
714             break;
715         case 2:
716             Riku = @"C";
717             break;
718         case 3:
719             Riku = @"D";
720             break;
721         case 4:
722             Riku = @"E";
723             break;
724         case 5:
725             Riku = @"S";
726             break;
727         case 6:
728             Riku = @"SS";
729             break;
730     }
731     switch (U->CL.A->chu) {
732         case 0:
733             Chu = @"A";
734             break;
735         case 1:
736             Chu = @"B";
737             break;
738         case 2:
739             Chu = @"C";
740             break;
741         case 3:
742             Chu = @"D";
743             break;
744         case 4:
745             Chu = @"E";
746             break;
747         case 5:
748             Chu = @"S";
749             break;
750         case 6:
751             Chu = @"SS";
752             break;
753     }
754     switch (U->CL.A->umi) {
755         case 0:
756             Umi = @"A";
757             break;
758         case 1:
759             Umi = @"B";
760             break;
761         case 2:
762             Umi = @"C";
763             break;
764         case 3:
765             Umi = @"D";
766             break;
767         case 4:
768             Umi = @"E";
769             break;
770         case 5:
771             Umi = @"S";
772             break;
773         case 6:
774             Umi = @"SS";
775             break;
776     }
777     switch (U->CL.A->sora) {
778         case 0:
779             Sora = @"A";
780             break;
781         case 1:
782             Sora = @"B";
783             break;
784         case 2:
785             Sora = @"C";
786             break;
787         case 3:
788             Sora = @"D";
789             break;
790         case 4:
791             Sora = @"E";
792             break;
793         case 5:
794             Sora = @"S";
795             break;
796         case 6:
797             Sora = @"SS";
798             break;
799     }
800     
801     if(!U->CL.A->name){
802         Riku = @"--";
803         Chu = @"--";
804         Umi = @"--";
805         Sora = @"--";
806     }
807     
808     [region setStringValue:[NSString stringWithFormat:@"陸%@ 宙%@ 海%@ 空%@",  Riku, Chu, Umi, Sora]];
809     [crytical setStringValue:@""];
810     [atkProperty setStringValue:@""];
811     
812     U->CL.A = aTop;
813     U = UTop;
814 }
815
816
817 -(void)doubleClickCRL:(id)sender{
818     
819     if(crCRL == -1) return;
820     
821     if(unitBreak->team == 0)
822     if(P[0].resource >= BRU->S_M.cSupply && P[0].food >= BRU->S_M.cFood && P[0].money >= BRU->S_M.cMoney){
823         
824         P[0].resource -= BRU->S_M.cSupply;
825         P[0].food -= BRU->S_M.cFood;
826         P[0].money -= BRU->S_M.cMoney;
827         
828         unitNum[possionX][possionY] = BRUindex;
829         if(researchTeam == 0) unitTeam[possionX][possionY] = 0;
830         if(researchTeam == 2) unitTeam[possionX][possionY] = 2;
831
832         [self addUnitStatus];
833         
834         unitColorInitFlag = true;
835         
836         [researchPanel close];
837     }
838     
839     if(unitBreak->team == 2)
840         if(P[1].resource >= BRU->S_M.cSupply && P[1].food >= BRU->S_M.cFood && P[1].money >= BRU->S_M.cMoney){
841             
842             P[1].resource -= BRU->S_M.cSupply;
843             P[1].food -= BRU->S_M.cFood;
844             P[1].money -= BRU->S_M.cMoney;
845             
846             unitNum[possionX][possionY] = BRUindex;
847             if(researchTeam == 0) unitTeam[possionX][possionY] = 0;
848             if(researchTeam == 2) unitTeam[possionX][possionY] = 2;
849             
850             [self addUnitStatus];
851             
852             unitColorInitFlag = true;
853             
854             [researchPanel close];
855         }
856
857 }
858
859 -(void)clickCRL:(id)sender{
860     
861     crCRL = (int)[CResearchListTV clickedRow];
862     
863     BUILDCHIP *B;
864     
865     B = &BC[buildNum[possionX][possionY]];
866     
867     RESEARCH *Rtop;
868     UNITCHIP *BU;
869     
870     Rtop = B->R;
871
872     BU = B->R->U;
873     BRU = BU;
874     
875     for(int i = 0;i <= crCRL;i++){
876         BU = B->R->U;
877         BRU = BU;
878         [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
879         [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
880         [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
881         [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
882         [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
883         [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
884         [researchIMG setImage:BU->imgb];
885         [researchIMG setImageScaling:NSScaleToFit];
886         
887         B->R = B->R->next;
888     }
889     B->R = Rtop;
890     BRUindex = 0;
891     for (int i = 0; BRU->nameID != UC[i].nameID;i++) {
892         BRUindex++;
893     }
894     
895 }
896
897 -(void)SetStatusFunc{
898     double STRfix;
899     double VITfix;
900     double AGIfix;
901     double DEXfix;
902     double MENfix;
903     double INTfix;
904     double LUKfix;
905     
906     double S, V, A, D, M, I;
907     
908     
909     
910     U = UTop;
911     
912     while(U){
913     STRfix = (
914               U->C.eHandL.STR +
915               U->C.eHandR.STR +
916               U->C.eHead.STR +
917               U->C.eBody.STR +
918               U->C.eFoot.STR +
919               U->C.eArm.STR) +
920     U->C.S_M.STR *(
921                          U->C.eHandL.pSTR +
922                          U->C.eHandR.pSTR +
923                          U->C.eHead.pSTR +
924                          U->C.eBody.pSTR +
925                          U->C.eFoot.pSTR +
926                          U->C.eArm.pSTR +
927                          0)/100
928     ;
929     
930     VITfix = (
931               U->C.eHandL.VIT +
932               U->C.eHandR.VIT +
933               U->C.eHead.VIT +
934               U->C.eBody.VIT +
935               U->C.eFoot.VIT +
936               U->C.eArm.VIT) +
937     U->C.S_M.VIT *(
938                          U->C.eHandL.pVIT +
939                          U->C.eHandR.pVIT +
940                          U->C.eHead.pVIT +
941                          U->C.eBody.pVIT +
942                          U->C.eFoot.pVIT +
943                          U->C.eArm.pVIT +
944                          0)/100
945     ;
946     AGIfix = (
947               U->C.eHandL.AGI +
948               U->C.eHandR.AGI +
949               U->C.eHead.AGI +
950               U->C.eBody.AGI +
951               U->C.eFoot.AGI +
952               U->C.eArm.AGI) +
953     U->C.S_M.AGI *(
954                          U->C.eHandL.pAGI +
955                          U->C.eHandR.pAGI +
956                          U->C.eHead.pAGI +
957                          U->C.eBody.pAGI +
958                          U->C.eFoot.pAGI +
959                          U->C.eArm.pAGI +
960                          0)/100
961     ;
962     DEXfix = (
963               U->C.eHandL.DEX +
964               U->C.eHandR.DEX +
965               U->C.eHead.DEX +
966               U->C.eBody.DEX +
967               U->C.eFoot.DEX +
968               U->C.eArm.DEX) +
969     U->C.S_M.DEX *(
970                          U->C.eHandL.pDEX +
971                          U->C.eHandR.pDEX +
972                          U->C.eHead.pDEX +
973                          U->C.eBody.pDEX +
974                          U->C.eFoot.pDEX +
975                          U->C.eArm.pDEX +
976                          0)/100
977     ;
978     MENfix = (
979               U->C.eHandL.MEN +
980               U->C.eHandR.MEN +
981               U->C.eHead.MEN +
982               U->C.eBody.MEN +
983               U->C.eFoot.MEN +
984               U->C.eArm.MEN) +
985     U->C.S_M.MEN *(
986                          U->C.eHandL.pMEN +
987                          U->C.eHandR.pMEN +
988                          U->C.eHead.pMEN +
989                          U->C.eBody.pMEN +
990                          U->C.eFoot.pMEN +
991                          U->C.eArm.pMEN +
992                          0)/100
993     ;
994     INTfix = (
995               U->C.eHandL.INT +
996               U->C.eHandR.INT +
997               U->C.eHead.INT +
998               U->C.eBody.INT +
999               U->C.eFoot.INT +
1000               U->C.eArm.INT) +
1001     U->C.S_M.INT *(
1002                          U->C.eHandL.pINT +
1003                          U->C.eHandR.pINT +
1004                          U->C.eHead.pINT +
1005                          U->C.eBody.pINT +
1006                          U->C.eFoot.pINT +
1007                          U->C.eArm.pINT +
1008                          0)/100
1009     ;
1010     LUKfix = (
1011               U->C.eHandL.LUK +
1012               U->C.eHandR.LUK +
1013               U->C.eHead.LUK +
1014               U->C.eBody.LUK +
1015               U->C.eFoot.LUK +
1016               U->C.eArm.LUK) +
1017     U->C.S_M.LUK *(
1018                          U->C.eHandL.pLUK +
1019                          U->C.eHandR.pLUK +
1020                          U->C.eHead.pLUK +
1021                          U->C.eBody.pLUK +
1022                          U->C.eFoot.pLUK +
1023                          U->C.eArm.pLUK +
1024                          0)/100
1025     ;
1026     
1027     S = U->C.S_C.STR + STRfix;
1028     V = U->C.S_C.VIT + VITfix;
1029     A = U->C.S_C.AGI + AGIfix;
1030     D = U->C.S_C.DEX + DEXfix;
1031     M = U->C.S_C.MEN + MENfix;
1032     I = U->C.S_C.INT + INTfix;
1033     
1034     U->C.S_C.ATK = (S*5 + D*2 + A)/8;
1035     U->C.S_C.DEF = (V*5 + M*2 + S)/8;
1036     U->C.S_C.CAP = (I*4 + D*1 + M*2)/7;
1037     U->C.S_C.ACU = (D*4 + A*1 + M)/6;
1038     U->C.S_C.EVA = (A*4 + A*1 + M)/6;
1039         
1040         U->C.S_C.ATK += 0.5;
1041         U->C.S_C.DEF += 0.5;
1042         U->C.S_C.CAP += 0.5;
1043         U->C.S_C.ACU += 0.5;
1044         U->C.S_C.EVA += 0.5;
1045         
1046         U->C.S_C.ATK = floor(U->C.S_C.ATK);
1047         U->C.S_C.DEF = floor(U->C.S_C.DEF);
1048         U->C.S_C.CAP = floor(U->C.S_C.CAP);
1049         U->C.S_C.ACU = floor(U->C.S_C.ACU);
1050         U->C.S_C.EVA = floor(U->C.S_C.EVA);
1051         
1052         U = U->next;
1053     }U = UTop;
1054
1055 }
1056
1057 -(void)initMapscript{
1058
1059     for(int i = 0;i < 9999;i++){
1060         Suicchi[i] = false;
1061     }
1062     
1063     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
1064     MAPSCRIPTD *MSDtop = MS.D;
1065     
1066     if(!MS.D) return;
1067     MAPSCRIPT0 *MSDPt = MS.D->P;
1068     
1069     while(MS.D){
1070         MS.D->endFlag = false;
1071         
1072         
1073         double deltaET = floor(MS.D->ET2) - floor(MS.D->ET1);
1074         int deltaR = 0;
1075         if(deltaET < 0) deltaET = 0;
1076             
1077         if(MS.D->ET1 <= eventTime && MS.D->ET2 >= eventTime){
1078             if(deltaET > 0) deltaR = rand()%(int)deltaET;
1079         }
1080
1081         MS.D->ET3 = MS.D->ET1 + (double)deltaR;
1082         
1083         MSDPt = MS.D->P;
1084         while (MS.D->P) {
1085                 MS.D->P->endFlag = false;
1086             MS.D->P = MS.D->P->next;
1087         }MS.D->P = MSDPt;
1088         
1089         MS.D = MS.D->next;
1090     }
1091     
1092     MS.D = MSDtop;
1093     
1094     MSDTO = MSDtop;
1095     MF[MFselectedRow+1].MS = MS;
1096     
1097     msgLvl = 0;
1098     msgLvlMax = 0;
1099     initImgFlag = false;
1100     initStringNum = false;
1101     bugFixFlag1 = false;
1102     bugFixFlag2 = false;
1103     bugFixFlag3 = false;
1104     
1105     eventTime = 0;
1106     coolTime = true;
1107 }
1108
1109 -(void)EventLoopFS:(NSTimer*)time{
1110     
1111     
1112     U = UTop;
1113     if(U){
1114     U = UTop;
1115     for(int i = 0;i < DUN[1];i++){
1116         
1117         U = U->next;
1118     }
1119     
1120     if(Utarget) NSLog(@"PX %d PY %d UX %d UY %d", possionX, possionY, Utarget->x, Utarget->y);
1121         U = UTop;
1122     }
1123     
1124     if(coolTime){
1125         static int lmao = 0;
1126         
1127         lmao++;
1128         
1129         if(lmao > 50){
1130             coolTime = false;
1131             lmao = 0;
1132         }
1133     
1134     }
1135     
1136     
1137     if(extentBattleFlag){
1138         battleFlag = false;
1139         battleRdy = false;
1140         battleSet1Flag = false;
1141         battleSet2Flag = false;
1142         battleSettingFlag = false;
1143         [self AttackDisplay];
1144         windowPoint.x = [mapWindow frame].origin.x;
1145         windowPoint.y = [mapWindow frame].origin.y;
1146         [battleWindow setFrameOrigin:windowPoint];
1147         [battleWindow makeKeyAndOrderFront:nil];
1148         extentBattleFlag = false;
1149         extentBattleFlag2 = true;
1150     }
1151     if(cpuAtkExtendFlag2){
1152         battleFlag = false;
1153         battleRdy = false;
1154         battleSet1Flag = false;
1155         battleSet2Flag = false;
1156         battleSettingFlag = false;
1157         [self AttackDisplay];
1158         windowPoint.x = [mapWindow frame].origin.x;
1159         windowPoint.y = [mapWindow frame].origin.y;
1160         [battleWindow setFrameOrigin:windowPoint];
1161         [battleWindow makeKeyAndOrderFront:nil];
1162         extentBattleFlag = false;
1163         extentBattleFlag2 = true;
1164         cpuAtkExtendFlag = false;
1165         cpuAtkExtendFlag2 = false;
1166         [battlePanel close];
1167     }if(extentBattleFlag2){
1168         battleFlag = false;
1169     }
1170     
1171     if(!setBattleModeFlag){
1172         if(!battleReadyUpFlag){battleReadyUpFlag = true;
1173         
1174             P[0].resource = 500;
1175             P[0].food = 500;
1176             P[0].money = 500;
1177             P[1].resource = 500;
1178             P[1].food = 500;
1179             P[1].money = 500;
1180             P[2].resource = 500;
1181             P[2].food = 500;
1182             P[2].money = 500;
1183         
1184         }
1185     }
1186     
1187     if(setBattleModeFlag){
1188         if(!battleReadyUpFlag){battleReadyUpFlag = true;
1189         [battleReadyUpPN1 setStringValue:P[0].name];
1190         [battleReadyUpPN2 setStringValue:P[1].name];
1191         
1192         NSString *string = @"";
1193         string = [string stringByAppendingFormat:@"%@の勝利条件\n", P[0].name];
1194         if(MF[MFselectedRow+1].MS.EGClight.endType1 == 1){
1195            string = [string stringByAppendingString:@"敵の壊滅\n"];
1196             
1197         }else if(MF[MFselectedRow+1].MS.EGClight.endType1 == 2){
1198             string = [string stringByAppendingString:@"味方の壊滅\n"];
1199             
1200         }
1201         
1202         string = [string stringByAppendingString:@"\n"];
1203         
1204         string = [string stringByAppendingFormat:@"%@の勝利条件\n", P[1].name];
1205         if(MF[MFselectedRow+1].MS.EGCdark.endType1 == 2){
1206             string = [string stringByAppendingString:@"敵の壊滅\n"];
1207         }else if(MF[MFselectedRow+1].MS.EGClight.endType1 == 1){
1208             string = [string stringByAppendingString:@"味方の壊滅\n"];
1209             
1210         }
1211     
1212         
1213         [battleReadyUpSupply1 setIntValue:P[0].resource];
1214         [battleReadyUpFood1 setIntValue:P[0].food];
1215         [battleReadyUpMoney1 setIntValue:P[0].money];
1216         
1217         [battleReadyUpSupply2 setIntValue:P[1].resource];
1218         [battleReadyUpFood2 setIntValue:P[1].food];
1219         [battleReadyUpMoney2 setIntValue:P[1].money];
1220         
1221         if(MF[MFselectedRow+1].MS.playerSet1 == 0){
1222             [battleReadyUpMAN1A setEnabled:YES];
1223             [battleReadyUpMAN1B setEnabled:YES];
1224             [battleReadyUpMAN1A setState:1];
1225             [battleReadyUpMAN1B setState:0];
1226             
1227         }else if(MF[MFselectedRow+1].MS.playerSet1 == 1){
1228             [battleReadyUpMAN1A setEnabled:NO];
1229             [battleReadyUpMAN1B setEnabled:NO];
1230             [battleReadyUpMAN1A setState:1];
1231             [battleReadyUpMAN1B setState:0];
1232         }else if(MF[MFselectedRow+1].MS.playerSet1 == 2){
1233             [battleReadyUpMAN1A setEnabled:NO];
1234             [battleReadyUpMAN1B setEnabled:NO];
1235             [battleReadyUpMAN1A setState:0];
1236             [battleReadyUpMAN1B setState:1];
1237         }
1238         
1239         if(MF[MFselectedRow+1].MS.playerSet2 == 0){
1240             [battleReadyUpMAN2A setEnabled:YES];
1241             [battleReadyUpMAN2B setEnabled:YES];
1242             [battleReadyUpMAN2A setState:1];
1243             [battleReadyUpMAN2B setState:0];
1244             
1245         }else if(MF[MFselectedRow+1].MS.playerSet2 == 1){
1246             [battleReadyUpMAN2A setEnabled:NO];
1247             [battleReadyUpMAN2B setEnabled:NO];
1248             [battleReadyUpMAN2A setState:1];
1249             [battleReadyUpMAN2B setState:0];
1250         }else if(MF[MFselectedRow+1].MS.playerSet2 == 2){
1251             [battleReadyUpMAN2A setEnabled:NO];
1252             [battleReadyUpMAN2B setEnabled:NO];
1253             [battleReadyUpMAN2A setState:0];
1254             [battleReadyUpMAN2B setState:1];
1255         }
1256         }
1257         if(retardhelp1){
1258             if([battleReadyUpMAN1A state] != 0)
1259                 MF[MFselectedRow+1].MS.playerSet1 = 1;
1260             else
1261                 MF[MFselectedRow+1].MS.playerSet1 = 2;
1262         }
1263         if(retardhelp2){
1264             if([battleReadyUpMAN2A state] != 0)
1265                 MF[MFselectedRow+1].MS.playerSet2 = 1;
1266             else
1267                 MF[MFselectedRow+1].MS.playerSet2 = 2;
1268         }
1269         return;
1270     }
1271     
1272
1273     
1274     if(buildNum[possionX][possionY] < 0){
1275         [selectMesh setImage:MC[chipNum[possionX][possionY]].img];
1276         [selectMeshText setStringValue:MC[chipNum[possionX][possionY]].name];
1277         [selectMeshValue setStringValue:[NSString stringWithFormat:@"%d%", MC[chipNum[possionX][possionY]].dmgfix]];
1278     }else{
1279         [selectMesh setImage:BC[buildNum[possionX][possionY]].img];
1280         [selectMeshText setStringValue:BC[buildNum[possionX][possionY]].name];
1281         [selectMeshValue setStringValue:[NSString stringWithFormat:@"%d%", BC[buildNum[possionX][possionY]].dmgfix]];
1282     }
1283     [self SetStatusFunc];
1284     
1285     if(initStatusFlag){
1286         
1287         U = UTop;
1288         while(U != NULL){
1289             if(U->x == possionX && U->y == possionY && U->dead == true){
1290                 break;
1291             }
1292             
1293             
1294             
1295             
1296             if(U->chipNumberL < 0){
1297             if(U->x == possionX && U->y == possionY && U->dead == false && Uselected){
1298                 
1299                 if(U->x == Uselected->x && U->y == Uselected->y && U->team == 0){
1300                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
1301                 }
1302                 if(U->x == Uselected->x && U->y == Uselected->y && U->team == 2){
1303                     [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
1304                 }
1305                 
1306                 [tfName setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
1307                 [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
1308                 [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", U->C.S_C.HP/U->C.S_M.HP*100 + 0.5] intValue]];
1309                 [MPbarTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", U->C.S_C.MP, U->C.S_M.MP]];
1310                 [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 %g", U->C.S_C.ATK]];
1311                 [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 %g", U->C.S_C.DEF]];
1312                 [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 %g", U->C.S_C.CAP]];
1313                 [tfHit setStringValue:[NSString stringWithFormat:@"命中値 %g", U->C.S_C.ACU]];
1314                 [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 %g", U->C.S_C.EVA]];
1315                 [tfMove setStringValue:[NSString stringWithFormat:@"移動力 %d", U->C.S_C.MOV]];
1316                 [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", U->C.S_C.WT]];
1317                 [selectChara setImage:U->C.imgb];
1318                 [selectChara setImageScaling:NSScaleToFit];
1319                 
1320                 
1321                 break;
1322             }else{
1323                 [tfName setStringValue:[NSString stringWithFormat:@"----"]];
1324                 [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
1325                 [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
1326                 [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
1327                 [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
1328                 [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
1329                 [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
1330                 [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
1331                 [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
1332                 [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
1333                 [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
1334                 [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
1335                 [selectChara setImage:NULL];
1336                 
1337             
1338             }
1339             }else{
1340                 if(U->x == possionX && U->y == possionY && U->dead == false && Uselected){
1341                     
1342                     if(U->x == Uselected->x && U->y == Uselected->y && U->team == 0){
1343                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[0].name]];
1344                     }
1345                     if(U->x == Uselected->x && U->y == Uselected->y && U->team == 2){
1346                         [tfArmy setStringValue:[NSString stringWithFormat:@"%@", P[1].name]];
1347                     }
1348                     
1349                     [tfName setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
1350                     [HPbarTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
1351                     [HPbarLI setIntValue:[[NSString stringWithFormat:@"%g", U->CL.S_C.HP/U->CL.S_M.HP*100 + 0.5] intValue]];
1352                     [MPbarTF setStringValue:[NSString stringWithFormat:@"EN %g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
1353                     [tfAttack setStringValue:[NSString stringWithFormat:@"移動力 %d", U->CL.S_C.MOV]];
1354                     [tfDefence setStringValue:[NSString stringWithFormat:@"運動性 %g", U->CL.S_C.MOB]];
1355                     [tfCalc setStringValue:[NSString stringWithFormat:@"装甲 %g", U->CL.S_C.ARM]];
1356                     [tfHit setStringValue:[NSString stringWithFormat:@"限界 %g", U->CL.S_C.LIM]];
1357                     [tfDodge setStringValue:[NSString stringWithFormat:@""]];
1358                     [tfMove setStringValue:[NSString stringWithFormat:@""]];
1359                     [tfWait setStringValue:[NSString stringWithFormat:@"WT %g", U->CL.S_C.WT]];
1360                     [selectChara setImage:U->CL.imgb];
1361                     [selectChara setImageScaling:NSScaleToFit];
1362                     
1363                     break;
1364                 }else{
1365                     [tfName setStringValue:[NSString stringWithFormat:@"----"]];
1366                     [tfArmy setStringValue:[NSString stringWithFormat:@"----"]];
1367                     [HPbarTF setStringValue:[NSString stringWithFormat:@"HP ----"]];
1368                     [HPbarLI setIntValue:[[NSString stringWithFormat:@"0"] intValue]];
1369                     [MPbarTF setStringValue:[NSString stringWithFormat:@"MP ----"]];
1370                     [tfAttack setStringValue:[NSString stringWithFormat:@"攻撃力 ----"]];
1371                     [tfDefence setStringValue:[NSString stringWithFormat:@"防御力 ----"]];
1372                     [tfCalc setStringValue:[NSString stringWithFormat:@"演算力 ----"]];
1373                     [tfHit setStringValue:[NSString stringWithFormat:@"命中値 ----"]];
1374                     [tfDodge setStringValue:[NSString stringWithFormat:@"回避値 ----"]];
1375                     [tfMove setStringValue:[NSString stringWithFormat:@"移動力 ----"]];
1376                     [tfWait setStringValue:[NSString stringWithFormat:@"WT ----"]];
1377                     [selectChara setImage:NULL];
1378                     
1379                 }
1380             
1381             
1382             
1383             }
1384             U = U->next;
1385         }
1386         U = UTop;
1387         
1388         U = UTop;
1389         
1390     }
1391     
1392     if(unitBreak){
1393     if(unitBreak->team == 0){
1394         [tfResource setStringValue:[NSString stringWithFormat:@"資源 %d", P[0].resource]];
1395         [tfFood setStringValue:[NSString stringWithFormat:@"食料 %d", P[0].food]];
1396         [tfMoney setStringValue:[NSString stringWithFormat:@"資金 %d", P[0].money]];
1397     }else if(unitBreak->team == 2){
1398         [tfResource setStringValue:[NSString stringWithFormat:@"資源 %d", P[1].resource]];
1399         [tfFood setStringValue:[NSString stringWithFormat:@"食料 %d", P[1].food]];
1400         [tfMoney setStringValue:[NSString stringWithFormat:@"資金 %d", P[1].money]];
1401     }
1402     }
1403     
1404     if(menuDisplayFlag){
1405         [self SetMenu];
1406         [self initBCreateList];
1407         [self initCSummonList];
1408     }
1409     
1410     if (initMapFlag && !initStatusFlag) {
1411         [self initUnitStatus];
1412         [self initBuildStatus];
1413         
1414         //NSLog(@"%d", unitNum[1][1]);
1415         U = UTop;
1416         
1417         while (U != NULL) {
1418             U->C.S_C.HP = U->C.S_M.HP;
1419             
1420             U = U->next;
1421         }
1422         U = UTop;
1423         
1424         initStatusFlag = true;
1425         unitBreak = U;
1426         TeamCountFlag = true;
1427         
1428         unitColorInitFlag = true;
1429         
1430         MFselectedRow = 0;
1431         for (int i = 1;i < 512;i++) {
1432             if([[SC[storyNumb].nameMAP objectAtIndex:scenarioNumb] isEqualToString:[NSString stringWithFormat:@"%@", MF[i].fileName]])
1433                 break;
1434             MFselectedRow++;
1435         }
1436         [self setTargetList];
1437         
1438         
1439         [self initMapscript];
1440         
1441         initMapEventFlag = true;
1442         fieldViewBattleInitFlag = true;
1443         
1444         
1445         for(int i = 0;i < 255;i++){
1446             AUN[i] = 0;
1447             DUN[i] = 0;
1448         }
1449         
1450     }
1451     
1452     
1453     U = UTop;
1454     U = unitBreak;
1455     if(battleBegin)
1456         while (!wtRdy) {
1457             wtPx = 0;
1458             wtPy = 0;
1459             wtMovedFlag = false;
1460             wtAttackedFlag = false;
1461             
1462             while (U) {
1463                 if(!U->dead) U->C.S_C.WT -= 1;
1464                 if(U->dead) {
1465                     U->C.S_C.WT = 999999;
1466                     //goto lolwtfshit;
1467                 }
1468                 if(U->C.S_C.WT <= 0 && !U->dead){//WTターン周り
1469                     U->C.S_C.WT = 0;
1470                     wtUnitNum = U->number;
1471                     wtPx = U->x;
1472                     wtPy = U->y;
1473                     wtRdy = true;
1474                     unitBreak = U;
1475                     possionX = unitBreak->x;
1476                     possionY = unitBreak->y;
1477                     //おまんちん
1478                     stanbyFlag = false;
1479                     
1480                     
1481                     if(buildNum[U->x][U->y] >= 0){
1482                         B = BTop;
1483                         while(B){
1484                         
1485                             if(B->x == U->x && B->y == U->y){
1486                                 break;
1487                             }
1488                             B = B->next;
1489                         }
1490                         
1491                         if(!B){
1492                             B = BTop;
1493                             goto wtfshit;
1494                            
1495                         }
1496                         
1497                         if(B->C.recHP > 0){
1498                             U->C.S_C.HP += floor(U->C.S_M.HP*B->C.recHP/100);
1499                             if(U->C.S_C.HP >= U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
1500                         }
1501                         
1502                         if(B->C.recMP > 0){
1503                             U->C.S_C.MP += floor(U->C.S_M.MP*B->C.recMP/100);
1504                             if(U->C.S_C.MP >= U->C.S_M.MP) U->C.S_C.MP = U->C.S_M.MP;
1505                         }
1506                         
1507                         if(B->C.recEN > 0){
1508                             U->CL.S_C.EN += floor(U->CL.S_M.EN*B->C.recEN/100);
1509                             if(U->CL.S_C.EN >= U->CL.S_M.EN) U->CL.S_C.EN = U->CL.S_M.EN;
1510                         }
1511                         
1512                         if(B->C.recHPL > 0){
1513                             U->CL.S_C.HP += floor(U->CL.S_M.HP*B->C.recHPL/100);
1514                             if(U->CL.S_C.HP >= U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
1515                         }
1516                         
1517                         
1518                         B = BTop;
1519                     }
1520                     
1521                     goto lolwtfshit;
1522                 }
1523                 
1524             wtfshit:{}
1525                 
1526                 U = U->next;
1527                 if(!U) {
1528                     BTop = B;
1529                     while(B){
1530                         if(!B->dead) B->C.S_C.WTE -= 1;
1531                         if(B->C.S_C.WTE <= 0){
1532                             
1533                             if(B->team == 0){
1534                                 P[0].resource += B->C.Esupply;
1535                                 P[0].food += B->C.Efood;
1536                                 P[0].money += B->C.Emoney;
1537                             }
1538                             if(B->team == 2){
1539                                 P[1].resource += B->C.Esupply;
1540                                 P[1].food += B->C.Efood;
1541                                 P[1].money += B->C.Emoney;
1542                             }
1543                             if(B->team == 1){
1544                                 P[2].resource += B->C.Esupply;
1545                                 P[2].food += B->C.Efood;
1546                                 P[2].money += B->C.Emoney;
1547                             }
1548                             
1549                             B->C.S_C.WTE = B->C.S_M.WTE;
1550                         }
1551                         B = B->next;
1552                     }B = BTop;
1553                 }
1554             }
1555             eventTime++;
1556             U = UTop;
1557             if(!U) break;
1558         }
1559     lolwtfshit:{}
1560     U = UTop;
1561     
1562     if(battleWindowFlag){battleFlag = true; battleWindowFlag = false;
1563         
1564     }
1565     
1566     while(1){
1567     if(battleFlag){
1568         /*
1569         static int openWait = 0;
1570         
1571         if(openWait < 100){
1572             openWait++;
1573             break;
1574         }else{
1575             openWait = 0;
1576         }*/
1577         
1578         
1579         if(!battleSettingFlag){
1580             windowPoint.x = [mapWindow frame].origin.x;
1581             windowPoint.y = [mapWindow frame].origin.y;
1582             [battlePanel setFrameOrigin:windowPoint];
1583             [battlePanel makeKeyAndOrderFront:nil];
1584         }
1585         [self setBattlePanel];
1586     }
1587         break;
1588     }
1589     if(battleSetUp){
1590         if(!battleSetUpIgnore){
1591             [self AttackDisplay];
1592             
1593         windowPoint.x = [mapWindow frame].origin.x;
1594         windowPoint.y = [mapWindow frame].origin.y;
1595         [battleWindow setFrameOrigin:windowPoint];
1596         [battleWindow makeKeyAndOrderFront:nil];
1597         battleRdy = true;
1598         }else{
1599             [mapWindow makeKeyAndOrderFront:nil];
1600         }
1601             
1602     }
1603     
1604     
1605     if(battleRdy){
1606         [self DisplayMessage];
1607     }
1608     
1609     if(buildSelectedFlag){
1610         windowPoint.x = [mapWindow frame].origin.x;
1611         windowPoint.y = [mapWindow frame].origin.y;
1612         [researchPanel setFrameOrigin:windowPoint];
1613         if([self setBuildList]){
1614             [researchPanel makeKeyAndOrderFront:nil];
1615         };
1616         buildSelectedFlag = false;
1617     }
1618     
1619     if(mapChipDataLoadFail){
1620         
1621         [endGamePanel close];
1622         [esWindow makeKeyAndOrderFront:nil];
1623         [fsWindow close];
1624         
1625         endGameCondition = false;
1626         initMapFlag = false;
1627         TeamCountFlag = false;
1628         initStatusFlag = false;
1629         battleBegin = false;
1630         startES = true;
1631         
1632         redWinFlag = false;
1633         blueWinFlag = false;
1634         battleFlag = false;
1635         battleRdy = false;
1636         
1637         mapChipDataLoadFail = false;
1638         return;
1639     }
1640     
1641     if(TeamCountFlag && !endGameCondition){
1642         U = UTop;
1643         TeamCount0 = 0;
1644         TeamCount2 = 0;
1645         while(U){
1646             if((U->team == 0 || U->team == 1) && !U->dead){
1647                 TeamCount0++;
1648             }
1649             else if(U->team == 2 && !U->dead){
1650                 TeamCount2++;
1651             }
1652             U = U->next;
1653         }
1654         U = UTop;
1655         
1656         
1657         if(targType1cnt[1] == 0 || targType2cnt[1] == 0){
1658             endGameCondition = true;
1659             redWinFlag = true;
1660             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1661             
1662         }
1663         if(targType1cnt[0] == 0 || targType2cnt[0] == 0){
1664             endGameCondition = true;
1665             blueWinFlag = true;
1666             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1667             
1668         }
1669         
1670         if(targType2Dflag){
1671             endGameCondition = true;
1672             redWinFlag = true;
1673             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1674             
1675         }
1676         if(targType2Lflag){
1677             endGameCondition = true;
1678             blueWinFlag = true;
1679             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1680             
1681         }
1682         
1683         if(TeamCount0 == 0 && (MF[MFselectedRow+1].MS.EGCdark.endType1 == 2 || MF[MFselectedRow+1].MS.EGCdark.endType2 == 2)){
1684             endGameCondition = true;
1685             redWinFlag = true;
1686             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[1].name]];
1687         }
1688         if(TeamCount2 == 0 && (MF[MFselectedRow+1].MS.EGClight.endType1 == 1 || MF[MFselectedRow+1].MS.EGClight.endType2 == 1)){
1689             endGameCondition = true;
1690             blueWinFlag = true;
1691             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1692             
1693         }
1694     }
1695     
1696     
1697     static int endGamePanelWait = 100;
1698     
1699     if(endGameCondition && !battleRdy){
1700         
1701         if(redWinFlag && blueWinFlag){
1702             
1703         
1704         }else{
1705             windowPoint.x = [mapWindow frame].origin.x+30;
1706             windowPoint.y = [mapWindow frame].origin.y+200;
1707             [endGamePanel setFrameOrigin:windowPoint];
1708             [endGamePanel makeKeyAndOrderFront:nil];
1709             endGamePanelWait--;
1710             if(endGamePanelWait > 0) return;
1711         }
1712         
1713         [endGamePanel close];
1714         [esWindow makeKeyAndOrderFront:nil];
1715         [fsWindow close];
1716         
1717         [BGMsub stop];
1718         
1719         endGameCondition = false;
1720         initMapFlag = false;
1721         TeamCountFlag = false;
1722         initStatusFlag = false;
1723         battleBegin = false;
1724         startES = true;
1725         
1726         cpuModeMOVEflag = false;
1727         cpuModeATTACKflag = false;
1728         
1729         redWinFlag = false;
1730         blueWinFlag = false;
1731         cpuAImodeflag = false;
1732         cpuTurnEndFlag = true;
1733         waitSwtichFlag = false;
1734         
1735         wtRdy = false;
1736         Uselected = NULL;
1737         
1738         endGamePanelWait = 100;
1739         stageClearFlag = false;
1740         stageClearFlag2 = false;
1741         battleReadyUpFlag = false;
1742         setBattleModeFlag = false;
1743     }
1744     if(backTitleFlag){
1745     
1746         [titleWindow makeKeyAndOrderFront:nil];
1747         [fsWindow close];
1748         
1749         [BGMsub stop];
1750         
1751         endGameCondition = false;
1752         initMapFlag = false;
1753         TeamCountFlag = false;
1754         initStatusFlag = false;
1755         battleBegin = false;
1756         startES = true;
1757         
1758         cpuModeMOVEflag = false;
1759         cpuModeATTACKflag = false;
1760         
1761         redWinFlag = false;
1762         blueWinFlag = false;
1763         cpuAImodeflag = false;
1764         cpuTurnEndFlag = true;
1765         backTitleFlag = false;
1766         backTitleFlag2 = true;
1767         waitSwtichFlag = false;
1768         battleReadyUpFlag = false;
1769         setBattleModeFlag = false;
1770         
1771         
1772         wtRdy = false;
1773         Uselected = NULL;
1774     
1775     }if(stageClearFlag){
1776         
1777         if(stageClearFlag2){
1778         
1779             endGameCondition = true;
1780             blueWinFlag = true;
1781             [endGameText setStringValue:[NSString stringWithFormat:@"%@の勝利!", P[0].name]];
1782         
1783         
1784         
1785             return;
1786         }
1787         
1788         [esWindow makeKeyAndOrderFront:nil];
1789         [fsWindow close];
1790         
1791         [BGMsub stop];
1792         
1793         endGameCondition = false;
1794         initMapFlag = false;
1795         TeamCountFlag = false;
1796         initStatusFlag = false;
1797         battleBegin = false;
1798         startES = true;
1799         
1800         cpuModeMOVEflag = false;
1801         cpuModeATTACKflag = false;
1802         
1803         redWinFlag = false;
1804         blueWinFlag = false;
1805         cpuAImodeflag = false;
1806         cpuTurnEndFlag = true;
1807         stageClearFlag = false;
1808         waitSwtichFlag = false;
1809         battleReadyUpFlag = false;
1810         setBattleModeFlag = false;
1811         
1812         wtRdy = false;
1813         Uselected = NULL;
1814         
1815     }
1816     
1817     if(gameOverFlag){
1818         
1819         
1820         [GameOverIV setImage:gaov.img];
1821         
1822         
1823         [GameOverWindow makeKeyAndOrderFront:nil];
1824         [fsWindow close];
1825         
1826         endGameCondition = false;
1827         initMapFlag = false;
1828         TeamCountFlag = false;
1829         initStatusFlag = false;
1830         battleBegin = false;
1831         startES = true;
1832         
1833         cpuModeMOVEflag = false;
1834         cpuModeATTACKflag = false;
1835         
1836         redWinFlag = false;
1837         blueWinFlag = false;
1838         cpuAImodeflag = false;
1839         cpuTurnEndFlag = true;
1840         backTitleFlag = false;
1841         gameOverFlag = false;
1842         gameOverFlag2 = true;
1843         waitSwtichFlag = false;
1844         battleReadyUpFlag = false;
1845         setBattleModeFlag = false;
1846         
1847         wtRdy = false;
1848         Uselected = NULL;
1849         
1850     }
1851     
1852     /*
1853     if(Uselected)
1854         if(!Uselected->dead){
1855             
1856             U = UTop;
1857             
1858             while (U->number != wtUnitNum) {
1859                 U = U->next;
1860             }
1861             
1862             if(!wtMovedFlag && !wtAttackedFlag){
1863                 U->C.S_C.WT = floor(U->C.S_M.WT/4 + 0.5);
1864             }else if(wtMovedFlag && wtAttackedFlag){
1865                 U->C.S_C.WT =  floor(U->C.S_M.WT + 0.5);
1866             }else if(wtMovedFlag){
1867                 U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
1868             }else if(wtAttackedFlag){
1869                 U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
1870             }
1871             
1872             U = UTop;
1873             
1874             wtRdy = false;
1875         }
1876     */
1877     if(summonRdyFlag){
1878         U = UTop;
1879         
1880         
1881         U = UTop;
1882         [self addSummonStatus];
1883         
1884         U = CSLU;
1885         
1886         if(U->team == 0){
1887             
1888             SKILL *sTop = U->C.S;
1889             
1890             while (U->C.S) {
1891                 if(U->C.S->type == 2) break;
1892                 U->C.S = U->C.S->next;
1893             }
1894             
1895             U->C.S_C.MP -= U->C.S->cost[crCSL];
1896             
1897             if(!U->C.S){
1898                 U->C.S = sTop;
1899                 U = UTop;
1900                 return;
1901             }
1902             
1903             
1904             unitNum[possionX][possionY] = U->C.S->list[crCSL]-1;
1905             unitTeam[possionX][possionY] = 0;
1906             
1907             U->C.S = sTop;
1908             unitColorInitFlag = true;
1909         }
1910         if(U->team == 2){
1911             
1912             SKILL *sTop = U->C.S;
1913             
1914             while (U->C.S) {
1915                 if(U->C.S->type == 2) break;
1916                 U->C.S = U->C.S->next;
1917             }
1918             
1919             U->C.S_C.MP -= U->C.S->cost[crCSL];
1920             
1921             if(!U->C.S){
1922                 U->C.S = sTop;
1923                 U = UTop;
1924                 return;
1925             }
1926             
1927             unitNum[possionX][possionY] = U->C.S->list[crCSL]-1;
1928             unitTeam[possionX][possionY] = 2;
1929             
1930             U->C.S = sTop;
1931             unitColorInitFlag = true;
1932         }
1933     
1934         summonRdyFlag = false;
1935         cslRdy = false;
1936         
1937         U = UTop;
1938     }
1939     
1940     
1941     
1942     if(unitMoveEndFlag){
1943         pussyLoopFlag = false;
1944     }
1945     
1946     if(unitBreak){
1947     if(unitBreak->team == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2){
1948         unitBreak->CPU = true;
1949         cpuAImodeflag = true;
1950         //NSLog(@"OMFG");
1951     }else if(unitBreak->team == 0 && MF[MFselectedRow+1].MS.playerSet1 == 2){
1952         unitBreak->CPU = true;
1953         cpuAImodeflag = true;
1954         //NSLog(@"OMFG");
1955     }else if(unitBreak->team == 1){
1956         unitBreak->CPU = true;
1957         cpuAImodeflag = true;
1958         //NSLog(@"OMFG");
1959     }
1960     else{
1961         unitBreak->CPU = false;
1962         cpuAImodeflag = false;
1963     }
1964     }
1965     
1966     if(battleBegin && !pussyLoopFlag){
1967         bool proccessTrue = false;
1968         static bool onlyBigin = false;
1969         MAPSCRIPT MS = MF[MFselectedRow+1].MS;
1970         MAPSCRIPTD *MSDtop;
1971         MSDtop = MSDTO;
1972         if(!MSDtop)
1973             goto w000p;
1974         
1975         
1976         if(!onlyBigin){
1977             MSDP0top = MS.D->P;
1978             onlyBigin = true;
1979         }
1980         
1981         
1982         
1983         while (MS.D) {
1984             int proccesType = -1;
1985             
1986             bool EventFailFlag = false;
1987             static bool PtopFlag = false;
1988             
1989             
1990             enum{
1991             ENTIRE_MAP,
1992             CENTER_POINT
1993             };
1994             
1995             while(MS.D){
1996                 if(MS.D->endFlag){
1997                     MS.D = MS.D->next;
1998                 }
1999                 else
2000                     break;
2001             }
2002             PtopFlag = false;
2003             if(!MS.D) break;
2004             
2005             if(!PtopFlag){
2006                 MSDPtop = MS.D->P;
2007                 PtopFlag = true;
2008             }
2009             
2010             if(MS.D)
2011             while(MS.D->P){
2012                 if(MS.D->P->endFlag)
2013                     MS.D->P = MS.D->P->next;
2014                 else
2015                     break;
2016             }
2017             if(!MS.D->P){
2018                 MS.D->endFlag = true;
2019                 messageDialog = false;
2020                 [self setMessage:NULL];
2021                 MS.D->P = MSDPtop;
2022                 PtopFlag = false;
2023                 
2024                 
2025                 MAPSCRIPT0 *MSDPT = MS.D->P;
2026                 
2027                 if(MS.D->ETtype == 0){
2028                     
2029                 }else if(MS.D->ETtype == 1){
2030                     bool resultFailFlag = false;
2031                     while(MS.D->P){
2032                         if(!MS.D->P->endFlag)
2033                             resultFailFlag = true;
2034                         MS.D->P = MS.D->P->next;
2035                     }MS.D->P = MSDPT;
2036                     
2037                     if(resultFailFlag)
2038                     while(MS.D->P){
2039                         MS.D->P->endFlag = false;
2040                         MS.D->P = MS.D->P->next;
2041                     }MS.D->P = MSDPT;
2042                     
2043                 }else if(MS.D->ETtype == 2){
2044                     
2045                     bool resultFailFlag = false;
2046                     while(MS.D->P){
2047                         if(!MS.D->P->succeessfulFlag)
2048                             resultFailFlag = true;
2049                         MS.D->P = MS.D->P->next;
2050                     }MS.D->P = MSDPT;
2051                     
2052                     if(resultFailFlag)
2053                     while(MS.D->P){
2054                         MS.D->P->endFlag = false;
2055                         MS.D->P = MS.D->P->next;
2056                     }MS.D->P = MSDPT;
2057                 }else if(MS.D->ETtype == 3){
2058                     
2059                     bool resultFailFlag = false;
2060                     while(MS.D->P){
2061                         if(!MS.D->P->succeessfulFlag){
2062                             resultFailFlag = false;
2063                             break;
2064                         }
2065                         MS.D->P = MS.D->P->next;
2066                         resultFailFlag = true;
2067                     }MS.D->P = MSDPT;
2068                     
2069                     if(resultFailFlag)
2070                     while(MS.D->P){
2071                         MS.D->P->endFlag = false;
2072                         MS.D->P = MS.D->P->next;
2073                     }MS.D->P = MSDPT;
2074                     //NSLog(@"%d", UTop->x);
2075                 }else if(MS.D->ETtype == 4){
2076                     while(MS.D->P){
2077                         MS.D->P->endFlag = false;
2078                         MS.D->P = MS.D->P->next;
2079                     }MS.D->P = MSDPT;
2080                 }
2081                 
2082                 MS.D->P = MSDPT;
2083                 MS.D = MS.D->next;
2084                 
2085             }
2086             if(!MS.D) {
2087                 
2088                 break;
2089             }
2090             
2091             if(!PtopFlag){
2092                 MSDPtop = MS.D->P;
2093                 PtopFlag = true;
2094             }
2095             
2096             if(MS.D->switch1)
2097             for(int i = 0;*(MS.D->switch1+i)>0;i++){
2098                 if(Suicchi[*(MS.D->switch1+i)])
2099                     continue;
2100                 
2101                 EventFailFlag = true;
2102             }
2103             
2104             if(MS.D->switch2)
2105             for(int i = 0;*(MS.D->switch2+i)>0;i++){
2106                 if(!Suicchi[*(MS.D->switch2+i)])
2107                     continue;
2108                 
2109                 EventFailFlag = true;
2110             }
2111             
2112             
2113             if(MS.D->ET3 <= eventTime)
2114                 proccessTrue = true;
2115             
2116             
2117             if(MS.D->type == -1 && !EventFailFlag)
2118                 proccesType = ENTIRE_MAP;
2119             if(MS.D->type == 0 && pushStanbyFlag && (Uselected->x == MS.D->x && Uselected->y == MS.D->y) && !EventFailFlag)
2120                 proccesType = CENTER_POINT;
2121             else if(MS.D->type == 0){
2122                 proccesType = CENTER_POINT;
2123                 proccessTrue = false;
2124                 EventFailFlag = true;
2125             }
2126            
2127             if(MS.D->endFlag)
2128                 continue;
2129             
2130             
2131             if(EventFailFlag){
2132                 while (MS.D->P) {
2133                     MS.D->P->endFlag = true;
2134                     MS.D->P = MS.D->P->next;
2135                 }
2136                 MS.D->P = MSDPtop;
2137                 MS.D = MS.D->next;
2138                 continue;
2139             }
2140             
2141         if(proccessTrue)
2142         switch (proccesType) {
2143                 
2144             case ENTIRE_MAP:
2145                 MS.D->P = [self setEvent:MS.D->P];
2146                 if(messageDialog){
2147                     MS.D->P = MSDPtop;
2148                     MS.D = MSDtop;
2149                     return;
2150                 }
2151                 if(waitSwtichFlag) {
2152                     MS.D->P = MSDPtop;
2153                     MS.D = MSDtop;
2154                     return;
2155                 }if(backTitleFlag){
2156                     MS.D->P = MSDPtop;
2157                     MS.D = MSDtop;
2158                     return;
2159                 
2160                 }if(stageClearFlag){
2161                     MS.D->P = MSDPtop;
2162                     MS.D = MSDtop;
2163                     return;
2164                     
2165                 }if(gameOverFlag){
2166                     MS.D->P = MSDPtop;
2167                     MS.D = MSDtop;
2168                     return;
2169                     
2170                 }
2171                 MS.D->P = MSDPtop;
2172                 break;
2173             case CENTER_POINT:
2174                 MS.D->P = [self setEvent:MS.D->P];
2175                 if(messageDialog){
2176                     MS.D->P = MSDPtop;
2177                     MS.D = MSDtop;
2178                     return;
2179                 }
2180                 if(waitSwtichFlag) {
2181                     MS.D->P = MSDPtop;
2182                     MS.D = MSDtop;
2183                     return;
2184                 }if(backTitleFlag){
2185                     MS.D->P = MSDPtop;
2186                     MS.D = MSDtop;
2187                     return;
2188                     
2189                 }if(stageClearFlag){
2190                     MS.D->P = MSDPtop;
2191                     MS.D = MSDtop;
2192                     return;
2193                     
2194                 }if(gameOverFlag){
2195                     MS.D->P = MSDPtop;
2196                     MS.D = MSDtop;
2197                     return;
2198                     
2199                 }
2200                 MS.D->P = MSDPtop;
2201                 break;
2202                 
2203             default:
2204                 MS.D->P = MSDPtop;
2205                 break;
2206         }
2207             
2208             MS.D->P = MSDPtop;
2209             continue;
2210         }
2211         MS.D = MSDTO;
2212    
2213         while(MS.D){
2214             
2215             MAPSCRIPT0 *MSDPT = MS.D->P;
2216         if(MS.D->ETtype == 0){
2217             while(MS.D->P){
2218                 MS.D->P->succeessfulFlag = true;
2219                 MS.D->endFlag = true;
2220                 MS.D->P = MS.D->P->next;
2221             }MS.D->P = MSDPT;
2222         }else if(MS.D->ETtype == 1){
2223             bool resultFailFlag = false;
2224             while(MS.D->P){
2225                 if(!MS.D->P->endFlag)
2226                     resultFailFlag = true;
2227                 MS.D->P = MS.D->P->next;
2228             }MS.D->P = MSDPT;
2229             
2230             if(resultFailFlag)
2231                 while(MS.D->P){
2232                     MS.D->P->succeessfulFlag = false;
2233                     MS.D->endFlag = false;
2234                     MS.D->P = MS.D->P->next;
2235                 }MS.D->P = MSDPT;
2236             
2237         }else if(MS.D->ETtype == 2){
2238             
2239             bool resultFailFlag = false;
2240             while(MS.D->P){
2241                 if(!MS.D->P->succeessfulFlag)
2242                     resultFailFlag = true;
2243                 MS.D->P = MS.D->P->next;
2244             }MS.D->P = MSDPT;
2245             
2246             if(resultFailFlag)
2247                 while(MS.D->P){
2248                     MS.D->P->succeessfulFlag = false;
2249                     MS.D->endFlag = false;
2250                     MS.D->P = MS.D->P->next;
2251                 }MS.D->P = MSDPT;
2252         }else if(MS.D->ETtype == 3){
2253             
2254             bool resultFailFlag = false;
2255             while(MS.D->P){
2256                 if(!MS.D->P->succeessfulFlag){
2257                     resultFailFlag = false;
2258                     break;
2259                 }
2260                 resultFailFlag = true;
2261                 MS.D->P = MS.D->P->next;
2262             }MS.D->P = MSDPT;
2263             
2264             if(resultFailFlag)
2265                 while(MS.D->P){
2266                     MS.D->P->succeessfulFlag = false;
2267                     MS.D->endFlag = false;
2268                     MS.D->P = MS.D->P->next;
2269                 }MS.D->P = MSDPtop;
2270         }else if(MS.D->ETtype == 4){
2271             while(MS.D->P){
2272                 MS.D->P->succeessfulFlag = false;
2273                 MS.D->endFlag = false;
2274                 MS.D->P = MS.D->P->next;
2275             }MS.D->P = MSDPT;
2276         }
2277         
2278         MS.D->P = MSDPT;
2279         MS.D = MS.D->next;
2280     }
2281
2282     MS.D = MSDtop;
2283     
2284     
2285     
2286         MF[MFselectedRow+1].MS.D = MS.D;
2287         cpuTurnEndFlag = false;
2288         battleSetUpIgnore = false;
2289     }
2290 w000p:
2291     
2292     if(CPUAttackSubmitFlag){
2293         battleFlag = true;
2294         CPUAttackSubmitFlag = false;
2295         windowPoint.x = [mapWindow frame].origin.x;
2296         windowPoint.y = [mapWindow frame].origin.y;
2297         [atkPanel setFrameOrigin:windowPoint];
2298     }
2299     
2300     
2301     static int oopsCnt = 20;
2302     
2303     U = UTop;
2304     
2305     
2306     if(Utarget){
2307     
2308     if(battleFlag &&
2309        ((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
2310         (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
2311         (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2))
2312        ){
2313         oopsCnt--;
2314         if(oopsCnt > 0)
2315             return;
2316         else{
2317             oopsCnt = 50;//cpu攻撃ナビ
2318         }
2319         
2320         battleFlag = false;
2321         battleRdy = false;
2322         battleSet1Flag = false;
2323         battleSet2Flag = false;
2324         battleSettingFlag = false;
2325         [self AttackDisplay];
2326         windowPoint.x = [mapWindow frame].origin.x;
2327         windowPoint.y = [mapWindow frame].origin.y;
2328         [battleWindow setFrameOrigin:windowPoint];
2329         [battleWindow makeKeyAndOrderFront:nil];
2330         [battlePanel close];
2331     }
2332     }
2333     if(Utarget){
2334     if(battleRdy &&
2335        ((Utarget && MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
2336         (unitBreak->team == 2 && Utarget->team == 1) || (unitBreak->team == 1 && Utarget->team == 2) ||
2337         (unitBreak->team == 1 && Utarget->team == 1) || (unitBreak->team == 2 && Utarget->team == 2)
2338         )
2339        ){
2340         
2341         oopsCnt--;
2342         if(oopsCnt > 0)
2343             return;
2344         else{
2345             oopsCnt = 50;//cpu攻撃準備
2346         }
2347         
2348        bLoopFlag = false;
2349     }
2350     }
2351     U = UTop;
2352     
2353
2354 }
2355
2356 -(MAPSCRIPT0*)setEvent:(MAPSCRIPT0*)MS0{
2357
2358     enum{
2359         MESSAGE_FLAG,
2360         SELECTION_FLAG,
2361         INPUTNUMBER_FLAG,
2362         SWITCH_FLAG,
2363         VALUE_FLAG,
2364         TIMER_FLAG,
2365         BRANCH_FLAG,
2366         LABEL_FLAG,
2367         LABELJUMP_FLAG,
2368         COMMENT_FLAG,
2369         RESOURCE_FLAG,
2370         APPEARANCE_FLAG = 22,
2371         DISSAPPEARANCE_FLAG = 23,
2372         WAIT_FLAG = 25,
2373         BGM_FLAG =28,
2374         SE_FLAG =30,
2375         GAMEOVER_FLAG = 35,
2376         STAGECLEAR_FLAG = 36,
2377         TITLE_FLAG = 37,
2378     };
2379
2380     int Proc = -1;
2381     
2382     if(MS0->type == 0)
2383         Proc = MESSAGE_FLAG;
2384     if(MS0->type == 1)
2385         Proc = SELECTION_FLAG;
2386     if(MS0->type == 2)
2387         Proc = INPUTNUMBER_FLAG;
2388     if(MS0->type == 3)
2389         Proc = SWITCH_FLAG;
2390     if(MS0->type == 4)
2391         Proc = VALUE_FLAG;
2392     if(MS0->type == 5)
2393         Proc = TIMER_FLAG;
2394     if(MS0->type == 6)
2395         Proc = BRANCH_FLAG;
2396     if(MS0->type == 7)
2397         Proc = LABEL_FLAG;
2398     if(MS0->type == 8)
2399         Proc = LABELJUMP_FLAG;
2400     if(MS0->type == 9)
2401         Proc = COMMENT_FLAG;
2402     if(MS0->type == 10)
2403         Proc = RESOURCE_FLAG;
2404     if(MS0->type == 22)
2405         Proc = APPEARANCE_FLAG;
2406     if(MS0->type == 23)
2407         Proc = DISSAPPEARANCE_FLAG;
2408     if(MS0->type == 25)
2409         Proc = WAIT_FLAG;
2410     if(MS0->type == 28)
2411         Proc = BGM_FLAG;
2412     if(MS0->type == 30)
2413         Proc = SE_FLAG;
2414     if(MS0->type == 35)
2415         Proc = GAMEOVER_FLAG;
2416     if(MS0->type == 36)
2417         Proc = STAGECLEAR_FLAG;
2418     if(MS0->type == 37)
2419         Proc = TITLE_FLAG;
2420     
2421     switch(Proc){
2422             
2423         case MESSAGE_FLAG:
2424             messageDialog = true;
2425             [self setMessage:MS0];
2426             coolTime = true;
2427             break;
2428         case SELECTION_FLAG:
2429             MS0 = [self setSelection:MS0];
2430             coolTime = true;
2431             break;
2432         case INPUTNUMBER_FLAG:
2433             MS0 = [self setDefault:MS0];
2434             coolTime = true;
2435             break;
2436     
2437         case SWITCH_FLAG:
2438             MS0 = [self setSwitch:MS0];
2439             break;
2440         case VALUE_FLAG:
2441             MS0 = [self setDefault:MS0];
2442             break;
2443         case TIMER_FLAG:
2444             MS0 = [self setDefault:MS0];
2445             break;
2446         case BRANCH_FLAG:
2447             MS0 = [self setBranch:MS0];
2448             break;
2449         case LABEL_FLAG:
2450             MS0 = [self setLabel:MS0];
2451             break;
2452         case LABELJUMP_FLAG:
2453             MS0 = [self setLabelJump:MS0];
2454             break;
2455         case COMMENT_FLAG:
2456             MS0 = [self setComment:MS0];
2457             break;
2458         case RESOURCE_FLAG:
2459             MS0 = [self setResource:MS0];
2460             break;
2461         case APPEARANCE_FLAG:
2462             MS0 = [self setAppearance:MS0];
2463             break;
2464         case DISSAPPEARANCE_FLAG:
2465             MS0 = [self setDissappearance:MS0];
2466             break;
2467         case WAIT_FLAG:
2468             MS0 = [self setWait:MS0];
2469             break;
2470         case BGM_FLAG:
2471             MS0 = [self setBGM:MS0];
2472             break;
2473         case SE_FLAG:
2474             MS0 = [self setSE:MS0];
2475             break;
2476         case GAMEOVER_FLAG:
2477             MS0 = [self setGameOver:MS0];
2478             coolTime = true;
2479             break;
2480         case STAGECLEAR_FLAG:
2481             MS0 = [self setStageClear:MS0];
2482             break;
2483         case TITLE_FLAG:
2484             MS0 = [self setTitleBack:MS0];
2485             break;
2486             
2487     }
2488     
2489
2490     return MS0;
2491 }
2492
2493
2494 -(void)setTargetList{
2495
2496     targType1cnt[0] = -1;
2497     targType1cnt[1] = -1;
2498     targType2cnt[0] = -1;
2499     targType2cnt[1] = -1;
2500     targType2Lflag = false;
2501     targType2Dflag = false;
2502     
2503     
2504     MAPSCRIPT MS = MF[MFselectedRow+1].MS;
2505     
2506     while(1) {
2507         
2508         for (int i = 0;i < 64;i++) {
2509             if(!MS.EGClight.etValue1[i]) break;
2510             NSArray *array1 = [MS.EGClight.etValue1[i] componentsSeparatedByString:@"["];
2511             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2512             
2513             int Tx = [[array2 objectAtIndex:0] intValue];
2514             int Ty = [[array2 objectAtIndex:1] intValue];
2515             if(MS.EGClight.endType1 == 3){
2516                 U = UTop;
2517                 while (U) {
2518                     if(U->x == Tx && U->y == Ty){
2519                         U->targType1L = true;
2520                         if(targType1cnt[0] < 0)
2521                             targType1cnt[0] = 0;
2522                         targType1cnt[0]++;
2523                         break;
2524                     }
2525                     U = U->next;
2526                 }U = UTop;
2527             }
2528             if(MS.EGClight.endType1 == 4){
2529                 U = UTop;
2530                 while (U) {
2531                     if(U->x == Tx && U->y == Ty){
2532                         U->targType2L = true;
2533                         if(targType2cnt[0] < 0)
2534                             targType2cnt[0] = 0;
2535                         targType2cnt[0]++;
2536                         break;
2537                     }
2538                     U = U->next;
2539                 }U = UTop;
2540             }
2541         }
2542         for (int i = 0;i < 64;i++) {
2543             if(!MS.EGClight.etValue2[i]) break;
2544             NSArray *array1 = [MS.EGClight.etValue2[i] componentsSeparatedByString:@"["];
2545             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2546             
2547             int Tx = [[array2 objectAtIndex:0] intValue];
2548             int Ty = [[array2 objectAtIndex:1] intValue];
2549             
2550             if(MS.EGClight.endType2 == 3){
2551             U = UTop;
2552                 while (U) {
2553                     if(U->x == Tx && U->y == Ty){
2554                         U->targType1L = true;
2555                         if(targType1cnt[0] < 0)
2556                             targType1cnt[0] = 0;
2557                         targType1cnt[0]++;
2558                         break;
2559                     }
2560                     U = U->next;
2561                 }U = UTop;
2562             }
2563             if(MS.EGClight.endType2 == 4){
2564                 U = UTop;
2565                 while (U) {
2566                     if(U->x == Tx && U->y == Ty){
2567                         U->targType2L = true;
2568                         if(targType2cnt[0] < 0)
2569                             targType2cnt[0] = 0;
2570                         targType2cnt[0]++;
2571                         break;
2572                     }
2573                     U = U->next;
2574                 }U = UTop;
2575             }
2576         }
2577         for (int i = 0;i < 64;i++) {
2578             if(!MS.EGCdark.etValue1[i]) break;
2579             NSArray *array1 = [MS.EGCdark.etValue1[i] componentsSeparatedByString:@"["];
2580             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2581             
2582             int Tx = [[array2 objectAtIndex:0] intValue];
2583             int Ty = [[array2 objectAtIndex:1] intValue];
2584             
2585             if(MS.EGCdark.endType1 == 3){
2586                     U = UTop;
2587                 while (U) {
2588                     if(U->x == Tx && U->y == Ty){
2589                         U->targType1D = true;
2590                         if(targType1cnt[1] < 0)
2591                             targType1cnt[1] = 0;
2592                         targType1cnt[1]++;
2593                         break;
2594                     }
2595                     U = U->next;
2596                 }U = UTop;
2597             }
2598             if(MS.EGCdark.endType1 == 4){
2599                 U = UTop;
2600                 while (U) {
2601                     if(U->x == Tx && U->y == Ty){
2602                         U->targType2D = true;
2603                         if(targType2cnt[1] < 0)
2604                             targType2cnt[1] = 0;
2605                         targType2cnt[1]++;
2606                         break;
2607                     }
2608                     U = U->next;
2609                 }U = UTop;
2610             }
2611         }
2612         for (int i = 0;i < 64;i++) {
2613             if(!MS.EGCdark.etValue2[i]) break;
2614             NSArray *array1 = [MS.EGCdark.etValue2[i] componentsSeparatedByString:@"["];
2615             NSArray *array2 = [[array1 objectAtIndex:1] componentsSeparatedByString:@","];
2616             
2617             int Tx = [[array2 objectAtIndex:0] intValue];
2618             int Ty = [[array2 objectAtIndex:1] intValue];
2619             
2620             if(MS.EGCdark.endType2 == 3){
2621                 U = UTop;
2622                 while (U) {
2623                     if(U->x == Tx && U->y == Ty){
2624                         U->targType1D = true;
2625                         if(targType1cnt[1] < 0)
2626                             targType1cnt[1] = 0;
2627                         targType1cnt[1]++;
2628                         break;
2629                     }
2630                     U = U->next;
2631                 }U = UTop;
2632             }
2633             if(MS.EGCdark.endType2 == 4){
2634                 U = UTop;
2635                 while (U) {
2636                     if(U->x == Tx && U->y == Ty){
2637                         U->targType2D = true;
2638                         if(targType2cnt[1] < 0)
2639                             targType2cnt[1] = 0;
2640                         targType2cnt[1]++;
2641                         break;
2642                     }
2643                     U = U->next;
2644                 }U = UTop;
2645             }
2646         }
2647         break;
2648     }
2649
2650
2651
2652
2653 }
2654
2655 -(bool)setBuildList{
2656
2657     [self willChangeValueForKey:@"CResearchListMA"];
2658     [CResearchListMA removeAllObjects];
2659     [self didChangeValueForKey:@"CResearchListMA"];
2660     
2661     BUILDCHIP *B0;
2662     
2663     B = BTop;
2664     
2665     while (B && B->x != possionX && B->y != possionY) {
2666         B = B->next;
2667     }
2668     B0 = &BC[buildNum[possionX][possionY]];
2669     
2670     RESEARCH *Rtop;
2671     UNITCHIP *BU;
2672     
2673     Rtop = B0->R;
2674     
2675     if(!B0->R){
2676         return false;
2677     }
2678     
2679     while(B0->R){
2680         BU = B0->R->U;
2681         
2682         if(B->makeLv >= B0->R->Lv){
2683         NSMutableDictionary* dict = [NSMutableDictionary new];
2684         [dict setValue:[NSString stringWithFormat:@"%@", BU->nameClass] forKey:@"name"];
2685         [dict setValue:[NSString stringWithFormat:@"%g", BU->S_M.HP] forKey:@"HP"];
2686         [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d", BU->S_M.cSupply, BU->S_M.cFood, BU->S_M.cMoney] forKey:@"cost"];
2687         [dict setValue:BU->img forKey:@"img"];
2688
2689         
2690         [self willChangeValueForKey:@"CResearchListMA"];
2691         [CResearchListMA addObject:dict];
2692         [self didChangeValueForKey:@"CResearchListMA"];
2693         }
2694         B0->R = B0->R->next;
2695     }
2696     B0->R = Rtop;
2697     
2698     B = BTop;
2699     
2700     BUILDCHIP *B;
2701     
2702     B = &BC[buildNum[possionX][possionY]];
2703     
2704     Rtop = B->R;
2705     
2706     BU = B->R->U;
2707     BRU = BU;
2708     
2709     crCRL = 0;
2710     for(int i = 0;i <= crCRL;i++){
2711         BU = B->R->U;
2712         BRU = BU;
2713         [researchATK setStringValue:[NSString stringWithFormat:@"攻撃力 %g", BU->S_M.ATK]];
2714         [researchDEF setStringValue:[NSString stringWithFormat:@"防御力 %g", BU->S_M.DEF]];
2715         [researchCAP setStringValue:[NSString stringWithFormat:@"演算力 %g", BU->S_M.CAP]];
2716         [researchACU setStringValue:[NSString stringWithFormat:@"命中値 %g", BU->S_M.ACU]];
2717         [researchEVA setStringValue:[NSString stringWithFormat:@"回避値 %g", BU->S_M.EVA]];
2718         [researchMOV setStringValue:[NSString stringWithFormat:@"移動力 %d", BU->S_M.MOV]];
2719         [researchIMG setImage:BU->imgb];
2720         [researchIMG setImageScaling:NSScaleToFit];
2721         
2722         B->R = B->R->next;
2723     }
2724     B->R = Rtop;
2725     
2726     return true;
2727 }
2728
2729 -(void)SetMenu{
2730     
2731     [self setCommandPanel];
2732     [menuPanel makeKeyAndOrderFront:nil];
2733 }
2734
2735 -(IBAction)pushMove:(id)sender{menuDisplayFlag = false;
2736     [menuPanel close];
2737     moveFlag = true;
2738     attackFlag = false;
2739     createFlag = false;
2740     summonFlag = false;
2741 }
2742 -(IBAction)pushAttack:(id)sender{menuDisplayFlag = false;
2743     [menuPanel close];
2744     attackFlag = true;
2745     moveFlag = false;
2746     windowPoint.x = [mapWindow frame].origin.x;
2747     windowPoint.y = [mapWindow frame].origin.y;
2748     [atkPanel setFrameOrigin:windowPoint];
2749     
2750     U = UTop;
2751     while (!(AUN[1] == U->number)) {
2752         U = U->next;
2753     }
2754     
2755     if(U->chipNumberL >= 0){
2756         U = UTop;
2757         [self initCAttackList2];
2758         [self initCAttackSelect2];
2759     }
2760     else if(U->chipNumber >= 0) {
2761         U = UTop;
2762         [self initCAttackList];
2763         [self initCAttackSelect];
2764     }
2765     U = UTop;
2766     [atkPanel makeKeyAndOrderFront:nil];
2767 }
2768 -(IBAction)pushStandby:(id)sender{menuDisplayFlag = false;
2769     
2770     U = UTop;
2771     
2772     while (U->number != wtUnitNum) {
2773         U = U->next;
2774     }
2775     
2776     if(!wtMovedFlag && !wtAttackedFlag){
2777         U->C.S_C.WT = floor(U->C.S_M.WT/4 + 0.5);
2778     }else if(wtMovedFlag && wtAttackedFlag){
2779         U->C.S_C.WT =  floor(U->C.S_M.WT + 0.5);
2780     }else if(wtMovedFlag){
2781         U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
2782     }else if(wtAttackedFlag){
2783         U->C.S_C.WT =  floor(U->C.S_M.WT/2 + 0.5);
2784     }
2785     
2786     BTop = B;
2787     while (B) {
2788         if(B->x == possionX && B->y == possionY && B->C.capture){
2789             buildCaptureFlag = true;
2790             unitMoveEndFlag = true;
2791         }
2792         B = B->next;
2793     }B = BTop;
2794     
2795     U = UTop;
2796     
2797     wtRdy = false;
2798     pushStanbyFlag = true;
2799     pussyLoopFlag = false;
2800     [menuPanel close];
2801 }
2802 -(IBAction)pushCreate:(id)sender{menuDisplayFlag = false;
2803     [menuPanel close];
2804     createFlag = true;
2805     moveFlag = false;
2806     
2807     windowPoint.x = [mapWindow frame].origin.x;
2808     windowPoint.y = [mapWindow frame].origin.y;
2809     [createPanel setFrameOrigin:windowPoint];
2810     
2811     [self initBCreateList];
2812     [createPanel makeKeyAndOrderFront:nil];
2813 }
2814
2815 -(IBAction)pushSummon:(id)sender{menuDisplayFlag = false;
2816     [menuPanel close];
2817     summonFlag = true;
2818     moveFlag = false;
2819     
2820     windowPoint.x = [mapWindow frame].origin.x;
2821     windowPoint.y = [mapWindow frame].origin.y;
2822     [summonPanel setFrameOrigin:windowPoint];
2823     
2824     [self initCSummonList];
2825     [summonPanel makeKeyAndOrderFront:nil];
2826 }
2827
2828
2829
2830 -(void)initStatusWindow{
2831
2832     U = UTop;
2833
2834     [STIV setImage:Uselected->C.imgb];
2835     [STnameTF setStringValue:Uselected->C.name];
2836     [STclassTF setStringValue:Uselected->C.nameClass];
2837     [SThpTF setStringValue:[NSString stringWithFormat:@"HP %g/%g", Uselected->C.S_C.HP, Uselected->C.S_M.HP]];
2838     [STmpTF setStringValue:[NSString stringWithFormat:@"MP %g/%g", Uselected->C.S_C.MP, Uselected->C.S_M.MP]];
2839     [STatkTF setStringValue:[NSString stringWithFormat:@"ATK %g", Uselected->C.S_C.ATK]];
2840     [STdefTF setStringValue:[NSString stringWithFormat:@"DEF %g", Uselected->C.S_C.DEF]];
2841     [STcapTF setStringValue:[NSString stringWithFormat:@"CAP %g", Uselected->C.S_C.CAP]];
2842     [STacuTF setStringValue:[NSString stringWithFormat:@"ACU %g", Uselected->C.S_C.ACU]];
2843     [STevaTF setStringValue:[NSString stringWithFormat:@"EVA %g", Uselected->C.S_C.EVA]];
2844     [STstrTF setStringValue:[NSString stringWithFormat:@"STR %g", Uselected->C.S_C.STR]];
2845     [STvitTF setStringValue:[NSString stringWithFormat:@"VIT %g", Uselected->C.S_C.VIT]];
2846     [STagiTF setStringValue:[NSString stringWithFormat:@"AGI %g", Uselected->C.S_C.AGI]];
2847     [STdexTF setStringValue:[NSString stringWithFormat:@"DEX %g", Uselected->C.S_C.DEX]];
2848     [STmenTF setStringValue:[NSString stringWithFormat:@"MEN %g", Uselected->C.S_C.MEN]];
2849     [STintTF setStringValue:[NSString stringWithFormat:@"INT %g", Uselected->C.S_C.INT]];
2850     [STmelTF setStringValue:[NSString stringWithFormat:@"MEL %g", Uselected->C.S_C.MEL]];
2851     [STmisTF setStringValue:[NSString stringWithFormat:@"MIS %g", Uselected->C.S_C.MIS]];
2852     [SThitTF setStringValue:[NSString stringWithFormat:@"HIT %g", Uselected->C.S_C.HIT]];
2853     [STdodTF setStringValue:[NSString stringWithFormat:@"DOD %g", Uselected->C.S_C.DOD]];
2854     [STreaTF setStringValue:[NSString stringWithFormat:@"REA %g", Uselected->C.S_C.REA]];
2855     [STskiTF setStringValue:[NSString stringWithFormat:@"SKI %g", Uselected->C.S_C.SKI]];
2856     [STvigTF setStringValue:[NSString stringWithFormat:@"VIG %d", Uselected->C.S_C.vigor]];
2857
2858
2859
2860
2861
2862
2863
2864     U = UTop;
2865 }
2866
2867 -(IBAction)pushStatus:(id)sender{menuDisplayFlag = false;
2868     
2869     [self initStatusWindow];
2870     
2871     windowPoint.x = [mapWindow frame].origin.x;
2872     windowPoint.y = [mapWindow frame].origin.y;
2873     [STwindow setFrameOrigin:windowPoint];
2874     [STwindow makeKeyAndOrderFront:nil];
2875     
2876     
2877     
2878     [menuPanel close];
2879 }
2880
2881 -(IBAction)STsubmit:(id)sender{
2882
2883     [STwindow close];
2884 }
2885
2886 -(IBAction)pushCancel:(id)sender{menuDisplayFlag = false;
2887     moveFlag = false;
2888     attackFlag = false;
2889     summonFlag = false;
2890     [menuPanel close];
2891 }
2892 -(IBAction)pushCancelCAL:(id)sender{
2893     attackFlag = false;
2894     [atkPanel close];
2895 }
2896
2897 -(IBAction)pushCancelBCL:(id)sender{
2898     createFlag = false;
2899     [createPanel close];
2900 }
2901
2902 -(IBAction)pushCancelCSL:(id)sender{
2903     summonFlag = false;
2904     [summonPanel close];
2905 }
2906
2907 -(void)addBuildStatus{
2908     //おまんちん
2909     int omgCnt = 0;
2910     B = BTop;
2911     if(B)
2912     while (B->next) {omgCnt++;
2913         B = B->next;
2914     }
2915     if(!B){
2916         B = calloc(1, sizeof(BUILD));
2917         BTop = B;
2918     }else{
2919         
2920         B->next = calloc(1, sizeof(BUILD));
2921         B = B->next;
2922         B->next = NULL;
2923     }
2924     B->number = registerNumB;
2925     
2926     
2927     B->chipNumber = BC[buildNum[possionX][possionY]].chipNumb;
2928     B->x = possionX;
2929     B->y = possionY;
2930     B->C = BC[buildNum[possionX][possionY]];
2931     B->img = [BC[buildNum[possionX][possionY]].img retain];
2932     unitColorInitFlag = true;
2933     
2934     if(buildTeam[possionX][possionY] == 0 || buildTeam[possionX][possionY] == 1){
2935         B->team = 0;
2936         if(unitTeam[possionX][possionY] == 0){
2937             U->joinArmyFromNext = true;
2938             U->persuasion = true;
2939         }
2940     }
2941     if(buildTeam[possionX][possionY] == 2 || buildTeam[possionX][possionY] == 3){
2942         B->team = 2;
2943     }
2944     if(buildTeam[possionX][possionY] == 4 || buildTeam[possionX][possionY] == 5){
2945         B->team = 1;
2946     }
2947     if(buildTeam[possionX][possionY] == -1){
2948         B->team = -1;
2949
2950     }
2951     
2952     registerNumB++;
2953     B = BTop;
2954 }
2955
2956
2957 -(void)addUnitStatus{
2958     int omgCnt = 0;
2959     UTop = U;
2960     while (U->next) {omgCnt++;
2961         U = U->next;
2962     }
2963     U->next = calloc(1, sizeof(UNIT));
2964     U = U->next;
2965     U->next = NULL;
2966     if(omgCnt == 0) UTop = U;
2967     U->number = registerNum;
2968     
2969     for(int i = 0;i < UCN;i++){
2970         if([U->C.nameID isEqualToString:UC[i].nameID])
2971             U->chipNumber = i;
2972     }
2973     
2974     U->chipNumber = unitNum[possionX][possionY];
2975     U->chipNumberL = loadNum[possionX][possionY];
2976     U->C.chipNumb = unitNum[possionX][possionY];
2977     U->CL.chipNumb = loadNum[possionX][possionY];
2978     U->x = possionX;
2979     U->y = possionY;
2980     U->C = *BRU;
2981                 if(unitTeam[possionX][possionY] == 0 || unitTeam[possionX][possionY] == 1){
2982                     U->team = 0;
2983                     if(unitTeam[possionX][possionY] == 1){
2984                         U->joinArmyFromNext = true;
2985                         U->persuasion = true;
2986                     }
2987                     
2988                     if(MF[MFselectedRow+1].MS.playerSet1 == 2){
2989                         U->CPU = true;
2990                     }
2991                 }
2992                 if(unitTeam[possionX][possionY] == 2 || unitTeam[possionX][possionY] == 3){
2993                     U->team = 2;
2994                     if(unitTeam[possionX][possionY] == 3){
2995                         U->joinArmyFromNext = true;
2996                         U->persuasion = true;
2997                     }
2998                     
2999                     if(MF[MFselectedRow+1].MS.playerSet2 == 2){
3000                         U->CPU = true;
3001                     }
3002                 }
3003                 if(unitTeam[possionX][possionY] == 4 || unitTeam[possionX][possionY] == 5){
3004                     U->team = 1;
3005                     if(unitTeam[possionX][possionY] == 5){
3006                         U->joinArmyFromNext = true;
3007                         U->persuasion = true;
3008                     }
3009                     U->CPU = true;
3010                 }
3011                 if(unitTeam[possionX][possionY] == -1){
3012                     U->team = -1;
3013                     if(unitTeam[possionX][possionY] == 0){
3014                         U->joinArmyFromNext = false;
3015                         U->persuasion = true;
3016                     }
3017                     U->CPU = true;
3018                 }
3019
3020     
3021                 [self SetUnitStatus:unitNum[possionX][possionY]];
3022     registerNum++;
3023     U = UTop;
3024 }
3025
3026 -(void)addSummonStatus{
3027     
3028     int omgCnt = 0;
3029     UTop = U;
3030     while (U->next) {omgCnt++;
3031         U = U->next;
3032     }
3033     U->next = calloc(1, sizeof(UNIT));
3034     U = U->next;
3035     U->next = NULL;
3036     if(omgCnt == 0) UTop = U;
3037     
3038     
3039     U->x = possionX;
3040     U->y = possionY;
3041
3042     U->C = CSLUC;
3043     if(unitTeam[CSLU->x][CSLU->y] == 0 || unitTeam[CSLU->x][CSLU->y] == 1){
3044         U->team = 0;
3045         if(unitTeam[CSLU->x][CSLU->y] == 1){
3046             U->joinArmyFromNext = true;
3047             U->persuasion = true;
3048         }
3049     }
3050     if(unitTeam[CSLU->x][CSLU->y] == 2 || unitTeam[CSLU->x][CSLU->y] == 3){
3051         U->team = 2;
3052         if(unitTeam[CSLU->x][CSLU->y] == 3){
3053             U->joinArmyFromNext = true;
3054             U->persuasion = true;
3055         }
3056     }
3057     if(unitTeam[CSLU->x][CSLU->y] == 4 || unitTeam[CSLU->x][CSLU->y] == 5){
3058         U->team = 1;
3059         if(unitTeam[CSLU->x][CSLU->y] == 5){
3060             U->joinArmyFromNext = true;
3061             U->persuasion = true;
3062         }
3063     }
3064     if(unitTeam[CSLU->x][CSLU->y] == -1){
3065         U->team = -1;
3066         if(unitTeam[CSLU->x][CSLU->y] == 0){
3067             U->joinArmyFromNext = false;
3068             U->persuasion = true;
3069         }
3070     }
3071     
3072     [self SetUnitStatus:unitNum[possionX][possionY]];
3073     
3074     for(int i = 0;i < UCN;i++){
3075         if([U->C.nameID isEqualToString:UC[i].nameID])
3076             U->chipNumber = i;
3077     }
3078     for(int i = 0;i < LCN;i++){
3079         if([U->CL.nameID isEqualToString:LC[i].nameID])
3080             U->chipNumberL = i;
3081     }
3082     for(int i = 0;i < UCN;i++){
3083         if([U->C.nameID isEqualToString:UC[i].nameID])
3084             U->C.chipNumb = i;
3085     }
3086     for(int i = 0;i < LCN;i++){
3087         if([U->CL.nameID isEqualToString:LC[i].nameID])
3088             U->CL.chipNumb = i;
3089     }
3090     
3091     registerNum++;
3092     U = UTop;
3093
3094 }
3095
3096 -(void)initUnitStatus{
3097     registerNum = 1;
3098     U = NULL;
3099     UTop = NULL;
3100     for(int i=1;i <= chipHeight;i++){
3101         for(int j=1;j<= chipWidth;j++){
3102             if(unitNum[j][i] >= 0 || loadNum[j][i] >= 0){
3103                 if(registerNum == 1){
3104                     U = calloc(1, sizeof(UNIT));
3105                     UTop = U;
3106                 }
3107                 if(registerNum > 1)
3108                     U = U->next;
3109                 U->x = j;
3110                 U->y = i;
3111                 U->number = registerNum;
3112                 U->chipNumber = unitNum[j][i];
3113                 U->chipNumberL = loadNum[j][i];
3114                 U->C.chipNumb = U->chipNumber;
3115                 U->CL.chipNumb = U->chipNumberL;
3116                 
3117                 registerNum++;
3118                 if(unitTeam[j][i] == 0 || unitTeam[j][i] == 1){
3119                     U->team = 0;
3120                     if(unitTeam[j][i] == 1){
3121                         U->joinArmyFromNext = true;
3122                         U->persuasion = true;
3123                     }
3124                     if(MF[MFselectedRow+1].MS.playerSet1 == 2)
3125                         U->CPU = true;
3126                 }
3127                 if(unitTeam[j][i] == 2 || unitTeam[j][i] == 3){
3128                     U->team = 2;
3129                     if(unitTeam[i][j] == 2){
3130                         U->joinArmyFromNext = true;
3131                         U->persuasion = true;
3132                     }
3133                     if(MF[MFselectedRow+1].MS.playerSet2 == 2)
3134                         U->CPU = true;
3135                 }
3136                 if(unitTeam[j][i] == 4 || unitTeam[j][i] == 5){
3137                     U->team = 1;
3138                     if(unitTeam[j][i] == 5){
3139                         U->joinArmyFromNext = true;
3140                         U->persuasion = true;
3141                     }
3142                     U->CPU = true;
3143                 }
3144                 if(unitTeam[j][i] == -1){
3145                     U->team = -1;
3146                     if(unitTeam[j][i] == -1){
3147                         U->joinArmyFromNext = false;
3148                         U->persuasion = true;
3149                     }
3150                     U->CPU = true;
3151                 }
3152                 if(unitNum[j][i] >= 0) [self SetUnitStatus:unitNum[j][i]];
3153                 if(loadNum[j][i] >= 0) [self SetUnitStatus2:loadNum[j][i]];
3154                 
3155                 U->next = calloc(1, sizeof(UNIT));
3156                 U->atkRange = 0;
3157                 
3158                 U->ix = U->x;
3159                 U->iy = U->y;
3160                 U->iz = 0;
3161                 
3162                 UNIT *Ucrnt = U;
3163                 
3164                 U = UTop;
3165                 while(U){
3166                     if(Ucrnt->x == U->x && Ucrnt->y == U->y){
3167                         Ucrnt->iz++;
3168                     }
3169                     U = U->next;
3170                 }
3171                 
3172                 U = Ucrnt;
3173             }
3174         
3175         }
3176     }
3177     
3178     if(U) U->next = NULL;
3179     
3180     U = UTop;
3181 }
3182
3183 -(void)initBuildStatus{
3184     registerNumB = 1;
3185     B = NULL;
3186     BTop = NULL;
3187     for(int i=1;i <= chipHeight;i++){
3188         for(int j=1;j<= chipWidth;j++){
3189             if(buildNum[j][i] >= 0){
3190                 if(registerNumB == 1){
3191                     B = calloc(1, sizeof(BUILD));
3192                     BTop = B;
3193                 }
3194                 if(registerNumB > 1)
3195                     B = B->next;
3196                 B->x = j;
3197                 B->y = i;
3198                 B->number = registerNumB;
3199                 B->chipNumber = buildNum[j][i];
3200                 B->makeLv = 1;
3201                 registerNumB++;
3202                 if(buildTeam[j][i] == 0 || buildTeam[j][i] == 1){
3203                     B->team = 0;
3204
3205                 }
3206                 if(buildTeam[j][i] == 2 || buildTeam[j][i] == 3){
3207                     B->team = 2;
3208
3209                 }
3210                 if(buildTeam[j][i] == 4 || buildTeam[j][i] == 5){
3211                     B->team = 1;
3212
3213                 }
3214                 if(buildTeam[j][i] == -1){
3215                     B->team = -1;
3216
3217                 }
3218                 //[self SetUnitStatus:unitNum[j][i]];
3219                 
3220                 B->C = BC[buildNum[j][i]];
3221                 
3222                 B->next = calloc(1, sizeof(BUILD));
3223
3224             }
3225             
3226         }
3227     }
3228     if(B) B->next = NULL;
3229     B = BTop;
3230     
3231 }
3232
3233 -(void)SetUnitStatus:(int)UN{
3234     
3235     U->C = UC[UN];
3236     U->C.S_C.vigor = 100;
3237     
3238     ATTACK *Atop;
3239     ATTACK *AtopE1;
3240     ATTACK *AtopE2;
3241     ATTACK *UAtop;
3242     Atop = UC[UN].A;
3243     AtopE1 = UC[UN].eHandL.A;
3244     AtopE2 = UC[UN].eHandR.A;
3245     U->C.A = calloc(1, sizeof(ATTACK));
3246     UAtop = U->C.A;
3247     
3248     bool ow1 = false;
3249     bool ow2 = false;
3250     
3251     while(UC[UN].eHandR.A != NULL){ow1 = true;
3252         *U->C.A = *UC[UN].eHandR.A;
3253         U->C.A->next = calloc(1, sizeof(ATTACK));
3254         U->C.A->next->next = NULL;
3255         if(UC[UN].eHandR.A->next != NULL) U->C.A = U->C.A->next;
3256         UC[UN].eHandR.A = UC[UN].eHandR.A->next;
3257         U->C.attackListNum++;
3258     }
3259     UC[UN].eHandR.A = AtopE2;
3260     
3261     
3262     if(ow1) {
3263         U->C.A = U->C.A->next;
3264         ow1 = false;
3265     }
3266     while(UC[UN].eHandL.A != NULL){ow2 = true;
3267         *U->C.A = *UC[UN].eHandL.A;
3268         U->C.A->next = calloc(1, sizeof(ATTACK));
3269         U->C.A->next->next = NULL;
3270         if(UC[UN].eHandL.A->next != NULL) U->C.A = U->C.A->next;
3271         UC[UN].eHandL.A = UC[UN].eHandL.A->next;
3272         U->C.attackListNum++;
3273     }
3274     UC[UN].eHandL.A = AtopE1;
3275     
3276     if(ow2) {
3277         U->C.A = U->C.A->next;
3278         ow2 = false;
3279     }
3280     while(UC[UN].A != NULL){
3281         *U->C.A = *UC[UN].A;
3282         U->C.A->next = calloc(1, sizeof(ATTACK));
3283         U->C.A->next->next = NULL;
3284         if(UC[UN].A->next != NULL) U->C.A = U->C.A->next;
3285         UC[UN].A = UC[UN].A->next;
3286     }
3287     U->C.A->next = NULL;
3288     UC[UN].A = Atop;
3289     U->C.A = UAtop;
3290     if(U->C.A) if(!U->C.A->name)
3291         U->C.A = NULL;
3292     
3293 }
3294
3295 -(void)SetUnitStatus2:(int)UN{
3296     
3297     U->CL = LC[UN];
3298     
3299     ATTACK *Atop;
3300     ATTACK *UAtop;
3301     Atop = LC[UN].A;
3302     U->CL.A = calloc(1, sizeof(ATTACK));
3303     UAtop = U->CL.A;
3304     while(LC[UN].A != NULL){
3305         *U->CL.A = *LC[UN].A;
3306         U->CL.A->next = calloc(1, sizeof(ATTACK));
3307         U->CL.A->next->next = NULL;
3308         if(LC[UN].A->next != NULL) U->CL.A = U->CL.A->next;
3309         LC[UN].A = LC[UN].A->next;
3310     }
3311     U->CL.A->next = NULL;
3312     LC[UN].A = Atop;
3313     U->CL.A = UAtop;
3314     
3315 }
3316
3317
3318 -(void)initCAttackList2{
3319     crCAL = 0;
3320     
3321     CAttackListMA = [NSMutableArray new];
3322     
3323     [self willChangeValueForKey:@"CAttackListMA"];
3324     [CAttackListMA removeAllObjects];
3325     [self didChangeValueForKey:@"CAttackListMA"];
3326     
3327     U = UTop;
3328     if(!battleSet2PushedFlag){
3329         ATTACK *Atop;
3330         while (!(AUN[1] == U->number)) {
3331             U = U->next;
3332         }
3333         Atop = U->CL.A;
3334         for(int i = 0;i < U->CL.attackListNum;i++){
3335             if(!U->CL.A) break;
3336             NSMutableDictionary* dict = [NSMutableDictionary new];
3337             [dict setValue:[NSString stringWithFormat:@"%@", U->CL.A->name] forKey:@"name"];
3338             [dict setValue:[NSString stringWithFormat:@"%g", U->CL.A->totalD] forKey:@"atk"];
3339             if(U->CL.A->rangeA != U->CL.A->rangeB){
3340                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->CL.A->rangeA, U->CL.A->rangeB] forKey:@"range"];
3341             }else{
3342                 [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->rangeA] forKey:@"range"];
3343             }
3344             [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->hitPercent] forKey:@"hit"];
3345             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3346             
3347             [self willChangeValueForKey:@"CAttackListMA"];
3348             [CAttackListMA addObject:dict];
3349             [self didChangeValueForKey:@"CAttackListMA"];
3350             
3351             U->CL.A = U->CL.A->next;
3352         }
3353         
3354         U->CL.A = Atop;
3355     }else{
3356         ATTACK *Atop;
3357         while (!(DUN[1] == U->number)) {
3358             U = U->next;
3359         }
3360         Atop = U->CL.A;
3361         for(int i = 0;i < U->CL.attackListNum;i++){
3362             
3363             if(!U->CL.A){
3364                 U->CL.attackListNum = i;
3365                 break;
3366             }
3367             NSMutableDictionary* dict = [NSMutableDictionary new];
3368             [dict setValue:[NSString stringWithFormat:@"%@", U->CL.A->name] forKey:@"name"];
3369             [dict setValue:[NSString stringWithFormat:@"%g", U->CL.A->totalD] forKey:@"atk"];
3370             if(U->CL.A->rangeA != U->CL.A->rangeB){
3371                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->CL.A->rangeA, U->CL.A->rangeB] forKey:@"range"];
3372             }else{
3373                 [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->rangeA] forKey:@"range"];
3374             }
3375             [dict setValue:[NSString stringWithFormat:@"%d", U->CL.A->hitPercent] forKey:@"hit"];
3376             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3377             
3378             [self willChangeValueForKey:@"CAttackListMA"];
3379             [CAttackListMA addObject:dict];
3380             [self didChangeValueForKey:@"CAttackListMA"];
3381             
3382             U->CL.A = U->CL.A->next;
3383         }
3384         
3385         U->CL.A = Atop;
3386         
3387     }
3388     U = UTop;
3389     
3390     [CAttackListAC setSelectionIndex:crCAL];
3391     
3392     [self initCAttackSelect2];
3393
3394
3395
3396
3397 }
3398
3399 -(void)initCAttackList{
3400     crCAL = 0;
3401     CAttackListMA = [NSMutableArray new];
3402     
3403     [self willChangeValueForKey:@"CAttackListMA"];
3404     [CAttackListMA removeAllObjects];
3405     [self didChangeValueForKey:@"CAttackListMA"];
3406
3407     U = UTop;
3408     if(!battleSet2PushedFlag){
3409         ATTACK *Atop;
3410     while (!(AUN[1] == U->number)) {
3411         U = U->next;
3412     }
3413     Atop = U->C.A;
3414         for(int i = 0;i < U->C.attackListNum;i++){
3415             if(!U->C.A) {
3416                 U->C.attackListNum = i;
3417                 break;
3418             };
3419         NSMutableDictionary* dict = [NSMutableDictionary new];
3420         [dict setValue:[NSString stringWithFormat:@"%@", U->C.A->name] forKey:@"name"];
3421         [dict setValue:[NSString stringWithFormat:@"%g", U->C.A->totalD] forKey:@"atk"];
3422         if(U->C.A->rangeA != U->C.A->rangeB){
3423             [dict setValue:[NSString stringWithFormat:@"%d-%d", U->C.A->rangeA, U->C.A->rangeB] forKey:@"range"];
3424         }else{
3425             [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->rangeA] forKey:@"range"];
3426         }
3427         [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->hitPercent] forKey:@"hit"];
3428         //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3429     
3430         [self willChangeValueForKey:@"CAttackListMA"];
3431         [CAttackListMA addObject:dict];
3432         [self didChangeValueForKey:@"CAttackListMA"];
3433         
3434         U->C.A = U->C.A->next;
3435     }
3436     
3437     U->C.A = Atop;
3438     }else{
3439         
3440         ATTACK *Atop;
3441         while (!(DUN[1] == U->number)) {
3442             U = U->next;
3443         }
3444         Atop = U->C.A;
3445         for(int i = 0;i < U->C.attackListNum;i++){
3446             NSMutableDictionary* dict = [NSMutableDictionary new];
3447             [dict setValue:[NSString stringWithFormat:@"%@", U->C.A->name] forKey:@"name"];
3448             [dict setValue:[NSString stringWithFormat:@"%g", U->C.A->totalD] forKey:@"atk"];
3449             if(U->C.A->rangeA != U->C.A->rangeB){
3450                 [dict setValue:[NSString stringWithFormat:@"%d-%d", U->C.A->rangeA, U->C.A->rangeB] forKey:@"range"];
3451             }else{
3452                 [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->rangeA] forKey:@"range"];
3453             }
3454             [dict setValue:[NSString stringWithFormat:@"%d", U->C.A->hitPercent] forKey:@"hit"];
3455             //[dict setValue:[NSString stringWithFormat:@"%d", U->C.A->bulletC] forKey:@"bullet"];
3456             
3457             [self willChangeValueForKey:@"CAttackListMA"];
3458             [CAttackListMA addObject:dict];
3459             [self didChangeValueForKey:@"CAttackListMA"];
3460             
3461             U->C.A = U->C.A->next;
3462         }
3463         
3464         U->C.A = Atop;
3465     
3466     }
3467     U = UTop;
3468     
3469     [CAttackListAC setSelectionIndex:crCAL];
3470     
3471     [self initCAttackSelect];
3472 }
3473
3474 -(void)initBCreateList{
3475     BCreateListMA = [NSMutableArray new];
3476     
3477     [self willChangeValueForKey:@"BCreateListMA"];
3478     [BCreateListMA removeAllObjects];
3479     [self didChangeValueForKey:@"BCreateListMA"];
3480     buildSkillFlag = false;
3481     
3482     U = UTop;
3483     SKILL *Stop;
3484     while (!(AUN[1] == U->number)) {
3485         U = U->next;
3486     }
3487     Stop = U->C.S;
3488     if(!U->C.S) {
3489         U = UTop;
3490         return;
3491     }
3492     while (U->C.S->type != 1 && U->C.S->next) {
3493         U->C.S = U->C.S->next;
3494     }
3495     if(U->C.S->type != 1) {
3496         U->C.S = Stop;
3497         U = UTop;
3498         return;
3499     }
3500     for(int i = 0;U->C.S->list[i] > 0;i++){
3501         NSMutableDictionary* dict = [NSMutableDictionary new];
3502         [dict setValue:[NSString stringWithFormat:@"%@", BC[U->C.S->list[i]-1].name] forKey:@"name"];
3503         [dict setValue:[NSString stringWithFormat:@"資%d 食%d 金%d",
3504                         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"];
3505         [dict setValue:BC[U->C.S->list[i]-1].img forKey:@"img"];
3506         
3507         [self willChangeValueForKey:@"BCreateListMA"];
3508         [BCreateListMA addObject:dict];
3509         [self didChangeValueForKey:@"BCreateListMA"];
3510         
3511         buildSkillFlag = true;
3512     }
3513     U->C.S = Stop;
3514     U = UTop;
3515 }
3516
3517 -(void)initCSummonList{
3518     CSummonListMA = [NSMutableArray new];
3519     
3520     [self willChangeValueForKey:@"CSummonListMA"];
3521     [CSummonListMA removeAllObjects];
3522     [self didChangeValueForKey:@"CSummonListMA"];
3523     
3524     summonSkillFlag = false;
3525     
3526     U = UTop;
3527     SKILL *Stop;
3528     while (!(AUN[1] == U->number)) {
3529         U = U->next;
3530     }
3531     Stop = U->C.S;
3532     if(!U->C.S) {
3533         U = UTop;
3534         return;
3535     }
3536     while (U->C.S->type != 2 && U->C.S->next) {
3537         U->C.S = U->C.S->next;
3538     }
3539     if(U->C.S->type != 2) {
3540         U->C.S = Stop;
3541         U = UTop;
3542         return;
3543     }
3544     for(int i = 0;U->C.S->list[i] > 0;i++){
3545         NSMutableDictionary* dict = [NSMutableDictionary new];
3546         [dict setValue:[NSString stringWithFormat:@"%@", UC[U->C.S->list[i]-1].nameClass] forKey:@"name"];
3547         [dict setValue:[NSString stringWithFormat:@"%g", UC[U->C.S->list[i]-1].S_M.HP] forKey:@"HP"];
3548         [dict setValue:[NSString stringWithFormat:@"%g", U->C.S->cost[i]] forKey:@"cost"];
3549         [dict setValue:UC[U->C.S->list[i]-1].img forKey:@"img"];
3550         
3551         [self willChangeValueForKey:@"CSummonListMA"];
3552         [CSummonListMA addObject:dict];
3553         [self didChangeValueForKey:@"CSummonListMA"];
3554         
3555         summonSkillFlag = true;
3556     }
3557     U->C.S = Stop;
3558     U = UTop;
3559     
3560 }
3561
3562
3563 -(void)AttackDisplay{
3564
3565     if(battleRdy) return;
3566     
3567     U = UTop;
3568     while (!(AUN[1] == U->number)) {
3569         U = U->next;
3570     }
3571     [bplayer1 setImage:U->C.imgb];
3572     [bplayer1 setImageScaling:NSScaleToFit];
3573     [nplayer1 setStringValue:U->C.name];
3574     [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3575     [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
3576     [iplayer1 setImage:MC[chipNum[U->x][U->y]].img];
3577     [mplayer1 setStringValue:MC[chipNum[U->x][U->y]].name];
3578     [rplayer1 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U->x][U->y]].dmgfix]];
3579     
3580     U = UTop;
3581     
3582     
3583     U = UTop;
3584     while (!(DUN[1] == U->number)) {
3585         U = U->next;
3586     }
3587     [bplayer2 setImage:U->C.imgb];
3588     [bplayer1 setImageScaling:NSScaleToFit];
3589     [nplayer2 setStringValue:U->C.name];
3590     [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3591     [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
3592     [iplayer2 setImage:MC[chipNum[U->x][U->y]].img];
3593     [mplayer2 setStringValue:MC[chipNum[U->x][U->y]].name];
3594     [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U->x][U->y]].dmgfix]];
3595     U = UTop;
3596     
3597     [self AttackDisplay2];
3598     
3599     messageProcess = 0;
3600     [battleDialog setStringValue:@"攻撃開始!"];
3601     
3602     battleRdy = true;
3603
3604 }
3605
3606 -(void)AttackDisplay2{
3607
3608     U = UTop;
3609     
3610     while (!(DUN[1] == U->number)) {
3611         U = U->next;
3612     }
3613     U2 = U;
3614     U = UTop;
3615     while (!(AUN[1] == U->number)) {
3616         U = U->next;
3617     }
3618     
3619     
3620     if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){U = UTop;
3621     
3622         U = UTop;
3623         while (!(AUN[1] == U->number)) {
3624             U = U->next;
3625         }
3626         [bplayer1 setImage:U->CL.imgb];
3627         [bplayer1 setImageScaling:NSScaleToFit];
3628         [nplayer1 setStringValue:U->CL.name];
3629         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
3630         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
3631         
3632         U = UTop;
3633         
3634         
3635         U = UTop;
3636         while (!(DUN[1] == U->number)) {
3637             U = U->next;
3638         }
3639         [bplayer2 setImage:U->CL.imgb];
3640         [bplayer1 setImageScaling:NSScaleToFit];
3641         [nplayer2 setStringValue:U->CL.name];
3642         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
3643         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
3644         U = UTop;
3645     
3646     
3647     }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){U = UTop;
3648         U = UTop;
3649         while (!(AUN[1] == U->number)) {
3650             U = U->next;
3651         }
3652         [bplayer1 setImage:U->CL.imgb];
3653         [bplayer1 setImageScaling:NSScaleToFit];
3654         [nplayer1 setStringValue:U->CL.name];
3655         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
3656         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
3657         
3658         U = UTop;
3659         
3660         
3661         U = UTop;
3662         while (!(DUN[1] == U->number)) {
3663             U = U->next;
3664         }
3665         [bplayer2 setImage:U->C.imgb];
3666         [bplayer1 setImageScaling:NSScaleToFit];
3667         [nplayer2 setStringValue:U->C.name];
3668         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3669         [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
3670         U = UTop;
3671         
3672         
3673         
3674         
3675     }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){U = UTop;
3676         U = UTop;
3677         while (!(AUN[1] == U->number)) {
3678             U = U->next;
3679         }
3680         [bplayer1 setImage:U->C.imgb];
3681         [bplayer1 setImageScaling:NSScaleToFit];
3682         [nplayer1 setStringValue:U->C.name];
3683         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3684         [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
3685         
3686         U = UTop;
3687         
3688         
3689         U = UTop;
3690         while (!(DUN[1] == U->number)) {
3691             U = U->next;
3692         }
3693         [bplayer2 setImage:U->CL.imgb];
3694         [bplayer1 setImageScaling:NSScaleToFit];
3695         [nplayer2 setStringValue:U->CL.name];
3696         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
3697         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
3698         U = UTop;
3699     }
3700
3701
3702     U = UTop;
3703 }
3704
3705 -(void)setBattlePanel{
3706     //おまんちん
3707     U = UTop;
3708     
3709     while (!(DUN[1] == U->number)) {
3710         U = U->next;
3711     }
3712     U2 = U;
3713     U = UTop;
3714     while (!(AUN[1] == U->number)) {
3715         U = U->next;
3716     }
3717     
3718     if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
3719         U = UTop;
3720         [self setBattlePanelT2];
3721         return;
3722     }else if(U->chipNumberL >= 0 && U2->chipNumberL <= 0){
3723         U = UTop;
3724         [self setBattlePanelT3];
3725         return;
3726     }else if(U->chipNumberL <= 0 && U2->chipNumberL >= 0){
3727         U = UTop;
3728         [self setBattlePanelT4];
3729         return;
3730     }
3731     
3732     U = UTop;
3733     while (!(AUN[1] == U->number)) {
3734         U = U->next;
3735     }
3736     
3737     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 || MF[MFselectedRow+1].MS.playerSet2 == 2)){
3738         cpuModeBATTLEflag = false;
3739     int mostDmg = 0;
3740     int mostDmg2 = 0;
3741     int mostHit = 0;
3742     int mostNum = 0;
3743     int num = 0;
3744     ATTACK *aTop2 = U->C.A;
3745     int mpCost = 0;
3746     if(U->C.A)
3747         if(!U->C.A->D){
3748             U->C.A = NULL;
3749             aTop2 = U->C.A;
3750         }
3751         
3752         
3753         
3754     while(U->C.A){
3755         
3756         double urSupposedToGet;
3757         
3758         if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
3759         
3760         double asItIs;
3761         
3762         if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
3763         
3764         
3765         double oopsIsRight = 0;
3766         
3767         if(U->C.A){
3768             if(U->C.A->melee){
3769                 oopsIsRight = U->C.S_C.MEL;
3770             }else
3771                 oopsIsRight = U->C.S_C.MIS;
3772         }
3773         oopsIsRight = oopsIsRight/100;
3774         
3775         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
3776         
3777         if(!U2->C.aura && U->C.A->D){
3778             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
3779                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
3780             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
3781                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
3782             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
3783                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
3784             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
3785                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
3786             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
3787                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
3788             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
3789         }else if(U->C.A->D){
3790             double val = val = 1/log(3+U2->C.S_C.MP/64);
3791             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
3792                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
3793             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
3794                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
3795             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
3796                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
3797             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
3798                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
3799             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
3800                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
3801             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
3802         }
3803         double val2 = log(3+U2->C.S_C.MP/64);
3804         if(U->C.aura){
3805             mostDmg2 = mostDmg2*val2;
3806         }
3807         if(U->C.A->D){
3808         if(U->C.A->D->fix == 2){
3809             mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
3810             
3811         }else if(U->C.A->D->fix == 1){
3812             mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
3813             
3814         }else if(U->C.A->D->fix == 0){
3815             mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
3816         }}
3817         
3818         U2A = U->C.A;
3819         costVIG = U->C.A->vigor;
3820         UNIT *oops = U;
3821         U = U2;
3822         mostDmg2 = [self dmgResist:mostDmg2];
3823         
3824         //NSLog(@"crCAL1 %d", crCAL1);
3825         if(mostDmg2 < 0) mostDmg2 = 1;
3826         U = oops;
3827         if(U->C.A->D)
3828         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){
3829             
3830             mostDmg = mostDmg2;
3831             
3832             //mostDmg = U->C.A->totalD;
3833             mostNum = num;
3834         }
3835         if(U->C.A->D)
3836         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){
3837             //mostDmg = U->C.A->totalD;
3838             mostHit = U->C.A->hitPercent;
3839             mostNum = num;
3840         }
3841         U->C.A = U->C.A->next;
3842         num++;
3843     }
3844     U->C.A = aTop2;
3845         
3846         for(int i = 0;i < mostNum;i++){
3847             U->C.A = U->C.A->next;
3848         }
3849         if(U->C.A->extent == 0 && mostNum > 0 && !CPUmostDmgChoice){
3850             
3851             U->C.A = aTop2;
3852             crCAL1 = 0;
3853             for(int i = 0;i < mostNum;i++){
3854                 U->C.A = U->C.A->next;
3855                 crCAL1++;
3856             }
3857         }
3858         else{
3859         U->C.A = aTop2;
3860             for(int i = 0;i < crCAL1;i++){
3861                 U->C.A = U->C.A->next;
3862             }
3863         }
3864         
3865         CPUmostDmgChoice = false;
3866
3867    if(U->C.A){
3868         mostNumSub = mostNum;
3869         
3870        
3871         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
3872        costVIG = U->C.A->vigor;
3873        
3874         if(U->C.A->rangeA <= unitBreak->atkRange && U->C.A->rangeB >= unitBreak->atkRange
3875            && mpCost <= U->C.S_C.MP && costVIG <= U->C.S_C.vigor){
3876             
3877         }else{
3878         
3879         }
3880         
3881     }U->C.A = aTop2;
3882     }
3883     U = UTop;
3884
3885     while (!(AUN[1] == U->number)) {
3886         U = U->next;
3887     }
3888     U2 = U;
3889     
3890     ATTACK *aTop = U->C.A;
3891     ATTACK *u2A;
3892     
3893     for(int i = 0;i < crCAL1;i++){
3894         U->C.A = U->C.A->next;
3895     }
3896     
3897     //NSLog(@"%@", U->C.A->name);
3898     
3899     if(battleSet1Flag){
3900         U->C.A = aTop;
3901         for (int i = 0;i < crCAL1;i++) {
3902             U->C.A = U->C.A->next;
3903         }
3904         
3905     }
3906     
3907     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
3908     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3909     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
3910     //NSLog(@"crCAL1 %d", crCAL1);
3911     if(U->C.A){
3912         [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
3913         
3914     }
3915     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
3916     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
3917     double oops = U->C.S_C.HP/U->C.S_M.HP*100;
3918     [combatLHP1 setIntValue:(int)oops];
3919     oops = U->C.S_C.MP/U->C.S_M.MP*100;
3920     [combatLMP1 setIntValue:(int)oops];
3921     
3922     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
3923     //NSLog(@"mostNumSub %d crCAL1 %d", mostNumSub, crCAL1);
3924     hitFix = U->C.A->hitPercent;
3925     
3926     u2A = U->C.A;
3927     U->C.A = aTop;
3928     
3929     if(battleDef1Flag){
3930         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
3931         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3932         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
3933         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
3934         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
3935         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
3936         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
3937     }
3938     if(battleDod1Flag){
3939         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
3940         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
3941         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
3942         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
3943         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
3944         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
3945         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
3946
3947     }
3948     
3949     
3950     
3951     
3952     
3953     
3954     
3955     U = UTop;
3956     while (!(DUN[1] == U->number)) {
3957         U = U->next;
3958     }
3959     
3960     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
3961     
3962     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
3963     if(hi < 0) hi = 0;
3964     
3965     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
3966
3967     if(battleDod2Flag) hit = hit / 2;
3968     hit = floor(hit);
3969     
3970     if(hit > 100) hit = 100;
3971     if(hit < 0) hit = 0;
3972     
3973     if(u2A->D->sort == 1){
3974         hit = 100;
3975     }
3976     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
3977     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
3978     
3979     
3980     
3981     int mostDmg = 0;
3982     int mostDmg2 = 0;
3983     int mostHit = 0;
3984     int mostNum = 0;
3985     int num = 0;
3986     ATTACK *aTop2 = U->C.A;
3987     int mpCost = 0;
3988
3989     
3990     while(U->C.A){
3991         
3992         double urSupposedToGet;
3993         
3994         if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
3995         
3996         double asItIs;
3997         if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
3998         
3999         double oopsIsRight = 0;
4000         
4001         if(U->C.A){
4002             if(U->C.A->melee){
4003                 oopsIsRight = U->C.S_C.MEL;
4004             }else
4005                 oopsIsRight = U->C.S_C.MIS;
4006         }
4007         oopsIsRight = oopsIsRight/100;
4008         
4009         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4010         
4011         if(!U2->C.aura && U->C.A->D){
4012             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
4013                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4014             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
4015                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4016             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
4017                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4018             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
4019                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4020             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
4021                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
4022             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
4023         }else if(U->C.A->D){
4024             double val = val = 1/log(3+U2->C.S_C.MP/64);
4025             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
4026                                                  - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4027             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
4028                                                  - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4029             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
4030                                                  - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4031             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
4032                                                  - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4033             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
4034                                                  - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
4035             if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
4036         }
4037         double val2 = log(3+U2->C.S_C.MP/64);
4038         if(U->C.aura){
4039             mostDmg2 = mostDmg2*val2;
4040         }
4041         if(U->C.A->D){
4042         if(U->C.A->D->fix == 2){
4043             mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
4044             
4045         }else if(U->C.A->D->fix == 1){
4046             mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
4047             
4048         }else if(U->C.A->D->fix == 0){
4049             mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
4050         }}
4051         U2A = U->C.A;
4052         
4053         UNIT *oops = U;
4054         U = U2;
4055         mostDmg2 = [self dmgResist:mostDmg2];
4056         U = oops;
4057         
4058         costVIG = U->C.A->vigor;
4059
4060         if(U->C.A->D)
4061         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){
4062             
4063             mostDmg = mostDmg2;
4064             
4065             //mostDmg = U->C.A->totalD;
4066             mostNum = num;
4067         }
4068         if(U->C.A->D)
4069         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){
4070             //mostDmg = U->C.A->totalD;
4071             mostHit = U->C.A->hitPercent;
4072             mostNum = num;
4073         }
4074         U->C.A = U->C.A->next;
4075         num++;
4076     }
4077     
4078    
4079     
4080     U->C.A = aTop2;
4081     if(U->C.A){
4082     mostNumSub = mostNum;
4083     
4084     for(int i = 0;i < mostNum;i++){
4085         U->C.A = U->C.A->next;
4086     }
4087     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4088     
4089         
4090         costVIG = U->C.A->vigor;
4091         
4092
4093     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){
4094         
4095     }else while(U->C.A){
4096         U->C.A = U->C.A->next;
4097     }
4098     
4099     }
4100     
4101     
4102     
4103     if(battleSet2Flag){
4104             U->C.A = aTop2;
4105         //NSLog(@"%@", U->C.name);
4106         for (int i = 0;i < crCAL2;i++) {
4107             U->C.A = U->C.A->next;
4108         }
4109     }
4110     
4111     
4112     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4113     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4114     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4115     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4116     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4117     double oops2 = U->C.S_C.HP/U->C.S_M.HP*100;
4118     [combatLHP2 setIntValue:(int)oops2];
4119     oops2 = U->C.S_C.MP/U->C.S_M.MP*100;
4120     [combatLMP2 setIntValue:(int)oops2];
4121     
4122     bool counter;
4123     int mpCost2 = 0;
4124     if(U->C.A){
4125         mpCost2 = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4126         costVIG = U->C.A->vigor;
4127         
4128     }
4129     if(U->C.A && U->C.A->D){
4130     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){
4131         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
4132         hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
4133         hitFix = U->C.A->hitPercent;
4134         counter = true;
4135     }else if(u2A->D->sort == 1 || !U->C.A || U->C.A->D->sort == 1){
4136         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4137     }
4138     }else{
4139         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4140     }
4141     
4142     U->C.A = aTop2;
4143     
4144     if(battleDef2Flag){
4145         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4146         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4147         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4148         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4149         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
4150         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4151         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4152     }
4153     
4154     if(battleDod2Flag){
4155         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4156         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4157         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4158         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4159         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4160         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4161         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4162         
4163     }
4164     U = UTop;
4165     while (!(DUN[1] == U->number)) {
4166         U = U->next;
4167     }
4168     U2 = U;
4169     
4170     U = UTop;
4171     while (!(AUN[1] == U->number)) {
4172         U = U->next;
4173     }
4174     
4175     if(counter){
4176         
4177         double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
4178         
4179         
4180         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
4181         if(hi < 0) hi = 0;
4182         
4183         hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
4184         if(battleDod1Flag) hit /= 2;
4185         hit = floor(hit);
4186         
4187         if(hit > 100) hit = 100;
4188         if(hit < 0) hit = 0;
4189         
4190         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4191         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4192         
4193     }else{
4194         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4195     }
4196     
4197     U = UTop;
4198     
4199     if(CPUAttackSubmitFlag){
4200         if(unitCPUAttackFlag){
4201             [battleCancelBtn setEnabled:NO];
4202             [battleCancelBtn setTransparent:YES];
4203         }else{
4204             [battleCancelBtn setEnabled:YES];
4205             [battleCancelBtn setTransparent:NO];
4206         }
4207     }
4208     
4209     U = UTop;
4210     while (!(AUN[1] == U->number)) {
4211         U = U->next;
4212     }
4213     
4214     if(U->CPU){
4215         [battleAttackBtn1 setEnabled:NO];
4216         [battleAttackBtn1 setTransparent:YES];
4217         [battleGuardBtn1 setEnabled:NO];
4218         [battleGuardBtn1 setTransparent:YES];
4219         [battleDodgeBtn1 setEnabled:NO];
4220         [battleDodgeBtn1 setTransparent:YES];
4221     }else{
4222         [battleAttackBtn1 setEnabled:YES];
4223         [battleAttackBtn1 setTransparent:NO];
4224         [battleGuardBtn1 setEnabled:YES];
4225         [battleGuardBtn1 setTransparent:NO];
4226         [battleDodgeBtn1 setEnabled:YES];
4227         [battleDodgeBtn1 setTransparent:NO];
4228     }U = UTop;
4229     
4230     U = UTop;
4231     while (!(DUN[1] == U->number)) {
4232         U = U->next;
4233     }
4234     if(U->CPU){
4235         [battleAttackBtn2 setEnabled:NO];
4236         [battleAttackBtn2 setTransparent:YES];
4237         [battleGuardBtn2 setEnabled:NO];
4238         [battleGuardBtn2 setTransparent:YES];
4239         [battleDodgeBtn2 setEnabled:NO];
4240         [battleDodgeBtn2 setTransparent:YES];
4241     }else{
4242         [battleAttackBtn2 setEnabled:YES];
4243         [battleAttackBtn2 setTransparent:NO];
4244         [battleGuardBtn2 setEnabled:YES];
4245         [battleGuardBtn2 setTransparent:NO];
4246         [battleDodgeBtn2 setEnabled:YES];
4247         [battleDodgeBtn2 setTransparent:NO];
4248     }U = UTop;
4249
4250     
4251     
4252     U = UTop;
4253     
4254     for (int i = 1; i < DUN[1]; i++) {
4255         U = U->next;
4256              
4257     }
4258
4259     
4260     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
4261        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
4262        ){
4263         [battleStartBtn setEnabled:NO];
4264         [battleStartBtn setTransparent:YES];
4265     }else{
4266         [battleStartBtn setEnabled:YES];
4267         [battleStartBtn setTransparent:NO];
4268     }
4269    
4270     U = UTop;
4271     
4272     avPlayerFlag1 = false;
4273     avPlayerFlag2 = false;
4274 }
4275
4276 -(void)setBattlePanelT2{
4277     
4278     U = UTop;
4279     int mpCost = 0;
4280     ATTACK *aTop2 = U->CL.A;
4281     while (!(AUN[1] == U->number)) {
4282         U = U->next;
4283     }
4284     
4285     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 || MF[MFselectedRow+1].MS.playerSet2 == 2)){
4286         cpuModeBATTLEflag = false;
4287     int mostDmg = 0;
4288     int mostHit = 0;
4289     int mostNum = -1;
4290     int num = 0;
4291     int mpCost = 0;
4292     while(U->CL.A){
4293         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4294         costVIG = U->C.A->vigor;
4295         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){
4296             mostDmg = U->CL.A->totalD;
4297             mostNum = num;
4298         }
4299         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){
4300             //mostDmg = U->C.A->totalD;
4301             mostHit = U->CL.A->hitPercent;
4302             mostNum = num;
4303         }
4304         U->CL.A = U->CL.A->next;
4305         num++;
4306     }
4307         U->CL.A = aTop2;
4308         
4309         for(int i = 0;i < crCAL1;i++){
4310             U->CL.A = U->CL.A->next;
4311             
4312         }
4313         ATTACK *ua = U->CL.A;
4314         
4315         U->CL.A = aTop2;
4316     
4317     mostNumSub = mostNum;
4318     
4319         U->CL.A = aTop2;
4320         
4321         for(int i = 0;i < mostNum;i++){
4322             U->C.A = U->CL.A->next;
4323         }
4324         if(U->CL.A->extent == 0){
4325             
4326             U->CL.A = aTop2;
4327             crCAL1 = 0;
4328             for(int i = 0;i < mostNum;i++){
4329                 U->CL.A = U->CL.A->next;
4330                 crCAL1++;
4331             }
4332         }
4333         else{
4334             U->CL.A = aTop2;
4335             for(int i = 0;i < crCAL1;i++){
4336                 U->CL.A = U->CL.A->next;
4337             }
4338         }
4339     }else{
4340         
4341         U->CL.A = NULL;
4342     }
4343     if(U->CL.A){
4344         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4345         costVIG = U->C.A->vigor;
4346     }
4347     if(U->CL.A){
4348         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){
4349             
4350         }else while(U->CL.A){
4351             U->CL.A = U->CL.A->next;
4352             crCAL1++;
4353         }
4354     }U->CL.A = aTop2;
4355     
4356     
4357     U = UTop;
4358     while (!(AUN[1] == U->number)) {
4359         U = U->next;
4360     }
4361     U2 = U;
4362     
4363     ATTACK *aTop = U->CL.A;
4364     ATTACK *u2A;
4365     
4366     if(U->C.A)
4367         crCAL1 = crCAL;
4368     
4369     for(int i = 0;i < crCAL1;i++){
4370         U->CL.A = U->CL.A->next;
4371     }
4372
4373     
4374     if(battleSet1Flag){
4375         
4376         U->CL.A = aTop;
4377         for (int i = 0;i < crCAL1;i++) {
4378             U->CL.A = U->CL.A->next;
4379         }
4380         
4381     }
4382     
4383     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4384     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4385     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4386     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
4387     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4388     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4389     double oops = U->CL.S_C.HP/U->CL.S_M.HP*100;
4390     [combatLHP1 setIntValue:(int)oops];
4391     oops = U->CL.S_C.EN/U->CL.S_M.EN*100;
4392     [combatLMP1 setIntValue:(int)oops];
4393     
4394     hit = U->CL.S_C.MOB + U->C.S_C.HIT*U->C.S_C.HP/U->C.S_M.HP;
4395     hitFix = U->CL.A->hitPercent;
4396     
4397     u2A = U->CL.A;
4398     U->CL.A = aTop;
4399     
4400     if(battleDef1Flag){
4401         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4402         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4403         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4404         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
4405         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4406         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4407         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4408     }
4409     if(battleDod1Flag){
4410         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4411         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4412         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4413         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4414         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4415         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4416         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4417         
4418     }
4419     
4420     
4421     
4422     
4423     
4424     
4425     
4426     U = UTop;
4427     while (!(DUN[1] == U->number)) {
4428         U = U->next;
4429     }
4430     
4431     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;
4432     if(battleDod2Flag) hit = hit / 2;
4433     hit = floor(hit);
4434     
4435     if(hit > 100) hit = 100;
4436     if(hit < 0) hit = 0;
4437     
4438     if(u2A->D->sort == 1){
4439         hit = 100;
4440     }
4441     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4442     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4443     
4444     
4445     
4446     int mostDmg = 0;
4447     int mostHit = 0;
4448     int mostNum = -1;
4449     int num = 0;
4450     costVIG = U->C.A->vigor;
4451     while(U->CL.A){
4452         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4453         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){
4454             mostDmg = U->CL.A->totalD;
4455             mostNum = num;
4456         }
4457         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){
4458             //mostDmg = U->C.A->totalD;
4459             mostHit = U->CL.A->hitPercent;
4460             mostNum = num;
4461         }
4462         U->CL.A = U->CL.A->next;
4463         num++;
4464     }
4465     
4466     U->CL.A = aTop2;
4467     
4468     mostNumSub = mostNum;
4469     
4470     if(mostNum >= 0){
4471     for(int i = 0;i < mostNum;i++){
4472         U->CL.A = U->CL.A->next;
4473     }
4474     }else{
4475     
4476         U->CL.A = NULL;
4477     }
4478     if(U->CL.A){
4479         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4480         costVIG = U->C.A->vigor;
4481     }
4482     if(U->CL.A){
4483     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){
4484         
4485     }else while(U->CL.A){
4486         U->CL.A = U->CL.A->next;
4487     }
4488     }
4489     
4490     
4491     
4492     if(battleSet2Flag){
4493         
4494         U->CL.A = aTop2;
4495         
4496         for (int i = 0;i < crCAL2;i++) {
4497             U->CL.A = U->CL.A->next;
4498         }
4499         
4500     }
4501     
4502     
4503     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4504     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4505     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4506     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4507     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4508     double oops2 = U->CL.S_C.HP/U->CL.S_M.HP*100;
4509     [combatLHP2 setIntValue:(int)oops2];
4510     oops2 = U->CL.S_C.EN/U->CL.S_M.EN*100;
4511     [combatLMP2 setIntValue:(int)oops2];
4512     
4513     bool counter;
4514     int mpCost2 = 0;
4515     if(U->CL.A && U->CL.A->D){
4516     if(U->CL.A->name){
4517         
4518     if(U->CL.A){
4519         mpCost2 = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
4520         
4521     }
4522     if(U->CL.A && !(u2A->D->sort == 1) && U->CL.A->D->sort != 1 && mpCost2 <= U->CL.S_C.EN){
4523         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
4524         hit = U->CL.S_C.MOB + U->C.S_C.HIT;
4525         hitFix = U->CL.A->hitPercent;
4526         counter = true;
4527     }else if(u2A->D->sort == 1 || !U->CL.A || U->CL.A->D->sort == 1){
4528         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4529     }
4530     
4531     }else{
4532         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4533     }
4534     }else{
4535         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4536     }
4537     U->CL.A = aTop2;
4538     
4539     if(battleDef2Flag){
4540         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4541         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4542         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4543         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4544         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
4545         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4546         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4547     }
4548     
4549     if(battleDod2Flag){
4550         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4551         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4552         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4553         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4554         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4555         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4556         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4557         
4558     }
4559     U = UTop;
4560     while (!(AUN[1] == U->number)) {
4561         U = U->next;
4562     }
4563     
4564     if(counter){
4565         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;
4566         if(battleDod1Flag) hit /= 2;
4567         hit = floor(hit);
4568         
4569         if(hit > 100) hit = 100;
4570         if(hit < 0) hit = 0;
4571         
4572         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4573         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4574         
4575     }else{
4576         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4577     }
4578     
4579     U = UTop;
4580     while (!(AUN[1] == U->number)) {
4581         U = U->next;
4582     }
4583     
4584     if(U->CPU){
4585         [battleAttackBtn1 setEnabled:NO];
4586         [battleAttackBtn1 setTransparent:YES];
4587         [battleGuardBtn1 setEnabled:NO];
4588         [battleGuardBtn1 setTransparent:YES];
4589         [battleDodgeBtn1 setEnabled:NO];
4590         [battleDodgeBtn1 setTransparent:YES];
4591     }else{
4592         [battleAttackBtn1 setEnabled:YES];
4593         [battleAttackBtn1 setTransparent:NO];
4594         [battleGuardBtn1 setEnabled:YES];
4595         [battleGuardBtn1 setTransparent:NO];
4596         [battleDodgeBtn1 setEnabled:YES];
4597         [battleDodgeBtn1 setTransparent:NO];
4598     }U = UTop;
4599     
4600     U = UTop;
4601     while (!(DUN[1] == U->number)) {
4602         U = U->next;
4603     }
4604     if(U->CPU){
4605         [battleAttackBtn2 setEnabled:NO];
4606         [battleAttackBtn2 setTransparent:YES];
4607         [battleGuardBtn2 setEnabled:NO];
4608         [battleGuardBtn2 setTransparent:YES];
4609         [battleDodgeBtn2 setEnabled:NO];
4610         [battleDodgeBtn2 setTransparent:YES];
4611     }else{
4612         [battleAttackBtn2 setEnabled:YES];
4613         [battleAttackBtn2 setTransparent:NO];
4614         [battleGuardBtn2 setEnabled:YES];
4615         [battleGuardBtn2 setTransparent:NO];
4616         [battleDodgeBtn2 setEnabled:YES];
4617         [battleDodgeBtn2 setTransparent:NO];
4618     }U = UTop;
4619     
4620     U = UTop;
4621     
4622     for (int i = 1; i < DUN[1]; i++) {
4623         U = U->next;
4624     }
4625
4626     
4627     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
4628        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
4629        ){
4630         [battleStartBtn setEnabled:NO];
4631         [battleStartBtn setTransparent:YES];
4632     }else{
4633         [battleStartBtn setEnabled:YES];
4634         [battleStartBtn setTransparent:NO];
4635     }
4636     
4637     U = UTop;
4638     
4639     avPlayerFlag1 = false;
4640     avPlayerFlag2 = false;
4641 }
4642
4643 -(void)setBattlePanelT3{
4644     
4645     
4646     U = UTop;
4647     while (!(AUN[1] == U->number)) {
4648         U = U->next;
4649     }
4650     
4651     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 &&MF[MFselectedRow+1].MS.playerSet2 == 2)){
4652         cpuModeBATTLEflag = false;
4653     int mostDmg = 0;
4654     int mostHit = 0;
4655     int mostNum = 0;
4656     int num = 0;
4657     ATTACK *aTop2 = U->C.A;
4658     int mpCost = 0;
4659     while(U->C.A){
4660         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4661         
4662         costVIG = U->C.A->vigor;
4663         if(U->C.A->D)
4664         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){
4665             mostDmg = U->C.A->totalD;
4666             mostNum = num;
4667         }
4668         if(U->C.A->D)
4669         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){
4670             //mostDmg = U->C.A->totalD;
4671             mostHit = U->C.A->hitPercent;
4672             mostNum = num;
4673         }
4674         U->C.A = U->C.A->next;
4675         num++;
4676     }
4677         U->C.A = aTop2;
4678         
4679         for(int i = 0;i < crCAL1;i++){
4680             U->C.A = U->C.A->next;
4681             
4682         }
4683         ATTACK *ua = U->C.A;
4684         
4685         U->C.A = aTop2;
4686     
4687     mostNumSub = mostNum;
4688         U->C.A = aTop2;
4689         
4690         for(int i = 0;i < mostNum;i++){
4691             U->C.A = U->C.A->next;
4692         }
4693         if(U->C.A->extent == 0 && mostNum > 0){
4694             
4695             U->C.A = aTop2;
4696             crCAL1 = 0;
4697             for(int i = 0;i < mostNum;i++){
4698                 U->C.A = U->C.A->next;
4699                 crCAL1++;
4700             }
4701         }
4702         else{
4703             U->C.A = aTop2;
4704             for(int i = 0;i < crCAL1;i++){
4705                 U->C.A = U->C.A->next;
4706             }
4707         }
4708     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4709         costVIG = U->C.A->vigor;
4710         
4711
4712     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){
4713         
4714     }else{
4715     
4716     }
4717       U->C.A = aTop2;
4718     }
4719     
4720     U = UTop;
4721     while (!(AUN[1] == U->number)) {
4722         U = U->next;
4723     }
4724     U2 = U;
4725     
4726     
4727     ATTACK *aTop = U->CL.A;
4728     ATTACK *u2A;
4729     
4730     if(U->C.A)
4731         crCAL1 = crCAL;
4732     
4733     for(int i = 0;i < crCAL1;i++){
4734         U->CL.A = U->CL.A->next;
4735     }
4736     
4737     if(battleSet1Flag){
4738         
4739         U->CL.A = aTop;
4740         for (int i = 0;i < crCAL1;i++) {
4741             U->CL.A = U->CL.A->next;
4742         }
4743         
4744     }
4745     
4746     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4747     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4748     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4749     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
4750     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4751     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4752     double oops = U->CL.S_C.HP/U->CL.S_M.HP*100;
4753     [combatLHP1 setIntValue:(int)oops];
4754     oops = U->CL.S_C.EN/U->CL.S_M.EN*100;
4755     [combatLMP1 setIntValue:(int)oops];
4756     
4757     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
4758     hitFix = U->CL.A->hitPercent;
4759     
4760     u2A = U->CL.A;
4761     U->CL.A = aTop;
4762     
4763     if(battleDef1Flag){
4764         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4765         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4766         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4767         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
4768         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4769         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4770         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4771     }
4772     if(battleDod1Flag){
4773         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
4774         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
4775         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
4776         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4777         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4778         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4779         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4780         
4781     }
4782     
4783     
4784     
4785     
4786     
4787     U = UTop;
4788     while (!(AUN[1] == U->number)) {
4789         U = U->next;
4790     }
4791     U2 = U;
4792     
4793     U = UTop;
4794     while (!(DUN[1] == U->number)) {
4795         U = U->next;
4796     }
4797     
4798     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
4799     
4800     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
4801     if(hi < 0) hi = 0;
4802     
4803     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
4804     if(battleDod2Flag) hit = hit / 2;
4805     hit = floor(hit);
4806     
4807     if(hit > 100) hit = 100;
4808     if(hit < 0) hit = 0;
4809     
4810     if(u2A->D->sort == 1){
4811         hit = 100;
4812     }
4813     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4814     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4815     
4816     
4817     
4818     int mostDmg = 0;
4819     int mostHit = 0;
4820     int mostNum = 0;
4821     int num = 0;
4822     ATTACK *aTop2 = U->C.A;
4823     int mpCost = 0;
4824     while(U->C.A){
4825         
4826         costVIG = U->C.A->vigor;
4827         
4828         mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4829         if(U->C.A->D)
4830         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){
4831             mostDmg = U->C.A->totalD;
4832             mostNum = num;
4833         }
4834         if(U->C.A->D)
4835         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){
4836             //mostDmg = U->C.A->totalD;
4837             mostHit = U->C.A->hitPercent;
4838             mostNum = num;
4839         }
4840         U->C.A = U->C.A->next;
4841         num++;
4842     }
4843     
4844     U->C.A = aTop2;
4845     
4846     mostNumSub = mostNum;
4847     
4848     for(int i = 0;i < mostNum;i++){
4849         U->C.A = U->C.A->next;
4850     }
4851     mpCost = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4852     costVIG = U->C.A->vigor;
4853     
4854     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){
4855         
4856     }else while(U->C.A){
4857         U->C.A = U->C.A->next;
4858     }
4859     
4860     
4861     if(battleSet2Flag){
4862         
4863         U->C.A = aTop2;
4864         
4865         for (int i = 0;i < crCAL2;i++) {
4866             U->C.A = U->C.A->next;
4867         }
4868         
4869     }
4870     
4871     
4872     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4873     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4874     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4875     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4876     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4877     double oops2 = U->C.S_C.HP/U->C.S_M.HP*100;
4878     [combatLHP2 setIntValue:(int)oops2];
4879     oops2 = U->C.S_C.MP/U->C.S_M.MP*100;
4880     [combatLMP2 setIntValue:(int)oops2];
4881     
4882     bool counter;
4883     int mpCost2 = 0;
4884     if(U->C.A){
4885         mpCost2 = U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5;
4886         costVIG = U->C.A->vigor;
4887
4888     }
4889     if(U->C.A &&U->C.A->D){
4890     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){
4891         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
4892         hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
4893         hitFix = U->C.A->hitPercent;
4894         counter = true;
4895     }else if(u2A->D->sort == 1 || !U->C.A || U->C.A->D->sort == 1){
4896         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4897     }}else{
4898         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
4899     }
4900     
4901     U->C.A = aTop2;
4902     
4903     if(battleDef2Flag){
4904         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4905         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4906         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4907         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4908         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
4909         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4910         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4911     }
4912     
4913     if(battleDod2Flag){
4914         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
4915         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
4916         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
4917         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
4918         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
4919         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
4920         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4921         
4922     }
4923     U = UTop;
4924     while (!(AUN[1] == U->number)) {
4925         U = U->next;
4926     }
4927     
4928     if(counter){
4929         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;
4930         if(battleDod1Flag) hit /= 2;
4931         hit = floor(hit);
4932         
4933         if(hit > 100) hit = 100;
4934         if(hit < 0) hit = 0;
4935         
4936         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
4937         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4938         
4939     }else{
4940         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
4941     }
4942     
4943     U = UTop;
4944     while (!(AUN[1] == U->number)) {
4945         U = U->next;
4946     }
4947     
4948     if(U->CPU){
4949         [battleAttackBtn1 setEnabled:NO];
4950         [battleAttackBtn1 setTransparent:YES];
4951         [battleGuardBtn1 setEnabled:NO];
4952         [battleGuardBtn1 setTransparent:YES];
4953         [battleDodgeBtn1 setEnabled:NO];
4954         [battleDodgeBtn1 setTransparent:YES];
4955     }else{
4956         [battleAttackBtn1 setEnabled:YES];
4957         [battleAttackBtn1 setTransparent:NO];
4958         [battleGuardBtn1 setEnabled:YES];
4959         [battleGuardBtn1 setTransparent:NO];
4960         [battleDodgeBtn1 setEnabled:YES];
4961         [battleDodgeBtn1 setTransparent:NO];
4962     }U = UTop;
4963     
4964     U = UTop;
4965     while (!(DUN[1] == U->number)) {
4966         U = U->next;
4967     }
4968     if(U->CPU){
4969         [battleAttackBtn2 setEnabled:NO];
4970         [battleAttackBtn2 setTransparent:YES];
4971         [battleGuardBtn2 setEnabled:NO];
4972         [battleGuardBtn2 setTransparent:YES];
4973         [battleDodgeBtn2 setEnabled:NO];
4974         [battleDodgeBtn2 setTransparent:YES];
4975     }else{
4976         [battleAttackBtn2 setEnabled:YES];
4977         [battleAttackBtn2 setTransparent:NO];
4978         [battleGuardBtn2 setEnabled:YES];
4979         [battleGuardBtn2 setTransparent:NO];
4980         [battleDodgeBtn2 setEnabled:YES];
4981         [battleDodgeBtn2 setTransparent:NO];
4982     }U = UTop;
4983     
4984     
4985     U = UTop;
4986     
4987     for (int i = 1; i < DUN[1]; i++) {
4988         U = U->next;
4989     }
4990     
4991     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
4992        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
4993        ){
4994         [battleStartBtn setEnabled:NO];
4995         [battleStartBtn setTransparent:YES];
4996     }else{
4997         [battleStartBtn setEnabled:YES];
4998         [battleStartBtn setTransparent:NO];
4999     }
5000     
5001     U = UTop;
5002     
5003     avPlayerFlag1 = false;
5004     avPlayerFlag2 = false;
5005 }
5006
5007 -(void)setBattlePanelT4{
5008
5009     U = UTop;
5010     
5011     while (!(AUN[1] == U->number)) {
5012         U = U->next;
5013     }
5014     
5015     if(cpuModeBATTLEflag && (MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2)){
5016         cpuModeBATTLEflag = false;
5017     int mostDmg = 0;
5018     int mostHit = 0;
5019     int mostNum = 0;
5020     int num = 0;
5021     ATTACK *aTop2 = U->CL.A;
5022     int mpCost = 0;
5023     while(U->CL.A){
5024         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5025         costVIG = U->C.A->vigor;
5026         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){
5027             mostDmg = U->CL.A->totalD;
5028             mostNum = num;
5029         }
5030         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){
5031             //mostDmg = U->C.A->totalD;
5032             mostHit = U->CL.A->hitPercent;
5033             mostNum = num;
5034         }
5035         U->CL.A = U->CL.A->next;
5036         num++;
5037     }
5038     
5039     mostNumSub = mostNum;
5040         U->CL.A = aTop2;
5041         
5042         for(int i = 0;i < mostNum;i++){
5043             U->CL.A = U->CL.A->next;
5044         }
5045         if(U->CL.A->extent == 0){
5046             
5047             U->CL.A = aTop2;
5048             crCAL1 = 0;
5049             for(int i = 0;i < mostNum;i++){
5050                 U->CL.A = U->CL.A->next;
5051                 crCAL1++;
5052             }
5053         }
5054         else{
5055             U->CL.A = aTop2;
5056             for(int i = 0;i < crCAL1;i++){
5057                 U->CL.A = U->CL.A->next;
5058             }
5059         }
5060     mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5061         costVIG = U->C.A->vigor;
5062     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){
5063         
5064     }else while(U->CL.A){
5065         U->CL.A = U->CL.A->next;
5066         crCAL1++;
5067     }
5068       U->CL.A = aTop2;
5069     }
5070     U = UTop;
5071     
5072     while (!(AUN[1] == U->number)) {
5073         U = U->next;
5074     }
5075     U2 = U;
5076     
5077     ATTACK *aTop = U->C.A;
5078     ATTACK *u2A;
5079     
5080     if(U->C.A)
5081         crCAL1 = crCAL;
5082     
5083     for(int i = 0;i < crCAL1;i++){
5084         U->C.A = U->C.A->next;
5085     }
5086     
5087     if(battleSet1Flag){
5088         
5089         U->C.A = aTop;
5090         for (int i = 0;i < crCAL1;i++) {
5091             U->C.A = U->C.A->next;
5092         }
5093         
5094     }
5095     
5096     [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5097     [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5098     [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5099     [combatATK1 setStringValue:[NSString stringWithFormat:@"%@", U->C.A->name]];
5100     [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5101     [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5102     double oops = U->C.S_C.HP/U->C.S_M.HP*100;
5103     [combatLHP1 setIntValue:(int)oops];
5104     oops = U->C.S_C.MP/U->C.S_M.MP*100;
5105     [combatLMP1 setIntValue:(int)oops];
5106     
5107     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
5108     hitFix = U->C.A->hitPercent;
5109     
5110     u2A = U->C.A;
5111     U->C.A = aTop;
5112     
5113     if(battleDef1Flag){
5114         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5115         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5116         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5117         [combatATK1 setStringValue:[NSString stringWithFormat:@"防御耐性"]];
5118         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5119         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5120         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5121     }
5122     if(battleDod1Flag){
5123         [combatNAME1 setStringValue:[NSString stringWithFormat:@"%@", U->C.name]];
5124         [combatHP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5125         [combatMP1 setStringValue:[NSString stringWithFormat:@"%g/%g", U->C.S_C.MP, U->C.S_M.MP]];
5126         [combatATK1 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5127         [combatVIG1 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5128         [combatAP1 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5129         [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5130         
5131     }
5132     
5133     
5134     
5135     
5136     
5137     
5138     
5139     U = UTop;
5140     while (!(DUN[1] == U->number)) {
5141         U = U->next;
5142     }
5143     
5144     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;
5145     if(battleDod2Flag) hit = hit / 2;
5146     hit = floor(hit);
5147     
5148     if(hit > 100) hit = 100;
5149     if(hit < 0) hit = 0;
5150     
5151     if(u2A->D->sort == 1){
5152         hit = 100;
5153     }
5154     [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5155     if(battleDef1Flag || battleDod1Flag) [combatHIT1 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5156     
5157     
5158     
5159     int mostDmg = 0;
5160     int mostHit = 0;
5161     int mostNum = 0;
5162     int num = 0;
5163     ATTACK *aTop2 = U->CL.A;
5164     int mpCost = 0;
5165     while(U->CL.A){
5166         mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5167         costVIG = U->C.A->vigor;
5168         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){
5169             mostDmg = U->CL.A->totalD;
5170             mostNum = num;
5171         }
5172         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){
5173             //mostDmg = U->C.A->totalD;
5174             mostHit = U->CL.A->hitPercent;
5175             mostNum = num;
5176         }
5177         U->CL.A = U->CL.A->next;
5178         num++;
5179     }
5180     
5181     mostNumSub = mostNum;
5182     
5183     U->CL.A = aTop2;
5184     
5185     for(int i = 0;i < mostNum;i++){
5186         U->CL.A = U->CL.A->next;
5187     }
5188     mpCost = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5189     costVIG = U->C.A->vigor;
5190     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){
5191         
5192     }else while(U->CL.A){
5193         U->CL.A = U->CL.A->next;
5194     }
5195     
5196     
5197     if(battleSet2Flag){
5198         
5199         U->CL.A = aTop2;
5200         
5201         for (int i = 0;i < crCAL2;i++) {
5202             U->CL.A = U->CL.A->next;
5203         }
5204         
5205     }
5206     
5207     
5208     [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5209     [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5210     [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5211     [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5212     [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5213     double oops2 = U->CL.S_C.HP/U->CL.S_M.HP*100;
5214     [combatLHP2 setIntValue:(int)oops2];
5215     oops2 = U->CL.S_C.EN/U->CL.S_M.EN*100;
5216     [combatLMP2 setIntValue:(int)oops2];
5217     
5218     bool counter;
5219     int mpCost2 = 0;
5220     if(U->CL.A){
5221         mpCost2 = U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5;
5222         
5223     }
5224     if(U->CL.A && U->CL.A->D){
5225     if(U->CL.A && !(u2A->D->sort == 1) && U->CL.A->D->sort != 1 && mpCost2 <= U->CL.S_C.EN){
5226         [combatATK2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.A->name]];
5227         hit = U->CL.S_C.MOB + U->C.S_C.HIT;
5228         hitFix = U->CL.A->hitPercent;
5229         counter = true;
5230     }else if(u2A->D->sort == 1 || !U->CL.A || U->CL.A->D->sort == 1){
5231         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5232     }}else{
5233         [combatATK2 setStringValue:[NSString stringWithFormat:@"反撃不可能"]];
5234     }
5235     
5236     U->CL.A = aTop2;
5237     
5238     if(battleDef2Flag){
5239         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5240         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5241         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5242         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5243         [combatATK2 setStringValue:[NSString stringWithFormat:@"防御態勢"]];
5244         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5245         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5246     }
5247     
5248     if(battleDod2Flag){
5249         [combatNAME2 setStringValue:[NSString stringWithFormat:@"%@", U->CL.name]];
5250         [combatHP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
5251         [combatMP2 setStringValue:[NSString stringWithFormat:@"%g/%g", U->CL.S_C.EN, U->CL.S_M.EN]];
5252         [combatVIG2 setStringValue:[NSString stringWithFormat:@"気力 %d", U->C.S_C.vigor]];
5253         [combatATK2 setStringValue:[NSString stringWithFormat:@"回避耐性"]];
5254         [combatAP2 setStringValue:[NSString stringWithFormat:@"%g", U->C.S_C.AP]];
5255         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5256         
5257     }
5258     
5259     U = UTop;
5260     while (!(DUN[1] == U->number)) {
5261         U = U->next;
5262     }
5263     U2 = U;
5264     
5265     U = UTop;
5266     while (!(AUN[1] == U->number)) {
5267         U = U->next;
5268     }
5269     
5270     if(counter){
5271         
5272         double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
5273         
5274         double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
5275         if(hi < 0) hi = 0;
5276         
5277         hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
5278         if(battleDod1Flag) hit /= 2;
5279         hit = floor(hit);
5280         
5281         if(hit > 100) hit = 100;
5282         if(hit < 0) hit = 0;
5283         
5284         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 %g", hit]];
5285         if(battleDef2Flag || battleDod2Flag) [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5286         
5287     }else{
5288         [combatHIT2 setStringValue:[NSString stringWithFormat:@"命中率 ----"]];
5289     }
5290     
5291     U = UTop;
5292     while (!(AUN[1] == U->number)) {
5293         U = U->next;
5294     }
5295     
5296     if(U->CPU){
5297         [battleAttackBtn1 setEnabled:NO];
5298         [battleAttackBtn1 setTransparent:YES];
5299         [battleGuardBtn1 setEnabled:NO];
5300         [battleGuardBtn1 setTransparent:YES];
5301         [battleDodgeBtn1 setEnabled:NO];
5302         [battleDodgeBtn1 setTransparent:YES];
5303     }else{
5304         [battleAttackBtn1 setEnabled:YES];
5305         [battleAttackBtn1 setTransparent:NO];
5306         [battleGuardBtn1 setEnabled:YES];
5307         [battleGuardBtn1 setTransparent:NO];
5308         [battleDodgeBtn1 setEnabled:YES];
5309         [battleDodgeBtn1 setTransparent:NO];
5310     }U = UTop;
5311     
5312     U = UTop;
5313     while (!(DUN[1] == U->number)) {
5314         U = U->next;
5315     }
5316     if(U->CPU){
5317         [battleAttackBtn2 setEnabled:NO];
5318         [battleAttackBtn2 setTransparent:YES];
5319         [battleGuardBtn2 setEnabled:NO];
5320         [battleGuardBtn2 setTransparent:YES];
5321         [battleDodgeBtn2 setEnabled:NO];
5322         [battleDodgeBtn2 setTransparent:YES];
5323     }else{
5324         [battleAttackBtn2 setEnabled:YES];
5325         [battleAttackBtn2 setTransparent:NO];
5326         [battleGuardBtn2 setEnabled:YES];
5327         [battleGuardBtn2 setTransparent:NO];
5328         [battleDodgeBtn2 setEnabled:YES];
5329         [battleDodgeBtn2 setTransparent:NO];
5330     }U = UTop;
5331     
5332     
5333     U = UTop;
5334     
5335     for (int i = 1; i < DUN[1]; i++) {
5336         U = U->next;
5337     }
5338     
5339     if((MF[MFselectedRow+1].MS.playerSet1 == 2 && MF[MFselectedRow+1].MS.playerSet2 == 2) ||
5340        unitBreak->team == 1 || (unitBreak->team == 2 && U->team == 1)
5341        ){
5342         [battleStartBtn setEnabled:NO];
5343         [battleStartBtn setTransparent:YES];
5344     }else{
5345         [battleStartBtn setEnabled:YES];
5346         [battleStartBtn setTransparent:NO];
5347     }
5348     
5349     U = UTop;
5350     
5351     avPlayerFlag1 = false;
5352     avPlayerFlag2 = false;
5353 }
5354
5355 -(void)DisplayMessage{
5356     
5357     
5358     
5359     if(AVpreview){
5360     if(AVpreview.rate > 0){
5361         [battleWindow setIgnoresMouseEvents:YES];
5362         [battleWindow makeKeyAndOrderFront:nil];
5363         //NSLog(@"%g", AVpreview.rate);
5364         return;
5365     }else{
5366         [battleWindow setIgnoresMouseEvents:NO];
5367         //NSLog(@"%g", AVpreview.rate);
5368         AVpreview = NULL;
5369         if(avPlayerFlag1){
5370             
5371             [AVPV setHidden:YES];
5372         }
5373         else if(avPlayerFlag2){
5374             [AVPV setHidden:YES];
5375         }
5376     }
5377     }
5378     if(animationFlag3){
5379         if(animationFlag1){
5380             animationFlag1 = false;
5381             U = effCun;
5382             U->C.A = attackTop;
5383         }
5384         if(animationFlag2){
5385             animationFlag2 = false;
5386             U = effCun;
5387             U->C.A = attackTop2;
5388         }
5389         U = UTop;
5390     }else{
5391         if(animationFlag1 || animationFlag2){
5392             return;
5393         }
5394     }
5395     
5396     double def2 = (double)31/32;
5397     NSString *message = @"";
5398     
5399     enum{
5400         RIKU,
5401         UMI,
5402         CHU,
5403         SORA
5404     };
5405     
5406     enum{
5407         A,
5408         B,
5409         C,
5410         D,
5411         E,
5412         S,
5413         SS
5414     };
5415     static bool extentbool = false;
5416     static bool extentbool2 = false;
5417     if(!extentbool && extentBattleFlag2){
5418         extentbool = true;
5419         extentMPcostFlag = false;
5420         DUNnum = 1;
5421     }
5422     if(!extentBattleFlag2){
5423         DUNnum = 1;
5424     }
5425     
5426     switch (messageProcess) {
5427         case 0:
5428             if(bLoopFlag) break;
5429             
5430             [battleDialog setStringValue:@"攻撃開始!"];
5431             bLoopFlag = true;
5432             messageProcess++;
5433             break;
5434         case 1:
5435             
5436             U = UTop;
5437             while (!(DUN[DUNnum] == U->number)) {
5438                 U = U->next;
5439                 
5440             }
5441             U2 = U;
5442             U = UTop;
5443             while (!(AUN[1] == U->number)) {
5444                 U = U->next;
5445             }
5446             
5447             if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
5448                 U = UTop;
5449                 [self DisplayMessageMod1A];
5450                 return;
5451             }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){
5452                 U = UTop;
5453                 [self DisplayMessageMod2A];
5454                 return;
5455             }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){
5456                 U = UTop;
5457                 [self DisplayMessageMod3A];
5458                 return;
5459             }
5460             
5461             
5462             U = UTop;
5463             if(bLoopFlag) break;
5464             U = UTop;
5465             while (!(AUN[1] == U->number)) {
5466                 U = U->next;
5467             }
5468             ATTACK *aTop = U->C.A;
5469             attackTop = aTop;
5470             for(int i = 0;i < crCAL1;i++){
5471                 U->C.A = U->C.A->next;
5472             }
5473             effCun = U;
5474             attackCR = U->C.A;
5475             
5476             if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
5477             
5478             
5479             [bplayer2 setImage:U2->C.imgb];
5480             [bplayer2 setImageScaling:NSScaleToFit];
5481             [nplayer2 setStringValue:U2->C.name];
5482             [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U2->C.S_C.HP, U2->C.S_M.HP]];
5483             [lplayer2 setIntValue:U2->C.S_C.HP/U2->C.S_M.HP*100];
5484             [iplayer2 setImage:MC[chipNum[U2->x][U2->y]].img];
5485             [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
5486             [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
5487             
5488             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){
5489                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
5490             
5491                 NSString *path = @"data/AttackList/ALdata";
5492             
5493                 path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
5494             
5495                 path = [path stringByAppendingFormat:@"/"];
5496             
5497                 path = [path stringByAppendingString:U->C.A->AN.movName];
5498             
5499                 NSData *AVData = [NSData dataWithContentsOfFile:path];
5500                 
5501                 if(AVData)
5502                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
5503                 
5504                 
5505                 if(!AVpreview){
5506                 
5507                     NSString *path = @"data/AttackList3/IALdata";
5508                     
5509                     path = [path stringByAppendingFormat:@"%dE", U->C.A->indexE];
5510                     
5511                     path = [path stringByAppendingFormat:@"/"];
5512                     
5513                     path = [path stringByAppendingString:U->C.A->AN.movName];
5514                     
5515                     
5516                     NSData *AVData = [NSData dataWithContentsOfFile:path];
5517                     
5518                     if(AVData)
5519                     AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
5520                     
5521                 
5522                 }
5523                 
5524                 if(AVpreview) {
5525                     AVPV.player = [AVpreview retain];
5526                 }else{
5527                     goto avAWESOME;
5528                 }
5529                 
5530                 
5531                 [AVPV setHidden:NO];
5532                 [AVpreview play];
5533                 [battleDialog setStringValue:message];
5534                 
5535                 avPlayerFlag1 = true;
5536                 
5537                 
5538                 U->C.A = aTop;
5539                 U = UTop;
5540                 return;
5541             }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUNnum == 1){
5542             
5543                 [battleDialog setStringValue:message];
5544                 animationFlag1 = true;
5545                 aniFrameCnt = 0;
5546                 return;
5547             }
5548             
5549         avAWESOME:{}
5550
5551             double urSupposedToGet;
5552            
5553             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
5554             
5555             double asItIs;
5556             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
5557             
5558             double oopsIsRight;
5559             
5560             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
5561             else oopsIsRight = U->C.S_C.MIS;
5562             
5563             oopsIsRight = oopsIsRight/100;
5564             double val;
5565             if(!U2->C.aura && U->C.A->D){
5566             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
5567                                             - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5568             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
5569                                             - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5570             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
5571                                             - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5572             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
5573                                             - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5574             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
5575                                             - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5576             if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
5577             }else if(U->C.A->D){
5578                 val = 1/log(3+U2->C.S_C.MP/64);
5579                 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
5580                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5581                 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
5582                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5583                 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
5584                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5585                 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
5586                                                 - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5587                 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
5588                                                 - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5589                 if(U->C.A->D->type == 5) dmg = U->C.A->totalD*val;
5590             }
5591             double val2 = log(3+U2->C.S_C.MP/64);
5592             if(U->C.aura){
5593                 dmg = dmg*val2;
5594             }
5595             
5596             if(U->C.A->D){
5597             if(U->C.A->D->fix == 2){
5598                 dmg = dmg/2 + U->C.S_C.HIT/2;
5599             
5600             }else if(U->C.A->D->fix == 1){
5601                 dmg = dmg/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
5602                 
5603             }else if(U->C.A->D->fix == 0){
5604                 dmg = dmg/2 + U->C.S_C.ATK/2;
5605             }}
5606             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
5607             
5608             if(extentMPcostFlag && extentBattleFlag2){
5609                 
5610             }else{
5611                 U->C.S_C.MP -= costMP;
5612                 extentMPcostFlag = true;
5613             }
5614             
5615             hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
5616             hitFix = U->C.A->hitPercent;
5617             
5618             U2A = U->C.A;
5619             U->C.A = aTop;
5620             
5621             U = UTop;
5622             while (!(AUN[1] == U->number)) {
5623                 U = U->next;
5624             }
5625             U2 = U;
5626             
5627             U = UTop;
5628             while (!(DUN[DUNnum] == U->number)) {
5629                 U = U->next;
5630             }
5631             
5632             double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
5633             
5634             double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
5635             if(hi < 0) hi = 0;
5636             
5637             hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
5638             if(hit > 100) hit = 100;
5639             if(hit < 0) hit = 0;
5640             if(U2A->D->sort == 1){
5641                 hit = 100;
5642             }
5643             
5644             healFlag = false;
5645             
5646             int wtf = 100;
5647             if(battleDod2Flag) wtf = 50;
5648             if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
5649                 
5650                 if(U2A->D->sort == 0){
5651                     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);
5652                     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);
5653                     NSLog(@"修正前のダメージ:%g", dmg);
5654                     dmg = [self dmgResist:dmg];
5655                     NSLog(@"属性後のダメージ:%g", dmg);
5656                     def2 = pow(def2, U->C.S_C.DEF);
5657                     int omfg = rand()%100;
5658                     NSLog(@"ダメージ幅:%g〜%g", floor(dmg), floor(dmg + dmg/10));
5659                     dmg = (dmg*omfg/100/10 + dmg);
5660                     NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
5661                     if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
5662                     else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
5663                     
5664                     if(U->C.S_C.typeMOVE == RIKU){
5665                         if(U2A->riku == A) dmg = dmg*1.2;
5666                         if(U2A->riku == B) dmg = dmg*1.0;
5667                         if(U2A->riku == C) dmg = dmg*0.6;
5668                         if(U2A->riku == D) dmg = dmg*0.2;
5669                         if(U2A->riku == E) dmg = 0;
5670                         if(U2A->riku == S) dmg = dmg*1.5;
5671                         if(U2A->riku == SS) dmg = dmg*2.0;
5672                     } if(U->C.S_C.typeMOVE == UMI &&
5673                        (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
5674                         if(U2A->umi == A) dmg = dmg*1.2;
5675                         if(U2A->umi == B) dmg = dmg*1.0;
5676                         if(U2A->umi == C) dmg = dmg*0.6;
5677                         if(U2A->umi == D) dmg = dmg*0.2;
5678                         if(U2A->umi == E) dmg = 0;
5679                         if(U2A->umi == S) dmg = dmg*1.5;
5680                         if(U2A->umi == SS) dmg = dmg*2.0;
5681                     }else if(U->C.S_C.typeMOVE == UMI){
5682                         if(U2A->riku == A) dmg = dmg*1.2;
5683                         if(U2A->riku == B) dmg = dmg*1.0;
5684                         if(U2A->riku == C) dmg = dmg*0.6;
5685                         if(U2A->riku == D) dmg = dmg*0.2;
5686                         if(U2A->riku == E) dmg = 0;
5687                         if(U2A->riku == S) dmg = dmg*1.5;
5688                         if(U2A->riku == SS) dmg = dmg*2.0;
5689                     
5690                     } if(U->C.S_C.typeMOVE == CHU){
5691                         if(U2A->chu == A) dmg = dmg*1.2;
5692                         if(U2A->chu == B) dmg = dmg*1.0;
5693                         if(U2A->chu == C) dmg = dmg*0.6;
5694                         if(U2A->chu == D) dmg = dmg*0.2;
5695                         if(U2A->chu == E) dmg = 0;
5696                         if(U2A->chu == S) dmg = dmg*1.5;
5697                         if(U2A->chu == SS) dmg = dmg*2.0;
5698                     } if(U->C.S_C.typeMOVE == SORA){
5699                         if(U2A->sora == A) dmg = dmg*1.2;
5700                         if(U2A->sora == B) dmg = dmg*1.0;
5701                         if(U2A->sora == C) dmg = dmg*0.6;
5702                         if(U2A->sora == D) dmg = dmg*0.2;
5703                         if(U2A->sora == E) dmg = 0;
5704                         if(U2A->sora == S) dmg = dmg*1.5;
5705                         if(U2A->sora == SS) dmg = dmg*2.0;
5706                     }
5707                     
5708                     NSLog(@"ユニットの地形適用後:%g", dmg);
5709                     if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
5710                     graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
5711                     
5712                     grazeFlag = false;
5713                     omfg = rand()%100;
5714                     if(graze > omfg && !healFlag) {dmg = dmg/5;
5715                         grazeFlag = true;
5716                     }
5717                     if(battleDef2Flag) dmg -= dmg*0.5;
5718                     battleDef2Flag = false;
5719                     dmg = floor(dmg);
5720                     if(dmg < 0) dmg = 0;
5721                     U->C.S_C.HP -= dmg;
5722                     U->C.S_C.vigor++;
5723                     
5724                 }else if(U2A->D->sort == 1){
5725                     dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
5726                     dmg = floor(dmg);
5727                     
5728                     U->C.S_C.HP += dmg;
5729                     if(U->C.S_C.HP > U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
5730                     healFlag = true;
5731                 }
5732                 
5733                 while(1){
5734                     if(U->C.S_C.HP <= 0) {
5735                         U->C.S_C.HP = 0;
5736                         U2->C.S_C.vigor += 5;
5737                         
5738                         messageProcess = 2;
5739                         if(U->dead) break;
5740                         U->dead = true;
5741                         
5742                         
5743                         if(U->targType1L)
5744                             targType1cnt[0]--;
5745                         if(U->targType2L) {
5746                             targType2cnt[0]--;
5747                             targType2Lflag = true;
5748                         }
5749                         
5750                         if(U->targType1D)
5751                             targType1cnt[1]--;
5752                         if(U->targType2D) {
5753                             targType2cnt[1]--;
5754                             targType2Dflag = true;
5755                         }
5756                         
5757                         break;
5758                     }
5759                     break;
5760                 }
5761                 
5762             [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
5763             [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
5764             
5765                 if(![U2A->msg isEqualToString:@""]){
5766                     
5767                     message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
5768                                                                 [self originalMessage:U2A->msg subj:U2->C.name obje:U->C.name]]];
5769                     
5770                 }
5771                 
5772             if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
5773             if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
5774                 else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
5775             }else if(battleDef1Flag){
5776             
5777                 
5778                 U = UTop;
5779                 while (!(AUN[1] == U->number)) {
5780                     U = U->next;
5781                 }
5782                 
5783                 
5784                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
5785             
5786             
5787             }else if(battleDod1Flag){
5788             
5789                 U = UTop;
5790                 while (!(AUN[1] == U->number)) {
5791                     U = U->next;
5792                 }
5793                 
5794                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
5795                 
5796             
5797             }else{
5798             
5799                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
5800             
5801             }
5802                 [battleDialog setStringValue:message];
5803             
5804             
5805             U = UTop;
5806             
5807             bLoopFlag = true;
5808             
5809             if(!extentBattleFlag2){
5810             if(healFlag) {
5811                 messageProcess++;
5812                  };
5813             messageProcess++;
5814             }else if(extentBattleFlag2){
5815                 DUNnum++;
5816                 messageProcess = 1;
5817                 if(DUN[DUNnum] == -1){
5818                     DUNnum = 1;
5819                     messageProcess++;
5820                     messageProcess++;
5821                     extentBattleFlag2 = false;
5822                     extentbool = false;
5823                     extentMPcostFlag = false;
5824                 }
5825             }
5826             message = @"";
5827             avPlayerFlag1 = false;
5828             animationFlag3 = false;
5829             break;
5830         
5831         case 2:
5832             
5833             
5834             U = UTop;
5835             while (!(DUN[1] == U->number)) {
5836                 U = U->next;
5837             }
5838             U2 = U;
5839             U = UTop;
5840             while (!(AUN[1] == U->number)) {
5841                 U = U->next;
5842             }
5843             
5844             if(U->chipNumberL >= 0 && U2->chipNumberL >= 0){
5845                 U = UTop;
5846                 [self DisplayMessageMod1B];
5847                 return;
5848             }else if(U->chipNumberL >= 0 && U2->chipNumberL < 0){
5849                 U = UTop;
5850                 [self DisplayMessageMod2B];
5851                 return;
5852             }else if(U->chipNumberL < 0 && U2->chipNumberL >= 0){
5853                 U = UTop;
5854                 [self DisplayMessageMod3B];
5855                 return;
5856             }
5857             U = UTop;
5858             
5859             if(bLoopFlag) break;
5860             
5861             U = UTop;
5862             while (!(AUN[1] == U->number)) {
5863                 U = U->next;
5864             }
5865             U2 = U;
5866             U = UTop;
5867             
5868             U = UTop;
5869             while (!(DUN[1] == U->number)) {
5870                 U = U->next;
5871             }
5872             
5873             ATTACK *aTop2 = U->C.A;
5874             attackTop2 = aTop2;
5875             int mostDmg = 0;
5876             int mostDmg2 = 0;
5877             int mostNum = 0;
5878             int num = 0;
5879             int mpCost =0;
5880             
5881             if(!U->C.A) goto SKIP3;
5882             
5883             
5884             
5885             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
5886             
5887             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
5888
5889             
5890             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
5891             else oopsIsRight = U->C.S_C.MIS;
5892             
5893             oopsIsRight = oopsIsRight/100;
5894             
5895             if(U->C.A) {
5896                 mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
5897             }
5898             while(U->C.A){
5899                 mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
5900                 if(!U2->C.aura && U->C.A->D){
5901                     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
5902                                                          - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5903                     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
5904                                                          - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5905                     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
5906                                                          - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5907                     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
5908                                                          - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5909                     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
5910                                                          - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
5911                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD;
5912                 }else if(U->C.A->D){
5913                     val = 1/log(3+U2->C.S_C.MP/64);
5914                     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
5915                                                          - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5916                     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
5917                                                          - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5918                     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
5919                                                          - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5920                     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
5921                                                          - U2->C.S_C.ACU*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor)*asItIs*val;
5922                     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
5923                                                          - U2->C.S_C.CAP*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
5924                     if(U->C.A->D->type == 5) mostDmg2 = U->C.A->totalD*val;
5925                 }
5926                 double val2 = log(3+U2->C.S_C.MP/64);
5927                 if(U->C.aura){
5928                     mostDmg2 = mostDmg2*val2;
5929                 }
5930                 if(U->C.A->D){
5931                 if(U->C.A->D->fix == 2){
5932                     mostDmg2 = mostDmg2/2 + U->C.S_C.HIT/2;
5933                     
5934                 }else if(U->C.A->D->fix == 1){
5935                     mostDmg2 = mostDmg2/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
5936                 }else if(U->C.A->D->fix == 0){
5937                     mostDmg2 = mostDmg2/2 + U->C.S_C.ATK/2;
5938                 }}
5939                 
5940                 U2A = U->C.A;
5941                 UNIT *oops = U;
5942                 U = U2;
5943                 mostDmg2 = [self dmgResist:mostDmg2];
5944                 U = oops;
5945                 
5946                 costVIG = U->C.A->vigor;
5947                 if(U->C.A->D)
5948                 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){
5949                     
5950             
5951                     mostDmg = mostDmg2;
5952                     
5953                     
5954                     //mostDmg = U->C.A->totalD;
5955                     mostNum = num;
5956                 }
5957                 U->C.A = U->C.A->next;
5958                 num++;
5959             }
5960             
5961             U->C.A = aTop2;
5962             
5963             if(!battleSet2PushedFlag){
5964                 for(int i = 0;i < mostNumSub;i++){
5965                 U->C.A = U->C.A->next;
5966             }
5967             
5968             }else{
5969             for(int i = 0;i < crCAL2;i++){
5970                 U->C.A = U->C.A->next;
5971             }
5972             
5973             
5974             }
5975             if(U->C.A->D){
5976             if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1){
5977             
5978             }else while(U->C.A){
5979                 U->C.A = U->C.A->next;
5980             }}
5981             
5982             if(!U->C.A){
5983                 U->C.A = aTop2;
5984                 U = UTop;
5985                 message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
5986                 goto SKIP1;
5987             }
5988             effCun = U;
5989             attackCR2 = U->C.A;
5990             if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
5991             
5992             if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
5993                 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
5994                 
5995                 NSString *path = @"data/AttackList/ALdata";
5996                 
5997                 path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
5998                 
5999                 path = [path stringByAppendingFormat:@"/"];
6000                 
6001                 path = [path stringByAppendingString:U->C.A->AN.movName];
6002                 
6003                 
6004                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6005                 
6006                 if(AVpreview) {
6007                     AVPV.player = [AVpreview retain];
6008                 }else{
6009                     goto avAWESOME2;
6010                 }
6011                 
6012                 [AVPV setControlsStyle:0];
6013                 [AVPV setHidden:NO];
6014                 [AVpreview play];
6015                 [battleDialog setStringValue:message];
6016                 
6017                 avPlayerFlag2 = true;
6018                 
6019                 U->C.A = aTop2;
6020                 U = UTop;
6021                 return;
6022             }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
6023                 
6024                 
6025                 animationFlag2 = true;
6026                 aniFrameCnt = 0;
6027                 return;
6028             }
6029
6030             
6031         avAWESOME2:{}
6032             U2A = U->C.A;
6033             
6034             /*
6035             if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
6036             if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
6037             if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
6038             if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
6039             if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
6040             if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
6041             */
6042             
6043             U->C.A = aTop2;
6044             U = UTop;
6045             while (!(AUN[1] == U->number)) {
6046                 U = U->next;
6047             }
6048             U2 = U;
6049             U = UTop;
6050             while (!(DUN[1] == U->number)) {
6051                 U = U->next;
6052             }
6053             NSString *string = [U2A->name retain];
6054             while (![U->C.A->name isEqualToString:string] && U->C.A) {
6055                 U->C.A = U->C.A->next;
6056             }
6057             
6058             if(!U->C.A) U->C.A = aTop2;
6059             
6060             if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
6061             
6062             if(U2) asItIs = 1/log(3+U2->C.S_C.DEF/64);
6063             
6064             
6065             if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
6066             else oopsIsRight = U->C.S_C.MIS;
6067             
6068             oopsIsRight = oopsIsRight/100;
6069
6070             
6071             if(!U2->C.aura && U->C.A->D){
6072                 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
6073                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6074                 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
6075                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6076                 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
6077                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs;
6078                 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
6079                                                 - U2->C.S_C.ACU*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 == 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
6081                                                 - U2->C.S_C.CAP*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 == 5) dmg = U->C.A->totalD;
6083             }else if(U->C.A->D){
6084                 double val = val = 1/log(3+U2->C.S_C.MP/64);
6085                 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
6086                                                 - U2->C.S_C.DEF*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6087                 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
6088                                                 - U2->C.S_C.ATK*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6089                 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
6090                                                 - U2->C.S_C.EVA*U2->C.S_C.HP/U2->C.S_M.HP/2*U2->C.S_C.vigor/100)*asItIs*val;
6091                 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
6092                                                 - U2->C.S_C.ACU*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 == 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
6094                                                 - U2->C.S_C.CAP*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 == 5) dmg = U->C.A->totalD*val;
6096             }
6097             val2 = log(3+U2->C.S_C.MP/64);
6098             if(U->C.aura){
6099                 dmg = dmg*val2;
6100             }
6101             if(U->C.A->D){
6102             if(U->C.A->D->fix == 2){
6103                 dmg = dmg/2 + U->C.S_C.HIT/2;
6104                 
6105             }else if(U->C.A->D->fix == 1){
6106                 dmg = dmg/2 + (U->C.S_C.ATK/2 + U->C.S_C.HIT)/2/2;
6107                 
6108             }else if(U->C.A->D->fix == 0){
6109                 dmg = dmg/2 + U->C.S_C.ATK/2;
6110             }}
6111             costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
6112             U->C.S_C.MP -= costMP;
6113             
6114             hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
6115             hitFix = U->C.A->hitPercent;
6116             
6117             U2A = U->C.A;
6118             
6119             U->C.A = aTop2;
6120             
6121             U = UTop;
6122             while (!(DUN[1] == U->number)) {
6123                 U = U->next;
6124             }
6125             U2 = U;
6126             
6127             U = UTop;
6128             while (!(AUN[1] == U->number)) {
6129                 U = U->next;
6130             }
6131             
6132             hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
6133             
6134             hi = U->C.S_C.LUK - U2->C.S_C.LUK;
6135             if(hi < 0) hi = 0;
6136             
6137             hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
6138             if(hit > 100) hit = 100;
6139             if(hit < 0) hit = 0;
6140             
6141             battleDod1Flag = false;
6142             
6143             U = UTop;
6144             while (!(DUN[1] == U->number)) {
6145                 U = U->next;
6146             }
6147             U2 = U;
6148             
6149             U = UTop;
6150             while (!(AUN[1] == U->number)) {
6151                 U = U->next;
6152             }
6153             
6154             int omg = 100;
6155             if(battleDod1Flag) omg = 50;
6156             
6157             if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
6158                 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);
6159                 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);
6160                 NSLog(@"修正前のダメージ:%g", dmg);
6161                 dmg = [self dmgResist:dmg];
6162                 NSLog(@"属性後のダメージ:%g", dmg);
6163             def2 = pow(def2, U->C.S_C.DEF);
6164             int omfg = rand()%100;
6165                 NSLog(@"ダメージ幅:%g〜%g", floor(dmg), floor(dmg + dmg/10));
6166                 dmg = (dmg*omfg/100/10 + dmg);
6167                 NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
6168                 if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
6169                 else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
6170             
6171                 if(U->C.S_C.typeMOVE == RIKU){
6172                     if(U2A->riku == A) dmg = dmg*1.2;
6173                     if(U2A->riku == B) dmg = dmg*1.0;
6174                     if(U2A->riku == C) dmg = dmg*0.6;
6175                     if(U2A->riku == D) dmg = dmg*0.2;
6176                     if(U2A->riku == E) dmg = 0;
6177                     if(U2A->riku == S) dmg = dmg*1.5;
6178                     if(U2A->riku == SS) dmg = dmg*2.0;
6179                 } if(U->C.S_C.typeMOVE == UMI &&
6180                      (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
6181                     if(U2A->umi == A) dmg = dmg*1.2;
6182                     if(U2A->umi == B) dmg = dmg*1.0;
6183                     if(U2A->umi == C) dmg = dmg*0.6;
6184                     if(U2A->umi == D) dmg = dmg*0.2;
6185                     if(U2A->umi == E) dmg = 0;
6186                     if(U2A->umi == S) dmg = dmg*1.5;
6187                     if(U2A->umi == SS) dmg = dmg*2.0;
6188                 }else if(U->C.S_C.typeMOVE == UMI){
6189                     if(U2A->riku == A) dmg = dmg*1.2;
6190                     if(U2A->riku == B) dmg = dmg*1.0;
6191                     if(U2A->riku == C) dmg = dmg*0.6;
6192                     if(U2A->riku == D) dmg = dmg*0.2;
6193                     if(U2A->riku == E) dmg = 0;
6194                     if(U2A->riku == S) dmg = dmg*1.5;
6195                     if(U2A->riku == SS) dmg = dmg*2.0;
6196                     
6197                 } if(U->C.S_C.typeMOVE == CHU){
6198                     if(U2A->chu == A) dmg = dmg*1.2;
6199                     if(U2A->chu == B) dmg = dmg*1.0;
6200                     if(U2A->chu == C) dmg = dmg*0.6;
6201                     if(U2A->chu == D) dmg = dmg*0.2;
6202                     if(U2A->chu == E) dmg = 0;
6203                     if(U2A->chu == S) dmg = dmg*1.5;
6204                     if(U2A->chu == SS) dmg = dmg*2.0;
6205                 } if(U->C.S_C.typeMOVE == SORA){
6206                     if(U2A->sora == A) dmg = dmg*1.2;
6207                     if(U2A->sora == B) dmg = dmg*1.0;
6208                     if(U2A->sora == C) dmg = dmg*0.6;
6209                     if(U2A->sora == D) dmg = dmg*0.2;
6210                     if(U2A->sora == E) dmg = 0;
6211                     if(U2A->sora == S) dmg = dmg*1.5;
6212                     if(U2A->sora == SS) dmg = dmg*2.0;
6213                 }
6214                 
6215                 NSLog(@"ユニットの地形適用後:%g", dmg);
6216                 
6217                 graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
6218                 
6219                 grazeFlag = false;
6220                 omfg = rand()&100;
6221                 if(graze > omfg && !healFlag) {dmg = dmg/5;
6222                     grazeFlag = true;
6223                 }
6224
6225             if(battleDef1Flag) dmg -= dmg*0.5;
6226             battleDef1Flag = false;
6227                 dmg = floor(dmg);
6228                 if(dmg < 0) dmg = 0;
6229                 U->C.S_C.HP -= dmg;
6230                 U->C.S_C.vigor++;
6231
6232                 
6233                 while(1){
6234                 if(U->C.S_C.HP <= 0) {
6235                     U->C.S_C.HP = 0;
6236                     U2->C.S_C.vigor += 5;
6237                 
6238                     messageProcess = 2;
6239                     if(U->dead) break;
6240                     U->dead = true;
6241                     
6242                     
6243                     if(U->targType1L)
6244                         targType1cnt[0]--;
6245                     if(U->targType2L) {
6246                         targType2cnt[0]--;
6247                         targType2Lflag = true;
6248                     }
6249                 
6250                     if(U->targType1D)
6251                         targType1cnt[1]--;
6252                     if(U->targType2D) {
6253                         targType2cnt[1]--;
6254                         targType2Dflag = true;
6255                     }
6256                     
6257                     break;
6258                 }
6259                     break;
6260                 }
6261                 
6262       
6263         
6264                 [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
6265             
6266                 [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
6267             
6268                 if(![U2A->msg isEqualToString:@""]){
6269                     message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
6270                                                                 [self originalMessage:U2A->msg subj:U2->C.name obje:U->C.name]]];
6271                 }
6272                 
6273                 
6274            
6275                 if(grazeFlag)
6276                     message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
6277             
6278                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
6279            
6280             }else if(battleDef2Flag){
6281                 
6282                 
6283                 U = UTop;
6284                 while (!(DUN[1] == U->number)) {
6285                     U = U->next;
6286                 }
6287                 
6288                 
6289                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
6290                 
6291                 
6292             }else if(battleDod2Flag){
6293                 
6294                 U = UTop;
6295                 while (!(DUN[1] == U->number)) {
6296                     U = U->next;
6297                 }
6298                 
6299                 message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
6300                 
6301                 
6302             }else{
6303             
6304                 message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
6305             }
6306         SKIP1:
6307             [battleDialog setStringValue:message];
6308         SKIP3:
6309             U = UTop;
6310             bLoopFlag = true;
6311             messageProcess++;
6312             message = @"";
6313             avPlayerFlag2 = false;
6314             animationFlag3 = false;
6315             break;
6316         case 3:
6317             if(bLoopFlag) break;
6318             battleSetUp = false;
6319             battleSetFlag = false;
6320             battleFlag = false;
6321             battleRdy = false;
6322             battleSet2PushedFlag = false;
6323             cpuModeBATTLEendFlag = true;
6324             crCAL1 = 0;
6325             crCAL2 = 0;
6326             [battleWindow close];
6327             pussyLoopFlag = false;
6328             cpuAtkExtendFlag3 = false;
6329             cpuOMFGmoveATKfixFlag = false;
6330             unitNoMoveFlag = false;
6331             UA = NULL;
6332             wtRdy = false;
6333             Utarget = NULL;
6334             //おまんちん
6335             cpuIsAttackingFlag = false;
6336             for(int g = 0;g < chipWidth;g++){
6337                 for(int k = 0;k < chipHeight;k++){
6338                     g_attackRangeExtent[g][k] = 0;
6339                 }
6340             }
6341             break;
6342             
6343         default:
6344             break;
6345     }
6346
6347
6348     UCselected = UC[-1];
6349
6350
6351 }
6352
6353 -(void)DisplayMessageMod1A{//両方モビール
6354
6355     double def2 = (double)31/32;
6356     NSString *message = @"";
6357     
6358     enum{
6359         RIKU,
6360         UMI,
6361         CHU,
6362         SORA,
6363     };
6364     
6365     enum{
6366         A,
6367         B,
6368         C,
6369         D,
6370         E,
6371         S,
6372         SS
6373     };
6374
6375     
6376     
6377     if(bLoopFlag) return;
6378     U = UTop;
6379     while (!(AUN[1] == U->number)) {
6380         U = U->next;
6381     }
6382     U2 = U;
6383     ATTACK *aTop = U->CL.A;
6384     for(int i = 0;i < crCAL1;i++){
6385         U->CL.A = U->CL.A->next;
6386     }
6387     
6388     
6389     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
6390     
6391     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
6392         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
6393         
6394         NSString *path = @"data/AttackList/ALdata";
6395         
6396         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
6397         
6398         path = [path stringByAppendingFormat:@"/"];
6399         
6400         path = [path stringByAppendingString:U->CL.A->AN.movName];
6401         
6402         NSData *AVData = [NSData dataWithContentsOfFile:path];
6403         
6404         if(AVData)
6405             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6406         
6407         
6408         if(!AVpreview){
6409             
6410             NSString *path = @"data/AttackList3/IALdata";
6411             
6412             path = [path stringByAppendingFormat:@"%dE", U->CL.A->indexE];
6413             
6414             path = [path stringByAppendingFormat:@"/"];
6415             
6416             path = [path stringByAppendingString:U->CL.A->AN.movName];
6417             
6418             
6419             NSData *AVData = [NSData dataWithContentsOfFile:path];
6420             
6421             if(AVData)
6422                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6423             
6424             
6425         }
6426         
6427         if(AVpreview) {
6428             AVPV.player = [AVpreview retain];
6429         }else{
6430             goto avAWESOME1A;
6431         }
6432         
6433         
6434         [AVPV setHidden:NO];
6435         [AVpreview play];
6436         [battleDialog setStringValue:message];
6437         
6438         avPlayerFlag1 = true;
6439         
6440         U->CL.A = aTop;
6441         
6442         U = UTop;
6443         return;
6444     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
6445         
6446         [battleDialog setStringValue:message];
6447         animationFlag1 = true;
6448         aniFrameCnt = 0;
6449         return;
6450     }
6451     
6452 avAWESOME1A:{}
6453     
6454     dmg = U->CL.A->totalD;
6455     
6456     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
6457     U->CL.S_C.EN -= costMP;
6458     
6459     hit = U->CL.S_C.MOB+U->C.S_C.HIT;
6460     hitFix = U->CL.A->hitPercent;
6461     
6462     U2A = U->CL.A;
6463     U->CL.A = aTop;
6464     
6465     U = UTop;
6466     while (!(DUN[1] == U->number)) {
6467         U = U->next;
6468     }
6469     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;
6470     if(hit > 100) hit = 100;
6471     if(U2A->D->sort == 1){
6472         hit = 100;
6473     }
6474     
6475     healFlag = false;
6476     
6477     int wtf = 100;
6478     if(battleDod2Flag) wtf = 50;
6479     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
6480         
6481         if(U2A->D->sort == 0){
6482             NSLog(@"修正前のダメージ:%g", dmg);
6483             dmg = [self dmgResist:dmg];
6484             NSLog(@"属性後のダメージ:%g", dmg);
6485             def2 = pow(def2, U->CL.S_C.ARM);
6486             int omfg = rand()%100;
6487             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
6488             
6489             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg + dmg - U->CL.S_C.ARM));
6490             dmg = (dmg*omfg/100 + dmg - U->CL.S_C.ARM);
6491             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
6492             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
6493             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
6494             
6495             if(U->CL.S_C.typeMOVE == RIKU){
6496                 if(U2A->riku == A) dmg = dmg*1.2;
6497                 if(U2A->riku == B) dmg = dmg*1.0;
6498                 if(U2A->riku == C) dmg = dmg*0.6;
6499                 if(U2A->riku == D) dmg = dmg*0.2;
6500                 if(U2A->riku == E) dmg = 0;
6501                 if(U2A->riku == S) dmg = dmg*1.5;
6502                 if(U2A->riku == SS) dmg = dmg*2.0;
6503             } if(U->CL.S_C.typeMOVE == UMI &&
6504                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
6505                 if(U2A->umi == A) dmg = dmg*1.2;
6506                 if(U2A->umi == B) dmg = dmg*1.0;
6507                 if(U2A->umi == C) dmg = dmg*0.6;
6508                 if(U2A->umi == D) dmg = dmg*0.2;
6509                 if(U2A->umi == E) dmg = 0;
6510                 if(U2A->umi == S) dmg = dmg*1.5;
6511                 if(U2A->umi == SS) dmg = dmg*2.0;
6512             }else if(U->CL.S_C.typeMOVE == UMI){
6513                 if(U2A->riku == A) dmg = dmg*1.2;
6514                 if(U2A->riku == B) dmg = dmg*1.0;
6515                 if(U2A->riku == C) dmg = dmg*0.6;
6516                 if(U2A->riku == D) dmg = dmg*0.2;
6517                 if(U2A->riku == E) dmg = 0;
6518                 if(U2A->riku == S) dmg = dmg*1.5;
6519                 if(U2A->riku == SS) dmg = dmg*2.0;
6520                 
6521             } if(U->CL.S_C.typeMOVE == CHU){
6522                 if(U2A->chu == A) dmg = dmg*1.2;
6523                 if(U2A->chu == B) dmg = dmg*1.0;
6524                 if(U2A->chu == C) dmg = dmg*0.6;
6525                 if(U2A->chu == D) dmg = dmg*0.2;
6526                 if(U2A->chu == E) dmg = 0;
6527                 if(U2A->chu == S) dmg = dmg*1.5;
6528                 if(U2A->chu == SS) dmg = dmg*2.0;
6529             } if(U->CL.S_C.typeMOVE == SORA){
6530                 if(U2A->sora == A) dmg = dmg*1.2;
6531                 if(U2A->sora == B) dmg = dmg*1.0;
6532                 if(U2A->sora == C) dmg = dmg*0.6;
6533                 if(U2A->sora == D) dmg = dmg*0.2;
6534                 if(U2A->sora == E) dmg = 0;
6535                 if(U2A->sora == S) dmg = dmg*1.5;
6536                 if(U2A->sora == SS) dmg = dmg*2.0;
6537             }
6538             
6539             NSLog(@"ユニットの地形適用後:%g", dmg);
6540             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
6541             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
6542             
6543             grazeFlag = false;
6544             omfg = rand()%100;
6545             if(graze > omfg && !healFlag) {dmg = dmg/5;
6546                 grazeFlag = true;
6547             }
6548             if(battleDef2Flag) dmg -= dmg*0.5;
6549             battleDef2Flag = false;
6550             dmg = floor(dmg);
6551             if(dmg < 0) dmg = 0;
6552             U->CL.S_C.HP -= dmg;
6553             U->C.S_C.vigor++;
6554             
6555         }else if(U2A->D->sort == 1){
6556             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
6557             dmg = floor(dmg);
6558             
6559             U->CL.S_C.HP += dmg;
6560             
6561             if(U->CL.S_C.HP > U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
6562             healFlag = true;
6563         }
6564         
6565         while(1){
6566             if(U->CL.S_C.HP <= 0) {
6567                 U->CL.S_C.HP = 0;
6568                 U2->C.S_C.vigor += 5;
6569                 
6570                 messageProcess = 2;
6571                 if(U->dead) break;
6572                 U->dead = true;
6573                 
6574                 
6575                 if(U->targType1L)
6576                     targType1cnt[0]--;
6577                 if(U->targType2L) {
6578                     targType2cnt[0]--;
6579                     targType2Lflag = true;
6580                 }
6581                 
6582                 if(U->targType1D)
6583                     targType1cnt[1]--;
6584                 if(U->targType2D) {
6585                     targType2cnt[1]--;
6586                     targType2Dflag = true;
6587                 }
6588                 
6589                 break;
6590             }
6591             break;
6592         }
6593         
6594         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
6595         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
6596         
6597         if(![U2A->msg isEqualToString:@""]){
6598             
6599             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
6600                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->CL.name]]];
6601             
6602         }
6603         
6604         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
6605         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
6606         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->CL.name, dmg]];
6607     }else if(battleDef1Flag){
6608         
6609         
6610         U = UTop;
6611         while (!(AUN[1] == U->number)) {
6612             U = U->next;
6613         }
6614         
6615         
6616         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
6617         
6618         
6619     }else if(battleDod1Flag){
6620         
6621         U = UTop;
6622         while (!(AUN[1] == U->number)) {
6623             U = U->next;
6624         }
6625         
6626         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
6627         
6628         
6629     }else{
6630         
6631         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
6632         
6633     }
6634     [battleDialog setStringValue:message];
6635     
6636     
6637     U = UTop;
6638     
6639     bLoopFlag = true;
6640     
6641     if(healFlag) {
6642         messageProcess++;
6643     };
6644     messageProcess++;
6645     
6646     return;
6647
6648 }
6649
6650 -(void)DisplayMessageMod1B{
6651
6652     double def2 = (double)31/32;
6653     NSString *message = @"";
6654     
6655     enum{
6656         RIKU,
6657         UMI,
6658         CHU,
6659         SORA,
6660     };
6661     
6662     enum{
6663         A,
6664         B,
6665         C,
6666         D,
6667         E,
6668         S,
6669         SS
6670     };
6671
6672     
6673     if(bLoopFlag) return;
6674     
6675     U = UTop;
6676     while (!(AUN[1] == U->number)) {
6677         U = U->next;
6678     }
6679     U2 = U;
6680     U = UTop;
6681     
6682     U = UTop;
6683     while (!(DUN[1] == U->number)) {
6684         U = U->next;
6685     }
6686     
6687     ATTACK *aTop2 = U->CL.A;
6688     int mostDmg = 0;
6689     int mostNum = 0;
6690     int num = 0;
6691     int mpCost =0;
6692     if(U->CL.A) {
6693         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
6694         costVIG = U->C.A->vigor;
6695     }
6696     while(U->CL.A){
6697         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
6698         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){
6699             mostDmg = U->CL.A->totalD;
6700             mostNum = num;
6701         }
6702         U->CL.A = U->CL.A->next;
6703         num++;
6704     }
6705     
6706     U->CL.A = aTop2;
6707     
6708     if(!battleSet2PushedFlag){
6709         for(int i = 0;i < mostNumSub;i++){
6710             U->CL.A = U->CL.A->next;
6711         }
6712         
6713     }else{
6714         for(int i = 0;i < crCAL2;i++){
6715             U->CL.A = U->CL.A->next;
6716         }
6717     }
6718     
6719     if(!U->CL.A->name){
6720     
6721         U->CL.A = NULL;
6722     }
6723     if(U->CL.A){
6724     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1){
6725     }else while(U->CL.A){
6726         U->CL.A = U->CL.A->next;
6727     }
6728     }
6729     
6730     if(!U->CL.A){
6731         U->CL.A = aTop2;
6732         U = UTop;
6733         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
6734         goto SKIP1;
6735     }
6736     
6737     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
6738     
6739     
6740     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
6741         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
6742         
6743         NSString *path = @"data/AttackList/ALdata";
6744         
6745         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
6746         
6747         path = [path stringByAppendingFormat:@"/"];
6748         
6749         path = [path stringByAppendingString:U->CL.A->AN.movName];
6750         
6751         
6752         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
6753         
6754         if(AVpreview) {
6755             AVPV.player = [AVpreview retain];
6756         }else{
6757             goto avAWESOME1B;
6758         }
6759         
6760         [AVPV setControlsStyle:0];
6761         [AVPV setHidden:NO];
6762         [AVpreview play];
6763         [battleDialog setStringValue:message];
6764         
6765         avPlayerFlag2 = true;
6766         
6767         U->CL.A = aTop2;
6768         U = UTop;
6769         return;
6770     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
6771         
6772         
6773         animationFlag2 = true;
6774         aniFrameCnt = 0;
6775         return;
6776     }
6777     
6778     
6779 avAWESOME1B:{}
6780     
6781     dmg = U->CL.A->totalD;
6782     
6783     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
6784     U->CL.S_C.EN -= costMP;
6785     
6786     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
6787     hitFix = U->CL.A->hitPercent;
6788     
6789     U2A = U->CL.A;
6790     U->CL.A = aTop2;
6791     
6792     
6793     U = UTop;
6794     while (!(AUN[1] == U->number)) {
6795         U = U->next;
6796     }
6797     
6798     
6799     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;
6800     if(hit > 100) hit = 100;
6801     
6802     battleDod1Flag = false;
6803     
6804     int omg = 100;
6805     if(battleDod1Flag) omg = 50;
6806     
6807     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
6808         NSLog(@"修正前のダメージ:%g", dmg);
6809         dmg = [self dmgResist:dmg];
6810         NSLog(@"属性後のダメージ:%g", dmg);
6811         def2 = pow(def2, U->CL.S_C.ARM);
6812         int omfg = rand()%100;
6813         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
6814         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg + dmg - U->CL.S_C.ARM));
6815         dmg = (dmg*omfg/100 + dmg - U->CL.S_C.ARM);
6816         
6817         
6818         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
6819         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
6820         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
6821         
6822         if(U->CL.S_C.typeMOVE == RIKU){
6823             if(U2A->riku == A) dmg = dmg*1.2;
6824             if(U2A->riku == B) dmg = dmg*1.0;
6825             if(U2A->riku == C) dmg = dmg*0.6;
6826             if(U2A->riku == D) dmg = dmg*0.2;
6827             if(U2A->riku == E) dmg = 0;
6828             if(U2A->riku == S) dmg = dmg*1.5;
6829             if(U2A->riku == SS) dmg = dmg*2.0;
6830         } if(U->CL.S_C.typeMOVE == UMI &&
6831              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
6832             if(U2A->umi == A) dmg = dmg*1.2;
6833             if(U2A->umi == B) dmg = dmg*1.0;
6834             if(U2A->umi == C) dmg = dmg*0.6;
6835             if(U2A->umi == D) dmg = dmg*0.2;
6836             if(U2A->umi == E) dmg = 0;
6837             if(U2A->umi == S) dmg = dmg*1.5;
6838             if(U2A->umi == SS) dmg = dmg*2.0;
6839         }else if(U->CL.S_C.typeMOVE == UMI){
6840             if(U2A->riku == A) dmg = dmg*1.2;
6841             if(U2A->riku == B) dmg = dmg*1.0;
6842             if(U2A->riku == C) dmg = dmg*0.6;
6843             if(U2A->riku == D) dmg = dmg*0.2;
6844             if(U2A->riku == E) dmg = 0;
6845             if(U2A->riku == S) dmg = dmg*1.5;
6846             if(U2A->riku == SS) dmg = dmg*2.0;
6847             
6848         } if(U->CL.S_C.typeMOVE == CHU){
6849             if(U2A->chu == A) dmg = dmg*1.2;
6850             if(U2A->chu == B) dmg = dmg*1.0;
6851             if(U2A->chu == C) dmg = dmg*0.6;
6852             if(U2A->chu == D) dmg = dmg*0.2;
6853             if(U2A->chu == E) dmg = 0;
6854             if(U2A->chu == S) dmg = dmg*1.5;
6855             if(U2A->chu == SS) dmg = dmg*2.0;
6856         } if(U->CL.S_C.typeMOVE == SORA){
6857             if(U2A->sora == A) dmg = dmg*1.2;
6858             if(U2A->sora == B) dmg = dmg*1.0;
6859             if(U2A->sora == C) dmg = dmg*0.6;
6860             if(U2A->sora == D) dmg = dmg*0.2;
6861             if(U2A->sora == E) dmg = 0;
6862             if(U2A->sora == S) dmg = dmg*1.5;
6863             if(U2A->sora == SS) dmg = dmg*2.0;
6864         }
6865         
6866         NSLog(@"ユニットの地形適用後:%g", dmg);
6867         
6868         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
6869         
6870         grazeFlag = false;
6871         omfg = rand()&100;
6872         if(graze > omfg && !healFlag) {dmg = dmg/5;
6873             grazeFlag = true;
6874         }
6875         
6876         if(battleDef1Flag) dmg -= dmg*0.5;
6877         battleDef1Flag = false;
6878         dmg = floor(dmg);
6879         if(dmg < 0) dmg = 0;
6880         U->CL.S_C.HP -= dmg;
6881         U->C.S_C.vigor++;
6882         
6883         while(1){
6884             if(U->CL.S_C.HP <= 0) {
6885                 U->CL.S_C.HP = 0;
6886                 U2->C.S_C.vigor += 5;
6887                 
6888                 messageProcess = 2;
6889                 if(U->dead) break;
6890                 U->dead = true;
6891                 
6892                 
6893                 if(U->targType1L)
6894                     targType1cnt[0]--;
6895                 if(U->targType2L) {
6896                     targType2cnt[0]--;
6897                     targType2Lflag = true;
6898                 }
6899                 
6900                 if(U->targType1D)
6901                     targType1cnt[1]--;
6902                 if(U->targType2D) {
6903                     targType2cnt[1]--;
6904                     targType2Dflag = true;
6905                 }
6906                 
6907                 break;
6908             }
6909             break;
6910         }
6911         
6912         
6913         
6914         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
6915         
6916         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
6917         
6918         if(![U2A->msg isEqualToString:@""]){
6919             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
6920                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->CL.name]]];
6921         }
6922         
6923         
6924         
6925         if(grazeFlag)
6926             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
6927         
6928         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
6929         
6930     }else if(battleDef2Flag){
6931         
6932         
6933         U = UTop;
6934         while (!(DUN[1] == U->number)) {
6935             U = U->next;
6936         }
6937         
6938         
6939         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
6940         
6941         
6942     }else if(battleDod2Flag){
6943         
6944         U = UTop;
6945         while (!(DUN[1] == U->number)) {
6946             U = U->next;
6947         }
6948         
6949         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
6950         
6951         
6952     }else{
6953         
6954         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
6955     }
6956 SKIP1:
6957     [battleDialog setStringValue:message];
6958     
6959     U = UTop;
6960     bLoopFlag = true;
6961     messageProcess++;
6962     return;
6963
6964 }
6965
6966 -(void)DisplayMessageMod2A{//攻撃側モビール
6967
6968     double def2 = (double)31/32;
6969     NSString *message = @"";
6970     
6971     enum{
6972         RIKU,
6973         UMI,
6974         CHU,
6975         SORA,
6976     };
6977     
6978     enum{
6979         A,
6980         B,
6981         C,
6982         D,
6983         E,
6984         S,
6985         SS
6986     };
6987
6988
6989     if(bLoopFlag) return;
6990     U = UTop;
6991     
6992     while (!(DUN[1] == U->number)) {
6993         U = U->next;
6994     }
6995     U2 = U;
6996     
6997     U = UTop;
6998     while (!(AUN[1] == U->number)) {
6999         U = U->next;
7000     }
7001     
7002     ATTACK *aTop = U->CL.A;
7003     for(int i = 0;i < crCAL1;i++){
7004         U->CL.A = U->CL.A->next;
7005     }
7006     
7007     
7008     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
7009     
7010     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
7011         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7012         
7013         NSString *path = @"data/AttackList/ALdata";
7014         
7015         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7016         
7017         path = [path stringByAppendingFormat:@"/"];
7018         
7019         path = [path stringByAppendingString:U->CL.A->AN.movName];
7020         
7021         NSData *AVData = [NSData dataWithContentsOfFile:path];
7022         
7023         if(AVData)
7024             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7025         
7026         
7027         if(!AVpreview){
7028             
7029             NSString *path = @"data/AttackList3/IALdata";
7030             
7031             path = [path stringByAppendingFormat:@"%dE", U->CL.A->indexE];
7032             
7033             path = [path stringByAppendingFormat:@"/"];
7034             
7035             path = [path stringByAppendingString:U->CL.A->AN.movName];
7036             
7037             
7038             NSData *AVData = [NSData dataWithContentsOfFile:path];
7039             
7040             if(AVData)
7041                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7042             
7043             
7044         }
7045         
7046         if(AVpreview) {
7047             AVPV.player = [AVpreview retain];
7048         }else{
7049             goto avAWESOME2A;
7050         }
7051         
7052         
7053         [AVPV setHidden:NO];
7054         [AVpreview play];
7055         [battleDialog setStringValue:message];
7056         
7057         avPlayerFlag1 = true;
7058         
7059         U->CL.A = aTop;
7060         
7061         U = UTop;
7062         return;
7063     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->CL.A->AN.ANI && !animationFlag3){
7064         
7065         [battleDialog setStringValue:message];
7066         animationFlag1 = true;
7067         aniFrameCnt = 0;
7068         return;
7069     }
7070     
7071 avAWESOME2A:{}
7072     
7073     dmg = U->CL.A->totalD;
7074     double val = 1/log(3+U2->C.S_C.MP/64);
7075     if(U2->C.aura){
7076         dmg = dmg*val;
7077     }
7078     
7079     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
7080     U->CL.S_C.EN -= costMP;
7081     
7082     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
7083     hitFix = U->CL.A->hitPercent;
7084     
7085     U2A = U->CL.A;
7086     U->CL.A = aTop;
7087     
7088     U = UTop;
7089     while (!(DUN[1] == U->number)) {
7090         U = U->next;
7091     }
7092     
7093     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
7094     
7095     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
7096     if(hi < 0) hi = 0;
7097     
7098     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
7099     if(hit > 100) hit = 100;
7100     if(U2A->D->sort == 1){
7101         hit = 100;
7102     }
7103     
7104     healFlag = false;
7105     
7106     int wtf = 100;
7107     if(battleDod2Flag) wtf = 50;
7108     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
7109         
7110         if(U2A->D->sort == 0){
7111             NSLog(@"修正前のダメージ:%g", dmg);
7112             dmg = [self dmgResist:dmg];
7113             NSLog(@"属性後のダメージ:%g", dmg);
7114             def2 = pow(def2, U->C.S_C.DEF);
7115             int omfg = rand()%100;
7116             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->C.S_C.DEF);
7117             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->C.S_C.DEF), (dmg/10 + dmg - U->C.S_C.DEF));
7118             dmg = (dmg*omfg/100/10 + dmg - U->C.S_C.DEF);
7119             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7120             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7121             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7122             
7123             if(U->C.S_C.typeMOVE == RIKU){
7124                 if(U2A->riku == A) dmg = dmg*1.2;
7125                 if(U2A->riku == B) dmg = dmg*1.0;
7126                 if(U2A->riku == C) dmg = dmg*0.6;
7127                 if(U2A->riku == D) dmg = dmg*0.2;
7128                 if(U2A->riku == E) dmg = 0;
7129                 if(U2A->riku == S) dmg = dmg*1.5;
7130                 if(U2A->riku == SS) dmg = dmg*2.0;
7131             } if(U->C.S_C.typeMOVE == UMI &&
7132                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7133                 if(U2A->umi == A) dmg = dmg*1.2;
7134                 if(U2A->umi == B) dmg = dmg*1.0;
7135                 if(U2A->umi == C) dmg = dmg*0.6;
7136                 if(U2A->umi == D) dmg = dmg*0.2;
7137                 if(U2A->umi == E) dmg = 0;
7138                 if(U2A->umi == S) dmg = dmg*1.5;
7139                 if(U2A->umi == SS) dmg = dmg*2.0;
7140             }else if(U->C.S_C.typeMOVE == UMI){
7141                 if(U2A->riku == A) dmg = dmg*1.2;
7142                 if(U2A->riku == B) dmg = dmg*1.0;
7143                 if(U2A->riku == C) dmg = dmg*0.6;
7144                 if(U2A->riku == D) dmg = dmg*0.2;
7145                 if(U2A->riku == E) dmg = 0;
7146                 if(U2A->riku == S) dmg = dmg*1.5;
7147                 if(U2A->riku == SS) dmg = dmg*2.0;
7148                 
7149             } if(U->C.S_C.typeMOVE == CHU){
7150                 if(U2A->chu == A) dmg = dmg*1.2;
7151                 if(U2A->chu == B) dmg = dmg*1.0;
7152                 if(U2A->chu == C) dmg = dmg*0.6;
7153                 if(U2A->chu == D) dmg = dmg*0.2;
7154                 if(U2A->chu == E) dmg = 0;
7155                 if(U2A->chu == S) dmg = dmg*1.5;
7156                 if(U2A->chu == SS) dmg = dmg*2.0;
7157             } if(U->C.S_C.typeMOVE == SORA){
7158                 if(U2A->sora == A) dmg = dmg*1.2;
7159                 if(U2A->sora == B) dmg = dmg*1.0;
7160                 if(U2A->sora == C) dmg = dmg*0.6;
7161                 if(U2A->sora == D) dmg = dmg*0.2;
7162                 if(U2A->sora == E) dmg = 0;
7163                 if(U2A->sora == S) dmg = dmg*1.5;
7164                 if(U2A->sora == SS) dmg = dmg*2.0;
7165             }
7166             
7167             NSLog(@"ユニットの地形適用後:%g", dmg);
7168             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
7169             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7170             
7171             grazeFlag = false;
7172             omfg = rand()%100;
7173             if(graze > omfg && !healFlag) {dmg = dmg/5;
7174                 grazeFlag = true;
7175             }
7176             if(battleDef2Flag) dmg -= dmg*0.5;
7177             battleDef2Flag = false;
7178             dmg = floor(dmg);
7179             if(dmg < 0) dmg = 0;
7180             U->C.S_C.HP -= dmg;
7181             U->C.S_C.vigor++;
7182             
7183         }else if(U2A->D->sort == 1){
7184             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
7185             dmg = floor(dmg);
7186             
7187             U->CL.S_C.HP += dmg;
7188             
7189             if(U->CL.S_C.HP > U->CL.S_M.HP) U->CL.S_C.HP = U->CL.S_M.HP;
7190             healFlag = true;
7191         }
7192         
7193         while(1){
7194             if(U->C.S_C.HP <= 0) {
7195                 U->C.S_C.HP = 0;
7196                 U2->C.S_C.vigor += 5;
7197                 
7198                 messageProcess = 2;
7199                 if(U->dead) break;
7200                 U->dead = true;
7201                 
7202                 
7203                 if(U->targType1L)
7204                     targType1cnt[0]--;
7205                 if(U->targType2L) {
7206                     targType2cnt[0]--;
7207                     targType2Lflag = true;
7208                 }
7209                 
7210                 if(U->targType1D)
7211                     targType1cnt[1]--;
7212                 if(U->targType2D) {
7213                     targType2cnt[1]--;
7214                     targType2Dflag = true;
7215                 }
7216                 
7217                 break;
7218             }
7219             break;
7220         }
7221         
7222         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
7223         [lplayer2 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
7224         
7225         if(![U2A->msg isEqualToString:@""]){
7226             
7227             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7228                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->C.name]]];
7229             
7230         }
7231         
7232         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7233         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
7234         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]];
7235     }else if(battleDef1Flag){
7236         
7237         
7238         U = UTop;
7239         while (!(AUN[1] == U->number)) {
7240             U = U->next;
7241         }
7242         
7243         
7244         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
7245         
7246         
7247     }else if(battleDod1Flag){
7248         
7249         U = UTop;
7250         while (!(AUN[1] == U->number)) {
7251             U = U->next;
7252         }
7253         
7254         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
7255         
7256         
7257     }else{
7258         
7259         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
7260         
7261     }
7262     [battleDialog setStringValue:message];
7263     
7264     
7265     U = UTop;
7266     
7267     bLoopFlag = true;
7268     
7269     if(healFlag) {
7270         messageProcess++;
7271     };
7272     messageProcess++;
7273     
7274     return;
7275
7276
7277 }
7278
7279 -(void)DisplayMessageMod2B{
7280     
7281     double def2 = (double)31/32;
7282     NSString *message = @"";
7283     
7284     enum{
7285         RIKU,
7286         UMI,
7287         CHU,
7288         SORA,
7289     };
7290     
7291     enum{
7292         A,
7293         B,
7294         C,
7295         D,
7296         E,
7297         S,
7298         SS
7299     };
7300
7301     
7302     if(bLoopFlag) return;
7303     
7304     U = UTop;
7305     while (!(AUN[1] == U->number)) {
7306         U = U->next;
7307     }
7308     U2 = U;
7309     U = UTop;
7310     
7311     U = UTop;
7312     while (!(DUN[1] == U->number)) {
7313         U = U->next;
7314     }
7315     
7316     ATTACK *aTop2 = U->C.A;
7317     int mostDmg = 0;
7318     int mostNum = -1;
7319     int num = 0;
7320     int mpCost =0;
7321     if(U->C.A) {
7322         mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7323         costVIG = U->C.A->vigor;
7324         }
7325     while(U->C.A){
7326         costVIG = U->C.A->vigor;
7327
7328         mpCost = floor(U->C.A->MP + U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7329         if(U->C.A->D)
7330         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){
7331             mostDmg = U->C.A->totalD;
7332             mostNum = num;
7333         }
7334         U->C.A = U->C.A->next;
7335         num++;
7336     }
7337     
7338     U->C.A = aTop2;
7339     
7340     if(!battleSet2PushedFlag){
7341         for(int i = 0;i < mostNumSub;i++){
7342             U->C.A = U->C.A->next;
7343         }
7344         
7345         if(mostNum < 0) U->C.A = NULL;
7346     }else{
7347         for(int i = 0;i < crCAL2;i++){
7348             U->C.A = U->C.A->next;
7349         }
7350     }
7351     if(U->C.A){
7352         if(U->C.A->D){
7353     if(U->C.A->rangeA <= U2->atkRange && U->C.A->rangeB >= U2->atkRange && U->C.A->D->sort != 1){
7354     }else while(U->CL.A){
7355         U->C.A = U->C.A->next;
7356     }}
7357     }
7358     if(!U->C.A){
7359         U->C.A = aTop2;
7360         U = UTop;
7361         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
7362         goto SKIP1;
7363     }
7364     if(!U->C.A->name){
7365         U->C.A = aTop2;
7366         U = UTop;
7367         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
7368         goto SKIP1;
7369     }
7370     
7371     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
7372
7373     
7374     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){
7375         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7376         
7377         NSString *path = @"data/AttackList/ALdata";
7378         
7379         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7380         
7381         path = [path stringByAppendingFormat:@"/"];
7382         
7383         path = [path stringByAppendingString:U->C.A->AN.movName];
7384         
7385         
7386         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7387         
7388         if(AVpreview) {
7389             AVPV.player = [AVpreview retain];
7390         }else{
7391             goto avAWESOME2B;
7392         }
7393         
7394         [AVPV setControlsStyle:0];
7395         [AVPV setHidden:NO];
7396         [AVpreview play];
7397         [battleDialog setStringValue:message];
7398         
7399         avPlayerFlag2 = true;
7400         
7401         U->C.A = aTop2;
7402         U = UTop;
7403         return;
7404     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->C.A->AN.ANI && !animationFlag3){
7405         
7406         
7407         animationFlag2 = true;
7408         aniFrameCnt = 0;
7409         return;
7410     }
7411     
7412     
7413 avAWESOME2B:{}
7414     
7415     
7416     /*
7417     if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
7418     if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
7419     if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
7420     if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
7421     if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
7422     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
7423     */
7424
7425     double urSupposedToGet;
7426     
7427     if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
7428     
7429     double oopsIsRight;
7430     bool lolFlag = false;
7431     if(U->C.A) {
7432     if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
7433     else oopsIsRight = U->C.S_C.MIS;
7434         
7435         if(U->C.A->D){
7436     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;
7437     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;
7438     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;
7439     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;
7440     if(U->C.A->D->type == 4) {
7441         lolFlag = true;
7442         dmg = (U->C.S_C.CAP + urSupposedToGet)*oopsIsRight/100;
7443     }
7444     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
7445         }}
7446         costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7447     U->C.S_C.MP -= costMP;
7448     
7449     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
7450     hitFix = U->C.A->hitPercent;
7451     
7452     U2A = U->C.A;
7453     U->C.A = aTop2;
7454     
7455     U = UTop;
7456     while (!(AUN[1] == U->number)) {
7457         U = U->next;
7458     }
7459     
7460     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;
7461     if(hit > 100) hit = 100;
7462     
7463     battleDod1Flag = false;
7464     
7465     int omg = 100;
7466     if(battleDod1Flag) omg = 50;
7467     
7468     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
7469         NSLog(@"修正前のダメージ:%g, %g", dmg, U2A->D->seed);
7470         
7471         dmg = [self dmgResist:dmg];
7472         NSLog(@"属性後のダメージ:%g", dmg);
7473         def2 = pow(def2, U->CL.S_C.ARM);
7474         int omfg = rand()%100;
7475         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->CL.S_C.ARM);
7476         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg/10 + dmg - U->CL.S_C.ARM));
7477         if(lolFlag) dmg = (dmg*omfg/100/10 + dmg);
7478         else dmg = (dmg*omfg/100/10+ dmg - U->CL.S_C.ARM);
7479
7480         
7481         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7482         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7483         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7484         
7485         if(U->CL.S_C.typeMOVE == RIKU){
7486             if(U2A->riku == A) dmg = dmg*1.2;
7487             if(U2A->riku == B) dmg = dmg*1.0;
7488             if(U2A->riku == C) dmg = dmg*0.6;
7489             if(U2A->riku == D) dmg = dmg*0.2;
7490             if(U2A->riku == E) dmg = 0;
7491             if(U2A->riku == S) dmg = dmg*1.5;
7492             if(U2A->riku == SS) dmg = dmg*2.0;
7493         } if(U->CL.S_C.typeMOVE == UMI &&
7494              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7495             if(U2A->umi == A) dmg = dmg*1.2;
7496             if(U2A->umi == B) dmg = dmg*1.0;
7497             if(U2A->umi == C) dmg = dmg*0.6;
7498             if(U2A->umi == D) dmg = dmg*0.2;
7499             if(U2A->umi == E) dmg = 0;
7500             if(U2A->umi == S) dmg = dmg*1.5;
7501             if(U2A->umi == SS) dmg = dmg*2.0;
7502         }else if(U->CL.S_C.typeMOVE == UMI){
7503             if(U2A->riku == A) dmg = dmg*1.2;
7504             if(U2A->riku == B) dmg = dmg*1.0;
7505             if(U2A->riku == C) dmg = dmg*0.6;
7506             if(U2A->riku == D) dmg = dmg*0.2;
7507             if(U2A->riku == E) dmg = 0;
7508             if(U2A->riku == S) dmg = dmg*1.5;
7509             if(U2A->riku == SS) dmg = dmg*2.0;
7510             
7511         } if(U->CL.S_C.typeMOVE == CHU){
7512             if(U2A->chu == A) dmg = dmg*1.2;
7513             if(U2A->chu == B) dmg = dmg*1.0;
7514             if(U2A->chu == C) dmg = dmg*0.6;
7515             if(U2A->chu == D) dmg = dmg*0.2;
7516             if(U2A->chu == E) dmg = 0;
7517             if(U2A->chu == S) dmg = dmg*1.5;
7518             if(U2A->chu == SS) dmg = dmg*2.0;
7519         } if(U->CL.S_C.typeMOVE == SORA){
7520             if(U2A->sora == A) dmg = dmg*1.2;
7521             if(U2A->sora == B) dmg = dmg*1.0;
7522             if(U2A->sora == C) dmg = dmg*0.6;
7523             if(U2A->sora == D) dmg = dmg*0.2;
7524             if(U2A->sora == E) dmg = 0;
7525             if(U2A->sora == S) dmg = dmg*1.5;
7526             if(U2A->sora == SS) dmg = dmg*2.0;
7527         }
7528         
7529         NSLog(@"ユニットの地形適用後:%g", dmg);
7530         
7531         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7532         
7533         grazeFlag = false;
7534         omfg = rand()&100;
7535         if(graze > omfg && !healFlag) {dmg = dmg/5;
7536             grazeFlag = true;
7537         }
7538         
7539         if(battleDef1Flag) dmg -= dmg*0.5;
7540         battleDef1Flag = false;
7541         dmg = floor(dmg);
7542         if(dmg < 0) dmg = 0;
7543         U->CL.S_C.HP -= dmg;
7544         U->C.S_C.vigor++;
7545         
7546         while(1){
7547             if(U->CL.S_C.HP <= 0) {
7548                 U->CL.S_C.HP = 0;
7549                 U2->C.S_C.vigor += 5;
7550                 
7551                 messageProcess = 2;
7552                 if(U->dead) break;
7553                 U->dead = true;
7554                
7555                 
7556                 if(U->targType1L)
7557                     targType1cnt[0]--;
7558                 if(U->targType2L) {
7559                     targType2cnt[0]--;
7560                     targType2Lflag = true;
7561                 }
7562                 
7563                 if(U->targType1D)
7564                     targType1cnt[1]--;
7565                 if(U->targType2D) {
7566                     targType2cnt[1]--;
7567                     targType2Dflag = true;
7568                 }
7569                 
7570                 break;
7571             }
7572             break;
7573         }
7574         
7575         
7576         
7577         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
7578         
7579         [lplayer1 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
7580         
7581         if(![U2A->msg isEqualToString:@""]){
7582             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7583                                                         [self originalMessage:U2A->msg subj:U2->C.name obje:U->CL.name]]];
7584         }
7585         
7586         
7587         
7588         if(grazeFlag)
7589             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7590         
7591         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
7592         
7593     }else if(battleDef2Flag){
7594         
7595         
7596         U = UTop;
7597         while (!(DUN[1] == U->number)) {
7598             U = U->next;
7599         }
7600         
7601         
7602         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
7603         
7604         
7605     }else if(battleDod2Flag){
7606         
7607         U = UTop;
7608         while (!(DUN[1] == U->number)) {
7609             U = U->next;
7610         }
7611         
7612         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
7613         
7614         
7615     }else{
7616         
7617         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
7618     }
7619 SKIP1:
7620     [battleDialog setStringValue:message];
7621     
7622     U = UTop;
7623     bLoopFlag = true;
7624     messageProcess++;
7625     return;
7626
7627
7628 }
7629
7630 -(void)DisplayMessageMod3A{//防御側モビール
7631
7632     double def2 = (double)31/32;
7633     NSString *message = @"";
7634     
7635     enum{
7636         RIKU,
7637         UMI,
7638         CHU,
7639         SORA,
7640     };
7641     
7642     enum{
7643         A,
7644         B,
7645         C,
7646         D,
7647         E,
7648         S,
7649         SS
7650     };
7651     
7652     static bool extentbool3 = false;
7653     static bool extentbool4 = false;
7654     if(!extentbool3 && extentBattleFlag2){
7655         extentbool3 = true;
7656         extentMPcostFlag = false;
7657         DUNnum = 1;
7658     }
7659     if(!extentBattleFlag2){
7660         DUNnum = 1;
7661     }
7662     
7663     if(bLoopFlag) return;
7664     U = UTop;
7665     U = UTop;
7666     while (!(DUN[DUNnum] == U->number)) {
7667         U = U->next;
7668     }
7669     U2 = U;
7670     
7671     U = UTop;
7672     while (!(AUN[1] == U->number)) {
7673         U = U->next;
7674     }
7675     
7676     ATTACK *aTop = U->C.A;
7677     for(int i = 0;i < crCAL1;i++){
7678         U->C.A = U->C.A->next;
7679     }
7680     
7681     
7682     if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]];
7683     
7684     
7685     [bplayer2 setImage:U2->CL.imgb];
7686     //[bplayer2 setImageScaling:NSScaleToFit];
7687     [nplayer2 setStringValue:U2->CL.name];
7688     [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U2->CL.S_C.HP, U2->CL.S_M.HP]];
7689     [lplayer2 setIntValue:U2->CL.S_C.HP/U2->CL.S_M.HP*100];
7690     [iplayer2 setImage:MC[chipNum[U2->x][U2->y]].img];
7691     [mplayer2 setStringValue:MC[chipNum[U2->x][U2->y]].name];
7692     [rplayer2 setStringValue:[NSString stringWithFormat:@"地形効果 %d%", MC[chipNum[U2->x][U2->y]].dmgfix]];
7693     
7694     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){
7695         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
7696         
7697         NSString *path = @"data/AttackList/ALdata";
7698         
7699         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
7700         
7701         path = [path stringByAppendingFormat:@"/"];
7702         
7703         path = [path stringByAppendingString:U->C.A->AN.movName];
7704         
7705         NSData *AVData = [NSData dataWithContentsOfFile:path];
7706         
7707         if(AVData)
7708             AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7709         
7710         
7711         if(!AVpreview){
7712             
7713             NSString *path = @"data/AttackList3/IALdata";
7714             
7715             path = [path stringByAppendingFormat:@"%dE", U->C.A->indexE];
7716             
7717             path = [path stringByAppendingFormat:@"/"];
7718             
7719             path = [path stringByAppendingString:U->C.A->AN.movName];
7720             
7721             
7722             NSData *AVData = [NSData dataWithContentsOfFile:path];
7723             
7724             if(AVData)
7725                 AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
7726             
7727             
7728         }
7729         
7730         if(AVpreview) {
7731             AVPV.player = [AVpreview retain];
7732         }else{
7733             goto avAWESOME3A;
7734         }
7735         
7736         
7737         [AVPV setHidden:NO];
7738         [AVpreview play];
7739         [battleDialog setStringValue:message];
7740         
7741         avPlayerFlag1 = true;
7742         
7743         
7744         U->C.A = aTop;
7745         U = UTop;
7746         return;
7747     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag1 && U->C.A->AN.ANI && !animationFlag3 && DUN[DUNnum] == 1){
7748         
7749         [battleDialog setStringValue:message];
7750         animationFlag1 = true;
7751         aniFrameCnt = 0;
7752         return;
7753     }
7754     
7755 avAWESOME3A:{}
7756     
7757     /*
7758     if(U->C.A->D->type == 0) dmg = U->C.S_C.ATK + U->C.A->totalD;
7759     if(U->C.A->D->type == 1) dmg = U->C.S_C.DEF + U->C.A->totalD;
7760     if(U->C.A->D->type == 2) dmg = U->C.S_C.ACU + U->C.A->totalD;
7761     if(U->C.A->D->type == 3) dmg = U->C.S_C.EVA + U->C.A->totalD;
7762     if(U->C.A->D->type == 4) dmg = U->C.S_C.CAP + U->C.A->totalD;
7763     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
7764     */
7765     
7766     double urSupposedToGet;
7767     
7768     if(U->C.A) urSupposedToGet = pow(8, log(3+U->C.A->totalD/16));
7769     
7770     double oopsIsRight;
7771     
7772     if(U->C.A->melee) oopsIsRight = U->C.S_C.MEL;
7773     else oopsIsRight = U->C.S_C.MIS;
7774     bool lolflag = false;
7775     if(U->C.A->D){
7776     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;
7777     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;
7778     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;
7779     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;
7780     
7781     if(U->C.A->D->type == 4){
7782         lolflag = true;
7783         dmg = (U->C.S_C.CAP + U->C.A->totalD)*oopsIsRight/100;
7784     
7785     }
7786     if(U->C.A->D->type == 5) dmg = U->C.A->totalD;
7787     double val2 = log(3+U2->C.S_C.MP/64);
7788         if(U->C.aura){
7789             dmg = dmg*val2;
7790         }
7791     }
7792     costMP = U->C.A->MP + floor(U->C.A->pMP*U->C.S_M.MP/100 + 0.5);
7793     
7794     if(extentMPcostFlag && extentBattleFlag2){
7795         
7796     }else{
7797         U->C.S_C.MP -= costMP;
7798         extentMPcostFlag = true;
7799     }
7800     
7801     hit = U->C.S_C.ACU*U->C.S_C.HIT/100*U->C.S_C.HP/U->C.S_M.HP;
7802     hitFix = U->C.A->hitPercent;
7803     
7804     U2A = U->C.A;
7805     U->C.A = aTop;
7806     
7807     U = UTop;
7808     while (!(DUN[DUNnum] == U->number)) {
7809         U = U->next;
7810     }
7811     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;
7812     if(hit > 100) hit = 100;
7813     if(U2A->D->sort == 1){
7814         hit = 100;
7815     }
7816     
7817     healFlag = false;
7818     
7819     int wtf = 100;
7820     if(battleDod2Flag) wtf = 50;
7821     if(hit - rand()%wtf > 0 && !battleDef1Flag && !battleDod1Flag){
7822         
7823         if(U2A->D->sort == 0){
7824             NSLog(@"修正前のダメージ:%g", dmg);
7825             dmg = [self dmgResist:dmg];
7826             NSLog(@"属性後のダメージ:%g", dmg);
7827             def2 = pow(def2, U->CL.S_C.ARM);
7828             int omfg = rand()%100;
7829             NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, (U->CL.S_C.ARM));
7830             NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->CL.S_C.ARM), (dmg/10 + dmg - U->CL.S_C.ARM));
7831             if(lolflag) dmg = (dmg*omfg/100/10 + dmg);
7832             else dmg = (dmg*omfg/100/10 + dmg - U->CL.S_C.ARM);
7833             NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
7834             if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
7835             else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
7836             
7837             if(U->CL.S_C.typeMOVE == RIKU){
7838                 if(U2A->riku == A) dmg = dmg*1.2;
7839                 if(U2A->riku == B) dmg = dmg*1.0;
7840                 if(U2A->riku == C) dmg = dmg*0.6;
7841                 if(U2A->riku == D) dmg = dmg*0.2;
7842                 if(U2A->riku == E) dmg = 0;
7843                 if(U2A->riku == S) dmg = dmg*1.5;
7844                 if(U2A->riku == SS) dmg = dmg*2.0;
7845             } if(U->CL.S_C.typeMOVE == UMI &&
7846                  (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
7847                 if(U2A->umi == A) dmg = dmg*1.2;
7848                 if(U2A->umi == B) dmg = dmg*1.0;
7849                 if(U2A->umi == C) dmg = dmg*0.6;
7850                 if(U2A->umi == D) dmg = dmg*0.2;
7851                 if(U2A->umi == E) dmg = 0;
7852                 if(U2A->umi == S) dmg = dmg*1.5;
7853                 if(U2A->umi == SS) dmg = dmg*2.0;
7854             }else if(U->CL.S_C.typeMOVE == UMI){
7855                 if(U2A->riku == A) dmg = dmg*1.2;
7856                 if(U2A->riku == B) dmg = dmg*1.0;
7857                 if(U2A->riku == C) dmg = dmg*0.6;
7858                 if(U2A->riku == D) dmg = dmg*0.2;
7859                 if(U2A->riku == E) dmg = 0;
7860                 if(U2A->riku == S) dmg = dmg*1.5;
7861                 if(U2A->riku == SS) dmg = dmg*2.0;
7862                 
7863             } if(U->CL.S_C.typeMOVE == CHU){
7864                 if(U2A->chu == A) dmg = dmg*1.2;
7865                 if(U2A->chu == B) dmg = dmg*1.0;
7866                 if(U2A->chu == C) dmg = dmg*0.6;
7867                 if(U2A->chu == D) dmg = dmg*0.2;
7868                 if(U2A->chu == E) dmg = 0;
7869                 if(U2A->chu == S) dmg = dmg*1.5;
7870                 if(U2A->chu == SS) dmg = dmg*2.0;
7871             } if(U->CL.S_C.typeMOVE == SORA){
7872                 if(U2A->sora == A) dmg = dmg*1.2;
7873                 if(U2A->sora == B) dmg = dmg*1.0;
7874                 if(U2A->sora == C) dmg = dmg*0.6;
7875                 if(U2A->sora == D) dmg = dmg*0.2;
7876                 if(U2A->sora == E) dmg = 0;
7877                 if(U2A->sora == S) dmg = dmg*1.5;
7878                 if(U2A->sora == SS) dmg = dmg*2.0;
7879             }
7880             
7881             NSLog(@"ユニットの地形適用後:%g", dmg);
7882             if(battleDef2Flag) NSLog(@"防御後のダメージ:%g", dmg/2);
7883             graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
7884             
7885             grazeFlag = false;
7886             omfg = rand()%100;
7887             if(graze > omfg && !healFlag) {dmg = dmg/5;
7888                 grazeFlag = true;
7889             }
7890             if(battleDef2Flag) dmg -= dmg*0.5;
7891             battleDef2Flag = false;
7892             dmg = floor(dmg);
7893             if(dmg < 0) dmg = 0;
7894             U->CL.S_C.HP -= dmg;
7895             U->C.S_C.vigor++;
7896             
7897         }else if(U2A->D->sort == 1){
7898             dmg = dmg + rand()%5*dmg/10 - rand()%5*dmg/10;
7899             dmg = floor(dmg);
7900             
7901             U->C.S_C.HP += dmg;
7902             if(U->C.S_C.HP > U->C.S_M.HP) U->C.S_C.HP = U->C.S_M.HP;
7903             healFlag = true;
7904         }
7905         
7906         while(1){
7907             if(U->CL.S_C.HP <= 0) {
7908                 U->CL.S_C.HP = 0;
7909                 U2->C.S_C.vigor += 5;
7910                 
7911                 messageProcess = 2;
7912                 if(U->dead) break;
7913                 U->dead = true;
7914                 
7915                 
7916                 if(U->targType1L)
7917                     targType1cnt[0]--;
7918                 if(U->targType2L) {
7919                     targType2cnt[0]--;
7920                     targType2Lflag = true;
7921                 }
7922                 
7923                 if(U->targType1D)
7924                     targType1cnt[1]--;
7925                 if(U->targType2D) {
7926                     targType2cnt[1]--;
7927                     targType2Dflag = true;
7928                 }
7929                 
7930                 break;
7931             }
7932             break;
7933         }
7934         
7935         [tplayer2 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->CL.S_C.HP, U->CL.S_M.HP]];
7936         [lplayer2 setIntValue:U->CL.S_C.HP/U->CL.S_M.HP*100];
7937         
7938         if(![U2A->msg isEqualToString:@""]){
7939             
7940             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
7941                                                         [self originalMessage:U2A->msg subj:U2->C.name obje:U->CL.name]]];
7942             
7943         }
7944         
7945         if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
7946         if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->CL.name, dmg]];
7947         else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->CL.name, dmg]];
7948     }else if(battleDef1Flag){
7949         
7950         
7951         U = UTop;
7952         while (!(AUN[1] == U->number)) {
7953             U = U->next;
7954         }
7955         
7956         
7957         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]];
7958         
7959         
7960     }else if(battleDod1Flag){
7961         
7962         U = UTop;
7963         while (!(AUN[1] == U->number)) {
7964             U = U->next;
7965         }
7966         
7967         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]];
7968         
7969         
7970     }else{
7971         
7972         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->CL.name]];
7973         
7974     }
7975     [battleDialog setStringValue:message];
7976     
7977     
7978     U = UTop;
7979     
7980     bLoopFlag = true;
7981     
7982     if(!extentBattleFlag2){
7983         if(healFlag) {
7984             messageProcess++;
7985         };
7986         messageProcess++;
7987     }else if(extentBattleFlag2){
7988         DUNnum++;
7989         messageProcess = 1;
7990         if(DUN[DUNnum] == -1){
7991             DUNnum = 1;
7992             messageProcess++;
7993             messageProcess++;
7994             extentBattleFlag2 = false;
7995             extentbool3 = false;
7996             extentMPcostFlag = false;
7997         }
7998     }
7999     return;
8000
8001 }
8002
8003 -(void)DisplayMessageMod3B{
8004
8005     
8006     double def2 = (double)31/32;
8007     NSString *message = @"";
8008     
8009     enum{
8010         RIKU,
8011         UMI,
8012         CHU,
8013         SORA,
8014     };
8015     
8016     enum{
8017         A,
8018         B,
8019         C,
8020         D,
8021         E,
8022         S,
8023         SS
8024     };
8025
8026     
8027     if(bLoopFlag) return;
8028     U = UTop;
8029     
8030     U = UTop;
8031     while (!(AUN[1] == U->number)) {
8032         U = U->next;
8033     }
8034     U2 = U;
8035     
8036     U = UTop;
8037     while (!(DUN[1] == U->number)) {
8038         U = U->next;
8039     }
8040     ATTACK *aTop2 = U->CL.A;
8041     int mostDmg = 0;
8042     int mostNum = -1;
8043     int num = 0;
8044     int mpCost =0;
8045     if(U->CL.A) {
8046         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8047         costVIG = U->C.A->vigor;
8048     }
8049     while(U->CL.A){
8050         mpCost = floor(U->CL.A->EN + U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8051         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){
8052             mostDmg = U->CL.A->totalD;
8053             mostNum = num;
8054         }
8055         U->CL.A = U->CL.A->next;
8056         num++;
8057     }
8058     
8059     if(mostNum < 0) U->C.A = NULL;
8060     
8061     U->CL.A = aTop2;
8062     
8063     if(!battleSet2PushedFlag){
8064         for(int i = 0;i < mostNumSub;i++){
8065             U->CL.A = U->CL.A->next;
8066         }
8067         
8068         
8069     }else{
8070         for(int i = 0;i < crCAL2;i++){
8071             U->CL.A = U->C.A->next;
8072         }
8073     }
8074     
8075     if(U->CL.A->rangeA <= U2->atkRange && U->CL.A->rangeB >= U2->atkRange && U->CL.A->D->sort != 1){
8076     }else while(U->CL.A){
8077         U->CL.A = U->CL.A->next;
8078     }
8079     
8080     if(!U->CL.A){
8081         U->CL.A = aTop2;
8082         U = UTop;
8083         message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]];
8084         goto SKIP1;
8085     }
8086     
8087     if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->CL.name, U->CL.A->name]];
8088     
8089     if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->CL.A->AN.movName isEqualToString:@""] && ![U->CL.A->AN.movName isEqualToString:@"(null)"] && U->CL.A->AN.movName != NULL){
8090         [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[[NSBundle mainBundle] bundlePath]  stringByDeletingLastPathComponent]];
8091         
8092         NSString *path = @"data/AttackList/ALdata";
8093         
8094         path = [path stringByAppendingFormat:@"%dE", U->chipNumber+1];
8095         
8096         path = [path stringByAppendingFormat:@"/"];
8097         
8098         path = [path stringByAppendingString:U->CL.A->AN.movName];
8099         
8100         
8101         AVpreview = [AVPlayer playerWithURL:[NSURL fileURLWithPath:path]];
8102         
8103         if(AVpreview) {
8104             AVPV.player = [AVpreview retain];
8105         }else{
8106             goto avAWESOME3B;
8107         }
8108         
8109         [AVPV setControlsStyle:0];
8110         [AVPV setHidden:NO];
8111         [AVpreview play];
8112         [battleDialog setStringValue:message];
8113         
8114         avPlayerFlag2 = true;
8115         
8116         U->CL.A = aTop2;
8117         U = UTop;
8118         return;
8119     }else if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag1 && !animationFlag2 && U->CL.A->AN.ANI && !animationFlag3){
8120         
8121         
8122         animationFlag2 = true;
8123         aniFrameCnt = 0;
8124         return;
8125     }
8126     
8127     
8128 avAWESOME3B:{}
8129     
8130     
8131
8132     dmg = U->CL.A->totalD;
8133     
8134     costMP = U->CL.A->EN + floor(U->CL.A->pEN*U->CL.S_M.EN/100 + 0.5);
8135     U->CL.S_C.EN -= costMP;
8136     
8137     hit = U->CL.S_C.MOB + U->C.S_C.HIT;
8138     hitFix = U->CL.A->hitPercent;
8139     
8140     U2A = U->CL.A;
8141     U->CL.A = aTop2;
8142     
8143     U = UTop;
8144     while (!(AUN[1] == U->number)) {
8145         U = U->next;
8146     }
8147     
8148     double hit2 = U->C.S_C.EVA*U->C.S_C.DOD/100*U->C.S_C.HP/U->C.S_M.HP;
8149     
8150     double hi = U->C.S_C.LUK - U2->C.S_C.LUK;
8151     if(hi < 0) hi = 0;
8152     
8153     hit = 60 + hit/hit2*10 - hit2/hit*10 + hitFix - log(hi+1)*hit2/hit*10;
8154     if(hit > 100) hit = 100;
8155     
8156     battleDod1Flag = false;
8157     
8158     int omg = 100;
8159     if(battleDod1Flag) omg = 50;
8160     
8161     if(hit - rand()%omg > 0 && !battleDef2Flag && !battleDod2Flag){
8162         NSLog(@"修正前のダメージ:%g", dmg);
8163         dmg = [self dmgResist:dmg];
8164         NSLog(@"属性後のダメージ:%g", dmg);
8165         def2 = pow(def2, U->C.S_C.DEF);
8166         int omfg = rand()%100;
8167         NSLog(@"計算式:(%g + %g - %g)", dmg*omfg/100, dmg, U->C.S_C.DEF);
8168         NSLog(@"ダメージ幅:%g〜%g", (0 + dmg - U->C.S_C.DEF), (dmg/10 + dmg - U->C.S_C.DEF));
8169         dmg = (dmg*omfg/100/10 + dmg - U->C.S_C.DEF);
8170         
8171         
8172         NSLog(@"地形効果:%g - %g", dmg, dmg*MC[chipNum[possionX][possionY]].dmgfix/100);
8173         if(buildNum[possionX][possionY] < 0) dmg -= dmg*MC[chipNum[possionX][possionY]].dmgfix/100 - 0.5;
8174         else dmg -= dmg*BC[buildNum[possionX][possionY]].dmgfix/100 - 0.5;
8175         
8176         if(U->C.S_C.typeMOVE == RIKU){
8177             if(U2A->riku == A) dmg = dmg*1.2;
8178             if(U2A->riku == B) dmg = dmg*1.0;
8179             if(U2A->riku == C) dmg = dmg*0.6;
8180             if(U2A->riku == D) dmg = dmg*0.2;
8181             if(U2A->riku == E) dmg = 0;
8182             if(U2A->riku == S) dmg = dmg*1.5;
8183             if(U2A->riku == SS) dmg = dmg*2.0;
8184         } if(U->C.S_C.typeMOVE == UMI &&
8185              (MC[chipNum[possionX][possionY]].type == 3 || MC[chipNum[possionX][possionY]].type == 4)){
8186             if(U2A->umi == A) dmg = dmg*1.2;
8187             if(U2A->umi == B) dmg = dmg*1.0;
8188             if(U2A->umi == C) dmg = dmg*0.6;
8189             if(U2A->umi == D) dmg = dmg*0.2;
8190             if(U2A->umi == E) dmg = 0;
8191             if(U2A->umi == S) dmg = dmg*1.5;
8192             if(U2A->umi == SS) dmg = dmg*2.0;
8193         }else if(U->C.S_C.typeMOVE == UMI){
8194             if(U2A->riku == A) dmg = dmg*1.2;
8195             if(U2A->riku == B) dmg = dmg*1.0;
8196             if(U2A->riku == C) dmg = dmg*0.6;
8197             if(U2A->riku == D) dmg = dmg*0.2;
8198             if(U2A->riku == E) dmg = 0;
8199             if(U2A->riku == S) dmg = dmg*1.5;
8200             if(U2A->riku == SS) dmg = dmg*2.0;
8201             
8202         } if(U->C.S_C.typeMOVE == CHU){
8203             if(U2A->chu == A) dmg = dmg*1.2;
8204             if(U2A->chu == B) dmg = dmg*1.0;
8205             if(U2A->chu == C) dmg = dmg*0.6;
8206             if(U2A->chu == D) dmg = dmg*0.2;
8207             if(U2A->chu == E) dmg = 0;
8208             if(U2A->chu == S) dmg = dmg*1.5;
8209             if(U2A->chu == SS) dmg = dmg*2.0;
8210         } if(U->C.S_C.typeMOVE == SORA){
8211             if(U2A->sora == A) dmg = dmg*1.2;
8212             if(U2A->sora == B) dmg = dmg*1.0;
8213             if(U2A->sora == C) dmg = dmg*0.6;
8214             if(U2A->sora == D) dmg = dmg*0.2;
8215             if(U2A->sora == E) dmg = 0;
8216             if(U2A->sora == S) dmg = dmg*1.5;
8217             if(U2A->sora == SS) dmg = dmg*2.0;
8218         }
8219         
8220         NSLog(@"ユニットの地形適用後:%g", dmg);
8221         
8222         graze = U->C.S_C.MEN/U2->C.S_C.MEN*U->C.S_C.LUK/3;
8223         
8224         grazeFlag = false;
8225         omfg = rand()&100;
8226         if(graze > omfg && !healFlag) {dmg = dmg/5;
8227             grazeFlag = true;
8228         }
8229         
8230         if(battleDef1Flag) dmg -= dmg*0.5;
8231         battleDef1Flag = false;
8232         dmg = floor(dmg);
8233         if(dmg < 0) dmg = 0;
8234         U->C.S_C.HP -= dmg;
8235         U->C.S_C.vigor++;
8236         
8237         while(1){
8238             if(U->C.S_C.HP <= 0) {
8239                 U->C.S_C.HP = 0;
8240                 U2->C.S_C.vigor += 5;
8241                 
8242                 messageProcess = 2;
8243                 if(U->dead) break;
8244                 U->dead = true;
8245                
8246                 
8247                 if(U->targType1L)
8248                     targType1cnt[0]--;
8249                 if(U->targType2L) {
8250                     targType2cnt[0]--;
8251                     targType2Lflag = true;
8252                 }
8253                 
8254                 if(U->targType1D)
8255                     targType1cnt[1]--;
8256                 if(U->targType2D) {
8257                     targType2cnt[1]--;
8258                     targType2Dflag = true;
8259                 }
8260                 
8261                 break;
8262             }
8263             break;
8264         }
8265         
8266         
8267         
8268         [tplayer1 setStringValue:[NSString stringWithFormat:@"HP %g/%g", U->C.S_C.HP, U->C.S_M.HP]];
8269         
8270         [lplayer1 setIntValue:U->C.S_C.HP/U->C.S_M.HP*100];
8271         
8272         if(![U2A->msg isEqualToString:@""]){
8273             message = [message stringByAppendingString:[NSString stringWithFormat:@"%@\n",
8274                                                         [self originalMessage:U2A->msg subj:U2->CL.name obje:U->C.name]]];
8275         }
8276         
8277         
8278         
8279         if(grazeFlag)
8280             message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]];
8281         
8282         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]];
8283         
8284     }else if(battleDef2Flag){
8285         
8286         
8287         U = UTop;
8288         while (!(DUN[1] == U->number)) {
8289             U = U->next;
8290         }
8291         
8292         
8293         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->CL.name]];
8294         
8295         
8296     }else if(battleDod2Flag){
8297         
8298         U = UTop;
8299         while (!(DUN[1] == U->number)) {
8300             U = U->next;
8301         }
8302         
8303         message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->CL.name]];
8304         
8305         
8306     }else{
8307         
8308         message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]];
8309     }
8310 SKIP1:
8311     [battleDialog setStringValue:message];
8312     
8313     U = UTop;
8314     bLoopFlag = true;
8315     messageProcess++;
8316     return;
8317
8318 }
8319
8320 -(NSString*)originalMessage:(NSString*)str subj:(NSString*)subj obje:(NSString*)obje{
8321
8322     NSString *string;
8323     NSArray *array;
8324     NSString *result = @"";
8325     
8326     string = [str copy];
8327     
8328     array = [string componentsSeparatedByString:@"$subj"];
8329     
8330     for(int i = 0;i < [array count];i++){
8331         if(i != 0)
8332             result = [[result stringByAppendingString:[NSString stringWithFormat:@"%@", subj]] retain];
8333         
8334         result = [[result stringByAppendingString:[array objectAtIndex:i]] retain];
8335     }
8336     
8337     string = [result copy];
8338     
8339     array = [string componentsSeparatedByString:@"$obje"];
8340     
8341     result = @"";
8342     
8343     for(int i = 0;i < [array count];i++){
8344         if(i != 0)
8345             result = [[result stringByAppendingString:[NSString stringWithFormat:@"%@", obje]] retain];
8346         
8347         result = [[result stringByAppendingString:[array objectAtIndex:i]] retain];
8348     }
8349     
8350     //NSLog(@"%@", result);
8351     
8352     return result;
8353 }
8354
8355
8356
8357 -(double)dmgResist:(double)DMG{
8358
8359     if(U2A->D){
8360     if(U2A->D->seed == 0) DMG = DMG * U->C.R_C.blow/100;
8361     if(U2A->D->seed == 1) DMG = DMG * U->C.R_C.slash/100;
8362     if(U2A->D->seed == 2) DMG = DMG * U->C.R_C.stub/100;
8363     if(U2A->D->seed == 3) DMG = DMG * U->C.R_C.arrow/100;
8364     if(U2A->D->seed == 4) DMG = DMG * U->C.R_C.gun/100;
8365     if(U2A->D->seed == 5) DMG = DMG * U->C.R_C.shell/100;
8366     
8367     if(U2A->D->seed == 6) DMG = DMG * U->C.R_C.flame/100;
8368     if(U2A->D->seed == 7) DMG = DMG * U->C.R_C.cold/100;
8369     if(U2A->D->seed == 8) DMG = DMG * U->C.R_C.electoric/100;
8370     if(U2A->D->seed == 9) DMG = DMG * U->C.R_C.air/100;
8371     if(U2A->D->seed == 10) DMG = DMG * U->C.R_C.water/100;
8372     if(U2A->D->seed == 11) DMG = DMG * U->C.R_C.gas/100;
8373     if(U2A->D->seed == 12) DMG = DMG * U->C.R_C.holy/100;
8374     if(U2A->D->seed == 13) DMG = DMG * U->C.R_C.dark/100;
8375     if(U2A->D->seed == 14) DMG = DMG * U->C.R_C.explosion/100;
8376     if(U2A->D->seed == 15) DMG = DMG * U->C.R_C.blood/100;
8377     
8378     if(U2A->D->seed == 16) DMG = DMG * U->C.R_C.paralysis/100;
8379     if(U2A->D->seed == 17) DMG = DMG * U->C.R_C.confusion/100;
8380     if(U2A->D->seed == 18) DMG = DMG * U->C.R_C.poison/100;
8381     if(U2A->D->seed == 19) DMG = DMG * U->C.R_C.sleep/100;
8382     if(U2A->D->seed == 20) DMG = DMG * U->C.R_C.charm/100;
8383     if(U2A->D->seed == 21) DMG = DMG * U->C.R_C.silent/100;
8384     }
8385     return DMG;
8386 }
8387
8388 -(IBAction)battleStart:(id)sender{
8389     battleFlag = false;
8390     battleSetUp = true;
8391     battleSet1Flag = false;
8392     battleSet2Flag = false;
8393     battleSettingFlag = false;
8394
8395     [battlePanel close];
8396 }
8397
8398
8399 -(void)battleStartCPU{
8400     battleFlag = false;
8401     battleSetUp = true;
8402     battleSet1Flag = false;
8403     battleSet2Flag = false;
8404     battleSettingFlag = false;
8405     battleRdy = false;
8406     [self AttackDisplay];
8407     
8408     windowPoint.x = [mapWindow frame].origin.x;
8409     windowPoint.y = [mapWindow frame].origin.y;
8410     [battleWindow setFrameOrigin:windowPoint];
8411     [battleWindow makeKeyAndOrderFront:nil];
8412     [battlePanel close];
8413 }
8414
8415 -(IBAction)battleSet1:(id)sender{
8416     battleSetFlag = false;
8417     battleSet1Flag = true;
8418     battleDef1Flag = false;
8419     battleDod1Flag = false;
8420     battleSettingFlag = true;
8421     battleSet2PushedFlag = false;
8422     
8423     U = UTop;
8424     while (!(AUN[1] == U->number)) {
8425         U = U->next;
8426     }
8427     if(U->chipNumberL >= 0)
8428     {
8429         U = UTop;
8430         [self initCAttackList2];
8431         [self initCAttackSelect2];
8432     }
8433     else if(U->chipNumber >= 0) {
8434         U = UTop;
8435         [self initCAttackList];
8436         [self initCAttackSelect];
8437     }
8438     U = UTop;
8439     
8440     [atkPanel makeKeyAndOrderFront:nil];
8441 }
8442 -(IBAction)battleDef1:(id)sender{
8443     battleDef1Flag = true;
8444     battleSet1Flag = false;
8445     battleDod1Flag = false;
8446 }
8447 -(IBAction)battleDod1:(id)sender{
8448     battleDod1Flag = true;
8449     battleDef1Flag = false;
8450     battleSet1Flag = false;
8451 }
8452 -(IBAction)battleSet2:(id)sender{
8453     battleSetFlag = true;
8454     battleSet2Flag = true;
8455     battleDef2Flag = false;
8456     battleDod2Flag = false;
8457     battleSettingFlag = true;
8458     battleSet2PushedFlag = true;
8459     
8460     U = UTop;
8461     while (!(DUN[1] == U->number)) {
8462         U = U->next;
8463     }
8464     
8465     if(U->chipNumberL >= 0){
8466         U = UTop;
8467         [self initCAttackList2];
8468         [self initCAttackSelect2];
8469     }
8470     else if(U->chipNumber >= 0) {
8471         U = UTop;
8472         [self initCAttackList];
8473         [self initCAttackSelect];
8474     }
8475     U = UTop;
8476     [atkPanel makeKeyAndOrderFront:nil];
8477 }
8478 -(IBAction)battleDef2:(id)sender{
8479     battleDef2Flag = true;
8480     battleSet2Flag = false;
8481     battleDod2Flag = false;
8482 }
8483 -(IBAction)battleDod2:(id)sender{
8484     battleDod2Flag = true;
8485     battleDef2Flag = false;
8486     battleSet2Flag = false;
8487 }
8488
8489 -(IBAction)battleCancel:(id)sender{
8490     battleFlag = false;
8491     battleSettingFlag = false;
8492     
8493     battleSet2PushedFlag = false;
8494     
8495     [battlePanel close];
8496 }
8497
8498 -(IBAction)researchCancel:(id)sender{
8499     [researchPanel close];
8500 }
8501
8502 -(void)setCommandPanel{
8503     
8504     if(buildSkillFlag) cIncludeCreateFlag = true;
8505     else cIncludeCreateFlag = false;
8506     if(summonSkillFlag) cIncludeSummonFlag = true;
8507     else cIncludeSummonFlag = false;
8508     
8509     menuPoint.x = [mapWindow frame].origin.x + 200;
8510     menuPoint.y = [mapWindow frame].origin.y + 200;
8511     
8512     int plusBtnValue = 0;
8513     
8514     if(cIncludeCreateFlag && cIncludeSummonFlag){
8515         
8516         plusBtnValue = 200;
8517         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
8518         
8519         
8520         plusBtnValue -= moveBtn.frame.size.height + 12;
8521         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8522         [[commandPanel contentView] addSubview:moveBtn];
8523         
8524         plusBtnValue -= attackBtn.frame.size.height + 2;
8525         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8526         [[commandPanel contentView] addSubview:attackBtn];
8527         
8528         plusBtnValue -= stanbyBtn.frame.size.height + 2;
8529         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8530         [[commandPanel contentView] addSubview:stanbyBtn];
8531         
8532         [createBtn setTransparent: NO];
8533         [createBtn setEnabled: YES];
8534         plusBtnValue -= createBtn.frame.size.height + 2;
8535         [createBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8536         [[commandPanel contentView] addSubview:createBtn];
8537         
8538         [summonBtn setTransparent: NO];
8539         [summonBtn setEnabled: YES];
8540         plusBtnValue -= summonBtn.frame.size.height + 2;
8541         [summonBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8542         [[commandPanel contentView] addSubview:summonBtn];
8543         
8544         plusBtnValue -= statusBtn.frame.size.height + 2;
8545         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8546         [[commandPanel contentView] addSubview:statusBtn];
8547         
8548         plusBtnValue -= cancelBtn.frame.size.height + 2;
8549         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8550         [[commandPanel contentView] addSubview:cancelBtn];
8551         
8552     }
8553     else if(cIncludeCreateFlag && !cIncludeSummonFlag){
8554         plusBtnValue = 180;
8555         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
8556         
8557         plusBtnValue -= moveBtn.frame.size.height + 12;
8558         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8559         [[commandPanel contentView] addSubview:moveBtn];
8560         
8561         plusBtnValue -= attackBtn.frame.size.height + 2;
8562         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8563         [[commandPanel contentView] addSubview:attackBtn];
8564         
8565         plusBtnValue -= stanbyBtn.frame.size.height + 2;
8566         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8567         [[commandPanel contentView] addSubview:stanbyBtn];
8568         
8569         [createBtn setTransparent: NO];
8570         [createBtn setEnabled: YES];
8571         plusBtnValue -= createBtn.frame.size.height + 2;
8572         [createBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8573         [[commandPanel contentView] addSubview:createBtn];
8574         
8575         [summonBtn setTransparent: YES];
8576         [summonBtn setEnabled: NO];
8577         
8578         plusBtnValue -= statusBtn.frame.size.height + 2;
8579         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8580         [[commandPanel contentView] addSubview:statusBtn];
8581         
8582         plusBtnValue -= cancelBtn.frame.size.height + 2;
8583         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8584         [[commandPanel contentView] addSubview:cancelBtn];
8585         
8586         
8587     }else if(cIncludeSummonFlag && !cIncludeCreateFlag){
8588         
8589         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, 210) display:YES];
8590         
8591         plusBtnValue = 180;
8592         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
8593         
8594         
8595         plusBtnValue -= moveBtn.frame.size.height + 12;
8596         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8597         [[commandPanel contentView] addSubview:moveBtn];
8598         
8599         plusBtnValue -= attackBtn.frame.size.height + 2;
8600         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8601         [[commandPanel contentView] addSubview:attackBtn];
8602         
8603         plusBtnValue -= stanbyBtn.frame.size.height + 2;
8604         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8605         [[commandPanel contentView] addSubview:stanbyBtn];
8606         
8607         [createBtn setTransparent: YES];
8608         [createBtn setEnabled: NO];
8609         
8610         [summonBtn setTransparent: NO];
8611         [summonBtn setEnabled: YES];
8612         plusBtnValue -= summonBtn.frame.size.height + 2;
8613         [summonBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8614         [[commandPanel contentView] addSubview:summonBtn];
8615         
8616         plusBtnValue -= statusBtn.frame.size.height + 2;
8617         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8618         [[commandPanel contentView] addSubview:statusBtn];
8619         
8620         plusBtnValue -= cancelBtn.frame.size.height + 2;
8621         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8622         [[commandPanel contentView] addSubview:cancelBtn];
8623     }else{
8624         
8625         plusBtnValue = 160;
8626         [commandPanel setFrame:NSMakeRect(menuPoint.x, menuPoint.y, 150, plusBtnValue) display:YES];
8627         
8628         plusBtnValue -= moveBtn.frame.size.height + 12;
8629         [moveBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8630         [[commandPanel contentView] addSubview:moveBtn];
8631         
8632         plusBtnValue -= attackBtn.frame.size.height + 2;
8633         [attackBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8634         [[commandPanel contentView] addSubview:attackBtn];
8635         
8636         plusBtnValue -= stanbyBtn.frame.size.height + 2;
8637         [stanbyBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8638         [[commandPanel contentView] addSubview:stanbyBtn];
8639         
8640         [createBtn setTransparent: YES];
8641         [createBtn setEnabled: NO];
8642         
8643         [summonBtn setTransparent: YES];
8644         [summonBtn setEnabled: NO];
8645         
8646         plusBtnValue -= statusBtn.frame.size.height + 2;
8647         [statusBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8648         [[commandPanel contentView] addSubview:statusBtn];
8649         
8650         plusBtnValue -= cancelBtn.frame.size.height + 2;
8651         [cancelBtn setFrame:NSMakeRect(25, plusBtnValue, 100, 23)];
8652         [[commandPanel contentView] addSubview:cancelBtn];
8653     }
8654     
8655
8656 }
8657
8658 -(void)openMessage{
8659     [IVimage setHidden:NO];
8660     [TFname setHidden:NO];
8661     [TFmessage setHidden:NO];
8662     [BXname setHidden:NO];
8663     [BXmessage setHidden:NO];
8664     [IVimage setEnabled:YES];
8665     [TFname setEnabled:YES];
8666     [TFmessage setEnabled:YES];
8667 }
8668
8669 -(void)closeMessage{
8670     [IVimage setHidden:YES];
8671     [TFname setHidden:YES];
8672     [TFmessage setHidden:YES];
8673     [BXname setHidden:YES];
8674     [BXmessage setHidden:YES];
8675     [IVimage setEnabled:NO];
8676     [TFname setEnabled:NO];
8677     [TFmessage setEnabled:NO];
8678 }
8679
8680 -(MAPSCRIPT0*)setMessage:(MAPSCRIPT0*)MS0{
8681
8682     
8683     if(!messageDialog){
8684         [self closeMessage];
8685     }else{
8686         [self openMessage];
8687     
8688         if(!initStringNum){
8689             msgLvl = 0;
8690             msgCnt = 0;
8691             initStringNum = true;
8692         }
8693     
8694     NSString *string = @"";
8695     
8696         string = [MS0->S1.str retain];
8697         msgMax = (int)[string length];
8698         if(!initImgFlag)
8699         {
8700             [self loadImg];
8701             initImgFlag = true;
8702         }
8703         
8704         [IVimage setImage:MS0->S1.img];
8705         [TFname setStringValue:MS0->S1.name];
8706     
8707         if(msgCnt <= msgMax){
8708             [TFmessage setStringValue:[string substringToIndex:msgCnt]];
8709             msgCnt++;
8710         }
8711         
8712         
8713         if(messageEndFlag){
8714             MS0->endFlag = true;
8715             messageEndFlag = false;
8716             messageDialog = false;
8717             MS0->succeessfulFlag = true;
8718             [self setMessage:NULL];
8719         }
8720         
8721         return MS0;
8722     }
8723     
8724     
8725     return MS0;
8726 }
8727
8728 -(void) loadImg{
8729     
8730     NSString *directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
8731     [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
8732     
8733     NSString *path = @"Map/";
8734     NSString *fileData = nil;
8735     NSArray *fileDataArray;
8736     
8737     path = [path stringByAppendingFormat:@"%@"  ,MF[MFselectedRow+1].fileName];
8738     
8739     fileData = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
8740     
8741     fileDataArray = [fileData componentsSeparatedByString:@"\n"];
8742     
8743     MAPSCRIPT0 *MS00 = MF[MFselectedRow+1].MS.D->P;
8744     MAPSCRIPT0 *m00Top = MS00;
8745     for (int i = 0; i < [fileDataArray count]; i++) {
8746         if(!MS00) break;
8747         NSRange range = [[fileDataArray objectAtIndex:i] rangeOfString:@"◆"];
8748         if(range.location != NSNotFound){
8749             
8750             NSArray *array2 = [[fileDataArray objectAtIndex:i] componentsSeparatedByString:@","];
8751             if(MS00->type == 1)
8752             {
8753                 MS00->S1.iName = [[array2 objectAtIndex:2] retain];
8754             
8755             for(int k = 0; k < UCN;k++){
8756                 
8757                 if([MS00->S1.iName isEqualToString:UC[k].nameClass]){
8758                     MS00->S1.img = [UC[k].imgb retain];
8759                     MS00 = MS00->next;
8760                     break;
8761                 }
8762             
8763             }
8764             }
8765             
8766         }
8767     }
8768     
8769     MS00 = m00Top;
8770     
8771 }
8772
8773
8774 -(MAPSCRIPT0*)setSwitch:(MAPSCRIPT0*)MS0{
8775     
8776     if(MS0->switch1)
8777     for(int i = 0;*(MS0->switch1 + i) >0;i++){
8778         Suicchi[*(MS0->switch1+i)] = true;
8779     
8780     }
8781     if(MS0->switch2)
8782     for(int i = 0;*(MS0->switch2 + i) >0;i++){
8783         Suicchi[*(MS0->switch2+i)] = false;
8784         
8785     }
8786     
8787     MS0->succeessfulFlag = true;
8788     MS0->endFlag = true;
8789     return MS0;
8790 }
8791
8792 -(MAPSCRIPT0*)setBranch:(MAPSCRIPT0*)MS0{
8793
8794     MAPSCRIPT0 *CRMS0 = MS0;
8795     bool branchEndFlag = false;
8796     bool branchSuceedFlag = false;
8797     bool trueFlag = true;
8798     
8799     
8800     if(MS0->endFlag)
8801         return MS0;
8802     
8803     if(1){
8804         
8805         if(MS0->S4.suicchiFlag){
8806             if(MS0->S4.suicchiONOFF == 0){
8807                 if(MS0->S4.suicchi)
8808                 for (int i = 0;*(MS0->S4.suicchi + i);i++) {
8809                     if(!Suicchi[*(MS0->S4.suicchi + i)]){
8810                         trueFlag = false;
8811                     }
8812                 }
8813             }else{
8814                 if(MS0->S4.suicchi)
8815                     for (int i = 0;*(MS0->S4.suicchi + i);i++) {
8816                         if(Suicchi[*(MS0->S4.suicchi + i)]){
8817                             trueFlag = false;
8818                         }
8819                     }
8820             }
8821         }
8822         
8823         if(MS0->S4.hensuFlag){
8824         
8825             if(MS0->S4.teisuFlag){
8826                 if(MS0->S4.hensuType == 0){
8827                     if([Hensuu[MS0->S4.hensu1] intValue] == MS0->S4.teisuValue){
8828                         
8829                     }else{
8830                         trueFlag = false;
8831                     }
8832                 }else if(MS0->S4.hensuType == 1){
8833                     if([Hensuu[MS0->S4.hensu1] intValue] >= MS0->S4.teisuValue){
8834                         
8835                     }else{
8836                         trueFlag = false;
8837                     }
8838                 }else if(MS0->S4.hensuType == 2){
8839                     if([Hensuu[MS0->S4.hensu1] intValue] <= MS0->S4.teisuValue){
8840                         
8841                     }else{
8842                         trueFlag = false;
8843                     }
8844                 }else if(MS0->S4.hensuType == 3){
8845                     if([Hensuu[MS0->S4.hensu1] intValue] > MS0->S4.teisuValue){
8846                         
8847                     }else{
8848                         trueFlag = false;
8849                     }
8850                 }else if(MS0->S4.hensuType == 4){
8851                     if([Hensuu[MS0->S4.hensu1] intValue] < MS0->S4.teisuValue){
8852                         
8853                     }else{
8854                         trueFlag = false;
8855                     }
8856                 }else if(MS0->S4.hensuType == 5){
8857                     if([Hensuu[MS0->S4.hensu1] intValue] != MS0->S4.teisuValue){
8858                         
8859                     }else{
8860                         trueFlag = false;
8861                     }
8862                 }
8863             
8864             }if(MS0->S4.hensu2flag){
8865                 if(MS0->S4.hensuType == 0){
8866                     if([Hensuu[MS0->S4.hensu1] isEqualToString:Hensuu[MS0->S4.hensu2]]){
8867                         
8868                     }else{
8869                         trueFlag = false;
8870                     }
8871                 }else if(MS0->S4.hensuType == 1){
8872                     if([Hensuu[MS0->S4.hensu1] intValue] >= [Hensuu[MS0->S4.hensu2] intValue]){
8873                         
8874                     }else{
8875                         trueFlag = false;
8876                     }
8877                 }else if(MS0->S4.hensuType == 2){
8878                     if([Hensuu[MS0->S4.hensu1] intValue] <= [Hensuu[MS0->S4.hensu2] intValue]){
8879                         
8880                     }else{
8881                         trueFlag = false;
8882                     }
8883                 }else if(MS0->S4.hensuType == 3){
8884                     if([Hensuu[MS0->S4.hensu1] intValue] > [Hensuu[MS0->S4.hensu2] intValue]){
8885                         
8886                     }else{
8887                         trueFlag = false;
8888                     }
8889                 }else if(MS0->S4.hensuType == 4){
8890                     if([Hensuu[MS0->S4.hensu1] intValue] < [Hensuu[MS0->S4.hensu2] intValue]){
8891                         
8892                     }else{
8893                         trueFlag = false;
8894                     }
8895                 }else if(MS0->S4.hensuType == 5){
8896                     if(![Hensuu[MS0->S4.hensu1] isEqualToString:Hensuu[MS0->S4.hensu2]]){
8897                         
8898                     }else{
8899                         trueFlag = false;
8900                     }
8901                 }
8902             }
8903             
8904         }
8905         if(MS0->S4.timerFlag){
8906         
8907             if(MS0->S4.timerType == 0){
8908                 if(MS0->S4.timerMin <= cntTimerMin){
8909                 
8910                 }else if(MS0->S4.timerSec <= cntTimerSec && MS0->S4.timerMin <= cntTimerMin){
8911                 
8912                 }else{
8913                     trueFlag = false;
8914                 }
8915             
8916             
8917             
8918             }else{
8919                 if(MS0->S4.timerMin >= cntTimerMin){
8920                     
8921                 }else if(MS0->S4.timerSec >= cntTimerSec && MS0->S4.timerMin >= cntTimerMin){
8922                     
8923                 }else{
8924                     trueFlag = false;
8925                 }
8926             
8927             }
8928         }
8929         
8930
8931         
8932         if(MS0->S4.unitNumFlag){
8933             
8934             
8935             int Unum = 0;
8936             U = UTop;;
8937             while (U) {
8938                 Unum++;
8939                 U = U->next;
8940             }U = UTop;
8941             
8942             int objeSCSunitCnt = 0;
8943             
8944             if(MS0->S4.objeFlag){
8945                 
8946                 UNIT2 *objeT = MS0->S4.obje;
8947                 
8948                 while (MS0->S4.obje) {
8949                     
8950                     
8951                     
8952                     U = UTop;
8953                     static bool okflag = true;
8954                     while(U){
8955                         for (int i = 0;i < 1002;i++) {
8956                             for (int k = 0;k < 1002;k++) {
8957                                 objeR[i][k] = 0;
8958                             }
8959                         }
8960                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
8961                         
8962                         int Cnum = 0;
8963                         
8964                         for(int bx=1;bx<=chipWidth;bx++){
8965                             for(int by=1;by<=chipHeight;by++){
8966                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
8967                                     
8968                                     if(objeR[U->x][U->y] > 0){
8969                                         Cnum++;
8970                                         if(Unum < Cnum) goto omfgUnitOver2;
8971                                         
8972                                         
8973                                         
8974                                         
8975                                         
8976                                         if(UP)
8977                                         {
8978                                             if(!UPT){
8979                                                 UPT = UP;
8980                                             }
8981                                             
8982                                             UP = UPT;
8983                                             while (UP) {
8984                                                 if(UP->x == U->x && UP->y == U->y){
8985                                                     
8986                                                     break;
8987                                                 }else{
8988                                                     okflag = true;
8989                                                 }
8990                                                 
8991                                                 UP = UP->next;
8992                                             }
8993                                             
8994                                         }
8995                                         UP = UPT;
8996                                         
8997                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
8998                                         else if(UP){
8999                                             while(UP->next) UP = UP->next;
9000                                         }
9001                                         if(okflag){
9002                                             UP->x = U->x;
9003                                             UP->y = U->y;
9004                                             UP->next = calloc(1, sizeof(UNITPOINT));
9005                                             okflag = false;
9006                                             objeSCSunitCnt++;
9007                                         }
9008                                     }
9009                                     
9010                                 }
9011                             }
9012                         }
9013                         
9014                     omfgUnitOver2:
9015                         UP = NULL;
9016                         UPT = NULL;
9017                         
9018                         //NSLog(@"%@, %d, %d", U->C.name, objeSCSunitCnt, objeR[0][0]);
9019                         
9020                         U = U->next;
9021                     }U = UTop;
9022                     okflag = true;
9023                     MS0->S4.obje = MS0->S4.obje->next;
9024                 }
9025                 MS0->S4.obje = objeT;
9026             }
9027             
9028             
9029             if(MS0->S4.buildFlag){
9030                 if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
9031                 
9032                 }
9033                 
9034                 if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
9035                    BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
9036                    Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
9037                 
9038                 }
9039             }
9040             
9041             int team0num = 0;
9042             int team1num = 0;
9043             int team2num = 0;
9044             if(MS0->S4.team == 0){
9045                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9046                 UTop = U;
9047                 while (U) {
9048                     if(U->team == 0 && !U->dead)
9049                         team0num++;
9050                     U = U->next;
9051                 }U = UTop;
9052                 }
9053                 if(MS0->S4.unitType == 0){
9054                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team0num = MS0->S4.unitNum;
9055                     
9056                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9057                         
9058                     }else if((MS0->S4.unitNum == team0num) && !MS0->S4.objeFlag){
9059                         
9060                     }else{
9061                         trueFlag = false;
9062                     }
9063                 }else if(MS0->S4.unitType == 1){
9064                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team0num = 65000;
9065                     
9066                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9067                         
9068                     }else if((MS0->S4.unitNum <= team0num) && !MS0->S4.objeFlag){
9069                         
9070                     }else{
9071                         trueFlag = false;
9072                     }
9073                 }else if(MS0->S4.unitType == 2){
9074                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9075                         
9076                     }else if((MS0->S4.unitNum >= team0num) && !MS0->S4.objeFlag){
9077                         
9078                     }else{
9079                         trueFlag = false;
9080                     }
9081                 }
9082
9083             
9084             }else if(MS0->S4.team == 1){
9085                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9086                 UTop = U;
9087                 while (U) {
9088                     if(U->team == 1 && !U->dead)
9089                         team1num++;
9090                     U = U->next;
9091                 }U = UTop;
9092                 }
9093                 if(MS0->S4.unitType == 0){
9094                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team1num = MS0->S4.unitNum;
9095                     
9096                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9097                         
9098                     }else if((MS0->S4.unitNum == team1num) && !MS0->S4.objeFlag){
9099                         
9100                     }else{
9101                         trueFlag = false;
9102                     }
9103                 }else if(MS0->S4.unitType == 1){
9104                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team1num = 65000;
9105                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9106                         
9107                     }else if((MS0->S4.unitNum <= team1num) && !MS0->S4.objeFlag){
9108                         
9109                     }else{
9110                         trueFlag = false;
9111                     }
9112                 }else if(MS0->S4.unitType == 2){
9113                     
9114                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9115                         
9116                     }else if((MS0->S4.unitNum >= team1num) && !MS0->S4.objeFlag){
9117                         
9118                     }else{
9119                         trueFlag = false;
9120                     }
9121                 }
9122             }else if(MS0->S4.team == 2){
9123                 if(!MS0->S4.objeFlag && !MS0->S4.placeFlag){
9124                 UTop = U;
9125                 while (U) {
9126                     if(U->team == 2 && !U->dead)
9127                         team2num++;
9128                     U = U->next;
9129                 }U = UTop;
9130                 }
9131                 if(MS0->S4.unitType == 0){
9132                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team2num = MS0->S4.unitNum;
9133                     
9134                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == objeSCSunitCnt)){
9135                         
9136                     }else if((MS0->S4.unitNum == team2num) && !MS0->S4.objeFlag){
9137                         
9138                     }else{
9139                         trueFlag = false;
9140                     }
9141                 }else if(MS0->S4.unitType == 1){
9142                     if(MS0->S4.objeFlag || MS0->S4.placeFlag) team2num = 65000;
9143                     
9144                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= objeSCSunitCnt)){
9145                         
9146                     }else if((MS0->S4.unitNum <= team2num) && !MS0->S4.objeFlag){
9147                         
9148                     }else{
9149                         trueFlag = false;
9150                     }
9151                 }else if(MS0->S4.unitType == 2){
9152                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= objeSCSunitCnt)){
9153                         
9154                     }else if((MS0->S4.unitNum >= team2num) && !MS0->S4.objeFlag){
9155                         
9156                     }else{
9157                         trueFlag = false;
9158                     }
9159                 }
9160             }
9161         
9162         }
9163         
9164     
9165
9166         if(MS0->S4.unitTypeFlag && MS0->S4.unitNumFlag){
9167             UNIT2 *sjt = MS0->S4.subj;
9168             UNIT *chosen = NULL;
9169             UNIT *chosenT = NULL;
9170             int cntUnit = 0;
9171             bool lmao = false;
9172             while(MS0->S4.subj){
9173                 U = UTop;
9174                 while(U){
9175                     if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
9176                         if(chosen){
9177                             chosen->next = calloc(1, sizeof(UNIT));
9178                             if(!lmao){
9179                                 chosenT = chosen;
9180                                 lmao = true;
9181                             }
9182                             chosen = chosen->next;
9183                         }
9184                         if(!chosen){
9185                             chosen = calloc(1, sizeof(UNIT));
9186                         }
9187                         chosen->x = U->x;
9188                         chosen->y = U->y;
9189                         chosen->C.name = U->C.name;
9190                         
9191                         if(!U->dead)
9192                             cntUnit++;
9193                     }
9194                     U = U->next;
9195                 }U = UTop;
9196                 if(!lmao){
9197                     chosenT = chosen;
9198                     lmao = true;
9199                 }
9200                 MS0->S4.subj = MS0->S4.subj->next;
9201             }MS0->S4.subj = sjt;
9202             chosen = chosenT;
9203
9204             int objeSCSunitCnt = 0;
9205             
9206             
9207             int Unum = 0;
9208             
9209             
9210             while (chosen) {
9211                 Unum++;
9212                 chosen = chosen->next;
9213             }chosen = chosenT;
9214             
9215             if(MS0->S4.unitTypeFlag && MS0->S4.objeFlag){
9216                 
9217                 UNIT2 *objeT = MS0->S4.obje;
9218                 
9219                 while (MS0->S4.obje) {
9220                     
9221                     
9222                     
9223                     chosen = chosenT;
9224                     static bool okflag = true;
9225                     while(chosen){
9226                         for (int i = 0;i < 1002;i++) {
9227                             for (int k = 0;k < 1002;k++) {
9228                                 objeR[i][k] = 0;
9229                             }
9230                         }
9231                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:chosen scsCnt:&objeSCSunitCnt];
9232                         
9233                         int Cnum = 0;
9234                         
9235                         for(int bx=1;bx<=chipWidth;bx++){
9236                             for(int by=1;by<=chipHeight;by++){
9237                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
9238                                     
9239                                     if(objeR[chosen->x][chosen->y] > 0){
9240                                         Cnum++;
9241                                         if(Unum < Cnum) goto omfgUnitOver3;
9242                                         
9243                                         
9244                                         
9245                                         
9246                                         
9247                                         if(UP)
9248                                         {
9249                                             if(!UPT){
9250                                                 UPT = UP;
9251                                             }
9252                                             
9253                                             UP = UPT;
9254                                             while (UP) {
9255                                                 if(UP->x == chosen->x && UP->y == chosen->y){
9256                                                     
9257                                                     break;
9258                                                 }else{
9259                                                     okflag = true;
9260                                                 }
9261                                                 
9262                                                 UP = UP->next;
9263                                             }
9264                                             
9265                                         }
9266                                         UP = UPT;
9267                                         
9268                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9269                                         else if(UP){
9270                                             while(UP->next) UP = UP->next;
9271                                         }
9272                                         if(okflag){
9273                                             UP->x = chosen->x;
9274                                             UP->y = chosen->y;
9275                                             UP->next = calloc(1, sizeof(UNITPOINT));
9276                                             okflag = false;
9277                                             objeSCSunitCnt++;
9278                                         }
9279                                     }
9280                                     
9281                                 }
9282                             }
9283                         }
9284                         
9285                     omfgUnitOver3:
9286                         UP = NULL;
9287                         UPT = NULL;
9288                         
9289                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
9290                         
9291                         chosen = chosen->next;
9292                     }chosen = chosenT;
9293                     okflag = true;
9294                     MS0->S4.obje = MS0->S4.obje->next;
9295                 }
9296                 MS0->S4.obje = objeT;
9297             }else if(MS0->S4.objeFlag){
9298                 
9299                 UNIT2 *objeT = MS0->S4.obje;
9300                 
9301                 while (MS0->S4.obje) {
9302                     
9303                     
9304                     
9305                     U = UTop;
9306                     static bool okflag = true;
9307                     while(U){
9308                         if(U->team != MS0->S4.team){
9309                             U = U->next;
9310                             continue;
9311                         }
9312                         for (int i = 0;i < 1002;i++) {
9313                             for (int k = 0;k < 1002;k++) {
9314                                 objeR[i][k] = 0;
9315                             }
9316                         }
9317                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
9318                         
9319                         int Cnum = 0;
9320                         
9321                         for(int bx=1;bx<=chipWidth;bx++){
9322                             for(int by=1;by<=chipHeight;by++){
9323                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
9324                                     
9325                                     if(objeR[chosen->x][chosen->y] > 0){
9326                                         Cnum++;
9327                                         if(Unum < Cnum) goto omfgUnitOver30;
9328                                         
9329                                         
9330                                         
9331                                         
9332                                         
9333                                         if(UP)
9334                                         {
9335                                             if(!UPT){
9336                                                 UPT = UP;
9337                                             }
9338                                             
9339                                             UP = UPT;
9340                                             while (UP) {
9341                                                 if(UP->x == chosen->x && UP->y == chosen->y){
9342                                                     
9343                                                     break;
9344                                                 }else{
9345                                                     okflag = true;
9346                                                 }
9347                                                 
9348                                                 UP = UP->next;
9349                                             }
9350                                             
9351                                         }
9352                                         UP = UPT;
9353                                         
9354                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9355                                         else if(UP){
9356                                             while(UP->next) UP = UP->next;
9357                                         }
9358                                         if(okflag){
9359                                             UP->x = chosen->x;
9360                                             UP->y = chosen->y;
9361                                             UP->next = calloc(1, sizeof(UNITPOINT));
9362                                             okflag = false;
9363                                             objeSCSunitCnt++;
9364                                         }
9365                                     }
9366                                     
9367                                 }
9368                             }
9369                         }
9370                         
9371                     omfgUnitOver30:
9372                         UP = NULL;
9373                         UPT = NULL;
9374                         
9375                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
9376                         
9377                         chosen = chosen->next;
9378                     }chosen = chosenT;
9379                     okflag = true;
9380                     MS0->S4.obje = MS0->S4.obje->next;
9381                 }
9382                 MS0->S4.obje = objeT;
9383                 U = UTop;
9384             }
9385
9386             
9387             int team0num = 0;
9388             int team1num = 0;
9389             int team2num = 0;
9390             if(MS0->S4.team == 0){
9391                 if(!MS0->S4.unitTypeFlag){
9392                 UTop = U;
9393                 while (U) {
9394                     if(U->team == 0 && !U->dead)
9395                         team0num++;
9396                     U = U->next;
9397                 }U = UTop;
9398                 }
9399                 if(MS0->S4.unitType == 0){
9400                     if(MS0->S4.unitTypeFlag) team0num = MS0->S4.unitNum;
9401                     
9402                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == cntUnit)
9403                        && (MS0->S4.unitNum == objeSCSunitCnt)){
9404                         
9405                     }else if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
9406                     
9407                     }else{
9408                         trueFlag = false;
9409                     }
9410                 }else if(MS0->S4.unitType == 1){
9411                     if(MS0->S4.unitTypeFlag) team0num = 65000;
9412                     
9413                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= cntUnit)
9414                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
9415                         
9416                     }else if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
9417                     
9418                     }else{
9419                         trueFlag = false;
9420                     }
9421                 }else if(MS0->S4.unitType == 2){
9422                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= cntUnit)
9423                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
9424                         
9425                     }else if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
9426                     
9427                     }else{
9428                         trueFlag = false;
9429                     }
9430                 }
9431                 
9432                 
9433             }else if(MS0->S4.team == 1){
9434                 if(!MS0->S4.unitTypeFlag){
9435                 UTop = U;
9436                 while (U) {
9437                     if(U->team == 1 && !U->dead)
9438                         team1num++;
9439                     U = U->next;
9440                 }U = UTop;
9441                 }
9442                 if(MS0->S4.unitType == 0){
9443                     if(MS0->S4.unitTypeFlag) team1num = MS0->S4.unitNum;
9444                     
9445                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == cntUnit)
9446                        && (MS0->S4.unitNum == objeSCSunitCnt)){
9447                         
9448                     }else if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
9449                     
9450                     }else{
9451                         trueFlag = false;
9452                     }
9453                 }else if(MS0->S4.unitType == 1){
9454                     if(MS0->S4.unitTypeFlag) team1num = 65000;
9455                     
9456                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= cntUnit)
9457                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
9458                         
9459                     }else if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
9460                     
9461                     }else{
9462                         trueFlag = false;
9463                     }
9464                 }else if(MS0->S4.unitType == 2){
9465                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= cntUnit)
9466                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
9467                         
9468                     }else if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
9469                     
9470                     }else{
9471                         trueFlag = false;
9472                     }
9473                 }
9474             }else if(MS0->S4.team == 2){
9475                 if(!MS0->S4.unitTypeFlag){
9476                 UTop = U;
9477                 while (U) {
9478                     if(U->team == 2 && !U->dead)
9479                         team2num++;
9480                     U = U->next;
9481                 }U = UTop;
9482                 }
9483                 if(MS0->S4.unitType == 0){
9484                     if(MS0->S4.unitTypeFlag) team2num = MS0->S4.unitNum;
9485                     
9486                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == cntUnit)
9487                        && (MS0->S4.unitNum == objeSCSunitCnt)){
9488                         
9489                     }else if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == cntUnit) && !MS0->S4.objeFlag){
9490                     
9491                     }else{
9492                         trueFlag = false;
9493                     }
9494                 }else if(MS0->S4.unitType == 1){
9495                     if(MS0->S4.unitTypeFlag) team2num = 65000;
9496                     
9497                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= cntUnit)
9498                        && (MS0->S4.unitNum <= objeSCSunitCnt)){
9499                         
9500                     }else if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= cntUnit) && !MS0->S4.objeFlag){
9501                     
9502                     }else{
9503                         trueFlag = false;
9504                     }
9505                 }else if(MS0->S4.unitType == 2){
9506                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= cntUnit)
9507                        && (MS0->S4.unitNum >= objeSCSunitCnt)){
9508                         
9509                     }else if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= cntUnit) && !MS0->S4.objeFlag){
9510                     
9511                     }else{
9512                         trueFlag = false;
9513                     }
9514                 }
9515             }
9516         
9517         
9518         
9519         
9520         
9521         
9522         }
9523         
9524         
9525         
9526         
9527         if(MS0->S4.placeFlag && MS0->S4.unitNumFlag){
9528             int Unum = 0;
9529             U = UTop;;
9530             while (U) {
9531                 Unum++;
9532                 U = U->next;
9533             }U = UTop;
9534             
9535             
9536          
9537             UNIT2 *sjt = MS0->S4.subj;
9538             UNIT *chosen = NULL;
9539             UNIT *chosenT = NULL;
9540             int cntUnit = 0;
9541             bool lmao = false;
9542             if(MS0->S4.unitTypeFlag){
9543                 while(MS0->S4.subj){
9544                     U = UTop;
9545                     while(U){
9546                         if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
9547                             if(chosen){
9548                                 chosen->next = calloc(1, sizeof(UNIT));
9549                                 if(!lmao){
9550                                     chosenT = chosen;
9551                                     lmao = true;
9552                                 }
9553                                 chosen = chosen->next;
9554                             }
9555                             if(!chosen){
9556                                 chosen = calloc(1, sizeof(UNIT));
9557                             }
9558                             chosen->x = U->x;
9559                             chosen->y = U->y;
9560                             chosen->C.name = U->C.name;
9561                             
9562                             if(!U->dead)
9563                                 cntUnit++;
9564                         }
9565                         U = U->next;
9566                     }U = UTop;
9567                     if(!lmao){
9568                         chosenT = chosen;
9569                         lmao = true;
9570                     }
9571                     MS0->S4.subj = MS0->S4.subj->next;
9572                 }MS0->S4.subj = sjt;
9573                 chosen = chosenT;
9574                 
9575     
9576                 
9577                 Unum = 0;
9578                 while (chosen) {
9579                     Unum++;
9580                     chosen = chosen->next;
9581                 }chosen = chosenT;
9582                 
9583             }
9584             
9585             
9586                 PLACEMENT *wpt = MS0->S4.wayp;
9587                 int waypCnt = 0;
9588                 int waypSCScnt = 0;
9589                 bool waypSCS = false;
9590                 int waypSCSunitCnt = 0;
9591             
9592             
9593             if(!MS0->S4.unitTypeFlag){
9594         
9595             while (MS0->S4.wayp) {
9596                     waypCnt++;
9597                     
9598                     
9599                     
9600                     
9601                     if(MS0->S4.wayp->type == 0){
9602                     U = UTop;
9603                     while(U){
9604                         if(U->team != MS0->S4.team){
9605                             U = U->next;
9606                             continue;
9607                         }
9608                         if(MS0->S4.wayp->x == U->x && MS0->S4.wayp->y == U->y){
9609                             waypSCScnt++;
9610                             waypSCSunitCnt++;
9611                             break;
9612                         }
9613                         U = U->next;
9614                     }U = UTop;
9615                         
9616                     }else if(MS0->S4.wayp->type == 1){
9617                         U = UTop;
9618                         static bool okflag = true;
9619                         while(U){
9620                             if(U->team != MS0->S4.team){
9621                                 U = U->next;
9622                                 continue;
9623                             }
9624                             for (int i = 0;i < 1002;i++) {
9625                                 for (int k = 0;k < 1002;k++) {
9626                                     waypR[i][k] = 0;
9627                                 }
9628                             }
9629                             [self checkPlaceHani:MS0->S4.wayp->z+1 tX:MS0->S4.wayp->y tY:MS0->S4.wayp->x aMap:waypR u:U scsCnt:&waypSCSunitCnt];
9630                             
9631                             int Cnum = 0;
9632                             
9633                             for(int bx=1;bx<=chipWidth;bx++){
9634                                 for(int by=1;by<=chipHeight;by++){
9635                                     if(waypR[bx][by] != 999 && waypR[bx][by] > 0){
9636                                         
9637                                         if(waypR[U->x][U->y] > 0){
9638                                             Cnum++;
9639                                             if(Unum < Cnum) goto omfgUnitOver;
9640                                             
9641                                             
9642
9643                                             
9644                                             
9645                                             if(UP)
9646                                             {
9647                                                 if(!UPT){
9648                                                     UPT = UP;
9649                                                 }
9650                                                 
9651                                                 UP = UPT;
9652                                                 while (UP) {
9653                                                     if(UP->x == U->x && UP->y == U->y){
9654                                                         
9655                                                         break;
9656                                                     }else{
9657                                                         okflag = true;
9658                                                     }
9659                                                     
9660                                                     UP = UP->next;
9661                                                 }
9662                                             
9663                                             }
9664                                             UP = UPT;
9665                                             
9666                                             if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9667                                             else if(UP){
9668                                                 while(UP->next) UP = UP->next;
9669                                             }
9670                                             if(okflag){
9671                                                 UP->x = U->x;
9672                                                 UP->y = U->y;
9673                                                 UP->next = calloc(1, sizeof(UNITPOINT));
9674                                                 okflag = false;
9675                                                 waypSCSunitCnt++;
9676                                             }
9677                                         }
9678                                         
9679                                     }
9680                                 }
9681                             }
9682                             
9683                         omfgUnitOver:
9684                             UP = NULL;
9685                             UPT = NULL;
9686                    //         NSLog(@"%d", waypSCSunitCnt);
9687                             
9688                              U = U->next;
9689                         }U = UTop;
9690                         okflag = true;
9691                     
9692                     
9693                     
9694                     }else if(MS0->S4.wayp->type == 2){
9695                         U = UTop;
9696                         waypSCSunitCnt = 0;
9697                         static bool okflag = true;
9698                         while(U){
9699                             if(U->team != MS0->S4.team){
9700                                 U = U->next;
9701                                 continue;
9702                             }
9703                             if((MS0->S4.wayp->x <= U->x) && (MS0->S4.wayp->x2 >= U->x) &&
9704                                (MS0->S4.wayp->y <= U->y) && (MS0->S4.wayp->y2 >= U->y)){
9705                                 
9706                                 
9707                                 int Cnum = 0;
9708                                 
9709                                 if(1){
9710                                     Cnum++;
9711                                     if(Unum < Cnum) goto omfgUnitOver;
9712                                     
9713                                     
9714                                     
9715                                     
9716                                     
9717                                     if(UP)
9718                                     {
9719                                         if(!UPT){
9720                                             UPT = UP;
9721                                         }
9722                                         
9723                                         UP = UPT;
9724                                         while (UP) {
9725                                             if(UP->x == U->x && UP->y == U->y){
9726                                                 
9727                                                 break;
9728                                             }else{
9729                                                 okflag = true;
9730                                             }
9731                                             
9732                                             UP = UP->next;
9733                                         }
9734                                         
9735                                     }
9736                                     UP = UPT;
9737                                     
9738                                     if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9739                                     else if(UP){
9740                                         while(UP->next) UP = UP->next;
9741                                     }
9742                                     if(okflag){
9743                                         UP->x = U->x;
9744                                         UP->y = U->y;
9745                                         UP->next = calloc(1, sizeof(UNITPOINT));
9746                                         okflag = false;
9747                                         waypSCScnt++;
9748                                         waypSCSunitCnt++;
9749                                     }
9750                                 }
9751                                 
9752                                 
9753                                 
9754                                 
9755                             }
9756                             U = U->next;
9757                         }U = UTop;
9758                         okflag = true;
9759                     }
9760                     
9761                     MS0->S4.wayp = MS0->S4.wayp->next;
9762                 }MS0->S4.wayp = wpt;
9763            // NSLog(@"%d", waypSCSunitCnt);
9764             
9765             if(waypSCScnt >= waypCnt)
9766                 waypSCS = true;
9767             
9768             }else if(MS0->S4.unitTypeFlag){
9769             
9770                 while (MS0->S4.wayp) {
9771                     waypCnt++;
9772                     
9773                     
9774                     
9775                     
9776                     if(MS0->S4.wayp->type == 0){
9777                         chosen = chosenT;
9778                         while(chosen){
9779                             if(MS0->S4.wayp->x == chosen->x && MS0->S4.wayp->y == chosen->y){
9780                                 waypSCScnt++;
9781                                 waypSCSunitCnt++;
9782                                 break;
9783                             }
9784                             chosen = chosen->next;
9785                         }chosen = chosenT;
9786                         
9787                     }else if(MS0->S4.wayp->type == 1){
9788                         chosen = chosenT;
9789                         static bool okflag = true;
9790                         while(chosen){
9791                             for (int i = 0;i < 1002;i++) {
9792                                 for (int k = 0;k < 1002;k++) {
9793                                     waypR[i][k] = 0;
9794                                 }
9795                             }
9796                             [self checkPlaceHani:MS0->S4.wayp->z+1 tX:MS0->S4.wayp->y tY:MS0->S4.wayp->x aMap:waypR u:chosen scsCnt:&waypSCSunitCnt];
9797                             
9798                             int Cnum = 0;
9799                             
9800                             for(int bx=1;bx<=chipWidth;bx++){
9801                                 for(int by=1;by<=chipHeight;by++){
9802                                     if(waypR[bx][by] != 999 && waypR[bx][by] > 0){
9803                                         
9804                                         if(waypR[chosen->x][chosen->y] > 0){
9805                                             Cnum++;
9806                                             if(Unum < Cnum) goto omfgUnitOver5;
9807                                             
9808                                             
9809                                             
9810                                             
9811                                             
9812                                             if(UP)
9813                                             {
9814                                                 if(!UPT){
9815                                                     UPT = UP;
9816                                                 }
9817                                                 
9818                                                 UP = UPT;
9819                                                 while (UP) {
9820                                                     if(UP->x == chosen->x && UP->y == chosen->y){
9821                                                         
9822                                                         break;
9823                                                     }else{
9824                                                         okflag = true;
9825                                                     }
9826                                                     
9827                                                     UP = UP->next;
9828                                                 }
9829                                                 
9830                                             }
9831                                             UP = UPT;
9832                                             
9833                                             if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9834                                             else if(UP){
9835                                                 while(UP->next) UP = UP->next;
9836                                             }
9837                                             if(okflag){
9838                                                 UP->x = chosen->x;
9839                                                 UP->y = chosen->y;
9840                                                 UP->next = calloc(1, sizeof(UNITPOINT));
9841                                                 okflag = false;
9842                                                 waypSCSunitCnt++;
9843                                             }
9844                                         }
9845                                         
9846                                     }
9847                                 }
9848                             }
9849                             
9850                         omfgUnitOver5:
9851                             UP = NULL;
9852                             UPT = NULL;
9853                             
9854                           //           NSLog(@"%d", waypSCSunitCnt);
9855                             
9856                             chosen = chosen->next;
9857                         }chosen = chosenT;
9858                         okflag = true;
9859                         
9860                         
9861                         
9862                     }else if(MS0->S4.wayp->type == 2){
9863                         chosen = chosenT;
9864                         waypSCSunitCnt = 0;
9865                         static bool okflag = true;
9866                         while(chosen){
9867                             if((MS0->S4.wayp->x <= chosen->x) && (MS0->S4.wayp->x2 >= chosen->x) &&
9868                                (MS0->S4.wayp->y <= chosen->y) && (MS0->S4.wayp->y2 >= chosen->y)){
9869                                 
9870                                 
9871                                 int Cnum = 0;
9872                                 
9873                                 if(1){
9874                                     Cnum++;
9875                                     if(Unum < Cnum) goto omfgUnitOver;
9876                                     
9877                                     
9878                                     
9879                                     
9880                                     
9881                                     if(UP)
9882                                     {
9883                                         if(!UPT){
9884                                             UPT = UP;
9885                                         }
9886                                         
9887                                         UP = UPT;
9888                                         while (UP) {
9889                                             if(UP->x == chosen->x && UP->y == chosen->y){
9890                                                 
9891                                                 break;
9892                                             }else{
9893                                                 okflag = true;
9894                                             }
9895                                             
9896                                             UP = UP->next;
9897                                         }
9898                                         
9899                                     }
9900                                     UP = UPT;
9901                                     
9902                                     if(!UP) UP = calloc(1, sizeof(UNITPOINT));
9903                                     else if(UP){
9904                                         while(UP->next) UP = UP->next;
9905                                     }
9906                                     if(okflag){
9907                                         UP->x = chosen->x;
9908                                         UP->y = chosen->y;
9909                                         UP->next = calloc(1, sizeof(UNITPOINT));
9910                                         okflag = false;
9911                                         waypSCScnt++;
9912                                         waypSCSunitCnt++;
9913                                     }
9914                                 }
9915                                 
9916                                 
9917                                 
9918                                 
9919                             }
9920                             chosen = chosen->next;
9921                         }chosen = chosenT;
9922                         okflag = true;
9923                     }
9924                     
9925                     MS0->S4.wayp = MS0->S4.wayp->next;
9926                 }MS0->S4.wayp = wpt;
9927               //  NSLog(@"%d", waypSCSunitCnt);
9928                 
9929                 if(waypSCScnt >= waypCnt)
9930                     waypSCS = true;
9931             
9932             
9933             
9934             
9935             
9936             }
9937             
9938             int team0num = 0;
9939             int team1num = 0;
9940             int team2num = 0;
9941             if(MS0->S4.team == 0){
9942                 if(!MS0->S4.placeFlag){
9943                 UTop = U;
9944                 while (U) {
9945                     if(U->team == 0 && !U->dead)
9946                         team0num++;
9947                     U = U->next;
9948                 }U = UTop;
9949                 }
9950                 if(MS0->S4.unitType == 0){
9951                     if(MS0->S4.placeFlag) team0num = MS0->S4.unitNum;
9952                     
9953                     if((MS0->S4.unitNum == team0num) && (MS0->S4.unitNum == waypSCSunitCnt)){
9954                         
9955                     }else{
9956                         trueFlag = false;
9957                     }
9958                 }else if(MS0->S4.unitType == 1){
9959                     if(MS0->S4.placeFlag) team0num = 65000;
9960                     
9961                     if((MS0->S4.unitNum <= team0num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
9962                         
9963                     }else{
9964                         trueFlag = false;
9965                     }
9966                 }else if(MS0->S4.unitType == 2){
9967                     if((MS0->S4.unitNum >= team0num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
9968                         
9969                     }else{
9970                         trueFlag = false;
9971                     }
9972                 }
9973                 
9974                 
9975             }else if(MS0->S4.team == 1){
9976                 if(!MS0->S4.placeFlag){
9977                 UTop = U;
9978                 while (U) {
9979                     if(U->team == 1 && !U->dead)
9980                         team1num++;
9981                     U = U->next;
9982                 }U = UTop;
9983                 }
9984                 if(MS0->S4.unitType == 0){
9985                     if(MS0->S4.placeFlag) team1num = MS0->S4.unitNum;
9986                     
9987                     if((MS0->S4.unitNum == team1num) && (MS0->S4.unitNum = waypSCSunitCnt)){
9988                         
9989                     }else{
9990                         trueFlag = false;
9991                     }
9992                 }else if(MS0->S4.unitType == 1){
9993                     if(MS0->S4.placeFlag) team1num = 65000;
9994                     
9995                     if((MS0->S4.unitNum <= team1num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
9996                         
9997                     }else{
9998                         trueFlag = false;
9999                     }
10000                 }else if(MS0->S4.unitType == 2){
10001                     if((MS0->S4.unitNum >= team1num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
10002                         
10003                     }else{
10004                         trueFlag = false;
10005                     }
10006                 }
10007             }else if(MS0->S4.team == 2){
10008                 if(!MS0->S4.placeFlag){
10009                 UTop = U;
10010                 while (U) {
10011                     if(U->team == 2 && !U->dead)
10012                         team2num++;
10013                     U = U->next;
10014                 }U = UTop;
10015                 }
10016                 if(MS0->S4.unitType == 0){
10017                     if(MS0->S4.placeFlag) team2num = MS0->S4.unitNum;
10018                     
10019                     if((MS0->S4.unitNum == team2num) && (MS0->S4.unitNum == waypSCSunitCnt)){
10020                         
10021                     }else{
10022                         trueFlag = false;
10023                     }
10024                 }else if(MS0->S4.unitType == 1){
10025                     if(MS0->S4.placeFlag) team2num = 65000;
10026                     
10027                     if((MS0->S4.unitNum <= team2num) && (MS0->S4.unitNum <= waypSCSunitCnt)){
10028                         
10029                     }else{
10030                         trueFlag = false;
10031                     }
10032                 }else if(MS0->S4.unitType == 2){
10033                     if((MS0->S4.unitNum >= team2num) && (MS0->S4.unitNum >= waypSCSunitCnt)){
10034                         
10035                     }else{
10036                         trueFlag = false;
10037                     }
10038                 }
10039             }
10040             
10041         }
10042         
10043         
10044         if(MS0->S4.unitCMDflag){
10045             
10046             UNIT2 *sjt = MS0->S4.subj;
10047             UNIT *chosen = NULL;
10048             UNIT *chosenT = NULL;
10049             int cntUnit = 0;
10050             bool lmao = false;
10051             while(MS0->S4.subj){
10052                 U = UTop;
10053                 while(U){
10054                     if(MS0->S4.subj->x == U->ix && MS0->S4.subj->y == U->iy && U->iz == 1){
10055                         if(chosen){
10056                             chosen->next = calloc(1, sizeof(UNIT));
10057                             if(!lmao){
10058                                 chosenT = chosen;
10059                                 lmao = true;
10060                             }
10061                             chosen = chosen->next;
10062                         }
10063                         if(!chosen){
10064                             chosen = calloc(1, sizeof(UNIT));
10065                         }
10066                         chosen->x = U->x;
10067                         chosen->y = U->y;
10068                         chosen->C.name = U->C.name;
10069                         
10070                         if(!U->dead)
10071                             cntUnit++;
10072                     }
10073                     U = U->next;
10074                 }U = UTop;
10075                 if(!lmao){
10076                     chosenT = chosen;
10077                     lmao = true;
10078                 }
10079                 MS0->S4.subj = MS0->S4.subj->next;
10080             }MS0->S4.subj = sjt;
10081             chosen = chosenT;
10082             
10083             int objeSCSunitCnt = 0;
10084             
10085             
10086             int Unum = 0;
10087             
10088             
10089             while (chosen) {
10090                 Unum++;
10091                 chosen = chosen->next;
10092             }chosen = chosenT;
10093             
10094             if(MS0->S4.unitTypeFlag && MS0->S4.objeFlag){
10095                 
10096                 UNIT2 *objeT = MS0->S4.obje;
10097                 
10098                 while (MS0->S4.obje) {
10099                     
10100                     
10101                     
10102                     chosen = chosenT;
10103                     static bool okflag = true;
10104                     while(chosen){
10105                         for (int i = 0;i < 1002;i++) {
10106                             for (int k = 0;k < 1002;k++) {
10107                                 objeR[i][k] = 0;
10108                             }
10109                         }
10110                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:chosen scsCnt:&objeSCSunitCnt];
10111                         
10112                         int Cnum = 0;
10113                         
10114                         for(int bx=1;bx<=chipWidth;bx++){
10115                             for(int by=1;by<=chipHeight;by++){
10116                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
10117                                     
10118                                     if(objeR[chosen->x][chosen->y] > 0){
10119                                         Cnum++;
10120                                         if(Unum < Cnum) goto omfgUnitOver31;
10121                                         
10122                                         
10123                                         
10124                                         
10125                                         
10126                                         if(UP)
10127                                         {
10128                                             if(!UPT){
10129                                                 UPT = UP;
10130                                             }
10131                                             
10132                                             UP = UPT;
10133                                             while (UP) {
10134                                                 if(UP->x == chosen->x && UP->y == chosen->y){
10135                                                     
10136                                                     break;
10137                                                 }else{
10138                                                     okflag = true;
10139                                                 }
10140                                                 
10141                                                 UP = UP->next;
10142                                             }
10143                                             
10144                                         }
10145                                         UP = UPT;
10146                                         
10147                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10148                                         else if(UP){
10149                                             while(UP->next) UP = UP->next;
10150                                         }
10151                                         if(okflag){
10152                                             UP->x = chosen->x;
10153                                             UP->y = chosen->y;
10154                                             UP->next = calloc(1, sizeof(UNITPOINT));
10155                                             okflag = false;
10156                                             objeSCSunitCnt++;
10157                                         }
10158                                     }
10159                                     
10160                                 }
10161                             }
10162                         }
10163                         
10164                     omfgUnitOver31:
10165                         UP = NULL;
10166                         UPT = NULL;
10167                         
10168                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
10169                         
10170                         chosen = chosen->next;
10171                     }chosen = chosenT;
10172                     okflag = true;
10173                     MS0->S4.obje = MS0->S4.obje->next;
10174                 }
10175                 MS0->S4.obje = objeT;
10176             }else if(MS0->S4.objeFlag){
10177                 
10178                 UNIT2 *objeT = MS0->S4.obje;
10179                 
10180                 while (MS0->S4.obje) {
10181                     
10182                     
10183                     
10184                     U = UTop;
10185                     static bool okflag = true;
10186                     while(U){
10187                         if(U->team != MS0->S4.team){
10188                             U = U->next;
10189                             continue;
10190                         }
10191                         for (int i = 0;i < 1002;i++) {
10192                             for (int k = 0;k < 1002;k++) {
10193                                 objeR[i][k] = 0;
10194                             }
10195                         }
10196                         [self checkPlaceHani:MS0->S4.objeRange+1 tX:MS0->S4.obje->y tY:MS0->S4.obje->x aMap:objeR u:U scsCnt:&objeSCSunitCnt];
10197                         
10198                         int Cnum = 0;
10199                         
10200                         for(int bx=1;bx<=chipWidth;bx++){
10201                             for(int by=1;by<=chipHeight;by++){
10202                                 if(objeR[bx][by] != 999 && objeR[bx][by] > 0){
10203                                     
10204                                     if(objeR[chosen->x][chosen->y] > 0){
10205                                         Cnum++;
10206                                         if(Unum < Cnum) goto omfgUnitOver32;
10207                                         
10208                                         
10209                                         
10210                                         
10211                                         
10212                                         if(UP)
10213                                         {
10214                                             if(!UPT){
10215                                                 UPT = UP;
10216                                             }
10217                                             
10218                                             UP = UPT;
10219                                             while (UP) {
10220                                                 if(UP->x == chosen->x && UP->y == chosen->y){
10221                                                     
10222                                                     break;
10223                                                 }else{
10224                                                     okflag = true;
10225                                                 }
10226                                                 
10227                                                 UP = UP->next;
10228                                             }
10229                                             
10230                                         }
10231                                         UP = UPT;
10232                                         
10233                                         if(!UP) UP = calloc(1, sizeof(UNITPOINT));
10234                                         else if(UP){
10235                                             while(UP->next) UP = UP->next;
10236                                         }
10237                                         if(okflag){
10238                                             UP->x = chosen->x;
10239                                             UP->y = chosen->y;
10240                                             UP->next = calloc(1, sizeof(UNITPOINT));
10241                                             okflag = false;
10242                                             objeSCSunitCnt++;
10243                                         }
10244                                     }
10245                                     
10246                                 }
10247                             }
10248                         }
10249                         
10250                     omfgUnitOver32:
10251                         UP = NULL;
10252                         UPT = NULL;
10253                         
10254                         //NSLog(@"%@, %d, %d", chosen->C.name, objeSCSunitCnt, objeR[0][0]);
10255                         
10256                         chosen = chosen->next;
10257                     }chosen = chosenT;
10258                     okflag = true;
10259                     MS0->S4.obje = MS0->S4.obje->next;
10260                 }
10261                 MS0->S4.obje = objeT;
10262                 U = UTop;
10263             }
10264
10265             if(MS0->S4.team == 0){
10266                 
10267                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
10268                 
10269                 if(MS0->S4.unitCMD == 0){
10270                     if(pushStanbyFlag){
10271                         
10272                     }else{
10273                         trueFlag = false;
10274                     }
10275                 }else if(MS0->S4.unitCMD == 1){
10276                     if(battleSetUp){
10277                         battleSetUpIgnore = true;
10278                     }else{
10279                         trueFlag = false;
10280                     }
10281                 }else if(MS0->S4.unitCMD == 2){
10282                     
10283                 }
10284                 
10285                 
10286                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
10287                     
10288                     
10289                     
10290                     BUILD2 *bldt = MS0->S4.build;
10291                     
10292                     while(MS0->S4.build){
10293                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10294                         
10295                         if(MS0->S4.unitCMD == 0){
10296                             if(pushStanbyFlag){
10297                                 
10298                             }else{
10299                                 trueFlag = false;
10300                             }
10301                         }else if(MS0->S4.unitCMD == 1){
10302                             if(battleSetUp){
10303                                 battleSetUpIgnore = true;
10304                             }else{
10305                                 trueFlag = false;
10306                                 
10307                             }
10308                             
10309                         }else if(MS0->S4.unitCMD == 2){
10310                             
10311                             
10312                         }
10313                     }else{
10314                         trueFlag = false;
10315                     }
10316                         MS0->S4.build = MS0->S4.build->next;
10317                     }MS0->S4.build = bldt;
10318                     
10319                     
10320                 }else if(MS0->S4.subj && !MS0->S4.obje){
10321                     
10322                     
10323                     UNIT2 *sbjt = MS0->S4.subj;
10324                     
10325                     while(MS0->S4.subj){
10326                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
10327                     
10328                     if(MS0->S4.unitCMD == 0){
10329                         if(pushStanbyFlag){
10330                             
10331                         }else{
10332                             trueFlag = false;
10333                         }
10334                     }else if(MS0->S4.unitCMD == 1){
10335                         if(battleSetUp){
10336                             battleSetUpIgnore = true;
10337                         }else{
10338                             trueFlag = false;
10339                     
10340                         }
10341                    
10342                     }else if(MS0->S4.unitCMD == 2){
10343                         
10344                     
10345                     }
10346                     }else{
10347                         trueFlag = false;
10348                     }
10349                     
10350                         MS0->S4.subj = MS0->S4.subj->next;
10351                     }MS0->S4.subj = sbjt;
10352                 
10353                     
10354                 }else if(MS0->S4.subj && MS0->S4.obje){
10355                     
10356                     UNIT2 *sbjt = MS0->S4.subj;
10357                     UNIT2 *objt = MS0->S4.obje;
10358                     
10359                     while(MS0->S4.subj){
10360                         while(MS0->S4.obje){
10361                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10362                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
10363                     
10364                     if(MS0->S4.unitCMD == 0){
10365                         
10366                         if(MS0->S4.unitType == 0){
10367                         if(objeSCSunitCnt == MS0->S4.unitNum){
10368                         
10369                             if(pushStanbyFlag){
10370                                 
10371                             }else{
10372                                 trueFlag = false;
10373                             }
10374                         }
10375                         
10376                         }else if(MS0->S4.unitType == 1){
10377                             if(objeSCSunitCnt >= MS0->S4.unitNum){
10378                                 
10379                                 if(pushStanbyFlag){
10380                                     
10381                                 }else{
10382                                     trueFlag = false;
10383                                 }
10384                             }
10385                         
10386                         }else if(MS0->S4.unitType == 2){
10387                             if(objeSCSunitCnt <= MS0->S4.unitNum){
10388                                 
10389                                 if(pushStanbyFlag){
10390                                     
10391                                 }else{
10392                                     trueFlag = false;
10393                                 }
10394                             }
10395                         }
10396                         
10397                     }else if(MS0->S4.unitCMD == 1){
10398
10399                         if(MS0->S4.unitType == 0){
10400                             if(objeSCSunitCnt == MS0->S4.unitNum){
10401                                 
10402                                 if(battleSetUp){
10403                                     battleSetUpIgnore = true;
10404                                 }else{
10405                                     trueFlag = false;
10406                                 }
10407                             }
10408                             
10409                         }else if(MS0->S4.unitType == 1){
10410                             if(objeSCSunitCnt >= MS0->S4.unitNum){
10411                                 
10412                                 if(battleSetUp){
10413                                     battleSetUpIgnore = true;
10414                                 }else{
10415                                     trueFlag = false;
10416                                 }
10417                             }
10418                             
10419                         }else if(MS0->S4.unitType == 2){
10420                             if(objeSCSunitCnt <= MS0->S4.unitNum){
10421                                 
10422                                 if(battleSetUp){
10423                                     battleSetUpIgnore = true;
10424                                 }else{
10425                                     trueFlag = false;
10426                                 }
10427                             }
10428                         }
10429                         
10430                     }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
10431                         
10432                         
10433                     }
10434                     
10435                     
10436                     
10437                     
10438                     
10439                     }else{
10440                         trueFlag = false;
10441                     }
10442                         MS0->S4.obje = MS0->S4.obje->next;
10443                         }MS0->S4.obje = objt;
10444                         MS0->S4.subj = MS0->S4.subj->next;
10445                     }MS0->S4.subj = sbjt;
10446                     
10447                 }if(MS0->S4.subj && MS0->S4.build){
10448                 
10449                     
10450                     UNIT2 *sbjt = MS0->S4.subj;
10451                     BUILD2 *bldt = MS0->S4.build;
10452                     
10453                     while(MS0->S4.subj){
10454                         while(MS0->S4.build){
10455                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10456                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
10457                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10458                         
10459                         if(MS0->S4.unitCMD == 0){
10460                             if(pushStanbyFlag){
10461                                 
10462                             }else{
10463                                 trueFlag = false;
10464                             }
10465                         }else if(MS0->S4.unitCMD == 1){
10466                             if(battleSetUp){
10467                                 battleSetUpIgnore = true;
10468                             }else{
10469                                 trueFlag = false;
10470                                 
10471                             }
10472                             
10473                         }else if(MS0->S4.unitCMD == 2){
10474                             
10475                             
10476                         }
10477                 
10478                 
10479                     }else{
10480                         trueFlag = false;
10481                     }
10482                         MS0->S4.build = MS0->S4.build->next;
10483                         }MS0->S4.build = bldt;
10484
10485                         MS0->S4.subj = MS0->S4.subj->next;
10486                 }
10487                    MS0->S4.subj = sbjt;
10488                 
10489                 }
10490             }else if(MS0->S4.team == 1){
10491                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
10492                     
10493                     if(MS0->S4.unitCMD == 0){
10494                         if(pushStanbyFlag){
10495                             
10496                         }else{
10497                             trueFlag = false;
10498                         }
10499                     }else if(MS0->S4.unitCMD == 1){
10500                         if(battleSetUp){
10501                             battleSetUpIgnore = true;
10502                         }else{
10503                             trueFlag = false;
10504                         }
10505                     }else if(MS0->S4.unitCMD == 2){
10506                         
10507                     }
10508                     
10509                     
10510                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
10511                     
10512                     
10513                     
10514                     BUILD2 *bldt = MS0->S4.build;
10515                     while(MS0->S4.build){
10516                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10517                         
10518                         if(MS0->S4.unitCMD == 0){
10519                             if(pushStanbyFlag){
10520                                 
10521                             }else{
10522                                 trueFlag = false;
10523                             }
10524                         }else if(MS0->S4.unitCMD == 1){
10525                             if(battleSetUp){
10526                                 battleSetUpIgnore = true;
10527                             }else{
10528                                 trueFlag = false;
10529                                 
10530                             }
10531                             
10532                         }else if(MS0->S4.unitCMD == 2){
10533                             
10534                             
10535                         }
10536                     }else{
10537                         trueFlag = false;
10538                     }
10539                         MS0->S4.build = MS0->S4.build->next;
10540                     }MS0->S4.build = bldt;
10541                     
10542                     
10543                 }else if(MS0->S4.subj && !MS0->S4.obje){
10544                     
10545                     
10546                     
10547                     UNIT2 *sbjt = MS0->S4.subj;
10548                     
10549                     while(MS0->S4.subj){
10550                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
10551                         
10552                         if(MS0->S4.unitCMD == 0){
10553                             if(pushStanbyFlag){
10554                                 
10555                             }else{
10556                                 trueFlag = false;
10557                             }
10558                         }else if(MS0->S4.unitCMD == 1){
10559                             if(battleSetUp){
10560                                 battleSetUpIgnore = true;
10561                             }else{
10562                                 trueFlag = false;
10563                                 
10564                             }
10565                             
10566                         }else if(MS0->S4.unitCMD == 2){
10567                             
10568                             
10569                         }
10570                     }else{
10571                         trueFlag = false;
10572                     }
10573                     
10574                         MS0->S4.subj = MS0->S4.subj->next;
10575                     }MS0->S4.subj = sbjt;
10576                     
10577                 }else if(MS0->S4.subj && MS0->S4.obje){
10578                     
10579                     UNIT2 *sbjt = MS0->S4.subj;
10580                     UNIT2 *objt = MS0->S4.obje;
10581                     
10582                     while(MS0->S4.subj){
10583                         while(MS0->S4.obje){
10584                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10585                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
10586                         
10587                         if(MS0->S4.unitCMD == 0){
10588                             
10589                             if(MS0->S4.unitType == 0){
10590                                 if(objeSCSunitCnt == MS0->S4.unitNum){
10591                                     
10592                                     if(pushStanbyFlag){
10593                                         
10594                                     }else{
10595                                         trueFlag = false;
10596                                     }
10597                                 }
10598                                 
10599                             }else if(MS0->S4.unitType == 1){
10600                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
10601                                     
10602                                     if(pushStanbyFlag){
10603                                         
10604                                     }else{
10605                                         trueFlag = false;
10606                                     }
10607                                 }
10608                                 
10609                             }else if(MS0->S4.unitType == 2){
10610                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
10611                                     
10612                                     if(pushStanbyFlag){
10613                                         
10614                                     }else{
10615                                         trueFlag = false;
10616                                     }
10617                                 }
10618                             }
10619                             
10620                         }else if(MS0->S4.unitCMD == 1){
10621                             
10622                             if(MS0->S4.unitType == 0){
10623                                 if(objeSCSunitCnt == MS0->S4.unitNum){
10624                                     
10625                                     if(battleSetUp){
10626                                         battleSetUpIgnore = true;
10627                                     }else{
10628                                         trueFlag = false;
10629                                     }
10630                                 }
10631                                 
10632                             }else if(MS0->S4.unitType == 1){
10633                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
10634                                     
10635                                     if(battleSetUp){
10636                                         battleSetUpIgnore = true;
10637                                     }else{
10638                                         trueFlag = false;
10639                                     }
10640                                 }
10641                                 
10642                             }else if(MS0->S4.unitType == 2){
10643                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
10644                                     
10645                                     if(battleSetUp){
10646                                         battleSetUpIgnore = true;
10647                                     }else{
10648                                         trueFlag = false;
10649                                     }
10650                                 }
10651                             }
10652                             
10653                         }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
10654                             
10655                             
10656                         }
10657
10658                         
10659                         
10660                         
10661                     }else{
10662                         trueFlag = false;
10663                     }
10664
10665                         
10666                             MS0->S4.obje = MS0->S4.obje->next;
10667                         }MS0->S4.obje = objt;
10668                         MS0->S4.subj = MS0->S4.subj->next;
10669                     }MS0->S4.subj = sbjt;
10670                     
10671                 }if(MS0->S4.subj && MS0->S4.build){
10672                     
10673                     UNIT2 *sbjt = MS0->S4.subj;
10674                     BUILD2 *bldt = MS0->S4.build;
10675                     while(MS0->S4.subj){
10676                         while(MS0->S4.build){
10677                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10678                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
10679                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10680                         
10681                         if(MS0->S4.unitCMD == 0){
10682                             if(pushStanbyFlag){
10683                                 
10684                             }else{
10685                                 trueFlag = false;
10686                             }
10687                         }else if(MS0->S4.unitCMD == 1){
10688                             if(battleSetUp){
10689                                 battleSetUpIgnore = true;
10690                             }else{
10691                                 trueFlag = false;
10692                                 
10693                             }
10694                             
10695                         }else if(MS0->S4.unitCMD == 2){
10696                             
10697                             
10698                         }
10699                         
10700                         
10701                     }else{
10702                         trueFlag = false;
10703                     }
10704                         MS0->S4.build = MS0->S4.build->next;
10705                         }MS0->S4.build = bldt;
10706                         MS0->S4.subj = MS0->S4.subj->next;
10707                     }MS0->S4.subj = sbjt;
10708                 }
10709             }else if(MS0->S4.team == 2){
10710                 if(!MS0->S4.subj && !MS0->S4.obje && !MS0->S4.build){
10711                     
10712                     if(MS0->S4.unitCMD == 0){
10713                         if(pushStanbyFlag){
10714                             
10715                         }else{
10716                             trueFlag = false;
10717                         }
10718                     }else if(MS0->S4.unitCMD == 1){
10719                         if(battleSetUp){
10720                             battleSetUpIgnore = true;
10721                         }else{
10722                             trueFlag = false;
10723                         }
10724                     }else if(MS0->S4.unitCMD == 2){
10725                         
10726                     }
10727                     
10728                     
10729                 }else if(!MS0->S4.subj && !MS0->S4.obje && MS0->S4.build){
10730                     
10731                     
10732                     
10733                     BUILD2 *bldt = MS0->S4.build;
10734                     while(MS0->S4.build){
10735                     if(Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10736                         
10737                         if(MS0->S4.unitCMD == 0){
10738                             if(pushStanbyFlag){
10739                                 
10740                             }else{
10741                                 trueFlag = false;
10742                             }
10743                         }else if(MS0->S4.unitCMD == 1){
10744                             if(battleSetUp){
10745                                 battleSetUpIgnore = true;
10746                             }else{
10747                                 trueFlag = false;
10748                                 
10749                             }
10750                             
10751                         }else if(MS0->S4.unitCMD == 2){
10752                             
10753                             
10754                         }
10755                     }else{
10756                         trueFlag = false;
10757                     }
10758                         MS0->S4.build = MS0->S4.build->next;
10759                     }MS0->S4.build = bldt;
10760                     
10761                     
10762                 }else if(MS0->S4.subj && !MS0->S4.obje){
10763   
10764                     UNIT2 *sbjt = MS0->S4.subj;
10765                     
10766                     while(MS0->S4.subj){
10767                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1){
10768                         
10769                         if(MS0->S4.unitCMD == 0){
10770                             if(pushStanbyFlag){
10771                                 
10772                             }else{
10773                                 trueFlag = false;
10774                             }
10775                         }else if(MS0->S4.unitCMD == 1){
10776                             if(battleSetUp){
10777                                 battleSetUpIgnore = true;
10778                             }else{
10779                                 trueFlag = false;
10780                                 
10781                             }
10782                             
10783                         }else if(MS0->S4.unitCMD == 2){
10784                             
10785                             
10786                         }
10787                     }else{
10788                         trueFlag = false;
10789                     }
10790                       MS0->S4.subj = MS0->S4.subj->next;
10791                     }MS0->S4.subj = sbjt;
10792                     
10793                 }else if(MS0->S4.subj && MS0->S4.obje){
10794                     
10795                     UNIT2 *sbjt = MS0->S4.subj;
10796                     UNIT2 *objt = MS0->S4.obje;
10797                     
10798                     while(MS0->S4.subj){
10799                         while(MS0->S4.obje){
10800                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10801                        Utarget->ix == MS0->S4.obje->x && Utarget->iy == MS0->S4.obje->y && Utarget->iz == 1){
10802                         
10803                         if(MS0->S4.unitCMD == 0){
10804                             
10805                             if(MS0->S4.unitType == 0){
10806                                 if(objeSCSunitCnt == MS0->S4.unitNum){
10807                                     
10808                                     if(pushStanbyFlag){
10809                                         
10810                                     }else{
10811                                         trueFlag = false;
10812                                     }
10813                                 }
10814                                 
10815                             }else if(MS0->S4.unitType == 1){
10816                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
10817                                     
10818                                     if(pushStanbyFlag){
10819                                         
10820                                     }else{
10821                                         trueFlag = false;
10822                                     }
10823                                 }
10824                                 
10825                             }else if(MS0->S4.unitType == 2){
10826                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
10827                                     
10828                                     if(pushStanbyFlag){
10829                                         
10830                                     }else{
10831                                         trueFlag = false;
10832                                     }
10833                                 }
10834                             }
10835                             
10836                         }else if(MS0->S4.unitCMD == 1){
10837                             
10838                             if(MS0->S4.unitType == 0){
10839                                 if(objeSCSunitCnt == MS0->S4.unitNum){
10840                                     
10841                                     if(battleSetUp){
10842                                         battleSetUpIgnore = true;
10843                                     }else{
10844                                         trueFlag = false;
10845                                     }
10846                                 }
10847                                 
10848                             }else if(MS0->S4.unitType == 1){
10849                                 if(objeSCSunitCnt >= MS0->S4.unitNum){
10850                                     
10851                                     if(battleSetUp){
10852                                         battleSetUpIgnore = true;
10853                                     }else{
10854                                         trueFlag = false;
10855                                     }
10856                                 }
10857                                 
10858                             }else if(MS0->S4.unitType == 2){
10859                                 if(objeSCSunitCnt <= MS0->S4.unitNum){
10860                                     
10861                                     if(battleSetUp){
10862                                         battleSetUpIgnore = true;
10863                                     }else{
10864                                         trueFlag = false;
10865                                     }
10866                                 }
10867                             }
10868                             
10869                         }else if(MS0->S4.unitCMD == 2 && objeSCSunitCnt > 0){
10870                             
10871                             
10872                         }
10873
10874                     }else{
10875                         trueFlag = false;
10876                     }
10877                             MS0->S4.obje = MS0->S4.obje->next;
10878                         }MS0->S4.obje = objt;
10879                         MS0->S4.subj = MS0->S4.subj->next;
10880                     }MS0->S4.subj = sbjt;
10881                 }if(MS0->S4.subj && MS0->S4.build){
10882                     
10883                     UNIT2 *sbjt = MS0->S4.subj;
10884                     BUILD2 *bldt = MS0->S4.build;
10885                     while(MS0->S4.subj){
10886                         while(MS0->S4.build){
10887                     if(Uselected->ix == MS0->S4.subj->x && Uselected->iy == MS0->S4.subj->y && Uselected->iz == 1 &&
10888                        BC[buildNum[Uselected->x][Uselected->y]].nameID == MS0->S4.build->C->nameID &&
10889                        Uselected->x == MS0->S4.build->x && Uselected->y == MS0->S4.build->y){
10890                         
10891                         if(MS0->S4.unitCMD == 0){
10892                             if(pushStanbyFlag){
10893                                 
10894                             }else{
10895                                 trueFlag = false;
10896                             }
10897                         }else if(MS0->S4.unitCMD == 1){
10898                             if(battleSetUp){
10899                                 battleSetUpIgnore = true;
10900                             }else{
10901                                 trueFlag = false;
10902                                 
10903                             }
10904                             
10905                         }else if(MS0->S4.unitCMD == 2){
10906                             
10907                             
10908                         }
10909                         
10910                         
10911                     }else{
10912                         trueFlag = false;
10913                     }
10914                         MS0->S4.build = MS0->S4.build->next;
10915                         }MS0->S4.build = bldt;
10916                         MS0->S4.subj = MS0->S4.subj->next;
10917                     }MS0->S4.subj = sbjt;
10918                 }
10919             }
10920         }
10921     
10922     
10923     
10924     
10925     
10926     
10927     
10928     
10929     
10930     
10931     
10932         
10933         
10934         
10935         
10936         
10937         
10938         
10939         
10940         
10941         
10942     
10943     
10944     
10945     
10946     }
10947     
10948         
10949     
10950     
10951     
10952     
10953     
10954     
10955     branchEndFlag = true;
10956     MS0->succeessfulFlag = false;
10957     if(trueFlag){
10958         branchSuceedFlag = true;
10959         MS0->succeessfulFlag = true;
10960     }else{
10961         MS0->succeessfulFlag = false;
10962     }
10963     
10964     CRMS0 = MS0;
10965     if(branchEndFlag){
10966         if(!branchSuceedFlag){
10967             MS0 = MSDPtop;
10968             while(MS0){
10969                 MS0->endFlag = false;
10970                 MS0 = MS0->next;
10971             }
10972             
10973             MS0 = CRMS0;
10974             MS0->endFlag = true;
10975             MS0 = MSDPtop;
10976             
10977             if([CRMS0->S4.FAILrabel isEqualToString:MS0->label]){
10978                 MS0->succeessfulFlag = false;
10979                 MS0->endFlag = false;
10980             }else{
10981                 
10982                 while (MS0) {
10983                     
10984                     if(MS0->next)
10985                         if([CRMS0->S4.FAILrabel isEqualToString:MS0->next->label]){
10986                             if(MS0->type == 6 && MS0->endFlag){
10987                                 
10988                             }else{
10989                                 MS0->succeessfulFlag = true;
10990                             }
10991                             MS0->endFlag = true;
10992                             MS0 = MS0->next;
10993                             break;
10994                         }
10995                     if(MS0->type == 6 && MS0->endFlag){
10996                         
10997                     }else{
10998                         MS0->succeessfulFlag = true;
10999                     }
11000                     MS0->endFlag = true;
11001                     MS0 = MS0->next;
11002                 }
11003             }
11004             
11005             if(!MS0){
11006                 MS0 = CRMS0;
11007                 return MS0;
11008             }
11009
11010         }else if(branchSuceedFlag){
11011             MS0 = MSDPtop;
11012             while(MS0){
11013                 MS0->endFlag = false;
11014                 MS0 = MS0->next;
11015             }
11016             
11017             MS0 = CRMS0;
11018             MS0->endFlag = true;
11019             
11020             MS0 = MSDPtop;
11021             
11022             if([CRMS0->S4.COMPrabel isEqualToString:MS0->label]){
11023                 MS0->succeessfulFlag = false;
11024                 MS0->endFlag = false;
11025             }else{
11026                 
11027                 while (MS0) {
11028                     
11029                     if(MS0->next)
11030                         if([CRMS0->S4.COMPrabel isEqualToString:MS0->next->label]){
11031                             
11032                             if(MS0->type == 6 && MS0->endFlag){
11033                                 
11034                             }else{
11035                                 MS0->succeessfulFlag = true;
11036                             }
11037                             MS0->endFlag = true;
11038                             MS0 = MS0->next;
11039                             break;
11040                         }
11041                     
11042                     if(MS0->type == 6 && MS0->endFlag){
11043                         
11044                     }else{
11045                         MS0->succeessfulFlag = true;
11046                     }
11047                     MS0->endFlag = true;
11048                     MS0 = MS0->next;
11049                 }
11050             }
11051             
11052             if(!MS0){
11053                 MS0 = CRMS0;
11054                 return MS0;
11055             }
11056         }
11057     }
11058     
11059     //NSLog(@"%d", MSDPtop->succeessfulFlag);
11060     return MS0;
11061 }
11062
11063
11064 -(void)checkPlaceHani:(int)cnsPow tX:(int)startX tY:(int)startY aMap:(int[][1002])aMap u:(UNIT*)u scsCnt:(int*)scsCnt{
11065     
11066     if(cnsPow < 0) return;
11067     
11068     int i0;
11069     int *j0 = scsCnt;
11070     if(aMap[startY][startX] <= cnsPow)
11071         aMap[startY][startX] = cnsPow;
11072     
11073     if(startY < 0) startY = 0;
11074     if(startX < 0) startX = 0;
11075     if(cnsPow < 0) cnsPow = 0;
11076     
11077     i0 = cnsPow - 1;
11078     
11079     if(aMap[startY-1][startX] >= 0 && cnsPow > 0)
11080         [self checkPlaceHani:i0 tX:startX tY:startY-1 aMap:aMap u:u scsCnt:j0];
11081     
11082     i0 = cnsPow - 1;
11083     if(aMap[startY+1][startX] >= 0 && cnsPow > 0)
11084         [self checkPlaceHani:i0 tX:startX tY:startY+1 aMap:aMap u:u scsCnt:j0];
11085     
11086     i0 = cnsPow - 1;
11087     if(aMap[startY][startX-1] >= 0 && cnsPow > 0)
11088         [self checkPlaceHani:i0 tX:startX-1 tY:startY aMap:aMap u:u scsCnt:j0];
11089     
11090     i0 = cnsPow - 1;
11091     if(aMap[startY][startX+1] >= 0 && cnsPow > 0)
11092         [self checkPlaceHani:i0 tX:startX+1 tY:startY aMap:aMap u:u scsCnt:j0];
11093     
11094     
11095 }
11096
11097 -(MAPSCRIPT0*)setLabelJump:(MAPSCRIPT0*)MS0{
11098     
11099     MAPSCRIPT0 *CRMS0 = MS0;
11100     MS0 = MSDPtop;
11101     while(MS0){
11102         MS0->endFlag = false;
11103         MS0 = MS0->next;
11104     }
11105     MS0 = CRMS0;
11106     MS0->endFlag = true;
11107     MS0->succeessfulFlag = true;
11108     
11109     MS0 = MSDPtop;
11110     
11111     if([CRMS0->labelJump isEqualToString:MS0->label]){
11112         MS0->succeessfulFlag = false;
11113         MS0->endFlag = false;
11114     }else{
11115         
11116         while (MS0) {
11117             
11118             if(MS0->next)
11119                 if([CRMS0->labelJump isEqualToString:MS0->next->label]){
11120                     if(MS0->type == 6 && MS0->endFlag){
11121                         
11122                     }else{
11123                         MS0->succeessfulFlag = true;
11124                     }
11125                     MS0->endFlag = true;
11126                     MS0 = MS0->next;
11127                     break;
11128                 }
11129             if(MS0->type == 6 && MS0->endFlag){
11130                 
11131             }else{
11132                 MS0->succeessfulFlag = true;
11133             }
11134             MS0->endFlag = true;
11135                 MS0 = MS0->next;
11136         }
11137     }
11138     if(!MS0){
11139         MS0 = CRMS0;
11140         return MS0;
11141     }
11142     
11143     return MS0;
11144 }
11145
11146 -(MAPSCRIPT0*)setDefault:(MAPSCRIPT0*)MS0{
11147     
11148     MS0->succeessfulFlag = true;
11149     MS0->endFlag = true;
11150     return MS0;
11151 }
11152
11153 -(MAPSCRIPT0*)setResource:(MAPSCRIPT0*)MS0{
11154     
11155     if(MS0->S6.team == 0){
11156         
11157         if(MS0->S6.RCsupply){
11158             if(MS0->S6.RCsupplyS){
11159                 if(MS0->S6.RCsupplyAdd)
11160                     P[0].resource += MS0->S6.RCsupplyValue;
11161                 else
11162                     P[0].resource -= MS0->S6.RCsupplyValue;
11163             }else{
11164                 if(MS0->S6.RCsupplyAdd)
11165                     P[0].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11166                 else
11167                     P[0].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11168             }
11169         }
11170         if(MS0->S6.RCfood){
11171             if(MS0->S6.RCfoodS){
11172                 if(MS0->S6.RCfoodAdd)
11173                     P[0].food += MS0->S6.RCfoodValue;
11174                 else
11175                     P[0].food -= MS0->S6.RCfoodValue;
11176             }else{
11177                 if(MS0->S6.RCfoodAdd)
11178                     P[0].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11179                 else
11180                     P[0].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11181             }
11182         }
11183         if(MS0->S6.RCmoney){
11184             if(MS0->S6.RCmoneyS){
11185                 if(MS0->S6.RCmoneyAdd)
11186                     P[0].money += MS0->S6.RCmoneyValue;
11187                 else
11188                     P[0].money -= MS0->S6.RCmoneyValue;
11189             }else{
11190                 if(MS0->S6.RCmoneyAdd)
11191                     P[0].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11192                 else
11193                     P[0].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11194             }
11195         }
11196         
11197     }else if(MS0->S6.team == 1){
11198         if(MS0->S6.RCsupply){
11199         if(MS0->S6.RCsupplyS){
11200             if(MS0->S6.RCsupplyAdd)
11201                 P[1].resource += MS0->S6.RCsupplyValue;
11202             else
11203                 P[1].resource -= MS0->S6.RCsupplyValue;
11204         }else{
11205             if(MS0->S6.RCsupplyAdd)
11206                 P[1].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11207             else
11208                 P[1].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11209         }
11210         }
11211     if(MS0->S6.RCfood){
11212         if(MS0->S6.RCfoodS){
11213             if(MS0->S6.RCfoodAdd)
11214                 P[1].food += MS0->S6.RCfoodValue;
11215             else
11216                 P[1].food -= MS0->S6.RCfoodValue;
11217         }else{
11218             if(MS0->S6.RCfoodAdd)
11219                 P[1].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11220             else
11221                 P[1].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11222         }
11223     }
11224     if(MS0->S6.RCmoney){
11225         if(MS0->S6.RCmoneyS){
11226             if(MS0->S6.RCmoneyAdd)
11227                 P[1].money += MS0->S6.RCmoneyValue;
11228             else
11229                 P[1].money -= MS0->S6.RCmoneyValue;
11230         }else{
11231             if(MS0->S6.RCmoneyAdd)
11232                 P[1].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11233             else
11234                 P[1].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11235         }
11236     }
11237     }else if(MS0->S6.team == 2){
11238         if(MS0->S6.RCsupply){
11239         if(MS0->S6.RCsupplyS){
11240             if(MS0->S6.RCsupplyAdd)
11241                 P[2].resource += MS0->S6.RCsupplyValue;
11242             else
11243                 P[2].resource -= MS0->S6.RCsupplyValue;
11244         }else{
11245             if(MS0->S6.RCsupplyAdd)
11246                 P[2].resource += [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11247             else
11248                 P[2].resource -= [Hensuu[MS0->S6.RCsupplySelect-1] intValue];
11249         }
11250         }
11251     
11252     if(MS0->S6.RCfood){
11253         if(MS0->S6.RCfoodS){
11254             if(MS0->S6.RCfoodAdd)
11255                 P[2].food += MS0->S6.RCfoodValue;
11256             else
11257                 P[2].food -= MS0->S6.RCfoodValue;
11258         }else{
11259             if(MS0->S6.RCfoodAdd)
11260                 P[2].food += [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11261             else
11262                 P[2].food -= [Hensuu[MS0->S6.RCfoodSelect-1] intValue];
11263         }
11264     }
11265     if(MS0->S6.RCmoney){
11266         if(MS0->S6.RCmoneyS){
11267             if(MS0->S6.RCmoneyAdd)
11268                 P[2].money += MS0->S6.RCmoneyValue;
11269             else
11270                 P[2].money -= MS0->S6.RCmoneyValue;
11271         }else{
11272             if(MS0->S6.RCmoneyAdd)
11273                 P[2].money += [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11274             else
11275                 P[2].money -= [Hensuu[MS0->S6.RCmoneySelect-1] intValue];
11276         }
11277     }
11278     }
11279     
11280     MS0->succeessfulFlag = true;
11281     MS0->endFlag = true;
11282     return MS0;
11283 }
11284
11285 -(MAPSCRIPT0*)setLabel:(MAPSCRIPT0*)MS0{
11286
11287     //NSLog(@"%d", MSDP0top->succeessfulFlag);
11288     MS0->succeessfulFlag = true;
11289     MS0->endFlag = true;
11290     return MS0;
11291 }
11292
11293 -(MAPSCRIPT0*)setComment:(MAPSCRIPT0*)MS0{
11294     
11295     MS0->succeessfulFlag = true;
11296     MS0->endFlag = true;
11297     return MS0;
11298 }
11299
11300
11301 -(MAPSCRIPT0*)setSelection:(MAPSCRIPT0*)MS0{
11302     
11303     static bool initFlag = false;
11304     
11305     if(!initFlag){
11306         initFlag = true;
11307         
11308         MAPSCRIPT2 *MS2top = MS0->S2;
11309         
11310         slctPoint.x = [mapWindow frame].origin.x + 100;
11311         slctPoint.y = [mapWindow frame].origin.y + 300;
11312         
11313         [slctBtn1 setHidden:YES];
11314         [slctBtn2 setHidden:YES];
11315         [slctBtn3 setHidden:YES];
11316         [slctBtn4 setHidden:YES];
11317         [slctBtn5 setHidden:YES];
11318         [slctBtn6 setHidden:YES];
11319         [slctBtn7 setHidden:YES];
11320         [slctBtn8 setHidden:YES];
11321         [slctBtn9 setHidden:YES];
11322         
11323         for(int i = 1;MS0->S2;i++){
11324             
11325             if(i == 1){
11326                 [slctBtn1 setTitle:MS0->S2->selection];
11327                 [slctBtn1 setHidden:NO];
11328                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 60) display:YES];
11329             }
11330             if(i == 2){
11331                 [slctBtn2 setTitle:MS0->S2->selection];
11332                 [slctBtn2 setHidden:NO];
11333                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 90) display:YES];
11334             }
11335             if(i == 3){
11336                 [slctBtn3 setTitle:MS0->S2->selection];
11337                 [slctBtn3 setHidden:NO];
11338                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 120) display:YES];
11339             }
11340             
11341             if(i == 4){
11342                 [slctBtn4 setTitle:MS0->S2->selection];
11343                 [slctBtn4 setHidden:NO];
11344                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 150) display:YES];
11345             }
11346             if(i == 5){
11347                 [slctBtn5 setTitle:MS0->S2->selection];
11348                 [slctBtn5 setHidden:NO];
11349                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 180) display:YES];
11350             }
11351             if(i == 6){
11352                 [slctBtn6 setTitle:MS0->S2->selection];
11353                 [slctBtn6 setHidden:NO];
11354                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 210) display:YES];
11355             }
11356             if(i == 7){
11357                 [slctBtn7 setTitle:MS0->S2->selection];
11358                 [slctBtn7 setHidden:NO];
11359                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 240) display:YES];
11360             }
11361             if(i == 8){
11362                 [slctBtn8 setTitle:MS0->S2->selection];
11363                 [slctBtn8 setHidden:NO];
11364                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 270) display:YES];
11365             }
11366             if(i == 9){
11367                 [slctBtn9 setTitle:MS0->S2->selection];
11368                 [slctBtn9 setHidden:NO];
11369                 [selectionWindow setFrame:NSMakeRect(slctPoint.x, slctPoint.y, 400, 300) display:YES];
11370             }
11371             slctBtnNum = i;
11372             if(slctBtnNum > 9)
11373                 slctBtnNum = 9;
11374             MS0->S2 = MS0->S2->next;
11375         }
11376         MS0->S2 = MS2top;
11377         
11378         
11379         
11380         [selectionWindow makeKeyAndOrderFront:nil];
11381     }
11382     
11383     
11384     if(slctedBtnNum > 0){
11385         MAPSCRIPT0 *CRMS0 = MS0;
11386         
11387         MS0 = MSDPtop;
11388         while(MS0){
11389             MS0->endFlag = false;
11390             MS0 = MS0->next;
11391         }MS0 = CRMS0;
11392         
11393         MAPSCRIPT2 *MS2top = MS0->S2;
11394         MAPSCRIPT2 *CRMS2;
11395         
11396         for(int i = 1;i < slctedBtnNum;i++){
11397             MS0->S2 = MS0->S2->next;
11398         }
11399             CRMS2 = MS0->S2;
11400         
11401         MS0->S2 = MS2top;
11402         
11403         MS0 = MSDPtop;
11404         if([CRMS2->labelJump isEqualToString:MS0->label]){
11405             MS0->endFlag = false;
11406         }else{
11407             
11408             while (MS0) {
11409                 
11410                 if(MS0->next)
11411                     if([CRMS2->labelJump isEqualToString:MS0->next->label]){
11412                         if(MS0->type == 6 && MS0->endFlag){
11413                             
11414                         }else{
11415                             MS0->succeessfulFlag = true;
11416                         }
11417                         MS0->endFlag = true;
11418                         MS0 = MS0->next;
11419                         break;
11420                     }
11421                 if(MS0->type == 6 && MS0->endFlag){
11422                     
11423                 }else{
11424                     MS0->succeessfulFlag = true;
11425                 }
11426                 MS0->endFlag = true;
11427                 MS0 = MS0->next;
11428             }
11429         }
11430         if(!MS0){
11431             MS0 = CRMS0;
11432             return MS0;
11433         }
11434         
11435         MS0->endFlag = true;
11436         MS0->succeessfulFlag = true;
11437         initFlag = false;
11438         slctedBtnNum = 0;
11439         }
11440     
11441     return MS0;
11442 }
11443
11444 -(MAPSCRIPT0*)setAppearance:(MAPSCRIPT0*)MS0{
11445     
11446     MS3T = MS0->S3;
11447     while(MS0->S3){
11448         int x, y;
11449         UNITCHIP u;
11450         u = MS0->S3->U;
11451         x = MS0->S3->x;
11452         y = MS0->S3->y;
11453     
11454         if(unitNum[x][y] == -1){
11455             
11456             if(MS0->S3->flag){
11457                 
11458                 
11459             }else{
11460                 unitTeam[x][y] = MS0->S3->team;
11461                 unitNum[x][y] = u.chipNumb;
11462                 loadNum[x][y] = u.chipNumb;
11463                 [self addAppearanceStatus:u x:x y:y];
11464             }
11465         }else{
11466             
11467             if(MS0->S3->flag){
11468             
11469             
11470             }else{
11471                 int *p = calloc(1, sizeof(int));
11472                 int *o = calloc(1, sizeof(int));
11473                 appearanceSAIKIflag = false;
11474                 wtflag = 0;
11475                 
11476                 for (int i = 0;i < 1002;i++) {
11477                     for (int k = 0;k < 1002;k++) {
11478                         apprR[i][k] = 0;
11479                     }
11480                 }
11481                 
11482                 [self checkAppearanceRange:5 tX:y tY:x aMap:apprR];
11483                 
11484                 int postInt = 0;
11485                 for (int i = 0;i < 1002;i++) {
11486                     for (int k = 0;k < 1002;k++) {
11487                         if(apprR[i][k] > postInt && unitNum[i][k] == -1){
11488                             postInt = apprR[i][k];
11489                             *p = i;
11490                             *o = k;
11491                         }
11492                     }
11493                 }
11494                 
11495                 if(*p > 0 && *o >0){
11496                     x = *p;
11497                     y = *o;
11498                     unitTeam[x][y] = MS0->S3->team;
11499                     unitNum[x][y] = u.chipNumb;
11500                     loadNum[x][y] = u.chipNumb;
11501                     [self addAppearanceStatus:u x:x y:y];
11502                 }else{
11503                     MS0->succeessfulFlag = false;
11504                     MS0->endFlag = true;
11505                     MS0->S3 = MS3T;
11506                     return MS0;
11507                 }
11508             }
11509         }
11510         MS0->S3 = MS0->S3->next;
11511     }MS0->S3 = MS3T;
11512     unitColorInitFlag = true;
11513     
11514     MS0->succeessfulFlag = true;
11515     MS0->endFlag = true;
11516     return MS0;
11517 }
11518
11519 -(MAPSCRIPT0*)setDissappearance:(MAPSCRIPT0*)MS0{
11520     
11521     MS5T = MS0->S5;
11522     while(MS0->S5){
11523         int x, y;
11524         UNITCHIP u;
11525         u = MS0->S5->U;
11526         x = MS0->S5->x;
11527         y = MS0->S5->y;
11528         
11529         if(1){
11530
11531
11532             if(MS0->S5->unitNum >= 0){
11533                 unitNum[x][y] = -1;
11534                 unitTeam[x][y] = -1;
11535                 unitNum[x][y] = -1;
11536                 loadNum[x][y] = -1;
11537                 
11538                 U = UTop;
11539                 while(U){
11540                     if(U->ix == x && U->iy == y)
11541                         break;
11542                     U = U->next;
11543                 }
11544                 if(U)
11545                     U->dead = true;
11546                 
11547                 U = UTop;
11548           
11549             }else{
11550                 MS0->succeessfulFlag = false;
11551                 MS0->endFlag = true;
11552                 MS0->S5 = MS5T;
11553                 return MS0;
11554             }
11555             
11556         }
11557         MS0->S5 = MS0->S5->next;
11558     }MS0->S5 = MS5T;
11559     unitColorInitFlag = true;
11560     
11561     MS0->succeessfulFlag = true;
11562     MS0->endFlag = true;
11563     return MS0;
11564 }
11565
11566
11567 -(void)checkAppearanceRange:(int)cnsPow tX:(int)startX tY:(int)startY aMap:(int[][1002])aMap{
11568
11569     if(cnsPow < 0) return;
11570     
11571     int i0;
11572     if(aMap[startY][startX] <= cnsPow)
11573         aMap[startY][startX] = cnsPow;
11574     
11575     if(startY < 0) startY = 0;
11576     if(startX < 0) startX = 0;
11577     if(cnsPow < 0) cnsPow = 0;
11578     
11579     i0 = cnsPow - 1;
11580     
11581     if(aMap[startY-1][startX] >= 0 && cnsPow > 0)
11582         [self checkAppearanceRange:i0 tX:startX tY:startY-1 aMap:aMap];
11583     
11584     i0 = cnsPow - 1;
11585     if(aMap[startY+1][startX] >= 0 && cnsPow > 0)
11586         [self checkAppearanceRange:i0 tX:startX tY:startY+1 aMap:aMap];
11587     
11588     i0 = cnsPow - 1;
11589     if(aMap[startY][startX-1] >= 0 && cnsPow > 0)
11590         [self checkAppearanceRange:i0 tX:startX-1 tY:startY aMap:aMap];
11591     
11592     i0 = cnsPow - 1;
11593     if(aMap[startY][startX+1] >= 0 && cnsPow > 0)
11594         [self checkAppearanceRange:i0 tX:startX+1 tY:startY aMap:aMap];
11595     
11596 }
11597
11598 -(void)addAppearanceStatus:(UNITCHIP)u x:(int)x y:(int)y{
11599     
11600     int omgCnt = 0;
11601     UTop = U;
11602     while (U->next) {omgCnt++;
11603         U = U->next;
11604     }
11605     U->next = calloc(1, sizeof(UNIT));
11606     U = U->next;
11607     U->next = NULL;
11608     if(omgCnt == 0) UTop = U;
11609     U->number = registerNum;
11610     U->chipNumber = -1;
11611     U->chipNumberL = -1;
11612     U->C.chipNumb = -1;
11613     U->CL.chipNumb = -1;
11614     
11615     U->x = x;
11616     U->y = y;
11617     
11618     U->C = u;
11619     if(unitTeam[x][y] == 0 || unitTeam[x][y] == 1){
11620         U->team = 0;
11621         if(unitTeam[x][y] == 1){
11622             U->joinArmyFromNext = true;
11623             U->persuasion = true;
11624         }
11625         if(MF[MFselectedRow+1].MS.playerSet1 == 2)
11626             U->CPU = true;
11627     
11628     }
11629     if(unitTeam[x][y] == 2 || unitTeam[x][y] == 3){
11630         U->team = 2;
11631         if(unitTeam[x][y] == 3){
11632             U->joinArmyFromNext = true;
11633             U->persuasion = true;
11634         }
11635         if(MF[MFselectedRow+1].MS.playerSet2 == 2)
11636             U->CPU = true;
11637         
11638     }
11639     if(unitTeam[x][y] == 4 || unitTeam[x][y] == 5){
11640         U->team = 1;
11641         if(unitTeam[x][y] == 5){
11642             U->joinArmyFromNext = true;
11643             U->persuasion = true;
11644         }
11645         U->CPU = true;
11646     }
11647     if(unitTeam[x][y] == -1){
11648         U->team = -1;
11649         if(unitTeam[x][y] == 0){
11650             U->joinArmyFromNext = false;
11651             U->persuasion = true;
11652         }
11653         U->CPU = true;
11654     }
11655     unitNum[x][y] = u.chipNumb;
11656     [self SetUnitStatus:unitNum[x][y]];
11657     
11658     for(int i = 0;i < UCN;i++){
11659         if([U->C.nameID isEqualToString:UC[i].nameID])
11660             U->chipNumber = i;
11661     }
11662     for(int i = 0;i < LCN;i++){
11663         if([U->CL.nameID isEqualToString:LC[i].nameID])
11664             U->chipNumberL = i;
11665     }
11666     for(int i = 0;i < UCN;i++){
11667         if([U->C.nameID isEqualToString:UC[i].nameID])
11668             U->C.chipNumb = i;
11669     }
11670     for(int i = 0;i < LCN;i++){
11671         if([U->CL.nameID isEqualToString:LC[i].nameID])
11672             U->CL.chipNumb = i;
11673     }
11674     
11675     registerNum++;
11676     U = UTop;
11677     
11678 }
11679
11680
11681 -(MAPSCRIPT0*)setWait:(MAPSCRIPT0*)MS0{
11682     
11683     static bool waitin = false;
11684     
11685     if(!waitin){
11686         waitinTime = 0;
11687         waitinTime = MS0->wait;
11688         
11689         waitin = true;
11690     }
11691     
11692     waitSwtichFlag = true;
11693     
11694     if(waitAllOverFlag){
11695         MS0->succeessfulFlag = true;
11696         MS0->endFlag = true;
11697         waitAllOverFlag = false;
11698         waitSwtichFlag = false;
11699         waitin = false;
11700         waitx10flag = false;
11701         waitinTime = 0;
11702     }
11703     
11704     return MS0;
11705 }
11706
11707 -(MAPSCRIPT0*)setBGM:(MAPSCRIPT0*)MS0{
11708     
11709 //    if(BGMsub) [BGMsub stop];
11710     BGMsub = [MS0->BGM.snd retain];
11711     
11712     [BGMsub play];
11713     
11714     MS0->succeessfulFlag = true;
11715     MS0->endFlag = true;
11716     
11717     return MS0;
11718 }
11719
11720 -(MAPSCRIPT0*)setSE:(MAPSCRIPT0*)MS0{
11721     
11722     if(SEsub)
11723         [SEsub stop];
11724     SEsub = [MS0->SE.snd retain];
11725     
11726     [SEsub play];
11727     
11728     MS0->succeessfulFlag = true;
11729     MS0->endFlag = true;
11730     
11731     return MS0;
11732 }
11733
11734 -(MAPSCRIPT0*)setTitleBack:(MAPSCRIPT0*)MS0{
11735     
11736     backTitleFlag = true;
11737     battleBegin = false;
11738     
11739     MS0->succeessfulFlag = true;
11740     MS0->endFlag = true;
11741     
11742     return MS0;
11743 }
11744
11745 -(MAPSCRIPT0*)setStageClear:(MAPSCRIPT0*)MS0{
11746     
11747     stageClearFlag = true;
11748     
11749     if(MS0->sc.edcdFlag)
11750         stageClearFlag2 = true;
11751     battleBegin = false;
11752     
11753     MS0->succeessfulFlag = true;
11754     MS0->endFlag = true;
11755     
11756     return MS0;
11757 }
11758
11759 -(MAPSCRIPT0*)setGameOver:(MAPSCRIPT0*)MS0{
11760     
11761     gaov.img = MS0->gaov.img;
11762     
11763     gameOverFlag = true;
11764     battleBegin = false;
11765     
11766     MS0->succeessfulFlag = true;
11767     MS0->endFlag = true;
11768     
11769     return MS0;
11770 }
11771
11772 -(IBAction)gameOverSubmit:(id)sender{
11773
11774     
11775     gaov.img = nil;
11776     
11777     [BGMsub stop];
11778     
11779     [GameOverWindow close];
11780     [titleWindow makeKeyAndOrderFront:nil];
11781     
11782 }
11783
11784 -(IBAction)battleReadyUpStartBtn:(id)sender{
11785
11786
11787     P[0].resource = [battleReadyUpSupply1 intValue];
11788     P[0].food = [battleReadyUpFood1 intValue];
11789     P[0].money = [battleReadyUpMoney1 intValue];
11790     
11791     P[1].resource = [battleReadyUpSupply2 intValue];
11792     P[1].food = [battleReadyUpFood2 intValue];
11793     P[1].money = [battleReadyUpMoney2 intValue];
11794
11795     setBattleModeFlag = false;
11796     [bsWindow close];
11797     
11798 }
11799
11800 -(IBAction)battleReadyUpState1:(id)sender{
11801     retardhelp1 = true;
11802 }
11803 -(IBAction)battleReadyUpState2:(id)sender{
11804     retardhelp2 = true;
11805 }
11806
11807
11808
11809
11810
11811
11812
11813 -(IBAction)selectionBtn1:(id)sender{
11814     slctedBtnNum = 1;
11815     [selectionWindow close];
11816 }
11817 -(IBAction)selectionBtn2:(id)sender{
11818     slctedBtnNum = 2;
11819     [selectionWindow close];
11820 }
11821 -(IBAction)selectionBtn3:(id)sender{
11822     slctedBtnNum = 3;
11823     [selectionWindow close];
11824 }
11825 -(IBAction)selectionBtn4:(id)sender{
11826     slctedBtnNum = 4;
11827     [selectionWindow close];
11828 }
11829 -(IBAction)selectionBtn5:(id)sender{
11830     slctedBtnNum = 5;
11831     [selectionWindow close];
11832 }
11833 -(IBAction)selectionBtn6:(id)sender{
11834     slctedBtnNum = 6;
11835     [selectionWindow close];
11836 }
11837 -(IBAction)selectionBtn7:(id)sender{
11838     slctedBtnNum = 7;
11839     [selectionWindow close];
11840 }
11841 -(IBAction)selectionBtn8:(id)sender{
11842     slctedBtnNum = 8;
11843     [selectionWindow close];
11844 }
11845 -(IBAction)selectionBtn9:(id)sender{
11846     slctedBtnNum = 9;
11847     [selectionWindow close];
11848 }
11849
11850
11851
11852 -(void)HensuuLoad{
11853     
11854     NSString *directoryPath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
11855     [[NSFileManager defaultManager] changeCurrentDirectoryPath:directoryPath];
11856     
11857     
11858     NSData *InitialData = [NSData dataWithContentsOfFile:@"data/Others/var.txt"];
11859     NSString *pathVar = @"data/Others/var.txt";
11860     NSString *fileData = @"";
11861     
11862     if(!InitialData){
11863         [[NSFileManager defaultManager] createFileAtPath:pathVar contents:nil attributes:nil];
11864     }
11865     
11866     HensuuNum = 0;
11867     fileData = [NSString stringWithContentsOfFile:pathVar encoding:NSUTF8StringEncoding error:nil];
11868     NSArray *fileDataArray = [fileData componentsSeparatedByString:@"\n"];
11869     
11870     for(int i = 0;i < [fileDataArray count];i++){
11871         
11872         NSArray *item = [[fileDataArray objectAtIndex:i] componentsSeparatedByString:@","];
11873         
11874         Hensuu[i] = [[item objectAtIndex:1] retain];
11875         HensuuName[i] = [[item objectAtIndex:2] retain];
11876         HensuuNum++;
11877     }
11878     
11879     
11880 }
11881 @end
11882
11883
11884
11885
11886
11887 @implementation FieldSceneEF
11888
11889
11890 -(BOOL)isFlipped{
11891     return YES;
11892 }
11893
11894 - (id)initWithFrame:(NSRect)frame
11895 {
11896     self = [super initWithFrame:frame];
11897     if (self) {
11898         // Initialization code here.
11899         time  = [NSTimer
11900                  scheduledTimerWithTimeInterval:0.015
11901                  target:self
11902                  selector:@selector(EventLoopBV:)
11903                  userInfo:nil
11904                  repeats:YES
11905                  ];
11906     }
11907     
11908     return self;
11909 }
11910
11911 -(void)EventLoopBV:(NSTimer*)timer{
11912     
11913     static int aniFrame = 0;
11914     
11915     if(animationFlag3){
11916         aniFrame = 0;
11917         aniFrameCnt = 0;
11918         return;
11919     }
11920     
11921     if(!animationFlag1 && !animationFlag2){
11922         aniFrame = 0;
11923         aniFrameCnt = 0;
11924         return;
11925     }
11926     
11927     U = effCun;
11928     
11929     if(animationFlag1)
11930         U->C.A = attackCR;
11931     if(animationFlag2)
11932         U->C.A = attackCR2;
11933     
11934     static bool pussyMikoto = false;
11935     
11936     if(aniFrame == 0){
11937         
11938         ani = U->C.A->AN.ANI;
11939         ANI *aniTop = ani;
11940         
11941         for (int i = 0; i < aniFrameCnt;i++) {
11942             ani = ani->next;
11943         }
11944         
11945         if(ani->snd){
11946             [ani->snd setCurrentTime:0];
11947             [ani->snd play];
11948             ani->snd.loops = NO;
11949         }
11950         if(!ani->next){
11951             pussyMikoto = true;
11952         }
11953         ani = aniTop;
11954         
11955         U->C.A->AN.ANI = ani;
11956     }
11957     
11958     if(aniFrame < U->C.A->AN.frame){
11959         aniFrame++;
11960     }else{
11961         aniFrame = 0;
11962         aniFrameCnt++;
11963         if(pussyMikoto){
11964             pussyMikoto = false;
11965             animationFlag3 = true;
11966         }
11967     }
11968     
11969     
11970     
11971     
11972     
11973     [self setNeedsDisplay:YES];
11974 }
11975
11976 -(void)DrawImage:(NSImage*)image x:(float)x y:(float)y a:(float)a{
11977     NSRect frRect;
11978     frRect.size.height = image.size.height;
11979     frRect.size.width = image.size.width;
11980     
11981     frRect.origin.x = 0;
11982     frRect.origin.y = 0;
11983     
11984     NSRect drRect;
11985     drRect.origin.x = x;
11986     drRect.origin.y = y;
11987     drRect.size.height = image.size.height;
11988     drRect.size.width = image.size.width;
11989     
11990     [image drawInRect:drRect fromRect:frRect operation:NSCompositeSourceOver fraction:a respectFlipped:YES hints:nil];
11991     
11992 }
11993
11994 - (void)drawRect:(NSRect)dirtyRect
11995 {
11996     // Drawing code here.
11997     if(animationFlag3) return;
11998     
11999
12000
12001     
12002     if(animationFlag1 || animationFlag2){
12003         U = effCun;
12004         
12005         if(animationFlag1)
12006                 U->C.A = attackCR;
12007         if(animationFlag2)
12008             U->C.A = attackCR2;
12009         
12010     ani = U->C.A->AN.ANI;
12011     
12012     ANI *aniTop = ani;
12013     
12014         
12015     for (int i = 0; i < aniFrameCnt;i++) {
12016         ani = ani->next;
12017     }
12018         if(!ani)
12019         {
12020             ani = aniTop;
12021             return;
12022         }
12023     [self DrawImage:ani->img x:ani->x + ani->ax y:ani->y + ani->ay a:1.0f];
12024     ani = aniTop;
12025     }
12026
12027     
12028
12029     
12030 }
12031
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041 @end
12042
12043
12044
12045
12046
12047
12048
12049
12050