diff options
-rwxr-xr-x[-rw-r--r--] | asm/field_specials.s | 174 | ||||
-rwxr-xr-x[-rw-r--r--] | data/field_specials.s | 10 | ||||
-rwxr-xr-x[-rw-r--r--] | include/field_map_obj.h | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | src/field_specials.c | 65 |
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; + } + } + } +} |