Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion profiles/chlcc/hud/extramenus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,16 @@ root.ExtraMenus = {
{ X = 200, Y = 49 },
{ X = 215, Y = 49 },
{ X = 231, Y = 49 },
}
},
AyaseEndingBgmId = 74,
NormalEndingBgmId = 75,
PresetBgmFlags = {0, 1, 2, 4, 6, 32, 51, 58, 67, 68, 69, 72, 85},
DstBgmPairedFlag = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 32,
34, 36, 38, 41, 43, 48, 46, 51, 53, 56, 59, 61, 63, 65,
71, 74, 76, 77, 78, 49, 79, 80, 81, 82, 83, 84},
SrcBgmPairedFlag = {3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 33,
35, 37, 39, 42, 44, 49, 47, 52, 54, 57, 60, 62, 64, 66,
70, 73, 31, 40, 45, 48, 50, 55, 58, 67, 68, 69}
}
}

Expand Down
8 changes: 8 additions & 0 deletions profiles/chlcc/scriptvars.lua
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,14 @@ sv.SW_BUBBLES_COUNT = 3441;
sv.SW_BUBBLES_PRI = 3442;
sv.SW_BUBBLES_ALPHA = 3443;
--FlagWork
sv.SF_CLR_RIMI = 801;
sv.SF_CLR_NANAMI = 802;
sv.SF_CLR_YUA = 803;
sv.SF_CLR_MIA = 804;
sv.SF_CLR_AYASE = 805;
sv.SF_CLR_SENA = 806;
sv.SF_CLR_KOZUE = 807;
sv.SF_CLR_SEIRA = 808;
sv.SF_BACKLOGMENU = 1350;
sv.SF_SAVEMENU = 1351;
sv.SF_OPTIONMENU = 1352;
Expand Down
26 changes: 25 additions & 1 deletion src/games/chlcc/musicmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,30 @@ MusicMenu::MusicMenu() {
MainItems->Children.back()->SetFocus(MainItems->Children.front(), FDIR_RIGHT);
}

void MusicMenu::Init() {
for (const auto presetFlag : PresetBgmFlags) {
SaveSystem::SetBgmFlag(presetFlag, true);
}
if (GetFlag(SF_CLR_AYASE)) {
SaveSystem::SetBgmFlag(AyaseEndingBgmId, true);
}

const std::array<int, 7> endingFlags = {
SF_CLR_RIMI, SF_CLR_NANAMI, SF_CLR_YUA, SF_CLR_MIA,
SF_CLR_SENA, SF_CLR_KOZUE, SF_CLR_SEIRA};
const bool gotRequiredEndings = std::ranges::all_of(endingFlags, GetFlag);
if (gotRequiredEndings) {
SaveSystem::SetBgmFlag(NormalEndingBgmId, true);
}

for (size_t i = 0; i < DstBgmPairedFlag.size(); i++) {
const int dstFlagId = DstBgmPairedFlag[i];
const bool flagValue = SaveSystem::GetBgmFlag(dstFlagId) ||
SaveSystem::GetBgmFlag(SrcBgmPairedFlag[i]);
SaveSystem::SetBgmFlag(dstFlagId, flagValue);
}
}

void MusicMenu::Show() {
if (State != Shown) {
if (State != Showing) {
Expand Down Expand Up @@ -514,7 +538,7 @@ void MusicMenu::UpdateEntries() {
auto button = static_cast<Widgets::CHLCC::TrackSelectButton*>(
MainItems->Children[idx]);

if (!SaveSystem::GetBgmFlag((int)idx)) {
if (!SaveSystem::GetBgmFlag(Playlist[button->Id])) {
button->SetTrackText(Vm::ScriptGetTextTableStrAddress(0, 15));
continue;
}
Expand Down
1 change: 1 addition & 0 deletions src/games/chlcc/musicmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class MusicMenu : public Menu {
public:
MusicMenu();

void Init() override;
void Show() override;
void Hide() override;
void UpdateInput(float dt) override;
Expand Down
15 changes: 14 additions & 1 deletion src/profile/games/chlcc/musicmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,20 @@ void Configure() {
ScrollbarPosition = EnsureGetMember<glm::vec2>("ScrollbarPosition");
TrackListBounds = EnsureGetMember<RectF>("TrackListBounds");
ScrollTrackBounds = EnsureGetMember<glm::vec2>("ScrollTrackBounds");
UI::Menus[drawType].push_back(new UI::CHLCC::MusicMenu());

AyaseEndingBgmId = EnsureGetMember<int>("AyaseEndingBgmId");
NormalEndingBgmId = EnsureGetMember<int>("NormalEndingBgmId");

PresetBgmFlags = GetMemberVector<int>("PresetBgmFlags");
DstBgmPairedFlag = GetMemberVector<int>("DstBgmPairedFlag");
SrcBgmPairedFlag = GetMemberVector<int>("SrcBgmPairedFlag");

if (DstBgmPairedFlag.size() != SrcBgmPairedFlag.size()) {
throw std::runtime_error("Related arrays have mismatching sizes");
}

UI::MusicMenuPtr = new UI::CHLCC::MusicMenu();
UI::Menus[drawType].push_back(UI::MusicMenuPtr);
}

} // namespace MusicMenu
Expand Down
5 changes: 5 additions & 0 deletions src/profile/games/chlcc/musicmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ inline Sprite ScrollThumbSprite;
inline glm::vec2 ScrollbarPosition;
inline glm::vec2 ScrollTrackBounds;
inline RectF TrackListBounds;
inline int AyaseEndingBgmId;
inline int NormalEndingBgmId;
inline std::vector<int> PresetBgmFlags;
inline std::vector<int> DstBgmPairedFlag;
inline std::vector<int> SrcBgmPairedFlag;

void Configure();

Expand Down
8 changes: 8 additions & 0 deletions src/scriptvars.h
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,14 @@ V(SW_BUTTERFLY_ALPHA) // CHLCC specific
V(SW_BUBBLES_COUNT) // CHLCC specific
V(SW_BUBBLES_PRI) // CHLCC specific
V(SW_BUBBLES_ALPHA) // CHLCC specific
V(SF_CLR_RIMI) // CHLCC specific
V(SF_CLR_NANAMI) // CHLCC specific
V(SF_CLR_YUA) // CHLCC specific
V(SF_CLR_MIA) // CHLCC specific
V(SF_CLR_AYASE) // CHLCC specific
V(SF_CLR_SENA) // CHLCC specific
V(SF_CLR_KOZUE) // CHLCC specific
V(SF_CLR_SEIRA) // CHLCC specific
V(SF_Pokecon_Open)
V(SF_Pokecon_Cancel)
V(SF_Pokecon_End)
Expand Down
3 changes: 1 addition & 2 deletions src/vm/inst_misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,7 @@ VmInstruction(InstSoundMenu) {
PopUint8(type);
switch (type) {
case 0: // MusicInit
ImpLogSlow(LogLevel::Warning, LogChannel::VMStub,
"STUB instruction SoundMenu(type: MusicInit)\n");
if (UI::MusicMenuPtr) UI::MusicMenuPtr->Init();
break;
case 1: // MusicMain
ImpLogSlow(LogLevel::Warning, LogChannel::VMStub,
Expand Down
Loading