Port through sub_804FE00

This commit is contained in:
PikalaxALT
2019-10-29 11:40:48 -04:00
parent 4c5e645e90
commit a1ec6ccff1
2 changed files with 231 additions and 427 deletions
-427
View File
@@ -5,433 +5,6 @@
.text
thumb_func_start sub_804FB34
sub_804FB34: @ 804FB34
push {r4-r7,lr}
ldr r0, _0804FBB4 @ =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
beq _0804FBC0
bl GetMultiplayerId
ldr r6, _0804FBB8 @ =gLinkPlayers
movs r7, 0x1
eors r0, r7
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
adds r1, r6
ldrb r1, [r1]
subs r0, r1, 0x4
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bls _0804FBC0
subs r0, r1, 0x1
lsls r0, 16
lsrs r0, 16
movs r4, 0x2
cmp r0, 0x1
bhi _0804FB6E
movs r4, 0x1
_0804FB6E:
cmp r4, 0
ble _0804FBC0
bl GetMultiplayerId
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
adds r1, r6
ldrb r1, [r1, 0x12]
movs r5, 0xF0
adds r0, r5, 0
ands r0, r1
cmp r0, 0
beq _0804FBBC
cmp r4, 0x2
bne _0804FBC0
bl GetMultiplayerId
eors r0, r7
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
adds r1, r6
ldrb r1, [r1, 0x12]
adds r0, r5, 0
ands r0, r1
cmp r0, 0
bne _0804FBC0
movs r0, 0x2
b _0804FBC2
.align 2, 0
_0804FBB4: .4byte gReceivedRemoteLinkPlayers
_0804FBB8: .4byte gLinkPlayers
_0804FBBC:
movs r0, 0x1
b _0804FBC2
_0804FBC0:
movs r0, 0
_0804FBC2:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_804FB34
thumb_func_start sub_804FBC8
sub_804FBC8: @ 804FBC8
push {lr}
lsls r0, 16
lsrs r2, r0, 16
lsls r1, 24
lsrs r1, 24
movs r0, 0xCD
lsls r0, 1
cmp r2, r0
beq _0804FBDE
cmp r2, 0x97
bne _0804FBE6
_0804FBDE:
cmp r1, 0
bne _0804FBE6
movs r0, 0x1
b _0804FBE8
_0804FBE6:
movs r0, 0
_0804FBE8:
pop {r1}
bx r1
thumb_func_end sub_804FBC8
thumb_func_start sub_804FBEC
sub_804FBEC: @ 804FBEC
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
ldr r4, [sp, 0x24]
ldr r5, [sp, 0x28]
ldr r6, [sp, 0x2C]
lsls r2, 16
lsrs r7, r2, 16
lsls r3, 16
lsrs r3, 16
lsls r4, 24
lsrs r4, 24
mov r8, r4
lsls r5, 16
lsrs r5, 16
lsls r6, 24
lsrs r6, 24
lsls r2, r0, 23
lsrs r2, 31
mov r9, r2
lsls r0, 24
lsrs r4, r0, 31
lsls r0, r1, 23
lsrs r0, 31
mov r10, r0
lsls r0, r1, 24
lsrs r0, 31
lsls r1, 18
lsrs r1, 28
subs r1, 0x4
lsls r1, 24
lsrs r1, 24
movs r2, 0x1
cmp r1, 0x1
bhi _0804FC3A
movs r2, 0
_0804FC3A:
cmp r2, 0
beq _0804FC4E
cmp r4, 0
bne _0804FC46
movs r0, 0x8
b _0804FCCE
_0804FC46:
cmp r0, 0
bne _0804FC4E
movs r0, 0x9
b _0804FCCE
_0804FC4E:
adds r0, r5, 0
adds r1, r6, 0
str r3, [sp]
bl sub_804FBC8
ldr r3, [sp]
cmp r0, 0
bne _0804FCB2
movs r0, 0xCE
lsls r0, 1
cmp r3, r0
bne _0804FC6E
cmp r7, r3
beq _0804FC8C
movs r0, 0x2
b _0804FCCE
_0804FC6E:
ldr r0, _0804FC88 @ =gBaseStats
lsls r1, r7, 3
subs r1, r7
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x6]
cmp r0, r8
beq _0804FC8C
ldrb r0, [r1, 0x7]
cmp r0, r8
beq _0804FC8C
movs r0, 0x1
b _0804FCCE
.align 2, 0
_0804FC88: .4byte gBaseStats
_0804FC8C:
movs r0, 0xCE
lsls r0, 1
cmp r7, r0
bne _0804FC9C
cmp r7, r3
beq _0804FC9C
movs r0, 0x3
b _0804FCCE
_0804FC9C:
mov r0, r9
cmp r0, 0
bne _0804FCBE
movs r0, 0xCE
lsls r0, 1
cmp r7, r0
bne _0804FCAE
movs r0, 0x6
b _0804FCCE
_0804FCAE:
cmp r7, 0x97
bls _0804FCB6
_0804FCB2:
movs r0, 0x4
b _0804FCCE
_0804FCB6:
cmp r3, 0x97
bls _0804FCBE
movs r0, 0x5
b _0804FCCE
_0804FCBE:
mov r0, r10
cmp r0, 0
bne _0804FCCC
cmp r7, 0x97
bls _0804FCCC
movs r0, 0x7
b _0804FCCE
_0804FCCC:
movs r0, 0
_0804FCCE:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_804FBEC
thumb_func_start sub_804FCE0
sub_804FCE0: @ 804FCE0
push {r4-r6,lr}
lsls r1, 16
lsrs r5, r1, 16
adds r6, r5, 0
lsls r2, 16
lsrs r2, 16
lsls r3, 24
lsrs r3, 24
lsls r0, 23
lsrs r4, r0, 31
adds r0, r2, 0
adds r1, r3, 0
bl sub_804FBC8
cmp r0, 0
bne _0804FD18
cmp r4, 0
bne _0804FD1C
movs r0, 0xCE
lsls r0, 1
cmp r5, r0
bne _0804FD10
movs r0, 0x2
b _0804FD1E
_0804FD10:
cmp r6, 0x97
bls _0804FD1C
cmp r6, r0
beq _0804FD1C
_0804FD18:
movs r0, 0x1
b _0804FD1E
_0804FD1C:
movs r0, 0
_0804FD1E:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_804FCE0
thumb_func_start sub_804FD24
sub_804FD24: @ 804FD24
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0xA
bne _0804FD40
movs r0, 0x17
bl PlaySE
movs r0, 0
strh r0, [r4, 0x2E]
_0804FD40:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_804FD24
thumb_func_start sub_804FD48
sub_804FD48: @ 804FD48
push {r4,r5,lr}
adds r4, r0, 0
adds r0, 0x3E
ldrb r1, [r0]
movs r0, 0x4
ands r0, r1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
bne _0804FD72
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0xA
bne _0804FD72
movs r0, 0xBB
bl PlaySE
strh r5, [r4, 0x2E]
_0804FD72:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_804FD48
thumb_func_start sub_804FD78
sub_804FD78: @ 804FD78
push {lr}
adds r2, r0, 0
movs r0, 0x30
ldrsh r1, [r2, r0]
cmp r1, 0
bne _0804FDAE
ldrh r0, [r2, 0x2E]
adds r0, 0x1
strh r0, [r2, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0xC
bne _0804FD94
strh r1, [r2, 0x2E]
_0804FD94:
movs r1, 0x2E
ldrsh r0, [r2, r1]
lsls r0, 1
ldr r1, _0804FDB4 @ =gUnknown_826CF60
adds r0, r1
ldrb r1, [r2, 0x5]
lsrs r1, 4
adds r1, 0x10
lsls r1, 4
adds r1, 0x4
movs r2, 0x2
bl LoadPalette
_0804FDAE:
pop {r0}
bx r0
.align 2, 0
_0804FDB4: .4byte gUnknown_826CF60
thumb_func_end sub_804FD78
thumb_func_start sub_804FDB8
sub_804FDB8: @ 804FDB8
push {lr}
adds r2, r0, 0
ldrh r1, [r2, 0x2E]
adds r1, 0x1
strh r1, [r2, 0x2E]
ldrh r0, [r2, 0x26]
adds r0, 0x1
strh r0, [r2, 0x26]
lsls r1, 16
asrs r1, 16
cmp r1, 0xA
bne _0804FDD6
adds r0, r2, 0
bl DestroySprite
_0804FDD6:
pop {r0}
bx r0
thumb_func_end sub_804FDB8
thumb_func_start sub_804FDDC
sub_804FDDC: @ 804FDDC
push {lr}
adds r2, r0, 0
ldrh r1, [r2, 0x2E]
adds r1, 0x1
strh r1, [r2, 0x2E]
ldrh r0, [r2, 0x26]
subs r0, 0x1
strh r0, [r2, 0x26]
lsls r1, 16
asrs r1, 16
cmp r1, 0xA
bne _0804FDFA
adds r0, r2, 0
bl DestroySprite
_0804FDFA:
pop {r0}
bx r0
thumb_func_end sub_804FDDC
thumb_func_start sub_804FE00
sub_804FE00: @ 804FE00
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0xF
bne _0804FE1C
movs r0, 0xC5
bl PlaySE
movs r0, 0
strh r0, [r4, 0x2E]
_0804FE1C:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_804FE00
thumb_func_start sub_804FE24
sub_804FE24: @ 804FE24
push {r4,r5,lr}
+231
View File
@@ -7,6 +7,7 @@
#include "bg.h"
#include "text.h"
#include "window.h"
#include "librfu.h"
#include "text_window.h"
#include "pokemon_icon.h"
#include "graphics.h"
@@ -136,6 +137,7 @@ extern const u8 *const gUnknown_8261EF4[];
extern const struct SpritePalette gUnknown_8261D00;
extern const struct SpritePalette gUnknown_8261C60;
extern const struct SpriteSheet gUnknown_8261C58;
extern const u16 gUnknown_826CF60[];
void sub_804C600(void)
{
@@ -3790,3 +3792,232 @@ u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos)
return 1;
}
}
s32 sub_804FB34(void)
{
s32 val;
u16 version;
if (gReceivedRemoteLinkPlayers != 0)
{
val = 0;
version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF);
if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN)
{
// this value could actually be anything 0 or less
val = 0;
}
else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
{
val = 1;
}
else
{
val = 2;
}
if (val > 0)
{
if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0)
{
if (val == 2)
{
if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0)
{
return 0;
}
else
{
return 2;
}
}
}
else
{
return 1;
}
}
}
return 0;
}
bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
{
if (species == SPECIES_DEOXYS || species == SPECIES_MEW)
{
if (!isObedientBitSet)
return TRUE;
}
return FALSE;
}
int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
{
u8 r9 = a0.unk_01_0;
u8 r4 = a0.unk_00_7;
u8 r10 = a1.unk_01_0;
u8 r0 = a1.unk_00_7;
u8 r1 = a1.unk_01_2;
u8 r2;
if (r1 == VERSION_FIRE_RED || r1 == VERSION_LEAF_GREEN)
{
r2 = 0;
}
else
{
r2 = 1;
}
if (r2)
{
if (!r4)
{
return 8;
}
else if (!r0)
{
return 9;
}
}
if (IsDeoxysOrMewUntradable(species3, isObedientBitSet))
{
return 4;
}
if (species2 == SPECIES_EGG)
{
if (species1 != species2)
{
return 2;
}
}
else
{
if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type)
{
return 1;
}
}
if (species1 == SPECIES_EGG && species1 != species2)
{
return 3;
}
if (!r9)
{
if (species1 == SPECIES_EGG)
{
return 6;
}
if (species1 > SPECIES_MEW)
{
return 4;
}
if (species2 > SPECIES_MEW)
{
return 5;
}
}
if (!r10 && species1 > SPECIES_MEW)
{
return 7;
}
return 0;
}
int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
{
u8 unk = a0.unk_01_0;
if (IsDeoxysOrMewUntradable(a2, a3))
{
return 1;
}
if (unk)
{
return 0;
}
if (species == SPECIES_EGG)
{
return 2;
}
if (species > SPECIES_MEW && species != SPECIES_EGG)
{
return 1;
}
return 0;
}
// Sprite callback for link cable transfer glow
void sub_804FD24(struct Sprite * sprite)
{
sprite->data[0]++;
if (sprite->data[0] == 10)
{
PlaySE(SE_BOWA);
sprite->data[0] = 0;
}
}
// Sprite callback for wireless transfer glow
void sub_804FD48(struct Sprite * sprite)
{
if (!sprite->invisible)
{
sprite->data[0]++;
if (sprite->data[0] == 10)
{
PlaySE(SE_W207B);
sprite->data[0] = 0;
}
}
}
// Palette flash for transfer glow core
void sub_804FD78(struct Sprite * sprite)
{
if (sprite->data[1] == 0)
{
sprite->data[0]++;
if (sprite->data[0] == 12)
sprite->data[0] = 0;
LoadPalette(&gUnknown_826CF60[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2);
}
}
void sub_804FDB8(struct Sprite * sprite)
{
sprite->data[0]++;
sprite->pos2.y++;
if (sprite->data[0] == 10)
DestroySprite(sprite);
}
void sub_804FDDC(struct Sprite * sprite)
{
sprite->data[0]++;
sprite->pos2.y--;
if (sprite->data[0] == 10)
DestroySprite(sprite);
}
void sub_804FE00(struct Sprite * sprite)
{
sprite->data[0]++;
if (sprite->data[0] == 15)
{
PlaySE(SE_W107);
sprite->data[0] = 0;
}
}