Skip to content

Commit fc4700e

Browse files
authored
Merge pull request #273 from robojumper/d_lyt_control_game
d_lyt_control_game OK
2 parents 57557d1 + 88075f0 commit fc4700e

27 files changed

+1416
-399
lines changed

config/SOUE01/splits.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1712,8 +1712,10 @@ d/lyt/d_lyt_control_game.cpp:
17121712
.text start:0x802CC7B0 end:0x802D16A8 align:16
17131713
.ctors start:0x804DB8A0 end:0x804DB8A4
17141714
.data start:0x805403F8 end:0x80540C88
1715+
.sdata start:0x80573EF0 end:0x80573F28
17151716
.sbss start:0x80575A00 end:0x80575A18
1716-
.bss start:0x805B7DD0 end:0x805B8040
1717+
.sdata2 start:0x8057CA68 end:0x8057CAA0
1718+
.bss start:0x805B7DD0 end:0x805B8030
17171719

17181720
d/lyt/d_lyt_control_title.cpp:
17191721
.text start:0x802D16B0 end:0x802D17BC align:16

config/SOUE01/symbols.txt

Lines changed: 439 additions & 330 deletions
Large diffs are not rendered by default.

configure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ def MatchingFor(*versions):
663663
Object(NonMatching, "toBeSorted/d_a_npc_ken_talk.cpp"),
664664
Object(NonMatching, "toBeSorted/d_a_jstudio_act.cpp"),
665665
Object(NonMatching, "toBeSorted/d_a_jstudio_sys.cpp"),
666-
Object(NonMatching, "d/lyt/d_lyt_control_game.cpp"),
666+
Object(Matching, "d/lyt/d_lyt_control_game.cpp"),
667667
Object(NonMatching, "d/lyt/d_lyt_control_title.cpp"),
668668
Object(NonMatching, "d/tg/d_t_map_area.cpp"),
669669
Object(NonMatching, "d/tg/d_t_truck_rails.cpp"),

include/d/a/d_a_item.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,17 @@ class dAcItem_c : public dAcItemBase_c {
105105
return sIsPerformingInitialCollection;
106106
}
107107

108+
static s32 getCollectionCurrentCount() {
109+
return sCollectionCurrentCount;
110+
}
111+
112+
s32 getQuantity() const {
113+
return mItemQuantity;
114+
}
115+
108116
private:
109117
static bool sIsPerformingInitialCollection;
118+
static s32 sCollectionCurrentCount;
110119

111120
/* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
112121
/* 0x338 */ dShadowCircle_c mShdw;

include/d/a/d_a_itembase.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,10 @@ class dAcItemBase_c : public dAcObjBase_c {
250250
static u16 getTearBit(int tearNum);
251251
static bool setDungeonFlagForTear(int tearNum);
252252

253+
u16 getItemId_i() const {
254+
return mId;
255+
}
256+
253257
private:
254258
u16 mId;
255259

include/d/d_cs_game.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,9 @@ class dCsGame_c : public dCs_c {
436436
bool isCursorActive() const {
437437
return mCursorActive;
438438
}
439-
void setField0x9A0(u8 val) {
440-
mCursorActive = val;
439+
440+
void setField_0x9A2(bool value) {
441+
field_0x9A2 = value;
441442
}
442443

443444
void offNextCursor() {

include/d/d_message.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,12 @@ class dMessage_c : public dBase_c {
247247
mInMapEvent = val;
248248
}
249249

250-
s32 getField_0x32C() const {
251-
return field_0x32C;
250+
s32 getMapEvent() const {
251+
return mMapEvent;
252252
}
253253

254-
void setField_0x32C(s32 val) {
255-
field_0x32C = val;
254+
void setMapEvent(s32 val) {
255+
mMapEvent = val;
256256
}
257257

258258
void setField_0x329(bool v) {
@@ -267,6 +267,10 @@ class dMessage_c : public dBase_c {
267267
return field_0x32A;
268268
}
269269

270+
bool getField_0x330() const {
271+
return field_0x330;
272+
}
273+
270274
void setField_0x330(bool v) {
271275
field_0x330 = v;
272276
}
@@ -367,8 +371,8 @@ class dMessage_c : public dBase_c {
367371
/* 0x32A */ bool field_0x32A;
368372

369373
/* 0x32B */ u8 field_0x32B;
370-
/* 0x32C */ s32 field_0x32C;
371-
/* 0x330 */ u8 field_0x330;
374+
/* 0x32C */ s32 mMapEvent;
375+
/* 0x330 */ bool field_0x330;
372376

373377
/* 0x334 */ u32 mMinigameResultPoints;
374378
/* 0x338 */ u32 mMinigameTime;

include/d/flag/storyflag_map.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ enum StoryFlags_e {
6060
/** [Harp Cutscene (Lanayru Desert layer 2 / Lanayru Mines layer 2 / Temple of Time layer 2 / Behind The Temple
6161
* layer 3)] Story Flag #9 (0x0009) - JP 805ACD58 0x04 / US 805A9AD8 0x04
6262
*/
63-
STORYFLAG_9,
63+
STORYFLAG_HARP_CUTSCENE,
6464

6565
/** [Entering Ancient Cistern Cutscene]
6666
* Story Flag #10 (0x000A) - JP 805ACD58 0x08 / US 805A9AD8 0x08
@@ -111,7 +111,7 @@ enum StoryFlags_e {
111111
/** [Fire Dragon Text after SotH part Cutscene (Eldin Volcano, Digging Mitts Cave, Volcano Summit Waterfall layer
112112
* 4)] Story Flag #19 (0x0013) - JP 805ACD5B 0x08 / US 805A9ADB 0x08
113113
*/
114-
STORYFLAG_19,
114+
STORYFLAG_BOKO_BASE_BEATEN,
115115

116116
/** [Set when learning 3rd SotH part (Groosenator to Lanayru ready)]
117117
* Story Flag #20 (0x0014) - JP 805ACD5B 0x10 / US 805A9ADB 0x10
@@ -718,7 +718,7 @@ enum StoryFlags_e {
718718
/** [Groose lands in Faron after Harp (Sealed Temple layer 2)]
719719
* Story Flag #140 (0x008C) - JP 805ACD67 0x04 / US 805A9AE7 0x04
720720
*/
721-
STORYFLAG_140,
721+
STORYFLAG_GROOSE_LANDS_IN_FARON,
722722

723723
/** [Ballad of the Goddess played with Impa (Sealed Grounds layer 2)]
724724
* Story Flag #141 (0x008D) - JP 805ACD6C 0x01 / US 805A9AEC 0x01
@@ -863,7 +863,7 @@ enum StoryFlags_e {
863863
/** [Eldin Eruption Cutscene ready to play (set when Levias explains SotH quest, set and unset by Faron and Lanayru
864864
* SotH)] Story Flag #169 (0x00A9) - JP 805ACD62 0x01 / US 805A9AE2 0x01
865865
*/
866-
STORYFLAG_169,
866+
STORYFLAG_ELDIN_VOLCANO_CAN_ERUPT,
867867

868868
/** [Fire Dragon teaches SotH part Cutscene (Fire Dragon's Lair layer 2)]
869869
* Story Flag #170 (0x00AA) - JP 805ACD62 0x02 / US 805A9AE2 0x02
@@ -948,12 +948,12 @@ enum StoryFlags_e {
948948
/** [Water Basin collected (unsets when scrapper picks up anything else)]
949949
* Story Flag #186 (0x00BA) - JP 805ACD69 0x02 / US 805A9AE9 0x02
950950
*/
951-
STORYFLAG_186,
951+
STORYFLAG_SCRAPPER_HAS_WATER_BASIN,
952952

953953
/** [Big Frog Watered]
954954
* Story Flag #187 (0x00BB) - JP 805ACD69 0x04 / US 805A9AE9 0x04
955955
*/
956-
STORYFLAG_187,
956+
STORYFLAG_SUMMIT_BIG_FROG_WATERED,
957957

958958
/** [Asking Fi about the Water Basin after finding the Big Flames in fromt of FS]
959959
* Story Flag #188 (0x00BC) - JP 805ACD69 0x08 / US 805A9AE9 0x08
@@ -3738,7 +3738,7 @@ enum StoryFlags_e {
37383738
/** [set after scrappers text at start of Water Basin Escord]
37393739
* Story Flag #743 (0x02E7) - JP 805ACDA6 0x80 / US 805A9B26 0x80
37403740
*/
3741-
STORYFLAG_743,
3741+
STORYFLAG_WATER_BASIN_ESCORT_STARTED,
37423742

37433743
/** [Scrapper text at start of scrapper escort]
37443744
* Story Flag #744 (0x02E8) - JP 805ACDA9 0x01 / US 805A9B29 0x01

include/d/lyt/d_lyt_control_game.h

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,58 @@
11
#ifndef D_LYT_CONTROL_GAME_H
22
#define D_LYT_CONTROL_GAME_H
33

4+
// clang-format off
5+
// vtable order
6+
#include "common.h"
47
#include "d/d_base.h"
5-
#include "d/lyt/d_lyt_map.h"
6-
#include "d/lyt/d_lyt_wipe.h"
78
#include "d/lyt/meter/d_lyt_meter.h"
89
#include "d/lyt/msg_window/d_lyt_msg_window.h"
910
#include "d/lyt/msg_window/d_lyt_simple_window.h"
11+
#include "d/lyt/d_lyt_wipe.h"
12+
#include "d/lyt/d_lyt_help.h"
13+
#include "d/lyt/d_lyt_map.h"
1014
#include "s/s_State.hpp"
1115
#include "toBeSorted/arc_managers/layout_arc_manager.h"
1216
#include "toBeSorted/raii_ptr.h"
17+
// clang-format on
18+
19+
class dLytDrawMark_c;
1320

1421
class dLytControlGame_c : public dBase_c {
1522
public:
1623
dLytControlGame_c();
1724
virtual ~dLytControlGame_c();
1825

26+
enum Cmd_e {
27+
CMD_NONE = 0,
28+
CMD_MAP = 1,
29+
CMD_PAUSE = 2,
30+
CMD_HELP = 3,
31+
};
32+
33+
virtual int create() override;
34+
virtual int doDelete() override;
35+
virtual int execute() override;
36+
virtual int draw() override;
37+
1938
bool isInSomeMapState() const;
2039
bool isNotInStateMap() const;
21-
void openCollectionScreenDemo();
22-
bool isStateNormalOrNotInEvent() const;
23-
void somehowRelatedToEnteringLightPillars(s32, s32, s32);
24-
25-
void fn_802CCD40(bool);
40+
bool isStateNotNormalOrInEvent() const;
41+
bool fn_802CFF60() const;
42+
43+
void setMapEventDone(bool);
2644
void fn_802D04F0();
45+
void checkForBeaconNextToMark();
46+
47+
void hideHelp();
48+
void changeHelpText(s32 textIndex);
49+
void openPause();
50+
void openPauseDemo();
51+
void openHelp(s32 textIndex);
52+
void openMap();
53+
void openMapEvent(s32 mapEvent, s32 arg1, s32 arg2);
54+
55+
void resetFootsteps();
2756

2857
const dMapFootPrintsQueue_c *getFootprintsQueue() const {
2958
return mFootprintsMgr.getQueue();
@@ -80,31 +109,43 @@ class dLytControlGame_c : public dBase_c {
80109
}
81110

82111
private:
112+
bool checkStoryflag(s32 flag) const;
113+
void fn_802CFA90();
114+
bool canOpenPause();
115+
bool releaseRes();
116+
bool decrementRes();
117+
83118
/* 0x00068 */ UI_STATE_MGR_DECLARE(dLytControlGame_c);
84-
/* 0x000A4 */ RaiiPtr<void*> field_0x000A4;
119+
/* 0x000A4 */ RaiiPtr<dLytMap_c> mpMap;
85120
/* 0x000A8 */ dLytMeter_c mMeter;
86121
/* 0x13C10 */ dLytMsgWindow_c mMsgWindow;
87122
/* 0x14E34 */ dLytSimpleWindow_c mSimpleWindow;
88123
/* 0x152A0 */ dLytWipe_c mWipe;
89-
/* 0x15848 */ u8 _0x15848[0x15850 - 0x15848];
124+
/* 0x15848 */ dLytHelp_c *mpHelp;
125+
/* 0x1584C */ dLytDrawMark_c *mpDrawMark;
90126
/* 0x15850 */ dMapFootPrintsMgr_c mFootprintsMgr;
91127

92-
/* 0x15C24 */ UNKWORD field_0x15C24;
93-
/* 0x15C28 */ UNKWORD field_0x15C28;
94-
128+
/* 0x15C24 */ s32 mCommand;
129+
/* 0x15C28 */ s32 mHelpTextIndex;
95130
/* 0x15C2C */ s32 mCurrentPauseDisp;
96131
/* 0x15C30 */ s32 mPauseDisp00Tab;
132+
/* 0x15C34 */ u8 mIsEvent;
133+
/* 0x15C38 */ s32 mMapEvent;
97134

98-
/* 0x15C34 */ u8 _0x15C34[0x15C40 - 0x15C34];
135+
/* 0x15C3C */ u8 _0x15C3C[0x15C40 - 0x15C3C];
99136

100137
/* 0x15C40 */ LayoutArcControl mLytArcControl;
101138

102-
/* 0x15C4C */ u8 _0x15C4C[0x15C60 - 0x15C4C];
139+
/* 0x15C4C */ s32 mMapEventArg1;
140+
/* 0x15C50 */ s32 mMapEventArg2;
103141

104-
/* 0x15C60 */ u16 mItemForPauseDemo;
142+
/* 0x15C54 */ UNKWORD field_0x15C54;
143+
/* 0x15C58 */ UNKWORD field_0x15C58;
105144

106-
/* 0x15C62 */ u8 _0x15C62[0x15C64 - 0x15C62];
145+
/* 0x15C5C */ u8 _0x15C5C[0x15C60 - 0x15C5C];
107146

147+
/* 0x15C60 */ u16 mItemForPauseDemo;
148+
/* 0x15C62 */ u16 mPickupItemCount;
108149
/* 0x15C64 */ u16 mItemCountForPauseDemo;
109150
/* 0x15C66 */ u8 field_0x15C66;
110151
/* 0x15C67 */ bool mIsPauseDemo;

include/d/lyt/d_lyt_draw_mark.h

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#ifndef D_LYT_DRAW_MARK_H
2+
#define D_LYT_DRAW_MARK_H
3+
4+
#include "d/lyt/d2d.h"
5+
#include "m/m_vec.h"
6+
#include "s/s_State.hpp"
7+
8+
class dLytDrawMark_c {
9+
public:
10+
dLytDrawMark_c() : mStateMgr(*this) {}
11+
~dLytDrawMark_c() {}
12+
13+
bool build(UNKWORD);
14+
bool remove();
15+
bool execute();
16+
bool draw();
17+
18+
u8 getField_0x940() const {
19+
return field_0x940;
20+
}
21+
22+
void setField_0x941(u8 v) {
23+
field_0x941 = v;
24+
}
25+
26+
private:
27+
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytDrawMark_c);
28+
/* 0x018 */ d2d::LytBase_c mLyt;
29+
/* 0x0CC */ d2d::AnmGroup_c mAnm[16];
30+
31+
/* 0x4CC */ u8 _0x4CC[0x504 - 0x4CC];
32+
33+
/* 0x504 */ d2d::ResAccIf_c mResAcc;
34+
35+
/* 0x874 */ u8 _0x874[0x88C - 0x874];
36+
37+
/* 0x88C */ mVec2_c field_0x88C[6];
38+
/* 0x8BC */ mVec2_c field_0x8BC[6];
39+
40+
/* 0x8EC */ u8 _0x8EC[0x940 - 0x8EC];
41+
42+
/* 0x940 */ u8 field_0x940;
43+
/* 0x941 */ u8 field_0x941;
44+
45+
/* 0x942 */ u8 _0x942[0x958 - 0x942];
46+
};
47+
48+
#endif

0 commit comments

Comments
 (0)