OSDN Git Service

#35411
authorchnmr0 <chnmr0@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 29 Sep 2015 15:27:34 +0000 (15:27 +0000)
committerchnmr0 <chnmr0@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 29 Sep 2015 15:27:34 +0000 (15:27 +0000)
・ギター空打ちBADでゴーストのコンボを途切れるように修正(ラグデータに追加情報を持たせる)
・GBフリップ時読み込むゴーストもそれに合わせる

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@860 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs
DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs
DTXManiaプロジェクト/コード/ステージ/08.結果/CStage結果.cs

index d8f3d0e..7d385bc 100644 (file)
@@ -401,6 +401,7 @@ namespace DTXMania
                        public int n発声位置;\r
                        public int n発声時刻ms;\r
                        public int nLag;                                // 2011.2.1 yyagi\r
+                       public int nCurrentComboForGhost; // 2015.9.29 chnmr0\r
                        public CDTX.CAVI rAVI;\r
                        public CDTX.CAVIPAN rAVIPan;\r
                        public CDTX.CBGA rBGA;\r
index 722417a..08bba52 100644 (file)
@@ -77,6 +77,11 @@ namespace DTXMania
                 // Read ghost data by config\r
                 // It does not exist a ghost file for 'perfect' actually\r
                 string [] inst = {"dr", "gt", "bs"};\r
+                               if( CDTXMania.ConfigIni.bIsSwappedGuitarBass )\r
+                               {\r
+                                       inst[1] = "bs";\r
+                                       inst[2] = "gt";\r
+                               }\r
                 \r
                 for(int instIndex = 0; instIndex < inst.Length; ++instIndex)\r
                 {\r
@@ -141,7 +146,7 @@ namespace DTXMania
                             int cnt = br.ReadInt32();\r
                             for (int i = 0; i < cnt; ++i)\r
                             {\r
-                                SByte lag = br.ReadSByte();\r
+                                short lag = br.ReadInt16();\r
                                 list.Add(lag);\r
                             }\r
                         }\r
index b8ea85e..d081e2c 100644 (file)
@@ -741,6 +741,7 @@ namespace DTXMania
                 if (saveLag)\r
                 {\r
                     pChip.nLag = lag;          // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature\r
+                                       pChip.nCurrentComboForGhost = this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート];\r
                 }\r
                 // #35411 modify end\r
 \r
@@ -1862,17 +1863,23 @@ namespace DTXMania
                     {\r
                         pChip.bTargetGhost判定済み = true;\r
 \r
-                        int ghostLag = 1 + Byte.MaxValue;\r
-                        if( 0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listTargetGhsotLag[instIndex].Count )\r
+                                               int ghostLag = 128;\r
+                                               if( 0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listTargetGhsotLag[instIndex].Count )\r
                         {\r
                             ghostLag = CDTXMania.listTargetGhsotLag[instIndex][pChip.n楽器パートでの出現順];\r
-                        }\r
+                                                       // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)\r
+                                                       if( ghostLag > 255 )\r
+                                                       {\r
+                                                               this.nコンボ数_TargetGhost[instIndex] = 0;\r
+                                                       }\r
+                                                       ghostLag = (ghostLag & 255) - 128;\r
+                                               }\r
                         else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )\r
                         {\r
                             ghostLag = 0;\r
                         }\r
                         \r
-                        if ( ghostLag <= Byte.MaxValue )\r
+                        if ( ghostLag <= 127 )\r
                         {\r
                             E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(pChip.n発声時刻ms + ghostLag , pChip, 0, false);\r
                             this.nヒット数_TargetGhost[instIndex][(int)eJudge]++;\r
@@ -2820,18 +2827,21 @@ namespace DTXMania
                 if ( (pChip.e楽器パート == E楽器パート.GUITAR || pChip.e楽器パート == E楽器パート.BASS ) &&\r
                     CDTXMania.ConfigIni.eAutoGhost[(int)(pChip.e楽器パート)] != EAutoGhostData.PERFECT &&\r
                     CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート] != null &&\r
-                    ( pChip.e楽器パート == E楽器パート.GUITAR ?\r
-                      CDTXMania.ConfigIni.bギターが全部オートプレイである :\r
-                      CDTXMania.ConfigIni.bベースが全部オートプレイである ) &&\r
                     0 <= pChip.n楽器パートでの出現順 &&\r
                     pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート].Count)\r
                 {\r
                        // #35411 (mod) Ghost data が有効なので 従来のAUTOではなくゴーストのラグを利用\r
                        // 発生時刻と現在時刻からこのタイミングで演奏するかどうかを決定\r
-                    ghostLag = CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート][pChip.n楽器パートでの出現順]\r
-                        - (pChip.e楽器パート == E楽器パート.GUITAR ? nInputAdjustTimeMs.Guitar : nInputAdjustTimeMs.Bass);\r
+                                       ghostLag = CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート][pChip.n楽器パートでの出現順];\r
+                                       bool resetCombo = ghostLag > 255;\r
+                                       ghostLag = (ghostLag & 255) - 128;\r
+                                       ghostLag -= (pChip.e楽器パート == E楽器パート.GUITAR ? nInputAdjustTimeMs.Guitar : nInputAdjustTimeMs.Bass);\r
                     autoPlayCondition &= (pChip.n発声時刻ms + ghostLag <= CSound管理.rc演奏用タイマ.n現在時刻ms);\r
-                    bUsePerfectGhost = false;\r
+                                       if (resetCombo && autoPlayCondition )\r
+                                       {\r
+                                               this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート] = 0;\r
+                                       }\r
+                                       bUsePerfectGhost = false;\r
                 }\r
                 \r
                 if( bUsePerfectGhost )\r
index e90097c..c806daa 100644 (file)
@@ -2048,13 +2048,14 @@ namespace DTXMania
 \r
                 if( CDTXMania.ConfigIni.eAutoGhost.Drums != EAutoGhostData.PERFECT &&\r
                     CDTXMania.listAutoGhostLag.Drums != null &&\r
-                    CDTXMania.ConfigIni.bドラムが全部オートプレイである &&\r
                     0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag.Drums.Count)\r
 \r
                 {\r
                     // ゴーストデータが有効 : ラグに合わせて判定\r
-                    ghostLag = CDTXMania.listAutoGhostLag.Drums[pChip.n楽器パートでの出現順] - this.nInputAdjustTimeMs.Drums;\r
-                    autoPlayCondition &= !pChip.bHit && (ghostLag + pChip.n発声時刻ms <= CSound管理.rc演奏用タイマ.n現在時刻ms);\r
+                                       ghostLag = CDTXMania.listAutoGhostLag.Drums[pChip.n楽器パートでの出現順];\r
+                                       ghostLag = (ghostLag & 255) - 128;\r
+                                       ghostLag -= this.nInputAdjustTimeMs.Drums;\r
+                                       autoPlayCondition &= !pChip.bHit && (ghostLag + pChip.n発声時刻ms <= CSound管理.rc演奏用タイマ.n現在時刻ms);\r
                     UsePerfectGhost = false;\r
                 }\r
                 if( UsePerfectGhost )\r
index 2455be4..f5f4d8a 100644 (file)
@@ -374,12 +374,19 @@ namespace DTXMania
                             {\r
                                // -128 ms から 127 ms までのラグしか保存しない\r
                                // その範囲を超えているラグはクランプ\r
-                                int data = chip.nLag;\r
-                                int mx = SByte.MaxValue;\r
-                                int mn = SByte.MinValue;\r
-                                data = Math.Min(mx, data);\r
-                                data = Math.Max(mn, data);\r
-                                bw.Write((SByte)data);\r
+                                                               // ラグデータの 上位8ビットでそのチップの前でギター空打ちBADがあったことを示す\r
+                                                               int lag = chip.nLag;\r
+                                                               if (lag < -128)\r
+                                                               {\r
+                                                                       lag = -128;\r
+                                                               }\r
+                                                               if (lag > 127)\r
+                                                               {\r
+                                                                       lag = 127;\r
+                                                               }\r
+                                                               byte lower = (byte)(lag + 128);\r
+                                                               int upper = chip.nCurrentComboForGhost == 0 ? 1 : 0;\r
+                                                               bw.Write((short)( (upper<<8) | lower));\r
                             }\r
                         }\r
                     }\r