summaryrefslogtreecommitdiff
path: root/src/d/d_menu_quit.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2026-01-24 23:36:23 -0800
committerGitHub <noreply@github.com>2026-01-24 23:36:23 -0800
commit5867eaf68b97bfe359849aafe93af5f73313c782 (patch)
tree09765780deff6345c89b4447a3b53b8cd9649f86 /src/d/d_menu_quit.cpp
parente01dbc3297f000dd440410d999c4f4f32d2e25d0 (diff)
general cleanup, d_menu_quit / d_a_obj_testcube mostly done, d_msg_scrn_explain debug (#3065)
* typedef for cPhs_Step * make sdk includes consistent * d_menu_quit / d_msg_scrn_explain debug * d_a_obj_testcube mostly done * d_debug_pad mostly done * jstudio tool library headers * some JStudioCameraEditor headers * d_jcam_editor mostly done * try fixing some shield regressions * d_bg_parts mostly done * fix merge errors * debug fix
Diffstat (limited to 'src/d/d_menu_quit.cpp')
-rw-r--r--src/d/d_menu_quit.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/src/d/d_menu_quit.cpp b/src/d/d_menu_quit.cpp
new file mode 100644
index 0000000000..6ad35a184b
--- /dev/null
+++ b/src/d/d_menu_quit.cpp
@@ -0,0 +1,153 @@
+#include "d/dolzel.h" // IWYU pragma: keep
+
+#include "d/d_menu_quit.h"
+#include "d/d_lib.h"
+
+dMq_HIO_c g_mqHIO;
+
+dMq_HIO_c::~dMq_HIO_c() {}
+
+dMq_HIO_c::dMq_HIO_c() {}
+
+void dMq_HIO_c::genMessage(JORMContext*) {}
+
+typedef void (dMenu_Quit_c::*moveProc)();
+static moveProc move_process[] = {
+ &dMenu_Quit_c::select1_proc,
+ &dMenu_Quit_c::select2_proc,
+ &dMenu_Quit_c::messageChange,
+};
+
+// stripped, but based on asserts it was likely the constructor goes here
+dMenu_Quit_c::dMenu_Quit_c() {
+ JUT_ASSERT(0, mStick != NULL);
+ JUT_ASSERT(0, mpScrnExplain != NULL);
+}
+
+dMenu_Quit_c::~dMenu_Quit_c() {
+ delete mStick;
+ delete mpScrnExplain;
+ mpScrnExplain = NULL;
+}
+
+void dMenu_Quit_c::select1_init() {
+ field_0x14 = 1;
+ field_0x1c = 1;
+ msgTxtSet(0x4B2, false); // "Continue?"
+ field_0x12 = 0;
+}
+
+void dMenu_Quit_c::select1_proc() {
+ bool isSelect = YesNoSelect();
+ if (isSelect) {
+ if (field_0x14 == 1 || field_0x14 == 2) {
+ field_0x10 = 0;
+ field_0x11 = 1;
+ } else {
+ select2_init();
+ }
+ }
+}
+
+void dMenu_Quit_c::select2_init() {
+ field_0x14 = 0;
+ field_0x1c = 1;
+ msgTxtSet(0x4B3, false); // "Really quit?"
+ field_0x12 = 1;
+}
+
+void dMenu_Quit_c::select2_proc() {
+ bool isSelect = YesNoSelect();
+ if (isSelect) {
+ if (field_0x14 == 1) {
+ mDoAud_bgmStop(30);
+ dComIfGp_setNextStage("name", 0, 0, 0);
+ } else {
+ select1_init();
+ }
+ }
+}
+
+void dMenu_Quit_c::messageChange() {
+ bool rt;
+
+ if (mpScrnExplain->getStatus() != dMsgScrnExplain_c::STATUS_WAIT_e) {
+ if (mpScrnExplain->getStatus() == dMsgScrnExplain_c::STATUS_MOVE_e || mpScrnExplain->getStatus() == dMsgScrnExplain_c::STATUS_MOVE_SELECT_e) {
+ mpScrnExplain->onForceSelect();
+ }
+
+ mpScrnExplain->move();
+ } else {
+ if (field_0x1c == 1) {
+ rt = mpScrnExplain->openExplain(mMsgId, 1, field_0x14 != 0 ? 0 : 1, 0xFF, field_0x20);
+ } else {
+ rt = mpScrnExplain->openExplain(mMsgId, 0, 0, 0xFF, true);
+ }
+
+ if (rt == 1) {
+ field_0x12 = field_0x13;
+ }
+ }
+}
+
+bool dMenu_Quit_c::YesNoSelect() {
+ bool rt = false;
+ if (mpScrnExplain->getStatus() == dMsgScrnExplain_c::STATUS_WAIT_e) {
+ rt = true;
+ field_0x1c = 0;
+ }
+
+ if (field_0x22 == 4) {
+ switch (mpScrnExplain->getSelectCursor()) {
+ case 0:
+ field_0x14 = 1;
+ break;
+ case 1:
+ field_0x14 = 0;
+ break;
+ case 0xFF:
+ field_0x14 = 2;
+ break;
+ }
+ }
+
+ if (field_0x22 == 4 && mpScrnExplain->getStatus() == dMsgScrnExplain_c::STATUS_CLOSE_e) {
+ if (field_0x12 == 0) {
+ mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0);
+ } else if (field_0x12 == 1) {
+ if (field_0x14 == 1) {
+ mDoAud_seStart(Z2SE_QUIT_GAME, NULL, 0, 0);
+ } else {
+ mDoAud_seStart(Z2SE_SY_CURSOR_CANCEL, NULL, 0, 0);
+ }
+ }
+ }
+
+ return rt;
+}
+
+void dMenu_Quit_c::msgTxtSet(u16 i_msgId, bool param_1) {
+ param_1 = true;
+
+ if (i_msgId != 0xFFFF) {
+ bool rt;
+ if (field_0x1c == 1) {
+ rt = mpScrnExplain->openExplain(i_msgId, 1, field_0x14 != 0 ? 0 : 1, 0xFF, param_1);
+ } else {
+ rt = mpScrnExplain->openExplain(i_msgId, 0, 0, 0xFF, true);
+ }
+
+ if (!rt) {
+ field_0x20 = param_1;
+ mMsgId = i_msgId;
+ field_0x13 = field_0x12;
+ field_0x12 = 2;
+ }
+ }
+
+ field_0x21 = 0;
+}
+
+void dDlst_MenuQuitExplain_c::draw() {
+ mpExplain->draw((J2DOrthoGraph*)dComIfGp_getCurrentGrafPort());
+}