From 772d928e16044fb847323adc7aa485d2d259f6c9 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Thu, 30 Apr 2026 16:48:03 +0300 Subject: [PATCH] Game State is actually Mode --- src/CRE/render_context.cpp | 4 +- src/ReDIVA/app.cpp | 44 +- src/ReDIVA/data_edit/selector.cpp | 8 +- src/ReDIVA/data_initialize.cpp | 4 +- src/ReDIVA/data_test/selector.cpp | 36 +- src/ReDIVA/game_state.cpp | 2816 ----------------------------- src/ReDIVA/game_state.hpp | 82 - src/ReDIVA/main.cpp | 2 +- src/ReDIVA/mode.cpp | 774 ++++++++ src/ReDIVA/mode.hpp | 114 ++ src/ReDIVA/mode_advertise.cpp | 526 ++++++ src/ReDIVA/mode_advertise.hpp | 44 + src/ReDIVA/mode_app_error.cpp | 45 + src/ReDIVA/mode_app_error.hpp | 16 + src/ReDIVA/mode_data_edit.cpp | 90 + src/ReDIVA/mode_data_edit.hpp | 31 + src/ReDIVA/mode_data_test.cpp | 362 ++++ src/ReDIVA/mode_data_test.hpp | 96 + src/ReDIVA/mode_game.cpp | 523 ++++++ src/ReDIVA/mode_game.hpp | 42 + src/ReDIVA/mode_startup.cpp | 173 ++ src/ReDIVA/mode_startup.hpp | 28 + src/ReDIVA/mode_test_mode.cpp | 49 + src/ReDIVA/mode_test_mode.hpp | 12 + src/ReDIVA/pv_game/pv_game.cpp | 4 +- src/ReDIVA/system_startup.cpp | 22 +- src/ReDIVA/test_mode.cpp | 19 + src/ReDIVA/test_mode.hpp | 11 + 28 files changed, 3017 insertions(+), 2960 deletions(-) delete mode 100644 src/ReDIVA/game_state.cpp delete mode 100644 src/ReDIVA/game_state.hpp create mode 100644 src/ReDIVA/mode.cpp create mode 100644 src/ReDIVA/mode.hpp create mode 100644 src/ReDIVA/mode_advertise.cpp create mode 100644 src/ReDIVA/mode_advertise.hpp create mode 100644 src/ReDIVA/mode_app_error.cpp create mode 100644 src/ReDIVA/mode_app_error.hpp create mode 100644 src/ReDIVA/mode_data_edit.cpp create mode 100644 src/ReDIVA/mode_data_edit.hpp create mode 100644 src/ReDIVA/mode_data_test.cpp create mode 100644 src/ReDIVA/mode_data_test.hpp create mode 100644 src/ReDIVA/mode_game.cpp create mode 100644 src/ReDIVA/mode_game.hpp create mode 100644 src/ReDIVA/mode_startup.cpp create mode 100644 src/ReDIVA/mode_startup.hpp create mode 100644 src/ReDIVA/mode_test_mode.cpp create mode 100644 src/ReDIVA/mode_test_mode.hpp create mode 100644 src/ReDIVA/test_mode.cpp create mode 100644 src/ReDIVA/test_mode.hpp diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index ea4e0973..7d1d867a 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -1367,8 +1367,8 @@ void render_context::ctrl() { rctx_ptr = this; start_frame_process(); - extern bool game_state_get_pause(); - if (!get_pause() || !game_state_get_pause()) + extern bool check_pause_enable(); + if (!get_pause() || !check_pause_enable()) app::ctrl_task(); sound_ctrl(); file_handler_storage_ctrl(); diff --git a/src/ReDIVA/app.cpp b/src/ReDIVA/app.cpp index 09cb4aea..e9cd1840 100644 --- a/src/ReDIVA/app.cpp +++ b/src/ReDIVA/app.cpp @@ -74,11 +74,11 @@ #include "information/dw_console.hpp" #include "pv_game/pv_game.hpp" #include "am_data.hpp" -#include "game_state.hpp" #include "font_info.hpp" #include "imgui_helper.hpp" #include "input.hpp" #include "input_state.hpp" +#include "mode.hpp" #include "task_movie.hpp" #include "task_window.hpp" #include "x_pv_game.hpp" @@ -803,7 +803,7 @@ static render_context* render_context_load(const wchar_t* config_path) { ogg_file_handler_storage_init(); ogg_playback_data_init(); - game_state_init(); + init_mode(MODE_STARTUP, MODE_SUB_MAX); render_manager_init_data(0, 0, 0, false); /*render_manager_init_data( @@ -900,7 +900,7 @@ static render_context* render_context_load(const wchar_t* config_path) { render_timer->reset(); for (int32_t i = 0; i < 30; i++) { render_timer->start_of_cycle(); - game_state_ctrl(); + ctrl_mode(); app::ctrl_task(); sound_ctrl(); file_handler_storage_ctrl(); @@ -1077,52 +1077,52 @@ static void render_context_ctrl(render_context* rctx) { const InputState* input_state = input_state_get(0); if (input_state->CheckTapped(INPUT_BUTTON_F4)) - game_state_set_game_state_next(GAME_STATE_ADVERTISE); + shift_next_mode(MODE_ADVERTISE); #if PV_DEBUG else if (input_state->CheckTapped(INPUT_BUTTON_F5) && input_state->CheckDown(INPUT_BUTTON_CONTROL)) { pv_x = false; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } #if BAKE_X_PACK else if (input_state->CheckTapped(INPUT_BUTTON_F5) && input_state->CheckDown(INPUT_BUTTON_SHIFT)) { pv_x = true; pv_x_bake = true; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } else if (input_state->CheckTapped(INPUT_BUTTON_F5)) { pv_x = true; pv_x_bake = false; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } #else else if (input_state->CheckTapped(INPUT_BUTTON_F5)) { pv_x = true; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } #endif #else #if BAKE_X_PACK else if (input_state->CheckTapped(INPUT_BUTTON_F5) && input_state->CheckDown(INPUT_BUTTON_SHIFT)) { pv_x_bake = true; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } else if (input_state->CheckTapped(INPUT_BUTTON_F5)) { pv_x_bake = false; - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); } #else else if (input_state->CheckTapped(INPUT_BUTTON_F5)) - game_state_set_game_state_next(GAME_STATE_GAME); + shift_next_mode(MODE_GAME); #endif #endif else if (input_state->CheckTapped(INPUT_BUTTON_F6)) - game_state_set_game_state_next(GAME_STATE_DATA_TEST); + shift_next_mode(MODE_DATA_TEST); else if (input_state->CheckTapped(INPUT_BUTTON_F7)) - game_state_set_game_state_next(GAME_STATE_TEST_MODE); + shift_next_mode(MODE_TEST_MODE); else if (input_state->CheckTapped(INPUT_BUTTON_F8)) - game_state_set_game_state_next(GAME_STATE_APP_ERROR); + shift_next_mode(MODE_APP_ERROR); else if (input_state->CheckTapped(INPUT_BUTTON_F9)) // Added - game_state_set_game_state_next(GAME_STATE_DATA_EDIT); // Added + shift_next_mode(MODE_DATA_EDIT); // Added #if DISPLAY_IBL else if (input_state->CheckTapped(INPUT_BUTTON_L)) display_ibl ^= true; @@ -1148,18 +1148,18 @@ static void render_context_ctrl(render_context* rctx) { input_state_am_ctrl(); input_state_pc_ctrl(); input_state_ctrl(); - if (!get_pause() || !game_state_get_pause()) - game_state_ctrl(); + if (!get_pause() || !check_pause_enable()) + ctrl_mode(); rctx->ctrl(); - if (fast_loader_speed > 1 && game_state_get_game_state() == GAME_STATE_STARTUP) + if (fast_loader_speed > 1 && get_mode() == MODE_STARTUP) for (int32_t i = 1; i < fast_loader_speed; i++) { rctx_ptr = rctx; input_state_am_ctrl(); input_state_pc_ctrl(); input_state_ctrl(); - if (!get_pause() || !game_state_get_pause()) - game_state_ctrl(); + if (!get_pause() || !check_pause_enable()) + ctrl_mode(); rctx->ctrl(); } @@ -1167,7 +1167,7 @@ static void render_context_ctrl(render_context* rctx) { Vulkan::gl_wrap_manager_pre_render(); char buf[0x200]; - game_state_print(buf, sizeof(buf)); + print_mode(buf, sizeof(buf)); glfwSetWindowTitle(window, buf); ImGui::Render(); @@ -1392,7 +1392,7 @@ static void render_context_dispose(render_context* rctx) { Vulkan::manager_next_frame(vulkan_current_frame); } - game_state_ctrl(); + ctrl_mode(); app::ctrl_task(); sound_ctrl(); file_handler_storage_ctrl(); diff --git a/src/ReDIVA/data_edit/selector.cpp b/src/ReDIVA/data_edit/selector.cpp index 602f8d1d..0ac9da14 100644 --- a/src/ReDIVA/data_edit/selector.cpp +++ b/src/ReDIVA/data_edit/selector.cpp @@ -4,20 +4,20 @@ */ #include "selector.hpp" -#include "../game_state.hpp" #include "../input_state.hpp" +#include "../mode.hpp" #include "../print_work.hpp" struct DataEditSelData { - SubGameStateEnum state; + ModeSub state; int32_t index; const char* name; }; static const DataEditSelData data_edit_sel_data[] = { - { SUB_GAME_STATE_DATA_EDIT_GLITTER_EDITOR, 0, "GLITTER EDITOR" }, + { MODE_SUB_DATA_EDIT_GLITTER_EDITOR, 0, "GLITTER EDITOR" }, #if FACE_ANIM - { SUB_GAME_STATE_DATA_EDIT_FACE_ANIM , 1, "FACE ANIM" }, + { MODE_SUB_DATA_EDIT_FACE_ANIM , 1, "FACE ANIM" }, #endif }; diff --git a/src/ReDIVA/data_initialize.cpp b/src/ReDIVA/data_initialize.cpp index 4a973f96..ab3c4bb9 100644 --- a/src/ReDIVA/data_initialize.cpp +++ b/src/ReDIVA/data_initialize.cpp @@ -16,7 +16,7 @@ #include "../CRE/object.hpp" #include "../CRE/sound.hpp" #include "../CRE/sprite.hpp" -#include "game_state.hpp" +#include "test_mode.hpp" extern uint32_t dbg_set_id; @@ -42,7 +42,7 @@ TaskDataInit::~TaskDataInit() { bool TaskDataInit::init() { state = 0; - field_6C = !test_mode_get(); + field_6C = !is_test_mode_start(); return true; } diff --git a/src/ReDIVA/data_test/selector.cpp b/src/ReDIVA/data_test/selector.cpp index 5ef2ec21..66760e1a 100644 --- a/src/ReDIVA/data_test/selector.cpp +++ b/src/ReDIVA/data_test/selector.cpp @@ -4,33 +4,33 @@ */ #include "selector.hpp" -#include "../game_state.hpp" #include "../input_state.hpp" +#include "../mode.hpp" #include "../print_work.hpp" struct DataTestSelData { - SubGameStateEnum state; + ModeSub state; int32_t index; const char* name; }; static const DataTestSelData data_test_sel_data[] = { - { SUB_GAME_STATE_DATA_TEST_MISC , 0, "MISC TEST" }, - { SUB_GAME_STATE_DATA_TEST_OBJ , 1, "OBJECT TEST" }, - { SUB_GAME_STATE_DATA_TEST_STG , 2, "STAGE TEST" }, - { SUB_GAME_STATE_DATA_TEST_MOT , 3, "MOTION TEST" }, - { SUB_GAME_STATE_DATA_TEST_COLLISION, 4, "COLLISION TEST" }, - { SUB_GAME_STATE_DATA_TEST_SPR , 5, "SPRITE TEST" }, - { SUB_GAME_STATE_DATA_TEST_AET , 6, "2DAUTH TEST" }, - { SUB_GAME_STATE_DATA_TEST_AUTH_3D , 7, "3DAUTH TEST" }, - { SUB_GAME_STATE_DATA_TEST_CHR , 8, "CHARA TEST" }, - { SUB_GAME_STATE_DATA_TEST_ITEM , 9, "ITEM TEST" }, - { SUB_GAME_STATE_DATA_TEST_OPD , 10, "OPD TEST" }, - { SUB_GAME_STATE_DATA_TEST_PERF , 11, "PERFORMANCE TEST" }, - { SUB_GAME_STATE_DATA_TEST_PRINT , 12, "PRINT TEST" }, - { SUB_GAME_STATE_DATA_TEST_CARD , 13, "CARD TEST" }, - { SUB_GAME_STATE_DATA_TEST_PVSCRIPT , 14, "PVSCRIPT TEST" }, - { SUB_GAME_STATE_DATA_TEST_GLITTER , 15, "GLITTER TEST" }, + { MODE_SUB_DATA_TEST_MISC , 0, "MISC TEST" }, + { MODE_SUB_DATA_TEST_OBJ , 1, "OBJECT TEST" }, + { MODE_SUB_DATA_TEST_STG , 2, "STAGE TEST" }, + { MODE_SUB_DATA_TEST_MOT , 3, "MOTION TEST" }, + { MODE_SUB_DATA_TEST_COLLISION, 4, "COLLISION TEST" }, + { MODE_SUB_DATA_TEST_SPR , 5, "SPRITE TEST" }, + { MODE_SUB_DATA_TEST_AET , 6, "2DAUTH TEST" }, + { MODE_SUB_DATA_TEST_AUTH_3D , 7, "3DAUTH TEST" }, + { MODE_SUB_DATA_TEST_CHR , 8, "CHARA TEST" }, + { MODE_SUB_DATA_TEST_ITEM , 9, "ITEM TEST" }, + { MODE_SUB_DATA_TEST_OPD , 10, "OPD TEST" }, + { MODE_SUB_DATA_TEST_PERF , 11, "PERFORMANCE TEST" }, + { MODE_SUB_DATA_TEST_PRINT , 12, "PRINT TEST" }, + { MODE_SUB_DATA_TEST_CARD , 13, "CARD TEST" }, + { MODE_SUB_DATA_TEST_PVSCRIPT , 14, "PVSCRIPT TEST" }, + { MODE_SUB_DATA_TEST_GLITTER , 15, "GLITTER TEST" }, }; static const int32_t data_test_sel_data_count = sizeof(data_test_sel_data) / sizeof(DataTestSelData); diff --git a/src/ReDIVA/game_state.cpp b/src/ReDIVA/game_state.cpp deleted file mode 100644 index bf46d1f5..00000000 --- a/src/ReDIVA/game_state.cpp +++ /dev/null @@ -1,2816 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#include "game_state.hpp" -#include "../CRE/rob/rob.hpp" -#include "../CRE/auth_2d.hpp" -#include "../CRE/auth_3d.hpp" -#include "../CRE/clear_color.hpp" -#include "../CRE/customize_item_table.hpp" -#include "../CRE/module_table.hpp" -#include "../CRE/pv_db.hpp" -#include "../CRE/sound.hpp" -#include "../CRE/task.hpp" -#include "data_edit/face_anim.hpp" -#include "data_edit/glitter_editor.hpp" -#include "data_edit/rob_chara_adjust.hpp" -#include "data_edit/selector.hpp" -#include "data_test/auth_2d_test.hpp" -#include "data_test/auth_3d_test.hpp" -#include "data_test/glitter_test.hpp" -#include "data_test/misc_test.hpp" -#include "data_test/motion_test.hpp" -#include "data_test/object_test.hpp" -#include "data_test/opd_test.hpp" -#include "data_test/rob_osage_test.hpp" -#include "data_test/selector.hpp" -#include "data_test/stage_test.hpp" -#include "information/dw_console.hpp" -#include "pv_game/player_data.hpp" -#include "pv_game/pv_game.hpp" -#include "am_data.hpp" -#include "data_initialize.hpp" -#include "input_state.hpp" -#include "mask_screen.hpp" -#include "system_startup.hpp" -#include "task_movie.hpp" -#include "wait_screen.hpp" -#include "x_pv_game.hpp" - -enum GameStateMode { - GAME_STATE_MODE_INIT = 0, - GAME_STATE_MODE_CTRL, - GAME_STATE_MODE_DEST, - GAME_STATE_MODE_MAX, -}; - -struct GameState { - struct Startup { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Advertise { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Game { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct TestMode { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct AppError { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTest { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataEdit { // Added - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - GameStateEnum game_state; - GameStateEnum game_state_next; - GameStateEnum game_state_prev; - GameStateMode mode; - bool set_game_state_next; - bool next_sub_game_state; - int32_t call_count; - int32_t inner_state; - SubGameStateEnum sub_game_state; - SubGameStateEnum sub_game_state_next; - SubGameStateEnum sub_game_state_prev; - GameStateMode sub_mode; - bool set_sub_game_state_next; - bool next_game_state; - int32_t sub_call_count; -}; - -struct SubGameState { - struct DataInitialize { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct SystemStartup { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct SystemStartupError { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Warning { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Logo { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Rating { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Demo { - struct Data { - bool load; - int32_t pv_state; - int32_t index; - int32_t difficulty_select; - int32_t state; - }; - - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Title { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Ranking { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct ScoreRanking { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct CM { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct PhotoModeDemo { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct Selector { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct GameMain { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct GameSel { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct StageResult { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct ScreenShotSel { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct ScreenShotResult { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct GameOver { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestMain { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestMisc { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestObj { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestStg { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestMot { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestCollision { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestSpr { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestAet { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestAuth3d { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestChr { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestItem { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestPerf { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestPvScript { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestPrint { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestCard { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestOpd { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestSlider { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestGlitter { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestGraphics { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestCollectionCard { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestModeMain { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataTestAppError { - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataEditMain { // Added - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - - struct DataEditGlitterEditor { // Added - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; - -#if FACE_ANIM - struct DataEditFaceAnim { // Added - static bool Init(); - static bool Ctrl(); - static bool Dest(); - }; -#endif -}; - -struct GameStateData { - GameStateEnum game_state; - bool(*Init)(); - bool(*Ctrl)(); - bool(*Dest)(); - SubGameStateEnum sub_game_state[24]; - GameStateEnum next_game_state; - SubGameStateEnum next_sub_game_state; -}; - -struct SubGameStateData { - SubGameStateEnum sub_game_state; - bool pause; - bool(*Init)(); - bool(*Ctrl)(); - bool(*Dest)(); -}; - -GameStateData game_state_data_array[] = { - { - GAME_STATE_STARTUP, - GameState::Startup::Init, - GameState::Startup::Ctrl, - GameState::Startup::Dest, - { - SUB_GAME_STATE_DATA_INITIALIZE, - SUB_GAME_STATE_SYSTEM_STARTUP, - SUB_GAME_STATE_SYSTEM_STARTUP_ERROR, - SUB_GAME_STATE_WARNING, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_LOGO, - }, - { - GAME_STATE_ADVERTISE, - GameState::Advertise::Init, - GameState::Advertise::Ctrl, - GameState::Advertise::Dest, - { - SUB_GAME_STATE_LOGO, - SUB_GAME_STATE_RATING, - SUB_GAME_STATE_DEMO, - SUB_GAME_STATE_TITLE, - SUB_GAME_STATE_SCORE_RANKING, - SUB_GAME_STATE_RANKING, - SUB_GAME_STATE_CM, - SUB_GAME_STATE_PHOTO_MODE_DEMO, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, - { - GAME_STATE_GAME, - GameState::Game::Init, - GameState::Game::Ctrl, - GameState::Game::Dest, - { - SUB_GAME_STATE_SELECTOR, - SUB_GAME_STATE_GAME_MAIN, - //SUB_GAME_STATE_GAME_SEL, - //SUB_GAME_STATE_STAGE_RESULT, - //SUB_GAME_STATE_SCREEN_SHOT_SEL, - //SUB_GAME_STATE_SCREEN_SHOT_RESULT, - //SUB_GAME_STATE_GAME_OVER, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, - { - GAME_STATE_TEST_MODE, - GameState::TestMode::Init, - GameState::TestMode::Ctrl, - GameState::TestMode::Dest, - { - SUB_GAME_STATE_TEST_MODE_MAIN, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, - { - GAME_STATE_APP_ERROR, - GameState::AppError::Init, - GameState::AppError::Ctrl, - GameState::AppError::Dest, - { - SUB_GAME_STATE_APP_ERROR, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, - { - GAME_STATE_DATA_TEST, - GameState::DataTest::Init, - GameState::DataTest::Ctrl, - GameState::DataTest::Dest, - { - SUB_GAME_STATE_DATA_TEST_MAIN, - SUB_GAME_STATE_DATA_TEST_MISC, - SUB_GAME_STATE_DATA_TEST_OBJ, - SUB_GAME_STATE_DATA_TEST_STG, - SUB_GAME_STATE_DATA_TEST_MOT, - SUB_GAME_STATE_DATA_TEST_COLLISION, - SUB_GAME_STATE_DATA_TEST_SPR, - SUB_GAME_STATE_DATA_TEST_AET, - SUB_GAME_STATE_DATA_TEST_AUTH_3D, - SUB_GAME_STATE_DATA_TEST_CHR, - SUB_GAME_STATE_DATA_TEST_ITEM, - SUB_GAME_STATE_DATA_TEST_PERF, - SUB_GAME_STATE_DATA_TEST_PVSCRIPT, - SUB_GAME_STATE_DATA_TEST_PRINT, - SUB_GAME_STATE_DATA_TEST_CARD, - SUB_GAME_STATE_DATA_TEST_OPD, - SUB_GAME_STATE_DATA_TEST_SLIDER, - SUB_GAME_STATE_DATA_TEST_GLITTER, - SUB_GAME_STATE_DATA_TEST_GRAPHICS, - SUB_GAME_STATE_DATA_TEST_COLLECTION_CARD, - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, - - { // Added - GAME_STATE_DATA_EDIT, - GameState::DataEdit::Init, - GameState::DataEdit::Ctrl, - GameState::DataEdit::Dest, - { - SUB_GAME_STATE_DATA_EDIT_MAIN, - SUB_GAME_STATE_DATA_EDIT_GLITTER_EDITOR, -#if FACE_ANIM - SUB_GAME_STATE_DATA_EDIT_FACE_ANIM, -#endif - SUB_GAME_STATE_MAX, - }, - GAME_STATE_ADVERTISE, - SUB_GAME_STATE_MAX, - }, -}; - -SubGameStateData sub_game_state_data_array[] = { - { - SUB_GAME_STATE_DATA_INITIALIZE, - true, - SubGameState::DataInitialize::Init, - SubGameState::DataInitialize::Ctrl, - SubGameState::DataInitialize::Dest, - }, - { - SUB_GAME_STATE_SYSTEM_STARTUP, - true, - SubGameState::SystemStartup::Init, - SubGameState::SystemStartup::Ctrl, - SubGameState::SystemStartup::Dest, - }, - { - SUB_GAME_STATE_SYSTEM_STARTUP_ERROR, - true, - SubGameState::SystemStartupError::Init, - SubGameState::SystemStartupError::Ctrl, - SubGameState::SystemStartupError::Dest, - }, - { - SUB_GAME_STATE_WARNING, - true, - SubGameState::Warning::Init, - SubGameState::Warning::Ctrl, - SubGameState::Warning::Dest, - }, - { - SUB_GAME_STATE_LOGO, - true, - SubGameState::Logo::Init, - SubGameState::Logo::Ctrl, - SubGameState::Logo::Dest, - }, - { - SUB_GAME_STATE_RATING, - true, - SubGameState::Rating::Init, - SubGameState::Rating::Ctrl, - SubGameState::Rating::Dest, - }, - { - SUB_GAME_STATE_DEMO, - true, - SubGameState::Demo::Init, - SubGameState::Demo::Ctrl, - SubGameState::Demo::Dest, - }, - { - SUB_GAME_STATE_TITLE, - true, - SubGameState::Title::Init, - SubGameState::Title::Ctrl, - SubGameState::Title::Dest, - }, - { - SUB_GAME_STATE_RANKING, - true, - SubGameState::Ranking::Init, - SubGameState::Ranking::Ctrl, - SubGameState::Ranking::Dest, - }, - { - SUB_GAME_STATE_SCORE_RANKING, - true, - SubGameState::ScoreRanking::Init, - SubGameState::ScoreRanking::Ctrl, - SubGameState::ScoreRanking::Dest, - }, - { - SUB_GAME_STATE_CM, - true, - SubGameState::CM::Init, - SubGameState::CM::Ctrl, - SubGameState::CM::Dest, - }, - { - SUB_GAME_STATE_PHOTO_MODE_DEMO, - true, - SubGameState::PhotoModeDemo::Init, - SubGameState::PhotoModeDemo::Ctrl, - SubGameState::PhotoModeDemo::Dest, - }, - { - SUB_GAME_STATE_SELECTOR, - true, - SubGameState::Selector::Init, - SubGameState::Selector::Ctrl, - SubGameState::Selector::Dest, - }, - { - SUB_GAME_STATE_GAME_MAIN, - true, - SubGameState::GameMain::Init, - SubGameState::GameMain::Ctrl, - SubGameState::GameMain::Dest, - }, - { - SUB_GAME_STATE_GAME_SEL, - true, - SubGameState::GameSel::Init, - SubGameState::GameSel::Ctrl, - SubGameState::GameSel::Dest, - }, - { - SUB_GAME_STATE_STAGE_RESULT, - true, - SubGameState::StageResult::Init, - SubGameState::StageResult::Ctrl, - SubGameState::StageResult::Dest, - }, - { - SUB_GAME_STATE_SCREEN_SHOT_SEL, - true, - SubGameState::ScreenShotSel::Init, - SubGameState::ScreenShotSel::Ctrl, - SubGameState::ScreenShotSel::Dest, - }, - { - SUB_GAME_STATE_SCREEN_SHOT_RESULT, - true, - SubGameState::ScreenShotResult::Init, - SubGameState::ScreenShotResult::Ctrl, - SubGameState::ScreenShotResult::Dest, - }, - { - SUB_GAME_STATE_GAME_OVER, - true, - SubGameState::GameOver::Init, - SubGameState::GameOver::Ctrl, - SubGameState::GameOver::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_MAIN, - true, - SubGameState::DataTestMain::Init, - SubGameState::DataTestMain::Ctrl, - SubGameState::DataTestMain::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_MISC, - true, - SubGameState::DataTestMisc::Init, - SubGameState::DataTestMisc::Ctrl, - SubGameState::DataTestMisc::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_OBJ, - false, - SubGameState::DataTestObj::Init, - SubGameState::DataTestObj::Ctrl, - SubGameState::DataTestObj::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_STG, - false, - SubGameState::DataTestStg::Init, - SubGameState::DataTestStg::Ctrl, - SubGameState::DataTestStg::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_MOT, - false, - SubGameState::DataTestMot::Init, - SubGameState::DataTestMot::Ctrl, - SubGameState::DataTestMot::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_COLLISION, - true, - SubGameState::DataTestCollision::Init, - SubGameState::DataTestCollision::Ctrl, - SubGameState::DataTestCollision::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_SPR, - true, - SubGameState::DataTestSpr::Init, - SubGameState::DataTestSpr::Ctrl, - SubGameState::DataTestSpr::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_AET, - true, - SubGameState::DataTestAet::Init, - SubGameState::DataTestAet::Ctrl, - SubGameState::DataTestAet::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_AUTH_3D, - true, - SubGameState::DataTestAuth3d::Init, - SubGameState::DataTestAuth3d::Ctrl, - SubGameState::DataTestAuth3d::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_CHR, - true, - SubGameState::DataTestChr::Init, - SubGameState::DataTestChr::Ctrl, - SubGameState::DataTestChr::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_ITEM, - true, - SubGameState::DataTestItem::Init, - SubGameState::DataTestItem::Ctrl, - SubGameState::DataTestItem::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_PERF, - true, - SubGameState::DataTestPerf::Init, - SubGameState::DataTestPerf::Ctrl, - SubGameState::DataTestPerf::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_PVSCRIPT, - true, - SubGameState::DataTestPvScript::Init, - SubGameState::DataTestPvScript::Ctrl, - SubGameState::DataTestPvScript::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_PRINT, - true, - SubGameState::DataTestPrint::Init, - SubGameState::DataTestPrint::Ctrl, - SubGameState::DataTestPrint::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_CARD, - true, - SubGameState::DataTestCard::Init, - SubGameState::DataTestCard::Ctrl, - SubGameState::DataTestCard::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_OPD, - true, - SubGameState::DataTestOpd::Init, - SubGameState::DataTestOpd::Ctrl, - SubGameState::DataTestOpd::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_SLIDER, - true, - SubGameState::DataTestSlider::Init, - SubGameState::DataTestSlider::Ctrl, - SubGameState::DataTestSlider::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_GLITTER, - true, - SubGameState::DataTestGlitter::Init, - SubGameState::DataTestGlitter::Ctrl, - SubGameState::DataTestGlitter::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_GRAPHICS, - true, - SubGameState::DataTestGraphics::Init, - SubGameState::DataTestGraphics::Ctrl, - SubGameState::DataTestGraphics::Dest, - }, - { - SUB_GAME_STATE_DATA_TEST_COLLECTION_CARD, - true, - SubGameState::DataTestCollectionCard::Init, - SubGameState::DataTestCollectionCard::Ctrl, - SubGameState::DataTestCollectionCard::Dest, - }, - { - SUB_GAME_STATE_TEST_MODE_MAIN, - false, - SubGameState::DataTestModeMain::Init, - SubGameState::DataTestModeMain::Ctrl, - SubGameState::DataTestModeMain::Dest, - }, - { - SUB_GAME_STATE_APP_ERROR, - false, - SubGameState::DataTestAppError::Init, - SubGameState::DataTestAppError::Ctrl, - SubGameState::DataTestAppError::Dest, - }, - - { // Added - SUB_GAME_STATE_DATA_EDIT_MAIN, - false, - SubGameState::DataEditMain::Init, - SubGameState::DataEditMain::Ctrl, - SubGameState::DataEditMain::Dest, - }, - { // Added - SUB_GAME_STATE_DATA_EDIT_GLITTER_EDITOR, - false, - SubGameState::DataEditGlitterEditor::Init, - SubGameState::DataEditGlitterEditor::Ctrl, - SubGameState::DataEditGlitterEditor::Dest, - }, -#if FACE_ANIM - { // Added - SUB_GAME_STATE_DATA_EDIT_FACE_ANIM, - false, - SubGameState::DataEditFaceAnim::Init, - SubGameState::DataEditFaceAnim::Ctrl, - SubGameState::DataEditFaceAnim::Dest, - }, -#endif -}; - -const char* game_state_names[] = { - "ADVERTISE", - "STARTUP", - "GAME", - "DATA_TEST", - "TEST_MODE", - "APP_ERROR", - "DATA_EDIT", - "MAX", -}; - -const char* sub_game_state_names[] = { - "DATA_INITIALIZE", - "SYSTEM_STARTUP", - "SYSTEM_STARTUP_ERROR", - "WARNING", - "LOGO", - "RATING", - "DEMO", - "TITLE", - "RANKING", - "SCORE_RANKING", - "CM", - "PHOTO_MODE_DEMO", - "SELECTOR", - "GAME_MAIN", - "GAME_SEL", - "STAGE_RESULT", - "SCREEN_SHOT_SEL", - "SCREEN_SHOT_RESULT", - "GAME_OVER", - "DATA_TEST_MAIN", - "DATA_TEST_MISC", - "DATA_TEST_OBJ", - "DATA_TEST_STG", - "DATA_TEST_MOT", - "DATA_TEST_COLLISION", - "DATA_TEST_SPR", - "DATA_TEST_AET", - "DATA_TEST_AUTH_3D", - "DATA_TEST_CHR", - "DATA_TEST_ITEM", - "DATA_TEST_PERF", - "DATA_TEST_PVSCRIPT", - "DATA_TEST_PRINT", - "DATA_TEST_CARD", - "DATA_TEST_OPD", - "DATA_TEST_SLIDER", - "DATA_TEST_GLITTER", - "DATA_TEST_GRAPHICS", - "DATA_TEST_COLLECTION_CARD", - "TEST_MODE_MAIN", - "APP_ERROR", - "DATA_EDIT_MAIN", - "DATA_EDIT_GLITTER_EDITOR", -#if FACE_ANIM - "DATA_EDIT_FACE_ANIM", -#endif - "MAX", -}; - -extern render_context* rctx_ptr; - -GameState game_state; - -bool data_edit_reset = false; -bool data_test_reset = false; -int32_t startup_error_code; -bool test_mode; - -#if PV_DEBUG -bool pv_x; -#endif -#if BAKE_X_PACK -bool pv_x_bake; -#endif - -GameStateEnum data_edit_game_state_prev; -GameStateEnum data_test_game_state_prev; - -SubGameState::Demo::Data sub_game_state_demo_data; - -std::vector> stru_1411A12E0; -std::vector stru_1411A12F8; - -static bool game_state_call_sub(GameState* game_state); -static GameState* game_state_get(); -static const char* game_state_get_name(GameStateEnum state); -static void game_state_set_state(GameStateEnum state, SubGameStateEnum sub_state); - -static GameStateData* game_state_data_array_get(GameStateEnum state); -static SubGameStateData* sub_game_state_data_array_get(SubGameStateEnum state); - -static bool adv_load(); -static void adv_read(); -static void adv_unload(); - -static bool check_photo_mode_demo_movie_exists(); - -static void game_state_set_inner_state(int32_t state); - -static void sub_game_state_demo_data_difficulty_select_increment(); - -bool GameState::Startup::Init() { - startup_error_code = false; - return true; -} - -bool GameState::Startup::Ctrl() { - return false; -} - -bool GameState::Startup::Dest() { - /*if (game_state_get()->game_state_next != GAME_STATE_APP_ERROR && !test_mode_get()) - sub_14066C670();*/ - - if (test_mode_get()) - game_state_set_game_state_next(GAME_STATE_TEST_MODE); - else { - //sub_14066D190(); - - GameStateEnum state = game_state_get()->game_state_next == GAME_STATE_TEST_MODE - ? GAME_STATE_TEST_MODE : GAME_STATE_ADVERTISE; - game_state_set_game_state_next(state); - } - return true; -} - -bool GameState::Advertise::Init() { - switch (game_state_get()->inner_state) { - case 0: - //net_alw_detail::context_ptr_get()->field_168(0); - //net_alw_detail::context_ptr_get()->field_C8(1); - //sub_14066C680(); - //task_slider_control_get()->sub_140618840(); - //task_slider_control_get()->sub_140618860(); - - adv_read(); - game_state_set_inner_state(1); - - //sub_1404A7370(player_data_array); - //sub_14038AFC0(sub_14038BB30()); - - if (game_state_get()->game_state != game_state_get()->game_state_prev) { - //sub_1403F4670(); - sub_game_state_demo_data_difficulty_select_increment(); - } - - /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); - task_lamp_ctrl->field_74 = 1; - task_lamp_ctrl->field_78 = color_white;*/ - - //task_slider_control_get()->sub_140618980(2); - - /*if (task_printer_get()->check_alive() && !wrap_collection_get()->printer.get_value()) - task_printer_get()->close();*/ - break; - case 1: - if (!adv_load()) - game_state_set_inner_state(2); - break; - case 2: - //task_information_ptr->open("INFORMATION"); - - task_wait_screen_open(); - //sub_1401F4440(); - //sub_1401E87E0(); - - const float_t min_volume = get_min_speakers_volume(); - const float_t max_volume = get_max_speakers_volume(); - sound_work_set_speakers_volume((float_t)wrap_collection_get()->advertise_sound_volume.get_value() - * (max_volume - min_volume) * 0.01f + min_volume); - - //sub_1402B7880()->sub_1402BAE80(); - module_data_handler_data_add_all_modules(); - customize_item_data_handler_data_add_all_customize_items(); - sound_work_reset_all_se(); - //adv_touch_get()->open(sub_1402103A0()); - //adv_festa_get()->open(); - //adv_noblesse_get()->open(); - //task_information_ptr->field_77 = false; - //sub_1403F35A0(); - return true; - } - return false; -} - -bool GameState::Advertise::Ctrl() { - /*task_information_ptr->sub_1403BB780(2); - - if (sub_14066CC00()) { - sub_14066FA90(); - game_state_set_error_code(91); - }*/ - - /*if (sub_1403BADE0()) - sub_1403BB7B0();*/ - - //*(uint8_t*)((size_t)task_aime_get() + 0x15C) = game_state_is_advertise_not_sub_demo(); - - /*if (!sup_err_task_supplies_error_check_alive() && task_information_ptr->field_77 - && wrap_collection_get()->printer.get_value() && sub_140662AD0() != 3) - task_information_ptr->field_77 = false;*/ - - const InputState* input_state = input_state_get(0); - bool v2 = false;//sub_1403F49C0(); - if (input_state->CheckTapped(INPUT_BUTTON_JVS_START) && v2) { - game_state_set_game_state_next(GAME_STATE_GAME); - sound_work_play_se(0, "se_sy_01", 1.0); - } - - /*adv_touch_get()->sub_14014ED60(true); - if (!v2) - adv_touch_get()->sub_14014ED60(false); - - adv_touch_get()->sub_14014EC20(v2); - if (game_state_get()->sub_game_state == SUB_GAME_STATE_TITLE) - adv_touch_get()->sub_14014EC20(false); - - if (game_state_get()->sub_game_state == SUB_GAME_STATE_CM && !*(uint8_t*)((size_t)adv_cm_get() + 0x108)) - adv_touch_get()->sub_14014EC20(false); - - if (game_state_get()->sub_game_state == SUB_GAME_STATE_PHOTO_MODE_DEMO && !check_photo_mode_demo_movie_exists()) - adv_touch_get()->sub_14014EC20(false); - - if (input_state->CheckDown(INPUT_BUTTON_JVS_L) || input_state->CheckDown(INPUT_BUTTON_JVS_R)) - adv_touch_get()->sub_14014ED60(false); - - if (adv_touch_get()->field_70) { - game_state_set_game_state_next(GAME_STATE_GAME); - sound_work_play_se(0, "se_sy_01"); - adv_touch_get()->sub_14014EC00(); - }*/ - - /*if (sub_14022EF20(0)->sub_14022ED30() && v2) - game_state_set_game_state_next(GAME_STATE_GAME);*/ - return false; -} - -bool GameState::Advertise::Dest() { - //task_slider_control_get()->sub_140618840(v0); - //adv_touch_get()->close(); - //adv_festa_get()->close(); - //adv_noblesse_get()->close(); - adv_unload(); - sound_work_set_speakers_volume(get_max_speakers_volume()); - //*(uint8_t*)((size_t)task_aime_get() + 0x15C) = 0; - return true; -} - -bool GameState::Game::Init() { - //task_information_ptr->sub_1403BB780(4); - //sub_14066C660(); - task_rob_manager_open(); - return true; -} - -bool GameState::Game::Ctrl() { - return false; -} - -bool GameState::Game::Dest() { - if (!task_pv_game_close() || !task_rob_manager_close()) - return false; - - //sub_1403935A0(); - //task_sel_ticket_close(); - //sel_vocal_change_get()->close(); - return true; -} - -bool GameState::TestMode::Init() { - test_mode_set(true); - sound_work_reset_all_se(); - - if (!test_mode_get()) { - //sub_1401F4440(); - //sub_1401E87E0(); - } - - test_mode_set(1); - - //task_information_ptr->sub_1403BB780(0); - - /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); - task_lamp_ctrl->field_74 = 0; - task_lamp_ctrl->field_78 = color_white; - task_lamp_ctrl->field_7C = 0;*/ - - //task_slider_control_get()->sub_140618980(0); - - task_wait_screen_set_load_loop_none(); - task_mask_screen_fade_in(0.0f, 0); - - sound_work_reset_all_se(); - for (int32_t i = 0; i < 3; i++) - sound_work_release_stream(i++); - return true; -} - -bool GameState::TestMode::Ctrl() { - return false; -} - -bool GameState::TestMode::Dest() { - //sub_1401F4420(); - test_mode_set(false); - return true; -} - -bool GameState::AppError::Init() { - //task_information_ptr->close(); - - task_wait_screen_set_load_loop_none(); - for (int32_t i = 0; i < 3; i++) - sound_work_release_stream(i++); - sound_work_reset_all_se(); - - /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); - task_lamp_ctrl->field_74 = 0; - task_lamp_ctrl->field_78 = color_white;*/ - - //task_slider_control_get()->sub_140618980(0); - //task_photo_service_del(); - return true; -} - -bool GameState::AppError::Ctrl() { - return false; -} - -bool GameState::AppError::Dest() { - return true; -} - -bool GameState::DataTest::Init() { - rctx_ptr->render_manager->set_multisample(false); - rctx_ptr->render_manager->set_clear(true); - data_test_game_state_prev = game_state_get()->game_state_prev; - //task_information_ptr->sub_1403BB780(0); - task_wait_screen_set_load_loop_none(); - task_rob_manager_open(); - //touch_util::touch_reaction_set_enable(false); - //net_alw_detail::context_ptr_get()->field_C8(2); - return true; -} - -bool GameState::DataTest::Ctrl() { - if (data_test_reset) { - if (game_state_get()->sub_game_state != SUB_GAME_STATE_DATA_TEST_MAIN) - game_state_set_sub_game_state_next(SUB_GAME_STATE_DATA_TEST_MAIN); - else - game_state_set_game_state_next(data_test_game_state_prev); - } - return false; -} - -bool GameState::DataTest::Dest() { - if (!task_rob_manager_close()) - return false; - - rctx_ptr->render_manager->set_multisample(true); - rctx_ptr->render_manager->set_clear(false); - //touch_util::touch_reaction_set_enable(true); - return true; -} - -bool GameState::DataEdit::Init() { // Added - rctx_ptr->render_manager->set_multisample(false); - rctx_ptr->render_manager->set_clear(true); - data_edit_game_state_prev = game_state_get()->game_state_prev; - return true; -} - -bool GameState::DataEdit::Ctrl() { // Added - if (data_edit_reset) { - if (game_state_get()->sub_game_state != SUB_GAME_STATE_DATA_EDIT_MAIN) - game_state_set_sub_game_state_next(SUB_GAME_STATE_DATA_EDIT_MAIN); - else - game_state_set_game_state_next(data_edit_game_state_prev); - } - return false; -} - -bool GameState::DataEdit::Dest() { // Added - rctx_ptr->render_manager->set_multisample(true); - rctx_ptr->render_manager->set_clear(false); - return true; -} - -bool SubGameState::DataInitialize::Init() { - task_data_init_open(); - task_auth_3d_open(); - aet_manager_open(); - //no_good_open(); - return true; -} - -bool SubGameState::DataInitialize::Ctrl() { - return task_data_init_check_state(); -} - -bool SubGameState::DataInitialize::Dest() { - task_data_init_close(); - return true; -} - -bool SubGameState::SystemStartup::Init() { - task_system_startup_open(); - task_pv_db_open(); - - /*if (!sub_14066E820()) - game_state_set_error_code(949);*/ - - ScreenParam& screen_param = get_screen_param(); - - //sub_14066D190(); - - if (!test_mode_get()) { - /*if (screen_param.mode != SCREEN_MODE_HD) - game_state_set_error_code(910);*/ - - /*if (sub_14066C9A0()) { - sub_14066FA90(); - game_state_set_error_code(90); - }*/ - } - - /*if (sub_1401E8A40()) - sub_1406A1DE0(task_touch_ptr[0], 0);*/ - - /*if (sub_1401E89A0()) - task_aime_get()->sub_14017A890(9);*/ - - //task_lamp_ctrl_get()->sub_1403C8B40(); - - /*if (sub_1401E8A50()) - task_slider_control_get()->sub_140618A60();*/ - - /*sub_1403D4760();*/ - - /*const Wrap_collection* wrap_collection = wrap_collection_get(); - if (wrap_collection && wrap_collection->printer.get_value()) - task_printer_get()->sub_1404C0F90();*/ - return true; -} - -bool SubGameState::SystemStartup::Ctrl() { - return !!system_startup_ready; -} - -bool SubGameState::SystemStartup::Dest() { - task_system_startup_close(); - //task_closing_ptr->open("CLOSING"); - //task_touch_area_ptr->open("TOUCH AREA", app::TASK_PRIO_HIGH); - //sound_volume_get(); - //sub_140623810(); - //sub_1406A1F30(); - - task_mask_screen_open(); - game_state_set_sub_game_state_next(SUB_GAME_STATE_WARNING); - - if (!test_mode_get()) { - //sub_14066D190(); - - /*uint8_t v2[4]; - net_alw_detail::context_ptr_get()->field_90(v2); - if (!v2[1] && !v2[3]) { - startup_error_code = 8005; - game_state_set_sub_game_state_next(SUB_GAME_STATE_SYSTEM_STARTUP_ERROR); - sub_140022740(); - }*/ - } - return true; -} - -bool SubGameState::SystemStartupError::Init() { - //task_mode_app_error_open(startup_error_code); - return true; -} - -bool SubGameState::SystemStartupError::Ctrl() { - GameState* game_state = game_state_get(); - if (game_state->game_state || game_state->sub_game_state != SUB_GAME_STATE_SYSTEM_STARTUP_ERROR) - return false; - - const InputState* input_state = input_state_get(0); - return input_state->CheckDown(INPUT_BUTTON_JVS_START) && input_state->CheckTapped(INPUT_BUTTON_JVS_TEST); -} - -bool SubGameState::SystemStartupError::Dest() { - //task_mode_app_error_close(); - game_state_set_sub_game_state_next(SUB_GAME_STATE_WARNING); - return true; -} - -bool SubGameState::Warning::Init() { - /*if (sub_14066F660() && !test_mode_get() && !sub_14066D030()) - task_warning.open("WARNING");*/ - return true; -} - -bool SubGameState::Warning::Ctrl() { - return true; - //return !task_warning.check_alive(); -} - -bool SubGameState::Warning::Dest() { - //task_warning.close(); - return true; -} - -bool SubGameState::Logo::Init() { - //task_information_ptr->sub_1403BB780(1); - //task_adv_logo.open(0); - //sub_1403F35A0(); - return true; -} - -bool SubGameState::Logo::Ctrl() { - return true; - //*task_information_ptr->sub_1403BB780(1); - //return !task_adv_logo.check_alive(); -} - -bool SubGameState::Logo::Dest() { - //task_information_ptr->sub_1403BB780(1); - //sub_14066E8D0(); - //task_adv_logo.close(); - return true; -} - -bool SubGameState::Rating::Init() { - //sub_1403F35A0(); - return true; -} - -bool SubGameState::Rating::Ctrl() { - return true; - //return !task_adv_rating.check_alive(); -} - -bool SubGameState::Rating::Dest() { - //task_adv_rating.close(); - return true; -} - -bool SubGameState::Demo::Init() { - rctx_ptr->render_manager->set_multisample(false); - - if (check_photo_mode_demo_movie_exists()) - sub_game_state_demo_data.state = 1; - - switch (sub_game_state_demo_data.state) { - case 0: { - ScreenParam& screen_param = get_screen_param(); - ScreenParam& render_screen_param = get_render_screen_param(); - get_screen_param(); - - rectangle rect; - rect.pos = { 0.0f, (float_t)(screen_param.height - render_screen_param.height) * 0.5f }; - rect.size = { (float_t)render_screen_param.width, (float_t)render_screen_param.height }; - - TaskMovie::SprParams spr_params; - spr_params.disp.rect = rect; - spr_params.disp.screen_mode = screen_param.mode; - spr_params.disp.scale = -1.0f; - spr_params.disp.field_18 = 0; - spr_params.disp.target = spr::SPR_TARGET_DEFAULT; - spr_params.prio = spr::SPR_PRIO_07; - task_movie_get(0)->Reset(spr_params); - //task_movie_get(0)->Load("rom/movie/diva_adv.wmv"); - } break; - case 1: - task_wait_screen_set_load_loop_demo_load(); - sub_game_state_demo_data.load = false; - task_rob_manager_open(); - sub_game_state_demo_data.pv_state = 0; - break; - } - - //sub_1403F35A0(); - return true; -} - -bool SubGameState::Demo::Ctrl() { - bool ret = false; - bool v1 = false; - /*if (sup_err_task_supplies_error_check_alive()) { - if (!task_pv_game_check_alive()) - return true; - - v1 = true; - }*/ - - switch (sub_game_state_demo_data.state) { - case 0: - ret = !task_movie_get(0)->CheckState(); - break; - case 1: { - if (sub_game_state_demo_data.load) { - if (!task_pv_game_check_alive()) - ret = true; - } - else if (!task_wait_screen_get_started()) { - int32_t index = sub_game_state_demo_data.index; - if (stru_1411A12F8.size()) { - size_t size = stru_1411A12E0.size(); - if (size) { - uint32_t pv_index = stru_1411A12F8.data()[sub_game_state_demo_data.index]; - if (pv_index < size) { - const std::pair* elem = &stru_1411A12E0.data()[pv_index]; - if (elem) { - pv_difficulty diff = elem->second[sub_game_state_demo_data.difficulty_select]; - if (diff != PV_DIFFICULTY_MAX) { - if (!task_pv_game_init_demo_pv(elem->first, diff, true)) - task_wait_screen_set_load_loop_none(); - goto Next; - } - } - } - } - } - - v1 = true; - - Next: - sub_game_state_demo_data.index = ++index; - - if (index >= stru_1411A12E0.size()) { - sub_game_state_demo_data.index = 0; - sub_game_state_demo_data_difficulty_select_increment(); - } - sub_game_state_demo_data.load = true; - } - } break; - default: - ret = 1; - break; - } - - const InputState* input_state = input_state_get(0); - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) - v1 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) - v1 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) - v1 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) - v1 = true; - - if (v1 && task_wait_screen_check_index_none()) - ret = true; - return ret; -} - -bool SubGameState::Demo::Dest() { - //net_alw_detail::context_ptr_get()->field_C8(1); - - switch (sub_game_state_demo_data.state) { - case 0: - task_movie_get(0)->Unload(); - task_movie_get(0)->close(); - sub_game_state_demo_data.state = 1; - case 1: - switch (sub_game_state_demo_data.pv_state) { - case 0: - default: - if (pv_game_get()) - pv_game_get()->unload(); - sub_game_state_demo_data.pv_state = 1; - return false; - case 1: - if (task_pv_game_close() && task_rob_manager_close()) - sub_game_state_demo_data.pv_state = 2; - return false; - case 2: - task_wait_screen_set_load_loop_none(); - task_mask_screen_fade_in(0.0f, 0); - sub_game_state_demo_data.state = 0; - break; - } - break; - } - - rctx_ptr->render_manager->set_multisample(true); - return true; -} - -bool SubGameState::Title::Init() { - //sub_140141F80(&task_adv_title, 0, false); - //sub_1403F35A0(); - return true; -} - -bool SubGameState::Title::Ctrl() { - return true; - //return !task_adv_title.check_alive(); -} - -bool SubGameState::Title::Dest() { - //sub_14066E8D0(); - //task_adv_title.close(); - return true; -} - -bool SubGameState::Ranking::Init() { - //adv_rank_main_get(); - //sub_140143280(); - //sub_1403F35A0(); - return true; -} - -bool SubGameState::Ranking::Ctrl() { - return true; - //return !adv_rank_main_get()->check_alive(); -} - -bool SubGameState::Ranking::Dest() { - //sub_14066E8D0(); - //adv_rank_main_get()->close(); - return true; -} - -bool SubGameState::ScoreRanking::Init() { - //adv_score_rank_main_get(); - //sub_140149010(); - //sub_1403F35A0(); - return true; -} - -bool SubGameState::ScoreRanking::Ctrl() { - return true; - //return !adv_score_rank_main_get()->check_alive(); -} - -bool SubGameState::ScoreRanking::Dest() { - //sub_14066E8D0(); - //adv_score_rank_main_get()->close(); - return true; -} - -bool SubGameState::CM::Init() { - //adv_cm_get(); - //sub_14013F750(); - //sub_1403F35A0(); - return true; -} - -bool SubGameState::CM::Ctrl() { - return true; - /*bool v0 = false; - bool v1 = false;//adv_cm_get()->field_68 == 3; - const InputState* input_state = input_state_get(0); - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) - v0 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) - v0 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) - v0 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) - v0 = true; - return v0 ? v0 : v1;*/ -} - -bool SubGameState::CM::Dest() { - //sub_14066E8D0(); - //adv_cm_get()->close(); - return true; -} - -bool SubGameState::PhotoModeDemo::Init() { - if (check_photo_mode_demo_movie_exists()) { - ScreenParam& screen_param = get_screen_param(); - ScreenParam& render_screen_param = get_render_screen_param(); - - rectangle rect; - rect.pos = { 0.0f, (float_t)(screen_param.height - render_screen_param.height) * 0.5f }; - rect.size = { (float_t)render_screen_param.width, (float_t)render_screen_param.height }; - - TaskMovie::SprParams spr_params; - spr_params.disp.rect = rect; - spr_params.disp.screen_mode = screen_param.mode; - spr_params.disp.scale = -1.0f; - spr_params.disp.field_18 = 0; - spr_params.disp.target = spr::SPR_TARGET_DEFAULT; - spr_params.prio = spr::SPR_PRIO_07; - task_movie_get(0)->Reset(spr_params); - //task_movie_get(0)->Load("rom/movie/diva_adv02.wmv"); - - //adv_festa_get()->field_6C = true; - //adv_noblesse_get()->sub_140142530(v6, true); - } - else { - //adv_festa_get()->field_6C = false; - //adv_noblesse_get()->sub_140142530(v6, false); - } - - //sub_1403F35A0(); - return true; -} - -bool SubGameState::PhotoModeDemo::Ctrl() { - return true; - /*if (!check_photo_mode_demo_movie_exists()) - return true; - - bool v2 = !task_movie_get(0)->CheckState(); - - bool v4 = false; - const InputState* input_state = input_state_get(0); - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) - v4 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) - v4 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) - v4 = true; - if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) - v4 = true; - if (v4 && task_wait_screen_check_index_none()) - v2 = true; - return v2;*/ -} - -bool SubGameState::PhotoModeDemo::Dest() { - if (check_photo_mode_demo_movie_exists()) { - task_movie_get(0)->Unload(); - task_movie_get(0)->close(); - } - return true; -} - -bool SubGameState::Selector::Init() { -#if PV_DEBUG - if (!pv_x) { - pv_game_selector_init(); - pv_game_selector_get()->open("PVGAME SELECTOR", app::TASK_PRIO_HIGH); - return true; - } -#endif - -#if BAKE_X_PACK - if (pv_x_bake) { - XPVGameBaker* baker = x_pv_game_baker_get(); - if (!baker) { - x_pv_game_baker_init(); - x_pv_game_baker_get()->open("X PVGAME BAKER", app::TASK_PRIO_HIGH); - } - else - baker->next = true; - return true; - } -#endif - - x_pv_game_selector_init(); - x_pv_game_selector_get()->open("X PVGAME SELECTOR", app::TASK_PRIO_HIGH); - return true; - - /*task_information_ptr->sub_1403BB780(3); - sub_1402B7880()->sub_1402BAE80(); - module_data_handler_data_add_all_modules(); - //sub_14022CE00()->sub_14022DC10(); - //sub_1404FF3D0(); - //sel_main_get()->open(false); - //task_slider_control_get()->sub_140618980(1); - return true;*/ -} - -bool SubGameState::Selector::Ctrl() { -#if PV_DEBUG - if (!pv_x) { - PVGameSelector* sel = pv_game_selector_get(); - if (sel->exit) { - if (sel->start && pv_game_init()) { - struc_717* v0 = sub_14038BB30(); - v0->field_0.stage_index = 0; - - struc_716* v2 = v0->get_stage(); - v2->field_2C.pv_id = sel->pv_id; - v2->field_2C.difficulty = sel->difficulty; - v2->field_2C.edition = sel->edition; - v2->field_2C.score_percentage_clear = 5000; - v2->field_2C.life_gauge_safety_time = 40; - v2->field_2C.life_gauge_border = 30; - - for (int32_t i = 0; i < ROB_ID_MAX; i++) { - v2->field_2C.field_4C[i] = sel->modules[i]; - v2->field_2C.field_64[i] = sel->modules[i]; - v2->field_2C.field_7C[i] = {}; - v2->field_2C.field_DC[i] = {}; - } - - v0->field_0.no_fail = true; - v0->field_0.watch = true; - v0->field_0.success = sel->success; - - PlayerData* player_data = player_data_array_get(0); - player_data->field_0 = true; - - sub_14038BB30()->field_0.option = 0; - - task_pv_game_init_pv(); - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_MAIN); - } - else - game_state_set_game_state_next(GAME_STATE_ADVERTISE); - return true; - } - return false; - } -#endif - -#if BAKE_X_PACK - if (pv_x_bake) { - XPVGameBaker* baker = x_pv_game_baker_get(); - if (baker->wait) - return false; - - const int32_t pv_ids[] = { - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - }; - - if (baker->start && x_pv_game_init()) { - x_pv_game_get()->open("PVGAME", app::TASK_PRIO_HIGH); - x_pv_game_get()->load(pv_ids[baker->index], pv_ids[baker->index] % 100, baker->charas, baker->modules); - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_MAIN); - } - else - game_state_set_game_state_next(GAME_STATE_ADVERTISE); - return true; - } -#endif - - XPVGameSelector* sel = x_pv_game_selector_get(); - if (sel->exit) { - if (sel->start && x_pv_game_init()) { - x_pv_game_get()->open("PVGAME", app::TASK_PRIO_HIGH); - x_pv_game_get()->load(sel->pv_id, sel->stage_id, sel->charas, sel->modules); - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_MAIN); - } - else - game_state_set_game_state_next(GAME_STATE_ADVERTISE); - return true; - } - return false; - - /*if (sel_main_get()->check_alive()) { - if (sel_main_get()->field_7A && !task_pv_game_check_alive()) - task_pv_game_init_pv(); - return false; - } - else { - if (sel_main_get()->field_79) - game_state_set_game_state_next(GAME_STATE_ADVERTISE); - else - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_MAIN); - return true; - }*/ -} - -bool SubGameState::Selector::Dest() { -#if PV_DEBUG - if (!pv_x) { - PVGameSelector* sel = pv_game_selector_get(); - if (sel->check_alive()) { - sel->close(); - return false; - } - - pv_game_selector_free(); - return true; - } -#endif - -#if BAKE_X_PACK - if (pv_x_bake) { - XPVGameBaker* baker = x_pv_game_baker_get(); - if (baker && baker->start) { - baker->start = false; - return true; - } - else if (baker && !baker->exit) - return false; - else if (baker->check_alive()) { - baker->close(); - return false; - } - - x_pv_game_baker_free(); - return true; - } -#endif - - XPVGameSelector* sel = x_pv_game_selector_get(); - if (sel->check_alive()) { - sel->close(); - return false; - } - - x_pv_game_selector_free(); - return true; - - /*if (sel_main_get()->check_alive()) { - sel_main_get()->close(); - return false; - } - return true;*/ -} - -bool SubGameState::GameMain::Init() { - sound_work_release_stream(0); - game_state_set_inner_state(0); - //task_information_ptr->sub_1403BB780(4); - rctx_ptr->render_manager->set_multisample(false); - rob_osage_test->open("ROB_OSAGE_TEST"); - return true; -} - -bool SubGameState::GameMain::Ctrl() { - switch (game_state_get()->inner_state) { - case 0: - //if (task_wait_screen_get_started()) - // break; - - game_state_set_inner_state(1); - break; - case 1: - if (task_wait_screen_check_index_none()) { - bool watch = sub_14038BB30()->field_0.watch; - //sound_volume_get()->show_enable(true, watch); - - /*if (watch) - task_photo_service_add();*/ - /*else { - if (!act_toggle_get()->check_alive()) - act_toggle_get()->sub_14013CE40(); - *(int32_t*)((size_t)act_toggle_get() + 0xA0) = 5; - }*/ - - //sound_volume_get()->field_6C = spr::SPR_PRIO_04; - //sound_volume_get()->field_70 = spr::SPR_PRIO_05; - } - -#if PV_DEBUG - if (!pv_x) { - if (!task_pv_game_check_alive()) { - if (!sub_14038BB30()->field_0.watch) { - //game_state_set_sub_game_state_next(SUB_GAME_STATE_STAGE_RESULT); - return true; - } - - /*if (player_data_array_get(0)->field_0) - net_mgr::net_mgr_stage_result_open();*/ - - game_state_set_inner_state(2); - } - break; - } -#endif - - if (!x_pv_game_get()->check_alive()) - return true; - break; - case 2: { - /*if (net_mgr::net_mgr_stage_result_check_alive()) - break;*/ - - /*std::vector textures; - //sub_140490230(textures); - if (textures.size() > 0) - game_state_set_sub_game_state_next(SUB_GAME_STATE_SCREEN_SHOT_SEL); - else { - //task_photo_service_del(); - if (!sub_1403F6B00()) - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_OVER); - else - game_state_set_sub_game_state_next(SUB_GAME_STATE_SCREEN_SHOT_RESULT); - }*/ - } return true; - } - return false; -} - -bool SubGameState::GameMain::Dest() { - bool res; -#if PV_DEBUG - if (!pv_x) { - task_pv_game_close(); - res = pv_game_free(); - } - else - res = x_pv_game_free(); -#else - res = x_pv_game_free(); -#endif - if (!res) - return false; - - rob_osage_test->close(); -#if BAKE_X_PACK - if (pv_x_bake) { - XPVGameBaker* baker = x_pv_game_baker_get(); - if (baker) - game_state_set_sub_game_state_next(SUB_GAME_STATE_SELECTOR); - } -#endif - - task_mask_screen_fade_in(0.0f, 0); - - //sound_volume_get()->field_6C = spr::SPR_PRIO_09; - //sound_volume_get()->field_70 = spr::SPR_PRIO_10; - //*(int32_t*)((size_t)act_toggle_get() + 0xA0) = 10; - //sound_volume_get()->show_enable(false, false); - //act_toggle_get()->close(); - - /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); - task_lamp_ctrl->field_74 = 1; - task_lamp_ctrl->field_78 = color_white;*/ - - //task_slider_control_get()->sub_140618980(1); - - rctx_ptr->render_manager->set_multisample(true); - return true; -} - -bool SubGameState::GameSel::Init() { - //task_information_ptr->sub_1403BB780(3); - //sel_main_get()->open(true); - return true; -} - -bool SubGameState::GameSel::Ctrl() { - return true; - /*if (sel_main_get()->check_alive()) { - if (sel_main_get()->field_7A && !task_pv_game_check_alive()) - task_pv_game_init_pv(); - return false; - } - else { - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_MAIN); - return true; - }*/ -} - -bool SubGameState::GameSel::Dest() { - /*if (sel_main_get()->check_alive()) - sel_main_get()->close();*/ - return true; -} - -bool SubGameState::StageResult::Init() { - //task_information_ptr->sub_1403BB780(3); - //stage_result_main_get(); - //sub_140656320(); - return true; -} - -bool SubGameState::StageResult::Ctrl() { - return true; - /*if (stage_result_main_get()->check_alive()) - return false; - - if (sub_14038BB30()->field_0.no_fail) { - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_OVER); - return true; - } - - int32_tv2 = sub_14038BB30()->field_0.stage_index; - sub_14038BB30(); - int32_t v3 = 2;//sub_14038AEE0(); - //if (player_data_array_get(0)->contest.enable) - // sub_14038BB30()->sub_14038D080(false); - - if (v2 >= v3 - 1) - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_OVER); - else { - struc_716* v7 = sub_14038BB30()->get_stage(); - if (v7->field_0 == -1 && !v7->field_128.next_stage) { - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_OVER); - } - else { - sub_14038BB30()->cycle_state_index(); - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_SEL); - } - } - return true;*/ -} - -bool SubGameState::StageResult::Dest() { - //stage_result_main_get()->close(); - return true; -} - -bool SubGameState::ScreenShotSel::Init() { - //task_information_ptr->sub_1403BB780(3); - //sel_screen_shot_get(); - //sub_1405D7C60(); - return true; -} - -bool SubGameState::ScreenShotSel::Ctrl() { - return true; - /*if (sel_screen_shot_get()->check_alive()) - return false; - - game_state_set_sub_game_state_next(sub_1403F6B00() - ? SUB_GAME_STATE_SCREEN_SHOT_RESULT : SUB_GAME_STATE_GAME_OVER); - return true;*/ -} - -bool SubGameState::ScreenShotSel::Dest() { - //sel_screen_shot_get()->close(); - return true; -} - -bool SubGameState::ScreenShotResult::Init() { - //task_information_ptr->sub_1403BB780(3); - //screen_shot_result_main_get(); - //sub_140559010(); - return true; -} - -bool SubGameState::ScreenShotResult::Ctrl() { - return true; - /*if (screen_shot_result_main_get()->check_alive()) - return false; - - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_OVER); - return true;*/ -} - -bool SubGameState::ScreenShotResult::Dest() { - //screen_shot_result_main_get()->close(); - return true; -} - -bool SubGameState::GameOver::Init() { - //task_information_ptr->sub_1403BB780(5); - - /*bool v0 = true; - int32_t v1 = sub_14038BB30()->field_0.stage_index; - sub_14038BB30(); - - int32_t v2 = sub_14038AEE0() - 1; - if (!sub_1402103A0()) - v0 = false; - if (sub_14038BB30()->field_0.no_fail) - v0 = false; - if (!sub_1403933C0()) - v0 = false; - - if (v1 == v2) { - if (sub_14038BB30()->get_stage()->field_0 != -1) - v0 = false; - } - else if (v1 > v2) - v0 = false; - game_over_main_open(game_over_main_get(), v0);*/ - return true; -} - -bool SubGameState::GameOver::Ctrl() { - return true; - /*if (game_over_main_get()->check_alive()) { - struc_705* v2 = sub_14022EF20(0); - if (v2 && sub_14022ED30(v2)) - *(uint8_t*)((size_t)game_over_main_get() + 0x8D) = 1; - } - else { - if (*(uint8_t*)((size_t)game_over_main_get() + 0x8D)) - game_state_set_sub_game_state_next(SUB_GAME_STATE_GAME_SEL); - else - game_state_set_game_state_next(GAME_STATE_ADVERTISE); - } - return false;*/ -} - -bool SubGameState::GameOver::Dest() { - //game_over_main_get()->close(); - return true; -} - -bool SubGameState::DataTestMain::Init() { - data_test_sel->open("DATA_TEST_MAIN"); - return true; -} - -bool SubGameState::DataTestMain::Ctrl() { - int32_t state = data_test_sel_get_sub_state(); - if (state >= 0) - game_state_set_sub_game_state_next((SubGameStateEnum)state); - return false; -} - -bool SubGameState::DataTestMain::Dest() { - data_test_sel->close(); - return true; -} - -bool SubGameState::DataTestMisc::Init() { - task_data_test_misc->open("DATA_TEST_MISC"); - return true; -} - -bool SubGameState::DataTestMisc::Ctrl() { - return false; -} - -bool SubGameState::DataTestMisc::Dest() { - task_data_test_misc->close(); - return true; -} - -bool SubGameState::DataTestObj::Init() { - task_data_test_obj->open("DATA_TEST_OBJ"); - task_stage_open("DATA_TEST_OBJ_STAGE"); - return true; -} - -bool SubGameState::DataTestObj::Ctrl() { - return false; -} - -bool SubGameState::DataTestObj::Dest() { - task_data_test_obj->close(); - task_stage_close(); - return true; -} - -bool SubGameState::DataTestStg::Init() { - clear_color = 0xFF606060; - - camera* cam = rctx_ptr->camera; - cam->set_view_point({ 0.0f, 0.88f, 4.3f }); - cam->set_interest({ 0.0f, 1.0f, 0.0f }); - - dtm_stg->open("DATA_TEST_STAGE"); - dtw_stg_init(); - return true; -} - -bool SubGameState::DataTestStg::Ctrl() { - return false; -} - -bool SubGameState::DataTestStg::Dest() { - clear_color = 0xFF000000; - - dtm_stg_unload(); - dtw_stg_unload(); - return true; -} - -bool SubGameState::DataTestMot::Init() { - data_test_mot->open("TASK_DATA_TEST_MOT"); - rob_osage_test->open("ROB_OSAGE_TEST"); - rob_chara_adjust->open("ROB_CHARA_ADJUST"); - dtm_stg_load(0); - dtw_stg_load(true); - return true; -} - -bool SubGameState::DataTestMot::Ctrl() { - return false; -} - -bool SubGameState::DataTestMot::Dest() { - data_test_mot->close(); - rob_osage_test->close(); - rob_chara_adjust->close(); - dtm_stg_unload(); - dtw_stg_unload(); - return true; -} - -bool SubGameState::DataTestCollision::Init() { - return true; -} - -bool SubGameState::DataTestCollision::Ctrl() { - return false; -} - -bool SubGameState::DataTestCollision::Dest() { - return true; -} - -bool SubGameState::DataTestSpr::Init() { - return true; -} - -bool SubGameState::DataTestSpr::Ctrl() { - return false; -} - -bool SubGameState::DataTestSpr::Dest() { - return true; -} - -bool SubGameState::DataTestAet::Init() { - clear_color = 0xFF606060; - dtm_aet_load(); - return true; -} - -bool SubGameState::DataTestAet::Ctrl() { - return false; -} - -bool SubGameState::DataTestAet::Dest() { - clear_color = 0xFF000000; - dtm_aet_unload(); - return true; -} - -bool SubGameState::DataTestAuth3d::Init() { - auth_3d_test_task->open("AUTH3DTEST"); - return true; -} - -bool SubGameState::DataTestAuth3d::Ctrl() { - return false; -} - -bool SubGameState::DataTestAuth3d::Dest() { - auth_3d_test_task->close(); - return true; -} - -bool SubGameState::DataTestChr::Init() { - return true; -} - -bool SubGameState::DataTestChr::Ctrl() { - return false; -} - -bool SubGameState::DataTestChr::Dest() { - return true; -} - -bool SubGameState::DataTestItem::Init() { - return true; -} - -bool SubGameState::DataTestItem::Ctrl() { - return false; -} - -bool SubGameState::DataTestItem::Dest() { - return true; -} - -bool SubGameState::DataTestPerf::Init() { - return true; -} - -bool SubGameState::DataTestPerf::Ctrl() { - return false; -} - -bool SubGameState::DataTestPerf::Dest() { - return true; -} - -bool SubGameState::DataTestPvScript::Init() { - return true; -} - -bool SubGameState::DataTestPvScript::Ctrl() { - return false; -} - -bool SubGameState::DataTestPvScript::Dest() { - return true; -} - -bool SubGameState::DataTestPrint::Init() { - return true; -} - -bool SubGameState::DataTestPrint::Ctrl() { - return false; -} - -bool SubGameState::DataTestPrint::Dest() { - return true; -} - -bool SubGameState::DataTestCard::Init() { - return true; -} - -bool SubGameState::DataTestCard::Ctrl() { - return false; -} - -bool SubGameState::DataTestCard::Dest() { - return true; -} - -bool SubGameState::DataTestOpd::Init() { - task_rob_manager_close(); - return task_data_test_opd->open(); -} - -bool SubGameState::DataTestOpd::Ctrl() { - return !task_data_test_opd->check_alive(); -} - -bool SubGameState::DataTestOpd::Dest() { - task_rob_manager_open(); - task_data_test_opd->close(); - return true; -} - -bool SubGameState::DataTestSlider::Init() { - return true; -} - -bool SubGameState::DataTestSlider::Ctrl() { - return false; -} - -bool SubGameState::DataTestSlider::Dest() { - return true; -} - -bool SubGameState::DataTestGlitter::Init() { - task_data_test_glitter_particle->open("DATA_TEST_PARTICLE"); - dtm_stg_load(0); - dtw_stg_load(true); - return true; -} - -bool SubGameState::DataTestGlitter::Ctrl() { - return false; -} - -bool SubGameState::DataTestGlitter::Dest() { - dtw_stg_unload(); - dtm_stg_unload(); - //if (data_test_chr->check_alive()) - // data_test_chr->close(); - task_data_test_glitter_particle->close(); - return true; -} - -bool SubGameState::DataTestGraphics::Init() { - return true; -} - -bool SubGameState::DataTestGraphics::Ctrl() { - return false; -} - -bool SubGameState::DataTestGraphics::Dest() { - return true; -} - -bool SubGameState::DataTestCollectionCard::Init() { - return true; -} - -bool SubGameState::DataTestCollectionCard::Ctrl() { - return false; -} - -bool SubGameState::DataTestCollectionCard::Dest() { - return true; -} - -bool SubGameState::DataTestModeMain::Init() { - return true; -} - -bool SubGameState::DataTestModeMain::Ctrl() { - return false; -} - -bool SubGameState::DataTestModeMain::Dest() { - return true; -} - -bool SubGameState::DataEditMain::Init() { // Added - data_edit_sel->open("DATA_TEST_EDIT"); - return true; -} - -bool SubGameState::DataEditMain::Ctrl() { - int32_t state = data_edit_sel_get_sub_state(); - if (state >= 0) - game_state_set_sub_game_state_next((SubGameStateEnum)state); - return false; -} - -bool SubGameState::DataEditMain::Dest() { - data_edit_sel->close(); - return true; -} - -bool SubGameState::DataEditGlitterEditor::Init() { // Added - camera* cam = rctx_ptr->camera; - cam->set_view_point({ 0.0f, 1.4f, 1.0f }); - cam->set_interest({ 0.0f, 1.4f, 0.0f }); - - glitter_editor.open("GLITTER EDITOR", app::TASK_PRIO_HIGH); - return true; -} - -bool SubGameState::DataEditGlitterEditor::Ctrl() { // Added - return false; -} - -bool SubGameState::DataEditGlitterEditor::Dest() { // Added - glitter_editor.app::Task::close(); - return true; -} - -#if FACE_ANIM -bool SubGameState::DataEditFaceAnim::Init() { // Added - face_anim.open("FACE ANIM", app::TASK_PRIO_HIGH); - return true; -} - -bool SubGameState::DataEditFaceAnim::Ctrl() { // Added - return false; -} - -bool SubGameState::DataEditFaceAnim::Dest() { // Added - face_anim.close(); - return true; -} -#endif - -bool SubGameState::DataTestAppError::Init() { - return true; -} - -bool SubGameState::DataTestAppError::Ctrl() { - return false; -} - -bool SubGameState::DataTestAppError::Dest() { - return true; -} - -void game_state_init() { - game_state_set_state(GAME_STATE_STARTUP, SUB_GAME_STATE_MAX); -} - -void game_state_ctrl() { - GameState* game_state = game_state_get(); - if (!game_state->set_game_state_next) { - if (game_state->set_sub_game_state_next && game_state->next_game_state) { - if (app::check_closing_task()) { - game_state->call_count++; - return; - } - - game_state_set_state(GAME_STATE_MAX, game_state->sub_game_state_next); - game_state->next_sub_game_state = false; - game_state->next_game_state = false; - } - } - else { - if (game_state->next_sub_game_state && game_state->next_game_state) { - if (app::check_closing_task()) { - game_state->call_count++; - return; - } - - game_state_set_state(game_state->game_state_next, game_state->set_sub_game_state_next - ? game_state->sub_game_state_next : SUB_GAME_STATE_MAX); - game_state->next_sub_game_state = false; - game_state->next_game_state = false; - } - } - - if (game_state->set_game_state_next && game_state->next_game_state) - game_state->mode = GAME_STATE_MODE_DEST; - - GameStateData* game_state_data = game_state_data_array_get(game_state->game_state); - if (game_state_data) { - bool(*func)() = 0; - switch (game_state->mode) { - case GAME_STATE_MODE_INIT: - func = game_state_data->Init; - break; - case GAME_STATE_MODE_CTRL: - func = game_state_data->Ctrl; - break; - case GAME_STATE_MODE_DEST: - func = game_state_data->Dest; - break; - } - - bool ret = game_state->mode != GAME_STATE_MODE_CTRL; - if (func) - ret = func(); - - if (ret) { - if (game_state->mode == GAME_STATE_MODE_INIT) - game_state->mode = GAME_STATE_MODE_CTRL; - else if (game_state->mode == GAME_STATE_MODE_CTRL) - game_state->mode = GAME_STATE_MODE_DEST; - else if (game_state->mode == GAME_STATE_MODE_DEST) - game_state->next_sub_game_state = true; - else if (!game_state->set_game_state_next) { - game_state_set_game_state_next(game_state->game_state_next); - game_state_set_sub_game_state_next(game_state->sub_game_state_next); - } - } - - if (game_state->mode && !game_state->next_game_state) { - if (game_state->set_game_state_next || game_state->set_sub_game_state_next) - game_state->sub_mode = GAME_STATE_MODE_DEST; - - if (game_state_call_sub(game_state)) { - if (!game_state->set_game_state_next && !game_state->set_sub_game_state_next) { - SubGameStateEnum sub_game_state_next = game_state->sub_game_state_next; - if (sub_game_state_next == SUB_GAME_STATE_MAX) { - game_state_set_game_state_next(game_state->game_state_next); - sub_game_state_next = game_state->sub_game_state_next; - } - game_state_set_sub_game_state_next(sub_game_state_next); - } - game_state->next_game_state = true; - } - } - } - game_state->call_count++; -} - -GameStateEnum game_state_get_game_state() { - return game_state_get()->game_state; -} - -bool game_state_get_pause() { - GameState* game_state = game_state_get(); - SubGameStateData* sub_game_state_data = sub_game_state_data_array_get(game_state->sub_game_state); - if (sub_game_state_data) - return sub_game_state_data->pause; - return true; -} - -bool game_state_is_advertise_not_sub_demo() { - GameState* game_state = game_state_get(); - if (game_state->game_state == GAME_STATE_ADVERTISE) - return game_state->sub_game_state != SUB_GAME_STATE_DEMO; - return false; -} - -size_t game_state_print(char* buf, size_t buf_size) { - GameState* game_state = game_state_get(); - const char* game_state_name = game_state_names[game_state->game_state]; - const char* sub_game_state_name = sub_game_state_names[game_state->sub_game_state]; - return sprintf_s(buf, buf_size, "%s/%s", game_state_name, sub_game_state_name); -} - -void game_state_set_game_state_next(GameStateEnum state) { - GameState* game_state = game_state_get(); - if (game_state->game_state_next != GAME_STATE_APP_ERROR || !game_state->set_game_state_next) { - game_state->game_state_next = state; - game_state->set_game_state_next = true; - game_state->set_sub_game_state_next = false; - } -} - -void game_state_set_sub_game_state_next(SubGameStateEnum state) { - GameState* game_state = game_state_get(); - if (game_state->game_state_next != GAME_STATE_APP_ERROR || !game_state->set_game_state_next) { - game_state->sub_game_state_next = state; - game_state->set_sub_game_state_next = true; - } -} - -bool test_mode_get() { - return test_mode; -} - -void test_mode_set(bool value) { - test_mode = value; -} - -static bool game_state_call_sub(GameState* game_state) { - SubGameStateData* sub_game_state_data = sub_game_state_data_array_get(game_state->sub_game_state); - if (!sub_game_state_data) { - game_state->sub_call_count++; - return false; - } - - bool(*func)() = 0; - switch (game_state->sub_mode) { - case 0: - func = sub_game_state_data->Init; - break; - case 1: - func = sub_game_state_data->Ctrl; - break; - case 2: - func = sub_game_state_data->Dest; - break; - } - - if (!func || func()) { - if (game_state->sub_mode == GAME_STATE_MODE_INIT) - game_state->sub_mode = GAME_STATE_MODE_CTRL; - else if (game_state->sub_mode == GAME_STATE_MODE_CTRL) - game_state->sub_mode = GAME_STATE_MODE_DEST; - else if (game_state->sub_mode == GAME_STATE_MODE_DEST) { - game_state->sub_call_count++; - return true; - } - } - - game_state->sub_call_count++; - return false; -} - -static GameState* game_state_get() { - return &game_state; -} - -static const char* game_state_get_name(GameStateEnum state) { - return game_state_names[state]; -} - -static void game_state_set_state(GameStateEnum state, SubGameStateEnum sub_state) { - GameState* game_state = game_state_get(); - if (state != GAME_STATE_MAX) { - GameStateEnum game_state_prev = game_state->game_state; - game_state->game_state = state; - game_state->game_state_next = GAME_STATE_MAX; - game_state->game_state_prev = game_state_prev; - game_state->mode = GAME_STATE_MODE_INIT; - game_state->set_game_state_next = false; - game_state->call_count = 0; - game_state->inner_state = 0; - - dw_console_printf(DW_CONSOLE_MODE_CTRL, "[%s]->[%s]\n", - game_state_get_name(game_state_prev), game_state_get_name(state)); - - GameStateData* game_state_data = game_state_data_array_get(game_state->game_state); - if (game_state_data) { - game_state->game_state_next = game_state_data->next_game_state; - if (sub_state == SUB_GAME_STATE_MAX) - game_state->sub_game_state_next = game_state_data->next_sub_game_state; - } - } - - SubGameStateEnum sub_game_state_prev = game_state->sub_game_state; - game_state->sub_game_state = SUB_GAME_STATE_MAX; - game_state->sub_game_state_next = SUB_GAME_STATE_MAX; - game_state->sub_game_state_prev = sub_game_state_prev; - game_state->sub_mode = GAME_STATE_MODE_INIT; - game_state->set_sub_game_state_next = false; - game_state->sub_call_count = 0; - - GameStateData* game_state_data = game_state_data_array_get(game_state->game_state); - if (game_state_data) { - if (sub_state == SUB_GAME_STATE_MAX) { - game_state->sub_game_state = game_state_data->sub_game_state[0]; - game_state->sub_game_state_next = game_state_data->sub_game_state[1]; - } - else { - size_t i = 0; - SubGameStateEnum* sub_game_state = game_state_data->sub_game_state; - while (*sub_game_state != SUB_GAME_STATE_MAX && i < 24) { - if (*sub_game_state == sub_state) { - game_state->sub_game_state = sub_state; - game_state->sub_game_state_next = game_state_data->sub_game_state[i + 1]; - break; - } - - i++; - sub_game_state++; - } - } - } -} - -static GameStateData* game_state_data_array_get(GameStateEnum state) { - for (GameStateData& i : game_state_data_array) - if (i.game_state == state) - return &i; - return 0; -} - -static SubGameStateData* sub_game_state_data_array_get(SubGameStateEnum state) { - for (SubGameStateData& i : sub_game_state_data_array) - if (i.sub_game_state == state) - return &i; - return 0; -} - -static bool adv_load() { - data_struct* aft_data = &data_list[DATA_AFT]; - aet_database* aft_aet_db = &aft_data->data_ft.aet_db; - sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; - - if (sprite_manager_load_file(37, aft_spr_db) || aet_manager_load_file(30, aft_aet_db)) - return true; - return sound_work_load_farc("rom/sound/se_adv.farc"); -} - -static void adv_read() { - data_struct* aft_data = &data_list[DATA_AFT]; - aet_database* aft_aet_db = &aft_data->data_ft.aet_db; - sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; - - sprite_manager_read_file(37, "", aft_data, aft_spr_db); - aet_manager_read_file(30, "", aft_data, aft_aet_db); - sound_work_read_farc("rom/sound/se_adv.farc"); -} - -static void adv_unload() { - data_struct* aft_data = &data_list[DATA_AFT]; - aet_database* aft_aet_db = &aft_data->data_ft.aet_db; - sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; - - sprite_manager_unload_set(37, aft_spr_db); - aet_manager_unload_set(30, aft_aet_db); - sound_work_unload_farc("rom/sound/se_adv.farc"); -} - -static bool check_photo_mode_demo_movie_exists() { - if (wrap_collection_get()->printer.get_value()) - return data_list[DATA_AFT].check_file_exists("rom/movie/diva_adv02.wmv"); - return false; -} - -static void game_state_set_inner_state(int32_t state) { - game_state_get()->inner_state = state; -} - -static void sub_game_state_demo_data_difficulty_select_increment() { - int32_t difficulty_select = sub_game_state_demo_data.difficulty_select + 1; - if (difficulty_select < 0 || difficulty_select >= 1) - difficulty_select = 0; - sub_game_state_demo_data.difficulty_select = difficulty_select; -} diff --git a/src/ReDIVA/game_state.hpp b/src/ReDIVA/game_state.hpp deleted file mode 100644 index 93b16353..00000000 --- a/src/ReDIVA/game_state.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#pragma once - -#include "config.hpp" -#include "../KKdLib/default.hpp" - -enum GameStateEnum { - GAME_STATE_STARTUP = 0, - GAME_STATE_ADVERTISE, - GAME_STATE_GAME, - GAME_STATE_DATA_TEST, - GAME_STATE_TEST_MODE, - GAME_STATE_APP_ERROR, - GAME_STATE_DATA_EDIT, // Added - GAME_STATE_MAX, -}; - -enum SubGameStateEnum { - SUB_GAME_STATE_DATA_INITIALIZE = 0, - SUB_GAME_STATE_SYSTEM_STARTUP, - SUB_GAME_STATE_SYSTEM_STARTUP_ERROR, - SUB_GAME_STATE_WARNING, - SUB_GAME_STATE_LOGO, - SUB_GAME_STATE_RATING, - SUB_GAME_STATE_DEMO, - SUB_GAME_STATE_TITLE, - SUB_GAME_STATE_RANKING, - SUB_GAME_STATE_SCORE_RANKING, - SUB_GAME_STATE_CM, - SUB_GAME_STATE_PHOTO_MODE_DEMO, - SUB_GAME_STATE_SELECTOR, - SUB_GAME_STATE_GAME_MAIN, - SUB_GAME_STATE_GAME_SEL, - SUB_GAME_STATE_STAGE_RESULT, - SUB_GAME_STATE_SCREEN_SHOT_SEL, - SUB_GAME_STATE_SCREEN_SHOT_RESULT, - SUB_GAME_STATE_GAME_OVER, - SUB_GAME_STATE_DATA_TEST_MAIN, - SUB_GAME_STATE_DATA_TEST_MISC, - SUB_GAME_STATE_DATA_TEST_OBJ, - SUB_GAME_STATE_DATA_TEST_STG, - SUB_GAME_STATE_DATA_TEST_MOT, - SUB_GAME_STATE_DATA_TEST_COLLISION, - SUB_GAME_STATE_DATA_TEST_SPR, - SUB_GAME_STATE_DATA_TEST_AET, - SUB_GAME_STATE_DATA_TEST_AUTH_3D, - SUB_GAME_STATE_DATA_TEST_CHR, - SUB_GAME_STATE_DATA_TEST_ITEM, - SUB_GAME_STATE_DATA_TEST_PERF, - SUB_GAME_STATE_DATA_TEST_PVSCRIPT, - SUB_GAME_STATE_DATA_TEST_PRINT, - SUB_GAME_STATE_DATA_TEST_CARD, - SUB_GAME_STATE_DATA_TEST_OPD, - SUB_GAME_STATE_DATA_TEST_SLIDER, - SUB_GAME_STATE_DATA_TEST_GLITTER, - SUB_GAME_STATE_DATA_TEST_GRAPHICS, - SUB_GAME_STATE_DATA_TEST_COLLECTION_CARD, - SUB_GAME_STATE_TEST_MODE_MAIN, - SUB_GAME_STATE_APP_ERROR, - SUB_GAME_STATE_DATA_EDIT_MAIN, // Added - SUB_GAME_STATE_DATA_EDIT_GLITTER_EDITOR, // Added -#if FACE_ANIM - SUB_GAME_STATE_DATA_EDIT_FACE_ANIM, // Added -#endif - SUB_GAME_STATE_MAX, -}; - -extern void game_state_init(); -extern void game_state_ctrl(); -extern GameStateEnum game_state_get_game_state(); -extern bool game_state_get_pause(); -extern bool game_state_is_advertise_not_sub_demo(); -extern size_t game_state_print(char* buf, size_t buf_size); -extern void game_state_set_game_state_next(GameStateEnum state); -extern void game_state_set_sub_game_state_next(SubGameStateEnum state); - -extern bool test_mode_get(); -extern void test_mode_set(bool value); diff --git a/src/ReDIVA/main.cpp b/src/ReDIVA/main.cpp index 9bd6c509..0c42f675 100644 --- a/src/ReDIVA/main.cpp +++ b/src/ReDIVA/main.cpp @@ -32,7 +32,7 @@ bool cpu_caps_avx2; else if (!i->compare(L"-debug")) stru_140EDA5B0.debug = 1; else if (!i->compare(L"-t")) - test_mode_set(1); + sys_am_set_test_mode_starting(true); else if (!i->compare(L"-m")) { if (++i == i_end) break; diff --git a/src/ReDIVA/mode.cpp b/src/ReDIVA/mode.cpp new file mode 100644 index 00000000..88b590f6 --- /dev/null +++ b/src/ReDIVA/mode.cpp @@ -0,0 +1,774 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode.hpp" +#include "../CRE/task.hpp" +#include "information/dw_console.hpp" +#include "mode_advertise.hpp" +#include "mode_app_error.hpp" +#include "mode_data_edit.hpp" +#include "mode_data_test.hpp" +#include "mode_game.hpp" +#include "mode_startup.hpp" +#include "mode_test_mode.hpp" + +struct ModeTable { + Mode name; + bool(*func[MODE_PROC_MAX])(); + ModeSub sub_list[24]; + Mode next; + ModeSub sub_next; +}; + +struct ModeSubTable { + ModeSub name; + bool pause_enable; + bool(*func[MODE_SUB_PROC_MAX])(); +}; + +static ModeTable mode_table[] = { + { + MODE_STARTUP, + init_startup, + ctrl_startup, + dest_startup, + { + MODE_SUB_DATA_INITIALIZE, + MODE_SUB_SYSTEM_STARTUP, + MODE_SUB_SYSTEM_STARTUP_ERROR, + MODE_SUB_WARNING, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_LOGO, + }, + { + MODE_ADVERTISE, + init_advertise, + ctrl_advertise, + dest_advertise, + { + MODE_SUB_LOGO, + MODE_SUB_RATING, + MODE_SUB_DEMO, + MODE_SUB_TITLE, + MODE_SUB_SCORE_RANKING, + MODE_SUB_RANKING, + MODE_SUB_CM, + MODE_SUB_PHOTO_MODE_DEMO, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, + { + MODE_GAME, + init_game, + ctrl_game, + dest_game, + { + MODE_SUB_SELECTOR, + MODE_SUB_GAME_MAIN, + //MODE_SUB_GAME_SEL, + //MODE_SUB_STAGE_RESULT, + //MODE_SUB_SCREEN_SHOT_SEL, + //MODE_SUB_SCREEN_SHOT_RESULT, + //MODE_SUB_GAME_OVER, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, + { + MODE_TEST_MODE, + init_test_mode, + ctrl_test_mode, + dest_test_mode, + { + MODE_SUB_TEST_MODE_MAIN, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, + { + MODE_APP_ERROR, + init_app_error, + ctrl_app_error, + dest_app_error, + { + MODE_SUB_APP_ERROR, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, + { + MODE_DATA_TEST, + init_data_test, + ctrl_data_test, + dest_data_test, + { + MODE_SUB_DATA_TEST_MAIN, + MODE_SUB_DATA_TEST_MISC, + MODE_SUB_DATA_TEST_OBJ, + MODE_SUB_DATA_TEST_STG, + MODE_SUB_DATA_TEST_MOT, + MODE_SUB_DATA_TEST_COLLISION, + MODE_SUB_DATA_TEST_SPR, + MODE_SUB_DATA_TEST_AET, + MODE_SUB_DATA_TEST_AUTH_3D, + MODE_SUB_DATA_TEST_CHR, + MODE_SUB_DATA_TEST_ITEM, + MODE_SUB_DATA_TEST_PERF, + MODE_SUB_DATA_TEST_PVSCRIPT, + MODE_SUB_DATA_TEST_PRINT, + MODE_SUB_DATA_TEST_CARD, + MODE_SUB_DATA_TEST_OPD, + MODE_SUB_DATA_TEST_SLIDER, + MODE_SUB_DATA_TEST_GLITTER, + MODE_SUB_DATA_TEST_GRAPHICS, + MODE_SUB_DATA_TEST_COLLECTION_CARD, + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, + + { // Added + MODE_DATA_EDIT, + init_data_edit, + ctrl_data_edit, + dest_data_edit, + { + MODE_SUB_DATA_EDIT_MAIN, + MODE_SUB_DATA_EDIT_GLITTER_EDITOR, +#if FACE_ANIM + MODE_SUB_DATA_EDIT_FACE_ANIM, +#endif + MODE_SUB_MAX, + }, + MODE_ADVERTISE, + MODE_SUB_MAX, + }, +}; + +static ModeSubTable mode_sub_table[] = { + { + MODE_SUB_DATA_INITIALIZE, + true, + init_data_initialize, + ctrl_data_initialize, + dest_data_initialize, + }, + { + MODE_SUB_SYSTEM_STARTUP, + true, + init_system_startup, + ctrl_system_startup, + dest_system_startup, + }, + { + MODE_SUB_SYSTEM_STARTUP_ERROR, + true, + init_system_startup_error, + ctrl_system_startup_error, + dest_system_startup_error, + }, + { + MODE_SUB_WARNING, + true, + init_warning, + ctrl_warning, + dest_warning, + }, + { + MODE_SUB_LOGO, + true, + init_logo, + ctrl_logo, + dest_logo, + }, + { + MODE_SUB_RATING, + true, + init_rating, + ctrl_rating, + dest_rating, + }, + { + MODE_SUB_DEMO, + true, + init_demo, + ctrl_demo, + dest_demo, + }, + { + MODE_SUB_TITLE, + true, + init_title, + ctrl_title, + dest_title, + }, + { + MODE_SUB_RANKING, + true, + init_ranking, + ctrl_ranking, + dest_ranking, + }, + { + MODE_SUB_SCORE_RANKING, + true, + init_score_ranking, + ctrl_score_ranking, + dest_score_ranking, + }, + { + MODE_SUB_CM, + true, + init_cm, + ctrl_cm, + dest_cm, + }, + { + MODE_SUB_PHOTO_MODE_DEMO, + true, + init_photo_mode_demo, + ctrl_photo_mode_demo, + dest_photo_mode_demo, + }, + { + MODE_SUB_SELECTOR, + true, + init_selector, + ctrl_selector, + dest_selector, + }, + { + MODE_SUB_GAME_MAIN, + true, + init_game_main, + ctrl_game_main, + dest_game_main, + }, + { + MODE_SUB_GAME_SEL, + true, + init_game_sel, + ctrl_game_sel, + dest_game_sel, + }, + { + MODE_SUB_STAGE_RESULT, + true, + init_stage_result, + ctrl_stage_result, + dest_stage_result, + }, + { + MODE_SUB_SCREEN_SHOT_SEL, + true, + init_screen_shot_sel, + ctrl_screen_shot_sel, + dest_screen_shot_sel, + }, + { + MODE_SUB_SCREEN_SHOT_RESULT, + true, + init_screen_shot_result, + ctrl_screen_shot_result, + dest_screen_shot_result, + }, + { + MODE_SUB_GAME_OVER, + true, + init_game_over, + ctrl_game_over, + dest_game_over, + }, + { + MODE_SUB_DATA_TEST_MAIN, + true, + init_data_test_main_md, + ctrl_data_test_main_md, + dest_data_test_main_md, + }, + { + MODE_SUB_DATA_TEST_MISC, + true, + init_data_test_misc_md, + ctrl_data_test_misc_md, + dest_data_test_misc_md, + }, + { + MODE_SUB_DATA_TEST_OBJ, + false, + init_data_test_obj_md, + ctrl_data_test_obj_md, + dest_data_test_obj_md, + }, + { + MODE_SUB_DATA_TEST_STG, + false, + init_data_test_stg_md, + ctrl_data_test_stg_md, + dest_data_test_stg_md, + }, + { + MODE_SUB_DATA_TEST_MOT, + false, + init_data_test_mot_md, + ctrl_data_test_mot_md, + dest_data_test_mot_md, + }, + { + MODE_SUB_DATA_TEST_COLLISION, + true, + init_data_test_collision_md, + ctrl_data_test_collision_md, + dest_data_test_collision_md, + }, + { + MODE_SUB_DATA_TEST_SPR, + true, + init_data_test_spr_md, + ctrl_data_test_spr_md, + dest_data_test_spr_md, + }, + { + MODE_SUB_DATA_TEST_AET, + true, + init_data_test_aet_md, + ctrl_data_test_aet_md, + dest_data_test_aet_md, + }, + { + MODE_SUB_DATA_TEST_AUTH_3D, + true, + init_data_test_auth_3d_md, + ctrl_data_test_auth_3d_md, + dest_data_test_auth_3d_md, + }, + { + MODE_SUB_DATA_TEST_CHR, + true, + init_data_test_chr_md, + ctrl_data_test_chr_md, + dest_data_test_chr_md, + }, + { + MODE_SUB_DATA_TEST_ITEM, + true, + init_data_test_item_md, + ctrl_data_test_item_md, + dest_data_test_item_md, + }, + { + MODE_SUB_DATA_TEST_PERF, + true, + init_data_test_perf_md, + ctrl_data_test_perf_md, + dest_data_test_perf_md, + }, + { + MODE_SUB_DATA_TEST_PVSCRIPT, + true, + init_data_test_pv_script_md, + ctrl_data_test_pv_script_md, + dest_data_test_pv_script_md, + }, + { + MODE_SUB_DATA_TEST_PRINT, + true, + init_data_test_print_md, + ctrl_data_test_print_md, + dest_data_test_print_md, + }, + { + MODE_SUB_DATA_TEST_CARD, + true, + init_data_test_card_md, + ctrl_data_test_card_md, + dest_data_test_card_md, + }, + { + MODE_SUB_DATA_TEST_OPD, + true, + init_data_test_opd_md, + ctrl_data_test_opd_md, + dest_data_test_opd_md, + }, + { + MODE_SUB_DATA_TEST_SLIDER, + true, + init_data_test_slider_md, + ctrl_data_test_slider_md, + dest_data_test_slider_md, + }, + { + MODE_SUB_DATA_TEST_GLITTER, + true, + init_data_test_glitter_md, + ctrl_data_test_glitter_md, + dest_data_test_glitter_md, + }, + { + MODE_SUB_DATA_TEST_GRAPHICS, + true, + init_data_test_graphics_md, + ctrl_data_test_graphics_md, + dest_data_test_graphics_md, + }, + { + MODE_SUB_DATA_TEST_COLLECTION_CARD, + true, + init_data_test_collection_card_md, + ctrl_data_test_collection_card_md, + dest_data_test_collection_card_md, + }, + { + MODE_SUB_TEST_MODE_MAIN, + false, + init_data_test_mode_main_md, + ctrl_data_test_mode_main_md, + dest_data_test_mode_main_md, + }, + { + MODE_SUB_APP_ERROR, + false, + init_app_error_md, + ctrl_app_error_md, + dest_app_error_md, + }, + + { // Added + MODE_SUB_DATA_EDIT_MAIN, + false, + init_data_edit_main_md, + ctrl_data_edit_main_md, + dest_data_edit_main_md, + }, + { // Added + MODE_SUB_DATA_EDIT_GLITTER_EDITOR, + false, + init_data_edit_glitter_editor_md, + ctrl_data_edit_glitter_editor_md, + dest_data_edit_glitter_editor_md, + }, +#if FACE_ANIM + { // Added + MODE_SUB_DATA_EDIT_FACE_ANIM, + false, + init_data_edit_face_anim_md, + ctrl_data_edit_face_anim_md, + dest_data_edit_face_anim_md, + }, +#endif +}; + +const char* mode_name[] = { + "ADVERTISE", + "STARTUP", + "GAME", + "DATA_TEST", + "TEST_MODE", + "APP_ERROR", + "DATA_EDIT", + "MAX", +}; + +const char* mode_sub_name[] = { + "DATA_INITIALIZE", + "SYSTEM_STARTUP", + "SYSTEM_STARTUP_ERROR", + "WARNING", + "LOGO", + "RATING", + "DEMO", + "TITLE", + "RANKING", + "SCORE_RANKING", + "CM", + "PHOTO_MODE_DEMO", + "SELECTOR", + "GAME_MAIN", + "GAME_SEL", + "STAGE_RESULT", + "SCREEN_SHOT_SEL", + "SCREEN_SHOT_RESULT", + "GAME_OVER", + "DATA_TEST_MAIN", + "DATA_TEST_MISC", + "DATA_TEST_OBJ", + "DATA_TEST_STG", + "DATA_TEST_MOT", + "DATA_TEST_COLLISION", + "DATA_TEST_SPR", + "DATA_TEST_AET", + "DATA_TEST_AUTH_3D", + "DATA_TEST_CHR", + "DATA_TEST_ITEM", + "DATA_TEST_PERF", + "DATA_TEST_PVSCRIPT", + "DATA_TEST_PRINT", + "DATA_TEST_CARD", + "DATA_TEST_OPD", + "DATA_TEST_SLIDER", + "DATA_TEST_GLITTER", + "DATA_TEST_GRAPHICS", + "DATA_TEST_COLLECTION_CARD", + "TEST_MODE_MAIN", + "APP_ERROR", + "DATA_EDIT_MAIN", + "DATA_EDIT_GLITTER_EDITOR", +#if FACE_ANIM + "DATA_EDIT_FACE_ANIM", +#endif + "MAX", +}; + +ModeInfo mode_info; + +static bool ctrl_sub_mode(ModeInfo* mode_info); +static ModeInfo* get_mode_info(); +static const char* get_mode_name(Mode mode); +static ModeTable* get_mode_table(Mode mode); +static ModeSubTable* get_mode_sub_table(ModeSub mode); +static const char* get_mode_sub_name(ModeSub mode); +static void init_mode_info(Mode mode, ModeSub mode_sub); + +bool check_pause_enable() { + ModeInfo* mode_info = get_mode_info(); + ModeSubTable* sub_game_state_data = get_mode_sub_table(mode_info->sub_current); + if (sub_game_state_data) + return sub_game_state_data->pause_enable; + return true; +} + +void ctrl_mode() { + ModeInfo* mode_info = get_mode_info(); + if (!mode_info->shift) { + if (mode_info->sub_shift && mode_info->sub_init) { + if (app::check_closing_task()) { + mode_info->time++; + return; + } + + init_mode_info(MODE_MAX, mode_info->sub_next); + mode_info->init = false; + mode_info->sub_init = false; + } + } + else { + if (mode_info->init && mode_info->sub_init) { + if (app::check_closing_task()) { + mode_info->time++; + return; + } + + init_mode_info(mode_info->next, mode_info->sub_shift + ? mode_info->sub_next : MODE_SUB_MAX); + mode_info->init = false; + mode_info->sub_init = false; + } + } + + if (mode_info->shift && mode_info->sub_init) + mode_info->proc = MODE_PROC_DEST; + + ModeTable* tbl = get_mode_table(mode_info->current); + if (tbl) { + bool(*func)() = tbl->func[mode_info->proc]; + bool ret = mode_info->proc != MODE_PROC_CTRL; + if (func) + ret = func(); + + if (ret) { + if (mode_info->proc == MODE_PROC_INIT) + mode_info->proc = MODE_PROC_CTRL; + else if (mode_info->proc == MODE_PROC_CTRL) + mode_info->proc = MODE_PROC_DEST; + else if (mode_info->proc == MODE_PROC_DEST) + mode_info->init = true; + else if (!mode_info->shift) { + shift_next_mode(mode_info->next); + shift_next_mode_sub(mode_info->sub_next); + } + } + + if (mode_info->proc && !mode_info->sub_init) { + if (mode_info->shift || mode_info->sub_shift) + mode_info->sub_proc = MODE_SUB_PROC_DEST; + + if (ctrl_sub_mode(mode_info)) { + if (!mode_info->shift && !mode_info->sub_shift) { + ModeSub sub_next = mode_info->sub_next; + if (sub_next == MODE_SUB_MAX) { + shift_next_mode(mode_info->next); + sub_next = mode_info->sub_next; + } + shift_next_mode_sub(sub_next); + } + mode_info->sub_init = true; + } + } + } + mode_info->time++; +} + +Mode get_mode() { + return get_mode_info()->current; +} + +const ModeInfo* get_mode_info_const() { + return &mode_info; +} + +void init_mode(Mode mode, ModeSub mode_sub) { + init_mode_info(mode, mode_sub); +} + +static bool is_mode_advertise() { + return get_mode_info_const()->current == MODE_ADVERTISE; +} + +static bool is_mode_advertise_not_sub_demo() { + ModeInfo* mode_info = get_mode_info(); + if (mode_info->current == MODE_ADVERTISE) + return mode_info->sub_current != MODE_SUB_DEMO; + return false; +} + +size_t print_mode(char* buf, size_t buf_size) { + ModeInfo* mode_info = get_mode_info(); + const char* mode_name = get_mode_name(mode_info->current); + const char* mode_sub_name = get_mode_sub_name(mode_info->sub_current); + return sprintf_s(buf, buf_size, "%s/%s", mode_name, mode_sub_name); +} + +void set_etc_work(uint32_t work) { + get_mode_info()->etc_work = work; +} + +void shift_next_mode(Mode state) { + ModeInfo* mode_info = get_mode_info(); + if (mode_info->next != MODE_APP_ERROR || !mode_info->shift) { + mode_info->next = state; + mode_info->shift = true; + mode_info->sub_shift = false; + } +} + +void shift_next_mode_sub(ModeSub state) { + ModeInfo* mode_info = get_mode_info(); + if (mode_info->next != MODE_APP_ERROR || !mode_info->shift) { + mode_info->sub_next = state; + mode_info->sub_shift = true; + } +} + +static bool ctrl_sub_mode(ModeInfo* mode_info) { + ModeSubTable* sub_game_state_data = get_mode_sub_table(mode_info->sub_current); + if (!sub_game_state_data) { + mode_info->sub_call_count++; + return false; + } + + bool(*func)() = sub_game_state_data->func[mode_info->sub_proc]; + if (!func || func()) { + if (mode_info->sub_proc == MODE_SUB_PROC_INIT) + mode_info->sub_proc = MODE_SUB_PROC_CTRL; + else if (mode_info->sub_proc == MODE_SUB_PROC_CTRL) + mode_info->sub_proc = MODE_SUB_PROC_DEST; + else if (mode_info->sub_proc == MODE_SUB_PROC_DEST) { + mode_info->sub_call_count++; + return true; + } + } + + mode_info->sub_call_count++; + return false; +} + +static ModeInfo* get_mode_info() { + return &mode_info; +} + +static const char* get_mode_name(Mode mode) { + return mode_name[mode]; +} + +static ModeTable* get_mode_table(Mode name) { + for (ModeTable& i : mode_table) + if (i.name == name) + return &i; + return 0; +} + +static const char* get_mode_sub_name(ModeSub mode) { + return mode_sub_name[mode]; +} + +static ModeSubTable* get_mode_sub_table(ModeSub name) { + for (ModeSubTable& i : mode_sub_table) + if (i.name == name) + return &i; + return 0; +} + +static void init_mode_info(Mode mode, ModeSub mode_sub) { + ModeInfo* mode_info = get_mode_info(); + if (mode != MODE_MAX) { + Mode old = mode_info->current; + mode_info->current = mode; + mode_info->next = MODE_MAX; + mode_info->old = old; + mode_info->proc = MODE_PROC_INIT; + mode_info->shift = false; + mode_info->time = 0; + mode_info->etc_work = 0; + + dw_console_printf(DW_CONSOLE_MODE_CTRL, "[%s]->[%s]\n", + get_mode_name(old), get_mode_name(mode)); + + ModeTable* tbl = get_mode_table(mode_info->current); + if (tbl) { + mode_info->next = tbl->next; + if (mode_sub == MODE_SUB_MAX) + mode_info->sub_next = tbl->sub_next; + } + } + + ModeSub sub_old = mode_info->sub_current; + mode_info->sub_current = MODE_SUB_MAX; + mode_info->sub_next = MODE_SUB_MAX; + mode_info->sub_old = sub_old; + mode_info->sub_proc = MODE_SUB_PROC_INIT; + mode_info->sub_shift = false; + mode_info->sub_call_count = 0; + + ModeTable* tbl = get_mode_table(mode_info->current); + if (tbl) { + if (mode_sub == MODE_SUB_MAX) { + mode_info->sub_current = tbl->sub_list[0]; + mode_info->sub_next = tbl->sub_list[1]; + } + else { + size_t i = 0; + ModeSub* sub_list = tbl->sub_list; + while (*sub_list != MODE_SUB_MAX && i < 24) { + if (*sub_list == mode_sub) { + mode_info->sub_current = mode_sub; + mode_info->sub_next = tbl->sub_list[i + 1]; + break; + } + + i++; + sub_list++; + } + } + } +} diff --git a/src/ReDIVA/mode.hpp b/src/ReDIVA/mode.hpp new file mode 100644 index 00000000..6027bbf8 --- /dev/null +++ b/src/ReDIVA/mode.hpp @@ -0,0 +1,114 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "config.hpp" +#include "../KKdLib/default.hpp" + +enum Mode { + MODE_STARTUP = 0, + MODE_ADVERTISE, + MODE_GAME, + MODE_DATA_TEST, + MODE_TEST_MODE, + MODE_APP_ERROR, + MODE_DATA_EDIT, // Added + MODE_MAX, +}; + +enum ModeProc { + MODE_PROC_INIT = 0, + MODE_PROC_CTRL, + MODE_PROC_DEST, + MODE_PROC_MAX, +}; + +enum ModeSub { + MODE_SUB_DATA_INITIALIZE = 0, + MODE_SUB_SYSTEM_STARTUP, + MODE_SUB_SYSTEM_STARTUP_ERROR, + MODE_SUB_WARNING, + MODE_SUB_LOGO, + MODE_SUB_RATING, + MODE_SUB_DEMO, + MODE_SUB_TITLE, + MODE_SUB_RANKING, + MODE_SUB_SCORE_RANKING, + MODE_SUB_CM, + MODE_SUB_PHOTO_MODE_DEMO, + MODE_SUB_SELECTOR, + MODE_SUB_GAME_MAIN, + MODE_SUB_GAME_SEL, + MODE_SUB_STAGE_RESULT, + MODE_SUB_SCREEN_SHOT_SEL, + MODE_SUB_SCREEN_SHOT_RESULT, + MODE_SUB_GAME_OVER, + MODE_SUB_DATA_TEST_MAIN, + MODE_SUB_DATA_TEST_MISC, + MODE_SUB_DATA_TEST_OBJ, + MODE_SUB_DATA_TEST_STG, + MODE_SUB_DATA_TEST_MOT, + MODE_SUB_DATA_TEST_COLLISION, + MODE_SUB_DATA_TEST_SPR, + MODE_SUB_DATA_TEST_AET, + MODE_SUB_DATA_TEST_AUTH_3D, + MODE_SUB_DATA_TEST_CHR, + MODE_SUB_DATA_TEST_ITEM, + MODE_SUB_DATA_TEST_PERF, + MODE_SUB_DATA_TEST_PVSCRIPT, + MODE_SUB_DATA_TEST_PRINT, + MODE_SUB_DATA_TEST_CARD, + MODE_SUB_DATA_TEST_OPD, + MODE_SUB_DATA_TEST_SLIDER, + MODE_SUB_DATA_TEST_GLITTER, + MODE_SUB_DATA_TEST_GRAPHICS, + MODE_SUB_DATA_TEST_COLLECTION_CARD, + MODE_SUB_TEST_MODE_MAIN, + MODE_SUB_APP_ERROR, + MODE_SUB_DATA_EDIT_MAIN, // Added + MODE_SUB_DATA_EDIT_GLITTER_EDITOR, // Added +#if FACE_ANIM + MODE_SUB_DATA_EDIT_FACE_ANIM, // Added +#endif + MODE_SUB_MAX, +}; + +enum ModeSubProc { + MODE_SUB_PROC_INIT = 0, + MODE_SUB_PROC_CTRL, + MODE_SUB_PROC_DEST, + MODE_SUB_PROC_MAX, +}; + +struct ModeInfo { + Mode current; + Mode next; + Mode old; + ModeProc proc; + bool shift; + bool init; + uint32_t time; + uint32_t etc_work; + ModeSub sub_current; + ModeSub sub_next; + ModeSub sub_old; + ModeSubProc sub_proc; + bool sub_shift; + bool sub_init; + uint32_t sub_call_count; +}; + +extern bool check_pause_enable(); +extern void ctrl_mode(); +extern Mode get_mode(); +extern const ModeInfo* get_mode_info_const(); +extern void init_mode(Mode mode, ModeSub mode_sub); +extern bool is_mode_advertise(); +extern bool is_mode_advertise_not_sub_demo(); +extern size_t print_mode(char* buf, size_t buf_size); +extern void set_etc_work(uint32_t work); +extern void shift_next_mode(Mode state); +extern void shift_next_mode_sub(ModeSub state); diff --git a/src/ReDIVA/mode_advertise.cpp b/src/ReDIVA/mode_advertise.cpp new file mode 100644 index 00000000..4fa856ce --- /dev/null +++ b/src/ReDIVA/mode_advertise.cpp @@ -0,0 +1,526 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_advertise.hpp" +#include "../CRE/customize_item_table.hpp" +#include "../CRE/data.hpp" +#include "../CRE/module_table.hpp" +#include "../CRE/render_context.hpp" +#include "../CRE/sound.hpp" +#include "pv_game/pv_game.hpp" +#include "am_data.hpp" +#include "input_state.hpp" +#include "mask_screen.hpp" +#include "mode.hpp" +#include "task_movie.hpp" +#include "wait_screen.hpp" + +struct demo_mode { + bool load; + int32_t pv_state; + int32_t index; + int32_t difficulty_index; + int32_t state; +}; + +extern render_context* rctx_ptr; + +static demo_mode s_demo_mode; + +static std::vector> stru_1411A12E0; +static std::vector stru_1411A12F8; + +static bool adv_load(); +static void adv_read(); +static void adv_unload(); + +static bool check_photo_mode_demo_movie_exists(); + +static void demo_mode_difficulty_flip(); + +bool init_advertise() { + switch (get_mode_info_const()->etc_work) { + case 0: + //net_alw_detail::context_ptr_get()->field_168(0); + //net_alw_detail::context_ptr_get()->field_C8(1); + //sub_14066C680(); + //task_slider_control_get()->sub_140618840(); + //task_slider_control_get()->sub_140618860(); + + adv_read(); + set_etc_work(1); + + //sub_1404A7370(player_data_array); + //sub_14038AFC0(sub_14038BB30()); + + if (get_mode_info_const()->current != get_mode_info_const()->old) { + //sub_1403F4670(); + demo_mode_difficulty_flip(); + } + + /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); + task_lamp_ctrl->field_74 = 1; + task_lamp_ctrl->field_78 = color_white;*/ + + //task_slider_control_get()->sub_140618980(2); + + /*if (task_printer_get()->check_alive() && !wrap_collection_get()->printer.get_value()) + task_printer_get()->close();*/ + break; + case 1: + if (!adv_load()) + set_etc_work(2); + break; + case 2: + //task_information_ptr->open("INFORMATION"); + + task_wait_screen_open(); + //sub_1401F4440(); + //sub_1401E87E0(); + + const float_t min_volume = get_min_speakers_volume(); + const float_t max_volume = get_max_speakers_volume(); + sound_work_set_speakers_volume((float_t)wrap_collection_get()->advertise_sound_volume.get_value() + * (max_volume - min_volume) * 0.01f + min_volume); + + //sub_1402B7880()->sub_1402BAE80(); + module_data_handler_data_add_all_modules(); + customize_item_data_handler_data_add_all_customize_items(); + sound_work_reset_all_se(); + //adv_touch_get()->open(sub_1402103A0()); + //adv_festa_get()->open(); + //adv_noblesse_get()->open(); + //task_information_ptr->field_77 = false; + //sub_1403F35A0(); + return true; + } + return false; +} + +bool ctrl_advertise() { + /*task_information_ptr->sub_1403BB780(2); + + if (sub_14066CC00()) { + sub_14066FA90(); + game_state_set_error_code(91); + }*/ + + /*if (sub_1403BADE0()) + sub_1403BB7B0();*/ + + //*(uint8_t*)((size_t)task_aime_get() + 0x15C) = is_mode_advertise_not_sub_demo(); + + /*if (!sup_err_task_supplies_error_check_alive() && task_information_ptr->field_77 + && wrap_collection_get()->printer.get_value() && sub_140662AD0() != 3) + task_information_ptr->field_77 = false;*/ + + const InputState* input_state = input_state_get(0); + bool v2 = false;//sub_1403F49C0(); + if (input_state->CheckTapped(INPUT_BUTTON_JVS_START) && v2) { + shift_next_mode(MODE_GAME); + sound_work_play_se(0, "se_sy_01", 1.0); + } + + /*adv_touch_get()->sub_14014ED60(true); + if (!v2) + adv_touch_get()->sub_14014ED60(false); + + adv_touch_get()->sub_14014EC20(v2); + if (get_mode_info()->sub_current == MODE_SUB_TITLE) + adv_touch_get()->sub_14014EC20(false); + + if (get_mode_info()->sub_current == MODE_SUB_CM && !*(uint8_t*)((size_t)adv_cm_get() + 0x108)) + adv_touch_get()->sub_14014EC20(false); + + if (get_mode_info()->sub_current == MODE_SUB_PHOTO_MODE_DEMO && !check_photo_mode_demo_movie_exists()) + adv_touch_get()->sub_14014EC20(false); + + if (input_state->CheckDown(INPUT_BUTTON_JVS_L) || input_state->CheckDown(INPUT_BUTTON_JVS_R)) + adv_touch_get()->sub_14014ED60(false); + + if (adv_touch_get()->field_70) { + shift_next_mode(MODE_GAME); + sound_work_play_se(0, "se_sy_01"); + adv_touch_get()->sub_14014EC00(); + }*/ + + /*if (sub_14022EF20(0)->sub_14022ED30() && v2) + shift_next_mode(MODE_GAME);*/ + return false; +} + +bool dest_advertise() { + //task_slider_control_get()->sub_140618840(v0); + //adv_touch_get()->close(); + //adv_festa_get()->close(); + //adv_noblesse_get()->close(); + adv_unload(); + sound_work_set_speakers_volume(get_max_speakers_volume()); + //*(uint8_t*)((size_t)task_aime_get() + 0x15C) = 0; + return true; +} + +bool init_logo() { + //task_information_ptr->sub_1403BB780(1); + //task_adv_logo.open(0); + //sub_1403F35A0(); + return true; +} + +bool ctrl_logo() { + return true; + //*task_information_ptr->sub_1403BB780(1); + //return !task_adv_logo.check_alive(); +} + +bool dest_logo() { + //task_information_ptr->sub_1403BB780(1); + //sub_14066E8D0(); + //task_adv_logo.close(); + return true; +} + +bool init_rating() { + //sub_1403F35A0(); + return true; +} + +bool ctrl_rating() { + return true; + //return !task_adv_rating.check_alive(); +} + +bool dest_rating() { + //task_adv_rating.close(); + return true; +} + +bool init_demo() { + rctx_ptr->render_manager->set_multisample(false); + + if (check_photo_mode_demo_movie_exists()) + s_demo_mode.state = 1; + + switch (s_demo_mode.state) { + case 0: { + ScreenParam& screen_param = get_screen_param(); + ScreenParam& render_screen_param = get_render_screen_param(); + get_screen_param(); + + rectangle rect; + rect.pos = { 0.0f, (float_t)(screen_param.height - render_screen_param.height) * 0.5f }; + rect.size = { (float_t)render_screen_param.width, (float_t)render_screen_param.height }; + + TaskMovie::SprParams spr_params; + spr_params.disp.rect = rect; + spr_params.disp.screen_mode = screen_param.mode; + spr_params.disp.scale = -1.0f; + spr_params.disp.field_18 = 0; + spr_params.disp.target = spr::SPR_TARGET_DEFAULT; + spr_params.prio = spr::SPR_PRIO_07; + task_movie_get(0)->Reset(spr_params); + //task_movie_get(0)->Load("rom/movie/diva_adv.wmv"); + } break; + case 1: + task_wait_screen_set_load_loop_demo_load(); + s_demo_mode.load = false; + task_rob_manager_open(); + s_demo_mode.pv_state = 0; + break; + } + + //sub_1403F35A0(); + return true; +} + +bool ctrl_demo() { + bool ret = false; + bool v1 = false; + /*if (sup_err_task_supplies_error_check_alive()) { + if (!task_pv_game_check_alive()) + return true; + + v1 = true; + }*/ + + switch (s_demo_mode.state) { + case 0: + ret = !task_movie_get(0)->CheckState(); + break; + case 1: { + if (s_demo_mode.load) { + if (!task_pv_game_check_alive()) + ret = true; + } + else if (!task_wait_screen_get_started()) { + int32_t index = s_demo_mode.index; + if (stru_1411A12F8.size()) { + size_t size = stru_1411A12E0.size(); + if (size) { + uint32_t pv_index = stru_1411A12F8.data()[s_demo_mode.index]; + if (pv_index < size) { + const std::pair* elem = &stru_1411A12E0.data()[pv_index]; + if (elem) { + pv_difficulty diff = elem->second[s_demo_mode.difficulty_index]; + if (diff != PV_DIFFICULTY_MAX) { + if (!task_pv_game_init_demo_pv(elem->first, diff, true)) + task_wait_screen_set_load_loop_none(); + goto Next; + } + } + } + } + } + + v1 = true; + + Next: + s_demo_mode.index = ++index; + + if (index >= stru_1411A12E0.size()) { + s_demo_mode.index = 0; + demo_mode_difficulty_flip(); + } + s_demo_mode.load = true; + } + } break; + default: + ret = 1; + break; + } + + const InputState* input_state = input_state_get(0); + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) + v1 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) + v1 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) + v1 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) + v1 = true; + + if (v1 && task_wait_screen_check_index_none()) + ret = true; + return ret; +} + +bool dest_demo() { + //net_alw_detail::context_ptr_get()->field_C8(1); + + switch (s_demo_mode.state) { + case 0: + task_movie_get(0)->Unload(); + task_movie_get(0)->close(); + s_demo_mode.state = 1; + case 1: + switch (s_demo_mode.pv_state) { + case 0: + default: + if (pv_game_get()) + pv_game_get()->unload(); + s_demo_mode.pv_state = 1; + return false; + case 1: + if (task_pv_game_close() && task_rob_manager_close()) + s_demo_mode.pv_state = 2; + return false; + case 2: + task_wait_screen_set_load_loop_none(); + task_mask_screen_fade_in(0.0f, 0); + s_demo_mode.state = 0; + break; + } + break; + } + + rctx_ptr->render_manager->set_multisample(true); + return true; +} + +bool init_title() { + //sub_140141F80(&task_adv_title, 0, false); + //sub_1403F35A0(); + return true; +} + +bool ctrl_title() { + return true; + //return !task_adv_title.check_alive(); +} + +bool dest_title() { + //sub_14066E8D0(); + //task_adv_title.close(); + return true; +} + +bool init_ranking() { + //adv_rank_main_get(); + //sub_140143280(); + //sub_1403F35A0(); + return true; +} + +bool ctrl_ranking() { + return true; + //return !adv_rank_main_get()->check_alive(); +} + +bool dest_ranking() { + //sub_14066E8D0(); + //adv_rank_main_get()->close(); + return true; +} + +bool init_score_ranking() { + //adv_score_rank_main_get(); + //sub_140149010(); + //sub_1403F35A0(); + return true; +} + +bool ctrl_score_ranking() { + return true; + //return !adv_score_rank_main_get()->check_alive(); +} + +bool dest_score_ranking() { + //sub_14066E8D0(); + //adv_score_rank_main_get()->close(); + return true; +} + +bool init_cm() { + //adv_cm_get(); + //sub_14013F750(); + //sub_1403F35A0(); + return true; +} + +bool ctrl_cm() { + return true; + /*bool v0 = false; + bool v1 = false;//adv_cm_get()->field_68 == 3; + const InputState* input_state = input_state_get(0); + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) + v0 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) + v0 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) + v0 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) + v0 = true; + return v0 ? v0 : v1;*/ +} + +bool dest_cm() { + //sub_14066E8D0(); + //adv_cm_get()->close(); + return true; +} + +bool init_photo_mode_demo() { + if (check_photo_mode_demo_movie_exists()) { + ScreenParam& screen_param = get_screen_param(); + ScreenParam& render_screen_param = get_render_screen_param(); + + rectangle rect; + rect.pos = { 0.0f, (float_t)(screen_param.height - render_screen_param.height) * 0.5f }; + rect.size = { (float_t)render_screen_param.width, (float_t)render_screen_param.height }; + + TaskMovie::SprParams spr_params; + spr_params.disp.rect = rect; + spr_params.disp.screen_mode = screen_param.mode; + spr_params.disp.scale = -1.0f; + spr_params.disp.field_18 = 0; + spr_params.disp.target = spr::SPR_TARGET_DEFAULT; + spr_params.prio = spr::SPR_PRIO_07; + task_movie_get(0)->Reset(spr_params); + //task_movie_get(0)->Load("rom/movie/diva_adv02.wmv"); + + //adv_festa_get()->field_6C = true; + //adv_noblesse_get()->sub_140142530(v6, true); + } + else { + //adv_festa_get()->field_6C = false; + //adv_noblesse_get()->sub_140142530(v6, false); + } + + //sub_1403F35A0(); + return true; +} + +bool ctrl_photo_mode_demo() { + return true; + /*if (!check_photo_mode_demo_movie_exists()) + return true; + + bool v2 = !task_movie_get(0)->CheckState(); + + bool v4 = false; + const InputState* input_state = input_state_get(0); + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CIRCLE)) + v4 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_CROSS)) + v4 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_TRIANGLE)) + v4 = true; + if (input_state->CheckTapped(INPUT_BUTTON_JVS_SQUARE)) + v4 = true; + if (v4 && task_wait_screen_check_index_none()) + v2 = true; + return v2;*/ +} + +bool dest_photo_mode_demo() { + if (check_photo_mode_demo_movie_exists()) { + task_movie_get(0)->Unload(); + task_movie_get(0)->close(); + } + return true; +} + +static bool adv_load() { + data_struct* aft_data = &data_list[DATA_AFT]; + aet_database* aft_aet_db = &aft_data->data_ft.aet_db; + sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; + + if (sprite_manager_load_file(37, aft_spr_db) || aet_manager_load_file(30, aft_aet_db)) + return true; + return sound_work_load_farc("rom/sound/se_adv.farc"); +} + +static void adv_read() { + data_struct* aft_data = &data_list[DATA_AFT]; + aet_database* aft_aet_db = &aft_data->data_ft.aet_db; + sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; + + sprite_manager_read_file(37, "", aft_data, aft_spr_db); + aet_manager_read_file(30, "", aft_data, aft_aet_db); + sound_work_read_farc("rom/sound/se_adv.farc"); +} + +static void adv_unload() { + data_struct* aft_data = &data_list[DATA_AFT]; + aet_database* aft_aet_db = &aft_data->data_ft.aet_db; + sprite_database* aft_spr_db = &aft_data->data_ft.spr_db; + + sprite_manager_unload_set(37, aft_spr_db); + aet_manager_unload_set(30, aft_aet_db); + sound_work_unload_farc("rom/sound/se_adv.farc"); +} + +static bool check_photo_mode_demo_movie_exists() { + if (wrap_collection_get()->printer.get_value()) + return data_list[DATA_AFT].check_file_exists("rom/movie/diva_adv02.wmv"); + return false; +} + +static void demo_mode_difficulty_flip() { + int32_t difficulty_index = s_demo_mode.difficulty_index + 1; + if (difficulty_index < 0 || difficulty_index >= 1) + difficulty_index = 0; + s_demo_mode.difficulty_index = difficulty_index; +} diff --git a/src/ReDIVA/mode_advertise.hpp b/src/ReDIVA/mode_advertise.hpp new file mode 100644 index 00000000..51b3ec49 --- /dev/null +++ b/src/ReDIVA/mode_advertise.hpp @@ -0,0 +1,44 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool init_advertise(); +extern bool ctrl_advertise(); +extern bool dest_advertise(); + +extern bool init_logo(); +extern bool ctrl_logo(); +extern bool dest_logo(); + +extern bool init_rating(); +extern bool ctrl_rating(); +extern bool dest_rating(); + +extern bool init_demo(); +extern bool ctrl_demo(); +extern bool dest_demo(); + +extern bool init_title(); +extern bool ctrl_title(); +extern bool dest_title(); + +extern bool init_ranking(); +extern bool ctrl_ranking(); +extern bool dest_ranking(); + +extern bool init_score_ranking(); +extern bool ctrl_score_ranking(); +extern bool dest_score_ranking(); + +extern bool init_cm(); +extern bool ctrl_cm(); +extern bool dest_cm(); + +extern bool init_photo_mode_demo(); +extern bool ctrl_photo_mode_demo(); +extern bool dest_photo_mode_demo(); diff --git a/src/ReDIVA/mode_app_error.cpp b/src/ReDIVA/mode_app_error.cpp new file mode 100644 index 00000000..667f309f --- /dev/null +++ b/src/ReDIVA/mode_app_error.cpp @@ -0,0 +1,45 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_startup.hpp" +#include "../CRE/sound.hpp" +#include "wait_screen.hpp" + +bool init_app_error() { + //task_information_ptr->close(); + + task_wait_screen_set_load_loop_none(); + for (int32_t i = 0; i < 3; i++) + sound_work_release_stream(i++); + sound_work_reset_all_se(); + + /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); + task_lamp_ctrl->field_74 = 0; + task_lamp_ctrl->field_78 = color_white;*/ + + //task_slider_control_get()->sub_140618980(0); + //task_photo_service_del(); + return true; +} + +bool ctrl_app_error() { + return false; +} + +bool dest_app_error() { + return true; +} + +bool init_app_error_md() { + return true; +} + +bool ctrl_app_error_md() { + return false; +} + +bool dest_app_error_md() { + return true; +} diff --git a/src/ReDIVA/mode_app_error.hpp b/src/ReDIVA/mode_app_error.hpp new file mode 100644 index 00000000..5fe322b2 --- /dev/null +++ b/src/ReDIVA/mode_app_error.hpp @@ -0,0 +1,16 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool init_app_error(); +extern bool ctrl_app_error(); +extern bool dest_app_error(); + +extern bool init_app_error_md(); +extern bool ctrl_app_error_md(); +extern bool dest_app_error_md(); diff --git a/src/ReDIVA/mode_data_edit.cpp b/src/ReDIVA/mode_data_edit.cpp new file mode 100644 index 00000000..e3dc9d53 --- /dev/null +++ b/src/ReDIVA/mode_data_edit.cpp @@ -0,0 +1,90 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_data_edit.hpp" +#include "../CRE/render_context.hpp" +#include "data_edit/face_anim.hpp" +#include "data_edit/glitter_editor.hpp" +#include "data_edit/selector.hpp" +#include "mode.hpp" + +extern render_context* rctx_ptr; + +static bool data_edit_reset = false; +static Mode data_edit_old_mode; + +bool init_data_edit() { + rctx_ptr->render_manager->set_multisample(false); + rctx_ptr->render_manager->set_clear(true); + data_edit_old_mode = get_mode_info_const()->old; + return true; +} + +bool ctrl_data_edit() { + if (data_edit_reset) { + if (get_mode_info_const()->sub_current != MODE_SUB_DATA_EDIT_MAIN) + shift_next_mode_sub(MODE_SUB_DATA_EDIT_MAIN); + else + shift_next_mode(data_edit_old_mode); + } + return false; +} + +bool dest_data_edit() { + rctx_ptr->render_manager->set_multisample(true); + rctx_ptr->render_manager->set_clear(false); + return true; +} + +bool init_data_edit_main_md() { // Added + data_edit_sel->open("DATA_TEST_EDIT"); + return true; +} + +bool ctrl_data_edit_main_md() { // Added + int32_t state = data_edit_sel_get_sub_state(); + if (state >= 0) + shift_next_mode_sub((ModeSub)state); + return false; +} + +bool dest_data_edit_main_md() { // Added + data_edit_sel->close(); + return true; +} + +bool init_data_edit_glitter_editor_md() { // Added + camera* cam = rctx_ptr->camera; + cam->set_view_point({ 0.0f, 1.4f, 1.0f }); + cam->set_interest({ 0.0f, 1.4f, 0.0f }); + + glitter_editor.open("GLITTER EDITOR", app::TASK_PRIO_HIGH); + return true; +} + +bool ctrl_data_edit_glitter_editor_md() { // Added + return false; +} + +bool dest_data_edit_glitter_editor_md() { // Added + glitter_editor.app::Task::close(); + return true; +} + +#if FACE_ANIM +bool init_data_edit_face_anim_md() { // Added + face_anim.open("FACE ANIM", app::TASK_PRIO_HIGH); + return true; +} + +bool ctrl_data_edit_face_anim_md() { // Added + return false; +} + +bool dest_data_edit_face_anim_md() { // Added + face_anim.close(); + return true; +} +#endif diff --git a/src/ReDIVA/mode_data_edit.hpp b/src/ReDIVA/mode_data_edit.hpp new file mode 100644 index 00000000..c38976a4 --- /dev/null +++ b/src/ReDIVA/mode_data_edit.hpp @@ -0,0 +1,31 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "config.hpp" +#include "../KKdLib/default.hpp" + +// Added +extern bool init_data_edit(); +extern bool ctrl_data_edit(); +extern bool dest_data_edit(); + +// Added +extern bool init_data_edit_main_md(); +extern bool ctrl_data_edit_main_md(); +extern bool dest_data_edit_main_md(); + +// Added +extern bool init_data_edit_glitter_editor_md(); +extern bool ctrl_data_edit_glitter_editor_md(); +extern bool dest_data_edit_glitter_editor_md(); + +#if FACE_ANIM +// Added +extern bool init_data_edit_face_anim_md(); +extern bool ctrl_data_edit_face_anim_md(); +extern bool dest_data_edit_face_anim_md(); +#endif diff --git a/src/ReDIVA/mode_data_test.cpp b/src/ReDIVA/mode_data_test.cpp new file mode 100644 index 00000000..e9922213 --- /dev/null +++ b/src/ReDIVA/mode_data_test.cpp @@ -0,0 +1,362 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_data_test.hpp" +#include "../CRE/clear_color.hpp" +#include "../CRE/render_context.hpp" +#include "../CRE/stage.hpp" +#include "data_edit/rob_chara_adjust.hpp" +#include "data_test/auth_2d_test.hpp" +#include "data_test/auth_3d_test.hpp" +#include "data_test/glitter_test.hpp" +#include "data_test/misc_test.hpp" +#include "data_test/motion_test.hpp" +#include "data_test/object_test.hpp" +#include "data_test/opd_test.hpp" +#include "data_test/rob_osage_test.hpp" +#include "data_test/selector.hpp" +#include "data_test/stage_test.hpp" +#include "mode.hpp" +#include "wait_screen.hpp" + +static bool data_test_reset = false; + +static Mode data_test_old_mode; + +extern render_context* rctx_ptr; + +bool init_data_test() { + rctx_ptr->render_manager->set_multisample(false); + rctx_ptr->render_manager->set_clear(true); + data_test_old_mode = get_mode_info_const()->old; + //task_information_ptr->sub_1403BB780(0); + task_wait_screen_set_load_loop_none(); + task_rob_manager_open(); + //touch_util::touch_reaction_set_enable(false); + //net_alw_detail::context_ptr_get()->field_C8(2); + return true; +} + +bool ctrl_data_test() { + if (data_test_reset) { + if (get_mode_info_const()->sub_current != MODE_SUB_DATA_TEST_MAIN) + shift_next_mode_sub(MODE_SUB_DATA_TEST_MAIN); + else + shift_next_mode(data_test_old_mode); + } + return false; +} + +bool dest_data_test() { + if (!task_rob_manager_close()) + return false; + + rctx_ptr->render_manager->set_multisample(true); + rctx_ptr->render_manager->set_clear(false); + //touch_util::touch_reaction_set_enable(true); + return true; +} + +bool init_data_test_main_md() { + data_test_sel->open("DATA_TEST_MAIN"); + return true; +} + +bool ctrl_data_test_main_md() { + int32_t state = data_test_sel_get_sub_state(); + if (state >= 0) + shift_next_mode_sub((ModeSub)state); + return false; +} + +bool dest_data_test_main_md() { + data_test_sel->close(); + return true; +} + +bool init_data_test_misc_md() { + task_data_test_misc->open("DATA_TEST_MISC"); + return true; +} + +bool ctrl_data_test_misc_md() { + return false; +} + +bool dest_data_test_misc_md() { + task_data_test_misc->close(); + return true; +} + +bool init_data_test_obj_md() { + task_data_test_obj->open("DATA_TEST_OBJ"); + task_stage_open("DATA_TEST_OBJ_STAGE"); + return true; +} + +bool ctrl_data_test_obj_md() { + return false; +} + +bool dest_data_test_obj_md() { + task_data_test_obj->close(); + task_stage_close(); + return true; +} + +bool init_data_test_stg_md() { + clear_color = 0xFF606060; + + camera* cam = rctx_ptr->camera; + cam->set_view_point({ 0.0f, 0.88f, 4.3f }); + cam->set_interest({ 0.0f, 1.0f, 0.0f }); + + dtm_stg->open("DATA_TEST_STAGE"); + dtw_stg_init(); + return true; +} + +bool ctrl_data_test_stg_md() { + return false; +} + +bool dest_data_test_stg_md() { + clear_color = 0xFF000000; + + dtm_stg_unload(); + dtw_stg_unload(); + return true; +} + +bool init_data_test_mot_md() { + data_test_mot->open("TASK_DATA_TEST_MOT"); + rob_osage_test->open("ROB_OSAGE_TEST"); + rob_chara_adjust->open("ROB_CHARA_ADJUST"); + dtm_stg_load(0); + dtw_stg_load(true); + return true; +} + +bool ctrl_data_test_mot_md() { + return false; +} + +bool dest_data_test_mot_md() { + data_test_mot->close(); + rob_osage_test->close(); + rob_chara_adjust->close(); + dtm_stg_unload(); + dtw_stg_unload(); + return true; +} + +bool init_data_test_collision_md() { + return true; +} + +bool ctrl_data_test_collision_md() { + return false; +} + +bool dest_data_test_collision_md() { + return true; +} + +bool init_data_test_spr_md() { + return true; +} + +bool ctrl_data_test_spr_md() { + return false; +} + +bool dest_data_test_spr_md() { + return true; +} + +bool init_data_test_aet_md() { + clear_color = 0xFF606060; + dtm_aet_load(); + return true; +} + +bool ctrl_data_test_aet_md() { + return false; +} + +bool dest_data_test_aet_md() { + clear_color = 0xFF000000; + dtm_aet_unload(); + return true; +} + +bool init_data_test_auth_3d_md() { + auth_3d_test_task->open("AUTH3DTEST"); + return true; +} + +bool ctrl_data_test_auth_3d_md() { + return false; +} + +bool dest_data_test_auth_3d_md() { + auth_3d_test_task->close(); + return true; +} + +bool init_data_test_chr_md() { + return true; +} + +bool ctrl_data_test_chr_md() { + return false; +} + +bool dest_data_test_chr_md() { + return true; +} + +bool init_data_test_item_md() { + return true; +} + +bool ctrl_data_test_item_md() { + return false; +} + +bool dest_data_test_item_md() { + return true; +} + +bool init_data_test_perf_md() { + return true; +} + +bool ctrl_data_test_perf_md() { + return false; +} + +bool dest_data_test_perf_md() { + return true; +} + +bool init_data_test_pv_script_md() { + return true; +} + +bool ctrl_data_test_pv_script_md() { + return false; +} + +bool dest_data_test_pv_script_md() { + return true; +} + +bool init_data_test_print_md() { + return true; +} + +bool ctrl_data_test_print_md() { + return false; +} + +bool dest_data_test_print_md() { + return true; +} + +bool init_data_test_card_md() { + return true; +} + +bool ctrl_data_test_card_md() { + return false; +} + +bool dest_data_test_card_md() { + return true; +} + +bool init_data_test_opd_md() { + task_rob_manager_close(); + return task_data_test_opd->open(); +} + +bool ctrl_data_test_opd_md() { + return !task_data_test_opd->check_alive(); +} + +bool dest_data_test_opd_md() { + task_rob_manager_open(); + task_data_test_opd->close(); + return true; +} + +bool init_data_test_slider_md() { + return true; +} + +bool ctrl_data_test_slider_md() { + return false; +} + +bool dest_data_test_slider_md() { + return true; +} + +bool init_data_test_glitter_md() { + task_data_test_glitter_particle->open("DATA_TEST_PARTICLE"); + dtm_stg_load(0); + dtw_stg_load(true); + return true; +} + +bool ctrl_data_test_glitter_md() { + return false; +} + +bool dest_data_test_glitter_md() { + dtw_stg_unload(); + dtm_stg_unload(); + //if (data_test_chr->check_alive()) + // data_test_chr->close(); + task_data_test_glitter_particle->close(); + return true; +} + +bool init_data_test_graphics_md() { + return true; +} + +bool ctrl_data_test_graphics_md() { + return false; +} + +bool dest_data_test_graphics_md() { + return true; +} + +bool init_data_test_collection_card_md() { + return true; +} + +bool ctrl_data_test_collection_card_md() { + return false; +} + +bool dest_data_test_collection_card_md() { + return true; +} + +bool init_data_test_mode_main_md() { + return true; +} + +bool ctrl_data_test_mode_main_md() { + return false; +} + +bool dest_data_test_mode_main_md() { + return true; +} diff --git a/src/ReDIVA/mode_data_test.hpp b/src/ReDIVA/mode_data_test.hpp new file mode 100644 index 00000000..e9ef5bfc --- /dev/null +++ b/src/ReDIVA/mode_data_test.hpp @@ -0,0 +1,96 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool init_data_test(); +extern bool ctrl_data_test(); +extern bool dest_data_test(); + +extern bool init_data_test_main_md(); +extern bool ctrl_data_test_main_md(); +extern bool dest_data_test_main_md(); + +extern bool init_data_test_misc_md(); +extern bool ctrl_data_test_misc_md(); +extern bool dest_data_test_misc_md(); + +extern bool init_data_test_obj_md(); +extern bool ctrl_data_test_obj_md(); +extern bool dest_data_test_obj_md(); + +extern bool init_data_test_stg_md(); +extern bool ctrl_data_test_stg_md(); +extern bool dest_data_test_stg_md(); + +extern bool init_data_test_mot_md(); +extern bool ctrl_data_test_mot_md(); +extern bool dest_data_test_mot_md(); + +extern bool init_data_test_collision_md(); +extern bool ctrl_data_test_collision_md(); +extern bool dest_data_test_collision_md(); + +extern bool init_data_test_spr_md(); +extern bool ctrl_data_test_spr_md(); +extern bool dest_data_test_spr_md(); + +extern bool init_data_test_aet_md(); +extern bool ctrl_data_test_aet_md(); +extern bool dest_data_test_aet_md(); + +extern bool init_data_test_auth_3d_md(); +extern bool ctrl_data_test_auth_3d_md(); +extern bool dest_data_test_auth_3d_md(); + +extern bool init_data_test_chr_md(); +extern bool ctrl_data_test_chr_md(); +extern bool dest_data_test_chr_md(); + +extern bool init_data_test_item_md(); +extern bool ctrl_data_test_item_md(); +extern bool dest_data_test_item_md(); + +extern bool init_data_test_perf_md(); +extern bool ctrl_data_test_perf_md(); +extern bool dest_data_test_perf_md(); + +extern bool init_data_test_pv_script_md(); +extern bool ctrl_data_test_pv_script_md(); +extern bool dest_data_test_pv_script_md(); + +extern bool init_data_test_print_md(); +extern bool ctrl_data_test_print_md(); +extern bool dest_data_test_print_md(); + +extern bool init_data_test_card_md(); +extern bool ctrl_data_test_card_md(); +extern bool dest_data_test_card_md(); + +extern bool init_data_test_opd_md(); +extern bool ctrl_data_test_opd_md(); +extern bool dest_data_test_opd_md(); + +extern bool init_data_test_slider_md(); +extern bool ctrl_data_test_slider_md(); +extern bool dest_data_test_slider_md(); + +extern bool init_data_test_glitter_md(); +extern bool ctrl_data_test_glitter_md(); +extern bool dest_data_test_glitter_md(); + +extern bool init_data_test_graphics_md(); +extern bool ctrl_data_test_graphics_md(); +extern bool dest_data_test_graphics_md(); + +extern bool init_data_test_collection_card_md(); +extern bool ctrl_data_test_collection_card_md(); +extern bool dest_data_test_collection_card_md(); + +extern bool init_data_test_mode_main_md(); +extern bool ctrl_data_test_mode_main_md(); +extern bool dest_data_test_mode_main_md(); diff --git a/src/ReDIVA/mode_game.cpp b/src/ReDIVA/mode_game.cpp new file mode 100644 index 00000000..b83e3558 --- /dev/null +++ b/src/ReDIVA/mode_game.cpp @@ -0,0 +1,523 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_game.hpp" +#include "../CRE/render_context.hpp" +#include "pv_game/player_data.hpp" +#include "pv_game/pv_game.hpp" +#include "mask_screen.hpp" +#include "mode.hpp" +#include "test_mode.hpp" +#include "wait_screen.hpp" +#include "x_pv_game.hpp" + +extern render_context* rctx_ptr; + +#if PV_DEBUG +bool pv_x; +#endif +#if BAKE_X_PACK +bool pv_x_bake; +#endif + +bool init_game() { + //task_information_ptr->sub_1403BB780(4); + //sub_14066C660(); + task_rob_manager_open(); + return true; +} + +bool ctrl_game() { + return false; +} + +bool dest_game() { + if (!task_pv_game_close() || !task_rob_manager_close()) + return false; + + //sub_1403935A0(); + //task_sel_ticket_close(); + //sel_vocal_change_get()->close(); + return true; +} + +bool init_selector() { +#if PV_DEBUG + if (!pv_x) { + pv_game_selector_init(); + pv_game_selector_get()->open("PVGAME SELECTOR", app::TASK_PRIO_HIGH); + return true; + } +#endif + +#if BAKE_X_PACK + if (pv_x_bake) { + XPVGameBaker* baker = x_pv_game_baker_get(); + if (!baker) { + x_pv_game_baker_init(); + x_pv_game_baker_get()->open("X PVGAME BAKER", app::TASK_PRIO_HIGH); + } + else + baker->next = true; + return true; + } +#endif + + x_pv_game_selector_init(); + x_pv_game_selector_get()->open("X PVGAME SELECTOR", app::TASK_PRIO_HIGH); + return true; + + /*task_information_ptr->sub_1403BB780(3); + sub_1402B7880()->sub_1402BAE80(); + module_data_handler_data_add_all_modules(); + //sub_14022CE00()->sub_14022DC10(); + //sub_1404FF3D0(); + //sel_main_get()->open(false); + //task_slider_control_get()->sub_140618980(1); + return true;*/ +} + +bool ctrl_selector() { +#if PV_DEBUG + if (!pv_x) { + PVGameSelector* sel = pv_game_selector_get(); + if (sel->exit) { + if (sel->start && pv_game_init()) { + struc_717* v0 = sub_14038BB30(); + v0->field_0.stage_index = 0; + + struc_716* v2 = v0->get_stage(); + v2->field_2C.pv_id = sel->pv_id; + v2->field_2C.difficulty = sel->difficulty; + v2->field_2C.edition = sel->edition; + v2->field_2C.score_percentage_clear = 5000; + v2->field_2C.life_gauge_safety_time = 40; + v2->field_2C.life_gauge_border = 30; + + for (int32_t i = 0; i < ROB_ID_MAX; i++) { + v2->field_2C.field_4C[i] = sel->modules[i]; + v2->field_2C.field_64[i] = sel->modules[i]; + v2->field_2C.field_7C[i] = {}; + v2->field_2C.field_DC[i] = {}; + } + + v0->field_0.no_fail = true; + v0->field_0.watch = true; + v0->field_0.success = sel->success; + + PlayerData* player_data = player_data_array_get(0); + player_data->field_0 = true; + + sub_14038BB30()->field_0.option = 0; + + task_pv_game_init_pv(); + shift_next_mode_sub(MODE_SUB_GAME_MAIN); + } + else + shift_next_mode(MODE_ADVERTISE); + return true; + } + return false; + } +#endif + +#if BAKE_X_PACK + if (pv_x_bake) { + XPVGameBaker* baker = x_pv_game_baker_get(); + if (baker->wait) + return false; + + const int32_t pv_ids[] = { + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + }; + + if (baker->start && x_pv_game_init()) { + x_pv_game_get()->open("PVGAME", app::TASK_PRIO_HIGH); + x_pv_game_get()->load(pv_ids[baker->index], pv_ids[baker->index] % 100, baker->charas, baker->modules); + shift_next_mode_sub(MODE_SUB_GAME_MAIN); + } + else + shift_next_mode(MODE_ADVERTISE); + return true; + } +#endif + + XPVGameSelector* sel = x_pv_game_selector_get(); + if (sel->exit) { + if (sel->start && x_pv_game_init()) { + x_pv_game_get()->open("PVGAME", app::TASK_PRIO_HIGH); + x_pv_game_get()->load(sel->pv_id, sel->stage_id, sel->charas, sel->modules); + shift_next_mode_sub(MODE_SUB_GAME_MAIN); + } + else + shift_next_mode(MODE_ADVERTISE); + return true; + } + return false; + + /*if (sel_main_get()->check_alive()) { + if (sel_main_get()->field_7A && !task_pv_game_check_alive()) + task_pv_game_init_pv(); + return false; + } + else { + if (sel_main_get()->field_79) + shift_next_mode(MODE_ADVERTISE); + else + shift_next_mode_sub(MODE_SUB_GAME_MAIN); + return true; + }*/ +} + +bool dest_selector() { +#if PV_DEBUG + if (!pv_x) { + PVGameSelector* sel = pv_game_selector_get(); + if (sel->check_alive()) { + sel->close(); + return false; + } + + pv_game_selector_free(); + return true; + } +#endif + +#if BAKE_X_PACK + if (pv_x_bake) { + XPVGameBaker* baker = x_pv_game_baker_get(); + if (baker && baker->start) { + baker->start = false; + return true; + } + else if (baker && !baker->exit) + return false; + else if (baker->check_alive()) { + baker->close(); + return false; + } + + x_pv_game_baker_free(); + return true; + } +#endif + + XPVGameSelector* sel = x_pv_game_selector_get(); + if (sel->check_alive()) { + sel->close(); + return false; + } + + x_pv_game_selector_free(); + return true; + + /*if (sel_main_get()->check_alive()) { + sel_main_get()->close(); + return false; + } + return true;*/ +} + +bool init_game_main() { + sound_work_release_stream(0); + set_etc_work(0); + //task_information_ptr->sub_1403BB780(4); + rctx_ptr->render_manager->set_multisample(false); + return true; +} + +bool ctrl_game_main() { + switch (get_mode_info_const()->etc_work) { + case 0: + //if (task_wait_screen_get_started()) + // break; + + set_etc_work(1); + break; + case 1: + if (task_wait_screen_check_index_none()) { + bool watch = sub_14038BB30()->field_0.watch; + //sound_volume_get()->show_enable(true, watch); + + /*if (watch) + task_photo_service_add();*/ + /*else { + if (!act_toggle_get()->check_alive()) + act_toggle_get()->sub_14013CE40(); + *(int32_t*)((size_t)act_toggle_get() + 0xA0) = 5; + }*/ + + //sound_volume_get()->field_6C = spr::SPR_PRIO_04; + //sound_volume_get()->field_70 = spr::SPR_PRIO_05; + } + +#if PV_DEBUG + if (!pv_x) { + if (!task_pv_game_check_alive()) { + if (!sub_14038BB30()->field_0.watch) { + //shift_next_mode_sub(MODE_SUB_STAGE_RESULT); + return true; + } + + /*if (player_data_array_get(0)->field_0) + net_mgr::net_mgr_stage_result_open();*/ + + set_etc_work(2); + } + break; + } +#endif + + if (!x_pv_game_get()->check_alive()) + return true; + break; + case 2: { + /*if (net_mgr::net_mgr_stage_result_check_alive()) + break;*/ + + /*std::vector textures; + //sub_140490230(textures); + if (textures.size() > 0) + shift_next_mode_sub(MODE_SUB_SCREEN_SHOT_SEL); + else { + //task_photo_service_del(); + if (!sub_1403F6B00()) + shift_next_mode_sub(MODE_SUB_GAME_OVER); + else + shift_next_mode_sub(MODE_SUB_SCREEN_SHOT_RESULT); + }*/ + } return true; + } + return false; +} + +bool dest_game_main() { + bool res; +#if PV_DEBUG + if (!pv_x) { + task_pv_game_close(); + res = pv_game_free(); + } + else + res = x_pv_game_free(); +#else + res = x_pv_game_free(); +#endif + if (!res) + return false; + +#if BAKE_X_PACK + if (pv_x_bake) { + XPVGameBaker* baker = x_pv_game_baker_get(); + if (baker) + shift_next_mode_sub(MODE_SUB_SELECTOR); + } +#endif + + task_mask_screen_fade_in(0.0f, 0); + + //sound_volume_get()->field_6C = spr::SPR_PRIO_09; + //sound_volume_get()->field_70 = spr::SPR_PRIO_10; + //*(int32_t*)((size_t)act_toggle_get() + 0xA0) = 10; + //sound_volume_get()->show_enable(false, false); + //act_toggle_get()->close(); + + /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); + task_lamp_ctrl->field_74 = 1; + task_lamp_ctrl->field_78 = color_white;*/ + + //task_slider_control_get()->sub_140618980(1); + + rctx_ptr->render_manager->set_multisample(true); + return true; +} + +bool init_game_sel() { + //task_information_ptr->sub_1403BB780(3); + //sel_main_get()->open(true); + return true; +} + +bool ctrl_game_sel() { + return true; + /*if (sel_main_get()->check_alive()) { + if (sel_main_get()->field_7A && !task_pv_game_check_alive()) + task_pv_game_init_pv(); + return false; + } + else { + shift_next_mode_sub(MODE_SUB_GAME_MAIN); + return true; + }*/ +} + +bool dest_game_sel() { + /*if (sel_main_get()->check_alive()) + sel_main_get()->close();*/ + return true; +} + +bool init_stage_result() { + //task_information_ptr->sub_1403BB780(3); + //stage_result_main_get(); + //sub_140656320(); + return true; +} + +bool ctrl_stage_result() { + return true; + /*if (stage_result_main_get()->check_alive()) + return false; + + if (sub_14038BB30()->field_0.no_fail) { + shift_next_mode_sub(MODE_SUB_GAME_OVER); + return true; + } + + int32_tv2 = sub_14038BB30()->field_0.stage_index; + sub_14038BB30(); + int32_t v3 = 2;//sub_14038AEE0(); + //if (player_data_array_get(0)->contest.enable) + // sub_14038BB30()->sub_14038D080(false); + + if (v2 >= v3 - 1) + shift_next_mode_sub(MODE_SUB_GAME_OVER); + else { + struc_716* v7 = sub_14038BB30()->get_stage(); + if (v7->field_0 == -1 && !v7->field_128.next_stage) { + shift_next_mode_sub(MODE_SUB_GAME_OVER); + } + else { + sub_14038BB30()->cycle_state_index(); + shift_next_mode_sub(MODE_SUB_GAME_SEL); + } + } + return true;*/ +} + +bool dest_stage_result() { + //stage_result_main_get()->close(); + return true; +} + +bool init_screen_shot_sel() { + //task_information_ptr->sub_1403BB780(3); + //sel_screen_shot_get(); + //sub_1405D7C60(); + return true; +} + +bool ctrl_screen_shot_sel() { + return true; + /*if (sel_screen_shot_get()->check_alive()) + return false; + + shift_next_mode_sub(sub_1403F6B00() + ? MODE_SUB_SCREEN_SHOT_RESULT : MODE_SUB_GAME_OVER); + return true;*/ +} + +bool dest_screen_shot_sel() { + //sel_screen_shot_get()->close(); + return true; +} + +bool init_screen_shot_result() { + //task_information_ptr->sub_1403BB780(3); + //screen_shot_result_main_get(); + //sub_140559010(); + return true; +} + +bool ctrl_screen_shot_result() { + return true; + /*if (screen_shot_result_main_get()->check_alive()) + return false; + + shift_next_mode_sub(MODE_SUB_GAME_OVER); + return true;*/ +} + +bool dest_screen_shot_result() { + //screen_shot_result_main_get()->close(); + return true; +} + +bool init_game_over() { + //task_information_ptr->sub_1403BB780(5); + + /*bool v0 = true; + int32_t v1 = sub_14038BB30()->field_0.stage_index; + sub_14038BB30(); + + int32_t v2 = sub_14038AEE0() - 1; + if (!sub_1402103A0()) + v0 = false; + if (sub_14038BB30()->field_0.no_fail) + v0 = false; + if (!sub_1403933C0()) + v0 = false; + + if (v1 == v2) { + if (sub_14038BB30()->get_stage()->field_0 != -1) + v0 = false; + } + else if (v1 > v2) + v0 = false; + game_over_main_open(game_over_main_get(), v0);*/ + return true; +} + +bool ctrl_game_over() { + return true; + /*if (game_over_main_get()->check_alive()) { + struc_705* v2 = sub_14022EF20(0); + if (v2 && sub_14022ED30(v2)) + *(uint8_t*)((size_t)game_over_main_get() + 0x8D) = 1; + } + else { + if (*(uint8_t*)((size_t)game_over_main_get() + 0x8D)) + shift_next_mode_sub(MODE_SUB_GAME_SEL); + else + shift_next_mode(MODE_ADVERTISE); + } + return false;*/ +} + +bool dest_game_over() { + //game_over_main_get()->close(); + return true; +} diff --git a/src/ReDIVA/mode_game.hpp b/src/ReDIVA/mode_game.hpp new file mode 100644 index 00000000..3235e08f --- /dev/null +++ b/src/ReDIVA/mode_game.hpp @@ -0,0 +1,42 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "config.hpp" +#include "../KKdLib/default.hpp" + +extern bool init_game(); +extern bool ctrl_game(); +extern bool dest_game(); + +extern bool init_selector(); +extern bool ctrl_selector(); +extern bool dest_selector(); + +extern bool init_game_main(); +extern bool ctrl_game_main(); +extern bool dest_game_main(); + +extern bool init_game_sel(); +extern bool ctrl_game_sel(); +extern bool dest_game_sel(); + +extern bool init_stage_result(); +extern bool ctrl_stage_result(); +extern bool dest_stage_result(); + +extern bool init_screen_shot_sel(); +extern bool ctrl_screen_shot_sel(); +extern bool dest_screen_shot_sel(); + +extern bool init_screen_shot_result(); +extern bool ctrl_screen_shot_result(); +extern bool dest_screen_shot_result(); + +extern bool init_game_over(); +extern bool ctrl_game_over(); +extern bool dest_game_over(); + diff --git a/src/ReDIVA/mode_startup.cpp b/src/ReDIVA/mode_startup.cpp new file mode 100644 index 00000000..c9d7b722 --- /dev/null +++ b/src/ReDIVA/mode_startup.cpp @@ -0,0 +1,173 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_startup.hpp" +#include "../CRE/auth_2d.hpp" +#include "../CRE/auth_3d.hpp" +#include "../CRE/pv_db.hpp" +#include "../CRE/sound.hpp" +#include "data_initialize.hpp" +#include "input_state.hpp" +#include "mask_screen.hpp" +#include "mode.hpp" +#include "system_startup.hpp" +#include "test_mode.hpp" + +static int32_t startup_error_code; + +bool init_startup() { + startup_error_code = false; + return true; +} + +bool ctrl_startup() { + return false; +} + +static void sub_14066C670() { + +} + +static uint32_t sub_14066D190() { + return 0; +} + +bool dest_startup() { + if (get_mode_info_const()->next != MODE_APP_ERROR && !is_test_mode_start()) + sub_14066C670(); + + if (is_test_mode_start()) + shift_next_mode(MODE_TEST_MODE); + else { + sub_14066D190(); + + Mode state = get_mode_info_const()->next == MODE_TEST_MODE + ? MODE_TEST_MODE : MODE_ADVERTISE; + shift_next_mode(state); + } + return true; +} + +bool init_data_initialize() { + task_data_init_open(); + task_auth_3d_open(); + aet_manager_open(); + //no_good_open(); + return true; +} + +bool ctrl_data_initialize() { + return task_data_init_check_state(); +} + +bool dest_data_initialize() { + task_data_init_close(); + return true; +} + +bool init_system_startup() { + task_system_startup_open(); + task_pv_db_open(); + + /*if (!sub_14066E820()) + game_state_set_error_code(949);*/ + + ScreenParam& screen_param = get_screen_param(); + + //sub_14066D190(); + + if (!is_test_mode_start()) { + /*if (screen_param.mode != SCREEN_MODE_HD) + game_state_set_error_code(910);*/ + + /*if (sub_14066C9A0()) { + sub_14066FA90(); + game_state_set_error_code(90); + }*/ + } + + /*if (sub_1401E8A40()) + sub_1406A1DE0(task_touch_ptr[0], 0);*/ + + /*if (sub_1401E89A0()) + task_aime_get()->sub_14017A890(9);*/ + + //task_lamp_ctrl_get()->sub_1403C8B40(); + + /*if (sub_1401E8A50()) + task_slider_control_get()->sub_140618A60();*/ + + /*sub_1403D4760();*/ + + /*const Wrap_collection* wrap_collection = wrap_collection_get(); + if (wrap_collection && wrap_collection->printer.get_value()) + task_printer_get()->sub_1404C0F90();*/ + return true; +} + +bool ctrl_system_startup() { + return !!system_startup_ready; +} + +bool dest_system_startup() { + task_system_startup_close(); + //task_closing_ptr->open("CLOSING"); + //task_touch_area_ptr->open("TOUCH AREA", app::TASK_PRIO_HIGH); + //sound_volume_get(); + //sub_140623810(); + //sub_1406A1F30(); + + task_mask_screen_open(); + shift_next_mode_sub(MODE_SUB_WARNING); + + if (!is_test_mode_start()) { + //sub_14066D190(); + + /*uint8_t v2[4]; + net_alw_detail::context_ptr_get()->field_90(v2); + if (!v2[1] && !v2[3]) { + startup_error_code = 8005; + shift_next_mode_sub(MODE_SUB_SYSTEM_STARTUP_ERROR); + sub_140022740(); + }*/ + } + return true; +} + +bool init_system_startup_error() { + //task_mode_app_error_open(startup_error_code); + return true; +} + +bool ctrl_system_startup_error() { + const ModeInfo* mode_info = get_mode_info_const(); + if (mode_info->current || mode_info->sub_current != MODE_SUB_SYSTEM_STARTUP_ERROR) + return false; + + const InputState* input_state = input_state_get(0); + return input_state->CheckDown(INPUT_BUTTON_JVS_START) && input_state->CheckTapped(INPUT_BUTTON_JVS_TEST); +} + +bool dest_system_startup_error() { + //task_mode_app_error_close(); + shift_next_mode_sub(MODE_SUB_WARNING); + return true; +} + +bool init_warning() { + /*if (sub_14066F660() && !is_test_mode_start() && !sub_14066D030()) + task_warning.open("WARNING");*/ + return true; +} + +bool ctrl_warning() { + return true; + //return !task_warning.check_alive(); +} + +bool dest_warning() { + //task_warning.close(); + return true; +} diff --git a/src/ReDIVA/mode_startup.hpp b/src/ReDIVA/mode_startup.hpp new file mode 100644 index 00000000..b8fc3f08 --- /dev/null +++ b/src/ReDIVA/mode_startup.hpp @@ -0,0 +1,28 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool init_startup(); +extern bool ctrl_startup(); +extern bool dest_startup(); + +extern bool init_data_initialize(); +extern bool ctrl_data_initialize(); +extern bool dest_data_initialize(); + +extern bool init_system_startup(); +extern bool ctrl_system_startup(); +extern bool dest_system_startup(); + +extern bool init_system_startup_error(); +extern bool ctrl_system_startup_error(); +extern bool dest_system_startup_error(); + +extern bool init_warning(); +extern bool ctrl_warning(); +extern bool dest_warning(); diff --git a/src/ReDIVA/mode_test_mode.cpp b/src/ReDIVA/mode_test_mode.cpp new file mode 100644 index 00000000..9a400020 --- /dev/null +++ b/src/ReDIVA/mode_test_mode.cpp @@ -0,0 +1,49 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "mode_test_mode.hpp" +#include "../CRE/sound.hpp" +#include "mask_screen.hpp" +#include "test_mode.hpp" +#include "wait_screen.hpp" + +bool init_test_mode() { + sys_am_set_test_mode_starting(true); + sound_work_reset_all_se(); + + if (!is_test_mode_start()) { + //sub_1401F4440(); + //sub_1401E87E0(); + } + + sys_am_set_test_mode_starting(1); + + //task_information_ptr->sub_1403BB780(0); + + /*TaskLampCtrl* task_lamp_ctrl = task_lamp_ctrl_get(); + task_lamp_ctrl->field_74 = 0; + task_lamp_ctrl->field_78 = color_white; + task_lamp_ctrl->field_7C = 0;*/ + + //task_slider_control_get()->sub_140618980(0); + + task_wait_screen_set_load_loop_none(); + task_mask_screen_fade_in(0.0f, 0); + + sound_work_reset_all_se(); + for (int32_t i = 0; i < 3; i++) + sound_work_release_stream(i++); + return true; +} + +bool ctrl_test_mode() { + return false; +} + +bool dest_test_mode() { + //sub_1401F4420(); + sys_am_set_test_mode_starting(false); + return true; +} diff --git a/src/ReDIVA/mode_test_mode.hpp b/src/ReDIVA/mode_test_mode.hpp new file mode 100644 index 00000000..70ff4e1c --- /dev/null +++ b/src/ReDIVA/mode_test_mode.hpp @@ -0,0 +1,12 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool init_test_mode(); +extern bool ctrl_test_mode(); +extern bool dest_test_mode(); diff --git a/src/ReDIVA/pv_game/pv_game.cpp b/src/ReDIVA/pv_game/pv_game.cpp index c62f44fa..8e7d4f20 100644 --- a/src/ReDIVA/pv_game/pv_game.cpp +++ b/src/ReDIVA/pv_game/pv_game.cpp @@ -19,11 +19,11 @@ #include "../../CRE/stage_param.hpp" #include "../../KKdLib/prj/algorithm.hpp" #include "../am_data.hpp" -#include "../game_state.hpp" #include "../imgui_helper.hpp" #include "../input_state.hpp" #include "../mask_screen.hpp" #include "../task_movie.hpp" +#include "../test_mode.hpp" #include "../wait_screen.hpp" #include "player_data.hpp" #include "pv_game_camera.hpp" @@ -5961,7 +5961,7 @@ bool task_pv_game_init_demo_pv(int32_t pv_id, pv_difficulty difficulty, bool mus } void task_pv_game_init_test_pv() { - if (test_mode_get()) + if (is_test_mode_start()) return; task_rob_manager_open(); diff --git a/src/ReDIVA/system_startup.cpp b/src/ReDIVA/system_startup.cpp index 9d355922..6a4cb2ea 100644 --- a/src/ReDIVA/system_startup.cpp +++ b/src/ReDIVA/system_startup.cpp @@ -11,9 +11,9 @@ #include "../KKdLib/io/path.hpp" #include "pv_game/pv_game.hpp" #include "input_state.hpp" -#include "game_state.hpp" #include "mask_screen.hpp" #include "print_work.hpp" +#include "test_mode.hpp" struct system_startup_struct { int32_t state; @@ -111,7 +111,7 @@ namespace system_startup_detail { bool TaskSystemStartup::init() { system_startup.state = 0; system_startup.wait = 0; - if (test_mode_get()) + if (is_test_mode_start()) system_startup.time = 3600; else system_startup.time = 7200; @@ -167,9 +167,9 @@ namespace system_startup_detail { //if (system_startup.location_server_state < 0 && system_startup.net_param_state < 0 // && system_startup.field_1C && system_startup.pv_information_state < 0 - // && system_startup.extended_data_state < 0 && (test_mode_get() || system_startup.all_net_state < 0)) + // && system_startup.extended_data_state < 0 && (is_test_mode_start() || system_startup.all_net_state < 0)) if (system_startup.pv_information_state < 0 && system_startup.extended_data_state < 0) - if (test_mode_get()) + if (is_test_mode_start()) system_startup.state = 6; else { system_startup.state = 4; @@ -180,7 +180,7 @@ namespace system_startup_detail { system_startup.time--; bool service = false; - if (test_mode_get() && input_state_get(0)->CheckTapped(INPUT_BUTTON_JVS_SERVICE)) + if (is_test_mode_start() && input_state_get(0)->CheckTapped(INPUT_BUTTON_JVS_SERVICE)) service = true; if (system_startup.time >= 0 && !service) @@ -188,7 +188,7 @@ namespace system_startup_detail { system_startup_pv_information_dest(); - if (test_mode_get()) + if (is_test_mode_start()) system_startup.state = 6; else { system_startup.state = 4; @@ -265,7 +265,7 @@ namespace system_startup_detail { system_startup.print_work.PrintText(app::TEXT_FLAG_ALIGN_FLAG_LEFT, buf.data(), buf.size()); } - if (test_mode_get()) { + if (is_test_mode_start()) { system_startup.print_work.PrintText(app::TEXT_FLAG_ALIGN_FLAG_LEFT, "\n"); system_startup.print_work.PrintText(app::TEXT_FLAG_ALIGN_FLAG_LEFT, "PRESS SERVICE BUTTON TO CANCEL\n"); @@ -328,7 +328,7 @@ namespace system_startup_detail { system_startup.print_work.PrintText(app::TEXT_FLAG_ALIGN_FLAG_LEFT, buf.data(), buf.size()); } - if (test_mode_get()) + if (is_test_mode_start()) system_startup.print_work.PrintText(app::TEXT_FLAG_ALIGN_FLAG_LEFT, "PRESS SERVICE BUTTON TO CANCEL\n"); } @@ -536,7 +536,7 @@ static SSOpdMakeTask* ss_opd_make_task_get() { } static bool system_startup_check_ready() { - if (test_mode_get() || system_startup.ready) + if (is_test_mode_start() || system_startup.ready) return true; task_pv_game_close(); @@ -552,7 +552,7 @@ static bool system_startup_check_ready() { } static void system_startup_extended_data_ctrl() { - if (test_mode_get()) { + if (is_test_mode_start()) { system_startup.extended_data_state = -1; return; } @@ -582,7 +582,7 @@ static void system_startup_extended_data_ctrl() { } static void system_startup_extended_data_disp() { - if (test_mode_get()) + if (is_test_mode_start()) return; std::string buf("EXTENDED DATA : "); diff --git a/src/ReDIVA/test_mode.cpp b/src/ReDIVA/test_mode.cpp new file mode 100644 index 00000000..e05de8c1 --- /dev/null +++ b/src/ReDIVA/test_mode.cpp @@ -0,0 +1,19 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "test_mode.hpp" +#include "../CRE/sound.hpp" +#include "mask_screen.hpp" +#include "wait_screen.hpp" + +static bool test_mode_start; + +bool is_test_mode_start() { + return test_mode_start; +} + +void sys_am_set_test_mode_starting(bool value) { + test_mode_start = value; +} diff --git a/src/ReDIVA/test_mode.hpp b/src/ReDIVA/test_mode.hpp new file mode 100644 index 00000000..db9944ed --- /dev/null +++ b/src/ReDIVA/test_mode.hpp @@ -0,0 +1,11 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" + +extern bool is_test_mode_start(); +extern void sys_am_set_test_mode_starting(bool value);