diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-09 16:33:30 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-09 16:33:30 -0400 |
commit | 210f87573018cbe8a6ea24ee9595b12f1f05f6a9 (patch) | |
tree | fb6f5711aa456be3b6b3017783bd76c8c0070284 | |
parent | 9b01d4fee588b0733cf4242173d43a9fc5889e57 (diff) |
through sub_815A008
-rw-r--r-- | asm/unk_8159F40.s | 353 | ||||
-rw-r--r-- | include/global.h | 51 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/unk_8159F40.c | 92 |
4 files changed, 137 insertions, 360 deletions
diff --git a/asm/unk_8159F40.s b/asm/unk_8159F40.s index aefa4ecff..c511dee99 100644 --- a/asm/unk_8159F40.s +++ b/asm/unk_8159F40.s @@ -5,359 +5,6 @@ .text - thumb_func_start sub_8159F40 -sub_8159F40: @ 8159F40 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r0, 0 - mov r10, r0 - mov r9, r0 - ldr r1, _08159F90 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 9 - str r0, [r1] - bl ZeroPlayerPartyMons - bl ZeroEnemyPartyMons - ldr r1, _08159F94 @ =gUnknown_84792D0 - ldr r0, _08159F98 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - mov r8, r0 - movs r7, 0 -_08159F72: - lsls r0, r7, 4 - mov r2, r8 - adds r1, r0, r2 - ldrb r1, [r1] - adds r4, r0, 0 - cmp r1, 0 - bne _08159FA0 - movs r0, 0x64 - mov r1, r10 - muls r1, r0 - ldr r0, _08159F9C @ =gPlayerParty - adds r6, r1, r0 - movs r0, 0x1 - add r10, r0 - b _08159FAE - .align 2, 0 -_08159F90: .4byte gBattleTypeFlags -_08159F94: .4byte gUnknown_84792D0 -_08159F98: .4byte gSpecialVar_0x8004 -_08159F9C: .4byte gPlayerParty -_08159FA0: - movs r0, 0x64 - mov r1, r9 - muls r1, r0 - ldr r0, _0815A004 @ =gEnemyParty - adds r6, r1, r0 - movs r2, 0x1 - add r9, r2 -_08159FAE: - mov r0, r8 - adds r3, r4, r0 - ldrh r1, [r3, 0x2] - ldrb r2, [r3, 0x1] - ldrb r0, [r3, 0xD] - str r0, [sp] - ldrb r0, [r3, 0xC] - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r6, 0 - movs r3, 0 - bl CreateMonWithGenderNatureLetter - movs r5, 0 - adds r7, 0x1 - mov r0, r8 - adds r0, 0x4 - adds r4, r0 -_08159FD4: - ldrh r1, [r4] - lsls r2, r5, 24 - lsrs r2, 24 - adds r0, r6, 0 - bl SetMonMoveSlot - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08159FD4 - lsls r0, r7, 4 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08159F72 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815A004: .4byte gEnemyParty - thumb_func_end sub_8159F40 - - thumb_func_start sub_815A008 -sub_815A008: @ 815A008 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r1, 0 - mov r8, r1 - movs r6, 0x1 - movs r2, 0x2 - negs r2, r2 - mov r12, r2 - adds r5, r0, 0 - adds r5, 0x8 - movs r7, 0 - movs r0, 0x41 - negs r0, r0 - mov r10, r0 - movs r1, 0x7F - mov r9, r1 -_0815A02E: - ldr r2, _0815A1F4 @ =gMapObjects - adds r3, r7, r2 - ldrb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - ands r0, r6 - ldrb r2, [r5] - mov r1, r12 - ands r1, r2 - orrs r1, r0 - strb r1, [r5] - ldrb r0, [r3] - lsls r0, 28 - lsrs r0, 31 - ands r0, r6 - lsls r0, 1 - movs r2, 0x3 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5] - ldrb r0, [r3] - lsls r0, 27 - lsrs r0, 31 - ands r0, r6 - lsls r0, 2 - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r5] - ldrb r0, [r3] - lsls r0, 26 - lsrs r0, 31 - ands r0, r6 - lsls r0, 3 - movs r2, 0x9 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5] - ldrb r0, [r3, 0x1] - lsls r0, 31 - lsrs r0, 31 - ands r0, r6 - lsls r0, 4 - movs r1, 0x11 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r5] - ldrb r0, [r3, 0x1] - lsls r0, 30 - lsrs r0, 31 - ands r0, r6 - lsls r0, 5 - movs r2, 0x21 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5] - ldrb r0, [r3, 0x1] - lsls r0, 29 - lsrs r0, 31 - ands r0, r6 - lsls r0, 6 - mov r1, r10 - ands r1, r2 - orrs r1, r0 - strb r1, [r5] - ldrb r0, [r3, 0x1] - lsls r0, 28 - lsrs r0, 31 - lsls r0, 7 - mov r2, r9 - ands r1, r2 - orrs r1, r0 - strb r1, [r5] - ldrb r0, [r3, 0x1] - lsls r0, 27 - lsrs r0, 31 - ands r0, r6 - ldrb r2, [r5, 0x1] - mov r1, r12 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 26 - lsrs r0, 31 - ands r0, r6 - lsls r0, 1 - movs r2, 0x3 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 25 - lsrs r0, 31 - ands r0, r6 - lsls r0, 2 - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrb r0, [r3, 0x1] - lsrs r0, 7 - ands r0, r6 - lsls r0, 3 - movs r2, 0x9 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5, 0x1] - ldrb r0, [r3, 0x2] - lsls r0, 31 - lsrs r0, 31 - ands r0, r6 - lsls r0, 4 - movs r1, 0x11 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrb r0, [r3, 0x2] - lsrs r0, 7 - ands r0, r6 - lsls r0, 5 - movs r2, 0x21 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r5, 0x1] - ldrb r0, [r3, 0x3] - lsls r0, 31 - lsrs r0, 31 - ands r0, r6 - lsls r0, 6 - mov r1, r10 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrb r0, [r3, 0x3] - lsls r0, 30 - lsrs r0, 31 - lsls r0, 7 - mov r2, r9 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrb r0, [r3, 0x3] - lsls r0, 29 - lsrs r0, 31 - ands r0, r6 - ldrb r2, [r5, 0x2] - mov r1, r12 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x2] - ldrb r2, [r3, 0x18] - lsls r2, 28 - lsrs r2, 27 - movs r0, 0x1F - negs r0, r0 - ands r1, r0 - orrs r1, r2 - strb r1, [r5, 0x2] - ldrb r1, [r3, 0xB] - lsls r1, 28 - movs r4, 0xF - lsrs r1, 28 - ldrb r2, [r5, 0x3] - adds r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r1, [r3, 0xB] - lsrs r1, 4 - lsls r1, 4 - ands r0, r4 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r0, [r3, 0x5] - strb r0, [r5, 0x4] - ldrb r0, [r3, 0x6] - strb r0, [r5, 0x5] - ldrb r0, [r3, 0x7] - strb r0, [r5, 0x6] - ldrb r0, [r3, 0x8] - strb r0, [r5, 0x7] - ldrb r0, [r3, 0x9] - strb r0, [r5, 0x8] - ldrb r0, [r3, 0xA] - strb r0, [r5, 0x9] - ldrh r0, [r3, 0x10] - strh r0, [r5, 0xA] - ldrh r0, [r3, 0x12] - strh r0, [r5, 0xC] - ldrb r0, [r3, 0x1D] - strb r0, [r5, 0xE] - ldrb r0, [r3, 0x1F] - strb r0, [r5, 0xF] - adds r0, r3, 0 - adds r0, 0x21 - ldrb r0, [r0] - strb r0, [r5, 0x10] - adds r3, 0x22 - ldrb r0, [r3] - strb r0, [r5, 0x11] - adds r5, 0x14 - adds r7, 0x24 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0xF - bhi _0815A1E4 - b _0815A02E -_0815A1E4: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815A1F4: .4byte gMapObjects - thumb_func_end sub_815A008 - thumb_func_start sub_815A1F8 sub_815A1F8: @ 815A1F8 push {r4-r7,lr} diff --git a/include/global.h b/include/global.h index 461402f1f..b10f4af49 100644 --- a/include/global.h +++ b/include/global.h @@ -565,6 +565,12 @@ typedef union QuestLogScene QuestLogScene; // This name is a complete guess and may change. +#define MAP_OBJECTS_COUNT 16 +#define BERRY_TREES_COUNT 128 +#define FLAGS_COUNT 288 // 300 +#define VARS_COUNT 256 +#define MAIL_COUNT 16 + // Declare here so that it can be recursively referenced. union QuestLogMovement; @@ -578,6 +584,43 @@ union QuestLogMovement } ident_struct; }; +struct QuestLogMapObject +{ + /*0x00*/ u8 active:1; + /*0x00*/ u8 mapobj_bit_3:1; + /*0x00*/ u8 mapobj_bit_4:1; + /*0x00*/ u8 mapobj_bit_5:1; + /*0x00*/ u8 mapobj_bit_8:1; + /*0x00*/ u8 mapobj_bit_9:1; + /*0x00*/ u8 mapobj_bit_10:1; + /*0x00*/ u8 mapobj_bit_11:1; + /*0x01*/ u8 mapobj_bit_12:1; + /*0x01*/ u8 mapobj_bit_13:1; + /*0x01*/ u8 mapobj_bit_14:1; + /*0x01*/ u8 mapobj_bit_15:1; + /*0x01*/ u8 mapobj_bit_16:1; + /*0x01*/ u8 mapobj_bit_23:1; + /*0x01*/ u8 mapobj_bit_24:1; + /*0x01*/ u8 mapobj_bit_25:1; + /*0x02*/ u8 mapobj_bit_26:1; + /*0x02*/ u8 mapobj_unk_18:4; + /*0x02*/ u8 unused_02_5:3; + /*0x03*/ u8 mapobj_unk_0B_0:4; + /*0x03*/ u8 elevation:4; + /*0x04*/ u8 graphicsId; + /*0x05*/ u8 animPattern; + /*0x06*/ u8 trainerType; + /*0x07*/ u8 localId; + /*0x08*/ u8 mapNum; + /*0x09*/ u8 mapGroup; + /*0x0a*/ s16 x; + /*0x0c*/ s16 y; + /*0x0e*/ u8 trainerRange_berryTreeId; + /*0x0f*/ u8 mapobj_unk_1F; + /*0x10*/ u8 mapobj_unk_21; + /*0x11*/ u8 animId; +}; + struct QuestLog { /*0x0000*/ u8 unk_000; @@ -586,7 +629,7 @@ struct QuestLog /*0x0003*/ s8 unk_003; /*0x0004*/ s16 unk_004; /*0x0006*/ s16 unk_006; - /*0x0008*/ u8 filler_008[0x140]; + /*0x0008*/ struct QuestLogMapObject unk_008[MAP_OBJECTS_COUNT]; // These arrays hold the game state for // playing back the quest log @@ -606,12 +649,6 @@ struct FameCheckerSaveData u16 unk_0_E:2; }; -#define MAP_OBJECTS_COUNT 16 -#define BERRY_TREES_COUNT 128 -#define FLAGS_COUNT 288 // 300 -#define VARS_COUNT 256 -#define MAIL_COUNT 16 - #define NUM_EASY_CHAT_EXTRA_PHRASES 33 #define EASY_CHAT_EXTRA_PHRASES_SIZE ((NUM_EASY_CHAT_EXTRA_PHRASES >> 3) + (NUM_EASY_CHAT_EXTRA_PHRASES % 8 ? 1 : 0)) diff --git a/ld_script.txt b/ld_script.txt index 482ea5d88..50c737c8b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -257,6 +257,7 @@ SECTIONS { src/quest_log_8150454.o(.text); asm/dodrio_berry_picking.o(.text); asm/battle_controller_pokedude.o(.text); + src/unk_8159F40.o(.text); asm/unk_8159F40.o(.text); asm/teachy_tv.o(.text); asm/unk_815C27C.o(.text); diff --git a/src/unk_8159F40.c b/src/unk_8159F40.c new file mode 100644 index 000000000..0a231e498 --- /dev/null +++ b/src/unk_8159F40.c @@ -0,0 +1,92 @@ +#include "global.h" +#include "battle.h" +#include "event_data.h" +#include "quest_log.h" + +struct UnkStruct_84792D0 +{ + u8 field_0; + u8 field_1; + u16 field_2; + u16 field_4[4]; + u8 field_C; + u8 field_D; +}; + +extern const struct UnkStruct_84792D0 *const gUnknown_84792D0[]; + +void sub_8159F40(void) +{ + s32 i, j; + struct Pokemon *mon; + s32 myIdx = 0; + s32 opIdx = 0; + const struct UnkStruct_84792D0 * data; + + gBattleTypeFlags = BATTLE_TYPE_DOME; + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + data = gUnknown_84792D0[gSpecialVar_0x8004]; + + i = 0; + do + { + if (data[i].field_0 == 0) + { + mon = &gPlayerParty[myIdx]; + myIdx++; + } + else + { + mon = &gEnemyParty[opIdx]; + opIdx++; + } + CreateMonWithGenderNatureLetter(mon, data[i].field_2, data[i].field_1, 0, data[i].field_D, data[i].field_C, 0); + for (j = 0; j < 4; j++) + { + SetMonMoveSlot(mon, data[i].field_4[j], j); + } + i++; + } while (data[i].field_0 != 0xFF); +} + +void sub_815A008(struct QuestLog * questLog) +{ + u32 i; + + for (i = 0; i < MAP_OBJECTS_COUNT; i++) + { + questLog->unk_008[i].active = gMapObjects[i].active; + questLog->unk_008[i].mapobj_bit_3 = gMapObjects[i].mapobj_bit_3; + questLog->unk_008[i].mapobj_bit_4 = gMapObjects[i].mapobj_bit_4; + questLog->unk_008[i].mapobj_bit_5 = gMapObjects[i].mapobj_bit_5; + questLog->unk_008[i].mapobj_bit_8 = gMapObjects[i].mapobj_bit_8; + questLog->unk_008[i].mapobj_bit_9 = gMapObjects[i].mapobj_bit_9; + questLog->unk_008[i].mapobj_bit_10 = gMapObjects[i].mapobj_bit_10; + questLog->unk_008[i].mapobj_bit_11 = gMapObjects[i].mapobj_bit_11; + questLog->unk_008[i].mapobj_bit_12 = gMapObjects[i].mapobj_bit_12; + questLog->unk_008[i].mapobj_bit_13 = gMapObjects[i].mapobj_bit_13; + questLog->unk_008[i].mapobj_bit_14 = gMapObjects[i].mapobj_bit_14; + questLog->unk_008[i].mapobj_bit_15 = gMapObjects[i].mapobj_bit_15; + questLog->unk_008[i].mapobj_bit_16 = gMapObjects[i].mapobj_bit_16; + questLog->unk_008[i].mapobj_bit_23 = gMapObjects[i].mapobj_bit_23; + questLog->unk_008[i].mapobj_bit_24 = gMapObjects[i].mapobj_bit_24; + questLog->unk_008[i].mapobj_bit_25 = gMapObjects[i].mapobj_bit_25; + questLog->unk_008[i].mapobj_bit_26 = gMapObjects[i].mapobj_bit_26; + questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].mapobj_unk_18; + questLog->unk_008[i].mapobj_unk_0B_0 = gMapObjects[i].mapobj_unk_0B_0; + questLog->unk_008[i].elevation = gMapObjects[i].elevation; + questLog->unk_008[i].graphicsId = gMapObjects[i].graphicsId; + questLog->unk_008[i].animPattern = gMapObjects[i].animPattern; + questLog->unk_008[i].trainerType = gMapObjects[i].trainerType; + questLog->unk_008[i].localId = gMapObjects[i].localId; + questLog->unk_008[i].mapNum = gMapObjects[i].mapNum; + questLog->unk_008[i].mapGroup = gMapObjects[i].mapGroup; + questLog->unk_008[i].x = gMapObjects[i].coords2.x; + questLog->unk_008[i].y = gMapObjects[i].coords2.y; + questLog->unk_008[i].trainerRange_berryTreeId = gMapObjects[i].trainerRange_berryTreeId; + questLog->unk_008[i].mapobj_unk_1F = gMapObjects[i].mapobj_unk_1F; + questLog->unk_008[i].mapobj_unk_21 = gMapObjects[i].mapobj_unk_21; + questLog->unk_008[i].animId = gMapObjects[i].animId; + } +} |