summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]asm/field_specials.s174
-rwxr-xr-x[-rw-r--r--]data/field_specials.s10
-rwxr-xr-x[-rw-r--r--]include/field_map_obj.h1
-rwxr-xr-x[-rw-r--r--]src/field_specials.c65
4 files changed, 66 insertions, 184 deletions
diff --git a/asm/field_specials.s b/asm/field_specials.s
index cb0e547e2..f7595e0ad 100644..100755
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -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}
diff --git a/data/field_specials.s b/data/field_specials.s
index 3e76bbe3f..024cca807 100644..100755
--- a/data/field_specials.s
+++ b/data/field_specials.s
@@ -4,16 +4,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
.byte 15, 18, 0, 0
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index e4999dee6..999c77401 100644..100755
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -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
diff --git a/src/field_specials.c b/src/field_specials.c
index b289e655e..1287e90ec 100644..100755
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -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;
+ }
+ }
+ }
+}