Skip to content

Commit bb09532

Browse files
authored
party_cloud functions (#11)
* first look at cloudResetAt * move globals inside c file * finish cloudResetAt * decomp cloudGetStatus * decomp mot_cloud * decomp cloudGetBreathDir * Adjust to use enums where possible * decomp cloudGetBreathDist * rename enums * fix renaming errors * add missing includes * rename MarioFlag items * decomp cloudGetBreathPower * start cloudGetHitBreathout * change useStruct to void* * convert MarioFlags to bit shift values * convert PartyFlags to bit shift values * remove w prefix from multiTimer * clean up PartySlotId * add name changes to decomped code * remove temp variables in cloudResetAt * additional party_cloud cleanup * Add PartyCloud and cast useStruct * change GUS to CRAW * finish cloudGetHitBreathout
1 parent d0614d2 commit bb09532

9 files changed

Lines changed: 348 additions & 78 deletions

File tree

include/mario/mario.h

Lines changed: 82 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,86 @@
55

66
#pragma enumsalwaysint off
77
typedef enum MarioMotion {
8-
kStay, //0x0
9-
kWalk, //0x1
10-
kDash, //0x2
11-
kJump, //0x3
12-
kJumpNPC, //0x4
13-
kJumpSw, //0x5
14-
kJumpStand, //0x6
15-
kJump2, //0x7
16-
kJump3, //0x8
17-
kJumpSmall, //0x9
18-
kFall, //0xA
19-
kFall2, //0xB
20-
kUpstairs, //0xC
21-
kLand, //0xD
22-
kTalk, //0xE
23-
kGetItem, //0xF
24-
kHip, //0x10
25-
kHip2, //0x11
26-
kHammer, //0x12
27-
kHammer2, //0x13
28-
kJabara, //0x14
29-
kSlit, //0x15
30-
kRoll, //0x16
31-
kKaze, //0x17
32-
kPlane, //0x18
33-
kShip, //0x19
34-
kYoshi, //0x1A
35-
kCloud, //0x1B
36-
kVivian, //0x1C
37-
kDokan, //0x1D
38-
kGrasp, //0x1E
39-
kDamage, //0x1F
40-
kDamageToge, //0x20
41-
kBottomless, //0x21
42-
kForceReset, //0x22
43-
kShadow, //0x23
44-
kPartyUse, //0x24
45-
kKpaSwim, //0x25
46-
kKpaPowUp, //0x26
47-
kKpaPowDown, //0x27
48-
kDummy, //0x28
49-
kMotionMax = 0xFFFF
8+
MARIO_MOTION_STAY, //0x0
9+
MARIO_MOTION_WALK, //0x1
10+
MARIO_MOTION_DASH, //0x2
11+
MARIO_MOTION_JUMP, //0x3
12+
MARIO_MOTION_JUMP_NPC, //0x4
13+
MARIO_MOTION_JUMP_SW, //0x5
14+
MARIO_MOTION_JUMP_STAND, //0x6
15+
MARIO_MOTION_JUMP_2, //0x7
16+
MARIO_MOTION_JUMP_3, //0x8
17+
MARIO_MOTION_JUMP_SMALL, //0x9
18+
MARIO_MOTION_FALL, //0xA
19+
MARIO_MOTION_FALL_2, //0xB
20+
MARIO_MOTION_UPSTAIRS, //0xC
21+
MARIO_MOTION_LAND, //0xD
22+
MARIO_MOTION_TALK, //0xE
23+
MARIO_MOTION_GET_ITEM, //0xF
24+
MARIO_MOTION_HIP, //0x10
25+
MARIO_MOTION_HIP_2, //0x11
26+
MARIO_MOTION_HAMMER, //0x12
27+
MARIO_MOTION_HAMMER_2, //0x13
28+
MARIO_MOTION_JABARA, //0x14
29+
MARIO_MOTION_SLIT, //0x15
30+
MARIO_MOTION_ROLL, //0x16
31+
MARIO_MOTION_KAZE, //0x17
32+
MARIO_MOTION_PLANE, //0x18
33+
MARIO_MOTION_SHIP, //0x19
34+
MARIO_MOTION_YOSHI, //0x1A
35+
MARIO_MOTION_CLOUD, //0x1B
36+
MARIO_MOTION_VIVIAN, //0x1C
37+
MARIO_MOTION_DOKAN, //0x1D
38+
MARIO_MOTION_GRASP, //0x1E
39+
MARIO_MOTION_DAMAGE, //0x1F
40+
MARIO_MOTION_DAMAGE_TOGE, //0x20
41+
MARIO_MOTION_BOTTOMLESS, //0x21
42+
MARIO_MOTION_FORCE_RESET, //0x22
43+
MARIO_MOTION_SHADOW, //0x23
44+
MARIO_MOTION_PARTY_USE, //0x24
45+
MARIO_MOTION_KPA_SWIM, //0x25
46+
MARIO_MOTION_KPA_POW_UP, //0x26
47+
MARIO_MOTION_KPA_POW_DOWN, //0x27
48+
MARIO_MOTION_DUMMY, //0x28
49+
MARIO_MOTION_MOTION_MAX = 0xFFFF
5050
} MarioMotion;
5151
#pragma enumsalwaysint on
5252

53+
#pragma enumsalwaysint off
54+
typedef enum MarioFlags {
55+
MARIO_FLAG_ACTIVE = (1 << 0),
56+
MARIO_FLAG_CTRL_OFF = (1 << 1),
57+
MARIO_FLAG_CTRL_OFF_2 = (1 << 2),
58+
MARIO_FLAG_KEY_OFF = (1 << 3),
59+
MARIO_FLAG_FORCED_MOVEMENT = (1 << 5),
60+
MARIO_FLAG_USE_FORCE_DIRECTION = (1 << 6),
61+
MARIO_FLAG_STOP_AIR_MOVEMENT = (1 << 7),
62+
MARIO_FLAG_FLOORS_DISABLED = (1 << 8),
63+
MARIO_FLAG_FORCE_WALL = (1 << 9),
64+
MARIO_FLAG_WALLS_DISABLED = (1 << 10),
65+
MARIO_FLAG_HAMMER_HIT_WALL = (1 << 11),
66+
MARIO_FLAG_PRE_BATTLE_PHYSICS = (1 << 12),
67+
MARIO_FLAG_IS_CARRYING_BOBBERY = (1 << 13),
68+
MARIO_FLAG_ITEM_GET_DISABLED = (1 << 14),
69+
MARIO_FLAG_IS_PUSHING = (1 << 15),
70+
MARIO_FLAG_IS_JUMPING = (1 << 16),
71+
MARIO_FLAG_IS_FALLING = (1 << 17),
72+
MARIO_FLAG_IS_STEPPING = (1 << 18),
73+
MARIO_FLAG_HAS_INPUT_JUMP = (1 << 19),
74+
MARIO_FLAG_PAPER_MODE = (1 << 20),
75+
MARIO_FLAG_GONE_THROUGH_BARS = (1 << 21),
76+
MARIO_FLAG_PARTY_WALK_DISABLED = (1 << 22),
77+
MARIO_FLAG_SLIT_ABILITY_DISABLED = (1 << 23),
78+
MARIO_FLAG_TUBE_MODE = (1 << 24),
79+
MARIO_FLAG_BG_MODE = (1 << 25),
80+
MARIO_FLAG_IN_SHALLOW_WATER = (1 << 26),
81+
MARIO_FLAG_IS_TOUCHING_CEILING = (1 << 27),
82+
MARIO_FLAG_CHG_MOT_DISABLED = (1 << 28),
83+
MARIO_FLAG_IS_SHADOW_MARIO = (1 << 30),
84+
MARIO_FLAG_IS_8_BIT = (1 << 31)
85+
} MarioFlags;
86+
#pragma enumsalwaysint on
87+
5388
//TODO: US struct is bigger, 0x2F8 vs 0x2E0
5489
typedef struct MarioWork {
5590
u32 flags; //0x0
@@ -70,7 +105,10 @@ typedef struct MarioWork {
70105
s8 colorId; //0x3D
71106
u8 field_0x3E[0x44 - 0x3E]; //0x3E
72107
u32 currSubMotionId; //0x44
73-
u8 field_0x48[0x5C - 0x48]; //0x48
108+
u32 multiTimer; //0x48, ???
109+
u8 field_0x4C[0x50 - 0x4C]; //0x4C
110+
s16 airTimer; // 0x50
111+
u8 field_0x52[0x5C - 0x52]; //0x52
74112
s16 unk5C; //0x5C
75113
s16 unk5E; //0x5E
76114
s16 unk60; //0x60
@@ -94,9 +132,7 @@ typedef struct MarioWork {
94132
f32 unk144; //0x144
95133
f32 unk148; //0x148
96134
f32 unk14C; //0x14C
97-
f32 unk150; //0x150
98-
f32 unk154; //0x154
99-
f32 unk158; //0x158
135+
Vec unk150; //0x150
100136
f32 camFollowRate; //0x15C
101137
u8 unk160[0x168 - 0x160]; //0x160
102138
s32 unk168; //0x168

include/mario/mario_cam.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
#include <dolphin/types.h>
44

5-
s32 marioGetCamId(void);
5+
s32 marioGetCamId(void);
6+
void marioCamZoomOffReq2(s32);

include/mario/mario_sbr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
void marioSetBottomlessResetPosition(f32 x, f32 y, f32 z);
66
f32 revise360(f32 angle);
77
f32 toMovedir(f32 angle);
8+
void marioAdjustMoveDir(void);

include/party.h

Lines changed: 65 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,65 @@
55

66
#pragma enumsalwaysint off
77
typedef enum PartyMember {
8-
PARTY_NONE, //0
9-
PARTY_GOOMBELLA, //1
10-
PARTY_KOOPS, //2
11-
PARTY_BOBBERY, //3
12-
PARTY_YOSHI, //4
13-
PARTY_FLURRIE, //5
14-
PARTY_VIVIAN, //6
15-
PARTY_MS_MOWZ, //7
16-
PARTY_EGG, //8
17-
PARTY_FLAVIO, //9
18-
PARTY_PUNIO, //10
19-
PARTY_FRANKLY, //11
20-
PARTY_GUS, //12
21-
PARTY_GOOMBELLA_FOLLOWER, //13
22-
PARTY_KOOPS_FOLLOWER, //14
23-
PARTY_BOBBERY_FOLLOWER, //15
24-
PARTY_YOSHI_FOLLOWER, //16
25-
PARTY_FLURRIE_FOLLOWER, //17
26-
PARTY_VIVIAN_FOLLOWER, //18
27-
PARTY_MS_MOWZ_FOLLOWER //19
8+
PARTY_MEMBER_NONE, //0
9+
PARTY_MEMBER_GOOMBELLA, //1
10+
PARTY_MEMBER_KOOPS, //2
11+
PARTY_MEMBER_BOBBERY, //3
12+
PARTY_MEMBER_YOSHI, //4
13+
PARTY_MEMBER_FLURRIE, //5
14+
PARTY_MEMBER_VIVIAN, //6
15+
PARTY_MEMBER_MS_MOWZ, //7
16+
PARTY_MEMBER_EGG, //8
17+
PARTY_MEMBER_FLAVIO, //9
18+
PARTY_MEMBER_PUNIO, //10
19+
PARTY_MEMBER_FRANKLY, //11
20+
PARTY_MEMBER_CRAW, //12
21+
PARTY_MEMBER_GOOMBELLA_FOLLOWER, //13
22+
PARTY_MEMBER_KOOPS_FOLLOWER, //14
23+
PARTY_MEMBER_BOBBERY_FOLLOWER, //15
24+
PARTY_MEMBER_YOSHI_FOLLOWER, //16
25+
PARTY_MEMBER_FLURRIE_FOLLOWER, //17
26+
PARTY_MEMBER_VIVIAN_FOLLOWER, //18
27+
PARTY_MEMBER_MS_MOWZ_FOLLOWER //19
2828
} PartyMember;
2929
#pragma enumsalwaysint on
3030

31+
#pragma enumsalwaysint off
32+
typedef enum PartyFlags {
33+
PARTY_FLAG_IS_ACTIVE = (1 << 0),
34+
PARTY_FLAG_IS_GROUNDED = (1 << 1),
35+
PARTY_FLAG_IS_FOLLOWER = (1 << 2),
36+
PARTY_FLAG_IS_PARTNER = (1 << 3),
37+
PARTY_FLAG_IS_JUMPING = (1 << 4),
38+
PARTY_FLAG_IS_FALLING = (1 << 5),
39+
PARTY_FLAG_IS_STEPPING = (1 << 6),
40+
PARTY_FLAG_IN_SHALLOW_WATER = (1 << 7),
41+
PARTY_FLAG_IS_BEING_USED = (1 << 8),
42+
PARTY_FLAG_PAPER_MODE = (1 << 12),
43+
PARTY_FLAG_MOT_SLIT_FLOOR = (1 << 13),
44+
PARTY_FLAG_IS_RIDING_PLANE = (1 << 16),
45+
PARTY_FLAG_IS_RIDING_SHIP = (1 << 17),
46+
PARTY_FLAG_IS_BEHIND_MARIO = (1 << 19),
47+
PARTY_FLAG_SLEEP_ON = (1 << 22),
48+
PARTY_FLAG_BG_MODE = (1 << 23),
49+
PARTY_FLAG_DISABLE_FRONT_WALL_CHK = (1 << 24),
50+
PARTY_FLAG_FORCE_FALL = (1 << 25),
51+
PARTY_FLAG_DISABLE_FLOORS = (1 << 26),
52+
PARTY_FLAG_RUN_OFF = (1 << 28),
53+
PARTY_FLAG_CTRL_OFF = (1 << 29),
54+
PARTY_FLAG_CTRL_OFF_2 = (1 << 30),
55+
PARTY_FLAG_IS_EVT_USE = (1 << 31)
56+
} PartyFlags;
57+
#pragma enumsalwaysint on
58+
59+
#pragma enumsalwaysint off
60+
typedef enum PartySlotId {
61+
PARTY_SLOT_PARTY = 0, //0x0
62+
PARTY_SLOT_FOLLOWER = 1, //0x1
63+
PARTY_SLOT_NONE = -1
64+
} PartySlotId;
65+
#pragma enumsalwaysint on
66+
3167
typedef struct PartyEntry {
3268
u32 flags; //0x0
3369
u32 flags2; //0x4
@@ -39,10 +75,17 @@ typedef struct PartyEntry {
3975
s8 currentSlotId; //0x2F
4076
u8 field_0x30; //0x30
4177
s8 currentMemberId; //0x31, PartyMembers
42-
u8 field_0x32[0x160 - 0x32]; //0x32
78+
u8 field_0x32[0x39 - 0x32]; //0x32
79+
u8 useMotionId; //0x39
80+
u8 field_0x3A[0x58 - 0x3A]; //0x3A
81+
Vec position; //0x58
82+
u8 field_0x3a[0x160 - 0x64]; //0x64
4383
MarioWork* playerPtr; //0x160
4484
s32 camId; //0x164
45-
u8 field_0x168[0x188 - 0x168]; //0x168
85+
s32 yoshiPsndSFXId ; //0x168
86+
s32 unk16C; //0x16C
87+
void* useStruct; //0x170
88+
u8 field_0x168[0x188 - 0x174]; //0x174
4689
} PartyEntry;
4790

4891
PartyEntry* partyGetPtr(s32 id);

include/party/party_cloud.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,20 @@
22

33
#include <dolphin/mtx.h>
44

5+
typedef struct PartyCloud {
6+
f32 unk0; //0x0
7+
f32 unk4; //0x4
8+
f32 unk8; //0x8
9+
u8 field_0xC[0x20 - 0xC]; // 0xC
10+
s32 unk20; //0x20
11+
s32 unk24; //0x24
12+
s32 unk28; //0x28
13+
s32 unk2C; //0x2C
14+
u8 field_0x30[0x48 - 0xC];
15+
} PartyCloud;
16+
517
void cloudGetAt(Vec* position);
18+
void cloudResetAt();
19+
u8 cloudGetStatus();
20+
f32 cloudGetBreathDir(void);
21+
s32 cloudGetHitBreathout(s32 param_1);

src/mario/mario.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ BOOL marioItemGetOk(void) {
126126
}
127127

128128
BOOL marioCaseEventValidChk(void) {
129-
if (mp->currMotionId == kPlane) {
129+
if (mp->currMotionId == MARIO_MOTION_PLANE) {
130130
return FALSE;
131131
}
132132
else {
@@ -135,7 +135,7 @@ BOOL marioCaseEventValidChk(void) {
135135
}
136136

137137
BOOL mario8005BB80(void) {
138-
if (mp->currMotionId == kRoll || mp->flags & 0x100000) {
138+
if (mp->currMotionId == MARIO_MOTION_ROLL || mp->flags & 0x100000) {
139139
return FALSE;
140140
}
141141
return TRUE;
@@ -285,7 +285,7 @@ void mario80058374(void) {
285285
MarioMotion mot = wp->currMotionId;
286286
s32 flags;
287287

288-
if (mot != kShip && mot != kRoll && mot != kPlane && mot != kJabara && mot != kYoshi) {
288+
if (mot != MARIO_MOTION_SHIP && mot != MARIO_MOTION_ROLL && mot != MARIO_MOTION_PLANE && mot != MARIO_MOTION_JABARA && mot != MARIO_MOTION_YOSHI) {
289289
flags = wp->dispFlags;
290290
if (!(flags & 0x1000000)) {
291291
marioChgPose("M_D_1"); //inline

src/mario/mario_cam.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ void marioResetCamShift(void) {
2222
void marioResetCamShiftRate(void) {
2323
MarioWork* mario = marioGetPtr();
2424

25-
mario->unk150 = 0.03;
26-
mario->unk154 = 0.06;
27-
mario->unk158 = 0.06;
25+
mario->unk150.x = 0.03;
26+
mario->unk150.y = 0.06;
27+
mario->unk150.z = 0.06;
2828
mario->unk64 = 0.0f;
2929
mario->unk68 = 2.0f;
3030
mario->unk6C = (Vec){ 0.0f, 0.0f, 0.0f };
@@ -195,7 +195,7 @@ BOOL marioCamZoomUp(void) {
195195
yOffset = (320.0f - (f32)mario->unk16C) / 3.5f;
196196
}
197197

198-
if (party && party->currentMemberId == PARTY_FLURRIE && party->flags & 0x100) {
198+
if (party && party->currentMemberId == PARTY_MEMBER_FLURRIE && party->flags & 0x100) {
199199
angleAdjust = toMovedir(mario->unk1A8) >= 180.0f ? -70.0f : 70.0f;
200200
tempX = mario->unk168;
201201
zoomDistance = 550.0f;

0 commit comments

Comments
 (0)