SpawnBerryBlenderLinkPlayerSprites

This commit is contained in:
PikalaxALT
2017-06-19 22:17:50 -04:00
parent 2aa77fc3c6
commit 9e681335d6
4 changed files with 66 additions and 184 deletions

174
asm/field_specials.s Normal file → Executable file
View File

@@ -6,180 +6,6 @@
.text
thumb_func_start SpawnBerryBlenderLinkPlayerSprites
SpawnBerryBlenderLinkPlayerSprites: @ 810DB28
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
movs r7, 0
movs r0, 0
mov r9, r0
mov r8, r0
ldr r1, _0810DB74 @ =gUnknown_083F8358
add r0, sp, 0x8
movs r2, 0x4
bl memcpy
add r4, sp, 0xC
ldr r1, _0810DB78 @ =gUnknown_083F835C
adds r0, r4, 0
movs r2, 0x8
bl memcpy
bl sub_8008218
lsls r0, 24
lsrs r0, 24
mov r10, r0
bl player_get_direction_lower_nybble
lsls r0, 24
lsrs r0, 24
adds r1, r0, 0
cmp r0, 0x2
beq _0810DB94
cmp r0, 0x2
bgt _0810DB7C
cmp r0, 0x1
beq _0810DBC0
b _0810DBD2
.align 2, 0
_0810DB74: .4byte gUnknown_083F8358
_0810DB78: .4byte gUnknown_083F835C
_0810DB7C:
cmp r1, 0x3
beq _0810DB86
cmp r1, 0x4
beq _0810DBA8
b _0810DBD2
_0810DB86:
movs r7, 0x2
ldr r1, _0810DB90 @ =gSaveBlock1
ldrh r0, [r1]
subs r0, 0x1
b _0810DBAE
.align 2, 0
_0810DB90: .4byte gSaveBlock1
_0810DB94:
movs r7, 0x1
ldr r0, _0810DBA4 @ =gSaveBlock1
ldrh r1, [r0]
mov r9, r1
ldrh r0, [r0, 0x2]
subs r0, 0x1
b _0810DBCC
.align 2, 0
_0810DBA4: .4byte gSaveBlock1
_0810DBA8:
ldr r1, _0810DBBC @ =gSaveBlock1
ldrh r0, [r1]
adds r0, 0x1
_0810DBAE:
lsls r0, 16
lsrs r0, 16
mov r9, r0
ldrh r1, [r1, 0x2]
mov r8, r1
b _0810DBD2
.align 2, 0
_0810DBBC: .4byte gSaveBlock1
_0810DBC0:
movs r7, 0x3
ldr r0, _0810DBD8 @ =gSaveBlock1
ldrh r4, [r0]
mov r9, r4
ldrh r0, [r0, 0x2]
adds r0, 0x1
_0810DBCC:
lsls r0, 16
lsrs r0, 16
mov r8, r0
_0810DBD2:
movs r6, 0
b _0810DC5C
.align 2, 0
_0810DBD8: .4byte gSaveBlock1
_0810DBDC:
cmp r10, r6
beq _0810DC56
ldr r1, _0810DC74 @ =gLinkPlayers
lsls r0, r6, 3
subs r0, r6
lsls r0, 2
adds r0, r1
ldrb r1, [r0, 0x13]
movs r0, 0
bl GetRivalAvatarGraphicsIdByStateIdAndGender
lsls r0, 24
lsrs r0, 24
mov r1, sp
adds r1, r7
adds r1, 0x8
ldrb r1, [r1]
movs r2, 0xF0
subs r2, r6
lsls r2, 24
lsrs r2, 24
lsls r5, r7, 1
mov r3, sp
adds r3, r5
adds r3, 0xC
ldrb r3, [r3]
lsls r3, 24
asrs r3, 24
mov r12, r3
mov r4, r9
lsls r3, r4, 16
asrs r3, 16
add r3, r12
adds r3, 0x7
lsls r3, 16
asrs r3, 16
mov r4, sp
adds r4, 0xD
adds r4, r5
ldrb r4, [r4]
lsls r4, 24
asrs r4, 24
mov r12, r4
mov r5, r8
lsls r4, r5, 16
asrs r4, 16
add r4, r12
adds r4, 0x7
lsls r4, 16
asrs r4, 16
str r4, [sp]
movs r4, 0
str r4, [sp, 0x4]
bl SpawnSpecialFieldObjectParametrized
adds r0, r7, 0x1
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0x4
bne _0810DC56
movs r7, 0
_0810DC56:
adds r0, r6, 0x1
lsls r0, 24
lsrs r6, r0, 24
_0810DC5C:
ldr r0, _0810DC78 @ =gSpecialVar_0x8004
ldrh r0, [r0]
cmp r6, r0
bcc _0810DBDC
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0810DC74: .4byte gLinkPlayers
_0810DC78: .4byte gSpecialVar_0x8004
thumb_func_end SpawnBerryBlenderLinkPlayerSprites
thumb_func_start MauvilleGymSpecial1
MauvilleGymSpecial1: @ 810DC7C
push {r4,r5,lr}

10
data/field_specials.s Normal file → Executable file
View File

@@ -3,16 +3,6 @@
.section .rodata
.align 2
gUnknown_083F8358:: @ 83F8358
.byte 7, 9, 8, 10
gUnknown_083F835C:: @ 83F835C
.byte 0, 1
.byte 1, 0
.byte 0, -1
.byte -1, 0
.align 2
gUnknown_083F8364:: @ 83F8364
.byte 7, 16, 0, 0

1
include/field_map_obj.h Normal file → Executable file
View File

@@ -197,5 +197,6 @@ u8 sub_8060B38(u8);
u8 sub_8060B64(u8);
u8 GetOppositeDirection(u8);
void sub_80634D0(struct MapObject *, struct Sprite *);
u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
#endif // GUARD_FIELD_MAP_OBJ_H

65
src/field_specials.c Normal file → Executable file
View File

@@ -2,6 +2,7 @@
#include "field_specials.h"
#include "diploma.h"
#include "event_data.h"
#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "main.h"
#include "map_constants.h"
@@ -26,6 +27,7 @@ extern u16 gScriptResult;
extern u8 gUnknown_02039250;
extern u8 gUnknown_02039251;
extern u32 gUnknown_02039254;
extern u16 gSpecialVar_0x8004;
static void RecordCyclingRoadResults(u32, u8);
@@ -283,3 +285,66 @@ u8 GetLinkPartnerNames(void)
}
return nLinkPlayers;
}
const u8 gUnknown_083F8358[4] = {7, 9, 8, 10};
const s8 gUnknown_083F835C[4][2] = {
{ 0, 1},
{ 1, 0},
{ 0, -1},
{-1, 0}
};
void SpawnBerryBlenderLinkPlayerSprites(void)
{
u8 unknown_083F8358[4];
u8 unknown_083F835C[4][2];
u8 myLinkPlayerNumber;
u8 playerDirectionLowerNybble;
s16 x;
s16 y;
u8 i;
u8 j;
u8 rivalAvatarGraphicsId;
j = 0;
x = 0;
y = 0;
memcpy(unknown_083F8358, gUnknown_083F8358, sizeof gUnknown_083F8358);
memcpy(unknown_083F835C, gUnknown_083F835C, sizeof gUnknown_083F835C);
myLinkPlayerNumber = sub_8008218();
playerDirectionLowerNybble = player_get_direction_lower_nybble();
switch (playerDirectionLowerNybble)
{
case DIR_WEST:
j = 2;
x = gSaveBlock1.pos.x - 1;
y = gSaveBlock1.pos.y;
break;
case DIR_NORTH:
j = 1;
x = gSaveBlock1.pos.x;
y = gSaveBlock1.pos.y - 1;
break;
case DIR_EAST:
x = gSaveBlock1.pos.x + 1;
y = gSaveBlock1.pos.y;
break;
case DIR_SOUTH:
j = 3;
x = gSaveBlock1.pos.x;
y = gSaveBlock1.pos.y + 1;
}
for (i=0; i<gSpecialVar_0x8004; i++)
{
if (myLinkPlayerNumber != i)
{
rivalAvatarGraphicsId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, gLinkPlayers[i].gender);
SpawnSpecialFieldObjectParametrized(rivalAvatarGraphicsId, unknown_083F8358[j], 0xf0 - i, (s8)unknown_083F835C[j][0] + x + 7, (s8)unknown_083F835C[j][1] + y + 7, 0);
j++;
if (j == 4)
{
j = 0;
}
}
}
}