mirror of
https://github.com/pret/pokeruby.git
synced 2026-09-28 22:50:41 -04:00
merge
This commit is contained in:
Regular → Executable
+4180
-10
File diff suppressed because it is too large
Load Diff
+137
-137
@@ -4302,39 +4302,39 @@ __attribute__((naked))
|
||||
int state_to_direction(u8 a0, u8 a1, u8 a2)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
adds r0, r1, 0\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r2, 24\n\
|
||||
cmp r1, 0\n\
|
||||
beq _08060BFC\n\
|
||||
cmp r2, 0\n\
|
||||
beq _08060BFC\n\
|
||||
cmp r1, 0x4\n\
|
||||
bhi _08060BFC\n\
|
||||
cmp r2, 0x4\n\
|
||||
bls _08060C00\n\
|
||||
push {r4,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
adds r0, r1, 0\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r2, 24\n\
|
||||
cmp r1, 0\n\
|
||||
beq _08060BFC\n\
|
||||
cmp r2, 0\n\
|
||||
beq _08060BFC\n\
|
||||
cmp r1, 0x4\n\
|
||||
bhi _08060BFC\n\
|
||||
cmp r2, 0x4\n\
|
||||
bls _08060C00\n\
|
||||
_08060BFC:\n\
|
||||
movs r0, 0\n\
|
||||
b _08060C12\n\
|
||||
movs r0, 0\n\
|
||||
b _08060C12\n\
|
||||
_08060C00:\n\
|
||||
adds r1, r2, 0\n\
|
||||
bl zffu_offset_calc\n\
|
||||
ldr r2, _08060C18 @ =gUnknown_08375767\n\
|
||||
lsls r1, r4, 2\n\
|
||||
subs r1, 0x5\n\
|
||||
adds r0, r1\n\
|
||||
adds r0, r2\n\
|
||||
ldrb r0, [r0]\n\
|
||||
adds r1, r2, 0\n\
|
||||
bl zffu_offset_calc\n\
|
||||
ldr r2, _08060C18 @ =gUnknown_08375767\n\
|
||||
lsls r1, r4, 2\n\
|
||||
subs r1, 0x5\n\
|
||||
adds r0, r1\n\
|
||||
adds r0, r2\n\
|
||||
ldrb r0, [r0]\n\
|
||||
_08060C12:\n\
|
||||
pop {r4}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.align 2, 0\n\
|
||||
pop {r4}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.align 2, 0\n\
|
||||
_08060C18: .4byte gUnknown_08375767\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
@@ -6609,121 +6609,121 @@ void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
__attribute__((naked))
|
||||
void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) {
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r6,lr}\n\
|
||||
adds r5, r0, 0\n\
|
||||
adds r4, r1, 0\n\
|
||||
ldrb r1, [r5, 0x1]\n\
|
||||
movs r0, 0x41\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
ldrb r0, [r5, 0x5]\n\
|
||||
bl GetFieldObjectGraphicsInfo\n\
|
||||
adds r6, r0, 0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x3E\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0806354C\n\
|
||||
ldrh r1, [r4, 0x24]\n\
|
||||
ldrh r0, [r4, 0x20]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x28\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r2, [r2]\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
ldrh r1, [r4, 0x26]\n\
|
||||
ldrh r0, [r4, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x29\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r2, [r2]\n\
|
||||
adds r0, r2\n\
|
||||
b _08063574\n\
|
||||
.align 2, 0\n\
|
||||
push {r4-r6,lr}\n\
|
||||
adds r5, r0, 0\n\
|
||||
adds r4, r1, 0\n\
|
||||
ldrb r1, [r5, 0x1]\n\
|
||||
movs r0, 0x41\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
ldrb r0, [r5, 0x5]\n\
|
||||
bl GetFieldObjectGraphicsInfo\n\
|
||||
adds r6, r0, 0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x3E\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0806354C\n\
|
||||
ldrh r1, [r4, 0x24]\n\
|
||||
ldrh r0, [r4, 0x20]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x28\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r2, [r2]\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
ldrh r1, [r4, 0x26]\n\
|
||||
ldrh r0, [r4, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x29\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r2, [r2]\n\
|
||||
adds r0, r2\n\
|
||||
b _08063574\n\
|
||||
.align 2, 0\n\
|
||||
_08063544: .4byte gSpriteCoordOffsetX\n\
|
||||
_08063548: .4byte gSpriteCoordOffsetY\n\
|
||||
_0806354C:\n\
|
||||
ldrh r1, [r4, 0x24]\n\
|
||||
ldrh r0, [r4, 0x20]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x28\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
ldrh r1, [r4, 0x26]\n\
|
||||
ldrh r0, [r4, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x29\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r1, [r4, 0x24]\n\
|
||||
ldrh r0, [r4, 0x20]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x28\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
ldrh r1, [r4, 0x26]\n\
|
||||
ldrh r0, [r4, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x29\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
adds r0, r1\n\
|
||||
_08063574:\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r2, r0, 16\n\
|
||||
ldrh r0, [r6, 0x8]\n\
|
||||
adds r0, r3\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r1, r0, 16\n\
|
||||
ldrh r0, [r6, 0xA]\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
lsls r0, r3, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xFF\n\
|
||||
bgt _0806359C\n\
|
||||
lsls r0, r1, 16\n\
|
||||
asrs r0, 16\n\
|
||||
movs r1, 0x10\n\
|
||||
negs r1, r1\n\
|
||||
cmp r0, r1\n\
|
||||
bge _080635A4\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r2, r0, 16\n\
|
||||
ldrh r0, [r6, 0x8]\n\
|
||||
adds r0, r3\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r1, r0, 16\n\
|
||||
ldrh r0, [r6, 0xA]\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
lsls r0, r3, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xFF\n\
|
||||
bgt _0806359C\n\
|
||||
lsls r0, r1, 16\n\
|
||||
asrs r0, 16\n\
|
||||
movs r1, 0x10\n\
|
||||
negs r1, r1\n\
|
||||
cmp r0, r1\n\
|
||||
bge _080635A4\n\
|
||||
_0806359C:\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
movs r1, 0x40\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
movs r1, 0x40\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
_080635A4:\n\
|
||||
lsls r0, r2, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xAF\n\
|
||||
bgt _080635B8\n\
|
||||
lsls r0, r4, 16\n\
|
||||
asrs r0, 16\n\
|
||||
movs r1, 0x10\n\
|
||||
negs r1, r1\n\
|
||||
cmp r0, r1\n\
|
||||
bge _080635C0\n\
|
||||
lsls r0, r2, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xAF\n\
|
||||
bgt _080635B8\n\
|
||||
lsls r0, r4, 16\n\
|
||||
asrs r0, 16\n\
|
||||
movs r1, 0x10\n\
|
||||
negs r1, r1\n\
|
||||
cmp r0, r1\n\
|
||||
bge _080635C0\n\
|
||||
_080635B8:\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
movs r1, 0x40\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
movs r1, 0x40\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
_080635C0:\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -40,7 +40,6 @@ void fillSouthConnection(struct MapHeader *, struct MapHeader *, s32);
|
||||
void fillNorthConnection(struct MapHeader *, struct MapHeader *, s32);
|
||||
void fillWestConnection(struct MapHeader *, struct MapHeader *, s32);
|
||||
void fillEastConnection(struct MapHeader *, struct MapHeader *, s32);
|
||||
u32 GetBehaviorByMetatileId(u16 metatile);
|
||||
struct MapConnection *sub_8056A64(u8 direction, int x, int y);
|
||||
bool8 sub_8056ABC(u8 direction, int x, int y, struct MapConnection *connection);
|
||||
bool8 sub_8056B20(int x, int src_width, int dest_width, int offset);
|
||||
|
||||
+1
-1
@@ -611,7 +611,7 @@ u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6)
|
||||
return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6);
|
||||
}
|
||||
|
||||
int sub_8072AB0(u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
|
||||
int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
|
||||
{
|
||||
u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6);
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ extern u8 *gStdScripts[];
|
||||
extern u8 *gStdScripts_End[];
|
||||
|
||||
extern u8 * const gUnknown_083CE048[];
|
||||
extern struct Decoration gDecorations[];
|
||||
|
||||
// This is defined in here so the optimizer can't see its value when compiling
|
||||
// script.c.
|
||||
|
||||
+447
-448
@@ -12,10 +12,11 @@
|
||||
#include "map_constants.h"
|
||||
#include "task.h"
|
||||
#include "palette.h"
|
||||
#include "decoration.h"
|
||||
#include "field_weather.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "pokemon.h"
|
||||
#include "script.h"
|
||||
#include "decoration.h"
|
||||
|
||||
extern u8 gUnknown_020387DC;
|
||||
extern u16 gSpecialVar_0x8004;
|
||||
@@ -29,8 +30,6 @@ extern const struct
|
||||
u16 unk_083D1358_1;
|
||||
} gUnknown_083D1358[7];
|
||||
extern const u8 gUnknown_083D1374[4 * 16];
|
||||
extern void *gUnknown_0300485C;
|
||||
extern const u8 sub_807D770(void);
|
||||
extern const u8 gUnknown_083D13EC[12];
|
||||
extern const u8 sub_80BCCA4(u8);
|
||||
extern u8 gUnknown_081A2E14[];
|
||||
@@ -393,84 +392,84 @@ void sub_80BBCCC(u8 flagIn)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
sub sp, 0x4\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r8, r0\n\
|
||||
bl CurrentMapIsSecretBase\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080BBDBC\n\
|
||||
ldr r0, _080BBD70 @ =0x00004054\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
movs r1, 0\n\
|
||||
mov r0, sp\n\
|
||||
strh r1, [r0]\n\
|
||||
ldr r6, _080BBD74 @ =gSaveBlock1\n\
|
||||
mov r4, sp\n\
|
||||
ldr r0, _080BBD78 @ =0x00001a2a\n\
|
||||
adds r7, r6, r0\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
sub sp, 0x4\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r8, r0\n\
|
||||
bl CurrentMapIsSecretBase\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080BBDBC\n\
|
||||
ldr r0, _080BBD70 @ =0x00004054\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
movs r1, 0\n\
|
||||
mov r0, sp\n\
|
||||
strh r1, [r0]\n\
|
||||
ldr r6, _080BBD74 @ =gSaveBlock1\n\
|
||||
mov r4, sp\n\
|
||||
ldr r0, _080BBD78 @ =0x00001a2a\n\
|
||||
adds r7, r6, r0\n\
|
||||
_080BBCFC:\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 5\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r2, r0, r1\n\
|
||||
ldr r1, _080BBD7C @ =0x00001a1a\n\
|
||||
adds r0, r6, r1\n\
|
||||
adds r1, r2, r0\n\
|
||||
ldrb r0, [r1]\n\
|
||||
subs r0, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x77\n\
|
||||
bhi _080BBD3A\n\
|
||||
ldr r0, _080BBD80 @ =gDecorations\n\
|
||||
ldrb r3, [r1]\n\
|
||||
lsls r1, r3, 5\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r1, 0x11]\n\
|
||||
cmp r0, 0x4\n\
|
||||
beq _080BBD3A\n\
|
||||
adds r0, r2, r7\n\
|
||||
ldrb r2, [r0]\n\
|
||||
lsrs r0, r2, 4\n\
|
||||
adds r0, 0x7\n\
|
||||
movs r1, 0xF\n\
|
||||
ands r1, r2\n\
|
||||
adds r1, 0x7\n\
|
||||
adds r2, r3, 0\n\
|
||||
bl sub_80FF394\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 5\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r2, r0, r1\n\
|
||||
ldr r1, _080BBD7C @ =0x00001a1a\n\
|
||||
adds r0, r6, r1\n\
|
||||
adds r1, r2, r0\n\
|
||||
ldrb r0, [r1]\n\
|
||||
subs r0, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x77\n\
|
||||
bhi _080BBD3A\n\
|
||||
ldr r0, _080BBD80 @ =gDecorations\n\
|
||||
ldrb r3, [r1]\n\
|
||||
lsls r1, r3, 5\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r1, 0x11]\n\
|
||||
cmp r0, 0x4\n\
|
||||
beq _080BBD3A\n\
|
||||
adds r0, r2, r7\n\
|
||||
ldrb r2, [r0]\n\
|
||||
lsrs r0, r2, 4\n\
|
||||
adds r0, 0x7\n\
|
||||
movs r1, 0xF\n\
|
||||
ands r1, r2\n\
|
||||
adds r1, 0x7\n\
|
||||
adds r2, r3, 0\n\
|
||||
bl sub_80FF394\n\
|
||||
_080BBD3A:\n\
|
||||
ldrh r0, [r4]\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
strh r0, [r4]\n\
|
||||
cmp r0, 0xF\n\
|
||||
bls _080BBCFC\n\
|
||||
cmp r5, 0\n\
|
||||
beq _080BBD88\n\
|
||||
mov r4, sp\n\
|
||||
adds r4, 0x2\n\
|
||||
movs r2, 0x88\n\
|
||||
lsls r2, 2\n\
|
||||
mov r0, sp\n\
|
||||
adds r1, r4, 0\n\
|
||||
bl sub_80BB764\n\
|
||||
mov r0, sp\n\
|
||||
ldrh r0, [r0]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r1, 0x7\n\
|
||||
ldr r2, _080BBD84 @ =0x00000e21\n\
|
||||
bl MapGridSetMetatileIdAt\n\
|
||||
b _080BBDBC\n\
|
||||
.align 2, 0\n\
|
||||
ldrh r0, [r4]\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
strh r0, [r4]\n\
|
||||
cmp r0, 0xF\n\
|
||||
bls _080BBCFC\n\
|
||||
cmp r5, 0\n\
|
||||
beq _080BBD88\n\
|
||||
mov r4, sp\n\
|
||||
adds r4, 0x2\n\
|
||||
movs r2, 0x88\n\
|
||||
lsls r2, 2\n\
|
||||
mov r0, sp\n\
|
||||
adds r1, r4, 0\n\
|
||||
bl sub_80BB764\n\
|
||||
mov r0, sp\n\
|
||||
ldrh r0, [r0]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r1, 0x7\n\
|
||||
ldr r2, _080BBD84 @ =0x00000e21\n\
|
||||
bl MapGridSetMetatileIdAt\n\
|
||||
b _080BBDBC\n\
|
||||
.align 2, 0\n\
|
||||
_080BBD70: .4byte 0x00004054\n\
|
||||
_080BBD74: .4byte gSaveBlock1\n\
|
||||
_080BBD78: .4byte 0x00001a2a\n\
|
||||
@@ -478,37 +477,37 @@ _080BBD7C: .4byte 0x00001a1a\n\
|
||||
_080BBD80: .4byte gDecorations\n\
|
||||
_080BBD84: .4byte 0x00000e21\n\
|
||||
_080BBD88:\n\
|
||||
mov r0, r8\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBDBC\n\
|
||||
ldr r0, _080BBDC8 @ =0x00004089\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBDBC\n\
|
||||
mov r4, sp\n\
|
||||
adds r4, 0x2\n\
|
||||
movs r2, 0x88\n\
|
||||
lsls r2, 2\n\
|
||||
mov r0, sp\n\
|
||||
adds r1, r4, 0\n\
|
||||
bl sub_80BB764\n\
|
||||
mov r0, sp\n\
|
||||
ldrh r0, [r0]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r1, 0x7\n\
|
||||
ldr r2, _080BBDCC @ =0x00000e0a\n\
|
||||
bl MapGridSetMetatileIdAt\n\
|
||||
mov r0, r8\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBDBC\n\
|
||||
ldr r0, _080BBDC8 @ =0x00004089\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBDBC\n\
|
||||
mov r4, sp\n\
|
||||
adds r4, 0x2\n\
|
||||
movs r2, 0x88\n\
|
||||
lsls r2, 2\n\
|
||||
mov r0, sp\n\
|
||||
adds r1, r4, 0\n\
|
||||
bl sub_80BB764\n\
|
||||
mov r0, sp\n\
|
||||
ldrh r0, [r0]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r4]\n\
|
||||
adds r1, 0x7\n\
|
||||
ldr r2, _080BBDCC @ =0x00000e0a\n\
|
||||
bl MapGridSetMetatileIdAt\n\
|
||||
_080BBDBC:\n\
|
||||
add sp, 0x4\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
add sp, 0x4\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
_080BBDC8: .4byte 0x00004089\n\
|
||||
_080BBDCC: .4byte 0x00000e0a\n\
|
||||
.syntax divided\n");
|
||||
@@ -518,220 +517,220 @@ __attribute__((naked))
|
||||
void sub_80BBDD0(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x14\n\
|
||||
ldr r0, _080BBE00 @ =0x00004054\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
bl CurrentMapIsSecretBase\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _080BBE08\n\
|
||||
ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\
|
||||
str r0, [sp, 0x4]\n\
|
||||
adds r0, 0xC\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
movs r1, 0xC\n\
|
||||
str r1, [sp, 0xC]\n\
|
||||
b _080BBE1E\n\
|
||||
.align 2, 0\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x14\n\
|
||||
ldr r0, _080BBE00 @ =0x00004054\n\
|
||||
bl VarGet\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
bl CurrentMapIsSecretBase\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _080BBE08\n\
|
||||
ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\
|
||||
str r0, [sp, 0x4]\n\
|
||||
adds r0, 0xC\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
movs r1, 0xC\n\
|
||||
str r1, [sp, 0xC]\n\
|
||||
b _080BBE1E\n\
|
||||
.align 2, 0\n\
|
||||
_080BBE00: .4byte 0x00004054\n\
|
||||
_080BBE04: .4byte gSaveBlock1 + 0x2688\n\
|
||||
_080BBE08:\n\
|
||||
lsls r1, r4, 2\n\
|
||||
adds r1, r4\n\
|
||||
lsls r1, 5\n\
|
||||
ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\
|
||||
adds r2, r1, r0\n\
|
||||
str r2, [sp, 0x4]\n\
|
||||
adds r0, 0x10\n\
|
||||
adds r1, r0\n\
|
||||
str r1, [sp, 0x8]\n\
|
||||
movs r3, 0x10\n\
|
||||
str r3, [sp, 0xC]\n\
|
||||
lsls r1, r4, 2\n\
|
||||
adds r1, r4\n\
|
||||
lsls r1, 5\n\
|
||||
ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\
|
||||
adds r2, r1, r0\n\
|
||||
str r2, [sp, 0x4]\n\
|
||||
adds r0, 0x10\n\
|
||||
adds r1, r0\n\
|
||||
str r1, [sp, 0x8]\n\
|
||||
movs r3, 0x10\n\
|
||||
str r3, [sp, 0xC]\n\
|
||||
_080BBE1E:\n\
|
||||
movs r6, 0\n\
|
||||
ldr r4, [sp, 0xC]\n\
|
||||
cmp r6, r4\n\
|
||||
bcc _080BBE28\n\
|
||||
b _080BBF6C\n\
|
||||
movs r6, 0\n\
|
||||
ldr r4, [sp, 0xC]\n\
|
||||
cmp r6, r4\n\
|
||||
bcc _080BBE28\n\
|
||||
b _080BBF6C\n\
|
||||
_080BBE28:\n\
|
||||
ldr r5, _080BBF80 @ =gSaveBlock1\n\
|
||||
mov r10, r5\n\
|
||||
ldr r5, _080BBF80 @ =gSaveBlock1\n\
|
||||
mov r10, r5\n\
|
||||
_080BBE2C:\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
adds r0, r1, r6\n\
|
||||
ldrb r1, [r0]\n\
|
||||
mov r9, r0\n\
|
||||
adds r2, r6, 0x1\n\
|
||||
str r2, [sp, 0x10]\n\
|
||||
cmp r1, 0\n\
|
||||
bne _080BBE3E\n\
|
||||
b _080BBF5E\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
adds r0, r1, r6\n\
|
||||
ldrb r1, [r0]\n\
|
||||
mov r9, r0\n\
|
||||
adds r2, r6, 0x1\n\
|
||||
str r2, [sp, 0x10]\n\
|
||||
cmp r1, 0\n\
|
||||
bne _080BBE3E\n\
|
||||
b _080BBF5E\n\
|
||||
_080BBE3E:\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 5\n\
|
||||
ldr r3, _080BBF84 @ =gDecorations\n\
|
||||
adds r0, r3\n\
|
||||
ldrb r0, [r0, 0x11]\n\
|
||||
cmp r0, 0x4\n\
|
||||
beq _080BBE4E\n\
|
||||
b _080BBF5E\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 5\n\
|
||||
ldr r3, _080BBF84 @ =gDecorations\n\
|
||||
adds r0, r3\n\
|
||||
ldrb r0, [r0, 0x11]\n\
|
||||
cmp r0, 0x4\n\
|
||||
beq _080BBE4E\n\
|
||||
b _080BBF5E\n\
|
||||
_080BBE4E:\n\
|
||||
movs r5, 0\n\
|
||||
ldr r0, _080BBF88 @ =gMapHeader\n\
|
||||
ldr r2, [r0, 0x4]\n\
|
||||
ldrb r3, [r2]\n\
|
||||
mov r8, r0\n\
|
||||
cmp r5, r3\n\
|
||||
bcs _080BBE8E\n\
|
||||
ldr r0, [r2, 0x4]\n\
|
||||
ldrh r1, [r0, 0x14]\n\
|
||||
ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r4]\n\
|
||||
adds r0, 0xAE\n\
|
||||
adds r7, r4, 0\n\
|
||||
cmp r1, r0\n\
|
||||
beq _080BBE8E\n\
|
||||
adds r4, r2, 0\n\
|
||||
adds r2, r3, 0\n\
|
||||
movs r5, 0\n\
|
||||
ldr r0, _080BBF88 @ =gMapHeader\n\
|
||||
ldr r2, [r0, 0x4]\n\
|
||||
ldrb r3, [r2]\n\
|
||||
mov r8, r0\n\
|
||||
cmp r5, r3\n\
|
||||
bcs _080BBE8E\n\
|
||||
ldr r0, [r2, 0x4]\n\
|
||||
ldrh r1, [r0, 0x14]\n\
|
||||
ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r4]\n\
|
||||
adds r0, 0xAE\n\
|
||||
adds r7, r4, 0\n\
|
||||
cmp r1, r0\n\
|
||||
beq _080BBE8E\n\
|
||||
adds r4, r2, 0\n\
|
||||
adds r2, r3, 0\n\
|
||||
_080BBE70:\n\
|
||||
adds r0, r5, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r5, r0, 24\n\
|
||||
cmp r5, r2\n\
|
||||
bcs _080BBE8E\n\
|
||||
ldr r1, [r4, 0x4]\n\
|
||||
lsls r0, r5, 1\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r1, [r0, 0x14]\n\
|
||||
ldrh r0, [r7]\n\
|
||||
adds r0, 0xAE\n\
|
||||
cmp r1, r0\n\
|
||||
bne _080BBE70\n\
|
||||
adds r0, r5, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r5, r0, 24\n\
|
||||
cmp r5, r2\n\
|
||||
bcs _080BBE8E\n\
|
||||
ldr r1, [r4, 0x4]\n\
|
||||
lsls r0, r5, 1\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r1, [r0, 0x14]\n\
|
||||
ldrh r0, [r7]\n\
|
||||
adds r0, 0xAE\n\
|
||||
cmp r1, r0\n\
|
||||
bne _080BBE70\n\
|
||||
_080BBE8E:\n\
|
||||
mov r1, r8\n\
|
||||
ldr r0, [r1, 0x4]\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r5, r0\n\
|
||||
beq _080BBF5E\n\
|
||||
ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\
|
||||
ldr r2, [sp, 0x8]\n\
|
||||
adds r1, r2, r6\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsrs r0, 4\n\
|
||||
strh r0, [r7]\n\
|
||||
ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\
|
||||
ldrb r1, [r1]\n\
|
||||
movs r0, 0xF\n\
|
||||
ands r0, r1\n\
|
||||
strh r0, [r6]\n\
|
||||
ldrh r0, [r7]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r6]\n\
|
||||
adds r1, 0x7\n\
|
||||
bl MapGridGetMetatileBehaviorAt\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80572D8\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
beq _080BBEDA\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80572EC\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBF5E\n\
|
||||
mov r1, r8\n\
|
||||
ldr r0, [r1, 0x4]\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r5, r0\n\
|
||||
beq _080BBF5E\n\
|
||||
ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\
|
||||
ldr r2, [sp, 0x8]\n\
|
||||
adds r1, r2, r6\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsrs r0, 4\n\
|
||||
strh r0, [r7]\n\
|
||||
ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\
|
||||
ldrb r1, [r1]\n\
|
||||
movs r0, 0xF\n\
|
||||
ands r0, r1\n\
|
||||
strh r0, [r6]\n\
|
||||
ldrh r0, [r7]\n\
|
||||
adds r0, 0x7\n\
|
||||
ldrh r1, [r6]\n\
|
||||
adds r1, 0x7\n\
|
||||
bl MapGridGetMetatileBehaviorAt\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80572D8\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
beq _080BBEDA\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80572EC\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _080BBF5E\n\
|
||||
_080BBEDA:\n\
|
||||
mov r3, r8\n\
|
||||
ldr r0, [r3, 0x4]\n\
|
||||
ldr r1, [r0, 0x4]\n\
|
||||
lsls r4, r5, 1\n\
|
||||
adds r4, r5\n\
|
||||
lsls r4, 3\n\
|
||||
adds r1, r4, r1\n\
|
||||
ldr r5, _080BBF98 @ =0x00003f20\n\
|
||||
adds r0, r5, 0\n\
|
||||
ldrb r1, [r1, 0x1]\n\
|
||||
adds r0, r1\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
strh r0, [r1]\n\
|
||||
ldrh r0, [r1]\n\
|
||||
mov r2, r9\n\
|
||||
ldrb r1, [r2]\n\
|
||||
lsls r1, 5\n\
|
||||
ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\
|
||||
adds r1, r3\n\
|
||||
ldr r1, [r1]\n\
|
||||
ldrh r1, [r1]\n\
|
||||
bl VarSet\n\
|
||||
mov r5, r8\n\
|
||||
ldr r0, [r5, 0x4]\n\
|
||||
ldr r0, [r0, 0x4]\n\
|
||||
adds r4, r0\n\
|
||||
ldrb r0, [r4]\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
strh r0, [r1]\n\
|
||||
ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r2]\n\
|
||||
adds r0, 0xAE\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
bl FlagReset\n\
|
||||
ldr r3, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r3]\n\
|
||||
mov r4, r10\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
ldrb r2, [r4, 0x4]\n\
|
||||
bl show_sprite\n\
|
||||
ldr r5, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r5]\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
ldrb r2, [r4, 0x4]\n\
|
||||
movs r4, 0\n\
|
||||
ldrsh r3, [r7, r4]\n\
|
||||
movs r5, 0\n\
|
||||
ldrsh r4, [r6, r5]\n\
|
||||
str r4, [sp]\n\
|
||||
bl sub_805C0F8\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r1]\n\
|
||||
mov r2, r10\n\
|
||||
ldrb r1, [r2, 0x5]\n\
|
||||
ldrb r2, [r2, 0x4]\n\
|
||||
bl sub_805C78C\n\
|
||||
ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r3]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3]\n\
|
||||
mov r3, r8\n\
|
||||
ldr r0, [r3, 0x4]\n\
|
||||
ldr r1, [r0, 0x4]\n\
|
||||
lsls r4, r5, 1\n\
|
||||
adds r4, r5\n\
|
||||
lsls r4, 3\n\
|
||||
adds r1, r4, r1\n\
|
||||
ldr r5, _080BBF98 @ =0x00003f20\n\
|
||||
adds r0, r5, 0\n\
|
||||
ldrb r1, [r1, 0x1]\n\
|
||||
adds r0, r1\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
strh r0, [r1]\n\
|
||||
ldrh r0, [r1]\n\
|
||||
mov r2, r9\n\
|
||||
ldrb r1, [r2]\n\
|
||||
lsls r1, 5\n\
|
||||
ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\
|
||||
adds r1, r3\n\
|
||||
ldr r1, [r1]\n\
|
||||
ldrh r1, [r1]\n\
|
||||
bl VarSet\n\
|
||||
mov r5, r8\n\
|
||||
ldr r0, [r5, 0x4]\n\
|
||||
ldr r0, [r0, 0x4]\n\
|
||||
adds r4, r0\n\
|
||||
ldrb r0, [r4]\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
strh r0, [r1]\n\
|
||||
ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r2]\n\
|
||||
adds r0, 0xAE\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
bl FlagReset\n\
|
||||
ldr r3, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r3]\n\
|
||||
mov r4, r10\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
ldrb r2, [r4, 0x4]\n\
|
||||
bl show_sprite\n\
|
||||
ldr r5, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r5]\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
ldrb r2, [r4, 0x4]\n\
|
||||
movs r4, 0\n\
|
||||
ldrsh r3, [r7, r4]\n\
|
||||
movs r5, 0\n\
|
||||
ldrsh r4, [r6, r5]\n\
|
||||
str r4, [sp]\n\
|
||||
bl sub_805C0F8\n\
|
||||
ldr r1, _080BBF9C @ =gScriptResult\n\
|
||||
ldrb r0, [r1]\n\
|
||||
mov r2, r10\n\
|
||||
ldrb r1, [r2, 0x5]\n\
|
||||
ldrb r2, [r2, 0x4]\n\
|
||||
bl sub_805C78C\n\
|
||||
ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\
|
||||
ldrh r0, [r3]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3]\n\
|
||||
_080BBF5E:\n\
|
||||
ldr r4, [sp, 0x10]\n\
|
||||
lsls r0, r4, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
ldr r5, [sp, 0xC]\n\
|
||||
cmp r6, r5\n\
|
||||
bcs _080BBF6C\n\
|
||||
b _080BBE2C\n\
|
||||
ldr r4, [sp, 0x10]\n\
|
||||
lsls r0, r4, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
ldr r5, [sp, 0xC]\n\
|
||||
cmp r6, r5\n\
|
||||
bcs _080BBF6C\n\
|
||||
b _080BBE2C\n\
|
||||
_080BBF6C:\n\
|
||||
add sp, 0x14\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\
|
||||
.align 2, 0\n\
|
||||
add sp, 0x14\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\
|
||||
.align 2, 0\n\
|
||||
_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\
|
||||
_080BBF80: .4byte gSaveBlock1\n\
|
||||
_080BBF84: .4byte gDecorations\n\
|
||||
@@ -902,148 +901,148 @@ __attribute__((naked))
|
||||
void sub_80BC300(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0xC\n\
|
||||
movs r0, 0\n\
|
||||
mov r10, r0\n\
|
||||
movs r6, 0\n\
|
||||
mov r9, r6\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0xC\n\
|
||||
movs r0, 0\n\
|
||||
mov r10, r0\n\
|
||||
movs r6, 0\n\
|
||||
mov r9, r6\n\
|
||||
_080BC314:\n\
|
||||
movs r4, 0\n\
|
||||
lsls r3, r6, 2\n\
|
||||
lsls r2, r6, 1\n\
|
||||
ldr r7, _080BC424 @ =gPlayerParty\n\
|
||||
adds r1, r6, 0x1\n\
|
||||
str r1, [sp]\n\
|
||||
adds r1, r3, 0\n\
|
||||
movs r4, 0\n\
|
||||
lsls r3, r6, 2\n\
|
||||
lsls r2, r6, 1\n\
|
||||
ldr r7, _080BC424 @ =gPlayerParty\n\
|
||||
adds r1, r6, 0x1\n\
|
||||
str r1, [sp]\n\
|
||||
adds r1, r3, 0\n\
|
||||
_080BC322:\n\
|
||||
adds r0, r1, r4\n\
|
||||
lsls r0, 1\n\
|
||||
ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\
|
||||
adds r0, r5, r0\n\
|
||||
mov r5, r9\n\
|
||||
strh r5, [r0]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
cmp r4, 0x3\n\
|
||||
bls _080BC322\n\
|
||||
ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\
|
||||
adds r0, r1, r2\n\
|
||||
strh r5, [r0]\n\
|
||||
ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\
|
||||
adds r0, r5, r2\n\
|
||||
mov r1, r9\n\
|
||||
strh r1, [r0]\n\
|
||||
ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\
|
||||
adds r0, r2, r6\n\
|
||||
mov r5, r9\n\
|
||||
strb r5, [r0]\n\
|
||||
ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\
|
||||
adds r0, r1, r3\n\
|
||||
mov r2, r9\n\
|
||||
str r2, [r0]\n\
|
||||
ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\
|
||||
adds r0, r3, r6\n\
|
||||
strb r2, [r0]\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r5, r6, 0\n\
|
||||
muls r5, r0\n\
|
||||
adds r4, r5, r7\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080BC408\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x2D\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
bne _080BC408\n\
|
||||
movs r4, 0\n\
|
||||
mov r0, r10\n\
|
||||
lsls r0, 2\n\
|
||||
mov r8, r0\n\
|
||||
mov r1, r10\n\
|
||||
lsls r7, r1, 1\n\
|
||||
adds r1, 0x1\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
ldr r2, _080BC424 @ =gPlayerParty\n\
|
||||
adds r0, r1, r4\n\
|
||||
lsls r0, 1\n\
|
||||
ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\
|
||||
adds r0, r5, r0\n\
|
||||
mov r5, r9\n\
|
||||
strh r5, [r0]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
cmp r4, 0x3\n\
|
||||
bls _080BC322\n\
|
||||
ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\
|
||||
adds r0, r1, r2\n\
|
||||
strh r5, [r0]\n\
|
||||
ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\
|
||||
adds r0, r5, r2\n\
|
||||
mov r1, r9\n\
|
||||
strh r1, [r0]\n\
|
||||
ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\
|
||||
adds r0, r2, r6\n\
|
||||
mov r5, r9\n\
|
||||
strb r5, [r0]\n\
|
||||
ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\
|
||||
adds r0, r1, r3\n\
|
||||
mov r2, r9\n\
|
||||
str r2, [r0]\n\
|
||||
ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\
|
||||
adds r0, r3, r6\n\
|
||||
strb r2, [r0]\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r5, r6, 0\n\
|
||||
muls r5, r0\n\
|
||||
adds r4, r5, r7\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
beq _080BC408\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x2D\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
bne _080BC408\n\
|
||||
movs r4, 0\n\
|
||||
mov r0, r10\n\
|
||||
lsls r0, 2\n\
|
||||
mov r8, r0\n\
|
||||
mov r1, r10\n\
|
||||
lsls r7, r1, 1\n\
|
||||
adds r1, 0x1\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
ldr r2, _080BC424 @ =gPlayerParty\n\
|
||||
_080BC38E:\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0xD\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r2, [sp, 0x8]\n\
|
||||
bl GetMonData\n\
|
||||
mov r3, r8\n\
|
||||
adds r1, r3, r4\n\
|
||||
lsls r1, 1\n\
|
||||
ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\
|
||||
adds r1, r3, r1\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
ldr r2, [sp, 0x8]\n\
|
||||
cmp r4, 0x3\n\
|
||||
bls _080BC38E\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r4, r6, 0\n\
|
||||
muls r4, r0\n\
|
||||
ldr r0, _080BC424 @ =gPlayerParty\n\
|
||||
adds r4, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\
|
||||
adds r1, r5, r7\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xC\n\
|
||||
bl GetMonData\n\
|
||||
ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\
|
||||
adds r1, r2, r7\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x38\n\
|
||||
bl GetMonData\n\
|
||||
ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\
|
||||
add r1, r10\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0\n\
|
||||
bl GetMonData\n\
|
||||
ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\
|
||||
add r1, r8\n\
|
||||
str r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80BC298\n\
|
||||
ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\
|
||||
add r1, r10\n\
|
||||
strb r0, [r1]\n\
|
||||
ldr r3, [sp, 0x4]\n\
|
||||
lsls r0, r3, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
mov r10, r0\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0xD\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r2, [sp, 0x8]\n\
|
||||
bl GetMonData\n\
|
||||
mov r3, r8\n\
|
||||
adds r1, r3, r4\n\
|
||||
lsls r1, 1\n\
|
||||
ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\
|
||||
adds r1, r3, r1\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r4, r0, 16\n\
|
||||
ldr r2, [sp, 0x8]\n\
|
||||
cmp r4, 0x3\n\
|
||||
bls _080BC38E\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r4, r6, 0\n\
|
||||
muls r4, r0\n\
|
||||
ldr r0, _080BC424 @ =gPlayerParty\n\
|
||||
adds r4, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\
|
||||
adds r1, r5, r7\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xC\n\
|
||||
bl GetMonData\n\
|
||||
ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\
|
||||
adds r1, r2, r7\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x38\n\
|
||||
bl GetMonData\n\
|
||||
ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\
|
||||
add r1, r10\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0\n\
|
||||
bl GetMonData\n\
|
||||
ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\
|
||||
add r1, r8\n\
|
||||
str r0, [r1]\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl sub_80BC298\n\
|
||||
ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\
|
||||
add r1, r10\n\
|
||||
strb r0, [r1]\n\
|
||||
ldr r3, [sp, 0x4]\n\
|
||||
lsls r0, r3, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
mov r10, r0\n\
|
||||
_080BC408:\n\
|
||||
ldr r5, [sp]\n\
|
||||
lsls r0, r5, 16\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r6, 0x5\n\
|
||||
bls _080BC314\n\
|
||||
add sp, 0xC\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\
|
||||
.align 2, 0\n\
|
||||
ldr r5, [sp]\n\
|
||||
lsls r0, r5, 16\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r6, 0x5\n\
|
||||
bls _080BC314\n\
|
||||
add sp, 0xC\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\
|
||||
.align 2, 0\n\
|
||||
_080BC424: .4byte gPlayerParty\n\
|
||||
_080BC428: .4byte gSaveBlock1 + 0x1A54\n\
|
||||
_080BC42C: .4byte gSaveBlock1 + 0x1A84\n\
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+345
-345
@@ -6,41 +6,41 @@ extern const u8 gSpriteDimensions[3][4][2];
|
||||
extern const u16 gCrc16Table[];
|
||||
|
||||
u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) {
|
||||
u8 sprite = CreateSprite(&gInvisibleSpriteTemplate, 248, 168, 14);
|
||||
gSprites[sprite].invisible = TRUE;
|
||||
gSprites[sprite].callback = callback;
|
||||
return sprite;
|
||||
u8 sprite = CreateSprite(&gInvisibleSpriteTemplate, 248, 168, 14);
|
||||
gSprites[sprite].invisible = TRUE;
|
||||
gSprites[sprite].callback = callback;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
void StoreWordInTwoHalfwords(u16 *h, u32 w) {
|
||||
h[0] = (u16)(w);
|
||||
h[1] = (u16)(w >> 16);
|
||||
h[0] = (u16)(w);
|
||||
h[1] = (u16)(w >> 16);
|
||||
}
|
||||
|
||||
void LoadWordFromTwoHalfwords(u16 *h, u32 *w) {
|
||||
*w = h[0] | (s16)h[1] << 16;
|
||||
*w = h[0] | (s16)h[1] << 16;
|
||||
}
|
||||
|
||||
void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) {
|
||||
src->texX = texX;
|
||||
src->texY = texY;
|
||||
src->scrX = scrX;
|
||||
src->scrY = scrY;
|
||||
src->sx = sx;
|
||||
src->sy = sy;
|
||||
src->alpha = alpha;
|
||||
src->texX = texX;
|
||||
src->texY = texY;
|
||||
src->scrX = scrX;
|
||||
src->scrY = scrY;
|
||||
src->sx = sx;
|
||||
src->sy = sy;
|
||||
src->alpha = alpha;
|
||||
}
|
||||
|
||||
void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) {
|
||||
struct BgAffineSrcData src;
|
||||
SetBgAffineStruct(
|
||||
&src,
|
||||
texX, texY,
|
||||
scrX, scrY,
|
||||
sx, sy,
|
||||
alpha
|
||||
);
|
||||
BgAffineSet(&src, dest, 1);
|
||||
struct BgAffineSrcData src;
|
||||
SetBgAffineStruct(
|
||||
&src,
|
||||
texX, texY,
|
||||
scrX, scrY,
|
||||
sx, sy,
|
||||
alpha
|
||||
);
|
||||
BgAffineSet(&src, dest, 1);
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
@@ -48,342 +48,342 @@ void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s
|
||||
// Functionally equivalent.
|
||||
// Only the two yflip loops don't match.
|
||||
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) {
|
||||
u8 x, y;
|
||||
s8 i, j;
|
||||
u8 xflip[32];
|
||||
u8 h = gSpriteDimensions[shape][size][1];
|
||||
u8 w = gSpriteDimensions[shape][size][0];
|
||||
for (y = 0; y < h; y++) {
|
||||
int filler = 32 - w;
|
||||
for (x = 0; x < w; x++) {
|
||||
int tile = (*tilemap & 0x3ff) * 32;
|
||||
int attr = *tilemap & 0xc00;
|
||||
if (attr == 0) {
|
||||
void *src = tiles + tile;
|
||||
void *dest = output;
|
||||
int length = 32;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
} else if (attr == 0x800) { // yflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
void *src = tiles;
|
||||
void *dest = output;
|
||||
int length = 4;
|
||||
// this is likely wrong, but makes it closer to matching
|
||||
src += tile + (7 - i) * 4;
|
||||
dest += i * 4;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
} else { // xflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
u8 i2 = i * 4;
|
||||
xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4;
|
||||
xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4;
|
||||
}
|
||||
}
|
||||
if (*tilemap & 0x800) { // yflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
void *src = xflip + (7-i) * 4;
|
||||
void *dest = output + i*4;
|
||||
int length = 4;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
} else {
|
||||
void *src = xflip;
|
||||
void *dest = output;
|
||||
int length = 32;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
}
|
||||
tilemap++;
|
||||
output += 32;
|
||||
}
|
||||
tilemap += filler;
|
||||
}
|
||||
u8 x, y;
|
||||
s8 i, j;
|
||||
u8 xflip[32];
|
||||
u8 h = gSpriteDimensions[shape][size][1];
|
||||
u8 w = gSpriteDimensions[shape][size][0];
|
||||
for (y = 0; y < h; y++) {
|
||||
int filler = 32 - w;
|
||||
for (x = 0; x < w; x++) {
|
||||
int tile = (*tilemap & 0x3ff) * 32;
|
||||
int attr = *tilemap & 0xc00;
|
||||
if (attr == 0) {
|
||||
void *src = tiles + tile;
|
||||
void *dest = output;
|
||||
int length = 32;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
} else if (attr == 0x800) { // yflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
void *src = tiles;
|
||||
void *dest = output;
|
||||
int length = 4;
|
||||
// this is likely wrong, but makes it closer to matching
|
||||
src += tile + (7 - i) * 4;
|
||||
dest += i * 4;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
} else { // xflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
u8 i2 = i * 4;
|
||||
xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4;
|
||||
xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4;
|
||||
}
|
||||
}
|
||||
if (*tilemap & 0x800) { // yflip
|
||||
for (i = 0; i < 8; i++) {
|
||||
void *src = xflip + (7-i) * 4;
|
||||
void *dest = output + i*4;
|
||||
int length = 4;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
} else {
|
||||
void *src = xflip;
|
||||
void *dest = output;
|
||||
int length = 32;
|
||||
DmaCopy32(3, src, dest, length);
|
||||
}
|
||||
}
|
||||
tilemap++;
|
||||
output += 32;
|
||||
}
|
||||
tilemap += filler;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) {
|
||||
asm("\n"
|
||||
" .syntax unified\n"
|
||||
" push {r4-r7,lr}\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r6, r9\n"
|
||||
" mov r5, r8\n"
|
||||
" push {r5-r7}\n"
|
||||
" sub sp, 0x3C\n"
|
||||
" str r2, [sp, 0x20]\n"
|
||||
" adds r4, r3, 0\n"
|
||||
" ldr r7, [sp, 0x5C]\n"
|
||||
" lsls r0, 24\n"
|
||||
" lsls r1, 24\n"
|
||||
" ldr r2, _08041008 @ =gSpriteDimensions\n"
|
||||
" lsrs r1, 23\n"
|
||||
" lsrs r0, 21\n"
|
||||
" adds r1, r0\n"
|
||||
" adds r0, r2, 0x1\n"
|
||||
" adds r0, r1, r0\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" str r0, [sp, 0x24]\n"
|
||||
" adds r1, r2\n"
|
||||
" ldrb r1, [r1]\n"
|
||||
" str r1, [sp, 0x28]\n"
|
||||
" movs r1, 0\n"
|
||||
" cmp r1, r0\n"
|
||||
" bcc _08040FB4\n"
|
||||
" b _08041136\n"
|
||||
"_08040FB4:\n"
|
||||
" movs r0, 0x20\n"
|
||||
" ldr r2, [sp, 0x28]\n"
|
||||
" subs r0, r2\n"
|
||||
" lsls r0, 1\n"
|
||||
" str r0, [sp, 0x2C]\n"
|
||||
"_08040FBE:\n"
|
||||
" movs r2, 0\n"
|
||||
" adds r1, 0x1\n"
|
||||
" str r1, [sp, 0x34]\n"
|
||||
" ldr r3, [sp, 0x28]\n"
|
||||
" cmp r2, r3\n"
|
||||
" bcc _08040FCC\n"
|
||||
" b _08041124\n"
|
||||
"_08040FCC:\n"
|
||||
" ldr r0, _0804100C @ =0x040000d4\n"
|
||||
" mov r8, r0\n"
|
||||
"_08040FD0:\n"
|
||||
" ldrh r1, [r4]\n"
|
||||
" ldr r0, _08041010 @ =0x000003ff\n"
|
||||
" ands r0, r1\n"
|
||||
" lsls r0, 5\n"
|
||||
" mov r12, r0\n"
|
||||
" movs r0, 0xC0\n"
|
||||
" lsls r0, 4\n"
|
||||
" ands r0, r1\n"
|
||||
" mov r3, sp\n"
|
||||
" strh r1, [r3, 0x38]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08041018\n"
|
||||
" ldr r0, [sp, 0x20]\n"
|
||||
" add r0, r12\n"
|
||||
" mov r1, r8\n"
|
||||
" str r0, [r1]\n"
|
||||
" str r7, [r1, 0x4]\n"
|
||||
" ldr r3, _08041014 @ =0x84000008\n"
|
||||
" str r3, [r1, 0x8]\n"
|
||||
" ldr r0, [r1, 0x8]\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" adds r7, 0x20\n"
|
||||
" mov r10, r7\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_08041008: .4byte gSpriteDimensions\n"
|
||||
"_0804100C: .4byte 0x040000d4\n"
|
||||
"_08041010: .4byte 0x000003ff\n"
|
||||
"_08041014: .4byte 0x84000008\n"
|
||||
"_08041018:\n"
|
||||
" movs r1, 0x80\n"
|
||||
" lsls r1, 4\n"
|
||||
" cmp r0, r1\n"
|
||||
" bne _08041068\n"
|
||||
" movs r3, 0\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" movs r0, 0x20\n"
|
||||
" adds r0, r7\n"
|
||||
" mov r10, r0\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
" ldr r4, _08041060 @ =0x040000d4\n"
|
||||
" ldr r6, _08041064 @ =0x84000001\n"
|
||||
" movs r5, 0x7\n"
|
||||
"_08041036:\n"
|
||||
" lsls r2, r3, 24\n"
|
||||
" asrs r2, 24\n"
|
||||
" subs r0, r5, r2\n"
|
||||
" lsls r0, 2\n"
|
||||
" add r0, r12\n"
|
||||
" ldr r1, [sp, 0x20]\n"
|
||||
" adds r0, r1, r0\n"
|
||||
" lsls r1, r2, 2\n"
|
||||
" adds r1, r7, r1\n"
|
||||
" str r0, [r4]\n"
|
||||
" str r1, [r4, 0x4]\n"
|
||||
" str r6, [r4, 0x8]\n"
|
||||
" ldr r0, [r4, 0x8]\n"
|
||||
" adds r2, 0x1\n"
|
||||
" lsls r2, 24\n"
|
||||
" lsrs r3, r2, 24\n"
|
||||
" asrs r2, 24\n"
|
||||
" cmp r2, 0x7\n"
|
||||
" ble _08041036\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_08041060: .4byte 0x040000d4\n"
|
||||
"_08041064: .4byte 0x84000001\n"
|
||||
"_08041068:\n"
|
||||
" movs r3, 0\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" movs r0, 0x20\n"
|
||||
" adds r0, r7\n"
|
||||
" mov r10, r0\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
"_08041078:\n"
|
||||
" movs r2, 0\n"
|
||||
" lsls r4, r3, 24\n"
|
||||
" lsls r0, r4, 2\n"
|
||||
" lsrs r0, 24\n"
|
||||
" adds r6, r0, 0x3\n"
|
||||
" mov r1, r12\n"
|
||||
" adds r5, r1, r0\n"
|
||||
"_08041086:\n"
|
||||
" lsls r1, r2, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" subs r0, r6, r1\n"
|
||||
" mov r2, sp\n"
|
||||
" adds r3, r2, r0\n"
|
||||
" adds r0, r5, r1\n"
|
||||
" ldr r2, [sp, 0x20]\n"
|
||||
" adds r0, r2, r0\n"
|
||||
" ldrb r2, [r0]\n"
|
||||
" movs r0, 0xF\n"
|
||||
" ands r0, r2\n"
|
||||
" lsls r0, 4\n"
|
||||
" lsrs r2, 4\n"
|
||||
" orrs r0, r2\n"
|
||||
" strb r0, [r3]\n"
|
||||
" adds r1, 0x1\n"
|
||||
" lsls r1, 24\n"
|
||||
" lsrs r2, r1, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" cmp r1, 0x3\n"
|
||||
" ble _08041086\n"
|
||||
" movs r3, 0x80\n"
|
||||
" lsls r3, 17\n"
|
||||
" adds r0, r4, r3\n"
|
||||
" lsrs r3, r0, 24\n"
|
||||
" asrs r0, 24\n"
|
||||
" cmp r0, 0x7\n"
|
||||
" ble _08041078\n"
|
||||
" movs r0, 0x80\n"
|
||||
" lsls r0, 4\n"
|
||||
" mov r1, sp\n"
|
||||
" ldrh r1, [r1, 0x38]\n"
|
||||
" ands r0, r1\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08041104\n"
|
||||
" movs r3, 0\n"
|
||||
" ldr r4, _080410FC @ =0x040000d4\n"
|
||||
" ldr r6, _08041100 @ =0x84000001\n"
|
||||
" movs r5, 0x7\n"
|
||||
"_080410D4:\n"
|
||||
" lsls r1, r3, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" subs r0, r5, r1\n"
|
||||
" lsls r0, 2\n"
|
||||
" mov r3, sp\n"
|
||||
" adds r2, r3, r0\n"
|
||||
" lsls r0, r1, 2\n"
|
||||
" adds r0, r7, r0\n"
|
||||
" str r2, [r4]\n"
|
||||
" str r0, [r4, 0x4]\n"
|
||||
" str r6, [r4, 0x8]\n"
|
||||
" ldr r0, [r4, 0x8]\n"
|
||||
" adds r1, 0x1\n"
|
||||
" lsls r1, 24\n"
|
||||
" lsrs r3, r1, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" cmp r1, 0x7\n"
|
||||
" ble _080410D4\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_080410FC: .4byte 0x040000d4\n"
|
||||
"_08041100: .4byte 0x84000001\n"
|
||||
"_08041104:\n"
|
||||
" mov r0, sp\n"
|
||||
" mov r1, r8\n"
|
||||
" str r0, [r1]\n"
|
||||
" str r7, [r1, 0x4]\n"
|
||||
" ldr r2, _08041148 @ =0x84000008\n"
|
||||
" str r2, [r1, 0x8]\n"
|
||||
" ldr r0, [r1, 0x8]\n"
|
||||
"_08041112:\n"
|
||||
" ldr r4, [sp, 0x30]\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r3, r9\n"
|
||||
" lsls r0, r3, 24\n"
|
||||
" lsrs r2, r0, 24\n"
|
||||
" ldr r0, [sp, 0x28]\n"
|
||||
" cmp r2, r0\n"
|
||||
" bcs _08041124\n"
|
||||
" b _08040FD0\n"
|
||||
"_08041124:\n"
|
||||
" ldr r1, [sp, 0x2C]\n"
|
||||
" adds r4, r1\n"
|
||||
" ldr r2, [sp, 0x34]\n"
|
||||
" lsls r0, r2, 24\n"
|
||||
" lsrs r1, r0, 24\n"
|
||||
" ldr r3, [sp, 0x24]\n"
|
||||
" cmp r1, r3\n"
|
||||
" bcs _08041136\n"
|
||||
" b _08040FBE\n"
|
||||
"_08041136:\n"
|
||||
" add sp, 0x3C\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"
|
||||
" .align 2, 0\n"
|
||||
"_08041148: .4byte 0x84000008\n"
|
||||
" .syntax divided\n"
|
||||
);
|
||||
asm("\n"
|
||||
" .syntax unified\n"
|
||||
" push {r4-r7,lr}\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r6, r9\n"
|
||||
" mov r5, r8\n"
|
||||
" push {r5-r7}\n"
|
||||
" sub sp, 0x3C\n"
|
||||
" str r2, [sp, 0x20]\n"
|
||||
" adds r4, r3, 0\n"
|
||||
" ldr r7, [sp, 0x5C]\n"
|
||||
" lsls r0, 24\n"
|
||||
" lsls r1, 24\n"
|
||||
" ldr r2, _08041008 @ =gSpriteDimensions\n"
|
||||
" lsrs r1, 23\n"
|
||||
" lsrs r0, 21\n"
|
||||
" adds r1, r0\n"
|
||||
" adds r0, r2, 0x1\n"
|
||||
" adds r0, r1, r0\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" str r0, [sp, 0x24]\n"
|
||||
" adds r1, r2\n"
|
||||
" ldrb r1, [r1]\n"
|
||||
" str r1, [sp, 0x28]\n"
|
||||
" movs r1, 0\n"
|
||||
" cmp r1, r0\n"
|
||||
" bcc _08040FB4\n"
|
||||
" b _08041136\n"
|
||||
"_08040FB4:\n"
|
||||
" movs r0, 0x20\n"
|
||||
" ldr r2, [sp, 0x28]\n"
|
||||
" subs r0, r2\n"
|
||||
" lsls r0, 1\n"
|
||||
" str r0, [sp, 0x2C]\n"
|
||||
"_08040FBE:\n"
|
||||
" movs r2, 0\n"
|
||||
" adds r1, 0x1\n"
|
||||
" str r1, [sp, 0x34]\n"
|
||||
" ldr r3, [sp, 0x28]\n"
|
||||
" cmp r2, r3\n"
|
||||
" bcc _08040FCC\n"
|
||||
" b _08041124\n"
|
||||
"_08040FCC:\n"
|
||||
" ldr r0, _0804100C @ =0x040000d4\n"
|
||||
" mov r8, r0\n"
|
||||
"_08040FD0:\n"
|
||||
" ldrh r1, [r4]\n"
|
||||
" ldr r0, _08041010 @ =0x000003ff\n"
|
||||
" ands r0, r1\n"
|
||||
" lsls r0, 5\n"
|
||||
" mov r12, r0\n"
|
||||
" movs r0, 0xC0\n"
|
||||
" lsls r0, 4\n"
|
||||
" ands r0, r1\n"
|
||||
" mov r3, sp\n"
|
||||
" strh r1, [r3, 0x38]\n"
|
||||
" cmp r0, 0\n"
|
||||
" bne _08041018\n"
|
||||
" ldr r0, [sp, 0x20]\n"
|
||||
" add r0, r12\n"
|
||||
" mov r1, r8\n"
|
||||
" str r0, [r1]\n"
|
||||
" str r7, [r1, 0x4]\n"
|
||||
" ldr r3, _08041014 @ =0x84000008\n"
|
||||
" str r3, [r1, 0x8]\n"
|
||||
" ldr r0, [r1, 0x8]\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" adds r7, 0x20\n"
|
||||
" mov r10, r7\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_08041008: .4byte gSpriteDimensions\n"
|
||||
"_0804100C: .4byte 0x040000d4\n"
|
||||
"_08041010: .4byte 0x000003ff\n"
|
||||
"_08041014: .4byte 0x84000008\n"
|
||||
"_08041018:\n"
|
||||
" movs r1, 0x80\n"
|
||||
" lsls r1, 4\n"
|
||||
" cmp r0, r1\n"
|
||||
" bne _08041068\n"
|
||||
" movs r3, 0\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" movs r0, 0x20\n"
|
||||
" adds r0, r7\n"
|
||||
" mov r10, r0\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
" ldr r4, _08041060 @ =0x040000d4\n"
|
||||
" ldr r6, _08041064 @ =0x84000001\n"
|
||||
" movs r5, 0x7\n"
|
||||
"_08041036:\n"
|
||||
" lsls r2, r3, 24\n"
|
||||
" asrs r2, 24\n"
|
||||
" subs r0, r5, r2\n"
|
||||
" lsls r0, 2\n"
|
||||
" add r0, r12\n"
|
||||
" ldr r1, [sp, 0x20]\n"
|
||||
" adds r0, r1, r0\n"
|
||||
" lsls r1, r2, 2\n"
|
||||
" adds r1, r7, r1\n"
|
||||
" str r0, [r4]\n"
|
||||
" str r1, [r4, 0x4]\n"
|
||||
" str r6, [r4, 0x8]\n"
|
||||
" ldr r0, [r4, 0x8]\n"
|
||||
" adds r2, 0x1\n"
|
||||
" lsls r2, 24\n"
|
||||
" lsrs r3, r2, 24\n"
|
||||
" asrs r2, 24\n"
|
||||
" cmp r2, 0x7\n"
|
||||
" ble _08041036\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_08041060: .4byte 0x040000d4\n"
|
||||
"_08041064: .4byte 0x84000001\n"
|
||||
"_08041068:\n"
|
||||
" movs r3, 0\n"
|
||||
" adds r4, 0x2\n"
|
||||
" str r4, [sp, 0x30]\n"
|
||||
" movs r0, 0x20\n"
|
||||
" adds r0, r7\n"
|
||||
" mov r10, r0\n"
|
||||
" adds r2, 0x1\n"
|
||||
" mov r9, r2\n"
|
||||
"_08041078:\n"
|
||||
" movs r2, 0\n"
|
||||
" lsls r4, r3, 24\n"
|
||||
" lsls r0, r4, 2\n"
|
||||
" lsrs r0, 24\n"
|
||||
" adds r6, r0, 0x3\n"
|
||||
" mov r1, r12\n"
|
||||
" adds r5, r1, r0\n"
|
||||
"_08041086:\n"
|
||||
" lsls r1, r2, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" subs r0, r6, r1\n"
|
||||
" mov r2, sp\n"
|
||||
" adds r3, r2, r0\n"
|
||||
" adds r0, r5, r1\n"
|
||||
" ldr r2, [sp, 0x20]\n"
|
||||
" adds r0, r2, r0\n"
|
||||
" ldrb r2, [r0]\n"
|
||||
" movs r0, 0xF\n"
|
||||
" ands r0, r2\n"
|
||||
" lsls r0, 4\n"
|
||||
" lsrs r2, 4\n"
|
||||
" orrs r0, r2\n"
|
||||
" strb r0, [r3]\n"
|
||||
" adds r1, 0x1\n"
|
||||
" lsls r1, 24\n"
|
||||
" lsrs r2, r1, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" cmp r1, 0x3\n"
|
||||
" ble _08041086\n"
|
||||
" movs r3, 0x80\n"
|
||||
" lsls r3, 17\n"
|
||||
" adds r0, r4, r3\n"
|
||||
" lsrs r3, r0, 24\n"
|
||||
" asrs r0, 24\n"
|
||||
" cmp r0, 0x7\n"
|
||||
" ble _08041078\n"
|
||||
" movs r0, 0x80\n"
|
||||
" lsls r0, 4\n"
|
||||
" mov r1, sp\n"
|
||||
" ldrh r1, [r1, 0x38]\n"
|
||||
" ands r0, r1\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _08041104\n"
|
||||
" movs r3, 0\n"
|
||||
" ldr r4, _080410FC @ =0x040000d4\n"
|
||||
" ldr r6, _08041100 @ =0x84000001\n"
|
||||
" movs r5, 0x7\n"
|
||||
"_080410D4:\n"
|
||||
" lsls r1, r3, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" subs r0, r5, r1\n"
|
||||
" lsls r0, 2\n"
|
||||
" mov r3, sp\n"
|
||||
" adds r2, r3, r0\n"
|
||||
" lsls r0, r1, 2\n"
|
||||
" adds r0, r7, r0\n"
|
||||
" str r2, [r4]\n"
|
||||
" str r0, [r4, 0x4]\n"
|
||||
" str r6, [r4, 0x8]\n"
|
||||
" ldr r0, [r4, 0x8]\n"
|
||||
" adds r1, 0x1\n"
|
||||
" lsls r1, 24\n"
|
||||
" lsrs r3, r1, 24\n"
|
||||
" asrs r1, 24\n"
|
||||
" cmp r1, 0x7\n"
|
||||
" ble _080410D4\n"
|
||||
" b _08041112\n"
|
||||
" .align 2, 0\n"
|
||||
"_080410FC: .4byte 0x040000d4\n"
|
||||
"_08041100: .4byte 0x84000001\n"
|
||||
"_08041104:\n"
|
||||
" mov r0, sp\n"
|
||||
" mov r1, r8\n"
|
||||
" str r0, [r1]\n"
|
||||
" str r7, [r1, 0x4]\n"
|
||||
" ldr r2, _08041148 @ =0x84000008\n"
|
||||
" str r2, [r1, 0x8]\n"
|
||||
" ldr r0, [r1, 0x8]\n"
|
||||
"_08041112:\n"
|
||||
" ldr r4, [sp, 0x30]\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r3, r9\n"
|
||||
" lsls r0, r3, 24\n"
|
||||
" lsrs r2, r0, 24\n"
|
||||
" ldr r0, [sp, 0x28]\n"
|
||||
" cmp r2, r0\n"
|
||||
" bcs _08041124\n"
|
||||
" b _08040FD0\n"
|
||||
"_08041124:\n"
|
||||
" ldr r1, [sp, 0x2C]\n"
|
||||
" adds r4, r1\n"
|
||||
" ldr r2, [sp, 0x34]\n"
|
||||
" lsls r0, r2, 24\n"
|
||||
" lsrs r1, r0, 24\n"
|
||||
" ldr r3, [sp, 0x24]\n"
|
||||
" cmp r1, r3\n"
|
||||
" bcs _08041136\n"
|
||||
" b _08040FBE\n"
|
||||
"_08041136:\n"
|
||||
" add sp, 0x3C\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"
|
||||
" .align 2, 0\n"
|
||||
"_08041148: .4byte 0x84000008\n"
|
||||
" .syntax divided\n"
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int CountTrailingZeroBits(u32 value) {
|
||||
u8 i;
|
||||
for (i = 0; i < 32; i++) {
|
||||
if ((value & 1) == 0) {
|
||||
value >>= 1;
|
||||
} else {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
u8 i;
|
||||
for (i = 0; i < 32; i++) {
|
||||
if ((value & 1) == 0) {
|
||||
value >>= 1;
|
||||
} else {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16 CalcCRC16(u8 *data, int length) {
|
||||
u16 i, j;
|
||||
u16 crc = 0x1121;
|
||||
for (i = 0; i < length; i++) {
|
||||
crc ^= data[i];
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (crc & 1) {
|
||||
crc = (crc >> 1) ^ 0x8408;
|
||||
} else {
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ~crc;
|
||||
u16 i, j;
|
||||
u16 crc = 0x1121;
|
||||
for (i = 0; i < length; i++) {
|
||||
crc ^= data[i];
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (crc & 1) {
|
||||
crc = (crc >> 1) ^ 0x8408;
|
||||
} else {
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
u16 CalcCRC16WithTable(u8 *data, int length) {
|
||||
u16 i;
|
||||
u16 crc = 0x1121;
|
||||
u8 byte;
|
||||
for (i = 0; i < length; i++) {
|
||||
byte = crc >> 8;
|
||||
crc ^= data[i];
|
||||
crc = byte ^ gCrc16Table[(u8)crc];
|
||||
}
|
||||
return ~crc;
|
||||
u16 i;
|
||||
u16 crc = 0x1121;
|
||||
u8 byte;
|
||||
for (i = 0; i < length; i++) {
|
||||
byte = crc >> 8;
|
||||
crc ^= data[i];
|
||||
crc = byte ^ gCrc16Table[(u8)crc];
|
||||
}
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user