summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2017-01-21 15:03:39 -0800
committerYamaArashi <shadow962@live.com>2017-01-21 15:03:39 -0800
commita8b6cad54a9e0abadd61d3d71d5e9ee9f279382b (patch)
tree6d1761fbcfc82448f193685f2fea78659ef03ebc
parent07b268c400a7bc883a9192daa14d7a76760c7265 (diff)
decompile field_region_map
-rw-r--r--asm/field_region_map.s274
-rw-r--r--ld_script.txt2
-rw-r--r--src/field_region_map.c134
3 files changed, 135 insertions, 275 deletions
diff --git a/asm/field_region_map.s b/asm/field_region_map.s
deleted file mode 100644
index 37c97c3ec..000000000
--- a/asm/field_region_map.s
+++ /dev/null
@@ -1,274 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start FieldInitRegionMap
-FieldInitRegionMap: @ 813EEB4
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- bl SetVBlankCallback
- ldr r2, _0813EED8 @ =0x02000000
- ldr r0, _0813EEDC @ =0x00000888
- adds r1, r2, r0
- movs r0, 0
- strh r0, [r1]
- str r4, [r2]
- ldr r0, _0813EEE0 @ =CB2_FieldInitRegionMap
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813EED8: .4byte 0x02000000
-_0813EEDC: .4byte 0x00000888
-_0813EEE0: .4byte CB2_FieldInitRegionMap
- thumb_func_end FieldInitRegionMap
-
- thumb_func_start CB2_FieldInitRegionMap
-CB2_FieldInitRegionMap: @ 813EEE4
- push {r4,lr}
- sub sp, 0x4
- movs r0, 0x80
- lsls r0, 19
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x10
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r0, _0813EF98 @ =0x02000008
- movs r1, 0
- bl sub_80FA8EC
- movs r0, 0
- movs r1, 0
- bl sub_80FBCF0
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80FBB3C
- ldr r4, _0813EF9C @ =gWindowConfig_81E709C
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- bl MenuZeroFillScreen
- ldr r1, _0813EFA0 @ =REG_BG0CNT
- movs r2, 0xF8
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- movs r0, 0x15
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x3
- bl MenuDrawTextWindow
- ldr r0, _0813EFA4 @ =gOtherText_Hoenn
- movs r1, 0x16
- movs r2, 0x1
- movs r3, 0x38
- bl sub_8072BD8
- movs r0, 0x10
- movs r1, 0x10
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- bl sub_813F0C8
- ldr r0, _0813EFA8 @ =CB2_FieldRegionMap
- bl SetMainCallback2
- ldr r0, _0813EFAC @ =VBlankCB_FieldRegionMap
- bl SetVBlankCallback
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813EF98: .4byte 0x02000008
-_0813EF9C: .4byte gWindowConfig_81E709C
-_0813EFA0: .4byte REG_BG0CNT
-_0813EFA4: .4byte gOtherText_Hoenn
-_0813EFA8: .4byte CB2_FieldRegionMap
-_0813EFAC: .4byte VBlankCB_FieldRegionMap
- thumb_func_end CB2_FieldInitRegionMap
-
- thumb_func_start VBlankCB_FieldRegionMap
-VBlankCB_FieldRegionMap: @ 813EFB0
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_FieldRegionMap
-
- thumb_func_start CB2_FieldRegionMap
-CB2_FieldRegionMap: @ 813EFC4
- push {lr}
- bl sub_813EFDC
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end CB2_FieldRegionMap
-
- thumb_func_start sub_813EFDC
-sub_813EFDC: @ 813EFDC
- push {lr}
- sub sp, 0x4
- ldr r1, _0813EFF8 @ =0x02000000
- ldr r2, _0813EFFC @ =0x00000888
- adds r0, r1, r2
- ldrh r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _0813F0B8
- lsls r0, 2
- ldr r1, _0813F000 @ =_0813F004
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813EFF8: .4byte 0x02000000
-_0813EFFC: .4byte 0x00000888
-_0813F000: .4byte _0813F004
- .align 2, 0
-_0813F004:
- .4byte _0813F018
- .4byte _0813F030
- .4byte _0813F04C
- .4byte _0813F078
- .4byte _0813F0A0
-_0813F018:
- movs r1, 0x80
- lsls r1, 19
- ldr r3, _0813F028 @ =0x00001541
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _0813F02C @ =0x00000888
- adds r1, r2, r0
- b _0813F08E
- .align 2, 0
-_0813F028: .4byte 0x00001541
-_0813F02C: .4byte 0x00000888
-_0813F030:
- ldr r0, _0813F044 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0813F0B8
- ldr r3, _0813F048 @ =0x00000888
- adds r1, r2, r3
- b _0813F08E
- .align 2, 0
-_0813F044: .4byte gPaletteFade
-_0813F048: .4byte 0x00000888
-_0813F04C:
- bl sub_80FAB60
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0813F05E
- bl sub_813F0C8
- b _0813F0B8
-_0813F05E:
- cmp r0, 0x3
- blt _0813F0B8
- cmp r0, 0x5
- bgt _0813F0B8
- ldr r1, _0813F070 @ =0x02000000
- ldr r0, _0813F074 @ =0x00000888
- adds r1, r0
- b _0813F08E
- .align 2, 0
-_0813F070: .4byte 0x02000000
-_0813F074: .4byte 0x00000888
-_0813F078:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0813F098 @ =0x02000000
- ldr r2, _0813F09C @ =0x00000888
- adds r1, r2
-_0813F08E:
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0813F0B8
- .align 2, 0
-_0813F098: .4byte 0x02000000
-_0813F09C: .4byte 0x00000888
-_0813F0A0:
- ldr r0, _0813F0C0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0813F0B8
- bl sub_80FAB10
- ldr r0, _0813F0C4 @ =0x02000000
- ldr r0, [r0]
- bl SetMainCallback2
-_0813F0B8:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0813F0C0: .4byte gPaletteFade
-_0813F0C4: .4byte 0x02000000
- thumb_func_end sub_813EFDC
-
- thumb_func_start sub_813F0C8
-sub_813F0C8: @ 813F0C8
- push {lr}
- movs r0, 0x11
- movs r1, 0x11
- movs r2, 0x1C
- movs r3, 0x12
- bl MenuFillWindowRectWithBlankTile
- ldr r1, _0813F0F0 @ =0x02000000
- ldrb r0, [r1, 0x1E]
- cmp r0, 0
- beq _0813F0EA
- adds r0, r1, 0
- adds r0, 0x8
- movs r1, 0x11
- movs r2, 0x11
- bl MenuPrint
-_0813F0EA:
- pop {r0}
- bx r0
- .align 2, 0
-_0813F0F0: .4byte 0x02000000
- thumb_func_end sub_813F0C8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 538bdfaba..c0041488c 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -227,7 +227,7 @@ SECTIONS {
src/player_pc.o(.text);
asm/player_pc.o(.text);
src/intro.o(.text);
- asm/field_region_map.o(.text);
+ src/field_region_map.o(.text);
asm/battle_anim_813F0F4.o(.text);
asm/hall_of_fame.o(.text);
src/credits.o(.text);
diff --git a/src/field_region_map.c b/src/field_region_map.c
new file mode 100644
index 000000000..db12eb6a5
--- /dev/null
+++ b/src/field_region_map.c
@@ -0,0 +1,134 @@
+#include "global.h"
+#include "asm.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "sprite.h"
+#include "text.h"
+
+extern void sub_80FA8EC(u32, u8);
+extern void sub_80FAB10(void);
+extern u8 sub_80FAB60(void);
+extern void sub_80FBCF0(u32, u8);
+extern void sub_80FBB3C(u16, u16);
+
+struct RegionMapStruct
+{
+ u8 str[0x16];
+ u8 unk16;
+ u8 filler[0x869];
+};
+
+struct UnkStruct
+{
+ MainCallback callback;
+ u8 filler[4];
+ struct RegionMapStruct unk8;
+ u16 unk888;
+};
+
+extern struct UnkStruct unk_2000000;
+
+extern u8 gOtherText_Hoenn[];
+
+void CB2_FieldInitRegionMap(void);
+void CB2_FieldRegionMap(void);
+void VBlankCB_FieldRegionMap(void);
+void sub_813EFDC(void);
+void sub_813F0C8(void);
+
+void FieldInitRegionMap(MainCallback callback)
+{
+ SetVBlankCallback(NULL);
+ unk_2000000.unk888 = 0;
+ unk_2000000.callback = callback;
+ SetMainCallback2(CB2_FieldInitRegionMap);
+}
+
+void CB2_FieldInitRegionMap(void)
+{
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ sub_80FA8EC((u32)&unk_2000000.unk8, 0);
+ sub_80FBCF0(0, 0);
+ sub_80FBB3C(1, 1);
+ SetUpWindowConfig(&gWindowConfig_81E709C);
+ InitMenuWindow(&gWindowConfig_81E709C);
+ MenuZeroFillScreen();
+ REG_BG0CNT = 7936;
+ MenuDrawTextWindow(21, 0, 29, 3);
+ sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38);
+ MenuDrawTextWindow(16, 16, 29, 19);
+ sub_813F0C8();
+ SetMainCallback2(CB2_FieldRegionMap);
+ SetVBlankCallback(VBlankCB_FieldRegionMap);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
+}
+
+void VBlankCB_FieldRegionMap(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_FieldRegionMap(void)
+{
+ sub_813EFDC();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_813EFDC(void)
+{
+ switch (unk_2000000.unk888)
+ {
+ case 0:
+ REG_DISPCNT = 5441;
+ unk_2000000.unk888++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ unk_2000000.unk888++;
+ break;
+ case 2:
+ switch (sub_80FAB60())
+ {
+ case 3:
+ sub_813F0C8();
+ break;
+ case 4:
+ case 5:
+ unk_2000000.unk888++;
+ }
+ break;
+ case 3:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ unk_2000000.unk888++;
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ sub_80FAB10();
+ SetMainCallback2(unk_2000000.callback);
+ }
+ break;
+ }
+}
+
+void sub_813F0C8(void)
+{
+ MenuFillWindowRectWithBlankTile(17, 17, 28, 18);
+ if (unk_2000000.unk8.unk16)
+ MenuPrint(unk_2000000.unk8.str, 17, 17);
+}