Skip to content

Commit

Permalink
DP不具合修正
Browse files Browse the repository at this point in the history
mtaikoの下敷きをプレイヤーごとに分離
飛んでいく音符の2P対応
黄色連打の2P対応
風船連打の2P対応
DIRECTION命令の2P対応
HIDDENBRANCH命令の2P対応(未確認)
LEVELHOLD命令の2P対応(未確認)
強制的に分岐をしたフラグを2P対応
コンボボイスの2P対応
ゴーゴータイムをプレイヤーごとに分離
senotesのコミット漏れ
やり直し時の開始位置を早めにしてみる
コンボバルーンの描画優先度を修正
動画の窓表示がDPの時に出ないよう修正
手つなぎ音符が飛んでいく時に大音符のテクスチャを使うよう修正
ゲージ(魂)花火の2P側がうまく描画されないバグを修正
オートプレイ時に手つなぎ音符を叩いても音が鳴らないバグを修正
オートプレイ時にやり直しをすると2回目以降連打が動かなくなるバグを修正...が、完全に修正しきれていない
コンボ数字の動きが1Pと2Pで連動していたのを修正
BALLOON命令がある譜面の挙動が異常になっていたので修正
DP時にBGMが再生されなくなっていたので修正
不要な記述の一部削除
  • Loading branch information
kairera0467 committed Aug 24, 2017
1 parent 5c03654 commit c624134
Show file tree
Hide file tree
Showing 32 changed files with 619 additions and 701 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>TRACE;_TEST_ENGLISH TEST_Direct3D9Ex_ _WindowedFullscreen</DefineConstants>
<DefineConstants>TRACE;DEBUG;_TEST_ENGLISH TEST_Direct3D9Ex_ _WindowedFullscreen MemoryRenderer</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
Expand Down
93 changes: 76 additions & 17 deletions DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2791,31 +2791,36 @@ private string[] tコマンド行を削除したTJAを返す( string[] input, in
{
if( !string.IsNullOrEmpty( input[ n ] ) && ( input[ n ].Substring( 0, 1 ) == "#" || this.CharConvertNote( input[ n ].Substring( 0, 1 ) ) != -1 ) )
{
//2017.08.22 kairera0467 A~Fのノートを追加した結果うまく行削除ができなくなったので、A~Fで始まる命令をさらに削除する処理を追加
if( input[ n ].StartsWith( "BALLOON:" ) )
if( input[ n ].StartsWith( "BALLOON" ) )
{
input[ n ] = "";
//何もしない
}
else
{
strTemp += ( input[ n ] + "\n" );
}
}


}
else if( nMode == 2 )
{
if( !string.IsNullOrEmpty( input[ n ] ) && this.CharConvertNote( input[ n ].Substring( 0, 1 ) ) != -1 )
{
strTemp += ( input[ n ] + "\n" );
if( input[ n ].StartsWith( "BALLOON" ) )
{
//何もしない
}
else
{
strTemp += ( input[ n ] + "\n" );
}
}
else
{
if( input[ n ].StartsWith( "#BRANCHSTART" ) || input[ n ] == "#N" || input[ n ] == "#E" || input[ n ] == "#M" )
{
strTemp += ( input[ n ] + "\n" );
}

}
}
}
Expand Down Expand Up @@ -3013,14 +3018,15 @@ private bool tセッション譜面がある( string strTJA, ref string strTJA2,

for( int i = 1; i < 3; i++ )
{
//腑分けした時に「#START」が消えてBGMが再生できなくなってしまうので、strDoublePnに代入する時に頭に「#START」をつけておく。
if( str2[ i ].IndexOf( "P1" ) != -1 )
{
strDoubleP1 = str2[ i ];
strDoubleP1 = ( "#START" + str2[ i ] );
bIsSessionNotes = true;
}
else if( str2[ i ].IndexOf( "P2" ) != -1 )
{
strDoubleP2 = str2[ i ];
strDoubleP2 = ( "#START" + str2[ i ]);
bIsSessionNotes = true;
}
else
Expand Down Expand Up @@ -3059,6 +3065,17 @@ private void t入力_V4( string strInput )
{
if( !String.IsNullOrEmpty( strInput ) ) //空なら通さない
{
//StreamWriter stream = null;
//bool bLog = true;
//try
//{
// stream = new StreamWriter("noteTest.txt", false);
//}
//catch (Exception ex)
//{
// Trace.TraceError( ex.StackTrace );
//}

//2017.01.31 DD カンマのみの行を0,に置き換え
strInput = Regex.Replace( strInput, @"^,", "0,", RegexOptions.Multiline );

Expand Down Expand Up @@ -3139,8 +3156,30 @@ private void t入力_V4( string strInput )
//指定したコースの譜面の命令を消去する。
this.tセッション譜面がある( this.strSplitした譜面[ n読み込むコース ], ref this.strSplitした譜面[ n読み込むコース ], CDTXMania.ConfigIni.nPlayerCount > 1 ? ( this.nPlayerSide + 1 ) : 0 );
this.str命令消去譜面 = this.strSplitした譜面[ n読み込むコース ].Split( this.dlmtEnter, StringSplitOptions.RemoveEmptyEntries );
//if( bLog && stream != null )
//{
// stream.WriteLine( "-------------------------------------------------" );
// stream.WriteLine( ">>this.str命令消去譜面(コマンド削除前)" );
// for( int i = 0; i < this.str命令消去譜面.Length; i++ )
// {
// stream.WriteLine( this.str命令消去譜面[ i ] );
// }
// stream.WriteLine( "-------------------------------------------------" );
//}
this.str命令消去譜面 = this.tコマンド行を削除したTJAを返す( this.str命令消去譜面, 2 );

//if( bLog && stream != null )
//{
// stream.WriteLine( "-------------------------------------------------" );
// stream.WriteLine( ">>this.str命令消去譜面" );
// for( int i = 0; i < this.str命令消去譜面.Length; i++ )
// {
// stream.WriteLine( this.str命令消去譜面[ i ] );
// }
// stream.WriteLine( "-------------------------------------------------" );
//}


//ここで1行の文字数をカウント。配列にして返す。
string str = "";
try
Expand Down Expand Up @@ -3175,7 +3214,6 @@ private void t入力_V4( string strInput )

if( this.CharConvertNote( this.str命令消去譜面[ i ].Substring( 0, 1 ) ) != -1 )
str += this.str命令消去譜面[ i ];

}
else
{
Expand All @@ -3189,16 +3227,34 @@ private void t入力_V4( string strInput )
Trace.TraceError( ex.StackTrace );
}


//if( bLog && stream != null )
//{
// stream.WriteLine( "-------------------------------------------------" );
// stream.WriteLine( ">>this.str命令消去譜面 (命令消去した後)" );
// for( int i = 0; i < this.str命令消去譜面.Length; i++ )
// {
// stream.WriteLine( this.str命令消去譜面[ i ] );
// }
// stream.WriteLine( "-------------------------------------------------" );
//}

//読み込み部分本体に渡す譜面を作成。
this.strSplitした後の譜面 = this.strSplitした譜面[ n読み込むコース ].Split( this.dlmtEnter, StringSplitOptions.RemoveEmptyEntries );
this.strSplitした後の譜面 = this.tコマンド行を削除したTJAを返す( this.strSplitした後の譜面, 1 );
string str命令消去譜面temp = this.StringArrayToString( this.str命令消去譜面 );
string[] strDelimiter = { "," };
this.str命令消去譜面 = str命令消去譜面temp.Split( strDelimiter, StringSplitOptions.RemoveEmptyEntries );
//string[] strDelimiter = { "," };
//this.str命令消去譜面 = str命令消去譜面temp.Split( strDelimiter, StringSplitOptions.RemoveEmptyEntries );

//this.b譜面が存在する[3] = true;
//if( bLog && stream != null )
//{
// stream.WriteLine( "-------------------------------------------------" );
// stream.WriteLine( ">>this.str命令消去譜面 (Splitした後)" );
// for( int i = 0; i < this.str命令消去譜面.Length; i++ )
// {
// stream.WriteLine( this.str命令消去譜面[ i ] );
// }
// stream.WriteLine( "-------------------------------------------------" );
//}

this.n現在の小節数 = 1;
try
Expand All @@ -3208,10 +3264,11 @@ private void t入力_V4( string strInput )
this.dbNowTime += ((15000.0 / 120.0 * ( 4.0 / 4.0 )) * 16.0 );
//this.dbNowBMScollTime += (( this.dbBarLength ) * 16.0 );
#endregion

//string strWrite = "";
for( int i = 0; this.strSplitした後の譜面.Length > i; i++ )
{
str = this.strSplitした後の譜面[ i ];
//strWrite += str;
//if( !str.StartsWith( "#" ) && !string.IsNullOrEmpty( this.strTemp ) )
//{
// str = this.strTemp + str;
Expand All @@ -3224,9 +3281,11 @@ private void t入力_V4( string strInput )
{

}



//if( stream != null )
//{
// stream.Flush();
// stream.Close();
//}
#endregion
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,78 +63,6 @@ public override int On進行描画()

#region [ private ]
//-----------------
[StructLayout( LayoutKind.Sequential )]
private struct ST数字
{
public char ch;
public Rectangle rc;
public ST数字( char ch, Rectangle rc )
{
this.ch = ch;
this.rc = rc;
}
}

private STDGBVALUE<bool> b現在選択中の曲がフルコンボ;
private CCounter ct登場アニメ用;
private CCounter ct難易度スクロール用;
private CCounter ct難易度矢印用;
private STDGBVALUE<double> db現在選択中の曲の最高スキル値;
private STDGBVALUE<int> n現在選択中の曲のレベル;
private STDGBVALUE<int> n現在選択中の曲の最高ランク;
private int n現在選択中の曲の難易度;
private int n難易度開始文字位置;
private const int n難易度表示可能文字数 = 0x24;
private int n本体X;
private int n本体Y;
private readonly Rectangle[] rcランク = new Rectangle[] { new Rectangle( 0, 0x20, 10, 10 ), new Rectangle( 10, 0x20, 10, 10 ), new Rectangle( 20, 0x20, 10, 10 ), new Rectangle( 0, 0x2a, 10, 10 ), new Rectangle( 10, 0x2a, 10, 10 ), new Rectangle( 20, 0x2a, 10, 10 ), new Rectangle( 0, 0x34, 10, 10 ) };
private readonly Rectangle[] rc数字 = new Rectangle[] { new Rectangle( 0, 0, 15, 0x13 ), new Rectangle( 15, 0, 15, 0x13 ), new Rectangle( 30, 0, 15, 0x13 ), new Rectangle( 0x2d, 0, 15, 0x13 ), new Rectangle( 0, 0x13, 15, 0x13 ), new Rectangle( 15, 0x13, 15, 0x13 ), new Rectangle( 30, 0x13, 15, 0x13 ), new Rectangle( 0x2d, 0x13, 15, 0x13 ), new Rectangle( 0, 0x26, 15, 0x13 ), new Rectangle( 15, 0x26, 15, 0x13 ), new Rectangle( 30, 0x26, 15, 0x13 ), new Rectangle( 0x2d, 0x26, 15, 0x13 ) };
private C曲リストノード r直前の曲;
private string[] str難易度ラベル = new string[] { "", "", "", "", "" };
private readonly ST数字[] st数字 = new ST数字[] { new ST数字( '0', new Rectangle( 0, 0, 8, 11 ) ), new ST数字( '1', new Rectangle( 8, 0, 8, 11 ) ), new ST数字( '2', new Rectangle( 0x10, 0, 8, 11 ) ), new ST数字( '3', new Rectangle( 0x18, 0, 8, 11 ) ), new ST数字( '4', new Rectangle( 0x20, 0, 8, 11 ) ), new ST数字( '5', new Rectangle( 40, 0, 8, 11 ) ), new ST数字( '6', new Rectangle( 0, 11, 8, 11 ) ), new ST数字( '7', new Rectangle( 8, 11, 8, 11 ) ), new ST数字( '8', new Rectangle( 0x10, 11, 8, 11 ) ), new ST数字( '9', new Rectangle( 0x18, 11, 8, 11 ) ), new ST数字( '.', new Rectangle( 0x20, 11, 4, 11 ) ), new ST数字( 'p', new Rectangle( 0x24, 11, 15, 11 ) ) };
private CTexture txゲージ用数字他;
private CTexture txスキルゲージ;
private CTexture txパネル本体;
private CTexture txレベル数字;
private CTexture tx難易度用矢印;

private int n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す()
{
int num = 0;
int length = 0;
for( int i = 0; i < 5; i++ )
{
if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル[ i ].Length > 0 ) )
{
length = this.str難易度ラベル[ i ].Length;
}
if( this.n現在選択中の曲の難易度 == i )
{
break;
}
if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル.Length > 0 ) )
{
num += length + 2;
}
}
if( num >= ( this.n難易度開始文字位置 + 0x24 ) )
{
return 1;
}
if( ( num + length ) <= this.n難易度開始文字位置 )
{
return -1;
}
if( ( ( num + length ) - 1 ) >= ( this.n難易度開始文字位置 + 0x24 ) )
{
return 1;
}
if( num < this.n難易度開始文字位置 )
{
return -1;
}
return 0;
}
//-----------------
#endregion
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ protected enum EMode { 非表示中, 進行表示中, 残像表示中 }
protected CTexture txCOMBO太鼓;
protected CTexture txCOMBO太鼓_でかいやつ;
protected CTexture txコンボラメ;
public CCounter ctコンボ加算;
public CCounter[] ctコンボ加算;
public CCounter ctコンボラメ;

protected float[,] nコンボ拡大率_座標 = new float[,]{
Expand Down Expand Up @@ -272,7 +272,7 @@ protected virtual void tコンボ表示_太鼓( int nCombo値, int nジャンプ
int[] n位の数 = new int[ 10 ]; // 表示は10桁もあれば足りるだろう

this.ctコンボラメ.t進行Loop();
this.ctコンボ加算.t進行();
this.ctコンボ加算[ nPlayer ].t進行();

#region [ nCombo値を桁数ごとに n位の数[] に格納する。(例:nCombo値=125 のとき n位の数 = { 5,2,1,0,0,0,0,0,0,0 } ) ]
//-----------------
Expand Down Expand Up @@ -342,8 +342,8 @@ protected virtual void tコンボ表示_太鼓( int nCombo値, int nジャンプ
int[] arComboX = { nCombo中心X, nCombo中心X };
if( this.txCOMBO太鼓 != null )
{
this.txCOMBO太鼓.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 0 ];
this.txCOMBO太鼓.t2D中心基準描画( CDTXMania.app.Device, arComboX[ i ], y + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 1 ] + 26, new Rectangle( n位の数[ i ] * 44, 0, 44, 60 ) );
this.txCOMBO太鼓.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 0 ];
this.txCOMBO太鼓.t2D中心基準描画( CDTXMania.app.Device, arComboX[ i ], y + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 1 ] + 26, new Rectangle( n位の数[ i ] * 44, 0, 44, 60 ) );
}
}
else if( n桁数 <= 2 )
Expand All @@ -354,8 +354,8 @@ protected virtual void tコンボ表示_太鼓( int nCombo値, int nジャンプ
int[] arComboX = { nCombo中心X + ( 22 - 1 ), nCombo中心X - ( 22 - 1 ) };
if( this.txCOMBO太鼓 != null )
{
this.txCOMBO太鼓.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 0 ];
this.txCOMBO太鼓.t2D中心基準描画( CDTXMania.app.Device, arComboX[ i ], y + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 1 ] + 26, new Rectangle( n位の数[ i ] * 44, 0, 44, 60 ) );
this.txCOMBO太鼓.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 0 ];
this.txCOMBO太鼓.t2D中心基準描画( CDTXMania.app.Device, arComboX[ i ], y + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 1 ] + 26, new Rectangle( n位の数[ i ] * 44, 0, 44, 60 ) );
}
}
else if( n桁数 == 3 )
Expand All @@ -366,8 +366,8 @@ protected virtual void tコンボ表示_太鼓( int nCombo値, int nジャンプ
int nラメ基準X座標 = x + ( 25 - 9 );
if( this.txCOMBO太鼓_でかいやつ != null )
{
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 0 ];
this.txCOMBO太鼓_でかいやつ.t2D描画( CDTXMania.app.Device, x, ( y - 12 ) + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 1 ], new Rectangle( n位の数[ i ] * 50, 0, 50, 70 ) );
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 0 ];
this.txCOMBO太鼓_でかいやつ.t2D描画( CDTXMania.app.Device, x, ( y - 12 ) + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 1 ], new Rectangle( n位の数[ i ] * 50, 0, 50, 70 ) );
}
if( this.txコンボラメ != null )
{
Expand Down Expand Up @@ -399,8 +399,8 @@ protected virtual void tコンボ表示_太鼓( int nCombo値, int nジャンプ
if( this.txCOMBO太鼓_でかいやつ != null )
{
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.X = 0.95f;
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 0 ];
this.txCOMBO太鼓_でかいやつ.t2D描画( CDTXMania.app.Device, ( x - 10 ), ( y - 12 ) + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算.n現在の値, 1 ], new Rectangle( n位の数[ i ] * 50, 0, 50, 70 ) );
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.Y = this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 0 ];
this.txCOMBO太鼓_でかいやつ.t2D描画( CDTXMania.app.Device, ( x - 10 ), ( y - 12 ) + (int)this.nコンボ拡大率_座標[ this.ctコンボ加算[ nPlayer ].n現在の値, 1 ], new Rectangle( n位の数[ i ] * 50, 0, 50, 70 ) );
this.txCOMBO太鼓_でかいやつ.vc拡大縮小倍率.X = 1.0f;
}
if( this.txコンボラメ != null )
Expand Down Expand Up @@ -456,6 +456,7 @@ public override void On活性化()
{
this.n現在のコンボ数 = new STCOMBO() { act = this };
this.status = new CSTATUS();
this.ctコンボ加算 = new CCounter[ 4 ];
for( int i = 0; i < 4; i++ )
{
this.status[ i ].e現在のモード = EMode.非表示中;
Expand All @@ -466,8 +467,8 @@ public override void On活性化()
this.status[ i ].nジャンプインデックス値 = 99999;
this.status[ i ].n前回の時刻_ジャンプ用 = -1;
this.status[ i ].nコンボが切れた時刻 = -1;
this.ctコンボ加算[ i ] = new CCounter( 0, 8, 6, CDTXMania.Timer );
}
this.ctコンボ加算 = new CCounter( 0, 8, 6, CDTXMania.Timer );
this.ctコンボラメ = new CCounter( 0, 29, 20, CDTXMania.Timer );
base.On活性化();
}
Expand Down
Loading

0 comments on commit c624134

Please sign in to comment.