d_picture_box mostly matching for GZLE01 (#1125)

* initial progress

* more progress

* more progress

* d_picture_box mostly matching for GZLE01

Unable to resolve the regswap in dJle_Pb_c::draw()

* reverted some changes to member names

* filled missing enum value

* PR changes made

* renamed some fields
This commit is contained in:
Mattias Blum
2026-07-18 17:37:31 -04:00
committed by GitHub
parent c1513e97e5
commit db61d31022
8 changed files with 2261 additions and 93 deletions
+2 -1
View File
@@ -54,8 +54,9 @@ public:
virtual void move(f32 x, f32 y);
virtual void add(f32 x, f32 y);
// fakematch, this getter doesn't exist
// fakematch, these getters don't exist
f32 resize__getMinX() const { return mBounds.i.x; }
f32 resize__getMinY() const { return mBounds.i.y; }
virtual void resize(f32 w, f32 h) {
f32 x = resize__getMinX();
x += w;
+23 -6
View File
@@ -503,8 +503,9 @@ public:
void setPictureStatusOn() { mPictureStatus = 2; }
void setPictureStatusGetOn(u8 to_set) {
mPictureStatus = 3;
field_0x495f = to_set;
mGetPictureNum = to_set;
}
u8 getGetPictureNum() { return mGetPictureNum; }
u8 getScopeMesgStatus() { return mScopeMesgStatus; }
void setScopeMesgStatus(u8 status) { mScopeMesgStatus = status; }
@@ -589,6 +590,7 @@ public:
void setActionIconArchive(JKRArchive * pArc) { mpActionIconArchive = pArc; }
JKRArchive* getActionIconArchive() { return mpActionIconArchive; }
void setScopeResArchive(JKRArchive * pArc) { mpScopeResArchive = pArc; }
JKRArchive* getCameraResArchive() { return mpCameraResArchive; }
void setCameraResArchive(JKRArchive * pArc) { mpCameraResArchive = pArc; }
JKRArchive* getSwimResArchive() { return mpSwimResArchive; }
void setSwimResArchive(JKRArchive * pArc) { mpSwimResArchive = pArc; }
@@ -623,7 +625,9 @@ public:
u8 getSelectPicture() { return mSelectPicture; }
void setSelectPicture(u8 i) { mSelectPicture = i; }
u8 getPictureResult() { return mPictureResult; }
void setPictureResult(u8 i) { mPictureResult = i; }
u8 getPictureResultDetail() { return mPictureResultDetail; }
void setPictureResultDetail(u8 i) { mPictureResultDetail = i; }
void setBossBattleData(JKRAramBlock* aramBlock, int i) { mBossBattleData[i] = aramBlock; }
void startFwaterTimer() { mFwaterTimer = 1; }
@@ -826,7 +830,7 @@ public:
/* 0x495C */ u8 mPictureResult;
/* 0x495D */ u8 mPictureResultDetail;
/* 0x495E */ u8 mPictureStatus;
/* 0x495F */ u8 field_0x495f;
/* 0x495F */ u8 mGetPictureNum;
/* 0x4960 */ u8 mPictureFormat;
/* 0x4961 */ u8 mSelectPicture;
/* 0x4962 */ u8 mHeapLockFlag;
@@ -2981,8 +2985,8 @@ inline u8 dComIfGp_getAStatusForce() {
}
// B Button
inline void dComIfGp_setAStatusForce(u8 value) {
g_dComIfG_gameInfo.play.setAStatusForce(value);
inline void dComIfGp_setAStatusForce(u8 status) {
g_dComIfG_gameInfo.play.setAStatusForce(status);
}
// A Button
@@ -2991,8 +2995,8 @@ inline u8 dComIfGp_getDoStatusForce() {
}
// A Button
inline void dComIfGp_setDoStatusForce(u8 value) {
g_dComIfG_gameInfo.play.setDoStatusForce(value);
inline void dComIfGp_setDoStatusForce(u8 status) {
g_dComIfG_gameInfo.play.setDoStatusForce(status);
}
inline u8 dComIfGp_getPictureStatus() {
@@ -3007,6 +3011,10 @@ inline void dComIfGp_setPictureStatusOn() {
g_dComIfG_gameInfo.play.setPictureStatusOn();
}
inline u8 dComIfGp_getGetPictureNum() {
return g_dComIfG_gameInfo.play.getGetPictureNum();
}
inline void dComIfGp_setPictureStatusGetOn(u8 to_set){
g_dComIfG_gameInfo.play.setPictureStatusGetOn(to_set);
}
@@ -3207,10 +3215,18 @@ inline u8 dComIfGp_getPictureResult() {
return g_dComIfG_gameInfo.play.getPictureResult();
}
inline void dComIfGp_setPictureResult(u8 i) {
g_dComIfG_gameInfo.play.setPictureResult(i);
}
inline u8 dComIfGp_getPictureResultDetail() {
return g_dComIfG_gameInfo.play.getPictureResultDetail();
}
inline void dComIfGp_setPictureResultDetail(u8 i) {
g_dComIfG_gameInfo.play.setPictureResultDetail(i);
}
inline void dComIfGp_setBossBattleData(JKRAramBlock* aramBlock, int i) {
g_dComIfG_gameInfo.play.setBossBattleData(aramBlock, i);
}
@@ -3897,6 +3913,7 @@ inline JKRArchive* dComIfGp_getErrorResArchive() { return g_dComIfG_gameInfo.pla
inline void dComIfGp_setActionIconArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setActionIconArchive(pArc); }
inline JKRArchive* dComIfGp_getActionIconArchive() { return g_dComIfG_gameInfo.play.getActionIconArchive(); }
inline void dComIfGp_setScopeResArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setScopeResArchive(pArc); }
inline JKRArchive* dComIfGp_getCameraResArchive() { return g_dComIfG_gameInfo.play.getCameraResArchive(); }
inline void dComIfGp_setCameraResArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setCameraResArchive(pArc); }
inline JKRArchive* dComIfGp_getSwimResArchive() { return g_dComIfG_gameInfo.play.getSwimResArchive(); }
inline void dComIfGp_setSwimResArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setSwimResArchive(pArc); }
+132 -7
View File
@@ -3,17 +3,58 @@
#include "dolphin/types.h"
#include "f_op/f_op_msg.h"
#include "f_op/f_op_msg_mng.h"
#include "d/d_drawlist.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "d/d_lib.h"
class J3DModel;
class JKRExpHeap;
class J2DScreen;
class J2DTextBox;
class mDoDvdThd_toMainRam_c;
struct fopMsgM_pane_class;
struct fopMsgM_pane_alpha_class;
class sub_pb_class : public msg_class {
public:
/* Place member variables here */
enum dJlePbExecState {
PB_EXEC_CAMERA_OPEN_e = 0x0,
PB_EXEC_CAMERA_MOVE_e = 0x1,
PB_EXEC_BROWSE_OPEN_e = 0x2,
PB_EXEC_BROWSE_MOVE_e = 0x3,
PB_EXEC_GET_OPEN_e = 0x4,
PB_EXEC_GET_MOVE_e = 0x5,
PB_EXEC_CLOSE_e = 0x6,
PB_EXEC_CLOSED_e = 0x7,
};
class dJle_Pb_c {
enum dJlePbModeSubState {
PB_SUB_IDLE_e = 0x0,
PB_SUB_CONFIRM_e = 0x1,
PB_SUB_SHIFT_1_TO_0_e = 0x2,
PB_SUB_SHIFT_0_TO_2_e = 0x3,
PB_SUB_SHIFT_0_TO_1_e = 0x4,
PB_SUB_SHIFT_2_TO_0_e = 0x5,
};
enum dJlePbViewMode {
PB_VIEW_CAMERA_e = 0x0,
PB_VIEW_BROWSE_e = 0x1,
PB_VIEW_GET_e = 0x2,
};
struct dPbPhotoSlotData {
/* 0x0000 */ u8 pad[0x1EE0 - 0x0000];
/* 0x1EE0 */ u32 mSnapResultId;
/* 0x1EE4 */ u8 mSnapResultDetail;
/* 0x1EE5 */ u8 mPhotoFormat;
};
void dPb_erasePicture();
class dJle_Pb_c : public dDlst_base_c {
public:
void alphaChange(fopMsgM_pane_alpha_class*, f32) {}
void alphaChange(fopMsgM_pane_class*, f32) {}
void getMemory(void*, int) {}
@@ -49,8 +90,8 @@ class dJle_Pb_c {
void setColorInit(u8);
void setColorAnime(u8);
void changeData();
void label_sort();
void getPicLabelData(u8);
bool label_sort();
u8 getPicLabelData(u8);
void shutterLineRotateCenter(f32, int);
void shutterLineRotateInitPos(f32, int);
void shutterLineMove();
@@ -70,6 +111,90 @@ class dJle_Pb_c {
void _gmove();
void draw();
void _delete(JKRExpHeap*);
public:
/* 0x004 */ J2DScreen* scrn;
/* 0x008 */ J2DScreen* scrn1;
/* 0x00C */ J2DScreen* scrn2;
/* 0x010 */ fopMsgM_pane_class pane_st[12];
/* 0x2B0 */ fopMsgM_pane_class pane_sb[12];
/* 0x550 */ fopMsgM_pane_class pane_ylig;
/* 0x588 */ fopMsgM_pane_class pane_ylef;
/* 0x5C0 */ fopMsgM_pane_class pane_icn[3];
/* 0x668 */ fopMsgM_pane_class pane_emp[3];
/* 0x710 */ fopMsgM_pane_class pane_ct1;
/* 0x748 */ fopMsgM_pane_class pane_ct2;
/* 0x780 */ fopMsgM_pane_class pane_sp[8];
/* 0x940 */ fopMsgM_pane_class pane_no[3];
/* 0x9E8 */ fopMsgM_pane_class pane_nob[3];
/* 0xA90 */ fopMsgM_pane_class pane_nok[3];
/* 0xB38 */ fopMsgM_pane_class pane_b1;
/* 0xB70 */ fopMsgM_pane_class pane_b2;
/* 0xBA8 */ fopMsgM_pane_class pane_wnum;
/* 0xBE0 */ fopMsgM_pane_class pane_wnuk;
/* 0xC18 */ fopMsgM_pane_class pane_wpba;
/* 0xC50 */ fopMsgM_pane_class pane_wbap;
/* 0xC88 */ fopMsgM_pane_class pane_wpsc;
/* 0xCC0 */ fopMsgM_pane_class pane_yrtn;
/* 0xCF8 */ fopMsgM_pane_class pane_yzom;
/* 0xD30 */ fopMsgM_pane_class pane_crtn;
/* 0xD68 */ fopMsgM_pane_class pane_czom;
/* 0xDA0 */ fopMsgM_pane_class pane_lrtn;
/* 0xDD8 */ fopMsgM_pane_class pane_rzom;
/* 0xE10 */ fopMsgM_pane_class pane_shut;
/* 0xE48 */ fopMsgM_pane_class pane_fd00;
/* 0xE80 */ fopMsgM_pane_class pane_wp04;
/* 0xEB8 */ fopMsgM_pane_class pane_wp01;
/* 0xEF0 */ fopMsgM_pane_class pane_wp02;
/* 0xF28 */ fopMsgM_pane_class pane_wp03;
/* 0xF60 */ fopMsgM_pane_alpha_class pane_tx[4];
/* 0xF80 */ mDoDvdThd_toMainRam_c* mImportedPhotoLoadReq; // Async request for imported gallery photo data.
/* 0xF84 */ J2DPicture* mMsgIconFontMainPic; // Message icon sheet used by fopMsgM_outFontDraw.
/* 0xF88 */ J2DPicture* mMsgIconFontSubPic; // Secondary icon sheet used by fopMsgM_outFontDraw.
/* 0xF8C */ J2DPicture* mMsgSelectArrowPic; // Select-arrow sprite for two-choice message prompts.
/* 0xF90 */ JUTFont* font0;
/* 0xF94 */ JUTFont* font1;
/* 0xF98 */ STControl* stick;
/* 0xF9C */ u8 mF9C[0xFA0 - 0xF9C];
/* 0xFA0 */ mesg_header* head_p;
/* 0xFA4 */ JMSMesgEntry_c mMsgEntry; // Current parsed message entry metadata.
/* 0xFBC */ fopMsgM_msgDataProc_c mMsgDataProc; // Message parser/layout state and choice helper.
/* 0x125C */ JUtility::TColor icn_white;
/* 0x1260 */ JUtility::TColor icn_black;
/* 0x1264 */ JUtility::TColor emp_white;
/* 0x1268 */ JUtility::TColor emp_black;
/* 0x126C */ dPbPhotoSlotData* mPhotoBuffer[4]; // Three saved slots + one import/get temporary slot.
/* 0x127C */ f32 mZoomScale;
/* 0x1280 */ f32 mShutterLineX1[12];
/* 0x12B0 */ f32 mShutterLineY1[12];
/* 0x12E0 */ f32 mShutterLineX2[12];
/* 0x1310 */ f32 mShutterLineY2[12];
/* 0x1340 */ int mChoiceCursorX0; // X anchor for first message choice marker.
/* 0x1344 */ int mChoiceCursorX1; // X anchor for second message choice marker.
/* 0x1348 */ int mChoiceCursorY; // Y anchor for message choice marker.
/* 0x134C */ int mChoiceCursorYAlt; // Alternate Y anchor parsed from second choice token.
/* 0x1350 */ char* mMsgTextBuffer[4]; // Output text buffers for the four message panes.
/* 0x1360 */ s16 mFadeTimer; // Open/close fade timer.
/* 0x1362 */ s16 mShutterCounter;
/* 0x1364 */ s16 mMsgLineCount; // Cached message line count for vertical alignment.
/* 0x1366 */ s16 mMsgIconDrawState; // Scratch state used by icon font setup/draw helpers.
/* 0x1368 */ u8 mPictureSlotSortMap[3]; // Mapping from sorted slot order to source slot index.
/* 0x136B */ u8 mExecState; // Top-level state machine used by execute dispatch (open/move/close/etc.).
/* 0x136C */ u8 mModeSubState; // Per-mode substate (camera capture/select, browse erase/slide animation states).
/* 0x136D */ u8 mViewMode; // Selects camera vs browse vs get-photo mode paths.
/* 0x136E */ u8 mSelectedPhotoSlot; // Active browse slot index.
/* 0x136F */ u8 mSelectedChoiceIndex; // Active index in two-choice message prompts.
/* 0x1370 */ u8 mModeSwapActive; // Non-zero while shutter transition between camera/browse is running.
/* 0x1371 */ u8 mPhotoSlotOccupied[3]; // Per-slot occupancy flags for saved photos.
/* 0x1374 */ u8 mPhotoDeletedFlag; // Set when a photo was deleted during this session.
/* 0x1375 */ u8 mChoiceArrowIconIdx; // Icon token index currently used for select-arrow placement.
/* 0x1376 */ u8 mCaptureFormat;
};
class sub_pb_class : public msg_class {
public:
/* 0x00FC */ JKRExpHeap* heap;
/* 0x0100 */ dJle_Pb_c* dPb_c;
/* 0x0104 */ dPbPhotoSlotData* buffer[4];
};
void dPb_erasePicture();
#endif /* D_PICTURE_BOX_H */
+1
View File
@@ -7,6 +7,7 @@
class fopAc_ac_c;
enum fopMsg_MessageStatus_e {
fopMsgStts_MSG_UNK0_e = 0x00,
fopMsgStts_MSG_PREPARING_e = 0x01,
fopMsgStts_BOX_OPENING_e = 0x02,
fopMsgStts_MSG_TYPING_e = 0x06,
+3 -3
View File
@@ -239,7 +239,7 @@ public:
void tag_input_kenshi();
#endif
void getIconColor(int) {}
u32 getIconColor(int i_no) { return field_0x1E0[i_no]; }
u8 getIconNum(int i_no) { return field_0x281[i_no]; }
int getIconPosX(int i_no) { return field_0x168[i_no]; }
int getIconPosY(int i_no) { return field_0x1A4[i_no]; }
@@ -365,9 +365,9 @@ public:
/* 0x164 */ int field_0x164; // keyWaitTimer?
/* 0x168 */ int field_0x168[0xF]; // IconPosX
/* 0x1A4 */ int field_0x1A4[0xF]; // IconPosY
/* 0x1A4 */ u32 field_0x1E0[0xF];
/* 0x1E0 */ u32 field_0x1E0[0xF]; // IconColor
/* 0x21C */ int field_0x21C;
/* 0x21C */ u32 field_0x220[0xF];
/* 0x220 */ u32 field_0x220[0xF];
/* 0x25C */ u32 field_0x25C;
/* 0x260 */ s16 field_0x260;
/* 0x264 */ f32 field_0x264;
+6
View File
@@ -11,6 +11,12 @@ bool mDoGph_AfterOfDraw();
bool mDoGph_Painter();
void mDoGph_BlankingON();
void mDoGph_BlankingOFF();
void mDoGph_setCaptureStep(s16 step);
void* mDoGph_getCaptureTextureBuffer();
void mDoGph_setCaptureCaptureFormat(u8 fmt);
void mDoGph_setCaptureTextureFormat(u8 fmt);
s16 mDoGph_getCaptureStep();
void mDoGph_CaptureCansel();
struct ResTIMG;
+1 -1
View File
@@ -157,7 +157,7 @@ void dComIfG_play_c::itemInit() {
mPictureResult = 0;
mPictureResultDetail = 0;
mPictureStatus = 0;
field_0x495f = 0;
mGetPictureNum = 0;
mPictureFormat = 0;
mSelectPicture = 0;
mHeapLockFlag = 0;
+2093 -75
View File
File diff suppressed because it is too large Load Diff