Match Most of Remaining Functions

This commit is contained in:
PokeCodec
2020-08-14 22:02:49 -04:00
committed by PokeCodec
parent 4ac1b3fec5
commit 26ac9c5faf
14 changed files with 354 additions and 1570 deletions
+38 -38
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
{
+1 -1
View File
@@ -314,7 +314,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
void MusicPlayerJumpTableCopy(void)
{
asm("swi 0x2A");
asm("svc 0x2A");
}
void ClearChain(void *x)
+12 -12
View File
@@ -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
View File
@@ -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
View File
@@ -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