summaryrefslogtreecommitdiff
path: root/src/d/lyt/d_lyt_do_button_related.cpp
blob: f98d30581fd71838944e9307548a44e43971f178 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include "common.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_do_button.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/misc_actor.h"

// TODO: Rename _HIO_c when LytDoButtonRelated gets a better name?
class LytDoButtonRelatedClass {
public:
    LytDoButtonRelatedClass();
    virtual ~LytDoButtonRelatedClass();

private:
    /* 0x04 */ u8 field_0x04;
    /* 0x05 */ u8 field_0x05;
    /* 0x06 */ u8 field_0x06;
};

static LytDoButtonRelatedClass sDoButtonRelatedClass;

LytDoButtonRelatedClass::LytDoButtonRelatedClass() {
    field_0x04 = 0;
    field_0x05 = 0;
    field_0x06 = LytDoButtonRelated::ACT_IE_NONE;
}
LytDoButtonRelatedClass::~LytDoButtonRelatedClass() {}

LytDoButtonRelated *LytDoButtonRelated::sInstance;

LytDoButtonRelated::LytDoButtonRelated() {
    sInstance = this;
}

bool LytDoButtonRelated::build(d2d::ResAccIf_c *resAcc) {
    for (int i = 0; i < 12; i++) {
        field_0x04[i] = ACT_IE_NONE;
        field_0x34[i] = 0;
    }

    return true;
}

bool LytDoButtonRelated::remove() {
    return true;
}

static const dLytDobutton_c::Act_Do_e sActIEtoDoConversionTable[LytDoButtonRelated::ACT_IE_NONE] = {
    dLytDobutton_c::ACT_DO_CLIMB_UP,     // ACT_IE_INFO_CLIMB_UP
    dLytDobutton_c::ACT_DO_JUMP,         // ACT_IE_INFO_JUMP
    dLytDobutton_c::ACT_DO_DROP_DOWN,    // ACT_IE_INFO_DROP_DOWN
    dLytDobutton_c::ACT_DO_LET_GO,       // ACT_IE_INFO_LET_GO
    dLytDobutton_c::ACT_DO_OPEN,         // ACT_IE_INFO_OPEN
    dLytDobutton_c::ACT_DO_PUT_DOWN,     // ACT_IE_INFO_DROP
    dLytDobutton_c::ACT_DO_THROW,        // ACT_IE_INFO_THROW
    dLytDobutton_c::ACT_DO_BURROW,       // ACT_IE_INFO_BURROW
    dLytDobutton_c::ACT_DO_ROLL,         // ACT_IE_INFO_ROLL
    dLytDobutton_c::ACT_DO_9,            // ACT_IE_INFO_9
    dLytDobutton_c::ACT_DO_MOVE,         // ACT_IE_INFO_MOVE
    dLytDobutton_c::ACT_DO_GRAB,         // ACT_IE_INFO_GRAB
    dLytDobutton_c::ACT_DO_SHOOT,        // ACT_IE_INFO_SHOOT
    dLytDobutton_c::ACT_DO_13,           // ACT_IE_INFO_13
    dLytDobutton_c::ACT_DO_14,           // ACT_IE_INFO_14
    dLytDobutton_c::ACT_DO_15,           // ACT_IE_INFO_15
    dLytDobutton_c::ACT_DO_TALK,         // ACT_IE_INFO_TALK
    dLytDobutton_c::ACT_DO_EXAMINE,      // ACT_IE_INFO_EXAMINE
    dLytDobutton_c::ACT_DO_DRAW,         // ACT_IE_INFO_DRAW
    dLytDobutton_c::ACT_DO_19,           // ACT_IE_INFO_19
    dLytDobutton_c::ACT_DO_BLOW,         // ACT_IE_INFO_BLOW
    dLytDobutton_c::ACT_DO_21,           // ACT_IE_INFO_21
    dLytDobutton_c::ACT_DO_22,           // ACT_IE_INFO_22
    dLytDobutton_c::ACT_DO_SWIM,         // ACT_IE_INFO_SWIM
    dLytDobutton_c::ACT_DO_LEAP,         // ACT_IE_INFO_LEAP
    dLytDobutton_c::ACT_DO_DASH,         // ACT_IE_INFO_DASH
    dLytDobutton_c::ACT_DO_GET_OUT,      // ACT_IE_INFO_GET_OUT
    dLytDobutton_c::ACT_DO_27,           // ACT_IE_INFO_27
    dLytDobutton_c::ACT_DO_PICK_UP,      // ACT_IE_INFO_PICK_UP
    dLytDobutton_c::ACT_DO_SIT,          // ACT_IE_INFO_SIT
    dLytDobutton_c::ACT_DO_STAND,        // ACT_IE_INFO_STAND
    dLytDobutton_c::ACT_DO_DIG,          // ACT_IE_INFO_DIG
    dLytDobutton_c::ACT_DO_32,           // ACT_IE_INFO_32
    dLytDobutton_c::ACT_DO_33,           // ACT_IE_INFO_33
    dLytDobutton_c::ACT_DO_BREAK_FREE,   // ACT_IE_INFO_BREAK_FREE
    dLytDobutton_c::ACT_DO_35,           // ACT_IE_INFO_35
    dLytDobutton_c::ACT_DO_36,           // ACT_IE_INFO_36
    dLytDobutton_c::ACT_DO_PLANT,        // ACT_IE_INFO_PLANT
    dLytDobutton_c::ACT_DO_CATCH,        // ACT_IE_INFO_CATCH
    dLytDobutton_c::ACT_DO_SPEED_UP,     // ACT_IE_INFO_SPEED_UP
    dLytDobutton_c::ACT_DO_SAILCLOTH,    // ACT_IE_INFO_SAILCLOTH
    dLytDobutton_c::ACT_DO_PUT_AWAY,     // ACT_IE_INFO_PUT_AWAY
    dLytDobutton_c::ACT_DO_EMERGE,       // ACT_IE_INFO_EMERGE
    dLytDobutton_c::ACT_DO_INSERT,       // ACT_IE_INFO_INSERT
    dLytDobutton_c::ACT_DO_44,           // ACT_IE_INFO_44
    dLytDobutton_c::ACT_DO_TURN,         // ACT_IE_INFO_TURN
    dLytDobutton_c::ACT_DO_PUSH_IN,      // ACT_IE_INFO_ALIGN
    dLytDobutton_c::ACT_DO_47,           // ACT_IE_INFO_47
    dLytDobutton_c::ACT_DO_DRAW_BOW,     // ACT_IE_INFO_DRAW_BOW
    dLytDobutton_c::ACT_DO_49,           // ACT_IE_INFO_49
    dLytDobutton_c::ACT_DO_50,           // ACT_IE_INFO_50
    dLytDobutton_c::ACT_DO_51,           // ACT_IE_INFO_51
    dLytDobutton_c::ACT_DO_SWING,        // ACT_IE_INFO_SWING
    dLytDobutton_c::ACT_DO_BALANCE,      // ACT_IE_INFO_BALANCE
    dLytDobutton_c::ACT_DO_JOSTLE,       // ACT_IE_INFO_JOSTLE
    dLytDobutton_c::ACT_DO_55,           // ACT_IE_INFO_55
    dLytDobutton_c::ACT_DO_SLEEP,        // ACT_IE_INFO_SLEEP
    dLytDobutton_c::ACT_DO_DROP,         // ACT_IE_INFO_DROP_2
    dLytDobutton_c::ACT_DO_LAUNCH,       // ACT_IE_INFO_LAUNCH
    dLytDobutton_c::ACT_DO_READ,         // ACT_IE_INFO_READ
    dLytDobutton_c::ACT_DO_WHIP,         // ACT_IE_INFO_WHIP
    dLytDobutton_c::ACT_DO_PULL,         // ACT_IE_INFO_PULL
    dLytDobutton_c::ACT_DO_DRINK,        // ACT_IE_INFO_DRINK
    dLytDobutton_c::ACT_DO_63,           // ACT_IE_INFO_63
    dLytDobutton_c::ACT_DO_GET_IN,       // ACT_IE_INFO_GET_IN
    dLytDobutton_c::ACT_DO_FIRE,         // ACT_IE_INFO_FIRE
    dLytDobutton_c::ACT_DO_ATTACK,       // ACT_IE_INFO_ATTACK
    dLytDobutton_c::ACT_DO_FATAL_BLOW,   // ACT_IE_INFO_FATAL_BLOW
    dLytDobutton_c::ACT_DO_JUMP_DOWN,    // ACT_IE_INFO_JUMP_DOWN
    dLytDobutton_c::ACT_DO_STRUM,        // ACT_IE_INFO_STRUM
    dLytDobutton_c::ACT_DO_70,           // ACT_IE_INFO_70
    dLytDobutton_c::ACT_DO_RELEASE,      // ACT_IE_INFO_RELEASE
    dLytDobutton_c::ACT_DO_GRAB_2,       // ACT_IE_INFO_GRAB_2
    dLytDobutton_c::ACT_DO_READY_STANCE, // ACT_IE_INFO_READY_STANCE
    dLytDobutton_c::ACT_DO_REMOVE,       // ACT_IE_INFO_REMOVE
    dLytDobutton_c::ACT_DO_READY_SWORD,  // ACT_IE_INFO_READY_SWORD
    dLytDobutton_c::ACT_DO_THRUST_SWORD, // ACT_IE_INFO_THRUST_SWORD
    dLytDobutton_c::ACT_DO_USE,          // ACT_IE_INFO_USE
    dLytDobutton_c::ACT_DO_SCOOP,        // ACT_IE_INFO_SCOOP
    dLytDobutton_c::ACT_DO_79,           // ACT_IE_INFO_79
    dLytDobutton_c::ACT_DO_80,           // ACT_IE_INFO_80
    dLytDobutton_c::ACT_DO_LOOK,         // ACT_IE_INFO_LOOK
    dLytDobutton_c::ACT_DO_DOWSE,        // ACT_IE_INFO_DOWSE
    dLytDobutton_c::ACT_DO_PILOT,        // ACT_IE_INFO_PILOT
    dLytDobutton_c::ACT_DO_LOOK_DOWN,    // ACT_IE_INFO_LOOK_DOWN
    dLytDobutton_c::ACT_DO_DIVE,         // ACT_IE_INFO_DIVE
    dLytDobutton_c::ACT_DO_SELECT,       // ACT_IE_INFO_SELECT
    dLytDobutton_c::ACT_DO_GRAB_3,       // ACT_IE_INFO_GRAB_3
    dLytDobutton_c::ACT_DO_MOVE_2,       // ACT_IE_INFO_MOVE_1
    dLytDobutton_c::ACT_DO_ACCELERATE,   // ACT_IE_INFO_ACCELERATE
    dLytDobutton_c::ACT_DO_CHARGE,       // ACT_IE_INFO_CHARGE
    dLytDobutton_c::ACT_DO_LEAN,         // ACT_IE_INFO_LEAN
    dLytDobutton_c::ACT_DO_PRESS,        // ACT_IE_INFO_PRESS
};

void LytDoButtonRelated::setCrossTop(Act_IE_e act, bool bHas) {
    LytDoButtonRelated *p = sInstance;
    if (p != nullptr) {
        if (act == ACT_IE_147) {
            p->field_0x04[DO_BUTTON_CROSS_T] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_T] = bHas;
            if (!checkIsInSkykeepPuzzle()) {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_TOP_1);
            } else {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
            }
        } else if (act == ACT_IE_149) {
            p->field_0x04[DO_BUTTON_CROSS_T] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_T] = bHas;
            if (!checkIsInSkykeepPuzzle()) {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_TOP_3);
            } else {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
            }
        } else if (act == ACT_IE_151) {
            p->field_0x04[DO_BUTTON_CROSS_T] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_T] = bHas;
            if (!checkIsInSkykeepPuzzle()) {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_TOP_4);
            } else {
                dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
            }
        } else {
            p->field_0x04[DO_BUTTON_CROSS_T] = act;
            p->field_0x34[DO_BUTTON_CROSS_T] = bHas;
            dLytMeter_c::setCrossIconTop(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
        }
    }
}

void LytDoButtonRelated::setCrossDown(Act_IE_e act, bool bHas) {
    LytDoButtonRelated *p = sInstance;
    if (p != nullptr) {
        if (act == ACT_IE_148) {
            p->field_0x04[DO_BUTTON_CROSS_D] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_D] = bHas;
            if (!checkIsInSkykeepPuzzle()) {
                dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_DOWN_0);
            } else {
                dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
            }
        } else if (act == ACT_IE_150) {
            p->field_0x04[DO_BUTTON_CROSS_D] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_D] = bHas;
            if (!checkIsInSkykeepPuzzle()) {
                dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_DOWN_2);
            } else {
                dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
            }
        } else if (act == ACT_IE_ETC_CENTER) {
            p->field_0x04[DO_BUTTON_CROSS_D] = ACT_IE_NONE;
            p->field_0x34[DO_BUTTON_CROSS_D] = bHas;
            dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_DOWN_5);
        } else {
            p->field_0x04[DO_BUTTON_CROSS_D] = act;
            p->field_0x34[DO_BUTTON_CROSS_D] = bHas;
            dLytMeter_c::setCrossIconDown(dLytMeterCrossBtn_c::CROSS_ICON_NONE);
        }
    }
}

LytDoButtonRelated::Act_IE_e LytDoButtonRelated::convertDoButton(dLytDobutton_c::Act_Do_e act) {
    for (s32 i = 0; i < ACT_IE_NONE; i++) {
        if (sActIEtoDoConversionTable[i] == act) {
            return static_cast<Act_IE_e>(i);
        }
    }
    return (Act_IE_e)-1;
}