From 0029d0a072882b1fd85526f365ad090e6abba27f Mon Sep 17 00:00:00 2001 From: Killery Date: Mon, 11 Apr 2016 08:37:57 +0900 Subject: [PATCH] =?utf8?q?=E6=88=A6=E9=97=98=E3=82=92=E6=94=B9=E8=89=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Awars III.xcodeproj/project.pbxproj | 4 + Awars III/BattleView.h | 27 ++++ Awars III/BattleView.m | 244 ++++++++++++++++++++++++++++++++++++ Awars III/FieldScene.h | 1 + Awars III/FieldScene.m | 77 +++++++++++- Awars III/en.lproj/MainMenu.xib | 6 +- Awars III/hitSound.mp3 | Bin 0 -> 7548 bytes 7 files changed, 351 insertions(+), 8 deletions(-) create mode 100644 Awars III/hitSound.mp3 diff --git a/Awars III.xcodeproj/project.pbxproj b/Awars III.xcodeproj/project.pbxproj index e56c0c2..2eb55f7 100755 --- a/Awars III.xcodeproj/project.pbxproj +++ b/Awars III.xcodeproj/project.pbxproj @@ -130,6 +130,7 @@ C6AD18B3169D0A0100783718 /* Gallery.m in Sources */ = {isa = PBXBuildFile; fileRef = C6AD18B2169D0A0100783718 /* Gallery.m */; }; C6AD18B7169D1E9900783718 /* セレクター.png in Resources */ = {isa = PBXBuildFile; fileRef = C6AD18B6169D1E9900783718 /* セレクター.png */; }; C6B6D9361B942B200073242D /* LevelList.m in Sources */ = {isa = PBXBuildFile; fileRef = C6B6D9351B942B200073242D /* LevelList.m */; }; + C6B78E011CBB0397005CEB9E /* hitSound.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C6B78E001CBB0397005CEB9E /* hitSound.mp3 */; }; C6BCF51A169D575900DC5D53 /* タイトル.png in Resources */ = {isa = PBXBuildFile; fileRef = C6BCF519169D575900DC5D53 /* タイトル.png */; }; C6C3697E189148FE00A10A87 /* lc24.png in Resources */ = {isa = PBXBuildFile; fileRef = C6C3697D189148FE00A10A87 /* lc24.png */; }; C6C6685E1A95C5C6006BAECB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C6C6685D1A95C5C6006BAECB /* Images.xcassets */; }; @@ -484,6 +485,7 @@ C6AD18B6169D1E9900783718 /* セレクター.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "セレクター.png"; sourceTree = ""; }; C6B6D9341B942B200073242D /* LevelList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LevelList.h; sourceTree = ""; }; C6B6D9351B942B200073242D /* LevelList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LevelList.m; sourceTree = ""; }; + C6B78E001CBB0397005CEB9E /* hitSound.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = hitSound.mp3; sourceTree = ""; }; C6BCF519169D575900DC5D53 /* タイトル.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "タイトル.png"; sourceTree = ""; }; C6C3697D189148FE00A10A87 /* lc24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = lc24.png; sourceTree = ""; }; C6C6685D1A95C5C6006BAECB /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; @@ -777,6 +779,7 @@ C60E05A0166B143C003D5239 /* Supporting Files */ = { isa = PBXGroup; children = ( + C6B78E001CBB0397005CEB9E /* hitSound.mp3 */, C60E05A1166B143C003D5239 /* Awars III-Info.plist */, C60E05A2166B143C003D5239 /* InfoPlist.strings */, C60E05A5166B143C003D5239 /* main.m */, @@ -1403,6 +1406,7 @@ C6F2A24A16C06D7400992C42 /* mc1.png in Resources */, C6F2A24E16C06DA700992C42 /* mc2.png in Resources */, C6DC3C251A7AD108007514D1 /* test06.jpg in Resources */, + C6B78E011CBB0397005CEB9E /* hitSound.mp3 in Resources */, C6F2A25016C06DDD00992C42 /* mc3.png in Resources */, C6F2A25216C06E1600992C42 /* mc4.png in Resources */, C63622E41A57456B006A20BF /* ucb55.png in Resources */, diff --git a/Awars III/BattleView.h b/Awars III/BattleView.h index 85f9804..c197ced 100755 --- a/Awars III/BattleView.h +++ b/Awars III/BattleView.h @@ -9,6 +9,33 @@ #import #import "FieldScene.h" +#define BT_POINTX1 35 +#define BT_POINTX2 505 +#define BT_POINTY 120 +#define BT_CHASIZEX 100 +#define BT_CHASIZEY 100 +#define BT_CHADISTANCEDELTA 150 +#define BT_CHAMOVESPEED 10 + +bool battleVeryBegunFlag; +bool baseDistanceCompFlag; +int btDistanceX1; +int btDistanceX2; +bool BTunitAttackFlag1; +bool BTunitAttackFlag2; +int btAttackMove1; +int btAttackMoveValue1; +int btAttackMove2; +int btAttackMoveValue2; +bool btHitFlag1; +bool btHitFlag2; +int btHitFlagCnt1; +int btHitFlagCnt2; + + +NSSound *hitSoundBasic; + @interface BattleView : NSView @end +BattleView *battleView; \ No newline at end of file diff --git a/Awars III/BattleView.m b/Awars III/BattleView.m index 0f9f5ee..96189ef 100755 --- a/Awars III/BattleView.m +++ b/Awars III/BattleView.m @@ -10,6 +10,12 @@ @implementation BattleView +-(void)awakeFromNib{ + + battleView = self; + hitSoundBasic = [[NSSound soundNamed:@"hitSound.mp3"] retain]; +} + -(BOOL)isFlipped{ return YES; } @@ -32,10 +38,248 @@ } +-(void)drawImage:(NSImage*)image x:(float)x y:(float)y f:(float)frac{ + NSRect frRect; + frRect.size.height = image.size.height; + frRect.size.width = image.size.width; + + frRect.origin.x = 0; + frRect.origin.y = 0; + + NSRect drRect; + drRect.origin.x = x; + drRect.origin.y = y; + drRect.size.height = image.size.height; + drRect.size.width = image.size.width; + + [image drawInRect:drRect fromRect:frRect operation:NSCompositeSourceOver fraction:frac respectFlipped:YES hints:nil]; + +} - (void)drawRect:(NSRect)dirtyRect { // Drawing code here. + NSImage *img; + + if(!battleVeryBegunFlag){ + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX1 y:BT_POINTY f:1.0]; + U = UTop; + + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX2 y:BT_POINTY f:1.0]; + U = UTop; + }else if(battleVeryBegunFlag && !BTunitAttackFlag1 && !BTunitAttackFlag2){ + + + btDistanceX1 += BT_CHAMOVESPEED; + + if(btDistanceX1 >= BT_CHADISTANCEDELTA) + btDistanceX1 = BT_CHADISTANCEDELTA; + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX1 + btDistanceX1 y:BT_POINTY f:1.0]; + U = UTop; + + + btDistanceX2 += BT_CHAMOVESPEED; + + if(btDistanceX2 >= BT_CHADISTANCEDELTA) + btDistanceX2 = BT_CHADISTANCEDELTA; + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX2 - btDistanceX2 y:BT_POINTY f:1.0]; + U = UTop; + + + if(btDistanceX1 >= BT_CHADISTANCEDELTA && btDistanceX2 >= BT_CHADISTANCEDELTA){ + baseDistanceCompFlag = true; + } + }else if(BTunitAttackFlag1 && !btHitFlag1){ + + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX2 - btDistanceX2 y:BT_POINTY f:1.0]; + U = UTop; + + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if(btAttackMoveValue1 == 0){ + btAttackMove1 += 20; + }else if(btAttackMoveValue1 == 1){ + btAttackMove1 += -20; + } + + if(btAttackMove1 >= 80){ + btAttackMoveValue1 = 1; + } + if(btAttackMove1 <= 0){ + if(btAttackMoveValue1 < 2) + btHitFlag1 = true; + btAttackMoveValue1 = 2; + } + + if(btAttackMoveValue1 < 2){ + [self drawImage:img x:BT_POINTX1 + btDistanceX1 + btAttackMove1 y:BT_POINTY f:1.0]; + }else{ + [self drawImage:img x:BT_POINTX1 + btDistanceX1 y:BT_POINTY f:1.0]; + } + U = UTop; + + + + }else if(BTunitAttackFlag2 && !btHitFlag2){ + + + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + [self drawImage:img x:BT_POINTX1 + btDistanceX1 y:BT_POINTY f:1.0]; + U = UTop; + + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if(btAttackMoveValue2 == 0){ + btAttackMove2 += 20; + }else if(btAttackMoveValue2 == 1){ + btAttackMove2 += -20; + } + + if(btAttackMove2 >= 80){ + btAttackMoveValue2 = 1; + } + if(btAttackMove2 <= 0){ + if(btAttackMoveValue2 < 2) + btHitFlag2 = true; + btAttackMoveValue2 = 2; + } + + if(btAttackMoveValue2 < 2){ + [self drawImage:img x:BT_POINTX2 - btDistanceX2 - btAttackMove2 y:BT_POINTY f:1.0]; + }else{ + [self drawImage:img x:BT_POINTX2 - btDistanceX2 y:BT_POINTY f:1.0]; + } + U = UTop; + + }else if(btHitFlag1){ + + + btHitFlagCnt1++; + + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if (btHitFlagCnt1 == 1) + [hitSoundBasic play]; + if(btHitFlagCnt1 > 10) + btHitFlagCnt1 = 10; + + + [self drawImage:img x:BT_POINTX1 + btDistanceX1 y:BT_POINTY f:1.0]; + + U = UTop; + + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if(btHitFlagCnt1%2 == 0) [self drawImage:img x:BT_POINTX2 - btDistanceX2 y:BT_POINTY f:1.0]; + U = UTop; + + + }else if(btHitFlag2){ + btHitFlagCnt2++; + + U = UTop; + while (!(DUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if (btHitFlagCnt2 == 1) + [hitSoundBasic play]; + if(btHitFlagCnt2 > 10) + btHitFlagCnt2 = 10; + + + [self drawImage:img x:BT_POINTX2 - btDistanceX2 y:BT_POINTY f:1.0]; + + U = UTop; + + U = UTop; + while (!(AUN[1] == U->number)) { + U = U->next; + } + + img = [U->C.imgb copy]; + [img setSize:NSMakeSize(BT_CHASIZEX, BT_CHASIZEY)]; + + if(btHitFlagCnt2%2 == 0) [self drawImage:img x:BT_POINTX1 + btDistanceX1 y:BT_POINTY f:1.0]; + U = UTop; + + } + + } @end diff --git a/Awars III/FieldScene.h b/Awars III/FieldScene.h index 9af9edf..e0579ea 100755 --- a/Awars III/FieldScene.h +++ b/Awars III/FieldScene.h @@ -16,6 +16,7 @@ #import "UnitChipList.h" #import "BuildChipList.h" #import "EventScene.h" +#import "BattleView.h" typedef struct _UNIT{ struct _UNIT *next; diff --git a/Awars III/FieldScene.m b/Awars III/FieldScene.m index 6ef7046..43995d7 100755 --- a/Awars III/FieldScene.m +++ b/Awars III/FieldScene.m @@ -5726,7 +5726,7 @@ -(void)DisplayMessage{ - + battleVeryBegunFlag = true; if(AVpreview){ if(AVpreview.rate > 0){ @@ -5806,11 +5806,20 @@ if(bLoopFlag) break; [battleDialog setStringValue:@"攻撃開始!"]; + if(!baseDistanceCompFlag) + break; bLoopFlag = true; messageProcess++; break; case 1: + if(bLoopFlag) break; + + + BTunitAttackFlag1 = true; + if(battleDef1Flag || battleDod1Flag) + BTunitAttackFlag1 = false; + U = UTop; while (!(DUN[DUNnum] == U->number)) { U = U->next; @@ -5839,6 +5848,7 @@ U = UTop; if(bLoopFlag) break; + U = UTop; while (!(AUN[1] == U->number)) { U = U->next; @@ -5851,6 +5861,17 @@ effCun = U; attackCR = U->C.A; + if(btAttackMoveValue1 < 2 && BTunitAttackFlag1){ + + message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]]; + + [battleDialog setStringValue:message]; + U->C.A = aTop; + U = UTop; + + return; + } + if(!battleDef1Flag && !battleDod1Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]]; @@ -6163,7 +6184,10 @@ if(grazeFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"かすりヒット!\n"]]; if(!healFlag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は%gのダメージを受けた!", U->C.name, dmg]]; - else message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]]; + else { + message = [message stringByAppendingString:[NSString stringWithFormat:@"%@はHPが%g回復した!", U->C.name, dmg]]; + btHitFlag1 = false; + } }else if(battleDef1Flag){ @@ -6175,6 +6199,7 @@ message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]]; + btHitFlag1 = false; }else if(battleDod1Flag){ @@ -6185,10 +6210,11 @@ message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]]; - + btHitFlag1 = false; }else{ message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]]; + btHitFlag1 = false; } [battleDialog setStringValue:message]; @@ -6222,6 +6248,13 @@ case 2: + if(bLoopFlag) break; + BTunitAttackFlag1 = false; + BTunitAttackFlag2 = true; + if(battleDef2Flag || battleDod2Flag) + BTunitAttackFlag2 = false; + btHitFlag1 = false; + U = UTop; while (!(DUN[1] == U->number)) { @@ -6389,11 +6422,24 @@ if(!U->C.A){ U->C.A = aTop2; U = UTop; + BTunitAttackFlag2 = false; message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]]; goto SKIP1; } effCun = U; attackCR2 = U->C.A; + + if(btAttackMoveValue2 < 2 && BTunitAttackFlag2){ + + message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]]; + + [battleDialog setStringValue:message]; + U->C.A = aTop2; + U = UTop; + + return; + } + if(!battleDef2Flag && !battleDod2Flag) message = [message stringByAppendingString:[NSString stringWithFormat:@"%@の%@\n", U->C.name, U->C.A->name]]; if(!battleDef1Flag && !battleDod1Flag && !avPlayerFlag2 && ![U->C.A->AN.movName isEqualToString:@""] && ![U->C.A->AN.movName isEqualToString:@"(null)"] && U->C.A->AN.movName != NULL){ @@ -6708,7 +6754,7 @@ message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は身構えている", U->C.name]]; - + btHitFlag2 = false; }else if(battleDod2Flag){ @@ -6719,10 +6765,11 @@ message = [message stringByAppendingString:[NSString stringWithFormat:@"%@は様子をうかがっている", U->C.name]]; - + btHitFlag2 = false; }else{ message = [message stringByAppendingString:[NSString stringWithFormat:@"ミス!%@はダメージを受けていない!", U->C.name]]; + btHitFlag2 = false; } SKIP1: [battleDialog setStringValue:message]; @@ -6763,6 +6810,20 @@ g_attackRangeExtent[g][k] = 0; } } + + btDistanceX1 = 0; + btDistanceX2 = 0; + BTunitAttackFlag1 = false; + BTunitAttackFlag2 = false; + BTunitAttackFlag1 = false; + btAttackMoveValue1 = 0; + btAttackMoveValue2 = 0; + btHitFlag1 = false; + btHitFlag2 = false; + btHitFlagCnt1 = 0; + btHitFlagCnt2 = 0; + baseDistanceCompFlag = false; + battleVeryBegunFlag = false; break; default: @@ -8505,6 +8566,7 @@ avAWESOME3A:{} if(!U->CL.A){ U->CL.A = aTop2; U = UTop; + message = [message stringByAppendingString:[NSString stringWithFormat:@"射程外\n"]]; goto SKIP1; } @@ -12353,6 +12415,9 @@ SKIP1: -(void)EventLoopBV:(NSTimer*)timer{ + + [battleView setNeedsDisplay:YES]; + static int aniFrame = 0; if(animationFlag3){ @@ -12414,6 +12479,8 @@ SKIP1: [self setNeedsDisplay:YES]; + + } -(void)DrawImage:(NSImage*)image x:(float)x y:(float)y a:(float)a{ diff --git a/Awars III/en.lproj/MainMenu.xib b/Awars III/en.lproj/MainMenu.xib index 698ebb5..2a6782c 100755 --- a/Awars III/en.lproj/MainMenu.xib +++ b/Awars III/en.lproj/MainMenu.xib @@ -9449,7 +9449,7 @@ - +