1
0
mirror of synced 2025-02-17 19:09:25 +01:00

1P 2P save files support 1st part (Loading & tables)

This commit is contained in:
0aubsq 2021-12-11 08:19:50 +01:00
parent df8384be9d
commit 7c10b890eb
7 changed files with 155 additions and 97 deletions

View File

@ -33,8 +33,8 @@ using System.Resources;
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.5.2")]
[assembly: AssemblyFileVersion("0.5.2")]
[assembly: AssemblyVersion("0.5.3")]
[assembly: AssemblyFileVersion("0.5.3")]
[assembly: NeutralResourcesLanguage("ja-JP")]
// このアセンブリは「ライブラリ」である(難読化ツールへの指示)。

View File

@ -934,10 +934,15 @@ namespace TJAPlayer3
#region [ .score.ini Cスコア. ]
//-----------------
try
{
var scoreIniPath = c曲リストード.arスコア[ i ].. + ".score.ini";
if( File.Exists( scoreIniPath ) )
this.tScoreIniを読み込んで譜面情報を設定する( scoreIniPath, c曲リストード.arスコア[ i ] );
{
var scoreIniPath = c曲リストード.arスコア[i]..;// + ".score.ini";
if( File.Exists( scoreIniPath ) )
{
this.tScoreIniを読み込んで譜面情報を設定する(scoreIniPath, c曲リストード.arスコア[i]);
}
// Legacy save files from DTX mania
/*
else
{
string[] dtxscoreini = Directory.GetFiles(c曲リストード.arスコア[i].., "*.dtx.score.ini");
@ -946,6 +951,7 @@ namespace TJAPlayer3
this.tScoreIniを読み込んで譜面情報を設定する(dtxscoreini[0], c曲リストード.arスコア[i]);
}
}
*/
}
catch (Exception e)
{
@ -1743,19 +1749,53 @@ Debug.WriteLine( dBPM + ":" + c曲リストード.strタイトル );
//-----------------
public void tScoreIniを読み込んで譜面情報を設定する( string strScoreIniファイルパス, Cスコア score )
{
if( !File.Exists( strScoreIniファイルパス ) )
// New format
string[] fp =
{
strScoreIniファイルパス + "1P.score.ini",
strScoreIniファイルパス + "2P.score.ini",
};
// Load legacy format if new doesn't exist yet
if (!File.Exists(fp[0]))
fp[0] = strScoreIniファイルパス + ".score.ini";
/*
if ( !File.Exists( strScoreIniファイルパス ) )
return;
*/
// Select the main file for the common informations
int mainFile = 0;
if (!File.Exists(fp[0]))
mainFile = 1;
if (!File.Exists(fp[1]) && mainFile == 1)
return;
// Only the necessary scores are read from the auxilliary score file
int auxFile = mainFile ^ 1;
try
{
var ini = new CScoreIni( strScoreIniファイルパス );
ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
{
//var ini = new CScoreIni( strScoreIniファイルパス );
CScoreIni[] csi =
{
new CScoreIni(fp[mainFile]),
File.Exists(fp[auxFile]) ? new CScoreIni(fp[auxFile]) : null,
};
var ini = csi[0];
for( int n楽器番号 = 0; n楽器番号 < 3; n楽器番号++ )
ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
csi[1]?.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
for ( int n楽器番号 = 0; n楽器番号 < 3; n楽器番号++ )
{
int n = ( n楽器番号 * 2 ) + 1; // n = 05
#region socre..[ n楽器番号 ] = ...
#region score..[ n楽器番号 ] = ...
//-----------------
if( ini.stセクション[ n ].b演奏にMIDI入力を使用した ||
ini.stセクション[ n ].b演奏にキーボードを使用した ||
@ -1781,16 +1821,36 @@ Debug.WriteLine( dBPM + ":" + c曲リストード.strタイトル );
}
//-----------------
#endregion
score..[ n楽器番号 ] = ini.stセクション[ n ].db演奏型スキル値;
score..[ n楽器番号 ] = ini.stセクション[ n ].bフルコンボである;
score.. = (int)ini.stセクション.HiScoreDrums.nスコア;
score..nクリア = ini.stセクション.HiScoreDrums.nクリア;
score..nスコアランク = ini.stセクション.HiScoreDrums.nスコアランク;
for( int i = 0; i < (int)Difficulty.Total; i++ )
{
score..nハイスコア[ i ] = (int)ini.stセクション.HiScoreDrums.nハイスコア[ i ];
}
}
// Legacy
score.. = (int)ini.stセクション.HiScoreDrums.nスコア;
score..nクリア = ini.stセクション.HiScoreDrums.nクリア;
score..nスコアランク = ini.stセクション.HiScoreDrums.nスコアランク;
for (int i = 0; i < (int)Difficulty.Total; i++)
{
score..nハイスコア[i] = (int)ini.stセクション.HiScoreDrums.nハイスコア[i];
}
// Load GPInfo for each save file
for (int i = 0; i < 2; i++)
{
if (csi[i] == null)
continue;
score.GPInfo[i].nClear = csi[i].stセクション.HiScoreDrums.nクリア;
score.GPInfo[i].nScoreRank = csi[i].stセクション.HiScoreDrums.nスコアランク;
for (int j = 0; j < (int)Difficulty.Total; j++)
{
score.GPInfo[i].nHighScore[j] = (int)csi[i].stセクション.HiScoreDrums.nハイスコア[j];
}
}
score...Drums = ini.stファイル.PlayCountDrums;
score...Guitar = ini.stファイル.PlayCountGuitar;
score...Bass = ini.stファイル.PlayCountBass;

View File

@ -47,7 +47,20 @@ namespace TJAPlayer3
}
}
public ST譜面情報 ;
public ST譜面情報 ;
// Smaller version of ST譜面情報 to keep the main info for each player (High scores, clear status, score ranks
public STGamePlayInformations[] GPInfo = new STGamePlayInformations[2];
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct STGamePlayInformations
{
public int[] nHighScore;
public int[] nClear; //0:未クリア 1:クリア 2:フルコンボ 3:ドンダフルコンボ
public int[] nScoreRank; //0:未取得 1:白粋 2:銅粋 3:銀粋 4:金雅 5:桃雅 6:紫雅 7:虹極
}
[Serializable]
[StructLayout( LayoutKind.Sequential )]
public struct ST譜面情報
@ -319,6 +332,14 @@ namespace TJAPlayer3
this..nレベル = new int[(int)Difficulty.Total] { -1, -1, -1, -1, -1, -1, -1};
this..nクリア = new int[5];
this..nスコアランク = new int[5];
for (int i = 0; i < 2; i++)
{
this.GPInfo[i].nHighScore = new int[(int)Difficulty.Total];
this.GPInfo[i].nClear = new int[5];
this.GPInfo[i].nScoreRank = new int[5];
}
this..nLife = 5;
this..nTotalFloor = 140;

View File

@ -21,6 +21,7 @@ namespace TJAPlayer3
}
public int nID { get; private set; }
public Cスコア[] arスコア = new Cスコア[(int)Difficulty.Total];
public string[] ar難易度ラベル = new string[(int)Difficulty.Total];
public bool bDTXFilesで始まるフォルダ名のBOXである;
public bool bBoxDefで作成されたBOXである

View File

@ -543,17 +543,24 @@ namespace TJAPlayer3
await Task.Delay(100);
}
#region [Reset nodes]
#region [Reset nodes]
for (int s = 0; s <= (int)Difficulty.Edit + 1; s++)
{
CScorePad SPRef = ScorePads[s];
for (int pl = 0; pl < 2; pl++)
{
CScorePad[] SPArrRef = ScorePads;
if (TJAPlayer3.GetActualPlayer(pl) == 1)
SPArrRef = ScorePads2;
for (int i = 0; i < SPRef.ScoreRankCount.Length; i++)
SPRef.ScoreRankCount[i] = 0;
for (int s = 0; s <= (int)Difficulty.Edit + 1; s++)
{
CScorePad SPRef = SPArrRef[s];
for (int i = 0; i < ScorePads[s].CrownCount.Length; i++)
SPRef.CrownCount[i] = 0;
for (int i = 0; i < SPRef.ScoreRankCount.Length; i++)
SPRef.ScoreRankCount[i] = 0;
for (int i = 0; i < ScorePads[s].CrownCount.Length; i++)
SPRef.CrownCount[i] = 0;
}
}
#endregion
@ -561,13 +568,18 @@ namespace TJAPlayer3
#region [Load notes]
foreach (var song in TJAPlayer3.Songs管理.list曲ルート)
{
{
for (int pl = 0; pl < 2; pl++)
{
CScorePad[] SPArrRef = ScorePads;
if (TJAPlayer3.GetActualPlayer(pl) == 1)
SPArrRef = ScorePads2;
// All score pads except UraOmote
// this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)
for (int s = 0; s <= (int)Difficulty.Edit; s++)
{
CScorePad SPRef = ScorePads[s];
CScorePad SPRef = SPArrRef[s];
if (song.eード種別 == C曲リストード.Eード種別.BOX)
{
@ -577,7 +589,8 @@ namespace TJAPlayer3
a.eード種別 == C曲リストード.Eード種別.SCORE
&& a.strジャンル != "最近遊んだ曲"
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)] != null
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)]..nスコアランク[s] == (i + 1)).Count();
//&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)].譜面情報.nスコアランク[s] == (i + 1)).Count();
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)].GPInfo[pl].nScoreRank[s] == (i + 1)).Count();
}
for (int i = 0; i < SPRef.CrownCount.Length; i++)
{
@ -585,7 +598,7 @@ namespace TJAPlayer3
a.eード種別 == C曲リストード.Eード種別.SCORE
&& a.strジャンル != "最近遊んだ曲"
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)] != null
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)]..nクリア[s] == (i + 1)).Count();
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)].GPInfo[pl].nClear[s] == (i + 1)).Count();
}
}
else
@ -598,7 +611,7 @@ namespace TJAPlayer3
a.eード種別 == C曲リストード.Eード種別.SCORE
&& a.strジャンル != "最近遊んだ曲"
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)] != null
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)]..nスコアランク[s] == (i + 1)).Count();
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)].GPInfo[pl].nScoreRank[s] == (i + 1)).Count();
}
for (int i = 0; i < SPRef.CrownCount.Length; i++)
{
@ -606,13 +619,15 @@ namespace TJAPlayer3
a.eード種別 == C曲リストード.Eード種別.SCORE
&& a.strジャンル != "最近遊んだ曲"
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)] != null
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)]..nクリア[s] == (i + 1)).Count();
&& a.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(a)].GPInfo[pl].nClear[s] == (i + 1)).Count();
}
}
}
}
#endregion
}
#endregion
#region [UraOmote pad]
@ -620,10 +635,12 @@ namespace TJAPlayer3
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount[i] = ScorePads[(int)Difficulty.Edit].ScoreRankCount[i] + ScorePads[(int)Difficulty.Oni].ScoreRankCount[i];
ScorePads2[(int)Difficulty.Edit + 1].ScoreRankCount[i] = ScorePads2[(int)Difficulty.Edit].ScoreRankCount[i] + ScorePads2[(int)Difficulty.Oni].ScoreRankCount[i];
}
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].CrownCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].CrownCount[i] = ScorePads[(int)Difficulty.Edit].CrownCount[i] + ScorePads[(int)Difficulty.Oni].CrownCount[i];
ScorePads2[(int)Difficulty.Edit + 1].CrownCount[i] = ScorePads2[(int)Difficulty.Edit].CrownCount[i] + ScorePads2[(int)Difficulty.Oni].CrownCount[i];
}
#endregion
@ -1964,6 +1981,7 @@ namespace TJAPlayer3
// Edit + 1 => UraOmote ScorePad, add 2P later
public CScorePad[] ScorePads = new CScorePad[(int)Difficulty.Edit + 2] { new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad() };
public CScorePad[] ScorePads2 = new CScorePad[(int)Difficulty.Edit + 2] { new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad() };
public class CScorePad
{

View File

@ -240,10 +240,6 @@ namespace TJAPlayer3
this.act曲リスト.Refresh(cs, bRemakeSongTitleBar);
}
public override void On活性化()
{
Trace.TraceInformation("選曲ステージを活性化します。");
@ -328,28 +324,6 @@ namespace TJAPlayer3
{
if (!base.b活性化してない)
{
//this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background.jpg" ), false );
//this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_header_panel.png" ), false );
//this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_footer panel.png" ) );
//this.txFLIP = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_skill number on gauge etc.png" ), false );
//this.tx難易度名 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_difficulty name.png" ) );
//this.txジャンル別背景[0] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Anime.png" ) );
//this.txジャンル別背景[1] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_JPOP.png" ) );
//this.txジャンル別背景[2] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Game.png" ) );
//this.txジャンル別背景[3] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Namco.png" ) );
//this.txジャンル別背景[4] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Classic.png" ) );
//this.txジャンル別背景[5] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Child.png" ) );
//this.txジャンル別背景[6] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Variety.png" ) );
//this.txジャンル別背景[7] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_VOCALID.png" ) );
//this.txジャンル別背景[8] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Other.png" ) );
//this.tx難易度別背景[0] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Easy.png" ) );
//this.tx難易度別背景[1] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Normal.png" ) );
//this.tx難易度別背景[2] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Hard.png" ) );
//this.tx難易度別背景[3] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Master.png" ) );
//this.tx難易度別背景[4] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_background_Edit.png" ) );
//this.tx下部テキスト = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_footer text.png" ) );
this.ct背景スクロール用タイマー = new CCounter(0, TJAPlayer3.Tx.SongSelect_Background.szテクスチャサイズ.Width, 30, TJAPlayer3.Timer);
base.OnManagedリソースの作成();
}
@ -358,20 +332,6 @@ namespace TJAPlayer3
{
if (!base.b活性化してない)
{
//CDTXMania.tテクスチャの解放( ref this.tx背景 );
//CDTXMania.tテクスチャの解放( ref this.tx上部パネル );
//CDTXMania.tテクスチャの解放( ref this.tx下部パネル );
//CDTXMania.tテクスチャの解放( ref this.txFLIP );
//CDTXMania.tテクスチャの解放( ref this.tx難易度名 );
//CDTXMania.tテクスチャの解放( ref this.tx下部テキスト );
//for( int j = 0; j < 9; j++ )
//{
// CDTXMania.tテクスチャの解放( ref this.txジャンル別背景[ j ] );
//}
//for( int j = 0; j < 5; j++ )
//{
// CDTXMania.tテクスチャの解放( ref this.tx難易度別背景[ j ] );
//}
base.OnManagedリソースの解放();
}
}
@ -513,16 +473,6 @@ namespace TJAPlayer3
{
CSongSelectSongManager.playSongIfPossible();
}
/*
if (TJAPlayer3.ConfigIni.bBGM音を発声する && !this.bBGM再生済み && (base.eフェーズID == CStage.Eフェーズ._通常状態) && !TJAPlayer3.Skin.bgm選曲画面イン.b再生中 && !TJAPlayer3.Skin.bgm選曲画面.b再生中)
{
TJAPlayer3.Skin.bgm選曲画面イン.t停止する();
TJAPlayer3.Skin.bgm選曲画面.t再生する();
this.bBGM再生済み = true;
}
*/
if (this.ctDiffSelect移動待ち != null)
this.ctDiffSelect移動待ち.t進行();
@ -921,6 +871,8 @@ namespace TJAPlayer3
int[] currentPads = new int[2] { (int)Difficulty.Edit + 1, (int)Difficulty.Edit + 1 };
int tablesGap = 1034;
//int currentPad = (int)Difficulty.Edit + 1;
if (TJAPlayer3.stage選曲.act難易度選択画面.bIsDifficltSelect)
{
@ -932,22 +884,28 @@ namespace TJAPlayer3
TJAPlayer3.Tx.SongSelect_Table[currentPads[0]]?.t2D描画(TJAPlayer3.app.Device, 0, 0);
if (TJAPlayer3.ConfigIni.nPlayerCount > 1)
TJAPlayer3.Tx.SongSelect_Table[currentPads[1]]?.t2D描画(TJAPlayer3.app.Device, 1034, 0);
TJAPlayer3.Tx.SongSelect_Table[currentPads[1]]?.t2D描画(TJAPlayer3.app.Device, tablesGap, 0);
// Current board
for (int i = 0; i < 10; i++)
{
tBoardNumberDraw(this.ptBoardNumber[i].X - 10, this.ptBoardNumber[i].Y, i < 7 ?
this.act曲リスト.ScorePads[currentPads[0]].ScoreRankCount[i].ToString()
: this.act曲リスト.ScorePads[currentPads[0]].CrownCount[i - 7].ToString());
}
for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++)
{
int p = TJAPlayer3.GetActualPlayer(i);
CActSelect曲リスト.CScorePad[] SPArrRef = this.act曲リスト.ScorePads;
if (p == 1)
SPArrRef = this.act曲リスト.ScorePads2;
// Current board
for (int j = 0; j < 10; j++)
{
tBoardNumberDraw(this.ptBoardNumber[j].X - 10 + i * tablesGap, this.ptBoardNumber[j].Y, j < 7 ?
SPArrRef[currentPads[i]].ScoreRankCount[j].ToString()
: SPArrRef[currentPads[i]].CrownCount[j - 7].ToString());
}
if (TJAPlayer3.NamePlateConfig.data.Medals[p] >= 0)
tBoardNumberDraw(this.ptBoardNumber[10].X - 10 + i * 1140, this.ptBoardNumber[10].Y, TJAPlayer3.NamePlateConfig.data.Medals[p].ToString());
}

View File

@ -209,8 +209,8 @@ namespace TJAPlayer3
// MODIFY_BEGIN #25398 2011.06.07 FROM
if ( TJAPlayer3.bコンパクトモード )
{
var score = new Cスコア();
TJAPlayer3.Songs管理.tScoreIniを読み込んで譜面情報を設定する( TJAPlayer3.strコンパクトモードファイル + ".score.ini", score );
var score = new Cスコア();
TJAPlayer3.Songs管理.tScoreIniを読み込んで譜面情報を設定する(TJAPlayer3.strコンパクトモードファイル, score);// + ".score.ini", score );
}
else
{