Merge pull request #353 from PokeCodec/MatchFirered
Match (Most of) Firered
This commit is contained in:
+38
-38
@@ -122,10 +122,10 @@ CartIdent:
|
||||
.align 2, 0
|
||||
.global start_vector
|
||||
start_vector:
|
||||
mov r0, PSR_IRQ_MODE
|
||||
mov r0, #PSR_IRQ_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_irq
|
||||
mov r0, PSR_SYS_MODE
|
||||
mov r0, #PSR_SYS_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_usr
|
||||
ldr r1, =INTR_VECTOR
|
||||
@@ -146,76 +146,76 @@ sp_irq: .word IWRAM_END - 0x60
|
||||
.align 2, 0
|
||||
.global intr_main
|
||||
intr_main:
|
||||
mov r3, REG_BASE
|
||||
add r3, r3, 0x200
|
||||
ldr r2, [r3, OFFSET_REG_IE - 0x200]
|
||||
ldrh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
mov r3, #REG_BASE
|
||||
add r3, r3, #OFFSET_REG_IE
|
||||
ldr r2, [r3]
|
||||
ldrh r1, [r3, #REG_IME - REG_IE]
|
||||
mrs r0, spsr
|
||||
stmdb sp!, {r0-r3,lr}
|
||||
mov r0, 0
|
||||
strh r0, [r3, OFFSET_REG_IME - 0x200]
|
||||
and r1, r2, r2, lsr 16
|
||||
mov r12, 0
|
||||
ands r0, r1, INTR_FLAG_VCOUNT
|
||||
mov r0, #0
|
||||
strh r0, [r3, #REG_IME - REG_IE]
|
||||
and r1, r2, r2, lsr #16
|
||||
mov r12, #0
|
||||
ands r0, r1, #INTR_FLAG_VCOUNT
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
mov r0, 0x1
|
||||
strh r0, [r3, OFFSET_REG_IME - 0x200]
|
||||
ands r0, r1, INTR_FLAG_SERIAL
|
||||
strh r0, [r3, #REG_IME - REG_IE]
|
||||
ands r0, r1, #INTR_FLAG_SERIAL
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER3
|
||||
ands r0, r1, #INTR_FLAG_TIMER3
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_HBLANK
|
||||
ands r0, r1, #INTR_FLAG_HBLANK
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_VBLANK
|
||||
ands r0, r1, #INTR_FLAG_VBLANK
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER0
|
||||
ands r0, r1, #INTR_FLAG_TIMER0
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER1
|
||||
ands r0, r1, #INTR_FLAG_TIMER1
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER2
|
||||
ands r0, r1, #INTR_FLAG_TIMER2
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA0
|
||||
ands r0, r1, #INTR_FLAG_DMA0
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA1
|
||||
ands r0, r1, #INTR_FLAG_DMA1
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA2
|
||||
ands r0, r1, #INTR_FLAG_DMA2
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA3
|
||||
ands r0, r1, #INTR_FLAG_DMA3
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_KEYPAD
|
||||
ands r0, r1, #INTR_FLAG_KEYPAD
|
||||
bne jump_intr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_GAMEPAK
|
||||
strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200]
|
||||
ands r0, r1, #INTR_FLAG_GAMEPAK
|
||||
strbne r0, [r3, #REG_SOUNDCNT_X - REG_IE]
|
||||
loop:
|
||||
bne loop @ spin
|
||||
jump_intr:
|
||||
strh r0, [r3, OFFSET_REG_IF - 0x200]
|
||||
strh r0, [r3, #REG_IF - REG_IE]
|
||||
bic r2, r2, r0
|
||||
ldr r0, =gSTWIStatus
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0xA]
|
||||
mov r1, INTR_FLAG_TIMER0
|
||||
mov r0, r1, lsl r0
|
||||
orr r0, r0, INTR_FLAG_GAMEPAK
|
||||
orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
|
||||
mov r1, #INTR_FLAG_TIMER0
|
||||
lsl r0, r1, r0
|
||||
orr r0, r0, #INTR_FLAG_GAMEPAK
|
||||
orr r1, r0, #INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
|
||||
and r1, r1, r2
|
||||
strh r1, [r3, OFFSET_REG_IE - 0x200]
|
||||
strh r1, [r3, #0]
|
||||
mrs r3, cpsr
|
||||
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, PSR_SYS_MODE
|
||||
bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, #PSR_SYS_MODE
|
||||
msr cpsr_cf, r3
|
||||
ldr r1, =gIntrTable
|
||||
add r1, r1, r12
|
||||
@@ -226,12 +226,12 @@ jump_intr:
|
||||
intr_return:
|
||||
ldmia sp!, {lr}
|
||||
mrs r3, cpsr
|
||||
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, PSR_I_BIT | PSR_IRQ_MODE
|
||||
bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, #PSR_I_BIT | PSR_IRQ_MODE
|
||||
msr cpsr_cf, r3
|
||||
ldmia sp!, {r0-r3,lr}
|
||||
strh r2, [r3, OFFSET_REG_IE - 0x200]
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r2, [r3, #0]
|
||||
strh r1, [r3, #REG_IME - REG_IE]
|
||||
msr spsr_cf, r0
|
||||
bx lr
|
||||
|
||||
|
||||
+14
-14
@@ -7,62 +7,62 @@
|
||||
|
||||
thumb_func_start ArcTan2
|
||||
ArcTan2: @ 81E3B58
|
||||
swi 0xA
|
||||
svc 0xA
|
||||
bx lr
|
||||
thumb_func_end ArcTan2
|
||||
|
||||
thumb_func_start BgAffineSet
|
||||
BgAffineSet: @ 81E3B5C
|
||||
swi 0xE
|
||||
svc 0xE
|
||||
bx lr
|
||||
thumb_func_end BgAffineSet
|
||||
|
||||
thumb_func_start CpuFastSet
|
||||
CpuFastSet: @ 81E3B60
|
||||
swi 0xC
|
||||
svc 0xC
|
||||
bx lr
|
||||
thumb_func_end CpuFastSet
|
||||
|
||||
thumb_func_start CpuSet
|
||||
CpuSet: @ 81E3B64
|
||||
swi 0xB
|
||||
svc 0xB
|
||||
bx lr
|
||||
thumb_func_end CpuSet
|
||||
|
||||
thumb_func_start Div
|
||||
Div: @ 81E3B68
|
||||
swi 0x6
|
||||
svc 0x6
|
||||
bx lr
|
||||
thumb_func_end Div
|
||||
|
||||
thumb_func_start LZ77UnCompVram
|
||||
LZ77UnCompVram: @ 81E3B6C
|
||||
swi 0x12
|
||||
svc 0x12
|
||||
bx lr
|
||||
thumb_func_end LZ77UnCompVram
|
||||
|
||||
thumb_func_start LZ77UnCompWram
|
||||
LZ77UnCompWram: @ 81E3B70
|
||||
swi 0x11
|
||||
svc 0x11
|
||||
bx lr
|
||||
thumb_func_end LZ77UnCompWram
|
||||
|
||||
thumb_func_start MultiBoot
|
||||
MultiBoot: @ 81E3B74
|
||||
movs r1, 0x1
|
||||
swi 0x25
|
||||
svc 0x25
|
||||
bx lr
|
||||
thumb_func_end MultiBoot
|
||||
|
||||
thumb_func_start ObjAffineSet
|
||||
ObjAffineSet: @ 81E3B7C
|
||||
swi 0xF
|
||||
svc 0xF
|
||||
bx lr
|
||||
thumb_func_end ObjAffineSet
|
||||
|
||||
thumb_func_start RegisterRamReset
|
||||
RegisterRamReset: @ 81E3B80
|
||||
swi 0x1
|
||||
svc 0x1
|
||||
bx lr
|
||||
thumb_func_end RegisterRamReset
|
||||
|
||||
@@ -73,21 +73,21 @@ SoftReset: @ 81E3B84
|
||||
strb r2, [r3]
|
||||
ldr r1, =0x03007f00 @ User Stack
|
||||
mov sp, r1
|
||||
swi 0x1
|
||||
swi 0
|
||||
svc 0x1
|
||||
svc 0
|
||||
.pool
|
||||
thumb_func_end SoftReset
|
||||
|
||||
thumb_func_start Sqrt
|
||||
Sqrt: @ 81E3B9C
|
||||
swi 0x8
|
||||
svc 0x8
|
||||
bx lr
|
||||
thumb_func_end Sqrt
|
||||
|
||||
thumb_func_start VBlankIntrWait
|
||||
VBlankIntrWait: @ 81E3BA0
|
||||
movs r2, 0
|
||||
swi 0x5
|
||||
svc 0x5
|
||||
bx lr
|
||||
thumb_func_end VBlankIntrWait
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ _1a0:
|
||||
strh r1, [r0, 0xa] @ SIOMLT_SEND
|
||||
ldr r0, =_data_2f0
|
||||
ldr r1, =gCode
|
||||
swi 0x11 << 16
|
||||
svc 0x11 << 16
|
||||
ldr lr, =gCode
|
||||
bx lr
|
||||
.pool
|
||||
|
||||
@@ -7,39 +7,39 @@
|
||||
|
||||
thumb_func_start CpuSet
|
||||
CpuSet: @ 81E3B64
|
||||
swi 0xB
|
||||
svc 0xB
|
||||
bx lr
|
||||
thumb_func_end CpuSet
|
||||
|
||||
thumb_func_start Div
|
||||
Div: @ 81E3B68
|
||||
swi 0x6
|
||||
svc 0x6
|
||||
bx lr
|
||||
thumb_func_end Div
|
||||
|
||||
thumb_func_start Mod
|
||||
Mod:
|
||||
swi 0x6
|
||||
svc 0x6
|
||||
adds r0, r1, 0
|
||||
bx lr
|
||||
thumb_func_end Mod
|
||||
|
||||
thumb_func_start LZ77UnCompVram
|
||||
LZ77UnCompVram: @ 81E3B6C
|
||||
swi 0x12
|
||||
svc 0x12
|
||||
bx lr
|
||||
thumb_func_end LZ77UnCompVram
|
||||
|
||||
thumb_func_start RegisterRamReset
|
||||
RegisterRamReset: @ 81E3B80
|
||||
swi 0x1
|
||||
svc 0x1
|
||||
bx lr
|
||||
thumb_func_end RegisterRamReset
|
||||
|
||||
thumb_func_start VBlankIntrWait
|
||||
VBlankIntrWait: @ 81E3BA0
|
||||
movs r2, 0
|
||||
swi 0x5
|
||||
svc 0x5
|
||||
bx lr
|
||||
thumb_func_end VBlankIntrWait
|
||||
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ enum
|
||||
struct ListMenuItem
|
||||
{
|
||||
const u8 *label;
|
||||
s32 index;
|
||||
u32 index;
|
||||
};
|
||||
|
||||
struct ListMenu;
|
||||
@@ -72,7 +72,7 @@ struct ListMenuWindowRect
|
||||
|
||||
extern struct ListMenuTemplate gMultiuseListMenuTemplate;
|
||||
|
||||
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
|
||||
u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
|
||||
u8 ListMenuInit(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
|
||||
u8 ListMenuInitInRect(const struct ListMenuTemplate *listMenuTemplate, const struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove);
|
||||
s32 ListMenu_ProcessInput(u8 listTaskId);
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ struct UnkStruct_203B044
|
||||
|
||||
extern u8 gQuestLogState;
|
||||
extern u8 gQuestLogPlaybackState;
|
||||
extern const u16 gUnknown_84566A8[];
|
||||
extern const u8 gUnknown_84566A8[];
|
||||
extern struct FieldInput gQuestLogFieldInput;
|
||||
extern struct UnkStruct_203B044 gUnknown_203B044;
|
||||
extern u16 *gUnknown_203AE04;
|
||||
|
||||
+17
-259
@@ -5155,20 +5155,19 @@ static void atk5C_hitanimation(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void atk5D_getmoneyreward(void)
|
||||
{
|
||||
u32 i = 0;
|
||||
u32 lastMonLevel = 0;
|
||||
u32 moneyReward = 0;
|
||||
u32 value;
|
||||
u32 moneyReward;
|
||||
u8 lastMonLevel = 0;
|
||||
|
||||
const struct TrainerMonItemCustomMoves *party4; //This needs to be out here
|
||||
|
||||
// The whole function is using wrong registers.
|
||||
if (gBattleOutcome == B_OUTCOME_WON)
|
||||
{
|
||||
if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
|
||||
{
|
||||
moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier;
|
||||
moneyReward = gBattleResources->secretBase->party.levels[0] * 20 * gBattleStruct->moneyMultiplier;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5176,45 +5175,40 @@ static void atk5D_getmoneyreward(void)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
const struct TrainerMonNoItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemDefaultMoves;
|
||||
const struct TrainerMonNoItemDefaultMoves *party1 = gTrainers[gTrainerBattleOpponent_A].party.NoItemDefaultMoves;
|
||||
|
||||
lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
lastMonLevel = party1[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET:
|
||||
{
|
||||
const struct TrainerMonNoItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemCustomMoves;
|
||||
const struct TrainerMonNoItemCustomMoves *party2 = gTrainers[gTrainerBattleOpponent_A].party.NoItemCustomMoves;
|
||||
|
||||
lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
lastMonLevel = party2[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case F_TRAINER_PARTY_HELD_ITEM:
|
||||
{
|
||||
const struct TrainerMonItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemDefaultMoves;
|
||||
const struct TrainerMonItemDefaultMoves *party3 = gTrainers[gTrainerBattleOpponent_A].party.ItemDefaultMoves;
|
||||
|
||||
lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
lastMonLevel = party3[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
|
||||
case (F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM):
|
||||
{
|
||||
const struct TrainerMonItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemCustomMoves;
|
||||
party4 = gTrainers[gTrainerBattleOpponent_A].party.ItemCustomMoves;
|
||||
|
||||
lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
lastMonLevel = party4[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
}
|
||||
for (; gTrainerMoneyTable[i].classId != 0xFF; ++i)
|
||||
for (; gTrainerMoneyTable[i].classId != 0xFF; i++)
|
||||
{
|
||||
if (gTrainerMoneyTable[i].classId == gTrainers[gTrainerBattleOpponent_A].trainerClass)
|
||||
break;
|
||||
}
|
||||
moneyReward = 4 * lastMonLevel;
|
||||
moneyReward *= gBattleStruct->moneyMultiplier;
|
||||
value = gTrainerMoneyTable[i].value;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
moneyReward *= (value << 1);
|
||||
else
|
||||
moneyReward *= value;
|
||||
party4 = gTrainers[gTrainerBattleOpponent_A].party.ItemCustomMoves; // Needed to Match. Has no effect.
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * (gBattleTypeFlags & BATTLE_TYPE_DOUBLE ? 2 : 1) * gTrainerMoneyTable[i].value;
|
||||
}
|
||||
AddMoney(&gSaveBlock1Ptr->money, moneyReward);
|
||||
}
|
||||
@@ -5228,242 +5222,6 @@ static void atk5D_getmoneyreward(void)
|
||||
else
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void atk5D_getmoneyreward(void)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
movs r6, 0\n\
|
||||
movs r5, 0\n\
|
||||
ldr r0, _080258F0 @ =gBattleOutcome\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0x1\n\
|
||||
beq _080258C0\n\
|
||||
b _080259FA\n\
|
||||
_080258C0:\n\
|
||||
ldr r0, _080258F4 @ =gTrainerBattleOpponent_A\n\
|
||||
ldrh r2, [r0]\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 3\n\
|
||||
cmp r2, r1\n\
|
||||
bne _08025904\n\
|
||||
ldr r0, _080258F8 @ =gBattleResources\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldr r0, [r0]\n\
|
||||
adds r0, 0x94\n\
|
||||
ldrb r2, [r0]\n\
|
||||
ldr r0, _080258FC @ =gBattleStruct\n\
|
||||
ldr r0, [r0]\n\
|
||||
adds r0, 0x4A\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
adds r4, r2, 0\n\
|
||||
muls r4, r0\n\
|
||||
ldr r0, _08025900 @ =gSaveBlock1Ptr\n\
|
||||
mov r8, r0\n\
|
||||
b _080259E8\n\
|
||||
.align 2, 0\n\
|
||||
_080258F0: .4byte gBattleOutcome\n\
|
||||
_080258F4: .4byte gTrainerBattleOpponent_A\n\
|
||||
_080258F8: .4byte gBattleResources\n\
|
||||
_080258FC: .4byte gBattleStruct\n\
|
||||
_08025900: .4byte gSaveBlock1Ptr\n\
|
||||
_08025904:\n\
|
||||
ldr r2, _08025920 @ =gTrainers\n\
|
||||
ldrh r1, [r0]\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
lsls r3, r0, 3\n\
|
||||
adds r4, r3, r2\n\
|
||||
ldrb r1, [r4]\n\
|
||||
cmp r1, 0x1\n\
|
||||
beq _0802595A\n\
|
||||
cmp r1, 0x1\n\
|
||||
bgt _08025924\n\
|
||||
cmp r1, 0\n\
|
||||
beq _0802592E\n\
|
||||
b _08025970\n\
|
||||
.align 2, 0\n\
|
||||
_08025920: .4byte gTrainers\n\
|
||||
_08025924:\n\
|
||||
cmp r1, 0x2\n\
|
||||
beq _08025944\n\
|
||||
cmp r1, 0x3\n\
|
||||
beq _0802595A\n\
|
||||
b _08025970\n\
|
||||
_0802592E:\n\
|
||||
adds r0, r2, 0\n\
|
||||
adds r0, 0x24\n\
|
||||
adds r0, r3, r0\n\
|
||||
ldr r1, [r0]\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x20\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
subs r0, 0x8\n\
|
||||
b _0802596E\n\
|
||||
_08025944:\n\
|
||||
adds r0, r2, 0\n\
|
||||
adds r0, 0x24\n\
|
||||
adds r0, r3, r0\n\
|
||||
ldr r1, [r0]\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x20\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
subs r0, 0x8\n\
|
||||
b _0802596E\n\
|
||||
_0802595A:\n\
|
||||
adds r0, r2, 0\n\
|
||||
adds r0, 0x24\n\
|
||||
adds r0, r3, r0\n\
|
||||
ldr r1, [r0]\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x20\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r1\n\
|
||||
subs r0, 0x10\n\
|
||||
_0802596E:\n\
|
||||
ldrb r5, [r0, 0x2]\n\
|
||||
_08025970:\n\
|
||||
ldr r0, _080259CC @ =gTrainerMoneyTable\n\
|
||||
lsls r1, r6, 2\n\
|
||||
adds r3, r1, r0\n\
|
||||
ldrb r1, [r3]\n\
|
||||
ldr r7, _080259D0 @ =gBattleStruct\n\
|
||||
mov r12, r0\n\
|
||||
lsls r4, r5, 2\n\
|
||||
ldr r5, _080259D4 @ =gBattleTypeFlags\n\
|
||||
ldr r0, _080259D8 @ =gSaveBlock1Ptr\n\
|
||||
mov r8, r0\n\
|
||||
cmp r1, 0xFF\n\
|
||||
beq _080259AA\n\
|
||||
ldr r2, _080259DC @ =gTrainers\n\
|
||||
ldr r0, _080259E0 @ =gTrainerBattleOpponent_A\n\
|
||||
ldrh r1, [r0]\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r2\n\
|
||||
ldrb r2, [r0, 0x1]\n\
|
||||
adds r1, r3, 0\n\
|
||||
_0802599A:\n\
|
||||
ldrb r0, [r1]\n\
|
||||
cmp r0, r2\n\
|
||||
beq _080259AA\n\
|
||||
adds r1, 0x4\n\
|
||||
adds r6, 0x1\n\
|
||||
ldrb r0, [r1]\n\
|
||||
cmp r0, 0xFF\n\
|
||||
bne _0802599A\n\
|
||||
_080259AA:\n\
|
||||
ldr r0, [r7]\n\
|
||||
adds r0, 0x4A\n\
|
||||
ldrb r0, [r0]\n\
|
||||
adds r3, r4, 0\n\
|
||||
muls r3, r0\n\
|
||||
lsls r0, r6, 2\n\
|
||||
add r0, r12\n\
|
||||
ldrb r2, [r0, 0x1]\n\
|
||||
ldr r0, [r5]\n\
|
||||
movs r1, 0x1\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080259E4\n\
|
||||
lsls r0, r2, 1\n\
|
||||
adds r4, r3, 0\n\
|
||||
muls r4, r0\n\
|
||||
b _080259E8\n\
|
||||
.align 2, 0\n\
|
||||
_080259CC: .4byte gTrainerMoneyTable\n\
|
||||
_080259D0: .4byte gBattleStruct\n\
|
||||
_080259D4: .4byte gBattleTypeFlags\n\
|
||||
_080259D8: .4byte gSaveBlock1Ptr\n\
|
||||
_080259DC: .4byte gTrainers\n\
|
||||
_080259E0: .4byte gTrainerBattleOpponent_A\n\
|
||||
_080259E4:\n\
|
||||
adds r4, r3, 0\n\
|
||||
muls r4, r2\n\
|
||||
_080259E8:\n\
|
||||
mov r1, r8\n\
|
||||
ldr r0, [r1]\n\
|
||||
movs r1, 0xA4\n\
|
||||
lsls r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
adds r1, r4, 0\n\
|
||||
bl AddMoney\n\
|
||||
b _08025A00\n\
|
||||
_080259FA:\n\
|
||||
bl ComputeWhiteOutMoneyLoss\n\
|
||||
adds r4, r0, 0\n\
|
||||
_08025A00:\n\
|
||||
ldr r1, _08025A40 @ =gBattleTextBuff1\n\
|
||||
movs r0, 0xFD\n\
|
||||
strb r0, [r1]\n\
|
||||
movs r0, 0x1\n\
|
||||
strb r0, [r1, 0x1]\n\
|
||||
movs r0, 0x4\n\
|
||||
strb r0, [r1, 0x2]\n\
|
||||
movs r0, 0x5\n\
|
||||
strb r0, [r1, 0x3]\n\
|
||||
strb r4, [r1, 0x4]\n\
|
||||
movs r0, 0xFF\n\
|
||||
lsls r0, 8\n\
|
||||
ands r0, r4\n\
|
||||
lsrs r0, 8\n\
|
||||
strb r0, [r1, 0x5]\n\
|
||||
movs r0, 0xFF\n\
|
||||
lsls r0, 16\n\
|
||||
ands r0, r4\n\
|
||||
lsrs r0, 16\n\
|
||||
strb r0, [r1, 0x6]\n\
|
||||
lsrs r0, r4, 24\n\
|
||||
strb r0, [r1, 0x7]\n\
|
||||
movs r0, 0xFF\n\
|
||||
strb r0, [r1, 0x8]\n\
|
||||
cmp r4, 0\n\
|
||||
beq _08025A48\n\
|
||||
ldr r1, _08025A44 @ =gBattlescriptCurrInstr\n\
|
||||
ldr r0, [r1]\n\
|
||||
adds r0, 0x5\n\
|
||||
str r0, [r1]\n\
|
||||
b _08025A62\n\
|
||||
.align 2, 0\n\
|
||||
_08025A40: .4byte gBattleTextBuff1\n\
|
||||
_08025A44: .4byte gBattlescriptCurrInstr\n\
|
||||
_08025A48:\n\
|
||||
ldr r3, _08025A6C @ =gBattlescriptCurrInstr\n\
|
||||
ldr r2, [r3]\n\
|
||||
ldrb r1, [r2, 0x1]\n\
|
||||
ldrb r0, [r2, 0x2]\n\
|
||||
lsls r0, 8\n\
|
||||
orrs r1, r0\n\
|
||||
ldrb r0, [r2, 0x3]\n\
|
||||
lsls r0, 16\n\
|
||||
orrs r1, r0\n\
|
||||
ldrb r0, [r2, 0x4]\n\
|
||||
lsls r0, 24\n\
|
||||
orrs r1, r0\n\
|
||||
str r1, [r3]\n\
|
||||
_08025A62:\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
_08025A6C: .4byte gBattlescriptCurrInstr\n\
|
||||
");
|
||||
}
|
||||
#endif
|
||||
|
||||
static void atk5E(void)
|
||||
{
|
||||
|
||||
+11
-104
@@ -5,7 +5,7 @@
|
||||
|
||||
static EWRAM_DATA u8 sHelpMessageWindowId = 0;
|
||||
|
||||
const u16 gUnknown_84566A8[] = INCBIN_U16("graphics/unknown/unknown_84566a8.bin");
|
||||
const u8 gUnknown_84566A8[] = INCBIN_U8("graphics/unknown/unknown_84566a8.bin");
|
||||
|
||||
static const struct WindowTemplate sHelpMessageWindowTemplate = {
|
||||
.bg = 0,
|
||||
@@ -47,15 +47,19 @@ void DestroyHelpMessageWindow(u8 a0)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void sub_8112F18(u8 windowId)
|
||||
{
|
||||
u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
|
||||
u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
|
||||
u8 *buffer = Alloc(32 * width * height);
|
||||
const u8* ptr = gUnknown_84566A8;
|
||||
u8* buffer;
|
||||
u8 i, j;
|
||||
u8 width, height;
|
||||
u8 k;
|
||||
|
||||
width = (u8)GetWindowAttribute(windowId, WINDOW_WIDTH);
|
||||
height = (u8)GetWindowAttribute(windowId, WINDOW_HEIGHT);
|
||||
|
||||
buffer = (u8 *)Alloc(32 * width * height);
|
||||
|
||||
if (buffer != NULL)
|
||||
{
|
||||
for (i = 0; i < height; i++)
|
||||
@@ -69,8 +73,8 @@ void sub_8112F18(u8 windowId)
|
||||
else
|
||||
k = 5;
|
||||
CpuCopy32(
|
||||
(void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction
|
||||
buffer + 32 * (i * width + j),
|
||||
&ptr[k * 0x20],
|
||||
&buffer[(i * width + j) * 0x20],
|
||||
32
|
||||
);
|
||||
}
|
||||
@@ -79,103 +83,6 @@ void sub_8112F18(u8 windowId)
|
||||
Free(buffer);
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_8112F18(u8 windowId)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tmov r6, r9\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tpush {r5-r7}\n"
|
||||
"\tsub sp, 0x8\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tmov r10, r0\n"
|
||||
"\tmovs r1, 0x3\n"
|
||||
"\tbl GetWindowAttribute\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r6, r0, 24\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tbl GetWindowAttribute\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r7, r0, 24\n"
|
||||
"\tlsls r0, r7, 5\n"
|
||||
"\tmuls r0, r6\n"
|
||||
"\tbl Alloc\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08112FB8\n"
|
||||
"\tmovs r5, 0\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tmuls r0, r7\n"
|
||||
"\tstr r0, [sp]\n"
|
||||
"\tcmp r5, r7\n"
|
||||
"\tbcs _08112FA2\n"
|
||||
"_08112F5A:\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tadds r1, r5, 0x1\n"
|
||||
"\tmov r9, r1\n"
|
||||
"\tcmp r4, r6\n"
|
||||
"\tbcs _08112F98\n"
|
||||
"\tsubs r3, r7, 0x1\n"
|
||||
"_08112F66:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tcmp r5, 0\n"
|
||||
"\tbeq _08112F74\n"
|
||||
"\tmovs r0, 0x5\n"
|
||||
"\tcmp r5, r3\n"
|
||||
"\tbne _08112F74\n"
|
||||
"\tmovs r0, 0xE\n"
|
||||
"_08112F74:\n"
|
||||
"\tlsls r0, 5\n"
|
||||
"\tldr r1, _08112FC8 @ =gUnknown_84566A8\n"
|
||||
"\tadds r0, r1, r0\n"
|
||||
"\tadds r1, r5, 0\n"
|
||||
"\tmuls r1, r6\n"
|
||||
"\tadds r1, r4\n"
|
||||
"\tlsls r1, 5\n"
|
||||
"\tadd r1, r8\n"
|
||||
"\tldr r2, _08112FCC @ =0x04000008\n"
|
||||
"\tstr r3, [sp, 0x4]\n"
|
||||
"\tbl CpuSet\n"
|
||||
"\tadds r0, r4, 0x1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tldr r3, [sp, 0x4]\n"
|
||||
"\tcmp r4, r6\n"
|
||||
"\tbcc _08112F66\n"
|
||||
"_08112F98:\n"
|
||||
"\tmov r1, r9\n"
|
||||
"\tlsls r0, r1, 24\n"
|
||||
"\tlsrs r5, r0, 24\n"
|
||||
"\tcmp r5, r7\n"
|
||||
"\tbcc _08112F5A\n"
|
||||
"_08112FA2:\n"
|
||||
"\tldr r0, [sp]\n"
|
||||
"\tlsls r2, r0, 21\n"
|
||||
"\tlsrs r2, 16\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tbl CopyToWindowPixelBuffer\n"
|
||||
"\tmov r0, r8\n"
|
||||
"\tbl Free\n"
|
||||
"_08112FB8:\n"
|
||||
"\tadd sp, 0x8\n"
|
||||
"\tpop {r3-r5}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tmov r10, r5\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08112FC8: .4byte gUnknown_84566A8\n"
|
||||
"_08112FCC: .4byte 0x04000008");
|
||||
}
|
||||
#endif
|
||||
|
||||
static void sub_8112FD0(void)
|
||||
{
|
||||
|
||||
+8
-76
@@ -499,7 +499,6 @@ static void ASCIIToPkmnStr(u8 *q1, const u8 *q2)
|
||||
q1[i] = EOS;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static u8 GetConnectedChildStrength(u8 maxFlags)
|
||||
{
|
||||
u8 flagCount = 0;
|
||||
@@ -508,98 +507,31 @@ static u8 GetConnectedChildStrength(u8 maxFlags)
|
||||
|
||||
if (gRfuLinkStatus->parentChild == MODE_PARENT)
|
||||
{
|
||||
for (i = 0; i < 4; flags >>= 1, i++)
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (flags & 1)
|
||||
{
|
||||
if (maxFlags == flagCount + 1)
|
||||
{
|
||||
return gRfuLinkStatus->strength[i];
|
||||
break; // This break is needed to match
|
||||
}
|
||||
flagCount++;
|
||||
}
|
||||
flags >>= 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 4; flags >>= 1, i++)
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (flags & 1)
|
||||
return gRfuLinkStatus->strength[i];
|
||||
flags >>= 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static u8 GetConnectedChildStrength(u8 maxFlags)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r5, r0, 24\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tldr r0, _080FCB04 @ =gRfuLinkStatus\n"
|
||||
"\tldr r4, [r0]\n"
|
||||
"\tldrb r2, [r4, 0x2]\n"
|
||||
"\tldrb r1, [r4]\n"
|
||||
"\tadds r7, r0, 0\n"
|
||||
"\tcmp r1, 0x1\n"
|
||||
"\tbne _080FCB32\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tands r1, r2\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tbeq _080FCB0E\n"
|
||||
"\tcmp r5, 0x1\n"
|
||||
"\tbne _080FCB08\n"
|
||||
"\tldrb r0, [r4, 0xA]\n"
|
||||
"\tb _080FCB4C\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080FCB04: .4byte gRfuLinkStatus\n"
|
||||
"_080FCB08:\n"
|
||||
"\tadds r0, r6, 0x1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r6, r0, 24\n"
|
||||
"_080FCB0E:\n"
|
||||
"\tlsrs r2, 1\n"
|
||||
"\tadds r0, r3, 0x1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r3, r0, 24\n"
|
||||
"\tcmp r3, 0x3\n"
|
||||
"\tbhi _080FCB4A\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r2\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080FCB0E\n"
|
||||
"\tadds r0, r6, 0x1\n"
|
||||
"\tcmp r5, r0\n"
|
||||
"\tbne _080FCB08\n"
|
||||
"_080FCB28:\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tadds r0, 0xA\n"
|
||||
"\tadds r0, r3\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tb _080FCB4C\n"
|
||||
"_080FCB32:\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"_080FCB36:\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080FCB28\n"
|
||||
"\tlsrs r2, 1\n"
|
||||
"\tadds r0, r3, 0x1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r3, r0, 24\n"
|
||||
"\tcmp r3, 0x3\n"
|
||||
"\tbls _080FCB36\n"
|
||||
"_080FCB4A:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_080FCB4C:\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1");
|
||||
}
|
||||
#endif
|
||||
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
|
||||
{
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ struct UnkIndicatorsStruct
|
||||
|
||||
struct MysteryGiftLinkMenuStruct
|
||||
{
|
||||
s32 currItemId;
|
||||
u32 currItemId;
|
||||
u8 state;
|
||||
u8 windowId;
|
||||
u8 listTaskId;
|
||||
@@ -104,7 +104,7 @@ static void ListMenuDummyTask(u8 taskId)
|
||||
{
|
||||
}
|
||||
|
||||
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
|
||||
u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
|
||||
{
|
||||
switch (sMysteryGiftLinkMenu.state)
|
||||
{
|
||||
|
||||
@@ -314,7 +314,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
|
||||
|
||||
void MusicPlayerJumpTableCopy(void)
|
||||
{
|
||||
asm("swi 0x2A");
|
||||
asm("svc 0x2A");
|
||||
}
|
||||
|
||||
void ClearChain(void *x)
|
||||
|
||||
+12
-12
@@ -347,17 +347,17 @@ s8 Menu_ProcessInput(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return sMenu.cursorPos;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
return MENU_B_PRESSED;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_UP))
|
||||
if (JOY_NEW(DPAD_UP))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(-1);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_DOWN))
|
||||
if (JOY_NEW(DPAD_DOWN))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(1);
|
||||
@@ -376,17 +376,17 @@ s8 Menu_ProcessInputNoWrapAround(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return sMenu.cursorPos;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
return MENU_B_PRESSED;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_UP))
|
||||
if (JOY_NEW(DPAD_UP))
|
||||
{
|
||||
if (oldPos != Menu_MoveCursorNoWrapAround(-1))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_DOWN))
|
||||
if (JOY_NEW(DPAD_DOWN))
|
||||
{
|
||||
if (oldPos != Menu_MoveCursorNoWrapAround(1))
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -403,17 +403,17 @@ s8 Menu_ProcessInput_other(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return sMenu.cursorPos;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
return MENU_B_PRESSED;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
|
||||
if (JOY_REPT(DPAD_ANY) == DPAD_UP)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(-1);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
|
||||
if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(1);
|
||||
@@ -432,17 +432,17 @@ s8 Menu_ProcessInputNoWrapAround_other(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return sMenu.cursorPos;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
return MENU_B_PRESSED;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_UP)
|
||||
if (JOY_REPT(DPAD_ANY) == DPAD_UP)
|
||||
{
|
||||
if (oldPos != Menu_MoveCursorNoWrapAround(-1))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
|
||||
if (JOY_REPT(DPAD_ANY) == DPAD_DOWN)
|
||||
{
|
||||
if (oldPos != Menu_MoveCursorNoWrapAround(1))
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
+176
-354
@@ -22,9 +22,7 @@ struct PokedexScreenData
|
||||
{
|
||||
u8 field_00;
|
||||
u8 field_01;
|
||||
u8 field_02;
|
||||
u8 field_03;
|
||||
u8 field_04;
|
||||
u8 field_02[4];
|
||||
u32 field_08;
|
||||
u32 field_0C;
|
||||
u16 field_10;
|
||||
@@ -33,9 +31,9 @@ struct PokedexScreenData
|
||||
u8 field_15;
|
||||
u8 field_16;
|
||||
u8 field_17;
|
||||
u16 field_18[0x4];
|
||||
u8 field_20[0x4];
|
||||
u8 field_24[0x4];
|
||||
u16 field_18[4];
|
||||
u8 field_20[4];
|
||||
u8 field_24[4];
|
||||
u8 field_28;
|
||||
u8 field_29;
|
||||
u8 field_2A;
|
||||
@@ -77,32 +75,32 @@ struct PokedexScreenWindowGfx
|
||||
|
||||
EWRAM_DATA struct PokedexScreenData * gUnknown_203ACF0 = NULL;
|
||||
|
||||
void sub_810287C(u8 taskId);
|
||||
void sub_8102C28(void);
|
||||
void sub_8102F80(u8 taskId);
|
||||
void sub_810317C(void);
|
||||
void sub_8103238(u8 taskId);
|
||||
void sub_810345C(void);
|
||||
u16 sub_8103518(u8 a0);
|
||||
void sub_8103924(const struct ListMenuTemplate * a0, u8 a1);
|
||||
u8 sub_81039F0(void);
|
||||
void sub_8103988(u8 a0);
|
||||
void sub_8103AC8(u8 taskId);
|
||||
u8 sub_8104234(void);
|
||||
int sub_8104284(void);
|
||||
void sub_81042EC(u8 taskId);
|
||||
bool32 sub_8104664(u8 a0);
|
||||
static void sub_810287C(u8 taskId);
|
||||
static void sub_8102C28(void);
|
||||
static void sub_8102F80(u8 taskId);
|
||||
static void sub_810317C(void);
|
||||
static void sub_8103238(u8 taskId);
|
||||
static void sub_810345C(void);
|
||||
static u16 sub_8103518(u8 a0);
|
||||
static void sub_8103924(const struct ListMenuTemplate * a0, u8 a1);
|
||||
static u8 sub_81039F0(void);
|
||||
static void sub_8103988(u8 a0);
|
||||
static void sub_8103AC8(u8 taskId);
|
||||
static u8 sub_8104234(void);
|
||||
static int sub_8104284(void);
|
||||
static void sub_81042EC(u8 taskId);
|
||||
static bool32 sub_8104664(u8 a0);
|
||||
void sub_81047B0(u8 *windowId_p);
|
||||
void sub_81047C8(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
|
||||
void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx);
|
||||
static void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx);
|
||||
void sub_8104A34(u8 windowId, u8 fontId, u16 species, u8 x, u8 y);
|
||||
u16 sub_8104BBC(u8 caseId, bool8 whichDex);
|
||||
static u16 sub_8104BBC(u8 caseId, bool8 whichDex);
|
||||
void sub_8104C2C(const u8 *src);
|
||||
void sub_8104E90(void);
|
||||
bool8 sub_8104F0C(bool8 a0);
|
||||
void sub_8105058(u8 a0);
|
||||
void sub_8105178(u8 a0, u8 a1, u8 a2);
|
||||
bool8 sub_81052D0(u8 a0);
|
||||
static bool8 sub_81052D0(u8 a0);
|
||||
void sub_8105594(u8 a0, u8 a1);
|
||||
void sub_8105E1C(u8 a0);
|
||||
void sub_8106014(void);
|
||||
@@ -119,9 +117,9 @@ void sub_8106E78(const u8 *a0, s32 a1);
|
||||
|
||||
#include "data/pokemon_graphics/footprint_table.h"
|
||||
|
||||
const u32 gUnknown_8440124[] = INCBIN_U32("graphics/pokedex/unk_8440124.bin.lz");
|
||||
const u32 gUnknown_8440274[] = INCBIN_U32("graphics/pokedex/unk_8440274.4bpp.lz");
|
||||
const u32 gUnknown_84403AC[] = INCBIN_U32("graphics/pokedex/unk_84403AC.4bpp.lz");
|
||||
const u8 gUnknown_8440124[] = INCBIN_U8("graphics/pokedex/unk_8440124.bin.lz");
|
||||
const u8 gUnknown_8440274[] = INCBIN_U8("graphics/pokedex/unk_8440274.4bpp.lz");
|
||||
const u8 gUnknown_84403AC[] = INCBIN_U8("graphics/pokedex/unk_84403AC.4bpp.lz");
|
||||
const u16 gUnknown_84404C8[] = INCBIN_U16("graphics/pokedex/unk_84404C8.gbapal");
|
||||
|
||||
const u16 gUnknown_84406C8[] = {
|
||||
@@ -242,21 +240,21 @@ void sub_810250C(void)
|
||||
ScanlineEffect_Stop();
|
||||
ResetBgsAndClearDma3BusyFlags(TRUE);
|
||||
InitBgsFromTemplates(0, gUnknown_8451EBC, NELEMS(gUnknown_8451EBC));
|
||||
SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(2, Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(3, (u16*)Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(2, (u16*)Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(1, (u16*)Alloc(BG_SCREEN_SIZE));
|
||||
SetBgTilemapBuffer(0, (u16*)Alloc(BG_SCREEN_SIZE));
|
||||
if (natDex)
|
||||
DecompressAndLoadBgGfxUsingHeap(3, gUnknown_84403AC, BG_SCREEN_SIZE, 0, 0);
|
||||
DecompressAndLoadBgGfxUsingHeap(3, (void*)gUnknown_84403AC, BG_SCREEN_SIZE, 0, 0);
|
||||
else
|
||||
DecompressAndLoadBgGfxUsingHeap(3, gUnknown_8440274, BG_SCREEN_SIZE, 0, 0);
|
||||
DecompressAndLoadBgGfxUsingHeap(3, (void*)gUnknown_8440274, BG_SCREEN_SIZE, 0, 0);
|
||||
InitWindows(gUnknown_8451ECC);
|
||||
DeactivateAllTextPrinters();
|
||||
m4aSoundVSyncOn();
|
||||
SetVBlankCallback(sub_81024C0);
|
||||
EnableInterrupts(INTR_FLAG_VBLANK);
|
||||
taskId = CreateTask(sub_810287C, 0);
|
||||
gUnknown_203ACF0 = Alloc(sizeof(*gUnknown_203ACF0));
|
||||
gUnknown_203ACF0 = Alloc(sizeof(struct PokedexScreenData));
|
||||
*gUnknown_203ACF0 = gUnknown_8451EE4;
|
||||
gUnknown_203ACF0->field_00 = taskId;
|
||||
gUnknown_203ACF0->field_44 = Alloc(NATIONAL_DEX_COUNT * sizeof(struct ListMenuItem));
|
||||
@@ -336,7 +334,7 @@ void sub_8102858(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_810287C(u8 taskId)
|
||||
static void sub_810287C(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
@@ -474,7 +472,7 @@ void sub_810287C(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8102C28(void)
|
||||
static void sub_8102C28(void)
|
||||
{
|
||||
struct ListMenuTemplate listMenuTemplate;
|
||||
FillBgTilemapBufferRect(3, 0x00E, 0, 0, 30, 20, 0x00);
|
||||
@@ -541,15 +539,15 @@ void sub_8102EC0(s32 itemIndex, bool8 onInit, struct ListMenu *list)
|
||||
CopyWindowToVram(gUnknown_203ACF0->field_15, COPYWIN_GFX);
|
||||
}
|
||||
|
||||
void sub_8102F48(u8 windowId, s32 itemId, u8 y)
|
||||
void sub_8102F48(u8 windowId, u32 itemId, u8 y)
|
||||
{
|
||||
if (itemId < 0 || itemId > 8 || gUnknown_203ACF0->field_08 & (1 << itemId))
|
||||
if (itemId > 8 || gUnknown_203ACF0->field_08 & (1 << itemId))
|
||||
ListMenuOverrideSetColors(1, 0, 3);
|
||||
else
|
||||
ListMenuOverrideSetColors(10, 0, 11);
|
||||
}
|
||||
|
||||
void sub_8102F80(u8 taskId)
|
||||
static void sub_8102F80(u8 taskId)
|
||||
{
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
{
|
||||
@@ -616,7 +614,7 @@ void sub_8102F80(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_810317C(void)
|
||||
static void sub_810317C(void)
|
||||
{
|
||||
struct ListMenuTemplate template;
|
||||
FillBgTilemapBufferRect(3, 0x00E, 0, 0, 30, 20, 0x00);
|
||||
@@ -635,7 +633,7 @@ void sub_810317C(void)
|
||||
CopyWindowToVram(1, COPYWIN_GFX);
|
||||
}
|
||||
|
||||
void sub_8103238(u8 taskId)
|
||||
static void sub_8103238(u8 taskId)
|
||||
{
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
{
|
||||
@@ -702,7 +700,7 @@ void sub_8103238(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_810345C(void)
|
||||
static void sub_810345C(void)
|
||||
{
|
||||
struct ListMenuTemplate template;
|
||||
FillBgTilemapBufferRect(3, 0x00E, 0, 0, 30, 20, 0x00);
|
||||
@@ -721,7 +719,7 @@ void sub_810345C(void)
|
||||
CopyWindowToVram(1, COPYWIN_GFX);
|
||||
}
|
||||
|
||||
u16 sub_8103518(u8 a0)
|
||||
static u16 sub_8103518(u8 a0)
|
||||
{
|
||||
s32 max_n = IsNationalPokedexEnabled() ? NATIONAL_DEX_COUNT : KANTO_DEX_COUNT;
|
||||
u16 ndex_num;
|
||||
@@ -841,7 +839,7 @@ u16 sub_8103518(u8 a0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_8103924(const struct ListMenuTemplate * template, u8 a1)
|
||||
static void sub_8103924(const struct ListMenuTemplate * template, u8 a1)
|
||||
{
|
||||
switch (a1)
|
||||
{
|
||||
@@ -861,7 +859,7 @@ void sub_8103924(const struct ListMenuTemplate * template, u8 a1)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8103988(u8 a0)
|
||||
static void sub_8103988(u8 a0)
|
||||
{
|
||||
switch (a0)
|
||||
{
|
||||
@@ -881,7 +879,7 @@ void sub_8103988(u8 a0)
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_81039F0(void)
|
||||
static u8 sub_81039F0(void)
|
||||
{
|
||||
struct ScrollArrowsTemplate template = gUnknown_84521B4;
|
||||
if (gUnknown_203ACF0->field_48 > gUnknown_8452174.maxShowed)
|
||||
@@ -916,7 +914,7 @@ void sub_8103A40(u8 windowId, s32 itemId, u8 y)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8103AC8(u8 taskId)
|
||||
static void sub_8103AC8(u8 taskId)
|
||||
{
|
||||
int r4;
|
||||
u8 *ptr;
|
||||
@@ -977,68 +975,66 @@ void sub_8103AC8(u8 taskId)
|
||||
RemoveScrollIndicatorArrowPair(gUnknown_203ACF0->field_60);
|
||||
ListMenuRemoveCursorObject(gUnknown_203ACF0->field_61, 0);
|
||||
gUnknown_203ACF0->field_01 = 12;
|
||||
break;
|
||||
}
|
||||
else
|
||||
if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_LEFT))
|
||||
{
|
||||
if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_LEFT))
|
||||
if (gUnknown_203ACF0->field_2D != 0)
|
||||
{
|
||||
if (gUnknown_203ACF0->field_2D != 0)
|
||||
gUnknown_203ACF0->field_2D--;
|
||||
PlaySE(SE_SELECT);
|
||||
break;
|
||||
}
|
||||
else
|
||||
r4 = 1;
|
||||
}
|
||||
if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_RIGHT))
|
||||
{
|
||||
if (gUnknown_203ACF0->field_2D < gUnknown_203ACF0->field_2C - 1)
|
||||
{
|
||||
gUnknown_203ACF0->field_2D++;
|
||||
PlaySE(SE_SELECT);
|
||||
break;
|
||||
}
|
||||
else
|
||||
r4 = 2;
|
||||
}
|
||||
if (r4 == 0)
|
||||
r4 = sub_8104284();
|
||||
switch (r4)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
while (gUnknown_203ACF0->field_2B > gUnknown_203ACF0->field_29)
|
||||
{
|
||||
gUnknown_203ACF0->field_2B--;
|
||||
if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B))
|
||||
{
|
||||
gUnknown_203ACF0->field_2D--;
|
||||
PlaySE(SE_SELECT);
|
||||
gUnknown_203ACF0->field_01 = 8;
|
||||
break;
|
||||
}
|
||||
else
|
||||
r4 = 1;
|
||||
}
|
||||
if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_RIGHT))
|
||||
{
|
||||
if (gUnknown_203ACF0->field_2D < gUnknown_203ACF0->field_2C - 1)
|
||||
{
|
||||
gUnknown_203ACF0->field_2D++;
|
||||
PlaySE(SE_SELECT);
|
||||
break;
|
||||
}
|
||||
else
|
||||
r4 = 2;
|
||||
}
|
||||
if (r4 == 0)
|
||||
r4 = sub_8104284();
|
||||
switch (r4)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
while (gUnknown_203ACF0->field_2B > gUnknown_203ACF0->field_29)
|
||||
{
|
||||
gUnknown_203ACF0->field_2B--;
|
||||
if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B))
|
||||
{
|
||||
gUnknown_203ACF0->field_01 = 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gUnknown_203ACF0->field_01 != 8)
|
||||
gUnknown_203ACF0->field_01 = 6;
|
||||
break;
|
||||
case 2:
|
||||
while (gUnknown_203ACF0->field_2B < gUnknown_203ACF0->field_2A - 1)
|
||||
{
|
||||
gUnknown_203ACF0->field_2B++;
|
||||
if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B))
|
||||
{
|
||||
gUnknown_203ACF0->field_01 = 10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gUnknown_203ACF0->field_01 != 10)
|
||||
gUnknown_203ACF0->field_01 = 6;
|
||||
break;
|
||||
}
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
if (gUnknown_203ACF0->field_01 != 8)
|
||||
gUnknown_203ACF0->field_01 = 6;
|
||||
break;
|
||||
case 2:
|
||||
while (gUnknown_203ACF0->field_2B < gUnknown_203ACF0->field_2A - 1)
|
||||
{
|
||||
gUnknown_203ACF0->field_2B++;
|
||||
if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B))
|
||||
{
|
||||
gUnknown_203ACF0->field_01 = 10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gUnknown_203ACF0->field_01 != 10)
|
||||
gUnknown_203ACF0->field_01 = 6;
|
||||
break;
|
||||
}
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
gUnknown_203ACF0->field_01 = 6;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
@@ -1054,7 +1050,7 @@ void sub_8103AC8(u8 taskId)
|
||||
sub_8105058(0xFF);
|
||||
ListMenuUpdateCursorObject(gUnknown_203ACF0->field_61, 0, 0xA0, 0);
|
||||
gUnknown_203ACF0->field_2E = 0;
|
||||
gUnknown_203ACF0->field_02 = 0;
|
||||
gUnknown_203ACF0->field_02[0] = 0;
|
||||
gUnknown_203ACF0->field_01++;
|
||||
break;
|
||||
case 9:
|
||||
@@ -1085,23 +1081,23 @@ void sub_8103AC8(u8 taskId)
|
||||
gUnknown_203ACF0->field_01 = 15;
|
||||
break;
|
||||
case 15:
|
||||
gUnknown_203ACF0->field_02 = 0;
|
||||
gUnknown_203ACF0->field_03 = 0;
|
||||
gUnknown_203ACF0->field_02[0] = 0;
|
||||
gUnknown_203ACF0->field_02[1] = 0;
|
||||
gUnknown_203ACF0->field_01++;
|
||||
// fallthrough
|
||||
case 16:
|
||||
if (gUnknown_203ACF0->field_03 < 6)
|
||||
if (gUnknown_203ACF0->field_02[1] < 6)
|
||||
{
|
||||
if (!gUnknown_203ACF0->field_02)
|
||||
if (gUnknown_203ACF0->field_02[0])
|
||||
{
|
||||
gUnknown_203ACF0->field_02--;
|
||||
sub_8105594(0, gUnknown_203ACF0->field_02[1]);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
gUnknown_203ACF0->field_02[0] = 4;
|
||||
gUnknown_203ACF0->field_02[1]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_8105594(0, gUnknown_203ACF0->field_03);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
gUnknown_203ACF0->field_02 = 4;
|
||||
gUnknown_203ACF0->field_03++;
|
||||
gUnknown_203ACF0->field_02[0]--;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1112,7 +1108,7 @@ void sub_8103AC8(u8 taskId)
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
PlayCry2(gUnknown_203ACF0->field_5A, 0, 125, 10);
|
||||
gUnknown_203ACF0->field_02 = 0;
|
||||
gUnknown_203ACF0->field_02[0] = 0;
|
||||
gUnknown_203ACF0->field_01 = 17;
|
||||
}
|
||||
break;
|
||||
@@ -1143,23 +1139,23 @@ void sub_8103AC8(u8 taskId)
|
||||
gUnknown_203ACF0->field_01 = 19;
|
||||
break;
|
||||
case 19:
|
||||
gUnknown_203ACF0->field_02 = 0;
|
||||
gUnknown_203ACF0->field_03 = 6;
|
||||
gUnknown_203ACF0->field_02[0] = 0;
|
||||
gUnknown_203ACF0->field_02[1] = 6;
|
||||
gUnknown_203ACF0->field_01++;
|
||||
// fallthrough
|
||||
case 20:
|
||||
if (gUnknown_203ACF0->field_03)
|
||||
if (gUnknown_203ACF0->field_02[1])
|
||||
{
|
||||
if (gUnknown_203ACF0->field_02)
|
||||
if (gUnknown_203ACF0->field_02[0])
|
||||
{
|
||||
gUnknown_203ACF0->field_03--;
|
||||
gUnknown_203ACF0->field_02[1]--;
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16);
|
||||
sub_8105594(0, gUnknown_203ACF0->field_03);
|
||||
sub_8105594(0, gUnknown_203ACF0->field_02[1]);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
gUnknown_203ACF0->field_02 = 1;
|
||||
gUnknown_203ACF0->field_02[0] = 1;
|
||||
}
|
||||
else
|
||||
gUnknown_203ACF0->field_02--;
|
||||
gUnknown_203ACF0->field_02[0]--;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1224,7 +1220,7 @@ void sub_8103AC8(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_8104234(void)
|
||||
static u8 sub_8104234(void)
|
||||
{
|
||||
struct ScrollArrowsTemplate template = gUnknown_84524B4;
|
||||
template.fullyUpThreshold = gUnknown_203ACF0->field_29;
|
||||
@@ -1233,7 +1229,7 @@ u8 sub_8104234(void)
|
||||
return AddScrollIndicatorArrowPair(&template, &gUnknown_203ACF0->field_62);
|
||||
}
|
||||
|
||||
int sub_8104284(void)
|
||||
static int sub_8104284(void)
|
||||
{
|
||||
switch (gSaveBlock2Ptr->optionsButtonMode)
|
||||
{
|
||||
@@ -1252,13 +1248,13 @@ int sub_8104284(void)
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
default:
|
||||
case OPTIONS_BUTTON_MODE_HELP:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81042EC(u8 taskId)
|
||||
static void sub_81042EC(u8 taskId)
|
||||
{
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
{
|
||||
@@ -1384,18 +1380,15 @@ void sub_81042EC(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
// HOLY HECK THIS FUNCTION NotLikeThis
|
||||
bool32 sub_8104664(u8 a0)
|
||||
static bool32 sub_8104664(u8 a0)
|
||||
{
|
||||
u16 *r12;
|
||||
u16 *r6;
|
||||
int r3;
|
||||
u16 *r6, *r12;
|
||||
|
||||
switch (gUnknown_203ACF0->field_42)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
case 0:
|
||||
r12 = &gUnknown_203ACF0->field_36;
|
||||
r6 = &gUnknown_203ACF0->field_34;
|
||||
break;
|
||||
@@ -1411,32 +1404,49 @@ bool32 sub_8104664(u8 a0)
|
||||
r6 = &gUnknown_203ACF0->field_3C;
|
||||
break;
|
||||
}
|
||||
|
||||
r3 = *r12 + *r6;
|
||||
if (a0)
|
||||
{
|
||||
if (r3 == 0)
|
||||
return FALSE;
|
||||
while (--r3 >= 0)
|
||||
|
||||
r3--;
|
||||
while (r3 >= 0) //Should be while (--r3 >= 0) without the r3-- in the body or before the while at all, but this is needed to match.
|
||||
{
|
||||
if ((((u32)gUnknown_203ACF0->field_44[r3].index) >> 16) & 1)
|
||||
if ((gUnknown_203ACF0->field_44[r3].index >> 16) & 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
r3--;
|
||||
}
|
||||
|
||||
if (r3 < 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (r3 == gUnknown_203ACF0->field_48 - 1)
|
||||
return FALSE;
|
||||
while (++r3 < gUnknown_203ACF0->field_48)
|
||||
{
|
||||
if ((((u32)gUnknown_203ACF0->field_44[r3].index) >> 16) & 1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
r3++;
|
||||
while (r3 < gUnknown_203ACF0->field_48) //Should be while (++r3 < gUnknown_203ACF0->field_48) without the r3++ in the body or before the while at all, but this is needed to match.
|
||||
{
|
||||
if ((gUnknown_203ACF0->field_44[r3].index >> 16) & 1)
|
||||
break;
|
||||
r3++;
|
||||
}
|
||||
if (r3 >= gUnknown_203ACF0->field_48)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
gUnknown_203ACF0->field_30 = gUnknown_203ACF0->field_44[r3].index;
|
||||
|
||||
if (gUnknown_203ACF0->field_48 > 9)
|
||||
{
|
||||
if (r3 < 4)
|
||||
@@ -1444,10 +1454,10 @@ bool32 sub_8104664(u8 a0)
|
||||
*r12 = 0;
|
||||
*r6 = r3;
|
||||
}
|
||||
else if (r3 >= gUnknown_203ACF0->field_48 - 4)
|
||||
else if (r3 >= (gUnknown_203ACF0->field_48 - 4))
|
||||
{
|
||||
*r12 = gUnknown_203ACF0->field_48 - 9;
|
||||
*r6 = r3 + 9 - gUnknown_203ACF0->field_48;
|
||||
*r12 = (gUnknown_203ACF0->field_48 - 9);
|
||||
*r6 = r3 + 9 - (gUnknown_203ACF0->field_48);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1457,201 +1467,11 @@ bool32 sub_8104664(u8 a0)
|
||||
}
|
||||
else
|
||||
{
|
||||
*r12 = 0;
|
||||
*r6 = r3;
|
||||
}
|
||||
return TRUE;
|
||||
*r12 = 0;
|
||||
*r6 = r3;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
bool32 sub_8104664(u8 a0)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r8\n"
|
||||
"\tpush {r7}\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tldr r0, _08104684 @ =gUnknown_203ACF0\n"
|
||||
"\tldr r3, [r0]\n"
|
||||
"\tadds r2, r3, 0\n"
|
||||
"\tadds r2, 0x42\n"
|
||||
"\tldrb r2, [r2]\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tcmp r2, 0x4\n"
|
||||
"\tbgt _08104688\n"
|
||||
"\tcmp r2, 0x1\n"
|
||||
"\tbge _0810469C\n"
|
||||
"\tb _0810468C\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08104684: .4byte gUnknown_203ACF0\n"
|
||||
"_08104688:\n"
|
||||
"\tcmp r2, 0x5\n"
|
||||
"\tbeq _081046A8\n"
|
||||
"_0810468C:\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tmovs r2, 0x36\n"
|
||||
"\tadds r2, r0\n"
|
||||
"\tmov r12, r2\n"
|
||||
"\tadds r6, r0, 0\n"
|
||||
"\tadds r6, 0x34\n"
|
||||
"\tb _081046B2\n"
|
||||
"_0810469C:\n"
|
||||
"\tmovs r0, 0x3A\n"
|
||||
"\tadds r0, r3\n"
|
||||
"\tmov r12, r0\n"
|
||||
"\tadds r6, r3, 0\n"
|
||||
"\tadds r6, 0x38\n"
|
||||
"\tb _081046B2\n"
|
||||
"_081046A8:\n"
|
||||
"\tmovs r1, 0x3E\n"
|
||||
"\tadds r1, r3\n"
|
||||
"\tmov r12, r1\n"
|
||||
"\tadds r6, r3, 0\n"
|
||||
"\tadds r6, 0x3C\n"
|
||||
"_081046B2:\n"
|
||||
"\tmov r2, r12\n"
|
||||
"\tldrh r1, [r2]\n"
|
||||
"\tldrh r0, [r6]\n"
|
||||
"\tadds r3, r1, r0\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _08104700\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tbeq _0810474C\n"
|
||||
"\tsubs r3, 0x1\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tblt _0810474C\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tldr r0, [r0, 0x44]\n"
|
||||
"\tlsls r2, r3, 3\n"
|
||||
"\tadds r0, r2, r0\n"
|
||||
"\tldrh r0, [r0, 0x6]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _081046FA\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tmovs r4, 0x1\n"
|
||||
"\tadds r1, r2, 0\n"
|
||||
"_081046E2:\n"
|
||||
"\tsubs r1, 0x8\n"
|
||||
"\tsubs r3, 0x1\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tblt _0810474C\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tldr r0, [r0, 0x44]\n"
|
||||
"\tadds r0, r1, r0\n"
|
||||
"\tldrh r0, [r0, 0x6]\n"
|
||||
"\tands r0, r4\n"
|
||||
"\tadds r2, r1, 0\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _081046E2\n"
|
||||
"_081046FA:\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tbge _08104750\n"
|
||||
"\tb _0810474C\n"
|
||||
"_08104700:\n"
|
||||
"\tmov r2, r8\n"
|
||||
"\tldr r5, [r2]\n"
|
||||
"\tadds r0, r5, 0\n"
|
||||
"\tadds r0, 0x48\n"
|
||||
"\tldrh r4, [r0]\n"
|
||||
"\tsubs r0, r4, 0x1\n"
|
||||
"\tcmp r3, r0\n"
|
||||
"\tbeq _0810474C\n"
|
||||
"\tadds r3, 0x1\n"
|
||||
"\tcmp r3, r4\n"
|
||||
"\tbge _0810474C\n"
|
||||
"\tldr r0, [r5, 0x44]\n"
|
||||
"\tlsls r2, r3, 3\n"
|
||||
"\tadds r0, r2, r0\n"
|
||||
"\tldrh r0, [r0, 0x6]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _08104740\n"
|
||||
"\tadds r1, r2, 0\n"
|
||||
"\tmovs r7, 0x1\n"
|
||||
"_0810472A:\n"
|
||||
"\tadds r1, 0x8\n"
|
||||
"\tadds r3, 0x1\n"
|
||||
"\tcmp r3, r4\n"
|
||||
"\tbge _0810474C\n"
|
||||
"\tldr r0, [r5, 0x44]\n"
|
||||
"\tadds r0, r1, r0\n"
|
||||
"\tldrh r0, [r0, 0x6]\n"
|
||||
"\tands r0, r7\n"
|
||||
"\tadds r2, r1, 0\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0810472A\n"
|
||||
"_08104740:\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tadds r0, 0x48\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tcmp r3, r0\n"
|
||||
"\tblt _08104750\n"
|
||||
"_0810474C:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tb _081047A6\n"
|
||||
"_08104750:\n"
|
||||
"\tmov r0, r8\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tldr r0, [r1, 0x44]\n"
|
||||
"\tadds r0, r2, r0\n"
|
||||
"\tldr r0, [r0, 0x4]\n"
|
||||
"\tstr r0, [r1, 0x30]\n"
|
||||
"\tadds r1, 0x48\n"
|
||||
"\tldrh r0, [r1]\n"
|
||||
"\tcmp r0, 0x9\n"
|
||||
"\tbls _0810479C\n"
|
||||
"\tcmp r3, 0x3\n"
|
||||
"\tbgt _08104770\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmov r1, r12\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tb _081047A2\n"
|
||||
"_08104770:\n"
|
||||
"\tldrh r1, [r1]\n"
|
||||
"\tsubs r0, r1, 0x4\n"
|
||||
"\tcmp r3, r0\n"
|
||||
"\tblt _08104790\n"
|
||||
"\tsubs r0, 0x5\n"
|
||||
"\tmov r2, r12\n"
|
||||
"\tstrh r0, [r2]\n"
|
||||
"\tadds r1, r3, 0\n"
|
||||
"\tadds r1, 0x9\n"
|
||||
"\tmov r2, r8\n"
|
||||
"\tldr r0, [r2]\n"
|
||||
"\tadds r0, 0x48\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tsubs r1, r0\n"
|
||||
"\tstrh r1, [r6]\n"
|
||||
"\tb _081047A4\n"
|
||||
"_08104790:\n"
|
||||
"\tsubs r0, r3, 0x4\n"
|
||||
"\tmov r1, r12\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tmovs r0, 0x4\n"
|
||||
"\tstrh r0, [r6]\n"
|
||||
"\tb _081047A4\n"
|
||||
"_0810479C:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmov r2, r12\n"
|
||||
"\tstrh r0, [r2]\n"
|
||||
"_081047A2:\n"
|
||||
"\tstrh r3, [r6]\n"
|
||||
"_081047A4:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"_081047A6:\n"
|
||||
"\tpop {r3}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1");
|
||||
}
|
||||
#endif //NONMATCHING
|
||||
|
||||
void sub_81047B0(u8 *windowId_p)
|
||||
{
|
||||
@@ -1706,7 +1526,7 @@ void sub_8104880(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx)
|
||||
sub_81047C8(windowId, fontId, buff, x, y, colorIdx);
|
||||
}
|
||||
|
||||
void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx)
|
||||
static void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx)
|
||||
{
|
||||
u8 buff[4];
|
||||
int i;
|
||||
@@ -1794,7 +1614,7 @@ s8 sub_8104AB0(u16 nationalDexNo, u8 caseId, bool8 indexIsSpecies)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
u16 sub_8104BBC(u8 caseId, bool8 whichDex)
|
||||
static u16 sub_8104BBC(u8 caseId, bool8 whichDex)
|
||||
{
|
||||
u16 count = 0;
|
||||
u16 i;
|
||||
@@ -2024,28 +1844,28 @@ bool8 sub_81051F0(u8 a0)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_81052D0(u8 a0)
|
||||
static bool8 sub_81052D0(u8 a0)
|
||||
{
|
||||
u16 r4;
|
||||
if (IsNationalPokedexEnabled())
|
||||
r4 = gUnknown_84406E0[7];
|
||||
else
|
||||
r4 = gUnknown_84404C8[7];
|
||||
switch (gUnknown_203ACF0->field_02)
|
||||
switch (gUnknown_203ACF0->field_02[0])
|
||||
{
|
||||
case 0:
|
||||
gUnknown_203ACF0->field_5C = Alloc(3 * BG_SCREEN_SIZE);
|
||||
if (a0)
|
||||
gUnknown_203ACF0->field_02 = 6;
|
||||
gUnknown_203ACF0->field_02[0] = 6;
|
||||
else
|
||||
gUnknown_203ACF0->field_02 = 2;
|
||||
gUnknown_203ACF0->field_02[0] = 2;
|
||||
break;
|
||||
case 1:
|
||||
Free(gUnknown_203ACF0->field_5C);
|
||||
return TRUE;
|
||||
case 2:
|
||||
BeginNormalPaletteFade(0x00007FFF, 0, 0, 16, r4);
|
||||
gUnknown_203ACF0->field_02++;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
break;
|
||||
case 3:
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x00C, 0, 0, 30, 20);
|
||||
@@ -2054,7 +1874,7 @@ bool8 sub_81052D0(u8 a0)
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
gUnknown_203ACF0->field_02++;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
break;
|
||||
case 4:
|
||||
BeginNormalPaletteFade(0x00007FFF, 0, 0, 0, r4);
|
||||
@@ -2065,40 +1885,42 @@ bool8 sub_81052D0(u8 a0)
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x00C, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 32, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 32, 20);
|
||||
gUnknown_203ACF0->field_03 = 0;
|
||||
gUnknown_203ACF0->field_02++;
|
||||
|
||||
gUnknown_203ACF0->field_02[1] = 0;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
PlaySE(SE_BALL_TRAY_ENTER);
|
||||
break;
|
||||
case 5:
|
||||
if (gUnknown_203ACF0->field_03 < 10)
|
||||
if (gUnknown_203ACF0->field_02[1] < 10)
|
||||
{
|
||||
sub_81051F0(gUnknown_203ACF0->field_03);
|
||||
gUnknown_203ACF0->field_03++;
|
||||
sub_81051F0(gUnknown_203ACF0->field_02[1]);
|
||||
gUnknown_203ACF0->field_02[1]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_203ACF0->field_02 = 1;
|
||||
gUnknown_203ACF0->field_02[0] = 1;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
CpuFastCopy(GetBgTilemapBuffer(3), &gUnknown_203ACF0->field_5C[0 * BG_SCREEN_SIZE / 2], BG_SCREEN_SIZE);
|
||||
CpuFastCopy(GetBgTilemapBuffer(2), &gUnknown_203ACF0->field_5C[1 * BG_SCREEN_SIZE / 2], BG_SCREEN_SIZE);
|
||||
CpuFastCopy(GetBgTilemapBuffer(1), &gUnknown_203ACF0->field_5C[2 * BG_SCREEN_SIZE / 2], BG_SCREEN_SIZE);
|
||||
gUnknown_203ACF0->field_03 = 9;
|
||||
gUnknown_203ACF0->field_02++;
|
||||
|
||||
gUnknown_203ACF0->field_02[1] = 9;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
PlaySE(SE_BALL_TRAY_ENTER);
|
||||
break;
|
||||
case 7:
|
||||
if (gUnknown_203ACF0->field_03 != 0)
|
||||
if (gUnknown_203ACF0->field_02[1] != 0)
|
||||
{
|
||||
sub_81051F0(gUnknown_203ACF0->field_03);
|
||||
gUnknown_203ACF0->field_03--;
|
||||
sub_81051F0(gUnknown_203ACF0->field_02[1]);
|
||||
gUnknown_203ACF0->field_02[1]--;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81051F0(gUnknown_203ACF0->field_02);
|
||||
sub_81051F0(gUnknown_203ACF0->field_02[0]);
|
||||
BeginNormalPaletteFade(0x00007FFF, 0, 16, 16, r4);
|
||||
gUnknown_203ACF0->field_02++;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
@@ -2107,12 +1929,12 @@ bool8 sub_81052D0(u8 a0)
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
gUnknown_203ACF0->field_02++;
|
||||
gUnknown_203ACF0->field_02[0]++;
|
||||
break;
|
||||
case 9:
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
BeginNormalPaletteFade(0x00007FFF, 0, 16, 0, r4);
|
||||
gUnknown_203ACF0->field_02 = 1;
|
||||
gUnknown_203ACF0->field_02[0] = 1;
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
|
||||
+65
-700
@@ -53,7 +53,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
|
||||
static void CreateWaterSpoutRainDroplet(struct Task*, u8);
|
||||
static void AnimTask_WaterSport_Step(u8);
|
||||
static void CreateWaterSportDroplet(struct Task*);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32);
|
||||
|
||||
// Both unused? Comment copied from pokeemerald
|
||||
static const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.4bpp");
|
||||
@@ -626,99 +626,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId)
|
||||
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256;
|
||||
gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 palIndex;
|
||||
u16 *palPtr1;
|
||||
u16 *palPtr2;
|
||||
u16 rgbBuffer;
|
||||
|
||||
if (++gTasks[taskId].data[10] == 3)
|
||||
{
|
||||
u16 tempPlt;
|
||||
gTasks[taskId].data[10] = 0;
|
||||
palIndex = gTasks[taskId].data[2] + 1;
|
||||
palPtr1 = &gPlttBufferFaded[palIndex];
|
||||
rgbBuffer = *palPtr1;
|
||||
palPtr2 = &palPtr1[1];
|
||||
for (i = 0; i < 7; i++)
|
||||
palPtr1[i] = palPtr2[i];
|
||||
gPlttBufferFaded[palIndex + 7] = rgbBuffer;
|
||||
tempPlt = gPlttBufferFaded[palIndex];
|
||||
for (i = 1; i < 8; i++)
|
||||
gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i];
|
||||
gPlttBufferFaded[palIndex + 7] = tempPlt;
|
||||
}
|
||||
if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r0, r4, 2\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 3\n\
|
||||
adds r2, r0, r1\n\
|
||||
ldrh r0, [r2, 0x1C]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r2, 0x1C]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
mov r12, r1\n\
|
||||
cmp r0, 0x3\n\
|
||||
bne _081075BE\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r2, 0x1C]\n\
|
||||
ldrh r0, [r2, 0xC]\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
ldr r1, =gPlttBufferFaded\n\
|
||||
lsls r0, r5, 1\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r6, [r0]\n\
|
||||
adds r7, r1, 0\n\
|
||||
adds r3, r0, 0x2\n\
|
||||
movs r1, 0x6\n\
|
||||
adds r2, r0, 0\n\
|
||||
_081075A8:\n\
|
||||
ldrh r0, [r3]\n\
|
||||
strh r0, [r2]\n\
|
||||
adds r3, 0x2\n\
|
||||
adds r2, 0x2\n\
|
||||
subs r1, 0x1\n\
|
||||
cmp r1, 0\n\
|
||||
bge _081075A8\n\
|
||||
adds r0, r5, 0x7\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r7\n\
|
||||
strh r6, [r0]\n\
|
||||
_081075BE:\n\
|
||||
lsls r0, r4, 2\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 3\n\
|
||||
add r0, r12\n\
|
||||
ldrh r1, [r0, 0x1E]\n\
|
||||
adds r1, 0x1\n\
|
||||
strh r1, [r0, 0x1E]\n\
|
||||
lsls r1, 16\n\
|
||||
asrs r1, 16\n\
|
||||
movs r2, 0x8\n\
|
||||
ldrsh r0, [r0, r2]\n\
|
||||
cmp r1, r0\n\
|
||||
bne _081075DE\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl DestroyAnimVisualTask\n\
|
||||
_081075DE:\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
|
||||
static void AnimToTargetInSinWave(struct Sprite *sprite)
|
||||
@@ -870,15 +795,18 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite)
|
||||
sprite->pos2.x = Sin(sprite->data[0], 4);
|
||||
sprite->data[1] += 48;
|
||||
sprite->pos2.y = -(sprite->data[1] >> 8);
|
||||
if (--sprite->data[7] == -1)
|
||||
if (sprite->data[7]-- == 0)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void AnimTask_CreateSurfWave(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 taskId2;
|
||||
u16 *x, *y; //These pointers are needed to match
|
||||
|
||||
x = &gBattle_BG1_X;
|
||||
y = &gBattle_BG1_Y;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
@@ -911,30 +839,30 @@ void AnimTask_CreateSurfWave(u8 taskId)
|
||||
gTasks[taskId2].data[2] = 0x1000;
|
||||
if (IsContest())
|
||||
{
|
||||
gBattle_BG1_X = -80;
|
||||
gBattle_BG1_Y = -48;
|
||||
*x = -80;
|
||||
*y = -48;
|
||||
gTasks[taskId].data[0] = 2;
|
||||
gTasks[taskId].data[1] = 1;
|
||||
gTasks[taskId2].data[3] = 0;
|
||||
}
|
||||
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||||
{
|
||||
gBattle_BG1_X = -224;
|
||||
gBattle_BG1_Y = 256;
|
||||
*x = -224;
|
||||
*y = 256;
|
||||
gTasks[taskId].data[0] = 2;
|
||||
gTasks[taskId].data[1] = -1;
|
||||
gTasks[taskId2].data[3] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattle_BG1_X = 0;
|
||||
gBattle_BG1_Y = -48;
|
||||
*x = 0;
|
||||
*y = -48;
|
||||
gTasks[taskId].data[0] = -2;
|
||||
gTasks[taskId].data[1] = 1;
|
||||
gTasks[taskId2].data[3] = 0;
|
||||
}
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, *x);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, *y);
|
||||
if (gTasks[taskId2].data[3] == 0)
|
||||
{
|
||||
gTasks[taskId2].data[4] = 48;
|
||||
@@ -948,250 +876,16 @@ void AnimTask_CreateSurfWave(u8 taskId)
|
||||
gTasks[taskId].data[6] = 1;
|
||||
gTasks[taskId].func = AnimTask_CreateSurfWave_Step1;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void AnimTask_CreateSurfWave(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x10\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r10, r0\n\
|
||||
ldr r1, =0x00003f42\n\
|
||||
movs r0, 0x50\n\
|
||||
bl SetGpuReg\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 5\n\
|
||||
movs r0, 0x52\n\
|
||||
bl SetGpuReg\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0x4\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
mov r0, sp\n\
|
||||
bl sub_80752A0\n\
|
||||
bl IsContest\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _081079E0\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0x3\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSide\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _081079D0\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\
|
||||
bl AnimLoadCompressedBgTilemap\n\
|
||||
b _081079EA\n\
|
||||
.pool\n\
|
||||
_081079D0:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\
|
||||
bl AnimLoadCompressedBgTilemap\n\
|
||||
b _081079EA\n\
|
||||
.pool\n\
|
||||
_081079E0:\n\
|
||||
ldr r0, =gBattleAnimBgTilemap_SurfContest\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
bl LZDecompressVram\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x8]\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
movs r2, 0\n\
|
||||
movs r3, 0x1\n\
|
||||
bl sub_80730C0\n\
|
||||
_081079EA:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgImage_Surf\n\
|
||||
mov r2, sp\n\
|
||||
ldrh r2, [r2, 0xA]\n\
|
||||
bl AnimLoadCompressedBgGfx\n\
|
||||
ldr r0, =gBattleAnimArgs\n\
|
||||
movs r1, 0\n\
|
||||
ldrsh r0, [r0, r1]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _08107A24\n\
|
||||
ldr r0, =gBattleAnimBgPalette_Surf\n\
|
||||
mov r1, sp\n\
|
||||
ldrb r1, [r1, 0x8]\n\
|
||||
lsls r1, 4\n\
|
||||
movs r2, 0x20\n\
|
||||
bl LoadCompressedPalette\n\
|
||||
b _08107A32\n\
|
||||
.pool\n\
|
||||
_08107A24:\n\
|
||||
ldr r0, =gBattleAnimBgPalette_MuddyWater\n\
|
||||
mov r1, sp\n\
|
||||
ldrb r1, [r1, 0x8]\n\
|
||||
lsls r1, 4\n\
|
||||
movs r2, 0x20\n\
|
||||
bl LoadCompressedPalette\n\
|
||||
_08107A32:\n\
|
||||
ldr r0, =AnimTask_SurfWaveScanlineEffect\n\
|
||||
ldr r4, =gTasks\n\
|
||||
mov r2, r10\n\
|
||||
lsls r5, r2, 2\n\
|
||||
adds r1, r5, r2\n\
|
||||
lsls r1, 3\n\
|
||||
adds r6, r1, r4\n\
|
||||
ldrb r1, [r6, 0x7]\n\
|
||||
adds r1, 0x1\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
bl CreateTask\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r8, r0\n\
|
||||
movs r0, 0\n\
|
||||
mov r9, r0\n\
|
||||
mov r1, r8\n\
|
||||
strh r1, [r6, 0x26]\n\
|
||||
mov r2, r8\n\
|
||||
lsls r0, r2, 2\n\
|
||||
add r0, r8\n\
|
||||
lsls r0, 3\n\
|
||||
adds r7, r0, r4\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r7, 0x8]\n\
|
||||
movs r0, 0x80\n\
|
||||
lsls r0, 5\n\
|
||||
strh r0, [r7, 0xA]\n\
|
||||
strh r0, [r7, 0xC]\n\
|
||||
bl IsContest\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
cmp r4, 0\n\
|
||||
beq _08107AB4\n\
|
||||
ldr r1, =0x0000ffb0\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_X\n\
|
||||
strh r0, [r2]\n\
|
||||
adds r1, 0x20\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r0, 0x2\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
movs r0, 0x1\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r7, 0xE]\n\
|
||||
b _08107B0E\n\
|
||||
.pool\n\
|
||||
_08107AB4:\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSide\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r1, r0, 24\n\
|
||||
cmp r1, 0x1\n\
|
||||
bne _08107AF8\n\
|
||||
ldr r2, =0x0000ff20\n\
|
||||
adds r0, r2, 0\n\
|
||||
ldr r2, =gBattle_BG1_X\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 1\n\
|
||||
adds r0, r2, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r0, 0x2\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
ldr r0, =0x0000ffff\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
strh r1, [r7, 0xE]\n\
|
||||
b _08107B0E\n\
|
||||
.pool\n\
|
||||
_08107AF8:\n\
|
||||
ldr r0, =gBattle_BG1_X\n\
|
||||
strh r4, [r0]\n\
|
||||
ldr r1, =0x0000ffd0\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
ldr r0, =0x0000fffe\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
movs r0, 0x1\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
strh r4, [r7, 0xE]\n\
|
||||
_08107B0E:\n\
|
||||
ldr r0, =gBattle_BG1_X\n\
|
||||
ldrh r1, [r0]\n\
|
||||
movs r0, 0x14\n\
|
||||
bl SetGpuReg\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
ldrh r1, [r2]\n\
|
||||
movs r0, 0x16\n\
|
||||
bl SetGpuReg\n\
|
||||
ldr r1, =gTasks\n\
|
||||
mov r2, r8\n\
|
||||
lsls r0, r2, 2\n\
|
||||
add r0, r8\n\
|
||||
lsls r0, 3\n\
|
||||
adds r1, r0, r1\n\
|
||||
movs r2, 0xE\n\
|
||||
ldrsh r0, [r1, r2]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _08107B54\n\
|
||||
movs r0, 0x30\n\
|
||||
strh r0, [r1, 0x10]\n\
|
||||
movs r0, 0x70\n\
|
||||
b _08107B58\n\
|
||||
.pool\n\
|
||||
_08107B54:\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r1, 0x10]\n\
|
||||
_08107B58:\n\
|
||||
strh r0, [r1, 0x12]\n\
|
||||
ldr r1, =gTasks\n\
|
||||
mov r2, r10\n\
|
||||
adds r0, r5, r2\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
movs r1, 0x1\n\
|
||||
strh r1, [r0, 0x14]\n\
|
||||
ldr r1, =AnimTask_CreateSurfWave_Step1\n\
|
||||
str r1, [r0]\n\
|
||||
add sp, 0x10\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 i;
|
||||
u16 rgbBuffer;
|
||||
u16 *BGptrX = &gBattle_BG1_X;
|
||||
u16 *BGptrY = &gBattle_BG1_Y;
|
||||
s16 unkUse;
|
||||
u32 palOffset;
|
||||
u16 palNum;
|
||||
u8 i;
|
||||
u16 *BGptrX, *BGptrY;
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
BGptrX = &gBattle_BG1_X;
|
||||
BGptrY = &gBattle_BG1_Y;
|
||||
|
||||
*BGptrX += gTasks[taskId].data[0];
|
||||
*BGptrY += gTasks[taskId].data[1];
|
||||
@@ -1199,29 +893,26 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
gTasks[taskId].data[2] += gTasks[taskId].data[1];
|
||||
if (++gTasks[taskId].data[5] == 4)
|
||||
{
|
||||
rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
|
||||
for (i = 6; i != 0; i--)
|
||||
rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7];
|
||||
for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context
|
||||
{
|
||||
palNum = animBg.paletteId * 16;
|
||||
palOffset = 1 + i;
|
||||
gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
|
||||
gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason
|
||||
}
|
||||
gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
|
||||
gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer;
|
||||
gTasks[taskId].data[5] = 0;
|
||||
}
|
||||
if (++gTasks[taskId].data[6] > 1)
|
||||
{
|
||||
gTasks[taskId].data[6] = 0;
|
||||
unkUse = ++gTasks[taskId].data[3];
|
||||
if (unkUse <= 13)
|
||||
if (++gTasks[taskId].data[3] < 14)
|
||||
{
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8));
|
||||
gTasks[taskId].data[4]++;
|
||||
}
|
||||
if (gTasks[taskId].data[3] > 54)
|
||||
{
|
||||
unkUse = --gTasks[taskId].data[4];
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
|
||||
gTasks[taskId].data[4]--;
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8));
|
||||
}
|
||||
}
|
||||
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
|
||||
@@ -1230,167 +921,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
gTasks[taskId].func = AnimTask_CreateSurfWave_Step2;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
sub sp, 0x10\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r5, r0, 24\n\
|
||||
ldr r1, =gBattle_BG1_X\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
ldr r0, =gTasks\n\
|
||||
lsls r4, r5, 2\n\
|
||||
adds r4, r5\n\
|
||||
lsls r4, 3\n\
|
||||
adds r4, r0\n\
|
||||
ldrh r0, [r4, 0x8]\n\
|
||||
ldrh r3, [r1]\n\
|
||||
adds r0, r3\n\
|
||||
strh r0, [r1]\n\
|
||||
ldrh r0, [r4, 0xA]\n\
|
||||
ldrh r1, [r2]\n\
|
||||
adds r0, r1\n\
|
||||
strh r0, [r2]\n\
|
||||
mov r0, sp\n\
|
||||
bl sub_80752A0\n\
|
||||
ldrh r0, [r4, 0xA]\n\
|
||||
ldrh r3, [r4, 0xC]\n\
|
||||
adds r0, r3\n\
|
||||
strh r0, [r4, 0xC]\n\
|
||||
ldrh r0, [r4, 0x12]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r4, 0x12]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0x4\n\
|
||||
bne _08107C18\n\
|
||||
ldr r1, =gPlttBufferFaded\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, 0x7\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r6, [r0]\n\
|
||||
movs r2, 0x6\n\
|
||||
adds r7, r1, 0\n\
|
||||
adds r3, r7, 0\n\
|
||||
mov r4, sp\n\
|
||||
_08107BDE:\n\
|
||||
ldrb r0, [r4, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r1, r2, 0x1\n\
|
||||
adds r0, r1\n\
|
||||
lsls r1, r0, 1\n\
|
||||
adds r1, r3\n\
|
||||
subs r0, 0x1\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r3\n\
|
||||
ldrh r0, [r0]\n\
|
||||
strh r0, [r1]\n\
|
||||
subs r0, r2, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
cmp r2, 0\n\
|
||||
bne _08107BDE\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r7\n\
|
||||
strh r6, [r0]\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
strh r2, [r0, 0x12]\n\
|
||||
_08107C18:\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r2, r5, 2\n\
|
||||
adds r0, r2, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r3, r0, r1\n\
|
||||
ldrh r0, [r3, 0x14]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3, 0x14]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
adds r4, r1, 0\n\
|
||||
adds r6, r2, 0\n\
|
||||
cmp r0, 0x1\n\
|
||||
ble _08107C86\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r3, 0x14]\n\
|
||||
ldrh r0, [r3, 0xE]\n\
|
||||
adds r2, r0, 0x1\n\
|
||||
strh r2, [r3, 0xE]\n\
|
||||
lsls r0, r2, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xD\n\
|
||||
bgt _08107C62\n\
|
||||
movs r1, 0x26\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
lsls r1, r0, 2\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r4\n\
|
||||
movs r0, 0x10\n\
|
||||
subs r0, r2\n\
|
||||
lsls r0, 8\n\
|
||||
orrs r2, r0\n\
|
||||
strh r2, [r1, 0xA]\n\
|
||||
ldrh r0, [r3, 0x10]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3, 0x10]\n\
|
||||
_08107C62:\n\
|
||||
movs r1, 0xE\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
cmp r0, 0x36\n\
|
||||
ble _08107C86\n\
|
||||
ldrh r2, [r3, 0x10]\n\
|
||||
subs r2, 0x1\n\
|
||||
strh r2, [r3, 0x10]\n\
|
||||
movs r1, 0x26\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
lsls r1, r0, 2\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r4\n\
|
||||
movs r0, 0x10\n\
|
||||
subs r0, r2\n\
|
||||
lsls r0, 8\n\
|
||||
orrs r2, r0\n\
|
||||
strh r2, [r1, 0xA]\n\
|
||||
_08107C86:\n\
|
||||
adds r0, r6, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r2, r0, r4\n\
|
||||
movs r3, 0x26\n\
|
||||
ldrsh r1, [r2, r3]\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r4\n\
|
||||
ldrh r0, [r0, 0xA]\n\
|
||||
movs r3, 0x1F\n\
|
||||
ands r3, r0\n\
|
||||
cmp r3, 0\n\
|
||||
bne _08107CA8\n\
|
||||
strh r3, [r2, 0x8]\n\
|
||||
ldr r0, =AnimTask_CreateSurfWave_Step2\n\
|
||||
str r0, [r2]\n\
|
||||
_08107CA8:\n\
|
||||
add sp, 0x10\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
static void AnimTask_CreateSurfWave_Step2(u8 taskId)
|
||||
{
|
||||
@@ -2014,216 +1544,51 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite)
|
||||
sprite->data[0]++;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff)
|
||||
{
|
||||
s16 something = sprite->data[0] / 2;
|
||||
s16 combinedX = sprite->pos1.x + sprite->pos2.x;
|
||||
s16 combinedY = sprite->pos1.y + sprite->pos2.y;
|
||||
s16 randomSomethingY = yDiff + (Random() % 10) - 5;
|
||||
s16 randomSomethingX = -xDiff + (Random() % 10) - 5;
|
||||
s16 i;
|
||||
s16 combinedX, combinedY;
|
||||
s16 i, something;
|
||||
s16 unusedVar = 1; //unusedVar is needed to match
|
||||
s16 somethingRandomX, somethingRandomY;
|
||||
u8 spriteId;
|
||||
|
||||
for (i = 0; i <= 0; i++)
|
||||
something = sprite->data[0] / 2;
|
||||
combinedX = sprite->pos1.x + sprite->pos2.x;
|
||||
combinedY = sprite->pos1.y + sprite->pos2.y;
|
||||
if (yDiff < 0)
|
||||
unusedVar *= -1; //Needed to Match
|
||||
somethingRandomY = yDiff + (Random() % 10) - 5;
|
||||
somethingRandomX = -xDiff + (Random() % 10) - 5;
|
||||
|
||||
for (i = 0; i < 1; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
|
||||
gSprites[spriteId].data[0] = 20;
|
||||
gSprites[spriteId].data[1] = randomSomethingY;
|
||||
gSprites[spriteId].data[1] = somethingRandomY;
|
||||
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||||
if (randomSomethingX < 0)
|
||||
gSprites[spriteId].data[2] = -randomSomethingX;
|
||||
if (somethingRandomX < 0)
|
||||
{
|
||||
gSprites[spriteId].data[2] = -somethingRandomX;
|
||||
}
|
||||
else
|
||||
gSprites[spriteId].data[2] = randomSomethingX;
|
||||
{
|
||||
gSprites[spriteId].data[2] = somethingRandomX;
|
||||
}
|
||||
}
|
||||
for (i = 0; i <= 0; i++)
|
||||
for (i = 0; i < 1; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
|
||||
gSprites[spriteId].data[0] = 20;
|
||||
gSprites[spriteId].data[1] = randomSomethingY;
|
||||
gSprites[spriteId].data[1] = somethingRandomY;
|
||||
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||||
if (randomSomethingX > 0)
|
||||
gSprites[spriteId].data[2] = -randomSomethingX;
|
||||
if (somethingRandomX > 0)
|
||||
{
|
||||
gSprites[spriteId].data[2] = -somethingRandomX;
|
||||
}
|
||||
else
|
||||
gSprites[spriteId].data[2] = randomSomethingX;
|
||||
{
|
||||
gSprites[spriteId].data[2] = somethingRandomX;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x18\n\
|
||||
adds r4, r1, 0\n\
|
||||
adds r5, r2, 0\n\
|
||||
movs r2, 0x2E\n\
|
||||
ldrsh r1, [r0, r2]\n\
|
||||
lsrs r2, r1, 31\n\
|
||||
adds r1, r2\n\
|
||||
lsls r1, 15\n\
|
||||
lsrs r1, 16\n\
|
||||
str r1, [sp]\n\
|
||||
ldrh r1, [r0, 0x24]\n\
|
||||
ldrh r3, [r0, 0x20]\n\
|
||||
adds r1, r3\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r1, 16\n\
|
||||
mov r8, r1\n\
|
||||
ldrh r1, [r0, 0x26]\n\
|
||||
ldrh r0, [r0, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
bl Random\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0xA\n\
|
||||
bl __umodsi3\n\
|
||||
adds r0, r5, r0\n\
|
||||
subs r0, 0x5\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
mov r9, r0\n\
|
||||
bl Random\n\
|
||||
negs r4, r4\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0xA\n\
|
||||
bl __umodsi3\n\
|
||||
adds r4, r0\n\
|
||||
subs r4, 0x5\n\
|
||||
lsls r4, 16\n\
|
||||
lsrs r7, r4, 16\n\
|
||||
movs r6, 0\n\
|
||||
mov r0, r8\n\
|
||||
lsls r0, 16\n\
|
||||
mov r8, r0\n\
|
||||
mov r1, r10\n\
|
||||
lsls r1, 16\n\
|
||||
str r1, [sp, 0xC]\n\
|
||||
ldr r2, [sp]\n\
|
||||
lsls r2, 16\n\
|
||||
str r2, [sp, 0x10]\n\
|
||||
asrs r1, 16\n\
|
||||
lsls r0, r7, 16\n\
|
||||
asrs r5, r0, 16\n\
|
||||
str r0, [sp, 0x14]\n\
|
||||
negs r3, r5\n\
|
||||
str r3, [sp, 0x4]\n\
|
||||
asrs r0, r2, 16\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
_08108DE2:\n\
|
||||
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
|
||||
mov r2, r8\n\
|
||||
asrs r1, r2, 16\n\
|
||||
mov r3, r10\n\
|
||||
asrs r2, r3, 16\n\
|
||||
movs r3, 0x82\n\
|
||||
bl CreateSprite\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
ldr r1, =gSprites\n\
|
||||
lsls r0, r2, 4\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 2\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0x14\n\
|
||||
strh r0, [r4, 0x2E]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r4, 0x30]\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSpriteSubpriority\n\
|
||||
subs r0, 0x1\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0x43\n\
|
||||
strb r0, [r1]\n\
|
||||
cmp r5, 0\n\
|
||||
bge _08108E30\n\
|
||||
mov r1, sp\n\
|
||||
ldrh r1, [r1, 0x4]\n\
|
||||
strh r1, [r4, 0x32]\n\
|
||||
b _08108E32\n\
|
||||
.pool\n\
|
||||
_08108E30:\n\
|
||||
strh r7, [r4, 0x32]\n\
|
||||
_08108E32:\n\
|
||||
lsls r0, r6, 16\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 9\n\
|
||||
adds r0, r2\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r0, 0\n\
|
||||
ble _08108DE2\n\
|
||||
movs r6, 0\n\
|
||||
ldr r3, [sp, 0xC]\n\
|
||||
asrs r1, r3, 16\n\
|
||||
ldr r0, [sp, 0x14]\n\
|
||||
asrs r5, r0, 16\n\
|
||||
negs r2, r5\n\
|
||||
str r2, [sp, 0x8]\n\
|
||||
ldr r3, [sp, 0x10]\n\
|
||||
asrs r0, r3, 16\n\
|
||||
subs r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
_08108E58:\n\
|
||||
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
|
||||
mov r2, r8\n\
|
||||
asrs r1, r2, 16\n\
|
||||
mov r3, r10\n\
|
||||
asrs r2, r3, 16\n\
|
||||
movs r3, 0x82\n\
|
||||
bl CreateSprite\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
ldr r1, =gSprites\n\
|
||||
lsls r0, r2, 4\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 2\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0x14\n\
|
||||
strh r0, [r4, 0x2E]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r4, 0x30]\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSpriteSubpriority\n\
|
||||
subs r0, 0x1\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0x43\n\
|
||||
strb r0, [r1]\n\
|
||||
cmp r5, 0\n\
|
||||
ble _08108EA8\n\
|
||||
mov r1, sp\n\
|
||||
ldrh r1, [r1, 0x8]\n\
|
||||
strh r1, [r4, 0x32]\n\
|
||||
b _08108EAA\n\
|
||||
.pool\n\
|
||||
_08108EA8:\n\
|
||||
strh r7, [r4, 0x32]\n\
|
||||
_08108EAA:\n\
|
||||
lsls r0, r6, 16\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 9\n\
|
||||
adds r0, r2\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r0, 0\n\
|
||||
ble _08108E58\n\
|
||||
add sp, 0x18\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user