色々改善10 (#483)
* TJAP3EXの機能に対応 * スキンの再読み込み機能を追加 * box.defを多言語対応 * 更にコマンドを追加 * Effects.jsonに対応 * レア度によってもらえるコインの数が変わるように * 譜面のエラーログを表示するように * BARLINEの修正
This commit is contained in:
parent
92b8a9c87c
commit
f4d001d843
@ -113,6 +113,27 @@ namespace FDK
|
||||
// this._txData = null;
|
||||
}
|
||||
|
||||
public CTexture(CTexture tx)
|
||||
{
|
||||
this.sz画像サイズ = tx.sz画像サイズ;
|
||||
this.szテクスチャサイズ = tx.szテクスチャサイズ;
|
||||
this._opacity = tx._opacity;
|
||||
this.texture = tx.texture;
|
||||
this.cvPositionColoredVertexies = tx.cvPositionColoredVertexies;
|
||||
this.b加算合成 = tx.b加算合成;
|
||||
this.fZ軸中心回転 = tx.fZ軸中心回転;
|
||||
this.vc拡大縮小倍率 = tx.vc拡大縮小倍率;
|
||||
// this._txData = null;
|
||||
}
|
||||
|
||||
public void UpdateTexture(Device device, Texture texture, int n幅, int n高さ)
|
||||
{
|
||||
this.texture = texture;
|
||||
this.sz画像サイズ = new Size(n幅, n高さ);
|
||||
this.szテクスチャサイズ = this.t指定されたサイズを超えない最適なテクスチャサイズを返す(device, this.sz画像サイズ);
|
||||
this.rc全画像 = new Rectangle(0, 0, this.sz画像サイズ.Width, this.sz画像サイズ.Height);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>指定されたビットマップオブジェクトから Managed テクスチャを作成する。</para>
|
||||
/// <para>テクスチャのサイズは、BITMAP画像のサイズ以上、かつ、D3D9デバイスで生成可能な最小のサイズに自動的に調節される。
|
||||
@ -1139,6 +1160,143 @@ namespace FDK
|
||||
device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, this.cvPositionColoredVertexies);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void t2D描画SongObj(Device device, float x, float y, float xScale, float yScale)
|
||||
{
|
||||
if (this.texture == null)
|
||||
return;
|
||||
|
||||
float depth = 1f;
|
||||
Rectangle rc画像内の描画領域 = this.rc全画像;
|
||||
|
||||
if (this.fZ軸中心回転 == 0f)
|
||||
{
|
||||
#region [ (A) 回転なし ]
|
||||
//-----------------
|
||||
float fx = ((float)rc画像内の描画領域.Width) / 2f;
|
||||
float fy = ((float)rc画像内の描画領域.Height) / 2f;
|
||||
float f左U値 = ((float)rc画像内の描画領域.Left) / ((float)this.szテクスチャサイズ.Width);
|
||||
float f右U値 = ((float)rc画像内の描画領域.Right) / ((float)this.szテクスチャサイズ.Width);
|
||||
float f上V値 = ((float)rc画像内の描画領域.Top) / ((float)this.szテクスチャサイズ.Height);
|
||||
float f下V値 = ((float)rc画像内の描画領域.Bottom) / ((float)this.szテクスチャサイズ.Height);
|
||||
this.color4.Alpha = ((float)this._opacity) / 255f;
|
||||
int color = ToArgb(this.color4);
|
||||
|
||||
if (this.cvPositionColoredVertexies == null)
|
||||
this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[4];
|
||||
|
||||
// #27122 2012.1.13 from: 以下、マネージドオブジェクト(=ガベージ)の量産を抑えるため、new は使わず、メンバに値を1つずつ直接上書きする。
|
||||
|
||||
this.cvPositionColoredVertexies[0].Position.X = -fx;
|
||||
this.cvPositionColoredVertexies[0].Position.Y = fy;
|
||||
this.cvPositionColoredVertexies[0].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[0].Color = color;
|
||||
this.cvPositionColoredVertexies[0].TextureCoordinates.X = f左U値;
|
||||
this.cvPositionColoredVertexies[0].TextureCoordinates.Y = f上V値;
|
||||
|
||||
this.cvPositionColoredVertexies[1].Position.X = fx;
|
||||
this.cvPositionColoredVertexies[1].Position.Y = fy;
|
||||
this.cvPositionColoredVertexies[1].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[1].Color = color;
|
||||
this.cvPositionColoredVertexies[1].TextureCoordinates.X = f右U値;
|
||||
this.cvPositionColoredVertexies[1].TextureCoordinates.Y = f上V値;
|
||||
|
||||
this.cvPositionColoredVertexies[2].Position.X = -fx;
|
||||
this.cvPositionColoredVertexies[2].Position.Y = -fy;
|
||||
this.cvPositionColoredVertexies[2].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[2].Color = color;
|
||||
this.cvPositionColoredVertexies[2].TextureCoordinates.X = f左U値;
|
||||
this.cvPositionColoredVertexies[2].TextureCoordinates.Y = f下V値;
|
||||
|
||||
this.cvPositionColoredVertexies[3].Position.X = fx;
|
||||
this.cvPositionColoredVertexies[3].Position.Y = -fy;
|
||||
this.cvPositionColoredVertexies[3].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[3].Color = color;
|
||||
this.cvPositionColoredVertexies[3].TextureCoordinates.X = f右U値;
|
||||
this.cvPositionColoredVertexies[3].TextureCoordinates.Y = f下V値;
|
||||
|
||||
this.tレンダリングステートの設定(device);
|
||||
|
||||
var matrix = Matrix.Identity * Matrix.Scaling(new Vector3(xScale, yScale, 1f));
|
||||
matrix *= Matrix.Translation(x - SampleFramework.GameWindowSize.Width / 2.0f + fx, -(y - SampleFramework.GameWindowSize.Height / 2.0f + fy), 0f);
|
||||
|
||||
device.SetTransform(TransformState.World, matrix);
|
||||
device.SetTexture(0, this.texture);
|
||||
device.VertexFormat = PositionColoredTexturedVertex.Format;
|
||||
device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, this.cvPositionColoredVertexies);
|
||||
|
||||
//-----------------
|
||||
#endregion
|
||||
}
|
||||
else
|
||||
{
|
||||
#region [ (B) 回転あり ]
|
||||
//-----------------
|
||||
float fx = ((float)rc画像内の描画領域.Width) / 2f;
|
||||
float fy = ((float)rc画像内の描画領域.Height) / 2f;
|
||||
float f左U値 = ((float)rc画像内の描画領域.Left) / ((float)this.szテクスチャサイズ.Width);
|
||||
float f右U値 = ((float)rc画像内の描画領域.Right) / ((float)this.szテクスチャサイズ.Width);
|
||||
float f上V値 = ((float)rc画像内の描画領域.Top) / ((float)this.szテクスチャサイズ.Height);
|
||||
float f下V値 = ((float)rc画像内の描画領域.Bottom) / ((float)this.szテクスチャサイズ.Height);
|
||||
this.color4.Alpha = ((float)this._opacity) / 255f;
|
||||
int color = ToArgb(this.color4);
|
||||
|
||||
if (this.cvPositionColoredVertexies == null)
|
||||
this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[4];
|
||||
|
||||
// #27122 2012.1.13 from: 以下、マネージドオブジェクト(=ガベージ)の量産を抑えるため、new は使わず、メンバに値を1つずつ直接上書きする。
|
||||
|
||||
this.cvPositionColoredVertexies[0].Position.X = -fx;
|
||||
this.cvPositionColoredVertexies[0].Position.Y = fy;
|
||||
this.cvPositionColoredVertexies[0].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[0].Color = color;
|
||||
this.cvPositionColoredVertexies[0].TextureCoordinates.X = f左U値;
|
||||
this.cvPositionColoredVertexies[0].TextureCoordinates.Y = f上V値;
|
||||
|
||||
this.cvPositionColoredVertexies[1].Position.X = fx;
|
||||
this.cvPositionColoredVertexies[1].Position.Y = fy;
|
||||
this.cvPositionColoredVertexies[1].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[1].Color = color;
|
||||
this.cvPositionColoredVertexies[1].TextureCoordinates.X = f右U値;
|
||||
this.cvPositionColoredVertexies[1].TextureCoordinates.Y = f上V値;
|
||||
|
||||
this.cvPositionColoredVertexies[2].Position.X = -fx;
|
||||
this.cvPositionColoredVertexies[2].Position.Y = -fy;
|
||||
this.cvPositionColoredVertexies[2].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[2].Color = color;
|
||||
this.cvPositionColoredVertexies[2].TextureCoordinates.X = f左U値;
|
||||
this.cvPositionColoredVertexies[2].TextureCoordinates.Y = f下V値;
|
||||
|
||||
this.cvPositionColoredVertexies[3].Position.X = fx;
|
||||
this.cvPositionColoredVertexies[3].Position.Y = -fy;
|
||||
this.cvPositionColoredVertexies[3].Position.Z = depth;
|
||||
this.cvPositionColoredVertexies[3].Color = color;
|
||||
this.cvPositionColoredVertexies[3].TextureCoordinates.X = f右U値;
|
||||
this.cvPositionColoredVertexies[3].TextureCoordinates.Y = f下V値;
|
||||
|
||||
this.tレンダリングステートの設定(device);
|
||||
|
||||
float n描画領域内X = x + (rc画像内の描画領域.Width / 2.0f);
|
||||
float n描画領域内Y = y + (rc画像内の描画領域.Height / 2.0f);
|
||||
var vc3移動量 = new Vector3(n描画領域内X - (((float)device.Viewport.Width) / 2f), -(n描画領域内Y - (((float)device.Viewport.Height) / 2f)), 0f);
|
||||
|
||||
var matrix = Matrix.Identity * Matrix.Scaling(new Vector3(xScale, yScale, 1f));
|
||||
matrix *= Matrix.Translation(x - SampleFramework.GameWindowSize.Width / 2.0f + fx, -(y - SampleFramework.GameWindowSize.Height / 2.0f + fy), 0f);
|
||||
matrix *= Matrix.RotationZ(this.fZ軸中心回転);
|
||||
matrix *= Matrix.Translation(vc3移動量);
|
||||
device.SetTransform(TransformState.World, matrix);
|
||||
|
||||
device.SetTexture(0, this.texture);
|
||||
device.VertexFormat = PositionColoredTexturedVertex.Format;
|
||||
device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, this.cvPositionColoredVertexies);
|
||||
//-----------------
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region [ IDisposable 実装 ]
|
||||
//-----------------
|
||||
public void Dispose()
|
||||
|
@ -9,7 +9,7 @@ namespace TJAPlayer3
|
||||
{
|
||||
class Easing
|
||||
{
|
||||
public int EaseIn(CCounter counter, int startPoint, int endPoint, CalcType type)
|
||||
public int EaseIn(CCounter counter, float startPoint, float endPoint, CalcType type)
|
||||
{
|
||||
StartPoint = startPoint;
|
||||
EndPoint = endPoint;
|
||||
@ -46,11 +46,14 @@ namespace TJAPlayer3
|
||||
CounterValue /= TimeMs;
|
||||
Value = -Sa * (Math.Sqrt(1 - CounterValue * CounterValue) - 1) + StartPoint;
|
||||
break;
|
||||
case CalcType.Linear: //Linear
|
||||
Value = Sa * (CounterValue / TimeMs) + StartPoint;
|
||||
break;
|
||||
}
|
||||
|
||||
return (int)Value;
|
||||
}
|
||||
public int EaseOut(CCounter counter, int startPoint, int endPoint, CalcType type)
|
||||
public int EaseOut(CCounter counter, float startPoint, float endPoint, CalcType type)
|
||||
{
|
||||
StartPoint = startPoint;
|
||||
EndPoint = endPoint;
|
||||
@ -91,15 +94,102 @@ namespace TJAPlayer3
|
||||
CounterValue--;
|
||||
Value = Sa * Math.Sqrt(1 - CounterValue * CounterValue) + StartPoint;
|
||||
break;
|
||||
case CalcType.Linear: //Linear
|
||||
CounterValue /= TimeMs;
|
||||
Value = Sa * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
|
||||
return (int)Value;
|
||||
}
|
||||
public float EaseInOut(CCounter counter, float startPoint, float endPoint, CalcType type)
|
||||
{
|
||||
StartPoint = startPoint;
|
||||
EndPoint = endPoint;
|
||||
Sa = EndPoint - StartPoint;
|
||||
TimeMs = counter.n終了値;
|
||||
Type = type;
|
||||
CounterValue = counter.n現在の値;
|
||||
|
||||
private int StartPoint;
|
||||
private int EndPoint;
|
||||
private int Sa;
|
||||
private int TimeMs;
|
||||
switch (Type)
|
||||
{
|
||||
case CalcType.Quadratic: //Quadratic
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = Sa / 2 * CounterValue * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue--;
|
||||
Value = -Sa / 2 * (CounterValue * (CounterValue - 2) - 1) + StartPoint;
|
||||
break;
|
||||
case CalcType.Cubic: //Cubic
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = Sa / 2 * CounterValue * CounterValue * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue -= 2;
|
||||
Value = Sa / 2 * (CounterValue * CounterValue * CounterValue + 2) + StartPoint;
|
||||
break;
|
||||
case CalcType.Quartic: //Quartic
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = Sa / 2 * CounterValue * CounterValue * CounterValue * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue -= 2;
|
||||
Value = -Sa / 2 * (CounterValue * CounterValue * CounterValue * CounterValue - 2) + StartPoint;
|
||||
break;
|
||||
case CalcType.Quintic: //Quintic
|
||||
CounterValue /= TimeMs;
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = Sa / 2 * CounterValue * CounterValue * CounterValue * CounterValue * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue -= 2;
|
||||
Value = Sa / 2 * (CounterValue * CounterValue * CounterValue * CounterValue * CounterValue + 2) + StartPoint;
|
||||
break;
|
||||
case CalcType.Sinusoidal: //Sinusoidal
|
||||
Value = -Sa / 2 * (Math.Cos(Math.PI * CounterValue / TimeMs) - 1) + StartPoint;
|
||||
break;
|
||||
case CalcType.Exponential: //Exponential
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = Sa / 2 * Math.Pow(2, 10 * (CounterValue - 1)) + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue--;
|
||||
Value = Sa / 2 * (-Math.Pow(2, -10 * CounterValue) + 2) + StartPoint;
|
||||
break;
|
||||
case CalcType.Circular: //Circular
|
||||
CounterValue /= TimeMs / 2;
|
||||
if (CounterValue < 1)
|
||||
{
|
||||
Value = -Sa / 2 * (Math.Sqrt(1 - CounterValue * CounterValue) - 1) + StartPoint;
|
||||
break;
|
||||
}
|
||||
CounterValue -= 2;
|
||||
Value = Sa / 2 * (Math.Sqrt(1 - CounterValue * CounterValue) + 1) + StartPoint;
|
||||
break;
|
||||
case CalcType.Linear: //Linear
|
||||
CounterValue /= TimeMs;
|
||||
Value = Sa * CounterValue + StartPoint;
|
||||
break;
|
||||
}
|
||||
|
||||
return (float)Value;
|
||||
}
|
||||
|
||||
private float StartPoint;
|
||||
private float EndPoint;
|
||||
private float Sa;
|
||||
private double TimeMs;
|
||||
private CalcType Type;
|
||||
private double CounterValue;
|
||||
private double Value;
|
||||
@ -111,7 +201,8 @@ namespace TJAPlayer3
|
||||
Quintic,
|
||||
Sinusoidal,
|
||||
Exponential,
|
||||
Circular
|
||||
Circular,
|
||||
Linear
|
||||
}
|
||||
}
|
||||
}
|
@ -1946,6 +1946,25 @@ for (int i = 0; i < 3; i++) {
|
||||
|
||||
actScanningLoudness.On進行描画();
|
||||
|
||||
if (!ConfigIni.bTokkunMode)
|
||||
{
|
||||
float screen_ratiox = TJAPlayer3.Skin.Resolution[0] / 1280.0f;
|
||||
float screen_ratioy = TJAPlayer3.Skin.Resolution[1] / 720.0f;
|
||||
var mat = Matrix.LookAtLH(new Vector3(-fCamXOffset * screen_ratiox, fCamYOffset * screen_ratioy, (float)(-SampleFramework.GameWindowSize.Height / (fCamZoomFactor * 2) * Math.Sqrt(3.0))), new Vector3(-fCamXOffset * screen_ratiox, fCamYOffset * screen_ratioy, 0f), new Vector3(0f, 1f, 0f));
|
||||
mat *= Matrix.RotationYawPitchRoll(0, 0, C変換.DegreeToRadian(fCamRotation));
|
||||
mat *= Matrix.Scaling(fCamXScale, fCamYScale, 1f);
|
||||
this.Device.SetTransform(TransformState.View, mat);
|
||||
|
||||
if (TJAPlayer3.DTX != null)
|
||||
{
|
||||
//object rendering
|
||||
foreach (KeyValuePair<string, CSongObject> pair in TJAPlayer3.DTX.listObj)
|
||||
{
|
||||
pair.Value.tDraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (r現在のステージ != null && r現在のステージ.eステージID != CStage.Eステージ.起動 && TJAPlayer3.Tx.Network_Connection != null)
|
||||
{
|
||||
if (Math.Abs(CSound管理.rc演奏用タイマ.nシステム時刻ms - this.前回のシステム時刻ms) > 10000)
|
||||
@ -1972,6 +1991,30 @@ for (int i = 0; i < 3; i++) {
|
||||
actFlushGPU?.On進行描画(); // Flush GPU // EndScene()~Present()間 (つまりVSync前) でFlush実行
|
||||
#endif
|
||||
|
||||
foreach(var capture in ConfigIni.KeyAssign.System.Capture)
|
||||
{
|
||||
if (TJAPlayer3.Input管理.Keyboard.bキーが押された(capture.コード))
|
||||
{
|
||||
if (TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.LeftControl))
|
||||
{
|
||||
if (r現在のステージ.eステージID != CStage.Eステージ.演奏)
|
||||
{
|
||||
RefleshSkin();
|
||||
r現在のステージ.On非活性化();
|
||||
r現在のステージ.On活性化();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );
|
||||
string strFullPath =
|
||||
Path.Combine(TJAPlayer3.strEXEのあるフォルダ, "Capture_img");
|
||||
strFullPath = Path.Combine(strFullPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");
|
||||
SaveResultScreen(strFullPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if ( Sound管理?.GetCurrentSoundDeviceType() != "DirectSound" )
|
||||
{
|
||||
@ -3389,18 +3432,6 @@ for (int i = 0; i < 3; i++) {
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( int i = 0; i < 0x10; i++ )
|
||||
{
|
||||
if ( ConfigIni.KeyAssign.System.Capture[ i ].コード > 0 &&
|
||||
e.KeyCode == DeviceConstantConverter.KeyToKeyCode( (SlimDXKeys.Key) ConfigIni.KeyAssign.System.Capture[ i ].コード ) )
|
||||
{
|
||||
// Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );
|
||||
string strFullPath =
|
||||
Path.Combine( TJAPlayer3.strEXEのあるフォルダ, "Capture_img" );
|
||||
strFullPath = Path.Combine( strFullPath, DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".png" );
|
||||
SaveResultScreen( strFullPath );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void Window_MouseUp( object sender, MouseEventArgs e )
|
||||
@ -3429,5 +3460,18 @@ for (int i = 0; i < 3; i++) {
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region [ EXTENDED VARIABLES ]
|
||||
public static float fCamXOffset;
|
||||
public static float fCamYOffset;
|
||||
|
||||
public static float fCamZoomFactor = 1.0f;
|
||||
public static float fCamRotation;
|
||||
|
||||
public static float fCamXScale = 1.0f;
|
||||
public static float fCamYScale = 1.0f;
|
||||
|
||||
public static Color4 borderColor = new Color4(1f, 0f, 0f, 0f);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,18 @@ namespace TJAPlayer3
|
||||
{
|
||||
class DBCharacter
|
||||
{
|
||||
public class CharacterEffect
|
||||
{
|
||||
public CharacterEffect()
|
||||
{
|
||||
Gauge = "Normal";
|
||||
}
|
||||
|
||||
|
||||
[JsonProperty("gauge")]
|
||||
public string Gauge;
|
||||
}
|
||||
|
||||
public class CharacterData
|
||||
{
|
||||
public CharacterData()
|
||||
|
@ -6,6 +6,30 @@ namespace TJAPlayer3
|
||||
{
|
||||
class DBPuchichara
|
||||
{
|
||||
public class PuchicharaEffect
|
||||
{
|
||||
public PuchicharaEffect()
|
||||
{
|
||||
AllPurple = false;
|
||||
Autoroll = 0;
|
||||
ShowAdlib = false;
|
||||
SplitLane = false;
|
||||
}
|
||||
|
||||
|
||||
[JsonProperty("allpurple")]
|
||||
public bool AllPurple;
|
||||
|
||||
[JsonProperty("AutoRoll")]
|
||||
public int Autoroll;
|
||||
|
||||
[JsonProperty("showadlib")]
|
||||
public bool ShowAdlib;
|
||||
|
||||
[JsonProperty("splitlane")]
|
||||
public bool SplitLane;
|
||||
}
|
||||
|
||||
public class PuchicharaData
|
||||
{
|
||||
public PuchicharaData()
|
||||
|
@ -33,6 +33,9 @@ namespace TJAPlayer3
|
||||
public string DefaultPreimage;
|
||||
public string ScenePreset;
|
||||
|
||||
private readonly string langTITLE = "#TITLE" + CLangManager.fetchLang().ToUpper();
|
||||
private readonly string langBOXEXPLANATION = "#BOXEXPLANATION" + CLangManager.fetchLang().ToUpper();
|
||||
|
||||
// コンストラクタ
|
||||
|
||||
public CBoxDef()
|
||||
@ -80,10 +83,13 @@ namespace TJAPlayer3
|
||||
}
|
||||
|
||||
char[] ignoreChars = new char[] { ':', ' ', '\t' };
|
||||
|
||||
if ( str.StartsWith( "#TITLE", StringComparison.OrdinalIgnoreCase ) )
|
||||
if (str.StartsWith(langTITLE, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
this.Title = str.Substring( 6 ).Trim( ignoreChars );
|
||||
this.Title = str.Substring(8).Trim(ignoreChars);
|
||||
}
|
||||
else if(str.StartsWith("#TITLE", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (this.Title == "") this.Title = str.Substring(6).Trim(ignoreChars);
|
||||
}
|
||||
else if( str.StartsWith( "#GENRE", StringComparison.OrdinalIgnoreCase ) )
|
||||
{
|
||||
@ -144,9 +150,13 @@ namespace TJAPlayer3
|
||||
{
|
||||
for(int i = 0; i < 3; i++)
|
||||
{
|
||||
if (str.StartsWith("#BOXEXPLANATION" + (i + 1).ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
if (str.StartsWith(langBOXEXPLANATION + (i + 1).ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
this.strBoxText[i] = str.Substring(16).Trim(ignoreChars);
|
||||
this.strBoxText[i] = str.Substring(18).Trim(ignoreChars);
|
||||
}
|
||||
else if (str.StartsWith("#BOXEXPLANATION" + (i + 1).ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (this.strBoxText[i] == "") this.strBoxText[i] = str.Substring(16).Trim(ignoreChars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
112
TJAPlayer3/Songs/Extended/CSongObject.cs
Normal file
112
TJAPlayer3/Songs/Extended/CSongObject.cs
Normal file
@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using SharpDX;
|
||||
using FDK;
|
||||
|
||||
namespace TJAPlayer3
|
||||
{
|
||||
class CSongObject
|
||||
{
|
||||
public CSongObject(string name, float x, float y, string path)
|
||||
{
|
||||
this.name = path;
|
||||
this.isVisible = false;
|
||||
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.rotation = 0f;
|
||||
this.opacity = 255;
|
||||
this.xScale = 1.0f;
|
||||
this.yScale = 1.0f;
|
||||
this.color = new Color4(1f, 1f, 1f, 1f);
|
||||
this.frame = 0;
|
||||
|
||||
FileAttributes attr = File.GetAttributes(path);
|
||||
|
||||
if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
|
||||
{
|
||||
textures = TJAPlayer3.Tx.TxCSongFolder(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
textures = new CTexture[1];
|
||||
textures[0] = TJAPlayer3.Tx.TxCSong(path);
|
||||
}
|
||||
}
|
||||
|
||||
public void tStartAnimation(double animInterval, bool loop)
|
||||
{
|
||||
counter.t開始(0, textures.Length - 1, animInterval, TJAPlayer3.Timer);
|
||||
counter.n現在の値 = this.frame;
|
||||
|
||||
this.isLooping = loop;
|
||||
this.isAnimating = true;
|
||||
}
|
||||
|
||||
public void tStopAnimation()
|
||||
{
|
||||
counter.t停止();
|
||||
this.isAnimating = false;
|
||||
}
|
||||
|
||||
public void tDraw()
|
||||
{
|
||||
if (isAnimating)
|
||||
{
|
||||
if (isLooping) counter.t進行Loop();
|
||||
else
|
||||
{
|
||||
counter.t進行();
|
||||
if (counter.b終了値に達した) this.tStopAnimation();
|
||||
}
|
||||
|
||||
frame = counter.n現在の値;
|
||||
}
|
||||
|
||||
CTexture tx = this.textures[frame];
|
||||
if (frame + 1 > textures.Length) return;
|
||||
if (tx == null) return;
|
||||
|
||||
tx.fZ軸中心回転 = C変換.DegreeToRadian(this.rotation);
|
||||
tx.color4 = this.color;
|
||||
tx.Opacity = this.opacity;
|
||||
|
||||
float screen_ratiox = TJAPlayer3.Skin.Resolution[0] / 1280.0f;
|
||||
float screen_ratioy = TJAPlayer3.Skin.Resolution[1] / 720.0f;
|
||||
if (isVisible) tx.t2D描画SongObj(TJAPlayer3.app.Device, (int)(this.x * screen_ratiox), (int)(this.y * screen_ratioy), this.xScale * screen_ratiox, this.yScale * screen_ratioy);
|
||||
}
|
||||
|
||||
public void tDispose()
|
||||
{
|
||||
this.isVisible = false;
|
||||
foreach (CTexture tx in textures)
|
||||
{
|
||||
if (tx != null) tx.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private CCounter counter = new CCounter();
|
||||
private bool isAnimating;
|
||||
private bool isLooping;
|
||||
|
||||
public CTexture[] textures;
|
||||
|
||||
public string name;
|
||||
public bool isVisible;
|
||||
|
||||
public float x;
|
||||
public float y;
|
||||
public float rotation;
|
||||
public int opacity;
|
||||
public float xScale;
|
||||
public float yScale;
|
||||
public Color4 color;
|
||||
|
||||
public int frame;
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@ namespace TJAPlayer3
|
||||
class CCharacter
|
||||
{
|
||||
public DBCharacter.CharacterData metadata;
|
||||
public DBCharacter.CharacterEffect effect;
|
||||
public DBUnlockables.CUnlockConditions unlock;
|
||||
public string _path;
|
||||
|
||||
@ -24,6 +25,12 @@ namespace TJAPlayer3
|
||||
else
|
||||
metadata = new DBCharacter.CharacterData();
|
||||
|
||||
// Character metadata
|
||||
if (File.Exists($@"{path}\Effects.json"))
|
||||
effect = ConfigManager.GetConfig<DBCharacter.CharacterEffect>($@"{path}\Effects.json");
|
||||
else
|
||||
effect = new DBCharacter.CharacterEffect();
|
||||
|
||||
// Character unlockables
|
||||
if (File.Exists($@"{path}\Unlock.json"))
|
||||
unlock = ConfigManager.GetConfig<DBUnlockables.CUnlockConditions>($@"{path}\Unlock.json");
|
||||
|
@ -15,6 +15,7 @@ namespace TJAPlayer3
|
||||
public CTexture render;
|
||||
public CSkin.Cシステムサウンド welcome;
|
||||
public DBPuchichara.PuchicharaData metadata;
|
||||
public DBPuchichara.PuchicharaEffect effect;
|
||||
public DBUnlockables.CUnlockConditions unlock;
|
||||
public string _path;
|
||||
|
||||
@ -41,6 +42,12 @@ namespace TJAPlayer3
|
||||
else
|
||||
metadata = new DBPuchichara.PuchicharaData();
|
||||
|
||||
// Puchichara metadata
|
||||
if (File.Exists($@"{path}\Effects.json"))
|
||||
effect = ConfigManager.GetConfig<DBPuchichara.PuchicharaEffect>($@"{path}\Effects.json");
|
||||
else
|
||||
effect = new DBPuchichara.PuchicharaEffect();
|
||||
|
||||
// Puchichara unlockables
|
||||
if (File.Exists($@"{path}\Unlock.json"))
|
||||
unlock = ConfigManager.GetConfig<DBUnlockables.CUnlockConditions>($@"{path}\Unlock.json");
|
||||
|
@ -71,6 +71,8 @@ namespace TJAPlayer3
|
||||
const string ROLL = @"Roll\";
|
||||
const string SPLASH = @"Splash\";
|
||||
|
||||
public Dictionary<string, CTexture> trackedTextures = new Dictionary<string, CTexture>();
|
||||
|
||||
|
||||
public TextureLoader()
|
||||
{
|
||||
@ -109,6 +111,33 @@ namespace TJAPlayer3
|
||||
return TJAPlayer3.tテクスチャの生成(CSkin.Path(BASE + GAME + GENRE + FileName + ".png"));
|
||||
}
|
||||
|
||||
internal CTexture TxCSong(string path)
|
||||
{
|
||||
return TxCUntrackedSong(path);
|
||||
}
|
||||
|
||||
private CTexture[] TxCSong(int count, string format, int start = 0)
|
||||
{
|
||||
return TxCSong(format, Enumerable.Range(start, count).Select(o => o.ToString()).ToArray());
|
||||
}
|
||||
|
||||
private CTexture[] TxCSong(string format, params string[] parts)
|
||||
{
|
||||
return parts.Select(o => TxCSong(string.Format(format, o))).ToArray();
|
||||
}
|
||||
|
||||
public CTexture[] TxCSongFolder(string folder)
|
||||
{
|
||||
var count = TJAPlayer3.t連番画像の枚数を数える(folder);
|
||||
var texture = count == 0 ? null : TxCSong(count, folder + "{0}.png");
|
||||
return texture;
|
||||
}
|
||||
|
||||
internal CTexture TxCUntrackedSong(string path)
|
||||
{
|
||||
return TJAPlayer3.tテクスチャの生成(path);
|
||||
}
|
||||
|
||||
public void LoadTexture()
|
||||
{
|
||||
#region 共通
|
||||
@ -400,6 +429,7 @@ namespace TJAPlayer3
|
||||
Note_Swap = TxC(GAME + @"Swap.png");
|
||||
Note_Kusu = TxC(GAME + @"Kusu.png");
|
||||
Note_FuseRoll = TxC(GAME + @"FuseRoll.png");
|
||||
Note_Adlib = TxC(GAME + @"Adlib.png");
|
||||
|
||||
Judge_Frame = TxC(GAME + @"Notes.png");
|
||||
|
||||
@ -2204,6 +2234,7 @@ namespace TJAPlayer3
|
||||
Note_Swap,
|
||||
Note_Kusu,
|
||||
Note_FuseRoll,
|
||||
Note_Adlib,
|
||||
SENotesExtension,
|
||||
Notes_Arm,
|
||||
ChipEffect,
|
||||
|
@ -503,6 +503,15 @@ namespace TJAPlayer3
|
||||
if (TJAPlayer3.ConfigIni.nPlayerCount >= 5)
|
||||
TJAPlayer3.DTX_5P = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 4, true, TJAPlayer3.stage選曲.n確定された曲の難易度[4]);
|
||||
|
||||
if (TJAPlayer3.DTX.listErrors.Count != 0)
|
||||
{
|
||||
string message = "";
|
||||
foreach (var text in TJAPlayer3.DTX.listErrors)
|
||||
{
|
||||
System.Windows.Forms.MessageBox.Show(text, "譜面にエラーが見つかりました");
|
||||
}
|
||||
}
|
||||
|
||||
Trace.TraceInformation( "---- Song information -----------------" );
|
||||
Trace.TraceInformation( "TITLE: {0}", TJAPlayer3.DTX.TITLE );
|
||||
Trace.TraceInformation( "FILE: {0}", TJAPlayer3.DTX.strファイル名の絶対パス );
|
||||
|
@ -112,7 +112,19 @@ namespace TJAPlayer3
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(nPlayer)].data.Character];
|
||||
switch(chara.effect.Gauge)
|
||||
{
|
||||
case "Normal":
|
||||
this.db現在のゲージ値[i] = 0;
|
||||
break;
|
||||
case "Hard":
|
||||
this.db現在のゲージ値[i] = 100;
|
||||
break;
|
||||
case "Extreme":
|
||||
this.db現在のゲージ値[i] = 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//ゲージのMAXまでの最低コンボ数を計算
|
||||
@ -331,13 +343,41 @@ namespace TJAPlayer3
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(nPlayer)].data.Character];
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Normal":
|
||||
dbゲージ増加量[i][nPlayer] = increase[i];
|
||||
break;
|
||||
case "Hard":
|
||||
dbゲージ増加量[i][nPlayer] = increase[i] / 2.0f;
|
||||
break;
|
||||
case "Extreme":
|
||||
dbゲージ増加量[i][nPlayer] = increase[i] / 4.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(nPlayer)].data.Character];
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Normal":
|
||||
dbゲージ増加量_Branch[i, 0][nPlayer] = increaseBranch[i, 0];
|
||||
dbゲージ増加量_Branch[i, 1][nPlayer] = increaseBranch[i, 1];
|
||||
dbゲージ増加量_Branch[i, 2][nPlayer] = increaseBranch[i, 2];
|
||||
break;
|
||||
case "Hard":
|
||||
dbゲージ増加量_Branch[i, 0][nPlayer] = increaseBranch[i, 0] / 2.0f;
|
||||
dbゲージ増加量_Branch[i, 1][nPlayer] = increaseBranch[i, 1] / 2.0f;
|
||||
dbゲージ増加量_Branch[i, 2][nPlayer] = increaseBranch[i, 2] / 2.0f;
|
||||
break;
|
||||
case "Extreme":
|
||||
dbゲージ増加量_Branch[i, 0][nPlayer] = increaseBranch[i, 0] / 4.0f;
|
||||
dbゲージ増加量_Branch[i, 1][nPlayer] = increaseBranch[i, 1] / 4.0f;
|
||||
dbゲージ増加量_Branch[i, 2][nPlayer] = increaseBranch[i, 2] / 4.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@ -425,12 +465,22 @@ namespace TJAPlayer3
|
||||
else
|
||||
fDamage = this.dbゲージ増加量[2][nPlayer];
|
||||
|
||||
|
||||
if (fDamage >= 0)
|
||||
{
|
||||
fDamage = -fDamage;
|
||||
}
|
||||
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(nPlayer)].data.Character];
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Hard":
|
||||
fDamage = -25;
|
||||
break;
|
||||
case "Extreme":
|
||||
fDamage = -50;
|
||||
break;
|
||||
}
|
||||
|
||||
if (this.bRisky)
|
||||
{
|
||||
this.nRiskyTimes--;
|
||||
|
@ -400,6 +400,8 @@ namespace TJAPlayer3
|
||||
this.bLEVELHOLD = new bool[]{ false, false, false, false, false };
|
||||
this.JPOSCROLLX = new int[5];
|
||||
this.JPOSCROLLY = new int[5];
|
||||
eFirstGameType = new EGameType[5];
|
||||
bSplitLane = new bool[5];
|
||||
|
||||
|
||||
// Double play set here
|
||||
@ -418,6 +420,7 @@ namespace TJAPlayer3
|
||||
for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++)
|
||||
{
|
||||
actGauge.Init(TJAPlayer3.ConfigIni.nRisky, i); // #23559 2011.7.28 yyagi
|
||||
eFirstGameType[i] = TJAPlayer3.ConfigIni.nGameType[i];
|
||||
}
|
||||
this.nPolyphonicSounds = TJAPlayer3.ConfigIni.nPoliphonicSounds;
|
||||
e判定表示優先度 = TJAPlayer3.ConfigIni.e判定表示優先度;
|
||||
@ -488,10 +491,26 @@ namespace TJAPlayer3
|
||||
// this.gclatencymode = GCSettings.LatencyMode;
|
||||
// GCSettings.LatencyMode = GCLatencyMode.Batch; // 演奏画面中はGCを抑止する
|
||||
this.bIsAlreadyCleared = new bool[5];
|
||||
for (int player = 0; player < TJAPlayer3.ConfigIni.nPlayerCount; player++)
|
||||
{
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(player)].data.Character];
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Normal":
|
||||
bIsAlreadyCleared[player] = false;
|
||||
break;
|
||||
case "Hard":
|
||||
case "Extreme":
|
||||
bIsAlreadyCleared[player] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.bIsAlreadyMaxed = new bool[5];
|
||||
|
||||
this.ListDan_Number = 0;
|
||||
this.IsDanFailed = false;
|
||||
|
||||
this.objHandlers = new Dictionary<CDTX.CChip, CCounter>();
|
||||
}
|
||||
|
||||
|
||||
@ -528,10 +547,27 @@ namespace TJAPlayer3
|
||||
this.ctチップ模様アニメ.Bass = null;
|
||||
this.ctチップ模様アニメ.Taiko = null;
|
||||
|
||||
this.ctCamHMove = null;
|
||||
this.ctCamVMove = null;
|
||||
this.ctCamHScale = null;
|
||||
this.ctCamVScale = null;
|
||||
this.ctCamRotation = null;
|
||||
this.ctCamZoom = null;
|
||||
|
||||
TJAPlayer3.borderColor = new SharpDX.Color4(0f, 0f, 0f, 0f);
|
||||
TJAPlayer3.fCamXOffset = 0.0f;
|
||||
TJAPlayer3.fCamYOffset = 0.0f;
|
||||
TJAPlayer3.fCamXScale = 1.0f;
|
||||
TJAPlayer3.fCamYScale = 1.0f;
|
||||
TJAPlayer3.fCamRotation = 0.0f;
|
||||
TJAPlayer3.fCamZoomFactor = 1.0f;
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
ctChipAnime[i] = null;
|
||||
ctChipAnimeLag[i] = null;
|
||||
TJAPlayer3.ConfigIni.nGameType[i] = eFirstGameType[i];
|
||||
bSplitLane[i] = false;
|
||||
}
|
||||
|
||||
listWAV.Clear();
|
||||
@ -876,6 +912,8 @@ namespace TJAPlayer3
|
||||
protected int nWaitButton;
|
||||
|
||||
protected int[] nStoredHit;
|
||||
private EGameType[] eFirstGameType;
|
||||
protected bool[] bSplitLane;
|
||||
|
||||
|
||||
public CDTX.CChip[] chip現在処理中の連打チップ = new CDTX.CChip[ 5 ];
|
||||
@ -1653,7 +1691,7 @@ namespace TJAPlayer3
|
||||
{
|
||||
return tチップのヒット処理( nHitTime, pChip, screenmode, bCorrectLane, nNowInput, 0 );
|
||||
}
|
||||
protected unsafe E判定 tチップのヒット処理(long nHitTime, CDTX.CChip pChip, E楽器パート screenmode, bool bCorrectLane, int nNowInput, int nPlayer)
|
||||
protected unsafe E判定 tチップのヒット処理(long nHitTime, CDTX.CChip pChip, E楽器パート screenmode, bool bCorrectLane, int nNowInput, int nPlayer, bool rollEffectHit = false)
|
||||
{
|
||||
//unsafeコードにつき、デバッグ中の変更厳禁!
|
||||
|
||||
@ -1699,14 +1737,16 @@ namespace TJAPlayer3
|
||||
CLagLogger.Add(nPlayer, pChip);
|
||||
}
|
||||
|
||||
var puchichara = TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(nPlayer))];
|
||||
|
||||
if (NotesManager.IsRoll(pChip))
|
||||
{
|
||||
#region[ Drumroll ]
|
||||
//---------------------------
|
||||
this.b連打中[nPlayer] = true;
|
||||
if (bAutoPlay)
|
||||
if (bAutoPlay || rollEffectHit)
|
||||
{
|
||||
int rollSpeed = TJAPlayer3.ConfigIni.nRollsPerSec;
|
||||
int rollSpeed = bAutoPlay ? TJAPlayer3.ConfigIni.nRollsPerSec : puchichara.effect.Autoroll;
|
||||
if (TJAPlayer3.ConfigIni.bAIBattleMode && nPlayer == 1)
|
||||
rollSpeed = TJAPlayer3.ConfigIni.apAIPerformances[TJAPlayer3.ConfigIni.nAILevel - 1].nRollSpeed;
|
||||
|
||||
@ -1740,7 +1780,7 @@ namespace TJAPlayer3
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!bAutoPlay && !rollEffectHit)
|
||||
{
|
||||
this.eRollState = E連打State.roll;
|
||||
this.tRollProcess(pChip, (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)), 1, nNowInput, 0, nPlayer);
|
||||
@ -1757,7 +1797,7 @@ namespace TJAPlayer3
|
||||
this.b連打中[nPlayer] = true;
|
||||
this.actChara.b風船連打中[nPlayer] = true;
|
||||
|
||||
if (bAutoPlay)
|
||||
if (bAutoPlay || rollEffectHit)
|
||||
{
|
||||
bool IsKusudama = NotesManager.IsKusudama(pChip);
|
||||
|
||||
@ -1777,14 +1817,12 @@ namespace TJAPlayer3
|
||||
|
||||
if (balloon != 0 && this.bPAUSE == false)
|
||||
{
|
||||
int rollSpeed = TJAPlayer3.ConfigIni.nRollsPerSec;
|
||||
if (TJAPlayer3.ConfigIni.bAIBattleMode && nPlayer == 1)
|
||||
rollSpeed = TJAPlayer3.ConfigIni.apAIPerformances[TJAPlayer3.ConfigIni.nAILevel - 1].nRollSpeed;
|
||||
int rollSpeed = bAutoPlay ? balloon : puchichara.effect.Autoroll;
|
||||
|
||||
int balloonDuration = (pChip.nノーツ終了時刻ms - pChip.n発声時刻ms);
|
||||
int balloonDuration = bAutoPlay ? (pChip.nノーツ終了時刻ms - pChip.n発声時刻ms) : 1000;
|
||||
|
||||
if ((CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)) >
|
||||
(pChip.n発声時刻ms + (balloonDuration / balloon) * rollCount))
|
||||
(pChip.n発声時刻ms + (balloonDuration / (double)rollSpeed) * rollCount))
|
||||
{
|
||||
if (this.nHand[nPlayer] == 0)
|
||||
this.nHand[nPlayer]++;
|
||||
@ -1798,7 +1836,7 @@ namespace TJAPlayer3
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!bAutoPlay && !rollEffectHit)
|
||||
{
|
||||
this.tBalloonProcess(pChip, (CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)), nPlayer);
|
||||
}
|
||||
@ -1881,6 +1919,19 @@ namespace TJAPlayer3
|
||||
}
|
||||
}
|
||||
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(nPlayer)].data.Character];
|
||||
bool cleared = false;
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Normal":
|
||||
cleared = (int)actGauge.db現在のゲージ値[nPlayer] >= 80;
|
||||
break;
|
||||
case "Hard":
|
||||
case "Extreme":
|
||||
cleared = (int)actGauge.db現在のゲージ値[nPlayer] > 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (eJudgeResult != E判定.Poor && eJudgeResult != E判定.Miss)
|
||||
{
|
||||
double dbUnit = (((60.0 / (TJAPlayer3.stage演奏ドラム画面.actPlayInfo.dbBPM[nPlayer]))));
|
||||
@ -1898,7 +1949,7 @@ namespace TJAPlayer3
|
||||
}
|
||||
this.bIsAlreadyMaxed[nPlayer] = true;
|
||||
}
|
||||
if ((int)actGauge.db現在のゲージ値[nPlayer] >= 80 && this.bIsAlreadyCleared[nPlayer] == false)
|
||||
if (cleared && this.bIsAlreadyCleared[nPlayer] == false)
|
||||
{
|
||||
if(TJAPlayer3.Skin.Characters_Become_Cleared_Ptn[Character] != 0 && actChara.CharaAction_Balloon_Delay[nPlayer].b終了値に達した)
|
||||
{
|
||||
@ -1917,11 +1968,22 @@ namespace TJAPlayer3
|
||||
{
|
||||
this.bIsAlreadyMaxed[nPlayer] = false;
|
||||
}
|
||||
if ((int)actGauge.db現在のゲージ値[nPlayer] < 80 && this.bIsAlreadyCleared[nPlayer] == true)
|
||||
if (!cleared && this.bIsAlreadyCleared[nPlayer] == true)
|
||||
{
|
||||
this.bIsAlreadyCleared[nPlayer] = false;
|
||||
TJAPlayer3.stage演奏ドラム画面.actBackground.ClearOut(nPlayer);
|
||||
//CDTXMania.stage演奏ドラム画面.actBackground.ClearIn(nPlayer);
|
||||
|
||||
switch (chara.effect.Gauge)
|
||||
{
|
||||
case "Hard":
|
||||
case "Extreme":
|
||||
{
|
||||
CSound管理.rc演奏用タイマ.t一時停止();
|
||||
TJAPlayer3.DTX.t全チップの再生停止();
|
||||
ifp[nPlayer] = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
cInvisibleChip.ShowChipTemporally( pChip.e楽器パート );
|
||||
}
|
||||
@ -3871,47 +3933,359 @@ namespace TJAPlayer3
|
||||
this.bIsGOGOTIME[ nPlayer ] = false;
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region [ a0-a8: EmptySlot ]
|
||||
case 0xa0:
|
||||
case 0xa1:
|
||||
case 0xa2:
|
||||
case 0xa3:
|
||||
case 0xa4:
|
||||
case 0xa5:
|
||||
case 0xa6:
|
||||
case 0xa7:
|
||||
case 0xa8:
|
||||
break;
|
||||
#endregion
|
||||
#region [ B1~BC EmptySlot ]
|
||||
case 0xb1:
|
||||
case 0xb2:
|
||||
case 0xb3:
|
||||
case 0xb4:
|
||||
case 0xb5:
|
||||
case 0xb6:
|
||||
case 0xb7:
|
||||
case 0xb8:
|
||||
case 0xb9:
|
||||
case 0xba:
|
||||
case 0xbb:
|
||||
case 0xbc:
|
||||
break;
|
||||
#endregion
|
||||
#region [ c4, c7, d5-d9: EmptySlot ]
|
||||
case 0xc4:
|
||||
case 0xc7:
|
||||
case 0xd5:
|
||||
case 0xd6: // BGA画像入れ替え
|
||||
case 0xd7:
|
||||
case 0xd8:
|
||||
case 0xd9:
|
||||
//case 0xe0:
|
||||
if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
|
||||
#region [ EXTENDED COMMANDS ]
|
||||
case 0xa0: //camera vertical move start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamVMoveChip = pChip;
|
||||
this.ctCamVMove = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xa1: //camera vertical move end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xa2: //camera horizontal move start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamHMoveChip = pChip;
|
||||
this.ctCamHMove = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xa3: //camera horizontal move end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xa4: //camera zoom start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamZoomChip = pChip;
|
||||
this.ctCamZoom = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xa5: //camera zoom end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xa6: //camera rotation start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamRotateChip = pChip;
|
||||
this.ctCamRotation = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xa7: //camera rotation end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xa8: //camera vertical scaling start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamVScaleChip = pChip;
|
||||
this.ctCamVScale = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xa9: //camera vertical scaling end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xb0: //camera horizontal scaling start
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
this.currentCamHScaleChip = pChip;
|
||||
this.ctCamHScale = new CCounter(0, pChip.fCamTimeMs, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb1: //camera horizontal scaling end
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xb2: //change border color
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
TJAPlayer3.borderColor = pChip.borderColor;
|
||||
}
|
||||
break;
|
||||
case 0xb3: //set camera x offset
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamHMoveChip = pChip;
|
||||
this.ctCamHMove = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb4: //set camera y offset
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamVMoveChip = pChip;
|
||||
this.ctCamVMove = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb5: //set camera zoom factor
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamZoomChip = pChip;
|
||||
this.ctCamZoom = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb6: //set camera rotation
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamRotateChip = pChip;
|
||||
this.ctCamRotation = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb7: //set camera x scale
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamHScaleChip = pChip;
|
||||
this.ctCamHScale = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb8: //set camera y scale
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
this.currentCamVScaleChip = pChip;
|
||||
this.ctCamVScale = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xb9: //reset camera
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
TJAPlayer3.borderColor = new SharpDX.Color4(0f, 0f, 0f, 0f);
|
||||
|
||||
this.currentCamVMoveChip = pChip;
|
||||
this.currentCamHMoveChip = pChip;
|
||||
|
||||
this.currentCamZoomChip = pChip;
|
||||
this.currentCamRotateChip = pChip;
|
||||
|
||||
this.currentCamVScaleChip = pChip;
|
||||
this.currentCamHScaleChip = pChip;
|
||||
|
||||
this.ctCamVMove = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
this.ctCamHMove = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
|
||||
this.ctCamZoom = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
this.ctCamRotation = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
|
||||
this.ctCamVScale = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
this.ctCamHScale = new CCounter(0, 0, 1, TJAPlayer3.Timer);
|
||||
}
|
||||
break;
|
||||
case 0xba: //enable doron
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
bCustomDoron = true;
|
||||
}
|
||||
break;
|
||||
case 0xbb: //disable doron
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
bCustomDoron = false;
|
||||
}
|
||||
break;
|
||||
case 0xbc: //add object
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
obj.x = pChip.fObjX;
|
||||
obj.y = pChip.fObjY;
|
||||
obj.isVisible = true;
|
||||
}
|
||||
break;
|
||||
case 0xbd: //remove object
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
obj.isVisible = false;
|
||||
}
|
||||
break;
|
||||
case 0xbe: //object animation start
|
||||
case 0xc0:
|
||||
case 0xc2:
|
||||
case 0xc4:
|
||||
case 0xc6:
|
||||
case 0xc8:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out pChip.obj);
|
||||
objHandlers.Add(pChip, new CCounter(0, pChip.fObjTimeMs, 1, TJAPlayer3.Timer));
|
||||
}
|
||||
break;
|
||||
case 0xbf: //object animation end
|
||||
case 0xc1:
|
||||
case 0xc3:
|
||||
case 0xc5:
|
||||
case 0xc7:
|
||||
case 0xc9:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xca: //set object color
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
obj.color = pChip.borderColor;
|
||||
}
|
||||
break;
|
||||
case 0xcb: //set object y
|
||||
case 0xcc: //set object x
|
||||
case 0xcd: //set object vertical scale
|
||||
case 0xce: //set object horizontal scale
|
||||
case 0xcf: //set object rotation
|
||||
case 0xd0: //set object opacity
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out pChip.obj);
|
||||
objHandlers.Add(pChip, new CCounter(0, 0, 1, TJAPlayer3.Timer));
|
||||
}
|
||||
break;
|
||||
case 0xd1: //change texture
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
if (TJAPlayer3.Tx.trackedTextures.ContainsKey(pChip.strTargetTxName))
|
||||
{
|
||||
TJAPlayer3.Tx.trackedTextures.TryGetValue(pChip.strTargetTxName, out CTexture oldTx);
|
||||
dTX.listTextures.TryGetValue(pChip.strNewPath, out CTexture newTx);
|
||||
|
||||
newTx.Opacity = oldTx.Opacity;
|
||||
newTx.fZ軸中心回転 = oldTx.fZ軸中心回転;
|
||||
newTx.vc拡大縮小倍率 = oldTx.vc拡大縮小倍率;
|
||||
|
||||
oldTx.UpdateTexture(TJAPlayer3.app.Device, newTx.texture, newTx.sz画像サイズ.Width, newTx.sz画像サイズ.Height);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0xd2: //reset texture
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
|
||||
if (TJAPlayer3.Tx.trackedTextures.ContainsKey(pChip.strTargetTxName))
|
||||
{
|
||||
TJAPlayer3.Tx.trackedTextures.TryGetValue(pChip.strTargetTxName, out CTexture oldTx);
|
||||
dTX.listOriginalTextures.TryGetValue(pChip.strTargetTxName, out CTexture originalTx);
|
||||
|
||||
originalTx.Opacity = oldTx.Opacity;
|
||||
originalTx.fZ軸中心回転 = oldTx.fZ軸中心回転;
|
||||
originalTx.vc拡大縮小倍率 = oldTx.vc拡大縮小倍率;
|
||||
|
||||
oldTx.UpdateTexture(TJAPlayer3.app.Device, originalTx.texture, originalTx.sz画像サイズ.Width, originalTx.sz画像サイズ.Height);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0xd3: //set config
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
string[] split = pChip.strConfigValue.Split('=');
|
||||
|
||||
//TJAPlayer3.Skin.t文字列から読み込み(pChip.strConfigValue, split[0]);
|
||||
bConfigUpdated = true;
|
||||
}
|
||||
break;
|
||||
case 0xd4: //start object animation
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
|
||||
obj.tStartAnimation(pChip.dbAnimInterval, false);
|
||||
}
|
||||
break;
|
||||
case 0xd5: //start object animation (looping)
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
|
||||
obj.tStartAnimation(pChip.dbAnimInterval, true);
|
||||
}
|
||||
break;
|
||||
case 0xd6: //end object animation
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
|
||||
obj.tStopAnimation();
|
||||
}
|
||||
break;
|
||||
case 0xd7: //set object frame
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
dTX.listObj.TryGetValue(pChip.strObjName, out CSongObject obj);
|
||||
|
||||
obj.frame = pChip.intFrame;
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
|
||||
#region [ d8-d9: EXTENDED2 ]
|
||||
case 0xd8:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
TJAPlayer3.ConfigIni.nGameType[nPlayer] = pChip.eGameType;
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xd9:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
bSplitLane[nPlayer] = true;
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
@ -4088,9 +4462,26 @@ namespace TJAPlayer3
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region [ その他(未定義) ]
|
||||
#region [ d8-d9: EXTENDED2 ]
|
||||
case 0xe3:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
|
||||
{
|
||||
bSplitLane[nPlayer] = false;
|
||||
pChip.bHit = true;
|
||||
}
|
||||
break;
|
||||
case 0xe4:
|
||||
if (!pChip.bHit && (pChip.nバーからの距離dot.Taiko < 0))
|
||||
{
|
||||
pChip.bHit = true;
|
||||
}
|
||||
this.t進行描画_チップ_小節線(configIni, ref dTX, ref pChip, nPlayer);
|
||||
break;
|
||||
#endregion
|
||||
|
||||
#region [ その他(未定義) ]
|
||||
default:
|
||||
if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
|
||||
{
|
||||
@ -4101,6 +4492,145 @@ namespace TJAPlayer3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region [ EXTENDED CONTROLS ]
|
||||
if (ctCamVMove != null) //vertical camera move
|
||||
{
|
||||
ctCamVMove.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamVMoveChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamVMove, currentCamVMoveChip.fCamScrollStartY, currentCamVMoveChip.fCamScrollEndY, currentCamVMoveChip.fCamMoveType);
|
||||
if (currentCamVMoveChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamVMove, currentCamVMoveChip.fCamScrollStartY, currentCamVMoveChip.fCamScrollEndY, currentCamVMoveChip.fCamMoveType);
|
||||
if (currentCamVMoveChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamVMove, currentCamVMoveChip.fCamScrollStartY, currentCamVMoveChip.fCamScrollEndY, currentCamVMoveChip.fCamMoveType);
|
||||
TJAPlayer3.fCamYOffset = float.IsNaN(value) ? currentCamVMoveChip.fCamScrollStartY : value;
|
||||
|
||||
if (ctCamVMove.b終了値に達した)
|
||||
{
|
||||
ctCamVMove = null;
|
||||
TJAPlayer3.fCamYOffset = currentCamVMoveChip.fCamScrollEndY;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctCamHMove != null) //horizontal camera move
|
||||
{
|
||||
ctCamHMove.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamHMoveChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamHMove, currentCamHMoveChip.fCamScrollStartX, currentCamHMoveChip.fCamScrollEndX, currentCamHMoveChip.fCamMoveType);
|
||||
if (currentCamHMoveChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamHMove, currentCamHMoveChip.fCamScrollStartX, currentCamHMoveChip.fCamScrollEndX, currentCamHMoveChip.fCamMoveType);
|
||||
if (currentCamHMoveChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamHMove, currentCamHMoveChip.fCamScrollStartX, currentCamHMoveChip.fCamScrollEndX, currentCamHMoveChip.fCamMoveType);
|
||||
TJAPlayer3.fCamXOffset = float.IsNaN(value) ? currentCamHMoveChip.fCamScrollStartX : value;
|
||||
|
||||
if (ctCamHMove.b終了値に達した)
|
||||
{
|
||||
ctCamHMove = null;
|
||||
TJAPlayer3.fCamXOffset = currentCamHMoveChip.fCamScrollEndX;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctCamZoom != null) //camera zoom
|
||||
{
|
||||
ctCamZoom.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamZoomChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamZoom, currentCamZoomChip.fCamZoomStart, currentCamZoomChip.fCamZoomEnd, currentCamZoomChip.fCamMoveType);
|
||||
if (currentCamZoomChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamZoom, currentCamZoomChip.fCamZoomStart, currentCamZoomChip.fCamZoomEnd, currentCamZoomChip.fCamMoveType);
|
||||
if (currentCamZoomChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamZoom, currentCamZoomChip.fCamZoomStart, currentCamZoomChip.fCamZoomEnd, currentCamZoomChip.fCamMoveType);
|
||||
TJAPlayer3.fCamZoomFactor = float.IsNaN(value) ? currentCamZoomChip.fCamZoomStart : value;
|
||||
|
||||
if (ctCamZoom.b終了値に達した)
|
||||
{
|
||||
ctCamZoom = null;
|
||||
TJAPlayer3.fCamZoomFactor = currentCamZoomChip.fCamZoomEnd;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctCamRotation != null) //camera rotation
|
||||
{
|
||||
ctCamRotation.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamRotateChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamRotation, currentCamRotateChip.fCamRotationStart, currentCamRotateChip.fCamRotationEnd, currentCamRotateChip.fCamMoveType);
|
||||
if (currentCamRotateChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamRotation, currentCamRotateChip.fCamRotationStart, currentCamRotateChip.fCamRotationEnd, currentCamRotateChip.fCamMoveType);
|
||||
if (currentCamRotateChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamRotation, currentCamRotateChip.fCamRotationStart, currentCamRotateChip.fCamRotationEnd, currentCamRotateChip.fCamMoveType);
|
||||
TJAPlayer3.fCamRotation = float.IsNaN(value) ? currentCamRotateChip.fCamRotationStart : value;
|
||||
|
||||
if (ctCamRotation.b終了値に達した)
|
||||
{
|
||||
ctCamRotation = null;
|
||||
TJAPlayer3.fCamRotation = currentCamRotateChip.fCamRotationEnd;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctCamVScale != null) //vertical camera scaling
|
||||
{
|
||||
ctCamVScale.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamVScaleChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamVScale, currentCamVScaleChip.fCamScaleStartY, currentCamVScaleChip.fCamScaleEndY, currentCamVScaleChip.fCamMoveType);
|
||||
if (currentCamVScaleChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamVScale, currentCamVScaleChip.fCamScaleStartY, currentCamVScaleChip.fCamScaleEndY, currentCamVScaleChip.fCamMoveType);
|
||||
if (currentCamVScaleChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamVScale, currentCamVScaleChip.fCamScaleStartY, currentCamVScaleChip.fCamScaleEndY, currentCamVScaleChip.fCamMoveType);
|
||||
TJAPlayer3.fCamYScale = float.IsNaN(value) ? currentCamVScaleChip.fCamScaleStartY : value;
|
||||
|
||||
if (ctCamVScale.b終了値に達した)
|
||||
{
|
||||
ctCamVScale = null;
|
||||
TJAPlayer3.fCamYScale = currentCamVScaleChip.fCamScaleEndY;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctCamHScale != null) //horizontal camera scaling
|
||||
{
|
||||
ctCamHScale.t進行();
|
||||
float value = 0.0f;
|
||||
if (currentCamHScaleChip.strCamEaseType.Equals("IN")) value = easing.EaseIn(ctCamHScale, currentCamHScaleChip.fCamScaleStartX, currentCamHScaleChip.fCamScaleEndX, currentCamHScaleChip.fCamMoveType);
|
||||
if (currentCamHScaleChip.strCamEaseType.Equals("OUT")) value = easing.EaseOut(ctCamHScale, currentCamHScaleChip.fCamScaleStartX, currentCamHScaleChip.fCamScaleEndX, currentCamHScaleChip.fCamMoveType);
|
||||
if (currentCamHScaleChip.strCamEaseType.Equals("IN_OUT")) value = easing.EaseInOut(ctCamHScale, currentCamHScaleChip.fCamScaleStartX, currentCamHScaleChip.fCamScaleEndX, currentCamHScaleChip.fCamMoveType);
|
||||
TJAPlayer3.fCamXScale = float.IsNaN(value) ? currentCamHScaleChip.fCamScaleStartX : value;
|
||||
|
||||
if (ctCamHScale.b終了値に達した)
|
||||
{
|
||||
ctCamHScale = null;
|
||||
TJAPlayer3.fCamXScale = currentCamHScaleChip.fCamScaleEndX;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<CDTX.CChip, CCounter> pair in objHandlers)
|
||||
{
|
||||
CDTX.CChip chip = pair.Key;
|
||||
CCounter counter = pair.Value;
|
||||
|
||||
if (counter != null)
|
||||
{
|
||||
counter.t進行();
|
||||
|
||||
float value = 0.0f;
|
||||
if (counter.b終了値に達した)
|
||||
{
|
||||
value = chip.fObjEnd;
|
||||
counter = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (chip.strObjEaseType.Equals("IN")) value = easing.EaseIn(counter, chip.fObjStart, chip.fObjEnd, chip.objCalcType);
|
||||
if (chip.strObjEaseType.Equals("OUT")) value = easing.EaseOut(counter, chip.fObjStart, chip.fObjEnd, chip.objCalcType);
|
||||
if (chip.strObjEaseType.Equals("IN_OUT")) value = easing.EaseInOut(counter, chip.fObjStart, chip.fObjEnd, chip.objCalcType);
|
||||
value = float.IsNaN(value) ? chip.fObjStart : value;
|
||||
}
|
||||
|
||||
if (chip.nチャンネル番号 == 0xBE) chip.obj.y = value;
|
||||
if (chip.nチャンネル番号 == 0xC0) chip.obj.x = value;
|
||||
if (chip.nチャンネル番号 == 0xC2) chip.obj.yScale = value;
|
||||
if (chip.nチャンネル番号 == 0xC4) chip.obj.xScale = value;
|
||||
if (chip.nチャンネル番号 == 0xC6) chip.obj.rotation = value;
|
||||
if (chip.nチャンネル番号 == 0xC8) chip.obj.opacity = (int)value;
|
||||
|
||||
if (chip.nチャンネル番号 == 0xCB) chip.obj.y = value;
|
||||
if (chip.nチャンネル番号 == 0xCC) chip.obj.x = value;
|
||||
if (chip.nチャンネル番号 == 0xCD) chip.obj.yScale = value;
|
||||
if (chip.nチャンネル番号 == 0xCE) chip.obj.xScale = value;
|
||||
if (chip.nチャンネル番号 == 0xCF) chip.obj.rotation = value;
|
||||
if (chip.nチャンネル番号 == 0xD0) chip.obj.opacity = (int)value;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4491,6 +5021,29 @@ namespace TJAPlayer3
|
||||
AIBattleSections[i].IsAnimated = false;
|
||||
}
|
||||
|
||||
TJAPlayer3.fCamXOffset = 0;
|
||||
|
||||
TJAPlayer3.fCamYOffset = 0;
|
||||
|
||||
TJAPlayer3.fCamZoomFactor = 1.0f;
|
||||
TJAPlayer3.fCamRotation = 0;
|
||||
|
||||
TJAPlayer3.fCamXScale = 1.0f;
|
||||
TJAPlayer3.fCamYScale = 1.0f;
|
||||
|
||||
TJAPlayer3.borderColor = new SharpDX.Color4(1f, 0f, 0f, 0f);
|
||||
|
||||
foreach (var chip in TJAPlayer3.DTX.listChip)
|
||||
{
|
||||
if (chip.obj == null) continue;
|
||||
chip.obj.isVisible = false;
|
||||
chip.obj.yScale = 1.0f;
|
||||
chip.obj.xScale = 1.0f;
|
||||
chip.obj.rotation = 0.0f;
|
||||
chip.obj.opacity = 255;
|
||||
chip.obj.frame = 0;
|
||||
}
|
||||
|
||||
TJAPlayer3.DTX.t全チップの再生停止とミキサーからの削除();
|
||||
this.t数値の初期化( true, true );
|
||||
this.actAVI.tReset();
|
||||
@ -4502,6 +5055,9 @@ namespace TJAPlayer3
|
||||
JPOSCROLLX[i] = 0;
|
||||
JPOSCROLLY[i] = 0;
|
||||
ifp[i] = false;
|
||||
|
||||
TJAPlayer3.ConfigIni.nGameType[i] = eFirstGameType[i];
|
||||
bSplitLane[i] = false;
|
||||
}
|
||||
TJAPlayer3.stage演奏ドラム画面.On活性化();
|
||||
for( int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++ )
|
||||
@ -4937,5 +5493,30 @@ namespace TJAPlayer3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region [EXTENDED COMMANDS]
|
||||
private CCounter ctCamVMove;
|
||||
private CCounter ctCamHMove;
|
||||
private CCounter ctCamZoom;
|
||||
private CCounter ctCamRotation;
|
||||
private CCounter ctCamVScale;
|
||||
private CCounter ctCamHScale;
|
||||
|
||||
private CDTX.CChip currentCamVMoveChip;
|
||||
private CDTX.CChip currentCamHMoveChip;
|
||||
private CDTX.CChip currentCamZoomChip;
|
||||
private CDTX.CChip currentCamRotateChip;
|
||||
private CDTX.CChip currentCamVScaleChip;
|
||||
private CDTX.CChip currentCamHScaleChip;
|
||||
|
||||
private Dictionary<CDTX.CChip, CCounter> camHandlers;
|
||||
private Dictionary<CDTX.CChip, CCounter> objHandlers;
|
||||
|
||||
private Easing easing = new Easing();
|
||||
|
||||
public bool bCustomDoron = false;
|
||||
private bool bConfigUpdated = false;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1849,7 +1849,7 @@ namespace TJAPlayer3
|
||||
|
||||
int n大音符 = (pChip.nチャンネル番号 == 0x11 || pChip.nチャンネル番号 == 0x12 ? 2 : 0);
|
||||
|
||||
this.tチップのヒット処理(pChip.n発声時刻ms, pChip, E楽器パート.TAIKO, true, nLane + n大音符, nPlayer);
|
||||
this.tチップのヒット処理(pChip.n発声時刻ms, pChip, E楽器パート.TAIKO, true, nLane + n大音符, nPlayer, false);
|
||||
this.tサウンド再生(pChip, nPlayer);
|
||||
return;
|
||||
}
|
||||
@ -1930,7 +1930,7 @@ namespace TJAPlayer3
|
||||
#endregion
|
||||
|
||||
#region[ HIDSUD & STEALTH ]
|
||||
if( TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(nPlayer)] == Eステルスモード.STEALTH )
|
||||
if( TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(nPlayer)] == Eステルスモード.STEALTH || TJAPlayer3.stage演奏ドラム画面.bCustomDoron)
|
||||
{
|
||||
pChip.bShow = false;
|
||||
}
|
||||
@ -1951,6 +1951,18 @@ namespace TJAPlayer3
|
||||
y += NotesManager.GetNoteY(pChip, time * pChip.dbBPM, _scrollSpeed, TJAPlayer3.Skin.Game_Notes_Interval, play_bpm_time, configIni.eScrollMode, false);
|
||||
}
|
||||
|
||||
if (bSplitLane[nPlayer] || TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(nPlayer))].effect.SplitLane)
|
||||
{
|
||||
if (NotesManager.IsDonNote(pChip))
|
||||
{
|
||||
y -= TJAPlayer3.Skin.Game_Notes_Size[1] / 3;
|
||||
}
|
||||
else if (NotesManager.IsKaNote(pChip))
|
||||
{
|
||||
y += TJAPlayer3.Skin.Game_Notes_Size[1] / 3;
|
||||
}
|
||||
}
|
||||
|
||||
if ( pChip.nバーからの距離dot.Drums < 0 )
|
||||
{
|
||||
this.actGame.st叩ききりまショー.b最初のチップが叩かれた = true;
|
||||
@ -2106,7 +2118,13 @@ namespace TJAPlayer3
|
||||
}
|
||||
|
||||
case 0x1F:
|
||||
{
|
||||
NotesManager.DisplayNote(nPlayer, x, y, pChip, num9);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
@ -2203,9 +2221,29 @@ namespace TJAPlayer3
|
||||
y += NotesManager.GetNoteY(pChip, time * pChip.dbBPM, _scrollSpeed, TJAPlayer3.Skin.Game_Notes_Interval, play_bpm_time, configIni.eScrollMode, false);
|
||||
}
|
||||
|
||||
if (bSplitLane[nPlayer] || TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(nPlayer))].effect.SplitLane)
|
||||
{
|
||||
if (TJAPlayer3.ConfigIni.nGameType[nPlayer] == EGameType.KONGA)
|
||||
{
|
||||
if (NotesManager.IsClapRoll(pChip))
|
||||
{
|
||||
}
|
||||
else if (NotesManager.IsYellowRoll(pChip))
|
||||
{
|
||||
y += TJAPlayer3.Skin.Game_Notes_Size[1] / 2;
|
||||
y末端 += TJAPlayer3.Skin.Game_Notes_Size[1] / 2;
|
||||
}
|
||||
else if (NotesManager.IsRoll(pChip))
|
||||
{
|
||||
y -= TJAPlayer3.Skin.Game_Notes_Size[1] / 2;
|
||||
y末端 -= TJAPlayer3.Skin.Game_Notes_Size[1] / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region[ HIDSUD & STEALTH ]
|
||||
|
||||
if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(nPlayer)] == Eステルスモード.STEALTH)
|
||||
if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(nPlayer)] == Eステルスモード.STEALTH || TJAPlayer3.stage演奏ドラム画面.bCustomDoron)
|
||||
{
|
||||
pChip.bShow = false;
|
||||
}
|
||||
@ -2401,11 +2439,17 @@ namespace TJAPlayer3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pChip.n発声時刻ms < nowTime && pChip.nノーツ終了時刻ms > nowTime)
|
||||
{
|
||||
var puchichara = TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(nPlayer))];
|
||||
|
||||
//時間内でかつ0x9Aじゃないならならヒット処理
|
||||
if (!NotesManager.IsRollEnd(pChip) && (nPlayer != 1 ? TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] : (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] || TJAPlayer3.ConfigIni.bAIBattleMode)))
|
||||
this.tチップのヒット処理(pChip.n発声時刻ms, pChip, E楽器パート.TAIKO, false, 0, nPlayer);
|
||||
if (!NotesManager.IsRollEnd(pChip) &&
|
||||
((nPlayer != 1 ? TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] :
|
||||
(TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[nPlayer] || TJAPlayer3.ConfigIni.bAIBattleMode)) ||
|
||||
puchichara.effect.Autoroll > 0))
|
||||
this.tチップのヒット処理(pChip.n発声時刻ms, pChip, E楽器パート.TAIKO, false, 0, nPlayer, puchichara.effect.Autoroll > 0);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@ -2472,7 +2516,7 @@ namespace TJAPlayer3
|
||||
else
|
||||
{
|
||||
//this.tx小節線.t2D描画( CDTXMania.app.Device, x - 3, y, new Rectangle( 0, 0, 3, 130 ) );
|
||||
TJAPlayer3.Tx.Bar?.t2D描画( TJAPlayer3.app.Device, x + ((TJAPlayer3.Skin.Game_Notes_Size[0] - TJAPlayer3.Tx.Bar.szテクスチャサイズ.Width) / 2), y, new Rectangle( 0, 0, TJAPlayer3.Tx.Bar_Branch.szテクスチャサイズ.Width, TJAPlayer3.Skin.Game_Notes_Size[1]) );
|
||||
TJAPlayer3.Tx.Bar?.t2D描画( TJAPlayer3.app.Device, x + ((TJAPlayer3.Skin.Game_Notes_Size[0] - TJAPlayer3.Tx.Bar.szテクスチャサイズ.Width) / 2), y, new Rectangle( 0, 0, TJAPlayer3.Tx.Bar.szテクスチャサイズ.Width, TJAPlayer3.Skin.Game_Notes_Size[1]) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -154,6 +154,18 @@ namespace TJAPlayer3
|
||||
return chip.nチャンネル番号 == 0x1C;
|
||||
}
|
||||
|
||||
public static bool IsDonNote(CDTX.CChip chip)
|
||||
{
|
||||
if (chip == null) return false;
|
||||
return chip.nチャンネル番号 == 0x11 || chip.nチャンネル番号 == 0x13 || chip.nチャンネル番号 == 0x1A;
|
||||
}
|
||||
|
||||
public static bool IsKaNote(CDTX.CChip chip)
|
||||
{
|
||||
if (chip == null) return false;
|
||||
return chip.nチャンネル番号 == 0x12 || chip.nチャンネル番号 == 0x14 || chip.nチャンネル番号 == 0x1B;
|
||||
}
|
||||
|
||||
public static bool IsSmallNote(CDTX.CChip chip, bool blue)
|
||||
{
|
||||
if (chip == null) return false;
|
||||
@ -360,6 +372,16 @@ namespace TJAPlayer3
|
||||
TJAPlayer3.Tx.Note_Kusu?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, frame, length, TJAPlayer3.Skin.Game_Notes_Size[1]));
|
||||
return;
|
||||
}
|
||||
else if (IsADLIB(chip))
|
||||
{
|
||||
var puchichara = TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(player))];
|
||||
if (puchichara.effect.ShowAdlib)
|
||||
{
|
||||
TJAPlayer3.Tx.Note_Adlib?.tUpdateOpacity(50);
|
||||
TJAPlayer3.Tx.Note_Adlib?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, frame, length, TJAPlayer3.Skin.Game_Notes_Size[1]));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
TJAPlayer3.Tx.Notes[(int)_gt]?.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(noteType * TJAPlayer3.Skin.Game_Notes_Size[0], frame, length, TJAPlayer3.Skin.Game_Notes_Size[1]));
|
||||
}
|
||||
|
@ -467,6 +467,7 @@ namespace TJAPlayer3
|
||||
float starRate;
|
||||
float redStarRate;
|
||||
|
||||
|
||||
float[] modMultipliers =
|
||||
{
|
||||
TJAPlayer3.stage選曲.actPlayOption.tGetModMultiplier(CActPlayOption.EBalancingType.COINS, false, 0),
|
||||
@ -476,6 +477,59 @@ namespace TJAPlayer3
|
||||
TJAPlayer3.stage選曲.actPlayOption.tGetModMultiplier(CActPlayOption.EBalancingType.COINS, false, 4)
|
||||
};
|
||||
|
||||
float getCoinMul(int player)
|
||||
{
|
||||
var chara = TJAPlayer3.Tx.Characters[TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(player)].data.Character];
|
||||
var puchichara = TJAPlayer3.Tx.Puchichara[PuchiChara.tGetPuchiCharaIndexByName(TJAPlayer3.GetActualPlayer(player))];
|
||||
|
||||
float charamul = 1.0f;
|
||||
switch(chara.metadata.Rarity)
|
||||
{
|
||||
case "Poor":
|
||||
charamul = 0.8f;
|
||||
break;
|
||||
case "Common":
|
||||
charamul = 1.0f;
|
||||
break;
|
||||
case "Uncommon":
|
||||
charamul = 1.1f;
|
||||
break;
|
||||
case "Rare":
|
||||
charamul = 1.2f;
|
||||
break;
|
||||
case "Epic":
|
||||
charamul = 1.3f;
|
||||
break;
|
||||
case "Legendary":
|
||||
charamul = 1.5f;
|
||||
break;
|
||||
}
|
||||
|
||||
float puchimul = 1.0f;
|
||||
switch (puchichara.metadata.Rarity)
|
||||
{
|
||||
case "Poor":
|
||||
puchimul = 0.8f;
|
||||
break;
|
||||
case "Common":
|
||||
puchimul = 1.0f;
|
||||
break;
|
||||
case "Uncommon":
|
||||
puchimul = 1.1f;
|
||||
break;
|
||||
case "Rare":
|
||||
puchimul = 1.2f;
|
||||
break;
|
||||
case "Epic":
|
||||
puchimul = 1.3f;
|
||||
break;
|
||||
case "Legendary":
|
||||
puchimul = 1.5f;
|
||||
break;
|
||||
}
|
||||
return charamul * puchimul;
|
||||
}
|
||||
|
||||
if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower)
|
||||
{
|
||||
diffModifier = 3;
|
||||
@ -505,7 +559,7 @@ namespace TJAPlayer3
|
||||
|
||||
// this.nEarnedMedalsCount[0] = stars;
|
||||
this.nEarnedMedalsCount[0] = 5 + (int)((diffModifier * (starRate + redStarRate)) * (floorRate * lengthBonus)) + clearModifier;
|
||||
this.nEarnedMedalsCount[0] = Math.Max(5, (int)(this.nEarnedMedalsCount[0] * modMultipliers[0]));
|
||||
this.nEarnedMedalsCount[0] = Math.Max(5, (int)(this.nEarnedMedalsCount[0] * modMultipliers[0] * getCoinMul(0)));
|
||||
}
|
||||
else if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan)
|
||||
{
|
||||
@ -560,7 +614,7 @@ namespace TJAPlayer3
|
||||
else
|
||||
{
|
||||
this.nEarnedMedalsCount[0] = 10 + goukakuModifier + clearModifier + (int)(partialScore * dAccuracyRate);
|
||||
this.nEarnedMedalsCount[0] = Math.Max(10, (int)(this.nEarnedMedalsCount[0] * modMultipliers[0]));
|
||||
this.nEarnedMedalsCount[0] = Math.Max(10, (int)(this.nEarnedMedalsCount[0] * modMultipliers[0] * getCoinMul(0)));
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -619,7 +673,7 @@ namespace TJAPlayer3
|
||||
else
|
||||
{
|
||||
this.nEarnedMedalsCount[i] = 5 + (int)((diffModifier * (starRate + redStarRate)) * dAccuracyRate) + clearModifier + scoreRankModifier;
|
||||
this.nEarnedMedalsCount[i] = Math.Max(5, (int)(this.nEarnedMedalsCount[i] * modMultipliers[i]));
|
||||
this.nEarnedMedalsCount[i] = Math.Max(5, (int)(this.nEarnedMedalsCount[i] * modMultipliers[i] * getCoinMul(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2018,7 +2072,7 @@ namespace TJAPlayer3
|
||||
}
|
||||
else
|
||||
{
|
||||
return new bool[] { actParameterPanel.gaugeValues[0] >= 80, actParameterPanel.gaugeValues[1] >= 80, actParameterPanel.gaugeValues[2] >= 80, actParameterPanel.gaugeValues[3] >= 80, actParameterPanel.gaugeValues[4] >= 80 };
|
||||
return new bool[] { TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[0], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[1], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[2], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[3], TJAPlayer3.stage演奏ドラム画面.bIsAlreadyCleared[4] };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -160,6 +160,7 @@
|
||||
<Compile Include="Songs\C曲リストノードComparers\C曲リストノードComparerLevelIcon.cs" />
|
||||
<Compile Include="Songs\C曲リストノードComparers\C曲リストノードComparerLevel.cs" />
|
||||
<Compile Include="Songs\C曲リストノードComparers\C曲リストノードComparerSubtitle.cs" />
|
||||
<Compile Include="Songs\Extended\CSongObject.cs" />
|
||||
<Compile Include="Songs\VTTParser.cs" />
|
||||
<Compile Include="Stages\01.StartUp\CCharacter.cs" />
|
||||
<Compile Include="Stages\01.StartUp\CPuchichara.cs" />
|
||||
|
3
Test/Global/Characters/Template/Effects.json
Normal file
3
Test/Global/Characters/Template/Effects.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"gauge":"Normal"
|
||||
}
|
6
Test/Global/PuchiChara/Template/Effects.json
Normal file
6
Test/Global/PuchiChara/Template/Effects.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"allpurple":false,
|
||||
"autoroll":0,
|
||||
"showadlib":false,
|
||||
"splitlane":false
|
||||
}
|
21
Test/Licenses/TJAPlayer3-Extended.txt
Normal file
21
Test/Licenses/TJAPlayer3-Extended.txt
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 J.MIR
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -1,8 +1,12 @@
|
||||
#TITLE:OpenTaiko Chapter I
|
||||
#TITLEJA:OpenTaiko チャプター I
|
||||
#GENRE:OpenTaiko Chapter I
|
||||
#BOXEXPLANATION1:Play awesome community-
|
||||
#BOXEXPLANATION2:made songs submitted
|
||||
#BOXEXPLANATION3:for OpenTaiko !
|
||||
#BOXEXPLANATIONJA1:OpenTaikoコミュニティの
|
||||
#BOXEXPLANATIONJA2:方たちが作った曲が
|
||||
#BOXEXPLANATIONJA3:あそべるよ!
|
||||
#BOXTYPE:3
|
||||
#BGTYPE:6
|
||||
#BOXCOLOR:#f76b20
|
||||
|
@ -1,4 +1,5 @@
|
||||
#TITLE:OpenTaiko Chapter II
|
||||
#TITLEJA:OpenTaiko チャプター II
|
||||
#GENRE:OpenTaiko Chapter II
|
||||
#BOXEXPLANATION1:Play awesome community-
|
||||
#BOXEXPLANATION2:made songs submitted
|
||||
|
@ -1,8 +1,12 @@
|
||||
#TITLE:Collaborations
|
||||
#TITLEJA:コラボ曲
|
||||
#GENRE:Collaborations
|
||||
#BOXEXPLANATION1:Enjoy songs from projects
|
||||
#BOXEXPLANATION2:the OpenTaiko team
|
||||
#BOXEXPLANATION3:collaborated with !
|
||||
#BOXEXPLANATIONJA1:OpenTaikoチームと
|
||||
#BOXEXPLANATIONJA2:コラボした曲が
|
||||
#BOXEXPLANATIONJA3:あそべるよ!
|
||||
#BGTYPE:3
|
||||
#BGCOLOR:#a200ff
|
||||
#BOXTYPE:0
|
||||
|
@ -1,10 +1,14 @@
|
||||
#TITLE:Custom Charts
|
||||
#TITLEJA:カスタム譜面
|
||||
#GENRE:Custom Charts
|
||||
#FORECOLOR:#FFFFFF
|
||||
#BACKCOLOR:#316700
|
||||
#BOXEXPLANATION1:Play a wide range
|
||||
#BOXEXPLANATION2:of custom charts
|
||||
#BOXEXPLANATION3:from the community !
|
||||
#BOXEXPLANATIONJA1:君自身が導入した
|
||||
#BOXEXPLANATIONJA2:譜面があそべるよ!
|
||||
#BOXEXPLANATIONJA3:カスタム譜面はここに入れてね!
|
||||
#BGTYPE:4
|
||||
#BGCOLOR:#00fc15
|
||||
#BOXTYPE:0
|
||||
|
@ -1,8 +1,12 @@
|
||||
#TITLE:Downloaded Songs
|
||||
#TITLEJA:CDNからダウンロードした曲
|
||||
#GENRE:Download
|
||||
#BOXEXPLANATION1: Play songs downloaded
|
||||
#BOXEXPLANATION2: from the Online Lounge !
|
||||
#BOXEXPLANATION3:
|
||||
#BOXEXPLANATIONJA1: オンラインラウンジから
|
||||
#BOXEXPLANATIONJA2: ダウンロードした曲が
|
||||
#BOXEXPLANATIONJA3: あそべるよ!
|
||||
#BGCOLOR:#ff00a2
|
||||
#BOXCOLOR:#ff00a2
|
||||
#BOXTYPE:0
|
||||
|
@ -1,8 +1,12 @@
|
||||
#TITLE:Dan-i Dojo
|
||||
#TITLEJA:段位道場
|
||||
#GENRE:段位道場
|
||||
#BOXEXPLANATION1:Play multiple charts in continuation
|
||||
#BOXEXPLANATION2:following challenging exams
|
||||
#BOXEXPLANATION3:in order to get a PASS rank !
|
||||
#BOXEXPLANATIONJA1:曲を連続で演奏して
|
||||
#BOXEXPLANATIONJA2:条件をクリアすれば
|
||||
#BOXEXPLANATIONJA3:称号がもらえるモードだよ!
|
||||
#BOXTYPE:0
|
||||
#BGTYPE:7
|
||||
#BOXCOLOR:#3e51c9
|
||||
|
@ -1,7 +1,10 @@
|
||||
#TITLE:Tower (甘口)
|
||||
#TITLE:Tower (Sweet)
|
||||
#TITLEJA:甘口
|
||||
#GENRE:太鼓タワー
|
||||
#BOXEXPLANATION1:Easy tower charts for
|
||||
#BOXEXPLANATION2:players of all skill ranges !
|
||||
#BOXEXPLANATIONJA1:かんたんだよ!
|
||||
#BOXEXPLANATIONJA2:楽しんでね!
|
||||
#BACKCOLOR:#222222
|
||||
#BOXCOLOR:#f6ff00
|
||||
#BOXTYPE:0
|
||||
|
@ -1,7 +1,10 @@
|
||||
#TITLE:Tower (辛口)
|
||||
#TITLE:Tower (Spicy)
|
||||
#TITLEJA:辛口
|
||||
#GENRE:太鼓タワー
|
||||
#BOXEXPLANATION1:Difficult Tower charts
|
||||
#BOXEXPLANATION2:for true champions !
|
||||
#BOXEXPLANATIONJA1:むずかしいよ!
|
||||
#BOXEXPLANATIONJA2:楽しんでね!
|
||||
#BACKCOLOR:#222222
|
||||
#BOXCOLOR:#ff5e00
|
||||
#BOXTYPE:0
|
||||
|
@ -1,8 +1,12 @@
|
||||
#TITLE:Taiko Towers
|
||||
#TITLEJA:太鼓タワー
|
||||
#GENRE:太鼓タワー
|
||||
#BOXEXPLANATION1:Play long charts within a limited
|
||||
#BOXEXPLANATION2:count of lives and reach
|
||||
#BOXEXPLANATION3:the top of the tower !
|
||||
#BOXEXPLANATIONJA1:曲を演奏して頂上まで
|
||||
#BOXEXPLANATIONJA2:たどり着いたらクリアだよ!
|
||||
#BOXEXPLANATIONJA3:ミスをするとHPが減るから気を付けて!
|
||||
#BACKCOLOR:#222222
|
||||
#BOXCOLOR:#ffb300
|
||||
#BOXTYPE:0
|
||||
|
@ -1,10 +1,14 @@
|
||||
#TITLE:Favorite songs
|
||||
#TITLEJA:おきにいり
|
||||
#GENRE:Favorite
|
||||
#FORECOLOR:#FFFFFF
|
||||
#BACKCOLOR:#673100
|
||||
#BOXEXPLANATION1:Challenge some of
|
||||
#BOXEXPLANATION2:your favorite songs !
|
||||
#BOXEXPLANATION3:(Toggle with Left CTRL)
|
||||
#BOXEXPLANATIONJA1:おきにいりに
|
||||
#BOXEXPLANATIONJA2:登録をした曲が
|
||||
#BOXEXPLANATIONJA3:遊べるよ!(とても便利!)
|
||||
#BGTYPE:10
|
||||
#BOXTYPE:0
|
||||
#BOXCOLOR:#c71b3b
|
@ -1,7 +1,11 @@
|
||||
#TITLE:Recently played songs
|
||||
#TITLEJA:最近遊んだ曲
|
||||
#GENRE:最近遊んだ曲
|
||||
#FORECOLOR:#FFFFFF
|
||||
#BACKCOLOR:#164748
|
||||
#BOXEXPLANATION1:Play recently played songs !
|
||||
#BOXEXPLANATIONJA1:何回か前までの
|
||||
#BOXEXPLANATIONJA2:遊んだ曲が選べるよ
|
||||
#BOXEXPLANATIONJA3:お気に入りならお気に入り登録をしよう!
|
||||
#BGTYPE:9
|
||||
#BOXTYPE:9
|
@ -1,9 +1,12 @@
|
||||
#TITLE:Search by difficulty
|
||||
#TITLEJA:むずかしさから探す
|
||||
#GENRE:SearchD
|
||||
#FORECOLOR:#FFFFFF
|
||||
#BACKCOLOR:#213d18
|
||||
#BOXEXPLANATION1:Search and play songs that
|
||||
#BOXEXPLANATION2:fit your level !
|
||||
#BOXEXPLANATIONJA1:難易度やレベルで検索するよ
|
||||
#BOXEXPLANATIONJA2:とても便利!
|
||||
#BGTYPE:1
|
||||
#BOXTYPE:0
|
||||
#BOXCOLOR:#5ac736
|
||||
|
BIN
Test/System/SimpleStyle (1080p)/Graphics/5_Game/Adlib.png
Normal file
BIN
Test/System/SimpleStyle (1080p)/Graphics/5_Game/Adlib.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 71 KiB |
BIN
Test/System/SimpleStyle/Graphics/5_Game/Adlib.png
Normal file
BIN
Test/System/SimpleStyle/Graphics/5_Game/Adlib.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
Loading…
x
Reference in New Issue
Block a user