Merge pull request #204 from DizzyEggg/match_nonmatchings

Match a couple of nonmatching functions
This commit is contained in:
Diegoisawesome 2018-02-07 09:34:32 -06:00 committed by GitHub
commit db97098b91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 97 additions and 700 deletions

View File

@ -34,6 +34,8 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
#define PARTY_SIZE 6
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
@ -295,6 +297,16 @@ struct SaveBlock2
extern struct SaveBlock2 *gSaveBlock2Ptr;
struct SecretBaseParty
{
u32 personality[PARTY_SIZE];
u16 moves[PARTY_SIZE * 4];
u16 species[PARTY_SIZE];
u16 heldItems[PARTY_SIZE];
u8 levels[PARTY_SIZE];
u8 EVs[PARTY_SIZE];
};
struct SecretBaseRecord
{
/*0x1A9C*/ u8 secretBaseId;
@ -310,12 +322,7 @@ struct SecretBaseRecord
/*0x1AAD*/ u8 sbr_field_11;
/*0x1AAE*/ u8 decorations[16];
/*0x1ABE*/ u8 decorationPos[16];
/*0x1AD0*/ u32 partyPersonality[6];
/*0x1AE8*/ u16 partyMoves[6 * 4];
/*0x1B18*/ u16 partySpecies[6];
/*0x1B24*/ u16 partyHeldItems[6];
/*0x1B2E*/ u8 partyLevels[6];
/*0x1B34*/ u8 partyEVs[6];
/*0x1AD0*/ struct SecretBaseParty party;
};
#include "constants/game_stat.h"

View File

@ -128,7 +128,6 @@
#define NUMBER_OF_MON_TYPES 0x12
#define PARTY_SIZE 6
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
#define UNOWN_FORM_COUNT 28

View File

@ -6226,7 +6226,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
if (trainerId == SECRET_BASE_OPPONENT)
{
moneyReward = 20 * gBattleResources->secretBase->partyLevels[0] * gBattleStruct->moneyMultiplier;
moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier;
}
else
{

View File

@ -217,10 +217,9 @@ static void berry_fix_main(void)
}
}
#ifdef NONMATCHING
static void berry_fix_gpu_set(void)
{
s32 width;
s32 width, left;
SetGpuReg(REG_OFFSET_BG0CNT, 0x0000);
SetGpuReg(REG_OFFSET_BG1CNT, 0x0000);
@ -249,230 +248,27 @@ static void berry_fix_gpu_set(void)
FillWindowPixelBuffer(3, 0);
FillWindowPixelBuffer(0, 0xAA);
// This block is a meme among memes
width = (0x78 - GetStringWidth(0, sUnknown_08617E9B, 0)) / 2;
box_print(2, 0, width, 3, sUnknown_0861815B, -1, sUnknown_08617E9B);
width = (s32)(0x78 - GetStringWidth(0, sUnknown_08617E9B, 0)) / 2 + 0x78;
box_print(2, 0, width, 3, sUnknown_0861815B, -1, sUnknown_08617E8D);
width = (0x70 - GetStringWidth(0, sUnknown_08617E8D, 0)) / 2;
box_print(3, 0, width, 0, sUnknown_0861815B, -1, sUnknown_08617E8D);
width = (0xd0 - GetStringWidth(1, sUnknown_08617E78, 0)) / 2;
box_print(0, 1, width, 2, sUnknown_08618158, -1, sUnknown_08617E78);
width = GetStringWidth(0, sUnknown_08617E9B, 0);
left = (0x78 - width) / 2;
box_print(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E9B);
width = GetStringWidth(0, sUnknown_08617E8D, 0);
left = (0x78 - width) / 2 + 0x78;
box_print(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D);
width = GetStringWidth(0, sUnknown_08617E8D, 0);
left = (0x70 - width) / 2;
box_print(3, 0, left, 0, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D);
width = GetStringWidth(1, sUnknown_08617E78, 0);
left = (0xD0 - width) / 2;
box_print(0, 1, left, 2, sUnknown_08618158, TEXT_SPEED_FF, sUnknown_08617E78);
CopyWindowToVram(2, 2);
CopyWindowToVram(3, 2);
CopyWindowToVram(0, 2);
}
#else
__attribute__((naked)) static void berry_fix_gpu_set(void)
{
asm(".syntax unified\n"
"\tpush {r4-r6,lr}\n"
"\tmov r6, r8\n"
"\tpush {r6}\n"
"\tsub sp, 0x10\n"
"\tmovs r0, 0x8\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0xA\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x10\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x12\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x14\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x16\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x50\n"
"\tmovs r1, 0\n"
"\tbl SetGpuReg\n"
"\tmovs r1, 0\n"
"\tstr r1, [sp, 0xC]\n"
"\tldr r4, =0x040000d4\n"
"\tadd r0, sp, 0xC\n"
"\tstr r0, [r4]\n"
"\tmovs r0, 0xC0\n"
"\tlsls r0, 19\n"
"\tstr r0, [r4, 0x4]\n"
"\tldr r0, =0x85006000\n"
"\tstr r0, [r4, 0x8]\n"
"\tldr r0, [r4, 0x8]\n"
"\tstr r1, [sp, 0xC]\n"
"\tadd r0, sp, 0xC\n"
"\tstr r0, [r4]\n"
"\tmovs r0, 0xE0\n"
"\tlsls r0, 19\n"
"\tstr r0, [r4, 0x4]\n"
"\tldr r2, =0x85000100\n"
"\tstr r2, [r4, 0x8]\n"
"\tldr r0, [r4, 0x8]\n"
"\tstr r1, [sp, 0xC]\n"
"\tadd r0, sp, 0xC\n"
"\tstr r0, [r4]\n"
"\tmovs r0, 0xA0\n"
"\tlsls r0, 19\n"
"\tstr r0, [r4, 0x4]\n"
"\tstr r2, [r4, 0x8]\n"
"\tldr r0, [r4, 0x8]\n"
"\tmovs r0, 0\n"
"\tbl ResetBgsAndClearDma3BusyFlags\n"
"\tldr r1, =gUnknown_08618108\n"
"\tmovs r0, 0\n"
"\tmovs r2, 0x2\n"
"\tbl InitBgsFromTemplates\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl ChangeBgX\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl ChangeBgY\n"
"\tmovs r0, 0x1\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl ChangeBgX\n"
"\tmovs r0, 0x1\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl ChangeBgY\n"
"\tldr r0, =gUnknown_08618110\n"
"\tbl InitWindows\n"
"\tbl DeactivateAllTextPrinters\n"
"\tldr r0, =sUnknown_08618138\n"
"\tstr r0, [r4]\n"
"\tldr r0, =0x050001e0\n"
"\tstr r0, [r4, 0x4]\n"
"\tldr r0, =0x84000008\n"
"\tstr r0, [r4, 0x8]\n"
"\tldr r0, [r4, 0x8]\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0x40\n"
"\tbl SetGpuReg\n"
"\tmovs r0, 0x2\n"
"\tmovs r1, 0\n"
"\tbl FillWindowPixelBuffer\n"
"\tmovs r0, 0x3\n"
"\tmovs r1, 0\n"
"\tbl FillWindowPixelBuffer\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0xAA\n"
"\tbl FillWindowPixelBuffer\n"
"\tldr r5, =sUnknown_08617E9B\n"
"\tmovs r0, 0\n"
"\tadds r1, r5, 0\n"
"\tmovs r2, 0\n"
"\tbl GetStringWidth\n"
"\tadds r1, r0, 0\n"
"\tmovs r4, 0x78\n"
"\tsubs r0, r4, r1\n"
"\tlsrs r1, r0, 31\n"
"\tadds r0, r1\n"
"\tasrs r0, 1\n"
"\tlsls r2, r0, 24\n"
"\tlsrs r2, 24\n"
"\tldr r6, =sUnknown_0861815B\n"
"\tstr r6, [sp]\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tmov r8, r0\n"
"\tstr r0, [sp, 0x4]\n"
"\tstr r5, [sp, 0x8]\n"
"\tmovs r0, 0x2\n"
"\tmovs r1, 0\n"
"\tmovs r3, 0x3\n"
"\tbl box_print\n"
"\tldr r5, =sUnknown_08617E8D\n"
"\tmovs r0, 0\n"
"\tadds r1, r5, 0\n"
"\tmovs r2, 0\n"
"\tbl GetStringWidth\n"
"\tadds r1, r0, 0\n"
"\tsubs r4, r1\n"
"\tlsrs r0, r4, 31\n"
"\tadds r4, r0\n"
"\tasrs r4, 1\n"
"\tadds r0, r4, 0\n"
"\tadds r0, 0x78\n"
"\tlsls r2, r0, 24\n"
"\tlsrs r2, 24\n"
"\tstr r6, [sp]\n"
"\tmov r0, r8\n"
"\tstr r0, [sp, 0x4]\n"
"\tstr r5, [sp, 0x8]\n"
"\tmovs r0, 0x2\n"
"\tmovs r1, 0\n"
"\tmovs r3, 0x3\n"
"\tbl box_print\n"
"\tmovs r0, 0\n"
"\tadds r1, r5, 0\n"
"\tmovs r2, 0\n"
"\tbl GetStringWidth\n"
"\tadds r1, r0, 0\n"
"\tmovs r0, 0x70\n"
"\tsubs r0, r1\n"
"\tlsrs r1, r0, 31\n"
"\tadds r0, r1\n"
"\tasrs r0, 1\n"
"\tlsls r2, r0, 24\n"
"\tlsrs r2, 24\n"
"\tstr r6, [sp]\n"
"\tmov r0, r8\n"
"\tstr r0, [sp, 0x4]\n"
"\tstr r5, [sp, 0x8]\n"
"\tmovs r0, 0x3\n"
"\tmovs r1, 0\n"
"\tmovs r3, 0\n"
"\tbl box_print\n"
"\tldr r4, =sUnknown_08617E78\n"
"\tmovs r0, 0x1\n"
"\tadds r1, r4, 0\n"
"\tmovs r2, 0\n"
"\tbl GetStringWidth\n"
"\tadds r1, r0, 0\n"
"\tmovs r0, 0xD0\n"
"\tsubs r0, r1\n"
"\tlsrs r1, r0, 31\n"
"\tadds r0, r1\n"
"\tasrs r0, 1\n"
"\tlsls r2, r0, 24\n"
"\tlsrs r2, 24\n"
"\tldr r0, =sUnknown_08618158\n"
"\tstr r0, [sp]\n"
"\tmov r0, r8\n"
"\tstr r0, [sp, 0x4]\n"
"\tstr r4, [sp, 0x8]\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0x1\n"
"\tmovs r3, 0x2\n"
"\tbl box_print\n"
"\tmovs r0, 0x2\n"
"\tmovs r1, 0x2\n"
"\tbl CopyWindowToVram\n"
"\tmovs r0, 0x3\n"
"\tmovs r1, 0x2\n"
"\tbl CopyWindowToVram\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0x2\n"
"\tbl CopyWindowToVram\n"
"\tadd sp, 0x10\n"
"\tpop {r3}\n"
"\tmov r8, r3\n"
"\tpop {r4-r6}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.pool\n"
".syntax divided");
}
#endif
static int berry_fix_text_update(int checkval)
{
if (berry_fix_mb_manager->unk1 == checkval)
@ -522,7 +318,7 @@ static void berry_fix_text_print(int scene)
ShowBg(1);
}
static void berry_fix_bg_hide()
static void berry_fix_bg_hide(void)
{
HideBg(0);
HideBg(1);

View File

@ -92,6 +92,7 @@ extern u8 gBankInMenu;
extern u16 gBattlePartyID[];
extern void sub_81B89F0(void);
extern u8 GetItemEffectType(u16);
extern struct MapConnection *sub_8088A8C(s16, s16);
void MapPostLoadHook_UseItem(void);
extern void sub_80AF6D4(void);
@ -453,8 +454,6 @@ bool8 sub_80FD730(struct MapConnection *connection, int x, int y)
return sub_80FD6D4(mapHeader->events, localX, localY);
}
// weird math
#ifdef NONMATCHING
void sub_80FD7C8(u8 taskId)
{
s16 x, y;
@ -462,15 +461,18 @@ void sub_80FD7C8(u8 taskId)
s16 width = gMapHeader.mapData->width + 7;
s16 height = gMapHeader.mapData->height + 7;
s16 var1 = 7;
s16 var2 = 7;
PlayerGetDestCoords(&x, &y);
for (curX = x - 7; curX <= x + 7; curX++)
{
for (curY = y - 5; curY <= y + 5; curY++)
{
if (7 > curX
if (var1 > curX
|| curX >= width
|| 7 > curY
|| var2 > curY
|| curY >= height)
{
struct MapConnection *conn = sub_8088A8C(curX, curY);
@ -480,155 +482,6 @@ void sub_80FD7C8(u8 taskId)
}
}
}
#else
__attribute__((naked))
void sub_80FD7C8(u8 taskId)
{
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\
lsls r0, 24\n\
lsrs r0, 24\n\
str r0, [sp, 0x4]\n\
ldr r0, =gMapHeader\n\
ldr r1, [r0]\n\
ldr r0, [r1]\n\
adds r0, 0x7\n\
lsls r0, 16\n\
lsrs r0, 16\n\
str r0, [sp, 0x8]\n\
ldr r0, [r1, 0x4]\n\
adds r0, 0x7\n\
lsls r0, 16\n\
lsrs r0, 16\n\
str r0, [sp, 0xC]\n\
mov r4, sp\n\
adds r4, 0x2\n\
mov r0, sp\n\
adds r1, r4, 0\n\
bl PlayerGetDestCoords\n\
mov r0, sp\n\
ldrh r0, [r0]\n\
subs r0, 0x7\n\
lsls r0, 16\n\
lsrs r3, r0, 16\n\
asrs r0, 16\n\
mov r1, sp\n\
movs r2, 0\n\
ldrsh r1, [r1, r2]\n\
adds r1, 0x7\n\
cmp r0, r1\n\
bgt _080FD8CC\n\
_080FD816:\n\
mov r5, sp\n\
ldrh r0, [r5, 0x2]\n\
subs r0, 0x5\n\
lsls r0, 16\n\
lsrs r4, r0, 16\n\
lsls r2, r4, 16\n\
asrs r1, r2, 16\n\
movs r6, 0x2\n\
ldrsh r0, [r5, r6]\n\
adds r0, 0x5\n\
lsls r3, 16\n\
mov r8, r3\n\
cmp r1, r0\n\
bgt _080FD8B6\n\
movs r0, 0x7\n\
str r0, [sp, 0x10]\n\
mov r1, r8\n\
asrs r1, 16\n\
mov r9, r1\n\
mov r10, r0\n\
_080FD83E:\n\
ldr r3, [sp, 0x10]\n\
cmp r3, r9\n\
bgt _080FD860\n\
ldr r5, [sp, 0x8]\n\
lsls r0, r5, 16\n\
asrs r0, 16\n\
cmp r9, r0\n\
bge _080FD860\n\
asrs r1, r2, 16\n\
cmp r10, r1\n\
bgt _080FD860\n\
ldr r6, [sp, 0xC]\n\
lsls r0, r6, 16\n\
asrs r0, 16\n\
lsls r7, r4, 16\n\
cmp r1, r0\n\
blt _080FD89E\n\
_080FD860:\n\
mov r0, r8\n\
asrs r5, r0, 16\n\
lsls r4, 16\n\
asrs r6, r4, 16\n\
adds r0, r5, 0\n\
adds r1, r6, 0\n\
bl sub_8088A8C\n\
adds r7, r4, 0\n\
cmp r0, 0\n\
beq _080FD89E\n\
adds r1, r5, 0\n\
adds r2, r6, 0\n\
bl sub_80FD730\n\
lsls r0, 24\n\
lsrs r0, 24\n\
cmp r0, 0x1\n\
bne _080FD89E\n\
mov r0, sp\n\
ldrh r1, [r0]\n\
subs r1, r5, r1\n\
lsls r1, 16\n\
asrs r1, 16\n\
ldrh r2, [r0, 0x2]\n\
subs r2, r6, r2\n\
lsls r2, 16\n\
asrs r2, 16\n\
ldr r0, [sp, 0x4]\n\
bl sub_80FD8E0\n\
_080FD89E:\n\
movs r1, 0x80\n\
lsls r1, 9\n\
adds r0, r7, r1\n\
lsrs r4, r0, 16\n\
lsls r2, r4, 16\n\
asrs r1, r2, 16\n\
mov r3, sp\n\
movs r5, 0x2\n\
ldrsh r0, [r3, r5]\n\
adds r0, 0x5\n\
cmp r1, r0\n\
ble _080FD83E\n\
_080FD8B6:\n\
movs r1, 0x80\n\
lsls r1, 9\n\
add r1, r8\n\
lsrs r3, r1, 16\n\
asrs r1, 16\n\
mov r0, sp\n\
movs r6, 0\n\
ldrsh r0, [r0, r6]\n\
adds r0, 0x7\n\
cmp r1, r0\n\
ble _080FD816\n\
_080FD8CC:\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\
.pool\n\
.syntax divided\n");
}
#endif
void sub_80FD8E0(u8 taskId, s16 x, s16 y)
{

View File

@ -1197,26 +1197,26 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
for (i = 0; i < PARTY_SIZE; i++)
{
if (gBattleResources->secretBase->partySpecies[i])
if (gBattleResources->secretBase->party.species[i])
{
CreateMon(&gEnemyParty[i],
gBattleResources->secretBase->partySpecies[i],
gBattleResources->secretBase->partyLevels[i],
gBattleResources->secretBase->party.species[i],
gBattleResources->secretBase->party.levels[i],
15,
1,
gBattleResources->secretBase->partyPersonality[i],
gBattleResources->secretBase->party.personality[i],
2,
0);
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->partyHeldItems[i]);
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]);
for (j = 0; j < 6; j++)
SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gBattleResources->secretBase->partyEVs[i]);
SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gBattleResources->secretBase->party.EVs[i]);
for (j = 0; j < 4; j++)
{
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->partyMoves[i * 4 + j]);
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->partyMoves[i * 4 + j]].pp);
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
}
}
}

View File

@ -13,6 +13,7 @@
#include "menu_indicators.h"
#include "constants/maps.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "sound.h"
#include "overworld.h"
#include "fieldmap.h"
@ -711,237 +712,45 @@ u8 sub_80E98AC(struct Pokemon *pokemon)
return evTotal / 6;
}
#ifdef NONMATCHING
// This function is a meme
void sub_80E9914(void)
{
u32 zero;
u32 *personality;
u16 partyIdx;
u16 moveIdx;
u16 sbPartyIdx;
u16 *species;
u16 *items;
u16 *moves;
u8 *levels;
u8 *evs;
struct SecretBaseParty *party;
sbPartyIdx = 0;
personality = gSaveBlock1Ptr->secretBases[0].partyPersonality;
party = &gSaveBlock1Ptr->secretBases[0].party;
if (gSaveBlock1Ptr->secretBases[0].secretBaseId != 0)
{
partyIdx = 0;
moves = gSaveBlock1Ptr->secretBases[0].partyMoves;
species = gSaveBlock1Ptr->secretBases[0].partySpecies;
items = gSaveBlock1Ptr->secretBases[0].partyHeldItems;
levels = gSaveBlock1Ptr->secretBases[0].partyLevels;
evs = gSaveBlock1Ptr->secretBases[0].partyEVs;
zero = 0;
for (partyIdx = 0; partyIdx < PARTY_SIZE; partyIdx ++)
for (partyIdx = 0; partyIdx < PARTY_SIZE; partyIdx++)
{
for (moveIdx = 0; moveIdx < 4; moveIdx ++)
for (moveIdx = 0; moveIdx < 4; moveIdx++)
{
moves[partyIdx * 4 + moveIdx] = zero;
party->moves[partyIdx * 4 + moveIdx] = 0;
}
species[partyIdx] = zero;
items[partyIdx] = zero;
levels[partyIdx] = zero;
personality[partyIdx] = zero;
evs[partyIdx] = zero;
if (GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[partyIdx], MON_DATA_IS_EGG))
party->species[partyIdx] = 0;
party->heldItems[partyIdx] = 0;
party->levels[partyIdx] = 0;
party->personality[partyIdx] = 0;
party->EVs[partyIdx] = 0;
if (GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&gPlayerParty[partyIdx], MON_DATA_IS_EGG))
{
for (moveIdx = 0; moveIdx < 4; moveIdx ++)
for (moveIdx = 0; moveIdx < 4; moveIdx++)
{
moves[sbPartyIdx * 4 + moveIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_MOVE1 + moveIdx);
party->moves[sbPartyIdx * 4 + moveIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_MOVE1 + moveIdx);
}
species[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES);
items[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_HELD_ITEM);
levels[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_LEVEL);
personality[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_PERSONALITY);
evs[sbPartyIdx] = sub_80E98AC(&gPlayerParty[partyIdx]);
sbPartyIdx ++;
party->species[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES);
party->heldItems[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_HELD_ITEM);
party->levels[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_LEVEL);
party->personality[sbPartyIdx] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_PERSONALITY);
party->EVs[sbPartyIdx] = sub_80E98AC(&gPlayerParty[partyIdx]);
sbPartyIdx++;
}
}
}
}
#else
__attribute__((naked)) void sub_80E9914(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x24\n"
"\tmovs r0, 0\n"
"\tmov r10, r0\n"
"\tldr r0, =gSaveBlock1Ptr\n"
"\tldr r1, [r0]\n"
"\tldr r2, =0x00001ad0\n"
"\tadds r2, r1, r2\n"
"\tstr r2, [sp]\n"
"\tldr r3, =0x00001a9c\n"
"\tadds r0, r1, r3\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbne _080E993A\n"
"\tb _080E9A60\n"
"_080E993A:\n"
"\tmovs r6, 0\n"
"\tldr r7, =0x00001ae8\n"
"\tadds r7, r1, r7\n"
"\tstr r7, [sp, 0x14]\n"
"\tldr r0, =0x00001b18\n"
"\tadds r0, r1, r0\n"
"\tstr r0, [sp, 0xC]\n"
"\tldr r2, =0x00001b24\n"
"\tadds r2, r1, r2\n"
"\tstr r2, [sp, 0x10]\n"
"\tadds r3, 0x94\n"
"\tadds r3, r1, r3\n"
"\tstr r3, [sp, 0x18]\n"
"\tldr r7, =0x00001b36\n"
"\tadds r7, r1, r7\n"
"\tstr r7, [sp, 0x1C]\n"
"\tmov r9, r6\n"
"_080E995C:\n"
"\tmovs r4, 0\n"
"\tlsls r5, r6, 2\n"
"\tlsls r3, r6, 1\n"
"\tldr r0, =gPlayerParty\n"
"\tmov r8, r0\n"
"\tadds r1, r6, 0x1\n"
"\tstr r1, [sp, 0x4]\n"
"\tadds r2, r5, 0\n"
"\tldr r1, [sp, 0x14]\n"
"_080E996E:\n"
"\tadds r0, r2, r4\n"
"\tlsls r0, 1\n"
"\tadds r0, r1, r0\n"
"\tmov r7, r9\n"
"\tstrh r7, [r0]\n"
"\tadds r0, r4, 0x1\n"
"\tlsls r0, 16\n"
"\tlsrs r4, r0, 16\n"
"\tcmp r4, 0x3\n"
"\tbls _080E996E\n"
"\tldr r1, [sp, 0xC]\n"
"\tadds r0, r1, r3\n"
"\tmov r2, r9\n"
"\tstrh r2, [r0]\n"
"\tldr r7, [sp, 0x10]\n"
"\tadds r0, r7, r3\n"
"\tstrh r2, [r0]\n"
"\tldr r1, [sp, 0x18]\n"
"\tadds r0, r1, r6\n"
"\tmov r2, r9\n"
"\tstrb r2, [r0]\n"
"\tldr r3, [sp]\n"
"\tadds r0, r3, r5\n"
"\tmov r7, r9\n"
"\tstr r7, [r0]\n"
"\tldr r1, [sp, 0x1C]\n"
"\tadds r0, r1, r6\n"
"\tstrb r7, [r0]\n"
"\tmovs r2, 0x64\n"
"\tadds r5, r6, 0\n"
"\tmuls r5, r2\n"
"\tmov r3, r8\n"
"\tadds r4, r5, r3\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0xB\n"
"\tbl GetMonData\n"
"\tcmp r0, 0\n"
"\tbeq _080E9A54\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0x2D\n"
"\tbl GetMonData\n"
"\tcmp r0, 0\n"
"\tbne _080E9A54\n"
"\tmovs r4, 0\n"
"\tmov r7, r10\n"
"\tlsls r7, 2\n"
"\tmov r8, r7\n"
"\tmov r0, r10\n"
"\tlsls r7, r0, 1\n"
"\tadds r0, 0x1\n"
"\tstr r0, [sp, 0x8]\n"
"\tldr r2, =gPlayerParty\n"
"_080E99DA:\n"
"\tadds r1, r4, 0\n"
"\tadds r1, 0xD\n"
"\tadds r0, r5, r2\n"
"\tstr r2, [sp, 0x20]\n"
"\tbl GetMonData\n"
"\tmov r3, r8\n"
"\tadds r1, r3, r4\n"
"\tlsls r1, 1\n"
"\tldr r3, [sp, 0x14]\n"
"\tadds r1, r3, r1\n"
"\tstrh r0, [r1]\n"
"\tadds r0, r4, 0x1\n"
"\tlsls r0, 16\n"
"\tlsrs r4, r0, 16\n"
"\tldr r2, [sp, 0x20]\n"
"\tcmp r4, 0x3\n"
"\tbls _080E99DA\n"
"\tmovs r0, 0x64\n"
"\tadds r4, r6, 0\n"
"\tmuls r4, r0\n"
"\tldr r0, =gPlayerParty\n"
"\tadds r4, r0\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0xB\n"
"\tbl GetMonData\n"
"\tldr r2, [sp, 0xC]\n"
"\tadds r1, r2, r7\n"
"\tstrh r0, [r1]\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0xC\n"
"\tbl GetMonData\n"
"\tldr r3, [sp, 0x10]\n"
"\tadds r1, r3, r7\n"
"\tstrh r0, [r1]\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0x38\n"
"\tbl GetMonData\n"
"\tldr r1, [sp, 0x18]\n"
"\tadd r1, r10\n"
"\tstrb r0, [r1]\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0\n"
"\tbl GetMonData\n"
"\tldr r1, [sp]\n"
"\tadd r1, r8\n"
"\tstr r0, [r1]\n"
"\tadds r0, r4, 0\n"
"\tbl sub_80E98AC\n"
"\tldr r1, [sp, 0x1C]\n"
"\tadd r1, r10\n"
"\tstrb r0, [r1]\n"
"\tldr r7, [sp, 0x8]\n"
"\tlsls r0, r7, 16\n"
"\tlsrs r0, 16\n"
"\tmov r10, r0\n"
"_080E9A54:\n"
"\tldr r1, [sp, 0x4]\n"
"\tlsls r0, r1, 16\n"
"\tlsrs r6, r0, 16\n"
"\tcmp r6, 0x5\n"
"\tbhi _080E9A60\n"
"\tb _080E995C\n"
"_080E9A60:\n"
"\tadd sp, 0x24\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.pool");
}
#endif
void sub_80E9A90(void)
{
@ -1357,7 +1166,6 @@ void sub_80EA354(void)
gSpecialVar_Result = gSaveBlock1Ptr->secretBases[secretBaseRecordId].sbr_field_1_5;
}
void sub_80EA3E4(u8 taskId)
{
s16 x;

View File

@ -240,12 +240,26 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] =
AffineAnimCmd_frame,
};
static const s32 sUnknown_082EC6F4[24] =
static const s32 sUnknown_082EC6F4[3][4][2] =
{
8, 8, 0x10, 0x10, 0x20, 0x20,
0x40, 0x40, 0x10, 8, 0x20, 8,
0x20, 0x10, 0x40, 0x20, 8, 0x10,
8, 0x20, 0x10, 0x20, 0x20, 0x40,
{
{8, 8},
{0x10, 0x10},
{0x20, 0x20},
{0x40, 0x40},
},
{
{0x10, 8},
{0x20, 8},
{0x20, 0x10},
{0x40, 0x20},
},
{
{8, 0x10},
{8, 0x20},
{0x10, 0x20},
{0x20, 0x40},
},
};
static const struct OamDimensions sOamDimensions[3][4] =
@ -1207,106 +1221,26 @@ s32 sub_8007E28(s32 a0, s32 a1, s32 a2)
return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1);
}
#ifdef NONMATCHING
void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2)
void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2)
{
s32 var0, var1, var2;
u8 matrixNum = sprite->oam.matrixNum;
u32 matrixNum = sprite->oam.matrixNum;
if (a1 != 0x800)
{
var0 = sUnknown_082EC6F4[sprite->oam.size * 8 + sprite->oam.shape * 32];
var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0];
var1 = var0 << 8;
var2 = (var0 << 16) / gOamMatrices[matrixNum].a;
sprite->pos2.x = sub_8007E28(var1, var2, a1);
}
if (a2 != 0x800)
{
var0 = sUnknown_082EC6F4[4 + (sprite->oam.size * 8 + sprite->oam.shape * 32)];
var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1];
var1 = var0 << 8;
var2 = (var0 << 16) / gOamMatrices[matrixNum].d;
sprite->pos2.y = sub_8007E28(var1, var2, a2);
}
}
#else
__attribute__((naked))
void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r9\n\
mov r6, r8\n\
push {r6,r7}\n\
adds r5, r0, 0\n\
adds r6, r1, 0\n\
mov r8, r2\n\
ldrb r1, [r5, 0x3]\n\
lsls r0, r1, 26\n\
lsrs r7, r0, 27\n\
movs r0, 0x80\n\
lsls r0, 4\n\
mov r9, r0\n\
cmp r6, r9\n\
beq _08007EA2\n\
ldr r2, =sUnknown_082EC6F4\n\
lsrs r1, 6\n\
lsls r1, 3\n\
ldrb r0, [r5, 0x1]\n\
lsrs r0, 6\n\
lsls r0, 5\n\
adds r1, r0\n\
adds r1, r2\n\
ldr r0, [r1]\n\
lsls r4, r0, 8\n\
lsls r0, 16\n\
ldr r2, =gOamMatrices\n\
lsls r1, r7, 3\n\
adds r1, r2\n\
movs r2, 0\n\
ldrsh r1, [r1, r2]\n\
bl __divsi3\n\
adds r1, r0, 0\n\
adds r0, r4, 0\n\
adds r2, r6, 0\n\
bl sub_8007E28\n\
strh r0, [r5, 0x24]\n\
_08007EA2:\n\
cmp r8, r9\n\
beq _08007EDA\n\
ldr r2, =sUnknown_082EC6F4\n\
ldrb r1, [r5, 0x3]\n\
lsrs r1, 6\n\
lsls r1, 3\n\
ldrb r0, [r5, 0x1]\n\
lsrs r0, 6\n\
lsls r0, 5\n\
adds r1, r0\n\
adds r2, 0x4\n\
adds r1, r2\n\
ldr r0, [r1]\n\
lsls r4, r0, 8\n\
lsls r0, 16\n\
ldr r2, =gOamMatrices\n\
lsls r1, r7, 3\n\
adds r1, r2\n\
movs r2, 0x6\n\
ldrsh r1, [r1, r2]\n\
bl __divsi3\n\
adds r1, r0, 0\n\
adds r0, r4, 0\n\
mov r2, r8\n\
bl sub_8007E28\n\
strh r0, [r5, 0x26]\n\
_08007EDA:\n\
pop {r3,r4}\n\
mov r8, r3\n\
mov r9, r4\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
.syntax divided");
}
#endif // NONMATCHING
void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip)
{