Merge pull request #531 from GriffinRichards/doc-dodrio
Sync dodrio berry picking
|
Before Width: | Height: | Size: 395 B After Width: | Height: | Size: 395 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 195 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -1,106 +1,64 @@
|
||||
#ifndef GUARD_DODRIO_BERRY_PICKING_H
|
||||
#define GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
struct DodrioSubstruct_0160
|
||||
{
|
||||
/*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE];
|
||||
/*0x3000 : 0x3160*/ bool32 finished;
|
||||
/*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004;
|
||||
/*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10];
|
||||
/*0x3014 : 0x3174*/ u8 ALIGNED(4) state;
|
||||
/*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018;
|
||||
/*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C;
|
||||
/*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020;
|
||||
/*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024;
|
||||
/*0x3024 : 0x3184*/ void (*unk3028)(void);
|
||||
}; // size = 0x302C
|
||||
// Berries fall in predefined columns.
|
||||
// A total of 10 are available, though fewer will be used with < 5 players
|
||||
// The 11th column is a repeat of the 1st column wrapped around, so only
|
||||
// the values 0-9 are unique 'valid' columns
|
||||
#define NUM_BERRY_COLUMNS 11
|
||||
|
||||
struct DodrioSubstruct_318C
|
||||
struct DodrioGame_Berries
|
||||
{
|
||||
bool8 isShiny;
|
||||
u8 ids[NUM_BERRY_COLUMNS];
|
||||
u8 fallDist[NUM_BERRY_COLUMNS];
|
||||
};
|
||||
|
||||
struct DodrioSubstruct_31A0_14
|
||||
struct DodrioGame_PlayerCommData
|
||||
{
|
||||
u8 unk0[11];
|
||||
u8 unkB[11];
|
||||
u8 pickState;
|
||||
bool8 ALIGNED(4) ateBerry;
|
||||
bool8 ALIGNED(4) missedBerry;
|
||||
};
|
||||
|
||||
struct DodrioSubstruct_31A0_2C
|
||||
struct DodrioGame_Player
|
||||
{
|
||||
u8 unk0;
|
||||
u8 ALIGNED(4) unk4;
|
||||
u8 ALIGNED(4) unk8;
|
||||
};
|
||||
|
||||
struct DodrioSubstruct_31A0
|
||||
{
|
||||
u8 name[0x10];
|
||||
u32 unk10;
|
||||
struct DodrioSubstruct_31A0_14 unk14;
|
||||
struct DodrioSubstruct_31A0_2C unk2C;
|
||||
u8 filler_35[4];
|
||||
u8 name[16];
|
||||
bool32 receivedGameStatePacket; // Never read
|
||||
struct DodrioGame_Berries berries;
|
||||
struct DodrioGame_PlayerCommData comm;
|
||||
u32 unused;
|
||||
}; // size = 0x3C
|
||||
|
||||
struct DodrioSubstruct_3308
|
||||
{
|
||||
u8 unk0;
|
||||
u32 unk4;
|
||||
};
|
||||
|
||||
void StartDodrioBerryPicking(u16 species, MainCallback callback);
|
||||
|
||||
u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8);
|
||||
u32 sub_815AB04(u32 arg0, u8 *arg1);
|
||||
bool32 sub_815AB60(u32 a0);
|
||||
void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8);
|
||||
void sub_815A5BC(s32 a0);
|
||||
void sub_815AAD8(u8 a0);
|
||||
void sub_815AB3C(u32 a0);
|
||||
u8 sub_815A5E8(s32 a0);
|
||||
u32 IncrementWithLimit(u32, u32);
|
||||
void sub_8153A9C(void);
|
||||
void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3);
|
||||
void sub_8153BC0(u8 a0);
|
||||
void sub_8153BF8(u8 a0);
|
||||
void sub_8153D08(u8 playerCount);
|
||||
u8 sub_8155E8C(void);
|
||||
u8 sub_81533B4(void);
|
||||
void sub_8153DA8(u8 a0, u8 a1);
|
||||
void sub_8153D80(bool8 a0, u8 a1);
|
||||
void sub_8153FC8(u8 a0);
|
||||
void sub_8153DD8(void);
|
||||
void sub_8153E28(void);
|
||||
void sub_8153ED8(void);
|
||||
bool32 sub_8153F1C(void);
|
||||
void sub_81540DC(bool8 a0);
|
||||
void sub_8154128(void);
|
||||
void sub_815417C(void);
|
||||
void sub_8154274(void);
|
||||
void sub_81542EC(u8 a0, u8 a1);
|
||||
void sub_8154370(u8 a0, u8 a1);
|
||||
void sub_8154398(u16 a0, u8 a1);
|
||||
void sub_8154438(void);
|
||||
void sub_81544F0(void);
|
||||
void sub_8154540(void);
|
||||
void sub_8154578(void);
|
||||
void sub_81545BC(bool8 a0);
|
||||
void sub_81546C0(void);
|
||||
void sub_8154730(void);
|
||||
void sub_8154968(struct DodrioSubstruct_0160 * unk0160);
|
||||
void sub_81549D4(u8 a0);
|
||||
u8 *sub_81533C4(u8 id);
|
||||
u8 sub_81537AC(u8 id);
|
||||
void sub_81536A0(struct DodrioSubstruct_3308 *dst, u8 id);
|
||||
u32 sub_81534AC(void);
|
||||
u32 Min(u32 x, u32 y);
|
||||
u16 sub_8153404(u8 arg0, u8 arg1);
|
||||
u32 sub_81534F0(u8 arg0);
|
||||
u32 sub_81535B0(void);
|
||||
u16 sub_8153390(void);
|
||||
u8 sub_815372C(void);
|
||||
bool32 sub_8155E68(void);
|
||||
// dodrio_berry_picking.c
|
||||
void StartDodrioBerryPicking(u16 partyId, MainCallback exitCallback);
|
||||
void ShowDodrioBerryPickingRecords(void);
|
||||
void IsDodrioInParty(void);
|
||||
|
||||
// dodrio_berry_picking_comm.c
|
||||
void SendPacket_ReadyToStart(bool32 ready);
|
||||
bool8 RecvPacket_ReadyToStart(s32 playerId);
|
||||
void SendPacket_GameState(struct DodrioGame_Player *player,
|
||||
struct DodrioGame_PlayerCommData *player1,
|
||||
struct DodrioGame_PlayerCommData *player2,
|
||||
struct DodrioGame_PlayerCommData *player3,
|
||||
struct DodrioGame_PlayerCommData *player4,
|
||||
struct DodrioGame_PlayerCommData *player5,
|
||||
u8 numGraySquares,
|
||||
bool32 berriesFalling,
|
||||
bool32 allReadyToEnd);
|
||||
bool32 RecvPacket_GameState(u32 playerId,
|
||||
struct DodrioGame_Player *player,
|
||||
struct DodrioGame_PlayerCommData *player1,
|
||||
struct DodrioGame_PlayerCommData *player2,
|
||||
struct DodrioGame_PlayerCommData *player3,
|
||||
struct DodrioGame_PlayerCommData *player4,
|
||||
struct DodrioGame_PlayerCommData *player5,
|
||||
u8 *numGraySquares,
|
||||
bool32 *berriesFalling,
|
||||
bool32 *allReadyToEnd);
|
||||
void SendPacket_PickState(u8 pickState);
|
||||
bool32 RecvPacket_PickState(u32 playerId, u8 *pickState);
|
||||
void SendPacket_ReadyToEnd(bool32 readyToEnd);
|
||||
bool32 RecvPacket_ReadyToEnd(u32 playerId);
|
||||
|
||||
#endif //GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
@@ -292,10 +292,9 @@ SECTIONS {
|
||||
src/text_window.o(.text);
|
||||
src/quest_log_player.o(.text);
|
||||
src/dodrio_berry_picking.o(.text);
|
||||
src/dodrio_berry_picking_2.o(.text);
|
||||
src/battle_controller_pokedude.o(.text);
|
||||
src/quest_log_objects.o(.text);
|
||||
src/dodrio_berry_picking_3.o(.text);
|
||||
src/dodrio_berry_picking_comm.o(.text);
|
||||
src/teachy_tv.o(.text);
|
||||
src/ereader_helpers.o(.text);
|
||||
src/digit_obj_util.o(.text);
|
||||
@@ -590,7 +589,6 @@ SECTIONS {
|
||||
src/text_window_graphics.o(.rodata);
|
||||
src/quest_log_player.o(.rodata);
|
||||
src/dodrio_berry_picking.o(.rodata);
|
||||
src/dodrio_berry_picking_2.o(.rodata);
|
||||
src/battle_controller_pokedude.o(.rodata);
|
||||
src/teachy_tv.o(.rodata);
|
||||
src/digit_obj_util.o(.rodata);
|
||||
|
||||
@@ -1,247 +0,0 @@
|
||||
#ifndef GUARD_DATA_DODRIO_BERRY_PICKING_H
|
||||
#define GUARD_DATA_DODRIO_BERRY_PICKING_H
|
||||
|
||||
static const struct BgTemplate sUnknown_847565C[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 30,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 0,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 1,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 12,
|
||||
.screenSize = 1,
|
||||
.paletteMode = 0,
|
||||
.priority = 1,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 2,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 14,
|
||||
.screenSize = 1,
|
||||
.paletteMode = 0,
|
||||
.priority = 1,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 3,
|
||||
.charBaseIndex = 3,
|
||||
.mapBaseIndex = 31,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 2,
|
||||
.baseTile = 0
|
||||
},
|
||||
};
|
||||
|
||||
// Unknown unreferenced data, feel free to remove.
|
||||
static const u32 sUnused[] = {255, 0};
|
||||
|
||||
static const struct WindowTemplate sUnknown_8475674[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 28,
|
||||
.height = 3,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x13,
|
||||
},
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 6,
|
||||
.width = 28,
|
||||
.height = 13,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x67,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sUnknown_8475684 =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 6,
|
||||
.width = 28,
|
||||
.height = 7,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x67,
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sUnknown_847568C[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 8,
|
||||
.width = 19,
|
||||
.height = 3,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x13,
|
||||
},
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 22,
|
||||
.tilemapTop = 7,
|
||||
.width = 6,
|
||||
.height = 4,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x4C,
|
||||
}
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sUnknown_847569C =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 4,
|
||||
.tilemapTop = 6,
|
||||
.width = 22,
|
||||
.height = 5,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x13,
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sUnknown_84756A4 =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 5,
|
||||
.tilemapTop = 8,
|
||||
.width = 19,
|
||||
.height = 3,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x13,
|
||||
};
|
||||
|
||||
static const u8 sUnknown_8471F50[5][5][11] =
|
||||
{
|
||||
{
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
|
||||
},
|
||||
{
|
||||
{0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0},
|
||||
{0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0},
|
||||
},
|
||||
{
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0},
|
||||
{0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0},
|
||||
{0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0},
|
||||
},
|
||||
{
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0},
|
||||
{0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0},
|
||||
{0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0},
|
||||
{0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0},
|
||||
},
|
||||
{
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
|
||||
{2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2},
|
||||
{4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4},
|
||||
{6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6},
|
||||
{8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8},
|
||||
},
|
||||
};
|
||||
|
||||
static const u8 sUnknown_8472063[5][5][3] =
|
||||
{
|
||||
{
|
||||
{4, 5, 6},
|
||||
},
|
||||
{
|
||||
{3, 4, 5},
|
||||
{5, 6, 3},
|
||||
},
|
||||
{
|
||||
{4, 5, 6},
|
||||
{6, 7, 2},
|
||||
{2, 3, 4},
|
||||
},
|
||||
{
|
||||
{3, 4, 5},
|
||||
{5, 6, 7},
|
||||
{7, 8, 1},
|
||||
{1, 2, 3},
|
||||
},
|
||||
{
|
||||
{4, 5, 6},
|
||||
{6, 7, 8},
|
||||
{8, 9, 0},
|
||||
{0, 1, 2},
|
||||
{2, 3, 4},
|
||||
},
|
||||
};
|
||||
|
||||
static const u8 sUnknown_84720AE[5][5][3] =
|
||||
{
|
||||
{
|
||||
{1, 0, 1},
|
||||
},
|
||||
{
|
||||
{1, 0, 1},
|
||||
{0, 1, 0},
|
||||
},
|
||||
{
|
||||
{2, 0, 1},
|
||||
{0, 1, 2},
|
||||
{1, 2, 0},
|
||||
},
|
||||
{
|
||||
{3, 0, 1},
|
||||
{0, 1, 2},
|
||||
{1, 2, 3},
|
||||
{2, 3, 0},
|
||||
},
|
||||
{
|
||||
{4, 0, 1},
|
||||
{0, 1, 2},
|
||||
{1, 2, 3},
|
||||
{2, 3, 4},
|
||||
{3, 4, 0},
|
||||
},
|
||||
};
|
||||
|
||||
ALIGNED(4)
|
||||
static const u8 sUnknown_84720FC[5][11] =
|
||||
{
|
||||
{9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9},
|
||||
{9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9},
|
||||
{9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9},
|
||||
{9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9},
|
||||
{3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3},
|
||||
};
|
||||
|
||||
static const u8 sUnknown_8472133[5][5] =
|
||||
{
|
||||
{5},
|
||||
{4, 6},
|
||||
{3, 5, 7},
|
||||
{2, 4, 6, 8},
|
||||
{1, 3, 5, 6, 9},
|
||||
};
|
||||
|
||||
static const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal",
|
||||
"graphics/link_games/dodrioberry_bg2.gbapal");
|
||||
static const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal");
|
||||
static const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal");
|
||||
static const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal");
|
||||
static const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal");
|
||||
static const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz");
|
||||
static const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal");
|
||||
static const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz");
|
||||
static const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz");
|
||||
static const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz");
|
||||
static const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz");
|
||||
static const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz");
|
||||
static const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz");
|
||||
static const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz");
|
||||
static const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz");
|
||||
|
||||
#endif //GUARD_DATA_DODRIO_BERRY_PICKING_H
|
||||
@@ -1,241 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "dodrio_berry_picking.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
|
||||
void sub_815A5BC(s32 a0)
|
||||
{
|
||||
struct Padded_U8 data[2];
|
||||
data[0].value = 1;
|
||||
data[1].value = a0;
|
||||
Rfu_SendPacket(data);
|
||||
}
|
||||
|
||||
u8 sub_815A5E8(s32 a0)
|
||||
{
|
||||
u8 * r1;
|
||||
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
|
||||
return 0;
|
||||
r1 = (u8 *)&gRecvCmds[a0][1];
|
||||
if (r1[0] == 1)
|
||||
return r1[4];
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct UnkPacket2
|
||||
{
|
||||
u8 id;
|
||||
u8 unk1_0:4;
|
||||
u8 unk1_1:4;
|
||||
u16 unk2_0:4;
|
||||
u16 unk2_1:4;
|
||||
u16 unk3_0:4;
|
||||
u16 unk3_1:4;
|
||||
u16 unk4_0:4;
|
||||
u16 unk4_1:4;
|
||||
u16 unk5_0:4;
|
||||
u16 unk5_1:4;
|
||||
u16 unk6_0:2;
|
||||
u16 unk6_1:2;
|
||||
u16 unk6_2:2;
|
||||
u16 unk6_3:2;
|
||||
u16 unk7_0:2;
|
||||
u16 unk7_1:2;
|
||||
u16 unk7_2:2;
|
||||
u16 unk7_3:2;
|
||||
u8 unk8_0:2;
|
||||
u8 unk8_1:2;
|
||||
u8 unk8_2:2;
|
||||
u8 unk8_3:2;
|
||||
u8 unk9_0:2;
|
||||
u8 unk9_1:2;
|
||||
u8 unk9_2:2;
|
||||
u8 unk9_3:1;
|
||||
u8 unk9_4:1;
|
||||
u8 unkA_0:1;
|
||||
u8 unkA_1:1;
|
||||
u8 unkA_2:1;
|
||||
u8 unkA_3:5;
|
||||
u8 unkB_0:1;
|
||||
u8 unkB_1:1;
|
||||
u8 unkB_2:1;
|
||||
u8 unkB_3:1;
|
||||
u8 unkB_4:1;
|
||||
u8 unkB_5:1;
|
||||
u8 unkB_6:1;
|
||||
};
|
||||
|
||||
void sub_815A61C(struct DodrioSubstruct_31A0 * arg0, struct DodrioSubstruct_31A0_2C * arg1, struct DodrioSubstruct_31A0_2C * arg2, struct DodrioSubstruct_31A0_2C * arg3, struct DodrioSubstruct_31A0_2C * arg4, struct DodrioSubstruct_31A0_2C * arg5, u8 arg6, u32 arg7, u32 arg8)
|
||||
{
|
||||
struct UnkPacket2 packet;
|
||||
struct DodrioSubstruct_31A0_14 * ptr = &arg0->unk14;
|
||||
|
||||
packet.id = 2;
|
||||
packet.unk1_0 = ptr->unkB[0];
|
||||
packet.unk1_1 = ptr->unkB[1];
|
||||
packet.unk2_0 = ptr->unkB[2];
|
||||
packet.unk2_1 = ptr->unkB[3];
|
||||
packet.unk3_0 = ptr->unkB[4];
|
||||
packet.unk3_1 = ptr->unkB[5];
|
||||
packet.unk4_0 = ptr->unkB[6];
|
||||
packet.unk4_1 = ptr->unkB[7];
|
||||
packet.unk5_0 = ptr->unkB[8];
|
||||
packet.unk5_1 = ptr->unkB[9];
|
||||
|
||||
packet.unk6_0 = ptr->unk0[0];
|
||||
packet.unk6_1 = ptr->unk0[1];
|
||||
packet.unk6_2 = ptr->unk0[2];
|
||||
packet.unk6_3 = ptr->unk0[3];
|
||||
packet.unk7_0 = ptr->unk0[4];
|
||||
packet.unk7_1 = ptr->unk0[5];
|
||||
packet.unk7_2 = ptr->unk0[6];
|
||||
packet.unk7_3 = ptr->unk0[7];
|
||||
packet.unk8_0 = ptr->unk0[8];
|
||||
packet.unk8_1 = ptr->unk0[9];
|
||||
|
||||
packet.unk8_2 = arg1->unk0;
|
||||
packet.unk8_3 = arg2->unk0;
|
||||
packet.unk9_0 = arg3->unk0;
|
||||
packet.unk9_1 = arg4->unk0;
|
||||
packet.unk9_2 = arg5->unk0;
|
||||
|
||||
packet.unk9_3 = arg1->unk4;
|
||||
packet.unk9_4 = arg2->unk4;
|
||||
packet.unkA_0 = arg3->unk4;
|
||||
packet.unkA_1 = arg4->unk4;
|
||||
packet.unkA_2 = arg5->unk4;
|
||||
|
||||
packet.unkB_2 = arg1->unk8;
|
||||
packet.unkB_3 = arg2->unk8;
|
||||
packet.unkB_4 = arg3->unk8;
|
||||
packet.unkB_5 = arg4->unk8;
|
||||
packet.unkB_6 = arg5->unk8;
|
||||
|
||||
packet.unkA_3 = arg6;
|
||||
packet.unkB_1 = arg7;
|
||||
packet.unkB_0 = arg8;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 * arg0, struct DodrioSubstruct_31A0_2C * arg1, struct DodrioSubstruct_31A0_2C * arg2, struct DodrioSubstruct_31A0_2C * arg3, struct DodrioSubstruct_31A0_2C * arg4, struct DodrioSubstruct_31A0_2C * arg5, u8 *arg6, u32 *arg7, u32 *arg8)
|
||||
{
|
||||
struct UnkPacket2 * packet;
|
||||
struct DodrioSubstruct_31A0_14 * ptr = &arg0->unk14;
|
||||
|
||||
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
|
||||
return 0;
|
||||
|
||||
packet = (void *)&gRecvCmds[0][1];
|
||||
if (packet->id == 2)
|
||||
{
|
||||
ptr->unkB[0] = packet->unk1_0;
|
||||
ptr->unkB[1] = packet->unk1_1;
|
||||
ptr->unkB[2] = packet->unk2_0;
|
||||
ptr->unkB[3] = packet->unk2_1;
|
||||
ptr->unkB[4] = packet->unk3_0;
|
||||
ptr->unkB[5] = packet->unk3_1;
|
||||
ptr->unkB[6] = packet->unk4_0;
|
||||
ptr->unkB[7] = packet->unk4_1;
|
||||
ptr->unkB[8] = packet->unk5_0;
|
||||
ptr->unkB[9] = packet->unk5_1;
|
||||
ptr->unkB[10] = packet->unk1_0;
|
||||
|
||||
ptr->unk0[0] = packet->unk6_0;
|
||||
ptr->unk0[1] = packet->unk6_1;
|
||||
ptr->unk0[2] = packet->unk6_2;
|
||||
ptr->unk0[3] = packet->unk6_3;
|
||||
ptr->unk0[4] = packet->unk7_0;
|
||||
ptr->unk0[5] = packet->unk7_1;
|
||||
ptr->unk0[6] = packet->unk7_2;
|
||||
ptr->unk0[7] = packet->unk7_3;
|
||||
ptr->unk0[8] = packet->unk8_0;
|
||||
ptr->unk0[9] = packet->unk8_1;
|
||||
ptr->unk0[10] = packet->unk6_0;
|
||||
|
||||
arg1->unk0 = packet->unk8_2;
|
||||
arg1->unk4 = packet->unk9_3;
|
||||
arg1->unk8 = packet->unkB_2;
|
||||
|
||||
arg2->unk0 = packet->unk8_3;
|
||||
arg2->unk4 = packet->unk9_4;
|
||||
arg2->unk8 = packet->unkB_3;
|
||||
|
||||
arg3->unk0 = packet->unk9_0;
|
||||
arg3->unk4 = packet->unkA_0;
|
||||
arg3->unk8 = packet->unkB_4;
|
||||
|
||||
arg4->unk0 = packet->unk9_1;
|
||||
arg4->unk4 = packet->unkA_1;
|
||||
arg4->unk8 = packet->unkB_5;
|
||||
|
||||
arg5->unk0 = packet->unk9_2;
|
||||
arg5->unk4 = packet->unkA_2;
|
||||
arg5->unk8 = packet->unkB_6;
|
||||
|
||||
*arg6 = packet->unkA_3;
|
||||
*arg7 = packet->unkB_1;
|
||||
*arg8 = packet->unkB_0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct UnkPacket3
|
||||
{
|
||||
u8 id;
|
||||
u8 ALIGNED(4) unk4;
|
||||
};
|
||||
|
||||
void sub_815AAD8(u8 arg0)
|
||||
{
|
||||
struct UnkPacket3 packet;
|
||||
packet.id = 3;
|
||||
packet.unk4 = arg0;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
u32 sub_815AB04(u32 arg0, u8 *arg1)
|
||||
{
|
||||
struct UnkPacket3 * packet;
|
||||
|
||||
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
|
||||
return 0;
|
||||
|
||||
packet = (void *)&gRecvCmds[arg0][1];
|
||||
if (packet->id == 3)
|
||||
{
|
||||
*arg1 = packet->unk4;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct UnkPacket4
|
||||
{
|
||||
u8 id;
|
||||
u32 unk4;
|
||||
};
|
||||
|
||||
void sub_815AB3C(u32 arg0)
|
||||
{
|
||||
struct UnkPacket4 packet;
|
||||
packet.id = 4;
|
||||
packet.unk4 = arg0;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
u32 sub_815AB60(u32 arg0)
|
||||
{
|
||||
struct UnkPacket4 * packet;
|
||||
|
||||
if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
|
||||
return 0;
|
||||
|
||||
packet = (void *)&gRecvCmds[arg0][1];
|
||||
if (packet->id == 4)
|
||||
return packet->unk4;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,274 @@
|
||||
#include "global.h"
|
||||
#include "dodrio_berry_picking.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
|
||||
enum {
|
||||
PACKET_READY_START = 1,
|
||||
PACKET_GAME_STATE,
|
||||
PACKET_PICK_STATE,
|
||||
PACKET_READY_END,
|
||||
};
|
||||
|
||||
struct ReadyToStartPacket
|
||||
{
|
||||
u8 id;
|
||||
bool8 ALIGNED(4) ready;
|
||||
};
|
||||
|
||||
struct GameStatePacket
|
||||
{
|
||||
u8 id;
|
||||
u8 fallDist_Col0:4;
|
||||
u8 fallDist_Col1:4;
|
||||
u16 fallDist_Col2:4;
|
||||
u16 fallDist_Col3:4;
|
||||
u16 fallDist_Col4:4;
|
||||
u16 fallDist_Col5:4;
|
||||
u16 fallDist_Col6:4;
|
||||
u16 fallDist_Col7:4;
|
||||
u16 fallDist_Col8:4;
|
||||
u16 fallDist_Col9:4;
|
||||
u16 berryId_Col0:2;
|
||||
u16 berryId_Col1:2;
|
||||
u16 berryId_Col2:2;
|
||||
u16 berryId_Col3:2;
|
||||
u16 berryId_Col4:2;
|
||||
u16 berryId_Col5:2;
|
||||
u16 berryId_Col6:2;
|
||||
u16 berryId_Col7:2;
|
||||
u8 berryId_Col8:2;
|
||||
u8 berryId_Col9:2;
|
||||
u8 pickState_Player1:2;
|
||||
u8 pickState_Player2:2;
|
||||
u8 pickState_Player3:2;
|
||||
u8 pickState_Player4:2;
|
||||
u8 pickState_Player5:2;
|
||||
bool8 ateBerry_Player1:1;
|
||||
bool8 ateBerry_Player2:1;
|
||||
bool8 ateBerry_Player3:1;
|
||||
bool8 ateBerry_Player4:1;
|
||||
bool8 ateBerry_Player5:1;
|
||||
u8 numGraySquares:5;
|
||||
bool8 allReadyToEnd:1;
|
||||
bool8 berriesFalling:1;
|
||||
bool8 missedBerry_Player1:1;
|
||||
bool8 missedBerry_Player2:1;
|
||||
bool8 missedBerry_Player3:1;
|
||||
bool8 missedBerry_Player4:1;
|
||||
bool8 missedBerry_Player5:1;
|
||||
};
|
||||
|
||||
struct PickStatePacket
|
||||
{
|
||||
u8 id;
|
||||
u8 ALIGNED(4) pickState;
|
||||
};
|
||||
|
||||
struct ReadyToEndPacket
|
||||
{
|
||||
u8 id;
|
||||
bool32 ready;
|
||||
};
|
||||
|
||||
void SendPacket_ReadyToStart(bool32 ready)
|
||||
{
|
||||
struct ReadyToStartPacket packet;
|
||||
packet.id = PACKET_READY_START;
|
||||
packet.ready = ready;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
bool8 RecvPacket_ReadyToStart(s32 playerId)
|
||||
{
|
||||
struct ReadyToStartPacket *packet;
|
||||
|
||||
if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET)
|
||||
return FALSE;
|
||||
|
||||
packet = (void *)&gRecvCmds[playerId][1];
|
||||
if (packet->id == PACKET_READY_START)
|
||||
return packet->ready;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SendPacket_GameState(struct DodrioGame_Player *player,
|
||||
struct DodrioGame_PlayerCommData *player1,
|
||||
struct DodrioGame_PlayerCommData *player2,
|
||||
struct DodrioGame_PlayerCommData *player3,
|
||||
struct DodrioGame_PlayerCommData *player4,
|
||||
struct DodrioGame_PlayerCommData *player5,
|
||||
u8 numGraySquares,
|
||||
bool32 berriesFalling,
|
||||
bool32 allReadyToEnd)
|
||||
{
|
||||
struct GameStatePacket packet;
|
||||
struct DodrioGame_Berries *berries = &player->berries;
|
||||
|
||||
packet.id = PACKET_GAME_STATE;
|
||||
packet.fallDist_Col0 = berries->fallDist[0];
|
||||
packet.fallDist_Col1 = berries->fallDist[1];
|
||||
packet.fallDist_Col2 = berries->fallDist[2];
|
||||
packet.fallDist_Col3 = berries->fallDist[3];
|
||||
packet.fallDist_Col4 = berries->fallDist[4];
|
||||
packet.fallDist_Col5 = berries->fallDist[5];
|
||||
packet.fallDist_Col6 = berries->fallDist[6];
|
||||
packet.fallDist_Col7 = berries->fallDist[7];
|
||||
packet.fallDist_Col8 = berries->fallDist[8];
|
||||
packet.fallDist_Col9 = berries->fallDist[9];
|
||||
|
||||
packet.berryId_Col0 = berries->ids[0];
|
||||
packet.berryId_Col1 = berries->ids[1];
|
||||
packet.berryId_Col2 = berries->ids[2];
|
||||
packet.berryId_Col3 = berries->ids[3];
|
||||
packet.berryId_Col4 = berries->ids[4];
|
||||
packet.berryId_Col5 = berries->ids[5];
|
||||
packet.berryId_Col6 = berries->ids[6];
|
||||
packet.berryId_Col7 = berries->ids[7];
|
||||
packet.berryId_Col8 = berries->ids[8];
|
||||
packet.berryId_Col9 = berries->ids[9];
|
||||
|
||||
packet.pickState_Player1 = player1->pickState;
|
||||
packet.pickState_Player2 = player2->pickState;
|
||||
packet.pickState_Player3 = player3->pickState;
|
||||
packet.pickState_Player4 = player4->pickState;
|
||||
packet.pickState_Player5 = player5->pickState;
|
||||
|
||||
packet.ateBerry_Player1 = player1->ateBerry;
|
||||
packet.ateBerry_Player2 = player2->ateBerry;
|
||||
packet.ateBerry_Player3 = player3->ateBerry;
|
||||
packet.ateBerry_Player4 = player4->ateBerry;
|
||||
packet.ateBerry_Player5 = player5->ateBerry;
|
||||
|
||||
packet.missedBerry_Player1 = player1->missedBerry;
|
||||
packet.missedBerry_Player2 = player2->missedBerry;
|
||||
packet.missedBerry_Player3 = player3->missedBerry;
|
||||
packet.missedBerry_Player4 = player4->missedBerry;
|
||||
packet.missedBerry_Player5 = player5->missedBerry;
|
||||
|
||||
packet.numGraySquares = numGraySquares;
|
||||
packet.berriesFalling = berriesFalling;
|
||||
packet.allReadyToEnd = allReadyToEnd;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
bool32 RecvPacket_GameState(u32 playerId,
|
||||
struct DodrioGame_Player *player,
|
||||
struct DodrioGame_PlayerCommData *player1,
|
||||
struct DodrioGame_PlayerCommData *player2,
|
||||
struct DodrioGame_PlayerCommData *player3,
|
||||
struct DodrioGame_PlayerCommData *player4,
|
||||
struct DodrioGame_PlayerCommData *player5,
|
||||
u8 *numGraySquares,
|
||||
bool32 *berriesFalling,
|
||||
bool32 *allReadyToEnd)
|
||||
{
|
||||
struct GameStatePacket *packet;
|
||||
struct DodrioGame_Berries *berries = &player->berries;
|
||||
|
||||
if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET)
|
||||
return FALSE;
|
||||
|
||||
packet = (void *)&gRecvCmds[0][1];
|
||||
if (packet->id == PACKET_GAME_STATE)
|
||||
{
|
||||
berries->fallDist[0] = packet->fallDist_Col0;
|
||||
berries->fallDist[1] = packet->fallDist_Col1;
|
||||
berries->fallDist[2] = packet->fallDist_Col2;
|
||||
berries->fallDist[3] = packet->fallDist_Col3;
|
||||
berries->fallDist[4] = packet->fallDist_Col4;
|
||||
berries->fallDist[5] = packet->fallDist_Col5;
|
||||
berries->fallDist[6] = packet->fallDist_Col6;
|
||||
berries->fallDist[7] = packet->fallDist_Col7;
|
||||
berries->fallDist[8] = packet->fallDist_Col8;
|
||||
berries->fallDist[9] = packet->fallDist_Col9;
|
||||
berries->fallDist[10] = packet->fallDist_Col0;
|
||||
|
||||
berries->ids[0] = packet->berryId_Col0;
|
||||
berries->ids[1] = packet->berryId_Col1;
|
||||
berries->ids[2] = packet->berryId_Col2;
|
||||
berries->ids[3] = packet->berryId_Col3;
|
||||
berries->ids[4] = packet->berryId_Col4;
|
||||
berries->ids[5] = packet->berryId_Col5;
|
||||
berries->ids[6] = packet->berryId_Col6;
|
||||
berries->ids[7] = packet->berryId_Col7;
|
||||
berries->ids[8] = packet->berryId_Col8;
|
||||
berries->ids[9] = packet->berryId_Col9;
|
||||
berries->ids[10] = packet->berryId_Col0;
|
||||
|
||||
player1->pickState = packet->pickState_Player1;
|
||||
player1->ateBerry = packet->ateBerry_Player1;
|
||||
player1->missedBerry = packet->missedBerry_Player1;
|
||||
|
||||
player2->pickState = packet->pickState_Player2;
|
||||
player2->ateBerry = packet->ateBerry_Player2;
|
||||
player2->missedBerry = packet->missedBerry_Player2;
|
||||
|
||||
player3->pickState = packet->pickState_Player3;
|
||||
player3->ateBerry = packet->ateBerry_Player3;
|
||||
player3->missedBerry = packet->missedBerry_Player3;
|
||||
|
||||
player4->pickState = packet->pickState_Player4;
|
||||
player4->ateBerry = packet->ateBerry_Player4;
|
||||
player4->missedBerry = packet->missedBerry_Player4;
|
||||
|
||||
player5->pickState = packet->pickState_Player5;
|
||||
player5->ateBerry = packet->ateBerry_Player5;
|
||||
player5->missedBerry = packet->missedBerry_Player5;
|
||||
|
||||
*numGraySquares = packet->numGraySquares;
|
||||
*berriesFalling = packet->berriesFalling;
|
||||
*allReadyToEnd = packet->allReadyToEnd;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SendPacket_PickState(u8 pickState)
|
||||
{
|
||||
struct PickStatePacket packet;
|
||||
packet.id = PACKET_PICK_STATE;
|
||||
packet.pickState = pickState;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
bool32 RecvPacket_PickState(u32 playerId, u8 *pickState)
|
||||
{
|
||||
struct PickStatePacket * packet;
|
||||
|
||||
if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET)
|
||||
return FALSE;
|
||||
|
||||
packet = (void *)&gRecvCmds[playerId][1];
|
||||
if (packet->id == PACKET_PICK_STATE)
|
||||
{
|
||||
*pickState = packet->pickState;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SendPacket_ReadyToEnd(bool32 ready)
|
||||
{
|
||||
struct ReadyToEndPacket packet;
|
||||
packet.id = PACKET_READY_END;
|
||||
packet.ready = ready;
|
||||
Rfu_SendPacket(&packet);
|
||||
}
|
||||
|
||||
bool32 RecvPacket_ReadyToEnd(u32 playerId)
|
||||
{
|
||||
struct ReadyToEndPacket * packet;
|
||||
|
||||
if ((gRecvCmds[0][0] & RFUCMD_MASK) != RFUCMD_SEND_PACKET)
|
||||
return FALSE;
|
||||
|
||||
packet = (void *)&gRecvCmds[playerId][1];
|
||||
if (packet->id == PACKET_READY_END)
|
||||
return packet->ready;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -132,7 +132,6 @@
|
||||
.include "src/pokemon_jump.o"
|
||||
.include "src/berry_crush.o"
|
||||
.include "src/dodrio_berry_picking.o"
|
||||
.include "src/dodrio_berry_picking_2.o"
|
||||
.include "src/teachy_tv.o"
|
||||
.include "src/digit_obj_util.o"
|
||||
.include "src/trainer_tower.o"
|
||||
|
||||