popn: distinguish between hpm and new popn (#619)

## Link to GitHub Issue or related Pull Request, if one exists
#618

## Description of change
Enhance game detection logic.

Fix heap size.
This commit is contained in:
bicarus
2026-04-09 19:54:27 -07:00
committed by GitHub
parent 7b4227d2a9
commit ca70f7b19c
6 changed files with 88 additions and 56 deletions
+10
View File
@@ -7,6 +7,7 @@
#include <stdint.h> #include <stdint.h>
#include "external/robin_hood.h" #include "external/robin_hood.h"
#include "games/popn/popn.h"
#include "launcher/logger.h" #include "launcher/logger.h"
#include "launcher/signal.h" #include "launcher/signal.h"
#include "util/deferlog.h" #include "util/deferlog.h"
@@ -1179,6 +1180,15 @@ namespace avs {
return; return;
} }
// hack, both hello! popn and popn hc using popn.dll
if (games::popn::is_pikapika_model()) {
auto old_size = HEAP_SIZE;
HEAP_SIZE = 0x20000000;
DEFAULT_HEAP_SIZE_SET = true;
log_info("avs-core", "updated heap size: {} -> {}", old_size, avs::core::HEAP_SIZE);
return;
}
if (HEAP_SIZE_DEFAULTS.find(dll_name) != HEAP_SIZE_DEFAULTS.end()) { if (HEAP_SIZE_DEFAULTS.find(dll_name) != HEAP_SIZE_DEFAULTS.end()) {
auto old_size = HEAP_SIZE; auto old_size = HEAP_SIZE;
+47 -46
View File
@@ -51,7 +51,7 @@ namespace games {
static robin_hood::unordered_map<std::string, std::vector<Analog> &> analogs; static robin_hood::unordered_map<std::string, std::vector<Analog> &> analogs;
static robin_hood::unordered_map<std::string, std::vector<Light> &> lights; static robin_hood::unordered_map<std::string, std::vector<Light> &> lights;
static robin_hood::unordered_map<std::string, std::vector<Option>> options; static robin_hood::unordered_map<std::string, std::vector<Option>> options;
static robin_hood::unordered_map<std::string, std::vector<std::string>> file_hints; static robin_hood::unordered_map<std::string, std::vector<std::vector<std::string>>> file_hints;
static void initialize() { static void initialize() {
@@ -68,7 +68,7 @@ namespace games {
buttons_help.insert({ bbc, bbc::get_buttons_help() }); buttons_help.insert({ bbc, bbc::get_buttons_help() });
analogs.insert({ bbc, bbc::get_analogs() }); analogs.insert({ bbc, bbc::get_analogs() });
lights.insert({ bbc, bbc::get_lights() }); lights.insert({ bbc, bbc::get_lights() });
file_hints[bbc].emplace_back("bsch.dll"); file_hints[bbc].push_back({"bsch.dll"});
// hpm // hpm
const std::string hpm("HELLO! Pop'n Music"); const std::string hpm("HELLO! Pop'n Music");
@@ -76,32 +76,32 @@ namespace games {
buttons.insert({ hpm, hpm::get_buttons() }); buttons.insert({ hpm, hpm::get_buttons() });
buttons_help.insert({ hpm, hpm::get_buttons_help() }); buttons_help.insert({ hpm, hpm::get_buttons_help() });
lights.insert({ hpm, hpm::get_lights() }); lights.insert({ hpm, hpm::get_lights() });
file_hints[hpm].emplace_back("popn.dll"); file_hints[hpm].push_back({"popn.dll", "pdh.dll"});
// bs // bs
const std::string bs("Beatstream"); const std::string bs("Beatstream");
games.push_back(bs); games.push_back(bs);
buttons.insert({ bs, bs::get_buttons() }); buttons.insert({ bs, bs::get_buttons() });
lights.insert({ bs, bs::get_lights() }); lights.insert({ bs, bs::get_lights() });
file_hints[bs].emplace_back("beatstream.dll"); file_hints[bs].push_back({"beatstream.dll"});
file_hints[bs].emplace_back("beatstream1.dll"); file_hints[bs].push_back({"beatstream1.dll"});
file_hints[bs].emplace_back("beatstream2.dll"); file_hints[bs].push_back({"beatstream2.dll"});
// ddr // ddr
const std::string ddr("Dance Dance Revolution"); const std::string ddr("Dance Dance Revolution");
games.push_back(ddr); games.push_back(ddr);
buttons.insert({ ddr, ddr::get_buttons() }); buttons.insert({ ddr, ddr::get_buttons() });
lights.insert({ ddr, ddr::get_lights() }); lights.insert({ ddr, ddr::get_lights() });
file_hints[ddr].emplace_back("ddr.dll"); file_hints[ddr].push_back({"ddr.dll"});
file_hints[ddr].emplace_back("mdxja_945.dll"); file_hints[ddr].push_back({"mdxja_945.dll"});
file_hints[ddr].emplace_back("arkmdxp3.dll"); file_hints[ddr].push_back({"arkmdxp3.dll"});
// dea // dea
const std::string dea("Dance Evolution"); const std::string dea("Dance Evolution");
games.push_back(dea); games.push_back(dea);
buttons.insert({ dea, dea::get_buttons() }); buttons.insert({ dea, dea::get_buttons() });
lights.insert({ dea, dea::get_lights() }); lights.insert({ dea, dea::get_lights() });
file_hints[dea].emplace_back("arkkdm.dll"); file_hints[dea].push_back({"arkkdm.dll"});
// gitadora // gitadora
const std::string gitadora("GitaDora"); const std::string gitadora("GitaDora");
@@ -111,7 +111,7 @@ namespace games {
analogs_help.insert({ gitadora, gitadora::get_analogs_help() }); analogs_help.insert({ gitadora, gitadora::get_analogs_help() });
analogs.insert({ gitadora, gitadora::get_analogs() }); analogs.insert({ gitadora, gitadora::get_analogs() });
lights.insert({ gitadora, gitadora::get_lights() }); lights.insert({ gitadora, gitadora::get_lights() });
file_hints[gitadora].emplace_back("gdxg.dll"); file_hints[gitadora].push_back({"gdxg.dll"});
// iidx // iidx
const std::string iidx("Beatmania IIDX"); const std::string iidx("Beatmania IIDX");
@@ -120,7 +120,7 @@ namespace games {
buttons_help.insert({ iidx, iidx::get_buttons_help() }); buttons_help.insert({ iidx, iidx::get_buttons_help() });
analogs.insert({ iidx, iidx::get_analogs() }); analogs.insert({ iidx, iidx::get_analogs() });
lights.insert({ iidx, iidx::get_lights() }); lights.insert({ iidx, iidx::get_lights() });
file_hints[iidx].emplace_back("bm2dx.dll"); file_hints[iidx].push_back({"bm2dx.dll"});
// jb // jb
const std::string jb("Jubeat"); const std::string jb("Jubeat");
@@ -128,7 +128,7 @@ namespace games {
buttons.insert({ jb, jb::get_buttons() }); buttons.insert({ jb, jb::get_buttons() });
buttons_help.insert({ jb, jb::get_buttons_help() }); buttons_help.insert({ jb, jb::get_buttons_help() });
lights.insert({ jb, jb::get_lights() }); lights.insert({ jb, jb::get_lights() });
file_hints[jb].emplace_back("jubeat.dll"); file_hints[jb].push_back({"jubeat.dll"});
// mga // mga
const std::string mga("Metal Gear"); const std::string mga("Metal Gear");
@@ -136,7 +136,7 @@ namespace games {
buttons.insert({ mga, mga::get_buttons() }); buttons.insert({ mga, mga::get_buttons() });
analogs.insert({ mga, mga::get_analogs() }); analogs.insert({ mga, mga::get_analogs() });
lights.insert({ mga, mga::get_lights() }); lights.insert({ mga, mga::get_lights() });
file_hints[mga].emplace_back("launch.dll"); file_hints[mga].push_back({"launch.dll"});
// museca // museca
const std::string museca("Museca"); const std::string museca("Museca");
@@ -145,7 +145,7 @@ namespace games {
buttons_help.insert({ museca, museca::get_buttons_help() }); buttons_help.insert({ museca, museca::get_buttons_help() });
analogs.insert({ museca, museca::get_analogs() }); analogs.insert({ museca, museca::get_analogs() });
lights.insert({ museca, museca::get_lights() }); lights.insert({ museca, museca::get_lights() });
file_hints[museca].emplace_back("museca.dll"); file_hints[museca].push_back({"museca.dll"});
// nost // nost
const std::string nost("Nostalgia"); const std::string nost("Nostalgia");
@@ -154,7 +154,7 @@ namespace games {
buttons_help.insert({ nost, nost::get_buttons_help() }); buttons_help.insert({ nost, nost::get_buttons_help() });
analogs.insert({ nost, nost::get_analogs() }); analogs.insert({ nost, nost::get_analogs() });
lights.insert({ nost, nost::get_lights() }); lights.insert({ nost, nost::get_lights() });
file_hints[nost].emplace_back("nostalgia.dll"); file_hints[nost].push_back({"nostalgia.dll"});
// popn // popn
const std::string popn("Pop'n Music"); const std::string popn("Pop'n Music");
@@ -162,41 +162,42 @@ namespace games {
buttons.insert({ popn, popn::get_buttons() }); buttons.insert({ popn, popn::get_buttons() });
buttons_help.insert({ popn, popn::get_buttons_help() }); buttons_help.insert({ popn, popn::get_buttons_help() });
lights.insert({ popn, popn::get_lights() }); lights.insert({ popn, popn::get_lights() });
file_hints[popn].emplace_back("popn19.dll"); file_hints[popn].push_back({"popn19.dll"});
file_hints[popn].emplace_back("popn20.dll"); file_hints[popn].push_back({"popn20.dll"});
file_hints[popn].emplace_back("popn21.dll"); file_hints[popn].push_back({"popn21.dll"});
file_hints[popn].emplace_back("popn22.dll"); file_hints[popn].push_back({"popn22.dll"});
file_hints[popn].emplace_back("popn23.dll"); file_hints[popn].push_back({"popn23.dll"});
file_hints[popn].emplace_back("popn24.dll"); file_hints[popn].push_back({"popn24.dll"});
file_hints[popn].emplace_back("popn25.dll"); file_hints[popn].push_back({"popn25.dll"});
file_hints[popn].push_back({"popn.dll", "libaio-iob2_video.dll"});
// qma // qma
const std::string qma("Quiz Magic Academy"); const std::string qma("Quiz Magic Academy");
games.push_back(qma); games.push_back(qma);
buttons.insert({ qma, qma::get_buttons() }); buttons.insert({ qma, qma::get_buttons() });
lights.insert({ qma, qma::get_lights() }); lights.insert({ qma, qma::get_lights() });
file_hints[qma].emplace_back("client.dll"); file_hints[qma].push_back({"client.dll"});
// rb // rb
const std::string rb("Reflec Beat"); const std::string rb("Reflec Beat");
games.push_back(rb); games.push_back(rb);
buttons.insert({ rb, rb::get_buttons() }); buttons.insert({ rb, rb::get_buttons() });
lights.insert({ rb, rb::get_lights() }); lights.insert({ rb, rb::get_lights() });
file_hints[rb].emplace_back("reflecbeat.dll"); file_hints[rb].push_back({"reflecbeat.dll"});
// shogikai // shogikai
std::string shogikai("Tenkaichi Shogikai"); std::string shogikai("Tenkaichi Shogikai");
games.push_back(shogikai); games.push_back(shogikai);
buttons.insert({ shogikai, shogikai::get_buttons() }); buttons.insert({ shogikai, shogikai::get_buttons() });
lights.insert({ shogikai, shogikai::get_lights() }); lights.insert({ shogikai, shogikai::get_lights() });
file_hints[shogikai].emplace_back("shogi_engine.dll"); file_hints[shogikai].push_back({"shogi_engine.dll"});
// rf3d // rf3d
const std::string rf3d("Road Fighters 3D"); const std::string rf3d("Road Fighters 3D");
games.push_back(rf3d); games.push_back(rf3d);
buttons.insert({ rf3d, rf3d::get_buttons() }); buttons.insert({ rf3d, rf3d::get_buttons() });
analogs.insert({ rf3d, rf3d::get_analogs() }); analogs.insert({ rf3d, rf3d::get_analogs() });
file_hints[rf3d].emplace_back("jgt.dll"); file_hints[rf3d].push_back({"jgt.dll"});
// sc // sc
const std::string sc("Steel Chronicle"); const std::string sc("Steel Chronicle");
@@ -204,7 +205,7 @@ namespace games {
buttons.insert({ sc, sc::get_buttons() }); buttons.insert({ sc, sc::get_buttons() });
analogs.insert({ sc, sc::get_analogs() }); analogs.insert({ sc, sc::get_analogs() });
lights.insert({ sc, sc::get_lights() }); lights.insert({ sc, sc::get_lights() });
file_hints[sc].emplace_back("gamekgg.dll"); file_hints[sc].push_back({"gamekgg.dll"});
// sdvx // sdvx
const std::string sdvx("Sound Voltex"); const std::string sdvx("Sound Voltex");
@@ -213,13 +214,13 @@ namespace games {
buttons_help.insert({ sdvx, sdvx::get_buttons_help() }); buttons_help.insert({ sdvx, sdvx::get_buttons_help() });
analogs.insert({ sdvx, sdvx::get_analogs() }); analogs.insert({ sdvx, sdvx::get_analogs() });
lights.insert({ sdvx, sdvx::get_lights() }); lights.insert({ sdvx, sdvx::get_lights() });
file_hints[sdvx].emplace_back("soundvoltex.dll"); file_hints[sdvx].push_back({"soundvoltex.dll"});
// mfc // mfc
const std::string mfc("Mahjong Fight Club"); const std::string mfc("Mahjong Fight Club");
games.push_back(mfc); games.push_back(mfc);
buttons.insert({ mfc, mfc::get_buttons() }); buttons.insert({ mfc, mfc::get_buttons() });
file_hints[mfc].emplace_back("allinone.dll"); file_hints[mfc].push_back({"allinone.dll"});
// ftt // ftt
const std::string ftt("FutureTomTom"); const std::string ftt("FutureTomTom");
@@ -228,21 +229,21 @@ namespace games {
buttons_help.insert({ ftt, ftt::get_buttons_help() }); buttons_help.insert({ ftt, ftt::get_buttons_help() });
analogs.insert({ ftt, ftt::get_analogs() }); analogs.insert({ ftt, ftt::get_analogs() });
lights.insert({ ftt, ftt::get_lights() }); lights.insert({ ftt, ftt::get_lights() });
file_hints[ftt].emplace_back("arkmmd.dll"); file_hints[ftt].push_back({"arkmmd.dll"});
// loveplus // loveplus
const std::string loveplus("LovePlus"); const std::string loveplus("LovePlus");
games.push_back(loveplus); games.push_back(loveplus);
buttons.insert({ loveplus, loveplus::get_buttons() }); buttons.insert({ loveplus, loveplus::get_buttons() });
lights.insert({ loveplus, loveplus::get_lights() }); lights.insert({ loveplus, loveplus::get_lights() });
file_hints[loveplus].emplace_back("arkklp.dll"); file_hints[loveplus].push_back({"arkklp.dll"});
// scotto // scotto
const std::string scotto("Scotto"); const std::string scotto("Scotto");
games.push_back(scotto); games.push_back(scotto);
buttons.insert({ scotto, scotto::get_buttons() }); buttons.insert({ scotto, scotto::get_buttons() });
lights.insert({ scotto, scotto::get_lights() }); lights.insert({ scotto, scotto::get_lights() });
file_hints[scotto].emplace_back("scotto.dll"); file_hints[scotto].push_back({"scotto.dll"});
// drs // drs
const std::string drs("DANCERUSH"); const std::string drs("DANCERUSH");
@@ -250,14 +251,14 @@ namespace games {
buttons.insert({ drs, drs::get_buttons() }); buttons.insert({ drs, drs::get_buttons() });
buttons_help.insert({ drs, drs::get_buttons_help() }); buttons_help.insert({ drs, drs::get_buttons_help() });
lights.insert({ drs, drs::get_lights() }); lights.insert({ drs, drs::get_lights() });
file_hints[drs].emplace_back("superstep.dll"); file_hints[drs].push_back({"superstep.dll"});
// otoca // otoca
const std::string otoca("Otoca D'or"); const std::string otoca("Otoca D'or");
games.push_back(otoca); games.push_back(otoca);
buttons.insert({ otoca, otoca::get_buttons() }); buttons.insert({ otoca, otoca::get_buttons() });
buttons_help.insert({ otoca, otoca::get_buttons_help() }); buttons_help.insert({ otoca, otoca::get_buttons_help() });
file_hints[otoca].emplace_back("arkkep.dll"); file_hints[otoca].push_back({"arkkep.dll"});
// winning eleven // winning eleven
const std::string we("Winning Eleven"); const std::string we("Winning Eleven");
@@ -265,27 +266,27 @@ namespace games {
buttons.insert({ we, we::get_buttons() }); buttons.insert({ we, we::get_buttons() });
analogs.insert({ we, we::get_analogs() }); analogs.insert({ we, we::get_analogs() });
lights.insert({ we, we::get_lights() }); lights.insert({ we, we::get_lights() });
file_hints[we].emplace_back("weac12_bootstrap_release.dll"); file_hints[we].push_back({"weac12_bootstrap_release.dll"});
file_hints[we].emplace_back("arknck.dll"); file_hints[we].push_back({"arknck.dll"});
// silent scope: bone eater // silent scope: bone eater
const std::string silentscope("Silent Scope: Bone Eater"); const std::string silentscope("Silent Scope: Bone Eater");
games.push_back(silentscope); games.push_back(silentscope);
buttons.insert({ silentscope, silentscope::get_buttons() }); buttons.insert({ silentscope, silentscope::get_buttons() });
analogs.insert({ silentscope, silentscope::get_analogs() }); analogs.insert({ silentscope, silentscope::get_analogs() });
file_hints[silentscope].emplace_back("arkndd.dll"); file_hints[silentscope].push_back({"arkndd.dll"});
// charge machine // charge machine
const std::string pcm("Charge Machine"); const std::string pcm("Charge Machine");
games.push_back(pcm); games.push_back(pcm);
buttons.insert({ pcm, pcm::get_buttons() }); buttons.insert({ pcm, pcm::get_buttons() });
file_hints[pcm].emplace_back("launch.dll"); file_hints[pcm].push_back({"launch.dll"});
// ongaku paradise // ongaku paradise
const std::string op("Ongaku Paradise"); const std::string op("Ongaku Paradise");
games.push_back(op); games.push_back(op);
buttons.insert({ op, onpara::get_buttons() }); buttons.insert({ op, onpara::get_buttons() });
file_hints[op].emplace_back("arkjc9.dll"); file_hints[op].push_back({"arkjc9.dll"});
// bc // bc
const std::string bc("Busou Shinki: Armored Princess Battle Conductor"); const std::string bc("Busou Shinki: Armored Princess Battle Conductor");
@@ -293,7 +294,7 @@ namespace games {
buttons.insert({ bc, bc::get_buttons() }); buttons.insert({ bc, bc::get_buttons() });
buttons_help.insert({ bc, bc::get_buttons_help() }); buttons_help.insert({ bc, bc::get_buttons_help() });
analogs.insert({ bc, bc::get_analogs() }); analogs.insert({ bc, bc::get_analogs() });
file_hints[bc].emplace_back("game/bsac_app.exe"); file_hints[bc].push_back({"game/bsac_app.exe"});
// ccj // ccj
const std::string ccj("Chase Chase Jokers"); const std::string ccj("Chase Chase Jokers");
@@ -302,21 +303,21 @@ namespace games {
buttons_help.insert({ ccj, ccj::get_buttons_help() }); buttons_help.insert({ ccj, ccj::get_buttons_help() });
analogs.insert({ ccj, ccj::get_analogs() }); analogs.insert({ ccj, ccj::get_analogs() });
lights.insert({ ccj, ccj::get_lights() }); lights.insert({ ccj, ccj::get_lights() });
file_hints[ccj].emplace_back("game/chaseproject.exe"); file_hints[ccj].push_back({"game/chaseproject.exe"});
// QuizKnock STADIUM // QuizKnock STADIUM
const std::string qks("QuizKnock STADIUM"); const std::string qks("QuizKnock STADIUM");
games.push_back(qks); games.push_back(qks);
buttons.insert({ qks, qks::get_buttons() }); buttons.insert({ qks, qks::get_buttons() });
buttons_help.insert({ qks, qks::get_buttons_help() }); buttons_help.insert({ qks, qks::get_buttons_help() });
file_hints[qks].emplace_back("game/uks.exe"); file_hints[qks].push_back({"game/uks.exe"});
// Mahjong Fight Girl // Mahjong Fight Girl
const std::string mfg("Mahjong Fight Girl"); const std::string mfg("Mahjong Fight Girl");
games.push_back(mfg); games.push_back(mfg);
buttons.insert({ mfg, mfg::get_buttons() }); buttons.insert({ mfg, mfg::get_buttons() });
buttons_help.insert({ mfg, mfg::get_buttons_help() }); buttons_help.insert({ mfg, mfg::get_buttons_help() });
file_hints[mfg].emplace_back("game/MFGClient_Data"); file_hints[mfg].push_back({"game/MFGClient_Data"});
// Polaris Chord // Polaris Chord
const std::string pc("Polaris Chord"); const std::string pc("Polaris Chord");
@@ -325,7 +326,7 @@ namespace games {
buttons_help.insert({ pc, pc::get_buttons_help() }); buttons_help.insert({ pc, pc::get_buttons_help() });
analogs.insert({ pc, pc::get_analogs() }); analogs.insert({ pc, pc::get_analogs() });
lights.insert({ pc, pc::get_lights() }); lights.insert({ pc, pc::get_lights() });
file_hints[pc].emplace_back("game/svm.exe"); file_hints[pc].push_back({"game/svm.exe"});
} }
const std::vector<std::string> &get_games() { const std::vector<std::string> &get_games() {
@@ -559,7 +560,7 @@ namespace games {
return &it->second; return &it->second;
} }
std::vector<std::string> *get_game_file_hints(const std::string &game) { std::vector<std::vector<std::string>> *get_game_file_hints(const std::string &game) {
initialize(); initialize();
auto it = file_hints.find(game); auto it = file_hints.find(game);
if (it == file_hints.end()) { if (it == file_hints.end()) {
+1 -1
View File
@@ -64,5 +64,5 @@ namespace games {
std::vector<Analog> *get_analogs(const std::string &game); std::vector<Analog> *get_analogs(const std::string &game);
std::vector<Light> *get_lights(const std::string &game); std::vector<Light> *get_lights(const std::string &game);
std::vector<Option> *get_options(const std::string &game); std::vector<Option> *get_options(const std::string &game);
std::vector<std::string> *get_game_file_hints(const std::string &game); std::vector<std::vector<std::string>> *get_game_file_hints(const std::string &game);
} }
+5
View File
@@ -1,9 +1,14 @@
#pragma once #pragma once
#include "avs/game.h"
#include "games/game.h" #include "games/game.h"
namespace games::popn { namespace games::popn {
static inline bool is_pikapika_model() {
return (avs::game::is_model("M39") && avs::game::SPEC[0] == 'D');
}
class POPNGame : public games::Game { class POPNGame : public games::Game {
public: public:
POPNGame(); POPNGame();
+7 -1
View File
@@ -1757,11 +1757,17 @@ int main_implementation(int argc, char *argv[]) {
break; break;
} }
// HELLO! Pop'n Music
if (check_dll("popn.dll")) { if (check_dll("popn.dll")) {
avs::game::DLL_NAME = "popn.dll"; avs::game::DLL_NAME = "popn.dll";
attach_io = true; attach_io = true;
if (check_dll("libaio-iob2_video.dll")) {
// pop'n music (pika cabinet)
attach_popn = true;
} else {
// HELLO! Pop'n Music
attach_hpm = true; attach_hpm = true;
}
break; break;
} }
+14 -4
View File
@@ -114,13 +114,23 @@ namespace overlay::windows {
if (cfg::CONFIGURATOR_STANDALONE) { if (cfg::CONFIGURATOR_STANDALONE) {
const auto file_hints = games::get_game_file_hints(game_name); const auto file_hints = games::get_game_file_hints(game_name);
if (file_hints) { if (file_hints) {
for (auto &file_hint : *file_hints) { for (auto &file_hint_list : *file_hints) {
if (fileutils::file_exists(file_hint) || bool matches_all_files = true;
for (auto &file_hint : file_hint_list) {
const auto matched =
(fileutils::file_exists(file_hint) ||
fileutils::dir_exists(file_hint) || fileutils::dir_exists(file_hint) ||
fileutils::file_exists(std::filesystem::path("modules") / file_hint) || fileutils::file_exists(std::filesystem::path("modules") / file_hint) ||
fileutils::file_exists(std::filesystem::path("contents") / file_hint) || fileutils::file_exists(std::filesystem::path("contents") / file_hint) ||
fileutils::file_exists(MODULE_PATH / file_hint)) fileutils::file_exists(MODULE_PATH / file_hint));
{
if (!matched) {
matches_all_files = false;
break;
}
}
if (matches_all_files) {
this->games_selected = games_list.size() - 1; this->games_selected = games_list.size() - 1;
this->games_selected_name = game_name; this->games_selected_name = game_name;
eamuse_set_game(game_name); eamuse_set_game(game_name);