summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-05-09 16:33:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-05-09 16:33:30 -0400
commit210f87573018cbe8a6ea24ee9595b12f1f05f6a9 (patch)
treefb6f5711aa456be3b6b3017783bd76c8c0070284
parent9b01d4fee588b0733cf4242173d43a9fc5889e57 (diff)
through sub_815A008
-rw-r--r--asm/unk_8159F40.s353
-rw-r--r--include/global.h51
-rw-r--r--ld_script.txt1
-rw-r--r--src/unk_8159F40.c92
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;
+ }
+}