This commit is contained in:
ProjectRevoTPP
2017-06-14 00:14:37 -04:00
27 changed files with 6511 additions and 11699 deletions
Regular → Executable
+4180 -10
View File
File diff suppressed because it is too large Load Diff
+137 -137
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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);
-1
View File
@@ -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
View File
@@ -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\
Executable → Regular
+556 -556
View File
File diff suppressed because it is too large Load Diff
+345 -345
View File
@@ -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;
}