diff --git a/OpenTaiko/OpenTaiko.csproj b/OpenTaiko/OpenTaiko.csproj
index f35963e0..5b9aa2f5 100644
--- a/OpenTaiko/OpenTaiko.csproj
+++ b/OpenTaiko/OpenTaiko.csproj
@@ -23,10 +23,15 @@
+
+
+
+
+
0.6.0
WinExe
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Config.json b/OpenTaiko/System/Open-World Memories/Modules/Modal/Config.json
new file mode 100644
index 00000000..36a37131
--- /dev/null
+++ b/OpenTaiko/System/Open-World Memories/Modules/Modal/Config.json
@@ -0,0 +1,3 @@
+{
+
+}
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/README.md b/OpenTaiko/System/Open-World Memories/Modules/Modal/README.md
new file mode 100644
index 00000000..0a6db115
--- /dev/null
+++ b/OpenTaiko/System/Open-World Memories/Modules/Modal/README.md
@@ -0,0 +1,48 @@
+# Modal Lua Customization Guide
+
+## Methods
+
+- (bool) isAnimationFinished()
+
+Returns if the currently playing modal animation is finished, when returning "true" enter is pressable again to move to the next modal orreturn to the song select screen
+
+- (void) registerNewModal(int player, int rarity, int modal_type, object modal_info, object modal_visual_ref)
+
+Method called every time a new modal is registered including its related information
+
+Includes the following arguments:
+```
+- (int) player: The player related to the modal (between 1 and 5)
+- (int) rarity: The rarity of the unlocked asset (between 0 (Poor) and 6 (Mythical)), unused for Coins
+- (int) modal_type: The type of unlocked asset (0: Coins, 1: Character, 2: Puchichara, 3: Title, 4: Song)
+
+- (object) modal_info: Asset related information, modal_type dependent:
+> Coins -> (long) modal_info: The coin value of the play
+> Character -> (CCharacter) modal_info: The unlocked character information data (never nil)
+> Puchichara -> (CPuchichara) modal_info: The unlocked puchichara information data (never nil)
+> Title -> (NameplateUnlockable) modal_info: The unlocked nameplate information data (never nil)
+> Song -> (SongNode?) modal_info: The unlocked song information data (can be nil)
+
+- (object) modal_visual_ref: Asset related visuals (or extra info), modal_type dependent:
+> Coins -> (long) modal_visual_ref: The total count of coins after the play
+> Character -> (CTexture?) modal_visual_ref: The character render as displayed in my room (can be nil)
+> Puchichara -> nil
+> Title -> (LuaNamePlateScript) modal_visual_ref: A reference to the Nameplate Lua script (never nil except if broken skin)
+> Song -> (CTexture?) modal_visual_ref: The song preimage, with the size value set to the same value as in the song select menu (can be nil)
+```
+
+- (void) loadAssets()
+
+Method where all resource allocation should be included, called at each skin reload and at launch
+
+- (void) update()
+
+The regular update loop, for example to increment time counters, plays before draw()
+
+- (void) draw()
+
+For displayables, played at each result screen Draw() iteration
+
+## Types
+
+TBD
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Script.lua b/OpenTaiko/System/Open-World Memories/Modules/Modal/Script.lua
new file mode 100644
index 00000000..cc0ca5d3
--- /dev/null
+++ b/OpenTaiko/System/Open-World Memories/Modules/Modal/Script.lua
@@ -0,0 +1,199 @@
+import ('System.Drawing')
+
+-- Modal info
+local modal_current_type = 0
+local modal_current_rarity = 1
+local modal_current_player = 1
+local modal_current_info = nil
+local modal_current_visual = nil
+
+-- Modal graphics
+local icon_players = { }
+local modal_tx = { }
+local modal_tx_coin = nil
+local ttk_modal_header = nil
+local ttk_modal_body = nil
+
+-- Modal sounds
+local modal_sfx = { }
+local modal_sfx_coin = nil
+
+-- Fonts
+local font_modal_header = nil
+local font_modal_body = nil
+local font_modal_plate = nil
+
+-- Modal counter
+local modal_duration = 2000
+local modal_counter = 0
+local script_busy = false
+
+-- After the item is revealed, a circle glow or smth like that?
+local modal_loopanim_duration = 1000
+local modal_loopanim_counter = 0
+
+-- Tmp (until new format)
+local modal_asset_id = 0
+
+function isAnimationFinished()
+ return not script_busy
+end
+
+-- modal_asset_informations: Character object, Coin count, Nameplate unlockable whole object, etc... having all the necessary information
+-- modal_asset_visual_references: Character textures table, Song preimage (?) or supporting visuals, might be null for some modal types
+function registerNewModal(player, rarity, modal_type, modal_asset_informations, modal_asset_visual_references)
+ local _modal_header = ""
+ local _modal_body = ""
+ modal_current_type = modal_type
+ modal_current_rarity = rarity
+ modal_current_player = player
+ modal_current_info = modal_asset_informations
+ modal_current_visual = modal_asset_visual_references
+ modal_counter = 0
+ modal_loopanim_counter = 0
+ script_busy = true
+
+ if modal_type == 0 then
+ -- Coin
+ modal_current_rarity = 1
+ _modal_header = getLocalizedString("MODAL_TITLE_COIN")
+ _modal_body = getLocalizedString("MODAL_MESSAGE_COIN", tostring(modal_asset_informations), tostring(modal_asset_visual_references)) -- 0: Delta coin, 1: Total coin
+ debugLog(_modal_body)
+
+ modal_sfx_coin:PlayStart()
+
+ elseif modal_type == 1 then
+ -- Character
+ -- > modal_asset_informations: CCharacter
+ -- > modal_asset_visual_references: CTexture?
+ _modal_header = getLocalizedString("MODAL_TITLE_CHARA")
+ _modal_body = modal_current_info.metadata:tGetName()
+
+ elseif modal_type == 2 then
+ -- Puchichara
+ -- > modal_asset_informations: CPuchichara
+ -- > modal_asset_visual_references:
+ _modal_header = getLocalizedString("MODAL_TITLE_PUCHI")
+ _modal_body = modal_current_info.metadata:tGetName()
+
+ elseif modal_type == 3 then
+ -- Title
+ -- > modal_asset_informations: NameplateUnlockable
+ -- > modal_asset_visual_references: CLuaNamePlateScript
+ _modal_header = getLocalizedString("MODAL_TITLE_NAMEPLATE")
+ _modal_body = modal_asset_informations.Value.nameplateInfo.cld:GetString("")
+ ttk_modal_body = createTitleTextureKey(_modal_body, font_modal_plate, 99999, Color.FromArgb(0,0,0,1), Color.FromArgb(0,0,0,0))
+
+ elseif modal_type == 4 then
+ -- Song
+ -- > modal_asset_informations: CSongListNode
+ -- > modal_asset_visual_references: CTexture (Preimage)
+ _modal_header = getLocalizedString("MODAL_TITLE_SONG")
+ _modal_body = modal_current_info.ldTitle:GetString("")
+
+ end
+
+ ttk_modal_header = createTitleTextureKey(_modal_header, font_modal_header, 99999)
+ if modal_type ~= 3 then
+ ttk_modal_body = createTitleTextureKey(_modal_body, font_modal_body, 99999)
+ end
+
+ -- Tmp
+ modal_asset_id = math.max(1, math.min(5, modal_current_rarity))
+
+ if modal_type ~= 0 then
+ modal_sfx[modal_asset_id]:PlayStart()
+ end
+
+end
+
+function loadAssets()
+ config = loadConfig("Config.json")
+
+ for i = 1, 5 do
+ icon_players[i] = loadTexture(tostring(i).."P.png")
+ end
+
+ -- Tmp, to change with the new structure later
+ for i = 0, 4 do
+ modal_tx[i + 1] = loadTexture(tostring(i)..".png")
+ modal_sfx[i + 1] = loadSound(tostring(i)..".ogg", "soundeffect")
+ end
+ modal_tx_coin = loadTexture("Coin.png")
+ modal_sfx_coin = loadSound("Coin.ogg", "soundeffect")
+
+ font_modal_header = loadFontRenderer(84, "regular")
+ font_modal_body = loadFontRenderer(84, "regular")
+ font_modal_plate = loadFontRenderer(16, "regular")
+
+end
+
+function update()
+ if modal_counter <= modal_duration then
+ script_busy = true
+ modal_counter = modal_counter + (1000 * fps.deltaTime)
+ else
+ script_busy = false
+ modal_loopanim_counter = modal_loopanim_counter + (1000 * fps.deltaTime)
+ if modal_loopanim_counter >= modal_loopanim_duration then
+ modal_loopanim_counter = 0
+ end
+ end
+
+
+
+
+ -- Idea: If button press and not finished, directly set modal_counter to modal_duration and cut the appearing animation?
+end
+
+function draw()
+ icon_players[modal_current_player]:t2D_DisplayImage(0, 0)
+
+ tx_header = getTextTex(ttk_modal_header, false, false)
+
+ if modal_current_type == 0 then
+ -- Coin
+ modal_tx_coin:t2D_DisplayImage(0, 0)
+
+ tx_header:t2D_DisplayImage_AnchorCenter(960,180)
+ tx_body = getTextTex(ttk_modal_body, false, false)
+ tx_body:t2D_DisplayImage_AnchorCenter(960,490)
+ else
+ -- Others
+ modal_tx[modal_asset_id]:t2D_DisplayImage(0, 0)
+
+ tx_header:t2D_DisplayImage_AnchorCenter(960,180)
+
+ if modal_current_type == 1 then
+ -- Character
+ if modal_current_visual ~= nil then
+ modal_current_visual:t2D_DisplayImage(0,260)
+ end
+ tx_body = getTextTex(ttk_modal_body, false, false)
+ tx_body:t2D_DisplayImage_AnchorCenter(960,390)
+ elseif modal_current_type == 2 then
+ -- Puchichara
+ if modal_current_info.tx ~= nil then
+ modal_current_info.tx:t2D_DisplayImage_AnchorCenter(960,490)
+ end
+ tx_body = getTextTex(ttk_modal_body, false, false)
+ tx_body:t2D_DisplayImage_AnchorCenter(960,790)
+ elseif modal_current_type == 3 then
+ -- Nameplate Title
+ tx_title = getTextTex(ttk_modal_body, false, false)
+ modal_current_visual:DrawTitlePlate(960, 490, 255, modal_current_info.Value.nameplateInfo.iType, tx_title, modal_current_rarity, modal_current_info.Key)
+ elseif modal_current_type == 4 then
+ -- Song
+ if modal_current_visual ~= nil then
+ modal_current_visual:t2D_DisplayImage_AnchorCenter(960,490)
+ end
+ tx_body = getTextTex(ttk_modal_body, false, false)
+ tx_body:t2D_DisplayImage_AnchorCenter(960,790)
+ else
+ -- Custom modals for custom unlockables in the future??
+ tx_body = getTextTex(ttk_modal_body, false, false)
+ tx_body:t2D_DisplayImage_AnchorCenter(960,490)
+ end
+ end
+
+end
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/0.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/0.ogg
new file mode 100644
index 00000000..734d5a24
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/0.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/1.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/1.ogg
new file mode 100644
index 00000000..bac47223
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/1.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/2.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/2.ogg
new file mode 100644
index 00000000..8f35ada0
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/2.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/3.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/3.ogg
new file mode 100644
index 00000000..440ec490
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/3.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/4.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/4.ogg
new file mode 100644
index 00000000..9b8a3a6a
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/4.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/Coin.ogg b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/Coin.ogg
new file mode 100644
index 00000000..b36f8516
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Sounds/Coin.ogg differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/0.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/0.png
new file mode 100644
index 00000000..3936a468
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/0.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1.png
new file mode 100644
index 00000000..bbbd3f73
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1P.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1P.png
new file mode 100644
index 00000000..c307fec2
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/1P.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2.png
new file mode 100644
index 00000000..2c217c47
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2P.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2P.png
new file mode 100644
index 00000000..1f7b2f3b
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/2P.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3.png
new file mode 100644
index 00000000..fc87edf1
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3P.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3P.png
new file mode 100644
index 00000000..d397b201
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/3P.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4.png
new file mode 100644
index 00000000..0a0bee20
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4P.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4P.png
new file mode 100644
index 00000000..091f6b06
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/4P.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/5P.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/5P.png
new file mode 100644
index 00000000..58f5c6cd
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/5P.png differ
diff --git a/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/Coin.png b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/Coin.png
new file mode 100644
index 00000000..a98c33a4
Binary files /dev/null and b/OpenTaiko/System/Open-World Memories/Modules/Modal/Textures/Coin.png differ
diff --git a/OpenTaiko/src/Common/CConfigIni.cs b/OpenTaiko/src/Common/CConfigIni.cs
index 89fb3d1a..25cf118d 100644
--- a/OpenTaiko/src/Common/CConfigIni.cs
+++ b/OpenTaiko/src/Common/CConfigIni.cs
@@ -1173,7 +1173,6 @@ namespace TJAPlayer3 {
public bool bDanTowerHide;
public bool bTight;
- public bool bストイックモード;
public bool bIncludeSubfoldersOnRandomSelect;
public bool bOutputLogs;
public bool bDisplayDebugInfo;
@@ -2176,10 +2175,6 @@ namespace TJAPlayer3 {
sw.WriteLine($"; Blank time before music source to play. (ms)");
sw.WriteLine("{0}={1}", nameof(MusicPreTimeMs), MusicPreTimeMs);
sw.WriteLine();
- sw.WriteLine("; ストイックモード(0:OFF, 1:ON)");
- sw.WriteLine("; Stoic mode. (0:OFF, 1:ON)");
- sw.WriteLine("StoicMode={0}", this.bストイックモード ? 1 : 0);
- sw.WriteLine();
sw.WriteLine("; バッファ入力モード(0:OFF, 1:ON)");
sw.WriteLine("; Using Buffered input (0:OFF, 1:ON)");
sw.WriteLine("BufferedInput={0}", this.bBufferedInputs ? 1 : 0);
@@ -2911,10 +2906,7 @@ namespace TJAPlayer3 {
this.KeyboardSoundLevelIncrement = CConversion.n値を文字列から取得して範囲内に丸めて返す(str4, MinimumKeyboardSoundLevelIncrement, MaximumKeyboardSoundLevelIncrement, this.KeyboardSoundLevelIncrement);
} else if (str3.Equals(nameof(MusicPreTimeMs))) {
MusicPreTimeMs = int.Parse(str4);
- } else if (str3.Equals("StoicMode")) {
- this.bストイックモード = CConversion.bONorOFF(str4[0]);
- } else if (str3.Equals("AutoResultCapture")) // #25399 2011.6.9 yyagi
- {
+ } else if (str3.Equals("AutoResultCapture")) {
this.bIsAutoResultCapture = CConversion.bONorOFF(str4[0]);
} else if (str3.Equals(nameof(SendDiscordPlayingInformation))) {
SendDiscordPlayingInformation = CConversion.bONorOFF(str4[0]);
diff --git a/OpenTaiko/src/Common/Modal.cs b/OpenTaiko/src/Common/Modal.cs
index 8b6b00c9..52aa6888 100644
--- a/OpenTaiko/src/Common/Modal.cs
+++ b/OpenTaiko/src/Common/Modal.cs
@@ -1,154 +1,13 @@
-using System.Drawing;
-using FDK;
-using static TJAPlayer3.CActSelect曲リスト;
-
-namespace TJAPlayer3 {
+namespace TJAPlayer3 {
internal class Modal {
- public Modal(EModalType mt, int ra, params object[] re) {
+ public Modal(EModalType mt, int ra, params object?[] re) {
modalType = mt;
rarity = ra;
reference = re;
- _isSet = false;
- // TODO: Add an int (?) or string to find the Puchichara/Character/Song asset to display it
}
- public void tSetupModal() {
- CTexture[] arrRef;
-
- if (modalFormat == EModalFormat.Half)
- arrRef = TJAPlayer3.Tx.Modal_Half;
- else if (modalFormat == EModalFormat.Half_4P)
- arrRef = TJAPlayer3.Tx.Modal_Half_4P;
- else if (modalFormat == EModalFormat.Half_5P)
- arrRef = TJAPlayer3.Tx.Modal_Half_5P;
- else
- arrRef = TJAPlayer3.Tx.Modal_Full;
-
- if (modalType == EModalType.Coin)
- _box = arrRef[arrRef.Length - 1];
- else {
- int usedTex = Math.Max(0, Math.Min(arrRef.Length - 2, rarity));
- _box = arrRef[usedTex];
- }
-
- /*
- _boxRect = new Rectangle(
- (modalFormat == EModalFormat.Full || player == 0)
- ? 0
- : _box.szテクスチャサイズ.Width / 2,
- 0,
- (modalFormat == EModalFormat.Full)
- ? _box.szテクスチャサイズ.Width
- : _box.szテクスチャサイズ.Width / 2,
- _box.szテクスチャサイズ.Height);
- */
-
- _boxRect = new Rectangle(
- (modalFormat == EModalFormat.Full || player == 0) ? 0 : _box.szTextureSize.Width / 2,
- 0,
- (modalFormat == EModalFormat.Full) ? _box.szTextureSize.Width : _box.szTextureSize.Width / 2,
- _box.szTextureSize.Height / (((TJAPlayer3.ConfigIni.nPlayerCount - 1) / 2) + 1));
-
- tGenerateTextures();
-
- _isSet = true;
- }
-
- public void tDisplayModal() {
- if (_isSet == true) {
- _box?.t2D描画(_boxRect.Width * (player % 2), _boxRect.Height * (player / 2), _boxRect);
-
- int[] title_x;
- int[] title_y;
- int[] text_x;
- int[] text_y;
- int moveX;
- int moveY;
-
- if (modalFormat == EModalFormat.Full) {
- title_x = new int[] { TJAPlayer3.Skin.Modal_Title_Full[0] };
- title_y = new int[] { TJAPlayer3.Skin.Modal_Title_Full[1] };
-
- text_x = new int[] { TJAPlayer3.Skin.Modal_Text_Full[0] };
- text_y = new int[] { TJAPlayer3.Skin.Modal_Text_Full[1] };
-
- moveX = TJAPlayer3.Skin.Modal_Text_Full_Move[0];
- moveY = TJAPlayer3.Skin.Modal_Text_Full_Move[1];
- } else if (modalFormat == EModalFormat.Half) {
- title_x = TJAPlayer3.Skin.Modal_Title_Half_X;
- title_y = TJAPlayer3.Skin.Modal_Title_Half_Y;
-
- text_x = TJAPlayer3.Skin.Modal_Text_Half_X;
- text_y = TJAPlayer3.Skin.Modal_Text_Half_Y;
-
- moveX = TJAPlayer3.Skin.Modal_Text_Half_Move[0];
- moveY = TJAPlayer3.Skin.Modal_Text_Half_Move[1];
- } else if (modalFormat == EModalFormat.Half_4P) {
- title_x = TJAPlayer3.Skin.Modal_Title_Half_X_4P;
- title_y = TJAPlayer3.Skin.Modal_Title_Half_Y_4P;
-
- text_x = TJAPlayer3.Skin.Modal_Text_Half_X_4P;
- text_y = TJAPlayer3.Skin.Modal_Text_Half_Y_4P;
-
- moveX = TJAPlayer3.Skin.Modal_Text_Half_Move_4P[0];
- moveY = TJAPlayer3.Skin.Modal_Text_Half_Move_4P[1];
- } else// 5P
- {
- title_x = TJAPlayer3.Skin.Modal_Title_Half_X_5P;
- title_y = TJAPlayer3.Skin.Modal_Title_Half_Y_5P;
-
- text_x = TJAPlayer3.Skin.Modal_Text_Half_X_5P;
- text_y = TJAPlayer3.Skin.Modal_Text_Half_Y_5P;
-
- moveX = TJAPlayer3.Skin.Modal_Text_Half_Move_5P[0];
- moveY = TJAPlayer3.Skin.Modal_Text_Half_Move_5P[1];
- }
-
- /*
- Point[] Pos = new Point[]
- {
- (modalFormat == EModalFormat.Full) ? new Point(TJAPlayer3.Skin.Modal_Title_Full[0], TJAPlayer3.Skin.Modal_Title_Full[1]) : new Point(TJAPlayer3.Skin.Modal_Title_Half_X[player], TJAPlayer3.Skin.Modal_Title_Half_Y[player]), // title
- (modalFormat == EModalFormat.Full) ?
- new Point(TJAPlayer3.Skin.Modal_Text_Full[0] +(tTextCentered () ? TJAPlayer3.Skin.Modal_Text_Full_Move[0] : 0),
- TJAPlayer3.Skin.Modal_Text_Full[1] + (tTextCentered () ? TJAPlayer3.Skin.Modal_Text_Full_Move[1] : 0)) :
-
- new Point(TJAPlayer3.Skin.Modal_Text_Half_X[player] + (tTextCentered () ? TJAPlayer3.Skin.Modal_Text_Half_Move[0] : 0),
- TJAPlayer3.Skin.Modal_Text_Half_Y[player] + (tTextCentered () ? TJAPlayer3.Skin.Modal_Text_Half_Move[1] : 0)), // content
- };
- */
-
- Point[] Pos = new Point[]
- {
- new Point(title_x[player], title_y[player]),
- new Point(text_x[player] + (tTextCentered () ? moveX : 0),
- text_y[player] + (tTextCentered () ? moveY : 0)), // content
- };
-
- _ModalTitle?.t2D中心基準描画(Pos[0].X, Pos[0].Y);
- _ModalText?.t2D中心基準描画(Pos[1].X, Pos[1].Y);
-
- // Extra texture for Puchichara, Character and Titles next
- }
- }
-
- public void tPlayModalSfx() {
- if (modalType == EModalType.Coin)
- TJAPlayer3.Skin.soundModal[TJAPlayer3.Skin.soundModal.Length - 1].tPlay();
- else
- TJAPlayer3.Skin.soundModal[Math.Max(0, Math.Min(TJAPlayer3.Skin.soundModal.Length - 2, rarity))].tPlay();
- }
-
- public static void tInitModalFonts() {
- if (_pfModalContentHalf != null
- && _pfModalTitleHalf != null
- && _pfModalContentFull != null
- && _pfModalTitleFull != null)
- return;
-
- _pfModalContentHalf = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Modal_Font_ModalContentHalf_Size);
- _pfModalTitleHalf = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Modal_Font_ModalTitleHalf_Size);
- _pfModalContentFull = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Modal_Font_ModalContentFull_Size);
- _pfModalTitleFull = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.Modal_Font_ModalTitleFull_Size);
+ public void tRegisterModal(int player) {
+ TJAPlayer3.stage結果.lcModal.RegisterNewModal(player, rarity, modalType, reference);
}
#region [Enum definitions]
@@ -175,7 +34,7 @@ namespace TJAPlayer3 {
#region [Public variables]
// Coin number for coin; database/unlockable asset for puchichara, character and title; no effect on text, confirm
- public object[] reference;
+ public object?[] reference;
public int rarity;
public EModalType modalType;
@@ -186,87 +45,5 @@ namespace TJAPlayer3 {
#endregion
- #region [private]
-
- // Check if the text is vertically centered or slightly up (to let enough space for the unlocked unit texture)
- private bool tTextCentered() {
- if (modalType == EModalType.Coin)
- return true;
- return false;
- }
-
- // Generate the modal title and content text textures
- private void tGenerateTextures() {
- string modalKey = "MODAL_TITLE_COIN";
- switch (modalType) {
- case EModalType.Character:
- modalKey = "MODAL_TITLE_CHARA";
- break;
- case EModalType.Puchichara:
- modalKey = "MODAL_TITLE_PUCHI";
- break;
- case EModalType.Title:
- modalKey = "MODAL_TITLE_NAMEPLATE";
- break;
- case EModalType.Song:
- modalKey = "MODAL_TITLE_SONG";
- break;
- }
- TitleTextureKey _title = new TitleTextureKey(
- CLangManager.LangInstance.GetString(modalKey),
- (modalFormat == EModalFormat.Full)
- ? _pfModalTitleFull
- : _pfModalTitleHalf,
- Color.White,
- Color.Black,
- 1800);
-
- string content = "";
-
- if (modalType == EModalType.Coin) {
- content = CLangManager.LangInstance.GetString("MODAL_MESSAGE_COIN", reference[0].ToString(), TJAPlayer3.SaveFileInstances[player].data.Medals.ToString());
- //content = String.Format("+{0} {1} ({2}: {3})",
- // (int)reference[0],
- // CLangManager.LangInstance.GetString(306),
- // CLangManager.LangInstance.GetString(307),
- // TJAPlayer3.SaveFileInstances[player].data.Medals
- // );
- } else if (modalType == EModalType.Title) {
- content = ((string)reference[0]).RemoveTags();
- } else if (modalType == EModalType.Character) {
- content = ((string)reference[0]).RemoveTags();
- } else if (modalType == EModalType.Puchichara) {
- content = ((string)reference[0]).RemoveTags();
- } else if (modalType == EModalType.Song) {
- content = ((string)reference[0]).RemoveTags();
- }
-
- TitleTextureKey _content = new TitleTextureKey(
- content,
- (modalFormat == EModalFormat.Full)
- ? _pfModalContentFull
- : _pfModalContentHalf,
- Color.White,
- Color.Black,
- 1800);
-
- _ModalText = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(_content);
- _ModalTitle = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(_title);
- }
-
- private CTexture _box;
- private Rectangle _boxRect;
-
- private bool _isSet;
-
- private static CCachedFontRenderer _pfModalTitleHalf;
- private static CCachedFontRenderer _pfModalContentHalf;
- private static CCachedFontRenderer _pfModalTitleFull;
- private static CCachedFontRenderer _pfModalContentFull;
-
- private CTexture _ModalTitle;
- private CTexture _ModalText;
-
- #endregion
}
}
diff --git a/OpenTaiko/src/Common/ModalQueue.cs b/OpenTaiko/src/Common/ModalQueue.cs
index 40493c5b..8203a78b 100644
--- a/OpenTaiko/src/Common/ModalQueue.cs
+++ b/OpenTaiko/src/Common/ModalQueue.cs
@@ -5,41 +5,10 @@
_modalFormat = mf;
}
- // Add two modals (one per player) at the same time
- public void tAddModal(Modal mp1, Modal mp2, Modal mp3, Modal mp4, Modal mp5) {
- mp1.modalFormat = _modalFormat;
- mp2.modalFormat = _modalFormat;
- mp3.modalFormat = _modalFormat;
- mp4.modalFormat = _modalFormat;
- mp5.modalFormat = _modalFormat;
- mp1.player = 0;
- mp2.player = 1;
- mp3.player = 2;
- mp4.player = 3;
- mp5.player = 4;
- mp1.tSetupModal();
- mp2.tSetupModal();
- mp3.tSetupModal();
- mp4.tSetupModal();
- mp5.tSetupModal();
-
- if (mp1 != null)
- _modalQueues[0].Enqueue(mp1);
- if (mp2 != null)
- _modalQueues[1].Enqueue(mp2);
- if (mp3 != null)
- _modalQueues[2].Enqueue(mp3);
- if (mp4 != null)
- _modalQueues[3].Enqueue(mp4);
- if (mp5 != null)
- _modalQueues[4].Enqueue(mp5);
- }
-
// Add a single modal
public void tAddModal(Modal mp, int player) {
mp.modalFormat = _modalFormat;
mp.player = player;
- mp.tSetupModal();
if (mp != null && player >= 0 && player < TJAPlayer3.ConfigIni.nPlayerCount)
_modalQueues[player].Enqueue(mp);
@@ -51,6 +20,19 @@
return null;
}
+ // 1P => 2P => 3P => 4P => 5P
+ public Modal? tPopModalInOrder() {
+ for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) {
+ if (!tIsQueueEmpty(i)) {
+ Modal? _m = _modalQueues[i].Dequeue();
+ _m?.tRegisterModal(i + 1);
+ return _m;
+ }
+
+ }
+ return null;
+ }
+
public bool tIsQueueEmpty(int player) {
if (player < 0 || player >= TJAPlayer3.ConfigIni.nPlayerCount)
return true;
diff --git a/OpenTaiko/src/Common/TJAPlayer3.cs b/OpenTaiko/src/Common/TJAPlayer3.cs
index d70e0b55..05e6372a 100644
--- a/OpenTaiko/src/Common/TJAPlayer3.cs
+++ b/OpenTaiko/src/Common/TJAPlayer3.cs
@@ -2391,9 +2391,6 @@ for (int i = 0; i < 3; i++) {
}
#endif
- // Init Modal fonts once config.ini parsing is done
- // Moved here to reference Skin values.
- Modal.tInitModalFonts();
//---------------------
#endregion
//-----------
@@ -2622,6 +2619,7 @@ for (int i = 0; i < 3; i++) {
stage曲読み込み = new CStage曲読み込み();
stage演奏ドラム画面 = new CStage演奏ドラム画面();
stage結果 = new CStage結果();
+ stage結果.RefreshSkin();
stageChangeSkin = new CStageChangeSkin();
stage終了 = new CStage終了();
NamePlate = new CNamePlate();
@@ -3063,6 +3061,7 @@ for (int i = 0; i < 3; i++) {
actTextConsole.CreateManagedResource();
actTextConsole.CreateUnmanagedResource();
TJAPlayer3.NamePlate.RefleshSkin();
+ TJAPlayer3.stage結果.RefreshSkin();
CActSelectPopupMenu.RefleshSkin();
CActSelect段位リスト.RefleshSkin();
}
diff --git a/OpenTaiko/src/Databases/DBNameplateUnlockables.cs b/OpenTaiko/src/Databases/DBNameplateUnlockables.cs
index ad144d80..6a0d9885 100644
--- a/OpenTaiko/src/Databases/DBNameplateUnlockables.cs
+++ b/OpenTaiko/src/Databases/DBNameplateUnlockables.cs
@@ -78,8 +78,9 @@ namespace TJAPlayer3 {
mq.tAddModal(
new Modal(
Modal.EModalType.Title,
- HRarity.tRarityToModalInt(item.Value.rarity),
- item.Value.nameplateInfo.cld.GetString("") // Cannot be null on database
+ HRarity.tRarityToLangInt(item.Value.rarity),
+ item,
+ TJAPlayer3.NamePlate.lcNamePlate
),
_player);
diff --git a/OpenTaiko/src/Databases/DBSongUnlockables.cs b/OpenTaiko/src/Databases/DBSongUnlockables.cs
index 5e1bc979..cf5e965a 100644
--- a/OpenTaiko/src/Databases/DBSongUnlockables.cs
+++ b/OpenTaiko/src/Databases/DBSongUnlockables.cs
@@ -68,10 +68,11 @@ namespace TJAPlayer3 {
foreach (KeyValuePair item in data) {
string _npvKey = item.Key;
- string? _songName = CSongDict.tGetNodeFromID(_npvKey)?.ldTitle.GetString("");
- string _songSubtitle = CSongDict.tGetNodeFromID(_npvKey)?.ldSubtitle.GetString("") ?? "";
+ //string? _songName = CSongDict.tGetNodeFromID(_npvKey)?.ldTitle.GetString("");
+ //string _songSubtitle = CSongDict.tGetNodeFromID(_npvKey)?.ldSubtitle.GetString("") ?? "";
+ CSongListNode? _node = CSongDict.tGetNodeFromID(_npvKey);
- if (!_sf.Contains(_npvKey) && _songName != null) {
+ if (!_sf.Contains(_npvKey)) { // && _songName != null) {
var _fulfilled = item.Value.unlockConditions.tConditionMetWrapper(player, DBUnlockables.CUnlockConditions.EScreen.Internal).Item1;
if (_fulfilled) {
@@ -84,8 +85,8 @@ namespace TJAPlayer3 {
new Modal(
Modal.EModalType.Song,
HRarity.tRarityToModalInt(item.Value.rarity),
- _songName,
- _songSubtitle
+ _node,
+ TJAPlayer3.stageSongSelect.actPreimageパネル.tGenerateAndGetPreimage(_node?.arスコア[0] ?? null)
),
_player);
diff --git a/OpenTaiko/src/Lua/CLuaScript.cs b/OpenTaiko/src/Lua/CLuaScript.cs
index d1ac9023..625a0c33 100644
--- a/OpenTaiko/src/Lua/CLuaScript.cs
+++ b/OpenTaiko/src/Lua/CLuaScript.cs
@@ -35,7 +35,7 @@ namespace TJAPlayer3 {
private List listDisposables = new List();
- protected bool Avaibale {
+ protected bool Available {
get {
return bLoadedAssets && !bDisposed && !bCrashed;
}
@@ -148,6 +148,10 @@ namespace TJAPlayer3 {
return fontRenderer;
}
+ private string GetLocalizedString(string key, params object?[] args) {
+ return CLangManager.LangInstance.GetString(key, args);
+ }
+
private TitleTextureKey CreateTitleTextureKey(string title, CCachedFontRenderer fontRenderer, int maxSize, Color? color = null, Color? edgeColor = null) {
return new TitleTextureKey(title, fontRenderer, color ?? Color.White, edgeColor ?? Color.Black, maxSize);
}
@@ -184,6 +188,7 @@ namespace TJAPlayer3 {
LuaScript["getText"] = getText;
LuaScript["getNumArray"] = getNumArray;
LuaScript["getTextArray"] = getTextArray;
+ LuaScript["getLocalizedString"] = GetLocalizedString;
LuaScript["displayDanPlate"] = CActSelect段位リスト.tDisplayDanPlate;
LuaScript["debugLog"] = DebugLog;
diff --git a/OpenTaiko/src/Lua/Scripts/CLuaModalScript.cs b/OpenTaiko/src/Lua/Scripts/CLuaModalScript.cs
new file mode 100644
index 00000000..b3d0e26e
--- /dev/null
+++ b/OpenTaiko/src/Lua/Scripts/CLuaModalScript.cs
@@ -0,0 +1,47 @@
+using NLua;
+
+namespace TJAPlayer3 {
+ internal class CLuaModalScript : CLuaScript {
+ private LuaFunction lfRegisterModal;
+ private LuaFunction lfAnimationFinished;
+ private LuaFunction lfUpdate;
+ private LuaFunction lfDraw;
+
+ public CLuaModalScript(string dir, string? texturesDir = null, string? soundsDir = null, bool loadAssets = true) : base(dir, texturesDir, soundsDir, loadAssets) {
+
+ lfRegisterModal = (LuaFunction)LuaScript["registerNewModal"];
+ lfAnimationFinished = (LuaFunction)LuaScript["isAnimationFinished"];
+ lfUpdate = (LuaFunction)LuaScript["update"];
+ lfDraw = (LuaFunction)LuaScript["draw"];
+ }
+
+ // Function to retrieve if the currently playing modal animation (etc) finished playing, allowing to send the next modal
+ public bool AnimationFinished() {
+ if (!Available) return false;
+ bool result = (bool)RunLuaCode(lfAnimationFinished)[0];
+ return result;
+ }
+
+ // Informations of the newly added modal are initialized here
+ public void RegisterNewModal(int player, int rarity, Modal.EModalType modalType, params object?[] args) {
+ if (!Available) return;
+
+ object[] newParams = new object[] { player, rarity, (int)modalType };
+ if (args != null) newParams = newParams.Concat((object[])args).ToArray();
+ RunLuaCode(lfRegisterModal, newParams);
+ }
+
+ // Handle inputs here (if necessary, like to add a shortcut to accelerate the animation etc
+ public void Update(params object[] args) {
+ if (!Available) return;
+
+ RunLuaCode(lfUpdate, args);
+ }
+
+ public void Draw(params object[] args) {
+ if (!Available) return;
+
+ RunLuaCode(lfDraw, args);
+ }
+ }
+}
diff --git a/OpenTaiko/src/Lua/Scripts/CLuaNamePlateScript.cs b/OpenTaiko/src/Lua/Scripts/CLuaNamePlateScript.cs
index 7a5a9179..62944541 100644
--- a/OpenTaiko/src/Lua/Scripts/CLuaNamePlateScript.cs
+++ b/OpenTaiko/src/Lua/Scripts/CLuaNamePlateScript.cs
@@ -20,39 +20,41 @@ namespace TJAPlayer3 {
}
public int GetCharaOffset() {
- if (!Avaibale) return 0;
+ if (!Available) return 0;
double result = (double)RunLuaCode(lfGetCharaOffset)[0];
return (int)result;
}
public void SetInfos(int player, string name, string title, string dan, SaveFile.Data data) {
- if (!Avaibale) return;
+ if (!Available) return;
RunLuaCode(lfSetInfos, player, name ?? "", title ?? "", dan ?? "", data);
}
+ // For My Room
public void DrawDan(int x, int y, int opacity, int danGrade, CTexture titleTex) {
- if (!Avaibale) return;
+ if (!Available) return;
RunLuaCode(lfDrawDan, x, y, opacity, danGrade, titleTex);
}
+ // For My Room
public void DrawTitlePlate(int x, int y, int opacity, int type, CTexture titleTex, int rarity, int nameplateId) {
- if (!Avaibale) return;
+ if (!Available) return;
RunLuaCode(lfDrawTitlePlate, x, y, opacity, type, titleTex, rarity, nameplateId);
}
public void Update(params object[] args) {
- if (!Avaibale) return;
+ if (!Available) return;
RunLuaCode(lfUpdate, args);
}
public void Draw(int x, int y, int opacity, int player, int side) {
- if (!Avaibale) return;
+ if (!Available) return;
RunLuaCode(lfDraw, x, y, opacity, player, side);
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenTaiko/src/Stages/01.StartUp/CCharacter.cs b/OpenTaiko/src/Stages/01.StartUp/CCharacter.cs
index ad5ba115..abce4929 100644
--- a/OpenTaiko/src/Stages/01.StartUp/CCharacter.cs
+++ b/OpenTaiko/src/Stages/01.StartUp/CCharacter.cs
@@ -4,6 +4,7 @@
public DBCharacter.CharacterEffect effect;
public DBUnlockables.CUnlockConditions unlock;
public string _path;
+ public int _idx;
public float GetEffectCoinMultiplier() {
float mult = 1f;
@@ -31,7 +32,8 @@
new Modal(
Modal.EModalType.Character,
HRarity.tRarityToModalInt(metadata.Rarity),
- metadata.tGetName()
+ this,
+ TJAPlayer3.Tx.Characters_Heya_Render[_idx]
),
_player);
@@ -43,8 +45,9 @@
TJAPlayer3.SaveFileInstances[player].tApplyHeyaChanges();
}
- public CCharacter(string path) {
+ public CCharacter(string path, int i) {
_path = path;
+ _idx = i;
// Character metadata
if (File.Exists($@"{path}{Path.DirectorySeparatorChar}Metadata.json"))
diff --git a/OpenTaiko/src/Stages/01.StartUp/CPuchichara.cs b/OpenTaiko/src/Stages/01.StartUp/CPuchichara.cs
index 109020e3..3eeb5e93 100644
--- a/OpenTaiko/src/Stages/01.StartUp/CPuchichara.cs
+++ b/OpenTaiko/src/Stages/01.StartUp/CPuchichara.cs
@@ -38,7 +38,7 @@ namespace TJAPlayer3 {
new Modal(
Modal.EModalType.Puchichara,
HRarity.tRarityToModalInt(metadata.Rarity),
- metadata.tGetName()
+ this
),
_player);
diff --git a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs
index 022a0e3a..b563c560 100644
--- a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs
+++ b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs
@@ -1317,7 +1317,7 @@ namespace TJAPlayer3 {
}
}
- Characters[i] = new CCharacter(charaDirs[i]);
+ Characters[i] = new CCharacter(charaDirs[i], i);
}
diff --git a/OpenTaiko/src/Stages/05.SongSelect/CActSelectPreimageパネル.cs b/OpenTaiko/src/Stages/05.SongSelect/CActSelectPreimageパネル.cs
index ce34236b..017dd8b3 100644
--- a/OpenTaiko/src/Stages/05.SongSelect/CActSelectPreimageパネル.cs
+++ b/OpenTaiko/src/Stages/05.SongSelect/CActSelectPreimageパネル.cs
@@ -1,7 +1,4 @@
-using System.Diagnostics;
-using FDK;
-using Silk.NET.Maths;
-using Rectangle = System.Drawing.Rectangle;
+using FDK;
namespace TJAPlayer3 {
internal class CActSelectPreimageパネル : CActivity {
@@ -10,299 +7,158 @@ namespace TJAPlayer3 {
public CActSelectPreimageパネル() {
base.IsDeActivated = true;
}
- public void t選択曲が変更された() {
- this.ct遅延表示 = new CCounter(-TJAPlayer3.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms, 100, 1, TJAPlayer3.Timer);
- this.b新しいプレビューファイルを読み込んだ = false;
+ public void tSelectedSongChanged() {
+ this.ctDelayedDisplay = new CCounter(-TJAPlayer3.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms, 100, 1, TJAPlayer3.Timer);
+ this.bNewPreimageLoaded = false;
}
// CActivity 実装
public override void Activate() {
- this.n本体X = 8;
- this.n本体Y = 0x39;
- this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;
- this.str現在のファイル名 = "";
- this.b新しいプレビューファイルを読み込んだ = false;
- this.txプレビュー画像 = null;
- this.n前回描画したフレーム番号 = -1;
- this.b動画フレームを作成した = false;
- this.pAVIBmp = IntPtr.Zero;
- this.tプレビュー画像_動画の変更();
+ this.rCurrentlyDisplayedPreimage = this.txDefaultPreimage;
+ this.strCurrentFilename = "";
+ this.bNewPreimageLoaded = false;
+ this.txPreimage = null;
+ this.tUpdatePreimage(TJAPlayer3.stageSongSelect.r現在選択中のスコア);
base.Activate();
}
public override void DeActivate() {
- TJAPlayer3.tテクスチャの解放(ref this.txプレビュー画像);
- this.ct登場アニメ用 = null;
- this.ct遅延表示 = null;
+ TJAPlayer3.tテクスチャの解放(ref this.txPreimage);
+ this.ctApparitionAnimation = null;
+ this.ctDelayedDisplay = null;
base.DeActivate();
}
public override void CreateManagedResource() {
- this.txパネル本体 = TJAPlayer3.tテクスチャの生成(CSkin.Path(@$"Graphics{Path.DirectorySeparatorChar}5_preimage panel.png"), false);
- this.txセンサ = TJAPlayer3.tテクスチャの生成(CSkin.Path(@$"Graphics{Path.DirectorySeparatorChar}5_sensor.png"), false);
- //this.txセンサ光 = CDTXMania.tテクスチャの生成( CSkin.Path( @$"Graphics{Path.DirectorySeparatorChar}5_sensor light.png" ), false );
- this.txプレビュー画像がないときの画像 = TJAPlayer3.tテクスチャの生成(CSkin.Path(@$"Graphics{Path.DirectorySeparatorChar}3_SongSelect{Path.DirectorySeparatorChar}PreImageDefault.png"), false);
+ this.txDefaultPreimage = TJAPlayer3.tテクスチャの生成(CSkin.Path(@$"Graphics{Path.DirectorySeparatorChar}3_SongSelect{Path.DirectorySeparatorChar}PreImageDefault.png"), false);
base.CreateManagedResource();
}
public override void ReleaseManagedResource() {
- TJAPlayer3.tテクスチャの解放(ref this.txパネル本体);
- TJAPlayer3.tテクスチャの解放(ref this.txセンサ);
- TJAPlayer3.tテクスチャの解放(ref this.txセンサ光);
- TJAPlayer3.tテクスチャの解放(ref this.txプレビュー画像がないときの画像);
+
+ TJAPlayer3.tテクスチャの解放(ref this.txDefaultPreimage);
base.ReleaseManagedResource();
}
public override int Draw() {
if (!base.IsDeActivated) {
if (base.IsFirstDraw) {
- this.ct登場アニメ用 = new CCounter(0, 100, 5, TJAPlayer3.Timer);
- this.ctセンサ光 = new CCounter(0, 100, 30, TJAPlayer3.Timer);
- this.ctセンサ光.CurrentValue = 70;
+ this.ctApparitionAnimation = new CCounter(0, 100, 5, TJAPlayer3.Timer);
base.IsFirstDraw = false;
}
- this.ct登場アニメ用.Tick();
- this.ctセンサ光.TickLoop();
- if ((!TJAPlayer3.stageSongSelect.bCurrentlyScrolling && (this.ct遅延表示 != null)) && this.ct遅延表示.IsTicked) {
- this.ct遅延表示.Tick();
- if ((this.ct遅延表示.CurrentValue >= 0) && this.b新しいプレビューファイルをまだ読み込んでいない) {
- this.tプレビュー画像_動画の変更();
+ this.ctApparitionAnimation.Tick();
+ if ((!TJAPlayer3.stageSongSelect.bCurrentlyScrolling && (this.ctDelayedDisplay != null)) && this.ctDelayedDisplay.IsTicked) {
+ this.ctDelayedDisplay.Tick();
+ if ((this.ctDelayedDisplay.CurrentValue >= 0) && this.bNewPreimageStillLoading) {
+ this.tUpdatePreimage(TJAPlayer3.stageSongSelect.r現在選択中のスコア);
TJAPlayer3.Timer.Update();
- this.ct遅延表示.NowTime = TJAPlayer3.Timer.NowTime;
- this.b新しいプレビューファイルを読み込んだ = true;
- } else if (this.ct遅延表示.IsEnded && this.ct遅延表示.IsTicked) {
- this.ct遅延表示.Stop();
+ this.ctDelayedDisplay.NowTime = TJAPlayer3.Timer.NowTime;
+ this.bNewPreimageLoaded = true;
+ } else if (this.ctDelayedDisplay.IsEnded && this.ctDelayedDisplay.IsTicked) {
+ this.ctDelayedDisplay.Stop();
}
}
- this.t描画処理_パネル本体();
- this.t描画処理_プレビュー画像();
+ this.tDisplayPreimage();
}
return 0;
}
+ public CTexture? tGenerateAndGetPreimage(Cスコア? cScoreInst) {
+ this.tUpdatePreimage(cScoreInst);
+ return tGetPreimageTextureResized();
+ }
+
+ public CTexture? tGetPreimageTextureResized() {
+
+
+ if (this.rCurrentlyDisplayedPreimage != null) {
+
+ int width = TJAPlayer3.Skin.SongSelect_Preimage_Size[0];
+ int height = TJAPlayer3.Skin.SongSelect_Preimage_Size[1];
+
+ float xRatio = width / (float)this.rCurrentlyDisplayedPreimage.sz画像サイズ.Width;
+ float yRatio = height / (float)this.rCurrentlyDisplayedPreimage.sz画像サイズ.Height;
+
+ this.rCurrentlyDisplayedPreimage.Opacity = 255;
+ this.rCurrentlyDisplayedPreimage.vcScaleRatio.X = xRatio;
+ this.rCurrentlyDisplayedPreimage.vcScaleRatio.Y = xRatio;
+
+ }
+ return rCurrentlyDisplayedPreimage;
+ }
// その他
#region [ private ]
//-----------------
- private bool b動画フレームを作成した;
- private CCounter ctセンサ光;
- private CCounter ct遅延表示;
- private CCounter ct登場アニメ用;
- private int n前回描画したフレーム番号;
- private int n本体X;
- private int n本体Y;
- private IntPtr pAVIBmp;
- private readonly Rectangle rcセンサ光 = new Rectangle(0, 0xc0, 0x40, 0x40);
- private readonly Rectangle rcセンサ本体下半分 = new Rectangle(0x40, 0, 0x40, 0x80);
- private readonly Rectangle rcセンサ本体上半分 = new Rectangle(0, 0, 0x40, 0x80);
- private CTexture r表示するプレビュー画像;
- private string str現在のファイル名;
- private CTexture txセンサ;
- private CTexture txセンサ光;
- private CTexture txパネル本体;
- private CTexture txプレビュー画像;
- private CTexture txプレビュー画像がないときの画像;
- private bool b新しいプレビューファイルを読み込んだ;
- private bool b新しいプレビューファイルをまだ読み込んでいない {
+ private CCounter ctDelayedDisplay;
+ private CCounter ctApparitionAnimation;
+ private CTexture rCurrentlyDisplayedPreimage;
+ private string strCurrentFilename;
+ private CTexture txPreimage;
+ private CTexture txDefaultPreimage;
+ private bool bNewPreimageLoaded;
+ private bool bNewPreimageStillLoading {
get {
- return !this.b新しいプレビューファイルを読み込んだ;
+ return !this.bNewPreimageLoaded;
}
set {
- this.b新しいプレビューファイルを読み込んだ = !value;
+ this.bNewPreimageLoaded = !value;
}
}
- private void tプレビュー画像_動画の変更() {
- this.pAVIBmp = IntPtr.Zero;
- if (!TJAPlayer3.ConfigIni.bストイックモード) {
- if (this.tプレビュー画像の指定があれば構築する()) {
- return;
- }
+ private void tUpdatePreimage(Cスコア? cScoreInst) {
+ if (cScoreInst != null && this.tBuildPreimageAssets(cScoreInst)) {
+ return;
}
- this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;
- this.str現在のファイル名 = "";
- }
- private bool tプレビュー画像の指定があれば構築する() {
- Cスコア cスコア = TJAPlayer3.stageSongSelect.r現在選択中のスコア;
- if ((cスコア == null) || string.IsNullOrEmpty(cスコア.譜面情報.Preimage)) return false;
- string str = ((!Path.IsPathRooted(cスコア.譜面情報.Preimage)) ? cスコア.ファイル情報.フォルダの絶対パス : "") + cスコア.譜面情報.Preimage;
- if (!str.Equals(this.str現在のファイル名)) {
- TJAPlayer3.tテクスチャの解放(ref this.txプレビュー画像);
- this.str現在のファイル名 = str;
- if (!File.Exists(this.str現在のファイル名)) {
- Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { this.str現在のファイル名 });
+ // If no preimage or preimage not found
+ this.rCurrentlyDisplayedPreimage = this.txDefaultPreimage;
+ this.strCurrentFilename = "";
+ }
+ private bool tBuildPreimageAssets(Cスコア cScoreInst) {
+ if ((cScoreInst == null) || string.IsNullOrEmpty(cScoreInst.譜面情報.Preimage)) return false;
+
+ string str = ((!Path.IsPathRooted(cScoreInst.譜面情報.Preimage)) ? cScoreInst.ファイル情報.フォルダの絶対パス : "") + cScoreInst.譜面情報.Preimage;
+ if (!str.Equals(this.strCurrentFilename)) {
+ TJAPlayer3.tテクスチャの解放(ref this.txPreimage);
+ this.strCurrentFilename = str;
+ if (!File.Exists(this.strCurrentFilename)) {
+ LogNotification.PopWarning("Preimage not found ({0})".SafeFormat(this.strCurrentFilename));
return false;
}
- this.txプレビュー画像 = TJAPlayer3.tテクスチャの生成(this.str現在のファイル名, false);
- if (this.txプレビュー画像 != null) {
- this.r表示するプレビュー画像 = this.txプレビュー画像;
+ this.txPreimage = TJAPlayer3.tテクスチャの生成(this.strCurrentFilename, false);
+ if (this.txPreimage != null) {
+ this.rCurrentlyDisplayedPreimage = this.txPreimage;
} else {
- this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;
+ this.rCurrentlyDisplayedPreimage = this.txDefaultPreimage;
}
}
return true;
}
- ///
- /// 一時的に使用禁止。
- ///
- private void t描画処理_ジャンル文字列() {
- CSongListNode c曲リストノード = TJAPlayer3.stageSongSelect.rNowSelectedSong;
- Cスコア cスコア = TJAPlayer3.stageSongSelect.r現在選択中のスコア;
- if ((c曲リストノード != null) && (cスコア != null)) {
- string str = "";
- switch (c曲リストノード.eノード種別) {
- case CSongListNode.ENodeType.SCORE:
- if ((c曲リストノード.strジャンル == null) || (c曲リストノード.strジャンル.Length <= 0)) {
- if ((cスコア.譜面情報.ジャンル != null) && (cスコア.譜面情報.ジャンル.Length > 0)) {
- str = cスコア.譜面情報.ジャンル;
- }
-#if false // #32644 2013.12.21 yyagi "Unknown"なジャンル表示を削除。DTX/BMSなどの種別表示もしない。
- else
- {
- switch( cスコア.譜面情報.曲種別 )
- {
- case CDTX.E種別.DTX:
- str = "DTX";
- break;
- case CDTX.E種別.GDA:
- str = "GDA";
- break;
+ private void tDisplayPreimage() {
+ if (!TJAPlayer3.stageSongSelect.bCurrentlyScrolling && (((this.ctDelayedDisplay != null) && (this.ctDelayedDisplay.CurrentValue > 0)) && !this.bNewPreimageStillLoading)) {
- case CDTX.E種別.G2D:
- str = "G2D";
- break;
-
- case CDTX.E種別.BMS:
- str = "BMS";
- break;
-
- case CDTX.E種別.BME:
- str = "BME";
- break;
- }
- str = "Unknown";
- }
-#endif
- break;
- }
- str = c曲リストノード.strジャンル;
- break;
-
- case CSongListNode.ENodeType.SCORE_MIDI:
- str = "MIDI";
- break;
-
- case CSongListNode.ENodeType.BOX:
- str = "MusicBox";
- break;
-
- case CSongListNode.ENodeType.BACKBOX:
- str = "BackBox";
- break;
-
- case CSongListNode.ENodeType.RANDOM:
- str = "Random";
- break;
-
- default:
- str = "Unknown";
- break;
- }
- TJAPlayer3.actTextConsole.tPrint(this.n本体X + 0x12, this.n本体Y - 1, CTextConsole.EFontType.CyanSlim, str);
- }
- }
- private void t描画処理_センサ光() {
- int num = (int)this.ctセンサ光.CurrentValue;
- if (num < 12) {
- int x = this.n本体X + 0xcc;
- int y = this.n本体Y + 0x7b;
- if (this.txセンサ光 != null) {
- this.txセンサ光.vcScaleRatio = new Vector3D(1f, 1f, 1f);
- this.txセンサ光.Opacity = 0xff;
- this.txセンサ光.t2D描画(x, y, new Rectangle((num % 4) * 0x40, (num / 4) * 0x40, 0x40, 0x40));
- }
- } else if (num < 0x18) {
- int num4 = num - 11;
- double num5 = ((double)num4) / 11.0;
- double num6 = 1.0 + (num5 * 0.5);
- int num7 = (int)(64.0 * num6);
- int num8 = (int)(64.0 * num6);
- int num9 = ((this.n本体X + 0xcc) + 0x20) - (num7 / 2);
- int num10 = ((this.n本体Y + 0x7b) + 0x20) - (num8 / 2);
- if (this.txセンサ光 != null) {
- this.txセンサ光.vcScaleRatio = new Vector3D((float)num6, (float)num6, 1f);
- this.txセンサ光.Opacity = (int)(255.0 * (1.0 - num5));
- this.txセンサ光.t2D描画(num9, num10, this.rcセンサ光);
- }
- }
- }
- private void t描画処理_センサ本体() {
- int x = this.n本体X + 0xcd;
- int y = this.n本体Y - 4;
- if (this.txセンサ != null) {
- this.txセンサ.t2D描画(x, y, this.rcセンサ本体上半分);
- y += 0x80;
- this.txセンサ.t2D描画(x, y, this.rcセンサ本体下半分);
- }
- }
- private void t描画処理_パネル本体() {
- if (this.ct登場アニメ用.IsEnded || (this.txパネル本体 != null)) {
- this.n本体X = 16;
- this.n本体Y = 86;
- } else {
- double num = ((double)this.ct登場アニメ用.CurrentValue) / 100.0;
- double num2 = Math.Cos((1.5 + (0.5 * num)) * Math.PI);
- this.n本体X = 8;
- if (this.txパネル本体 != null)
- this.n本体Y = 0x39 - ((int)(this.txパネル本体.sz画像サイズ.Height * (1.0 - (num2 * num2))));
- else
- this.n本体Y = 8;
- }
- if (this.txパネル本体 != null) {
- this.txパネル本体.t2D描画(this.n本体X, this.n本体Y);
- }
- }
- private unsafe void t描画処理_プレビュー画像() {
- if (!TJAPlayer3.stageSongSelect.bCurrentlyScrolling && (((this.ct遅延表示 != null) && (this.ct遅延表示.CurrentValue > 0)) && !this.b新しいプレビューファイルをまだ読み込んでいない)) {
- int x = this.n本体X + 0x12;
- int y = this.n本体Y + 0x10;
- float num3 = ((float)this.ct遅延表示.CurrentValue) / 100f;
+ float num3 = ((float)this.ctDelayedDisplay.CurrentValue) / 100f;
float num4 = 0.9f + (0.1f * num3);
- if (this.r表示するプレビュー画像 != null) {
- /*
- int width = this.r表示するプレビュー画像.sz画像サイズ.Width;
- int height = this.r表示するプレビュー画像.sz画像サイズ.Height;
- if( width > 400 )
- {
- width = 400;
- }
- if( height > 400 )
- {
- height = 400;
- }
- */
- // Placeholder
+ if (this.rCurrentlyDisplayedPreimage != null) {
+
int width = TJAPlayer3.Skin.SongSelect_Preimage_Size[0];
int height = TJAPlayer3.Skin.SongSelect_Preimage_Size[1];
- float xRatio = width / (float)this.r表示するプレビュー画像.sz画像サイズ.Width;
- float yRatio = height / (float)this.r表示するプレビュー画像.sz画像サイズ.Height;
+ float xRatio = width / (float)this.rCurrentlyDisplayedPreimage.sz画像サイズ.Width;
+ float yRatio = height / (float)this.rCurrentlyDisplayedPreimage.sz画像サイズ.Height;
- x += (400 - ((int)(width * num4))) / 2;
- y += (400 - ((int)(height * num4))) / 2;
+ this.rCurrentlyDisplayedPreimage.Opacity = (int)(255f * num3);
+ this.rCurrentlyDisplayedPreimage.vcScaleRatio.X = num4 * xRatio;
+ this.rCurrentlyDisplayedPreimage.vcScaleRatio.Y = num4 * xRatio;
- this.r表示するプレビュー画像.Opacity = (int)(255f * num3);
- this.r表示するプレビュー画像.vcScaleRatio.X = num4 * xRatio;
- this.r表示するプレビュー画像.vcScaleRatio.Y = num4 * xRatio;
-
- // this.r表示するプレビュー画像.t2D描画( x + 22, y + 12, new Rectangle( 0, 0, width, height ) );
-
- // Temporary addition
- this.r表示するプレビュー画像.t2D拡大率考慮中央基準描画(TJAPlayer3.Skin.SongSelect_Preimage[0], TJAPlayer3.Skin.SongSelect_Preimage[1]);
+ this.rCurrentlyDisplayedPreimage.t2D拡大率考慮中央基準描画(TJAPlayer3.Skin.SongSelect_Preimage[0], TJAPlayer3.Skin.SongSelect_Preimage[1]);
}
}
}
+
+
+
//-----------------
#endregion
}
diff --git a/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs b/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs
index 74194338..0693a61f 100644
--- a/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs
+++ b/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs
@@ -209,7 +209,7 @@ namespace TJAPlayer3 {
this.ctOldBGScroll = new CCounter(0, (int)(txOldGenreBack.szTextureSize.Width * oldScale), 30, TJAPlayer3.Timer);
this.ctOldBGScroll.CurrentValue = Math.Min(scroll, (int)(txOldGenreBack.szTextureSize.Width * oldScale));
- this.actPreimageパネル.t選択曲が変更された();
+ this.actPreimageパネル.tSelectedSongChanged();
this.actPresound.t選択曲が変更された();
this.act演奏履歴パネル.t選択曲が変更された();
this.actステータスパネル.t選択曲が変更された();
@@ -1226,7 +1226,7 @@ namespace TJAPlayer3 {
//private CActFIFOBlack actFOtoNowLoading;
public CActFIFOStart actFOtoNowLoading;
private CActSelectInformation actInformation;
- private CActSelectPreimageパネル actPreimageパネル;
+ public CActSelectPreimageパネル actPreimageパネル;
public CActSelectPresound actPresound;
private CActオプションパネル actオプションパネル;
private CActSelectステータスパネル actステータスパネル;
diff --git a/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs b/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs
index 1da86601..c68e738c 100644
--- a/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs
+++ b/OpenTaiko/src/Stages/07.Game/CStage演奏画面共通.cs
@@ -2842,7 +2842,7 @@ namespace TJAPlayer3 {
protected abstract void t進行描画_AVI();
protected void t進行描画_AVI(int x, int y) {
- if (((base.ePhaseID != CStage.EPhase.Game_STAGE_FAILED) && (base.ePhaseID != CStage.EPhase.Game_STAGE_FAILED_FadeOut)) && (!TJAPlayer3.ConfigIni.bストイックモード && TJAPlayer3.ConfigIni.bEnableAVI)) {
+ if (((base.ePhaseID != CStage.EPhase.Game_STAGE_FAILED) && (base.ePhaseID != CStage.EPhase.Game_STAGE_FAILED_FadeOut)) && TJAPlayer3.ConfigIni.bEnableAVI) {
this.actAVI.t進行描画(x, y);
}
}
diff --git a/OpenTaiko/src/Stages/08.Result/CStage結果.cs b/OpenTaiko/src/Stages/08.Result/CStage結果.cs
index b4052ef7..39cc24d9 100644
--- a/OpenTaiko/src/Stages/08.Result/CStage結果.cs
+++ b/OpenTaiko/src/Stages/08.Result/CStage結果.cs
@@ -7,6 +7,16 @@ using static TJAPlayer3.CActSelect曲リスト;
namespace TJAPlayer3 {
internal class CStage結果 : CStage {
+ // Modals Lua management
+
+ public CLuaModalScript lcModal { get; private set; }
+
+ public void RefreshSkin() {
+ lcModal?.Dispose();
+ lcModal = new CLuaModalScript(CSkin.Path("Modules/Modal"));
+
+ }
+
// プロパティ
public STDGBVALUE b新記録スキル;
@@ -593,7 +603,9 @@ namespace TJAPlayer3 {
new Modal(
Modal.EModalType.Coin,
0,
- this.nEarnedMedalsCount[i]),
+ (long)this.nEarnedMedalsCount[i],
+ TJAPlayer3.SaveFileInstances[TJAPlayer3.GetActualPlayer(i)].data.Medals
+ ),
i);
// Check unlockables
@@ -612,7 +624,7 @@ namespace TJAPlayer3 {
}
- displayedModals = new Modal[] { null, null, null, null, null };
+ displayedModals = null;
#endregion
@@ -1357,10 +1369,9 @@ namespace TJAPlayer3 {
#region [Display modals]
- // Display modal is present
- for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) {
- if (displayedModals[i] != null)
- displayedModals[i].tDisplayModal();
+ if (displayedModals != null) {
+ lcModal?.Update();
+ lcModal?.Draw();
}
#endregion
@@ -1415,90 +1426,59 @@ namespace TJAPlayer3 {
|| (TJAPlayer3.Pad.bPressed(EInstrumentPad.DRUMS, EPad.LC)
|| (TJAPlayer3.Pad.bPressedDGB(EPad.Decide)
|| TJAPlayer3.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))))) {
- TJAPlayer3.Skin.soundDecideSFX.tPlay();
+
#region [ Skip animations ]
if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] < (int)Difficulty.Tower
&& this.actParameterPanel.ctMainCounter.CurrentValue < this.actParameterPanel.MountainAppearValue) {
+ TJAPlayer3.Skin.soundDecideSFX.tPlay();
this.actParameterPanel.tSkipResultAnimations();
} else if (TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] == (int)Difficulty.Dan
&& (ctPhase1 != null && ctPhase1.IsUnEnded)) {
+ TJAPlayer3.Skin.soundDecideSFX.tPlay();
ctPhase1.CurrentValue = (int)ctPhase1.EndValue;
}
#endregion
else {
- if (!mqModals.tIsQueueEmpty(0)
- && (
- TJAPlayer3.Pad.bPressedDGB(EPad.Decide)
- || TJAPlayer3.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return)
- )
- ) {
- displayedModals[0] = mqModals.tPopModal(0);
- displayedModals[0]?.tPlayModalSfx();
- } else if (TJAPlayer3.ConfigIni.nPlayerCount == 1 || mqModals.tAreBothQueuesEmpty()) {
- #region [ Return to song select screen ]
+ if ((lcModal?.AnimationFinished() ?? true)) {
+ TJAPlayer3.Skin.soundDecideSFX.tPlay();
- actFI.tフェードアウト開始();
+ if (!mqModals.tAreBothQueuesEmpty()
+ && (TJAPlayer3.Pad.bPressedDGB(EPad.Decide)
+ || TJAPlayer3.InputManager.Keyboard.KeyPressed((int)SlimDXKeys.Key.Return))) {
+ displayedModals = mqModals.tPopModalInOrder();
- if (TJAPlayer3.latestSongSelect == TJAPlayer3.stageSongSelect)
- if (TJAPlayer3.stageSongSelect.rNowSelectedSong.rParentNode != null)
- TJAPlayer3.stageSongSelect.actSongList.tCloseBOX();
- tPostprocessing();
+ } else if (TJAPlayer3.ConfigIni.nPlayerCount == 1 || mqModals.tAreBothQueuesEmpty()) {
- {
- base.ePhaseID = CStage.EPhase.Common_FADEOUT;
- this.eフェードアウト完了時の戻り値 = E戻り値.完了;
- bgmResultLoop.tStop();
- TJAPlayer3.Skin.bgmDanResult.tStop();
- TJAPlayer3.Skin.bgmTowerResult.tStop();
+ if (!mqModals.tAreBothQueuesEmpty())
+ LogNotification.PopError("Unexpected Error: Exited results screen with remaining modals, this is likely due to a Lua script issue.");
+
+ #region [ Return to song select screen ]
+
+ actFI.tフェードアウト開始();
+
+ if (TJAPlayer3.latestSongSelect == TJAPlayer3.stageSongSelect)
+ if (TJAPlayer3.stageSongSelect.rNowSelectedSong.rParentNode != null)
+ TJAPlayer3.stageSongSelect.actSongList.tCloseBOX();
+
+ tPostprocessing();
+
+ {
+ base.ePhaseID = CStage.EPhase.Common_FADEOUT;
+ this.eフェードアウト完了時の戻り値 = E戻り値.完了;
+ bgmResultLoop.tStop();
+ TJAPlayer3.Skin.bgmDanResult.tStop();
+ TJAPlayer3.Skin.bgmTowerResult.tStop();
+ }
+
+ #endregion
}
-
- #endregion
}
- }
- } else if ((TJAPlayer3.ConfigIni.nPlayerCount > 1 && (
- TJAPlayer3.Pad.bPressedDGB(EPad.LRed2P)
- || TJAPlayer3.Pad.bPressedDGB(EPad.RRed2P)
- ))) {
- if (!mqModals.tIsQueueEmpty(1) && this.actParameterPanel.ctMainCounter.CurrentValue >= this.actParameterPanel.MountainAppearValue) {
- TJAPlayer3.Skin.soundDecideSFX.tPlay();
- displayedModals[1] = mqModals.tPopModal(1);
- displayedModals[1]?.tPlayModalSfx();
- }
- } else if ((TJAPlayer3.ConfigIni.nPlayerCount > 2 && (
- TJAPlayer3.Pad.bPressedDGB(EPad.LRed3P)
- || TJAPlayer3.Pad.bPressedDGB(EPad.RRed3P)
- ))) {
- if (!mqModals.tIsQueueEmpty(2) && this.actParameterPanel.ctMainCounter.CurrentValue >= this.actParameterPanel.MountainAppearValue) {
- TJAPlayer3.Skin.soundDecideSFX.tPlay();
-
- displayedModals[2] = mqModals.tPopModal(2);
- displayedModals[2]?.tPlayModalSfx();
- }
- } else if ((TJAPlayer3.ConfigIni.nPlayerCount > 3 && (
- TJAPlayer3.Pad.bPressedDGB(EPad.LRed4P)
- || TJAPlayer3.Pad.bPressedDGB(EPad.RRed4P)
- ))) {
- if (!mqModals.tIsQueueEmpty(3) && this.actParameterPanel.ctMainCounter.CurrentValue >= this.actParameterPanel.MountainAppearValue) {
- TJAPlayer3.Skin.soundDecideSFX.tPlay();
-
- displayedModals[3] = mqModals.tPopModal(3);
- displayedModals[3]?.tPlayModalSfx();
- }
- } else if ((TJAPlayer3.ConfigIni.nPlayerCount > 4 && (
- TJAPlayer3.Pad.bPressedDGB(EPad.LRed5P)
- || TJAPlayer3.Pad.bPressedDGB(EPad.RRed5P)
- ))) {
- if (!mqModals.tIsQueueEmpty(4) && this.actParameterPanel.ctMainCounter.CurrentValue >= this.actParameterPanel.MountainAppearValue) {
- TJAPlayer3.Skin.soundDecideSFX.tPlay();
-
- displayedModals[4] = mqModals.tPopModal(4);
- displayedModals[4]?.tPlayModalSfx();
}
}
@@ -1804,7 +1784,7 @@ namespace TJAPlayer3 {
// Modal queues
private ModalQueue mqModals;
- private Modal[] displayedModals;
+ private Modal? displayedModals;
// Coins information
private int[] nEarnedMedalsCount = { 0, 0, 0, 0, 0 };
diff --git a/OpenTaiko/src/Stages/11.Heya/CStageHeya.cs b/OpenTaiko/src/Stages/11.Heya/CStageHeya.cs
index a4e08ac8..f9c69c8e 100644
--- a/OpenTaiko/src/Stages/11.Heya/CStageHeya.cs
+++ b/OpenTaiko/src/Stages/11.Heya/CStageHeya.cs
@@ -613,7 +613,7 @@ namespace TJAPlayer3 {
TJAPlayer3.SaveFileInstances[iPlayer].data.DanGold = iG;
TJAPlayer3.SaveFileInstances[iPlayer].data.DanType = cs;
- TJAPlayer3.NamePlate.tNamePlateRefreshTitles(iPlayer);
+ TJAPlayer3.NamePlate.tNamePlateRefreshTitles(0);
TJAPlayer3.SaveFileInstances[iPlayer].tApplyHeyaChanges();
@@ -639,7 +639,7 @@ namespace TJAPlayer3 {
}
- TJAPlayer3.NamePlate.tNamePlateRefreshTitles(iPlayer);
+ TJAPlayer3.NamePlate.tNamePlateRefreshTitles(0);
TJAPlayer3.SaveFileInstances[iPlayer].tApplyHeyaChanges();
diff --git a/OpenTaiko/src/Stages/CNamePlate.cs b/OpenTaiko/src/Stages/CNamePlate.cs
index b9e8b9af..e7e14fc5 100644
--- a/OpenTaiko/src/Stages/CNamePlate.cs
+++ b/OpenTaiko/src/Stages/CNamePlate.cs
@@ -2,23 +2,6 @@
class CNamePlate {
public CLuaNamePlateScript lcNamePlate { get; private set; }
public void RefleshSkin() {
- /*
- for (int player = 0; player < 5; player++)
- {
- this.pfName[player]?.Dispose();
-
- if (TJAPlayer3.SaveFileInstances[player].data.Title == "" || TJAPlayer3.SaveFileInstances[player].data.Title == null)
- this.pfName[player] = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.NamePlate_Font_Name_Size_Normal);
- else
- this.pfName[player] = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.NamePlate_Font_Name_Size_WithTitle);
- }
-
- this.pfTitle?.Dispose();
- this.pfdan?.Dispose();
-
- this.pfTitle = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.NamePlate_Font_Title_Size);
- this.pfdan = HPrivateFastFont.tInstantiateMainFont(TJAPlayer3.Skin.NamePlate_Font_Dan_Size);
- */
lcNamePlate?.Dispose();
lcNamePlate = new CLuaNamePlateScript(CSkin.Path("Modules/NamePlate"));
@@ -36,31 +19,8 @@
}
RefleshSkin();
-
- //ctNamePlateEffect = new CCounter(0, 120, 16.6f, TJAPlayer3.Timer);
- //ctAnimatedNamePlateTitle = new CCounter(0, 10000, 60.0f, TJAPlayer3.Timer);
}
- /*
- public void tNamePlateDisplayNamePlateBase(int x, int y, int item)
- {
- int namePlateBaseX = TJAPlayer3.Tx.NamePlateBase.szTextureSize.Width;
- int namePlateBaseY = TJAPlayer3.Tx.NamePlateBase.szTextureSize.Height / 12;
-
- TJAPlayer3.Tx.NamePlateBase?.t2D描画(x, y, new RectangleF(0, item * namePlateBaseY, namePlateBaseX, namePlateBaseY));
-
- }
-
- public void tNamePlateDisplayNamePlate_Extension(int x, int y, int item)
- {
- int namePlateBaseX = TJAPlayer3.Tx.NamePlate_Extension.szTextureSize.Width;
- int namePlateBaseY = TJAPlayer3.Tx.NamePlate_Extension.szTextureSize.Height / 12;
-
- TJAPlayer3.Tx.NamePlate_Extension?.t2D描画(x, y, new RectangleF(0, item * namePlateBaseY, namePlateBaseX, namePlateBaseY));
-
- }
- */
-
public void tNamePlateRefreshTitles(int player) {
int actualPlayer = TJAPlayer3.GetActualPlayer(player);
@@ -76,23 +36,16 @@
title = CLangManager.LangInstance.GetString("AI_TITLE");
dan = stages[Math.Max(0, TJAPlayer3.ConfigIni.nAILevel - 1)] + "面";
} else {
- name = TJAPlayer3.SaveFileInstances[player].data.Name;
- title = TJAPlayer3.SaveFileInstances[player].data.Title;
- dan = TJAPlayer3.SaveFileInstances[player].data.Dan;
+ name = TJAPlayer3.SaveFileInstances[actualPlayer].data.Name;
+ title = TJAPlayer3.SaveFileInstances[actualPlayer].data.Title;
+ dan = TJAPlayer3.SaveFileInstances[actualPlayer].data.Dan;
}
bIsPrevAI[player] = isAI;
- /*
- txTitle[player] = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(new TitleTextureKey(title, pfTitle, Color.Black, Color.Empty, 1000));
- txName[player] = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(new TitleTextureKey(name, pfName[player], Color.White, Color.Black, 1000));
- if (TJAPlayer3.SaveFileInstances[player].data.DanGold) txdan[player] = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(new TitleTextureKey($"{dan}", pfdan, Color.White, Color.Black, 1000));
- else txdan[player] = TJAPlayer3.stageSongSelect.actSongList.ResolveTitleTexture(new TitleTextureKey(dan, pfdan, Color.White, Color.Black, 1000));
- */
-
if (TJAPlayer3.SaveFileInstances[player].data.DanGold)
- lcNamePlate.SetInfos(player, name, title, $"{dan}", TJAPlayer3.SaveFileInstances[player].data);
+ lcNamePlate.SetInfos(player, name, title, $"{dan}", TJAPlayer3.SaveFileInstances[actualPlayer].data);
else
- lcNamePlate.SetInfos(player, name, title, dan, TJAPlayer3.SaveFileInstances[player].data);
+ lcNamePlate.SetInfos(player, name, title, dan, TJAPlayer3.SaveFileInstances[actualPlayer].data);
}
@@ -109,7 +62,7 @@
}
bIsPrevAI[basePlayer] = isAI;
- lcNamePlate.Draw(x, y, Opacity, basePlayer, player);
+ lcNamePlate.Draw(x, y, Opacity, basePlayer, TJAPlayer3.P1IsBlue() ? 1 : 0);
}
private bool[] bIsPrevAI = new bool[5];