Files
korenkonder_ReDIVA/src/ReDIVA/system_startup.cpp
T

135 lines
3.4 KiB
C++

/*
by korenkonder
GitHub/GitLab: korenkonder
*/
#include "system_startup.hpp"
#include "../CRE/mdata_manager.hpp"
#include "game_state.hpp"
#include "pv_game.hpp"
system_startup_detail::TaskSystemStartup task_system_startup;
struct system_startup_struct {
int32_t state;
int32_t wait;
bool field_1D;
};
extern render_context* rctx_ptr;
system_startup_struct system_startup;
int32_t system_startup_ready;
static void task_pv_game_init_test_pv();
static bool sub_140672AD0();
namespace system_startup_detail {
TaskSystemStartup::TaskSystemStartup() {
}
TaskSystemStartup::~TaskSystemStartup() {
}
bool TaskSystemStartup::Init() {
system_startup.state = 0;
system_startup.wait = 0;
system_startup.field_1D = false;
return true;
}
bool TaskSystemStartup::Ctrl() {
system_startup_ready = 0;
switch (system_startup.state) {
case 0:
system_startup.state = 1;
case 1:
system_startup.state = 2;
break;
case 2:
mdata_manager_append_task();
system_startup.state = 3;
break;
case 3:
if (mdata_manager_get()->state == 5 ||mdata_manager_get()->state == 15)
system_startup.state = 4;
break;
case 4:
//rctx_ptr->draw_pass.enable[DRAW_PASS_3D] = false;
task_pv_game_init_test_pv();
system_startup.state = 5;
break;
case 5:
if (!task_pv_game_check_task_ready() && sub_140672AD0())
system_startup.state = 6;
break;
case 6:
system_startup.wait = 0;//120;
system_startup.state = 7;
break;
case 7:
if (system_startup.wait-- < 0)
system_startup.state = 8;
break;
case 8:
//rctx_ptr->draw_pass.enable[DRAW_PASS_3D] = true;
system_startup_ready = 1;
break;
}
return false;
}
bool TaskSystemStartup::Dest() {
if (task_pv_game_check_task_ready() && !sub_140672AD0())
return false;
opd_make_manager_task_free();
mdata_manager_free_task();
return true;
}
}
bool task_system_startup_append_task() {
return app::TaskWork::AppendTask(&task_system_startup, "SYSTEM_STARTUP");
}
bool task_system_startup_free_task() {
return task_system_startup.SetDest();
}
static void task_pv_game_init_test_pv() {
if (test_mode_get())
return;
task_rob_manager_append_task();
TaskPvGame::InitData init_data;
init_data.data.pv_id = 999;
init_data.data.difficulty = 1;
init_data.data.field_C = 0;
init_data.data.score_percentage_clear = 50;
init_data.data.life_gauge_safety_time = 40;
init_data.data.life_gauge_border = 30;
init_data.field_190 = false;
init_data.field_191 = false;
init_data.no_fail = false;
init_data.field_193 = true;
init_data.field_194 = true;
init_data.field_195 = true;
init_data.field_198 = true;
task_pv_game_append_task(&init_data);
}
static bool sub_140672AD0() {
if (test_mode_get() || system_startup.field_1D)
return true;
task_pv_game_free_task();
if (!task_pv_game_check_task_ready() && task_rob_manager_free_task())
system_startup.field_1D = true;
return system_startup.field_1D;
}