mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 15:07:09 -05:00
sub_805E2C4 in C
This commit is contained in:
parent
f813788fe0
commit
da198b95ca
|
|
@ -34,10 +34,7 @@ gUnknown_8106AC8: @ 8106AC8
|
|||
|
||||
.global gUnknown_8106AE8
|
||||
gUnknown_8106AE8: @ 8106AE8
|
||||
.byte 0x00, 0x00, 0x01, 0x00
|
||||
|
||||
.global gUnknown_8106AEC
|
||||
gUnknown_8106AEC: @ 8106AEC
|
||||
.byte 0x00, 0x00, 0x01, 0x00
|
||||
.byte 0x12, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x13, 0x02, 0x00, 0x00
|
||||
.byte 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x01, 0x00, 0xff, 0xff, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff
|
||||
|
|
|
|||
|
|
@ -22,72 +22,72 @@ typedef struct SpriteOAM
|
|||
|
||||
#define SPRITEOAM_MAX_Y 0xFF
|
||||
#define SPRITEOAM_SHIFT_Y 0
|
||||
#define SPRITEOAM_MASK_Y (SPRITEOAM_MAX_Y << SPRITEOAM_SHIFT_Y)
|
||||
#define SPRITEOAM_MASK_Y (SPRITEOAM_MAX_Y << SPRITEOAM_SHIFT_Y) // ~ 0xFF00
|
||||
|
||||
#define SPRITEOAM_MAX_AFFINEMODE1 1
|
||||
#define SPRITEOAM_SHIFT_AFFINEMODE1 8
|
||||
#define SPRITEOAM_MASK_AFFINEMODE1 (SPRITEOAM_MAX_AFFINEMODE1 << SPRITEOAM_SHIFT_AFFINEMODE1)
|
||||
#define SPRITEOAM_MASK_AFFINEMODE1 (SPRITEOAM_MAX_AFFINEMODE1 << SPRITEOAM_SHIFT_AFFINEMODE1) // ~ 0xFEFF
|
||||
|
||||
#define SPRITEOAM_MAX_AFFINEMODE2 1
|
||||
#define SPRITEOAM_SHIFT_AFFINEMODE2 9
|
||||
#define SPRITEOAM_MASK_AFFINEMODE2 (SPRITEOAM_MAX_AFFINEMODE2 << SPRITEOAM_SHIFT_AFFINEMODE2)
|
||||
#define SPRITEOAM_MASK_AFFINEMODE2 (SPRITEOAM_MAX_AFFINEMODE2 << SPRITEOAM_SHIFT_AFFINEMODE2) // ~ 0xFDFF
|
||||
|
||||
#define SPRITEOAM_MAX_OBJMODE 3
|
||||
#define SPRITEOAM_SHIFT_OBJMODE 10
|
||||
#define SPRITEOAM_MASK_OBJMODE (SPRITEOAM_MAX_OBJMODE << SPRITEOAM_SHIFT_OBJMODE)
|
||||
#define SPRITEOAM_MASK_OBJMODE (SPRITEOAM_MAX_OBJMODE << SPRITEOAM_SHIFT_OBJMODE) // ~ 0xF3FF
|
||||
|
||||
#define SPRITEOAM_MAX_MOSAIC 1
|
||||
#define SPRITEOAM_SHIFT_MOSAIC 12
|
||||
#define SPRITEOAM_MASK_MOSAIC (SPRITEOAM_MAX_MOSAIC << SPRITEOAM_SHIFT_MOSAIC)
|
||||
#define SPRITEOAM_MASK_MOSAIC (SPRITEOAM_MAX_MOSAIC << SPRITEOAM_SHIFT_MOSAIC) // ~ 0xEFFF
|
||||
|
||||
#define SPRITEOAM_MAX_BPP 1
|
||||
#define SPRITEOAM_SHIFT_BPP 13
|
||||
#define SPRITEOAM_MASK_BPP (SPRITEOAM_MAX_BPP << SPRITEOAM_SHIFT_BPP)
|
||||
#define SPRITEOAM_MASK_BPP (SPRITEOAM_MAX_BPP << SPRITEOAM_SHIFT_BPP) // ~ 0xDFFF
|
||||
|
||||
#define SPRITEOAM_MAX_SHAPE 3
|
||||
#define SPRITEOAM_SHIFT_SHAPE 14
|
||||
#define SPRITEOAM_MASK_SHAPE (SPRITEOAM_MAX_SHAPE << SPRITEOAM_SHIFT_SHAPE)
|
||||
#define SPRITEOAM_MASK_SHAPE (SPRITEOAM_MAX_SHAPE << SPRITEOAM_SHIFT_SHAPE) // ~ 0x3FFF
|
||||
|
||||
// attrib2
|
||||
|
||||
#define SPRITEOAM_MAX_X 0x1FF
|
||||
#define SPRITEOAM_SHIFT_X 0
|
||||
#define SPRITEOAM_MASK_X (SPRITEOAM_MAX_X << SPRITEOAM_SHIFT_X)
|
||||
#define SPRITEOAM_MASK_X (SPRITEOAM_MAX_X << SPRITEOAM_SHIFT_X) // ~ 0xFE00
|
||||
|
||||
#define SPRITEOAM_MAX_MATRIXNUM 31
|
||||
#define SPRITEOAM_SHIFT_MATRIXNUM 9
|
||||
#define SPRITEOAM_MASK_MATRIXNUM (SPRITEOAM_MAX_MATRIXNUM << SPRITEOAM_SHIFT_MATRIXNUM)
|
||||
#define SPRITEOAM_MASK_MATRIXNUM (SPRITEOAM_MAX_MATRIXNUM << SPRITEOAM_SHIFT_MATRIXNUM) // ~ 0xC1FF
|
||||
|
||||
#define SPRITEOAM_MAX_SIZE 3
|
||||
#define SPRITEOAM_SHIFT_SIZE 14
|
||||
#define SPRITEOAM_MASK_SIZE (SPRITEOAM_MAX_SIZE << SPRITEOAM_SHIFT_SIZE)
|
||||
#define SPRITEOAM_MASK_SIZE (SPRITEOAM_MAX_SIZE << SPRITEOAM_SHIFT_SIZE) // ~ 0x3FFF
|
||||
|
||||
// attrib3
|
||||
|
||||
#define SPRITEOAM_MAX_TILENUM 0x3FF
|
||||
#define SPRITEOAM_SHIFT_TILENUM 0
|
||||
#define SPRITEOAM_MASK_TILENUM (SPRITEOAM_MAX_TILENUM << SPRITEOAM_SHIFT_TILENUM)
|
||||
#define SPRITEOAM_MASK_TILENUM (SPRITEOAM_MAX_TILENUM << SPRITEOAM_SHIFT_TILENUM) // ~ 0xFC00
|
||||
|
||||
#define SPRITEOAM_MAX_PRIORITY 3
|
||||
#define SPRITEOAM_SHIFT_PRIORITY 10
|
||||
#define SPRITEOAM_MASK_PRIORITY (SPRITEOAM_MAX_PRIORITY << SPRITEOAM_SHIFT_PRIORITY)
|
||||
#define SPRITEOAM_MASK_PRIORITY (SPRITEOAM_MAX_PRIORITY << SPRITEOAM_SHIFT_PRIORITY) // ~ 0xF3FF
|
||||
|
||||
#define SPRITEOAM_MAX_PALETTENUM 15
|
||||
#define SPRITEOAM_SHIFT_PALETTENUM 12
|
||||
#define SPRITEOAM_MASK_PALETTENUM (SPRITEOAM_MAX_PALETTENUM << SPRITEOAM_SHIFT_PALETTENUM)
|
||||
#define SPRITEOAM_MASK_PALETTENUM (SPRITEOAM_MAX_PALETTENUM << SPRITEOAM_SHIFT_PALETTENUM) // ~ 0xFFF
|
||||
|
||||
// unk6
|
||||
|
||||
#define SPRITEOAM_MAX_UNK6_0 1
|
||||
#define SPRITEOAM_SHIFT_UNK6_0 0
|
||||
#define SPRITEOAM_MASK_UNK6_0 (SPRITEOAM_MAX_UNK6_0 << SPRITEOAM_SHIFT_UNK6_0)
|
||||
#define SPRITEOAM_MASK_UNK6_0 (SPRITEOAM_MAX_UNK6_0 << SPRITEOAM_SHIFT_UNK6_0) // ~ 0xFFFE
|
||||
|
||||
#define SPRITEOAM_MAX_UNK6_1 1
|
||||
#define SPRITEOAM_SHIFT_UNK6_1 1
|
||||
#define SPRITEOAM_MASK_UNK6_1 (SPRITEOAM_MAX_UNK6_1 << SPRITEOAM_SHIFT_UNK6_1)
|
||||
#define SPRITEOAM_MASK_UNK6_1 (SPRITEOAM_MAX_UNK6_1 << SPRITEOAM_SHIFT_UNK6_1) // ~ 0xFFFD
|
||||
|
||||
#define SPRITEOAM_MAX_UNK6_4 0xFFF
|
||||
#define SPRITEOAM_SHIFT_UNK6_4 4
|
||||
#define SPRITEOAM_MASK_UNK6_4 (SPRITEOAM_MAX_UNK6_4 << SPRITEOAM_SHIFT_UNK6_4)
|
||||
#define SPRITEOAM_MASK_UNK6_4 (SPRITEOAM_MAX_UNK6_4 << SPRITEOAM_SHIFT_UNK6_4) // ~ 0xF
|
||||
|
||||
#endif // GUARD_SPRITE_OAM_H
|
||||
#endif // GUARD_SPRITE_OAM_H
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ void sub_8044C10(u8 a0);
|
|||
u16 GetLeaderActionId(void);
|
||||
void sub_80978C8(s16 a0);
|
||||
void sub_8044C50(u16 a0);
|
||||
void sub_805E2C4(Entity *leader);
|
||||
static void TryCreateModeArrows(Entity *leader);
|
||||
bool8 sub_8094C48(void);
|
||||
void sub_8052210(u8 a0);
|
||||
bool8 sub_805EC4C(Entity *a0, u8 a1);
|
||||
|
|
@ -129,12 +129,12 @@ extern u8 sub_8062F90(Entity *, u32, u32, u32, u32);
|
|||
|
||||
extern Entity *gLeaderPointer;
|
||||
|
||||
extern u8 gUnknown_202F22D;
|
||||
extern u8 gUnknown_202F22C;
|
||||
extern u8 sInRotateMode;
|
||||
extern u8 sInDiagonalMode;
|
||||
extern u8 gUnknown_202F230;
|
||||
extern u8 gUnknown_202F231;
|
||||
extern u8 gUnknown_202EE00;
|
||||
extern u16 gUnknown_202F22E;
|
||||
extern s16 gUnknown_202F22E;
|
||||
|
||||
extern const u8 *gUnknown_80F8A84;
|
||||
extern const u8 *gUnknown_80F8A6C;
|
||||
|
|
@ -157,7 +157,7 @@ extern const u8 *gFieldItemMenuGroundTextPtr;
|
|||
extern const u8 *gUnknown_80FE940;
|
||||
extern const u8 *gWhichTextPtr1;
|
||||
|
||||
void sub_805D8C8(void)
|
||||
void DungeonHandlePlayerInput(void)
|
||||
{
|
||||
struct UnkMenuBitsStruct r6;
|
||||
bool8 triggers[5]; // Always FALSE, if one of these is TRUE - they can open various menus or cause an item throw. Most likely used for debugging/testing.
|
||||
|
|
@ -204,8 +204,8 @@ void sub_805D8C8(void)
|
|||
}
|
||||
sub_805E804();
|
||||
}
|
||||
gUnknown_202F22D = 0;
|
||||
gUnknown_202F22C = 0;
|
||||
sInRotateMode = FALSE;
|
||||
sInDiagonalMode = FALSE;
|
||||
if (gDungeon->unk5C0 >= 0) {
|
||||
r6.a0_8 = 1;
|
||||
r6.a0_16 = 0;
|
||||
|
|
@ -223,10 +223,9 @@ void sub_805D8C8(void)
|
|||
gUnknown_202F231 = 0;
|
||||
|
||||
while (r6.a0_8 == 0) {
|
||||
u32 buttonsR1, buttonsR2;
|
||||
u32 dpadDiagonal, dpadSimple;
|
||||
bool32 highlightTiles, tryItemThrow;
|
||||
bool32 bPress, rPress, unkBool; // Always FALSE, might've been used as debug variables.
|
||||
u32 r4;
|
||||
s32 directionNew;
|
||||
|
||||
gUnknown_202F22E++;
|
||||
|
|
@ -241,7 +240,7 @@ void sub_805D8C8(void)
|
|||
sub_8075680(0);
|
||||
}
|
||||
|
||||
sub_805E2C4(leader);
|
||||
TryCreateModeArrows(leader);
|
||||
unkBool = FALSE;
|
||||
{
|
||||
s32 i;
|
||||
|
|
@ -273,56 +272,55 @@ void sub_805D8C8(void)
|
|||
gDungeon->unk673 = 1;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
if (gRealInputs.held & L_BUTTON) {
|
||||
bool8 canUseMove;
|
||||
s32 i, j;
|
||||
else if (gRealInputs.held & L_BUTTON) {
|
||||
bool32 canUseMove;
|
||||
s32 i, j;
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
if (MoveFlagExists(&leaderInfo->moves.moves[i]) && MoveFlagSet(&leaderInfo->moves.moves[i])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == MAX_MON_MOVES) {
|
||||
SendMessage(leader, gUnknown_80F8A28);
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
if (MoveFlagExists(&leaderInfo->moves.moves[i]) && MoveFlagSet(&leaderInfo->moves.moves[i])) {
|
||||
break;
|
||||
}
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++) {
|
||||
if (MoveFlagExists(&leaderInfo->moves.moves[j])) {
|
||||
if (leaderInfo->moves.moves[j].PP != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j == MAX_MON_MOVES) {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x17);
|
||||
break;
|
||||
}
|
||||
|
||||
canUseMove = FALSE;
|
||||
for (j = i; j < MAX_MON_MOVES; j++) {
|
||||
if (j != i && !(leaderInfo->moves.moves[j].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)) {
|
||||
break;
|
||||
}
|
||||
if (leaderInfo->moves.moves[j].PP != 0) {
|
||||
canUseMove = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!canUseMove) {
|
||||
SendMessage(leader, gUnknown_80F8A4C);
|
||||
}
|
||||
else {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x14);
|
||||
leaderInfo->action.unk4[0].actionUseIndex = GetTeamMemberEntityIndex(leader);
|
||||
leaderInfo->action.unk4[1].actionUseIndex = i;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!sub_805EF60(leader, leaderInfo)) {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x32);
|
||||
if (i == MAX_MON_MOVES) {
|
||||
SendMessage(leader, gUnknown_80F8A28);
|
||||
break;
|
||||
}
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++) {
|
||||
if (MoveFlagExists(&leaderInfo->moves.moves[j])) {
|
||||
if (leaderInfo->moves.moves[j].PP != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j == MAX_MON_MOVES) {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x17);
|
||||
break;
|
||||
}
|
||||
|
||||
canUseMove = FALSE;
|
||||
for (j = i; j < MAX_MON_MOVES; j++) {
|
||||
if (j != i && !(leaderInfo->moves.moves[j].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)) {
|
||||
break;
|
||||
}
|
||||
if (leaderInfo->moves.moves[j].PP != 0) {
|
||||
canUseMove = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!canUseMove) {
|
||||
SendMessage(leader, gUnknown_80F8A4C);
|
||||
}
|
||||
else {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x14);
|
||||
leaderInfo->action.unk4[0].actionUseIndex = GetTeamMemberEntityIndex(leader);
|
||||
leaderInfo->action.unk4[1].actionUseIndex = i;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else {
|
||||
if (!sub_805EF60(leader, leaderInfo)) {
|
||||
SetMonsterActionFields(&leaderInfo->action, 0x32);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -355,28 +353,26 @@ void sub_805D8C8(void)
|
|||
break;
|
||||
}
|
||||
else if (triggers[4]) { // Opens regular menu
|
||||
|
||||
r6.a0_8 = 1;
|
||||
r6.a0_16 = 0;
|
||||
r6.a0_24 = 1;
|
||||
break;
|
||||
}
|
||||
else if (frames > 0x707) { // Opens simple menu when idling
|
||||
|
||||
r6.a0_8 = 1;
|
||||
r6.a0_16 = 1;
|
||||
r6.a0_24 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
r4 = gGameOptionsRef->unk9;
|
||||
if (r4 == 0) {
|
||||
if ((gRealInputs.pressed & B_BUTTON || (!unkBool && bPress)) && unkPtr->unk1821A != 0) {
|
||||
sub_804AA60();
|
||||
gUnknown_202F22D = r4;
|
||||
ResetRepeatTimers();
|
||||
ResetUnusedInputStruct();
|
||||
}
|
||||
if (gGameOptionsRef->unk9 == 0
|
||||
&& (gRealInputs.pressed & B_BUTTON || (!unkBool && bPress))
|
||||
&& unkPtr->unk1821A != 0)
|
||||
{
|
||||
sub_804AA60();
|
||||
sInRotateMode = FALSE;
|
||||
ResetRepeatTimers();
|
||||
ResetUnusedInputStruct();
|
||||
}
|
||||
|
||||
if (gRealInputs.held & L_BUTTON) {
|
||||
|
|
@ -386,15 +382,16 @@ void sub_805D8C8(void)
|
|||
ResetUnusedInputStruct();
|
||||
}
|
||||
}
|
||||
|
||||
tryItemThrow = FALSE;
|
||||
if (gRealInputs.held & R_BUTTON) {
|
||||
if (gUnknown_202F22C == 0) {
|
||||
if (!sInDiagonalMode) {
|
||||
gUnknown_202F22E = 0;
|
||||
}
|
||||
gUnknown_202F22C = 1;
|
||||
sInDiagonalMode = TRUE;
|
||||
}
|
||||
else {
|
||||
gUnknown_202F22C = 0;
|
||||
sInDiagonalMode = FALSE;
|
||||
}
|
||||
|
||||
highlightTiles = FALSE;
|
||||
|
|
@ -405,7 +402,7 @@ void sub_805D8C8(void)
|
|||
}
|
||||
if (highlightTiles) {
|
||||
sub_805E738(leader);
|
||||
gUnknown_202F22D = 1;
|
||||
sInRotateMode = TRUE;
|
||||
unkPtr->unk1821B = leaderInfo->action.direction;
|
||||
unkPtr->unk1821C = 0xFF;
|
||||
ResetRepeatTimers();
|
||||
|
|
@ -453,7 +450,7 @@ void sub_805D8C8(void)
|
|||
break;
|
||||
|
||||
if (gRealInputs.pressed & A_BUTTON) {
|
||||
gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0;
|
||||
gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0; // Flip
|
||||
sub_8040A84();
|
||||
}
|
||||
}
|
||||
|
|
@ -466,39 +463,39 @@ void sub_805D8C8(void)
|
|||
sub_803E46C(0x2F);
|
||||
}
|
||||
|
||||
if (gDungeon->unk66D != 0 && gUnknown_202F22C == 0) {
|
||||
buttonsR1 = buttonsR2 = gRealInputs.pressed;
|
||||
if (gDungeon->unk66D != 0 && !sInDiagonalMode) {
|
||||
dpadDiagonal = dpadSimple = gRealInputs.pressed;
|
||||
}
|
||||
else {
|
||||
buttonsR1 = gRealInputs.held;
|
||||
buttonsR2 = (unkPtr->unk1821A == 0) ? gRealInputs.held : gRealInputs.pressed;
|
||||
dpadDiagonal = gRealInputs.held;
|
||||
dpadSimple = (unkPtr->unk1821A == 0) ? gRealInputs.held : gRealInputs.pressed;
|
||||
}
|
||||
|
||||
buttonsR1 &= DPAD_ANY;
|
||||
buttonsR2 &= DPAD_ANY;
|
||||
dpadDiagonal &= DPAD_ANY;
|
||||
dpadSimple &= DPAD_ANY;
|
||||
directionNew = -1;
|
||||
if (buttonsR1 == (DPAD_UP | DPAD_RIGHT))
|
||||
if (dpadDiagonal == (DPAD_UP | DPAD_RIGHT))
|
||||
directionNew = DIRECTION_NORTHEAST;
|
||||
if (buttonsR1 == (DPAD_UP | DPAD_LEFT))
|
||||
if (dpadDiagonal == (DPAD_UP | DPAD_LEFT))
|
||||
directionNew = DIRECTION_NORTHWEST;
|
||||
if (buttonsR1 == (DPAD_DOWN | DPAD_RIGHT))
|
||||
if (dpadDiagonal == (DPAD_DOWN | DPAD_RIGHT))
|
||||
directionNew = DIRECTION_SOUTHEAST;
|
||||
if (buttonsR1 == (DPAD_DOWN | DPAD_LEFT))
|
||||
if (dpadDiagonal == (DPAD_DOWN | DPAD_LEFT))
|
||||
directionNew = DIRECTION_SOUTHWEST;
|
||||
|
||||
if (buttonsR2 == DPAD_UP)
|
||||
if (dpadSimple == DPAD_UP)
|
||||
directionNew = DIRECTION_NORTH;
|
||||
if (buttonsR2 == DPAD_DOWN)
|
||||
if (dpadSimple == DPAD_DOWN)
|
||||
directionNew = DIRECTION_SOUTH;
|
||||
if (buttonsR2 == DPAD_RIGHT)
|
||||
if (dpadSimple == DPAD_RIGHT)
|
||||
directionNew = DIRECTION_EAST;
|
||||
if (buttonsR2 == DPAD_LEFT)
|
||||
if (dpadSimple == DPAD_LEFT)
|
||||
directionNew = DIRECTION_WEST;
|
||||
|
||||
if (directionNew >= 0 && (gUnknown_202F22C == 0 || (directionNew & 1))) {
|
||||
if (directionNew >= 0 && (!sInDiagonalMode || (directionNew & 1))) {
|
||||
bool32 directionChanged = (leaderInfo->action.direction != directionNew);
|
||||
leaderInfo->action.direction = directionNew & DIRECTION_MASK;
|
||||
if (gUnknown_202F22D != 0) {
|
||||
if (sInRotateMode) {
|
||||
unkPtr->unk1821B = directionNew;
|
||||
sub_806CDD4(leader, sub_806CEBC(leader), directionNew);
|
||||
}
|
||||
|
|
@ -589,7 +586,7 @@ void sub_805D8C8(void)
|
|||
ShowFieldMenu((r6.a0_16 == 0) ? 1 : 0, r6.a0_24);
|
||||
ResetRepeatTimers();
|
||||
ResetUnusedInputStruct();
|
||||
gUnknown_202F22D = 0;
|
||||
sInRotateMode = FALSE;
|
||||
unkPtr->unk1821A = 0;
|
||||
sub_804AA60();
|
||||
if (sub_8044B28())
|
||||
|
|
@ -612,19 +609,195 @@ void sub_805D8C8(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: leaving this for now as it uses weird sprite OAM logic
|
||||
void sub_805E2C4(Entity *leader)
|
||||
struct UnkStruct_8106AC8
|
||||
{
|
||||
unkDungeonGlobal_unk181E8_sub *unkPtr;
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
};
|
||||
|
||||
unkPtr = &gDungeon->unk181e8;
|
||||
if (gUnknown_202F22C == 0) {
|
||||
extern const struct UnkStruct_8106AC8 gUnknown_8106AC8[];
|
||||
|
||||
struct UnkStruct_8106AE8
|
||||
{
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
u32 unk4;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
};
|
||||
|
||||
extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[];
|
||||
|
||||
#ifdef NONMATCHING
|
||||
// Not even close in terms of matching, but functionally equivalent. Sprite OAM memes break the stack here.
|
||||
// Creates arrow sprites which are used when in rotate or diagonal modes.
|
||||
static void TryCreateModeArrows(Entity *leader)
|
||||
{
|
||||
UnkDungeonGlobal_unk181E8_sub *unkPtr = &gDungeon->unk181e8;
|
||||
|
||||
if (sInDiagonalMode) {
|
||||
s32 i;
|
||||
SpriteOAM sprite;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
u32 objMode, matrixNum, tileNum, prio, xSprite, unk6;
|
||||
s32 x, xMul, x2;
|
||||
s32 unk1, unk1Mul, unk2;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
|
||||
|
||||
objMode = 1 << SPRITEOAM_SHIFT_OBJMODE;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
|
||||
sprite.attrib1 |= objMode;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_BPP;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
|
||||
|
||||
if (gUnknown_8106AC8[i].unk4 != 0)
|
||||
matrixNum = 8;
|
||||
else
|
||||
matrixNum = 0;
|
||||
|
||||
if (gUnknown_8106AC8[i].unk5)
|
||||
matrixNum += 16;
|
||||
|
||||
matrixNum &= SPRITEOAM_MAX_MATRIXNUM;
|
||||
matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM;
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
|
||||
sprite.attrib2 |= matrixNum;
|
||||
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_SHAPE;
|
||||
|
||||
tileNum = 0x213 << SPRITEOAM_SHIFT_TILENUM;
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
|
||||
sprite.attrib3 |= tileNum;
|
||||
|
||||
prio = 2 << SPRITEOAM_SHIFT_PRIORITY;
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
|
||||
sprite.attrib3 |= prio;
|
||||
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
|
||||
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_0;
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_1;
|
||||
|
||||
x = gUnknown_8106AC8[i].unk0;
|
||||
xMul = x * 10;
|
||||
x2 = (gUnknown_202F22E / 2) & 7;
|
||||
xSprite = xMul + 116 + (x2 * x);
|
||||
xSprite &= SPRITEOAM_MAX_X;
|
||||
xSprite <<= SPRITEOAM_SHIFT_X;
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_X;
|
||||
sprite.attrib2 |= xSprite;
|
||||
|
||||
unk1 = gUnknown_8106AC8[i].unk2;
|
||||
unk1Mul = unk1 * 10;
|
||||
unk2 = (gUnknown_202F22E / 2) & 7;
|
||||
unk6 = 82 + unk1Mul + (unk2 * unk1);
|
||||
unk6 &= SPRITEOAM_MAX_UNK6_4;
|
||||
unk6 <<= SPRITEOAM_SHIFT_UNK6_4;
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
|
||||
sprite.unk6 |= unk6;
|
||||
|
||||
AddSprite(&sprite, 0x100, NULL, NULL);
|
||||
}
|
||||
}
|
||||
else if (unkPtr->unk1821A) {
|
||||
s32 i, to;
|
||||
SpriteOAM sprite;
|
||||
s32 var_2C = unkPtr->unk1821B;
|
||||
s32 x, y;
|
||||
s32 x1, x2, xMul;
|
||||
s32 y1, y2, yMul;
|
||||
|
||||
if (var_2C < 8u) {
|
||||
to = (gUnknown_202F231 != 0 && gUnknown_202F230 != 0) ? 3 : 1;
|
||||
|
||||
x1 = gUnknown_8106AE8[var_2C].unk0;
|
||||
xMul = x1 * 10;
|
||||
x2 = (gUnknown_202F22E / 2) & 7;
|
||||
x = xMul + 116 + (x1 * x2);
|
||||
|
||||
y1 = gUnknown_8106AE8[var_2C].unk2;
|
||||
yMul = y1 * 10;
|
||||
y2 = (gUnknown_202F22E / 2) & 7;
|
||||
y = 82 + yMul + (y2 * y1);
|
||||
for (i = 0; i < to; i++) {
|
||||
u32 objMode, tileNum, prio, matrixNum, xSprite, ySprite;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
|
||||
|
||||
objMode = 1 << SPRITEOAM_SHIFT_OBJMODE;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
|
||||
sprite.attrib1 |= objMode;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_BPP;
|
||||
|
||||
sprite.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
|
||||
|
||||
if (gUnknown_8106AE8[var_2C].unk8 != 0)
|
||||
matrixNum = 8;
|
||||
else
|
||||
matrixNum = 0;
|
||||
|
||||
if (gUnknown_8106AE8[var_2C].unk9)
|
||||
matrixNum += 16;
|
||||
|
||||
matrixNum &= SPRITEOAM_MAX_MATRIXNUM;
|
||||
matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM;
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
|
||||
sprite.attrib2 |= matrixNum;
|
||||
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_SIZE;
|
||||
|
||||
tileNum = gUnknown_8106AE8[var_2C].unk4;
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
|
||||
sprite.attrib3 |= tileNum;
|
||||
|
||||
prio = 2 << SPRITEOAM_SHIFT_PRIORITY;
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
|
||||
sprite.attrib3 |= prio;
|
||||
|
||||
sprite.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
|
||||
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_0;
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_1;
|
||||
|
||||
xSprite = x;
|
||||
xSprite &= SPRITEOAM_MAX_X;
|
||||
xSprite <<= SPRITEOAM_SHIFT_X;
|
||||
sprite.attrib2 &= ~SPRITEOAM_MASK_X;
|
||||
sprite.attrib2 |= xSprite;
|
||||
|
||||
ySprite = y;
|
||||
ySprite &= SPRITEOAM_MAX_UNK6_4;
|
||||
ySprite <<= SPRITEOAM_SHIFT_UNK6_4;
|
||||
sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
|
||||
sprite.unk6 |= ySprite;
|
||||
|
||||
AddSprite(&sprite, 0x100, NULL, NULL);
|
||||
x += gUnknown_8106AE8[var_2C].unk0 * 4;
|
||||
y += gUnknown_8106AE8[var_2C].unk2 * 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sInRotateMode && unkPtr->unk1821C != unkPtr->unk1821B) {
|
||||
unkPtr->unk1821C = unkPtr->unk1821B;
|
||||
sub_804A728(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
NAKED void sub_805E2C4(Entity *leader)
|
||||
#else
|
||||
NAKED static void TryCreateModeArrows(Entity *leader)
|
||||
{
|
||||
asm_unified( "\n"
|
||||
" push {r4-r7,lr}\n"
|
||||
|
|
@ -853,7 +1026,7 @@ NAKED void sub_805E2C4(Entity *leader)
|
|||
" .align 2, 0\n"
|
||||
"_0805E47C: .4byte gDungeon\n"
|
||||
"_0805E480: .4byte 0x000181e8\n"
|
||||
"_0805E484: .4byte gUnknown_202F22C\n"
|
||||
"_0805E484: .4byte sInDiagonalMode\n"
|
||||
"_0805E488: .4byte 0xffff0000\n"
|
||||
"_0805E48C: .4byte 0x0000feff\n"
|
||||
"_0805E490: .4byte 0x0000fdff\n"
|
||||
|
|
@ -1163,16 +1336,18 @@ NAKED void sub_805E2C4(Entity *leader)
|
|||
"_0805E710: .4byte 0x0000dfff\n"
|
||||
"_0805E714: .4byte 0x00003fff\n"
|
||||
"_0805E718: .4byte 0x0000c1ff\n"
|
||||
"_0805E71C: .4byte gUnknown_8106AEC\n"
|
||||
"_0805E71C: .4byte gUnknown_8106AE8 + 4\n"
|
||||
"_0805E720: .4byte 0x000003ff\n"
|
||||
"_0805E724: .4byte 0x00000fff\n"
|
||||
"_0805E728: .4byte 0x0000fffe\n"
|
||||
"_0805E72C: .4byte 0x0000fffd\n"
|
||||
"_0805E730: .4byte 0x000001ff\n"
|
||||
"_0805E734: .4byte gUnknown_202F22D"
|
||||
"_0805E734: .4byte sInRotateMode"
|
||||
);
|
||||
}
|
||||
|
||||
#endif // NONMATCHING
|
||||
|
||||
void sub_805E738(Entity *a0)
|
||||
{
|
||||
Tile *tile;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ extern void sub_8086AC0(void);
|
|||
extern void sub_8043ED0(u32);
|
||||
extern void sub_8071DA4(Entity *);
|
||||
extern void TriggerWeatherAbilities(void);
|
||||
extern void sub_805D8C8(void);
|
||||
extern void DungeonHandlePlayerInput(void);
|
||||
extern void sub_805F02C(void);
|
||||
|
||||
static void sub_8044454(void);
|
||||
|
|
@ -140,7 +140,7 @@ static bool8 xxx_dungeon_80442D0(bool8 param_1)
|
|||
if (sub_8044B28()) return FALSE;
|
||||
sub_8071DA4(entity);
|
||||
gDungeon->noActionInProgress = TRUE;
|
||||
sub_805D8C8();
|
||||
DungeonHandlePlayerInput();
|
||||
gDungeon->noActionInProgress = FALSE;
|
||||
if (sub_8044B28()) break;
|
||||
sub_8072CF4(entity);
|
||||
|
|
|
|||
|
|
@ -433,9 +433,9 @@ gUnknown_202F224: /* 202F224 (sub_8040DA0 - sub_805B264) */
|
|||
gUnknown_202F228: /* 202F228 (sub_8055FA0 - sub_805B618) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_202F22C: /* 202F22C (sub_805D8C8 - sub_805E2C4) */
|
||||
sInDiagonalMode: /* 202F22C (sub_805D8C8 - sub_805E2C4) */
|
||||
.space 0x1
|
||||
gUnknown_202F22D: /* 202F22D (sub_805D8C8 - sub_805E2C4) */
|
||||
sInRotateMode: /* 202F22D (sub_805D8C8 - sub_805E2C4) */
|
||||
.space 0x1
|
||||
gUnknown_202F22E: /* 202F22E (sub_805D8C8 - sub_805E2C4) */
|
||||
.space 0x2
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user