diff --git a/INSTALL.md b/INSTALL.md index db4f80aba..5ba0ee484 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -50,3 +50,9 @@ If the command for building pokefirered.gba does not work, run `nproc` and use t ## Windows 10 Install the [Windows Subsystem for Linux](https://docs.microsoft.com/windows/wsl/install-win10), then install [devkitARM](https://devkitpro.org/wiki/Getting_Started) inside the subsystem, and run the commands. + +## Important note for all users + +Until further notice, this repository is dependent on `baserom.gba`, which is a copy of Pokémon FireRed (U)(1.0) bearing the SHA1 sum `41cb23d8dccc8ebd7c649cd8fbb58eeace6e2fdc`. If you attempt to build and get the following error or similar, it's because `baserom.gba` is missing. + + No rule to make target 'build/firered/data/librfu_rodata.o', needed by 'pokefirered.elf'. Stop. diff --git a/Makefile b/Makefile index f3c4c5843..4e81222f4 100644 --- a/Makefile +++ b/Makefile @@ -108,11 +108,6 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ sound/songs/%.s: sound/songs/%.mid cd $(@D) && ../../$(MID) $(dummy == 0" - - .align 2 -gUnknown_8479D24:: @ 8479D24 - .asciz "ttdata->id == 0" - -gUnknown_8479D34:: @ 8479D34 - .incbin "baserom.gba", 0x479D34, 0x4 - -gUnknown_8479D38:: @ 8479D38 - .incbin "baserom.gba", 0x479D38, 0x8 - -gUnknown_8479D40:: @ 8479D40 - .incbin "baserom.gba", 0x479D40, 0x8 - -gUnknown_8479D48:: @ 8479D48 - .incbin "baserom.gba", 0x479D48, 0x190 - -gUnknown_8479ED8:: @ 8479ED8 - .incbin "baserom.gba", 0x479ED8, 0x14C - -gUnknown_847A024:: @ 847A024 - .incbin "baserom.gba", 0x47A024, 0x50 - -gUnknown_847A074:: @ 847A074 - .incbin "baserom.gba", 0x47A074, 0x1A4 - -gUnknown_847A218:: @ 847A218 - .incbin "baserom.gba", 0x47A218, 0x14 - -gUnknown_847A22C:: @ 847A22C - .incbin "baserom.gba", 0x47A22C, 0x4 - -gUnknown_847A230:: @ 847A230 - .incbin "baserom.gba", 0x47A230, 0x54 - -gUnknown_847A284:: @ 847A284 - .incbin "baserom.gba", 0x47A284, 0x30 - -gUnknown_847A2B4:: @ 847A2B4 - .incbin "baserom.gba", 0x47A2B4, 0x1E - -gUnknown_847A2D2:: @ 847A2D2 - .incbin "baserom.gba", 0x47A2D2, 0x1C - -gUnknown_847A2EE:: @ 847A2EE - .incbin "baserom.gba", 0x47A2EE, 0x10 - -gUnknown_847A2FE:: @ 847A2FE - .incbin "baserom.gba", 0x47A2FE, 0x10 - -gUnknown_847A30E:: @ 847A30E - .incbin "baserom.gba", 0x47A30E, 0x48E - -gUnknown_847A79C:: @ 847A79C - .incbin "baserom.gba", 0x47A79C, 0x8 - -gUnknown_847A7A4:: @ 847A7A4 - .incbin "baserom.gba", 0x47A7A4, 0xBC - -gUnknown_847A860:: @ 847A860 - .incbin "baserom.gba", 0x47A860, 0x18 - -gUnknown_847A878:: @ 847A878 - .incbin "baserom.gba", 0x47A878, 0x18 - -gUnknown_847A890:: @ 847A890 - .incbin "baserom.gba", 0x47A890, 0x7F1C - -gUnknown_84827AC:: @ 84827AC - .incbin "baserom.gba", 0x4827AC, 0x8 - -gUnknown_84827B4:: @ 84827B4 - .incbin "baserom.gba", 0x4827B4, 0x5F34 - -gUnknown_84886E8:: @ 84886E8 - .incbin "baserom.gba", 0x4886E8, 0x588 - -gUnknown_8488C70:: @ 8488C70 - .incbin "baserom.gba", 0x488C70, 0x32 - -gUnknown_8488CA2:: @ 8488CA2 - .incbin "baserom.gba", 0x488CA2, 0x2C - -gUnknown_8488CCE:: @ 8488CCE - .incbin "baserom.gba", 0x488CCE, 0x28 - -gUnknown_8488CF6:: @ 8488CF6 - .incbin "baserom.gba", 0x488CF6, 0x34 - -gUnknown_8488D2A:: @ 8488D2A - .incbin "baserom.gba", 0x488D2A, 0x36 - -gUnknown_8488D60:: @ 8488D60 - .incbin "baserom.gba", 0x488D60, 0x1C - -gUnknown_8488D7C:: @ 8488D7C - .incbin "baserom.gba", 0x488D7C, 0x12 - -gUnknown_8488D8E:: @ 8488D8E - .incbin "baserom.gba", 0x488D8E, 0x2F - -gUnknown_8488DBD:: @ 8488DBD - .incbin "baserom.gba", 0x488DBD, 0x40 - -gUnknown_8488DFD:: @ 8488DFD - .incbin "baserom.gba", 0x488DFD, 0xB6B diff --git a/data/data_8471F00.s b/data/data_8471F00.s new file mode 100644 index 000000000..b9767d933 --- /dev/null +++ b/data/data_8471F00.s @@ -0,0 +1,368 @@ + .section .rodata + + .align 2 +gUnknown_8471F00:: + .incbin "baserom.gba", 0x471F00, 0x50 + +gUnknown_8471F50:: @ 8471F50 + .incbin "baserom.gba", 0x471F50, 0x113 + +gUnknown_8472063:: @ 8472063 + .incbin "baserom.gba", 0x472063, 0x4B + +gUnknown_84720AE:: @ 84720AE + .incbin "baserom.gba", 0x4720AE, 0x4E + +gUnknown_84720FC:: @ 84720FC + .incbin "baserom.gba", 0x4720FC, 0x37 + +gUnknown_8472133:: @ 8472133 + .incbin "baserom.gba", 0x472133, 0x3409 + +gUnknown_847553C:: @ 847553C + .incbin "baserom.gba", 0x47553C, 0xC + +gUnknown_8475548:: @ 8475548 + .incbin "baserom.gba", 0x475548, 0x8 + +gUnknown_8475550:: @ 8475550 + .incbin "baserom.gba", 0x475550, 0x8 + +gUnknown_8475558:: @ 8475558 + .incbin "baserom.gba", 0x475558, 0x20 + +gUnknown_8475578:: @ 8475578 + .incbin "baserom.gba", 0x475578, 0x30 + +gUnknown_84755A8:: @ 84755A8 + .incbin "baserom.gba", 0x4755A8, 0x30 + +gUnknown_84755D8:: @ 84755D8 + .incbin "baserom.gba", 0x4755D8, 0x8 + +gUnknown_84755E0:: @ 84755E0 + .incbin "baserom.gba", 0x4755E0, 0x8 + +gUnknown_84755E8:: @ 84755E8 + .incbin "baserom.gba", 0x4755E8, 0x10 + +gUnknown_84755F8:: @ 84755F8 + .incbin "baserom.gba", 0x4755F8, 0x4 + +gUnknown_84755FC:: @ 84755FC + .incbin "baserom.gba", 0x4755FC, 0x6 + +gUnknown_8475602:: @ 8475602 + .incbin "baserom.gba", 0x475602, 0x6 + +gUnknown_8475608:: @ 8475608 + .incbin "baserom.gba", 0x475608, 0x40 + +gUnknown_8475648:: @ 8475648 + .incbin "baserom.gba", 0x475648, 0x14 + +gUnknown_847565C:: @ 847565C + .incbin "baserom.gba", 0x47565C, 0x18 + +gUnknown_8475674:: @ 8475674 + .incbin "baserom.gba", 0x475674, 0x10 + +gUnknown_8475684:: @ 8475684 + .incbin "baserom.gba", 0x475684, 0x8 + +gUnknown_847568C:: @ 847568C + .incbin "baserom.gba", 0x47568C, 0x10 + +gUnknown_847569C:: @ 847569C + .incbin "baserom.gba", 0x47569C, 0x8 + +gUnknown_84756A4:: @ 84756A4 + .incbin "baserom.gba", 0x4756A4, 0x204 + +gUnknown_84758A8:: @ 84758A8 + .incbin "baserom.gba", 0x4758A8, 0xC0 + +gUnknown_8475968:: @ 8475968 + .incbin "baserom.gba", 0x475968, 0x1D4 + +gUnknown_8475B3C:: @ 8475B3C + .incbin "baserom.gba", 0x475B3C, 0x890 + +gUnknown_84763CC:: @ 84763CC + .incbin "baserom.gba", 0x4763CC, 0xDCC + +gUnknown_8477198:: @ 8477198 + .incbin "baserom.gba", 0x477198, 0x94 + +gUnknown_847722C:: @ 847722C + .incbin "baserom.gba", 0x47722C, 0x148 + +gUnknown_8477374:: @ 8477374 + .incbin "baserom.gba", 0x477374, 0x121C + +gUnknown_8478590:: @ 8478590 + .incbin "baserom.gba", 0x478590, 0x26C + +gUnknown_84787FC:: @ 84787FC + .incbin "baserom.gba", 0x4787FC, 0x250 + +gUnknown_8478A4C:: @ 8478A4C + .incbin "baserom.gba", 0x478A4C, 0x24C + +gUnknown_8478C98:: @ 8478C98 + .incbin "baserom.gba", 0x478C98, 0x48 + +gUnknown_8478CE0:: @ 8478CE0 + .incbin "baserom.gba", 0x478CE0, 0xB0 + +gUnknown_8478D90:: @ 8478D90 + .incbin "baserom.gba", 0x478D90, 0x8 + +gUnknown_8478D98:: @ 8478D98 + .incbin "baserom.gba", 0x478D98, 0x8 + +gUnknown_8478DA0:: @ 8478DA0 + .incbin "baserom.gba", 0x478DA0, 0x8 + +gUnknown_8478DA8:: @ 8478DA8 + .incbin "baserom.gba", 0x478DA8, 0x24 + +gUnknown_8478DCC:: @ 8478DCC + .incbin "baserom.gba", 0x478DCC, 0x8 + +gUnknown_8478DD4:: @ 8478DD4 + .incbin "baserom.gba", 0x478DD4, 0x8 + +gUnknown_8478DDC:: @ 8478DDC + .incbin "baserom.gba", 0x478DDC, 0x18 + +gUnknown_8478DF4:: @ 8478DF4 + .incbin "baserom.gba", 0x478DF4, 0x18 + +gUnknown_8478E0C:: @ 8478E0C + .incbin "baserom.gba", 0x478E0C, 0x2 + +gUnknown_8478E0E:: @ 8478E0E + .incbin "baserom.gba", 0x478E0E, 0xA + +gUnknown_8478E18:: @ 8478E18 + .incbin "baserom.gba", 0x478E18, 0x8 + +gUnknown_8478E20:: @ 8478E20 + .incbin "baserom.gba", 0x478E20, 0x18 + +gUnknown_8478E38:: @ 8478E38 + .incbin "baserom.gba", 0x478E38, 0x3 + +gUnknown_8478E3B:: @ 8478E3B + .incbin "baserom.gba", 0x478E3B, 0x45 + +gUnknown_8478E80:: @ 8478E80 + .incbin "baserom.gba", 0x478E80, 0x14 + +gUnknown_8478E94:: @ 8478E94 + .incbin "baserom.gba", 0x478E94, 0x14 + +gUnknown_8478EA8:: @ 8478EA8 + .incbin "baserom.gba", 0x478EA8, 0x8 + +gUnknown_8478EB0:: @ 8478EB0 + .incbin "baserom.gba", 0x478EB0, 0xA + +gUnknown_8478EBA:: @ 8478EBA + .incbin "baserom.gba", 0x478EBA, 0xA + +gUnknown_8478EC4:: @ 8478EC4 + .incbin "baserom.gba", 0x478EC4, 0x50 + +gUnknown_8478F14:: @ 8478F14 + .incbin "baserom.gba", 0x478F14, 0x8 + +gUnknown_8478F1C:: @ 8478F1C + .incbin "baserom.gba", 0x478F1C, 0x144 + +gUnknown_8479060:: @ 8479060 + .incbin "baserom.gba", 0x479060, 0x78 + +gUnknown_84790D8:: @ 84790D8 + .incbin "baserom.gba", 0x4790D8, 0xC0 + +gUnknown_8479198:: @ 8479198 + .incbin "baserom.gba", 0x479198, 0x10 + +gUnknown_84791A8:: @ 84791A8 + .incbin "baserom.gba", 0x4791A8, 0x10 + +gUnknown_84791B8:: @ 84791B8 + .incbin "baserom.gba", 0x4791B8, 0x14 + +gUnknown_84791CC:: @ 84791CC + .incbin "baserom.gba", 0x4791CC, 0x1C + +gUnknown_84791E8:: @ 84791E8 + .incbin "baserom.gba", 0x4791E8, 0xE8 + +gUnknown_84792D0:: @ 84792D0 + .incbin "baserom.gba", 0x4792D0, 0x10 + +gUnknown_84792E0:: @ 84792E0 + .incbin "baserom.gba", 0x4792E0, 0x10 + +gUnknown_84792F0:: @ 84792F0 + .incbin "baserom.gba", 0x4792F0, 0x50 + +gUnknown_8479340:: @ 8479340 + .incbin "baserom.gba", 0x479340, 0x28 + +gUnknown_8479368:: @ 8479368 + .incbin "baserom.gba", 0x479368, 0x18 + +gUnknown_8479380:: @ 8479380 + .incbin "baserom.gba", 0x479380, 0x10 + +gUnknown_8479390:: @ 8479390 + .incbin "baserom.gba", 0x479390, 0x1B8 + +gUnknown_8479548:: @ 8479548 + .incbin "baserom.gba", 0x479548, 0x18 + +gUnknown_8479560:: @ 8479560 + .incbin "baserom.gba", 0x479560, 0x18 + +gUnknown_8479578:: @ 8479578 + .incbin "baserom.gba", 0x479578, 0x18 + +gUnknown_8479590:: @ 8479590 + .incbin "baserom.gba", 0x479590, 0x28 + +gUnknown_84795B8:: @ 84795B8 + .incbin "baserom.gba", 0x4795B8, 0x10 + +gUnknown_84795C8:: @ 84795C8 + .incbin "baserom.gba", 0x4795C8, 0x90 + +gUnknown_8479658:: @ 8479658 + .incbin "baserom.gba", 0x479658, 0x600 + +gUnknown_8479C58:: @ 8479C58 + .incbin "baserom.gba", 0x479C58, 0x30 + +gUnknown_8479C88:: @ 8479C88 + .incbin "baserom.gba", 0x479C88, 0x38 + +gUnknown_8479CC0:: @ 8479CC0 + .incbin "baserom.gba", 0x479CC0, 0x18 + + .align 2 +gUnknown_8479CD8:: @ 8479CD8 + .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c" + + .align 2 +gUnknown_8479D10:: @ 8479D10 + .asciz "ttdata->dummy == 0" + + .align 2 +gUnknown_8479D24:: @ 8479D24 + .asciz "ttdata->id == 0" + +gUnknown_8479D34:: @ 8479D34 + .incbin "baserom.gba", 0x479D34, 0x4 + +gUnknown_8479D38:: @ 8479D38 + .incbin "baserom.gba", 0x479D38, 0x8 + +gUnknown_8479D40:: @ 8479D40 + .incbin "baserom.gba", 0x479D40, 0x8 + +gUnknown_8479D48:: @ 8479D48 + .incbin "baserom.gba", 0x479D48, 0x190 + +gUnknown_8479ED8:: @ 8479ED8 + .incbin "baserom.gba", 0x479ED8, 0x14C + +gUnknown_847A024:: @ 847A024 + .incbin "baserom.gba", 0x47A024, 0x50 + +gUnknown_847A074:: @ 847A074 + .incbin "baserom.gba", 0x47A074, 0x1A4 + +gUnknown_847A218:: @ 847A218 + .incbin "baserom.gba", 0x47A218, 0x14 + +gUnknown_847A22C:: @ 847A22C + .incbin "baserom.gba", 0x47A22C, 0x4 + +gUnknown_847A230:: @ 847A230 + .incbin "baserom.gba", 0x47A230, 0x54 + +gUnknown_847A284:: @ 847A284 + .incbin "baserom.gba", 0x47A284, 0x30 + +gUnknown_847A2B4:: @ 847A2B4 + .incbin "baserom.gba", 0x47A2B4, 0x1E + +gUnknown_847A2D2:: @ 847A2D2 + .incbin "baserom.gba", 0x47A2D2, 0x1C + +gUnknown_847A2EE:: @ 847A2EE + .incbin "baserom.gba", 0x47A2EE, 0x10 + +gUnknown_847A2FE:: @ 847A2FE + .incbin "baserom.gba", 0x47A2FE, 0x10 + +gUnknown_847A30E:: @ 847A30E + .incbin "baserom.gba", 0x47A30E, 0x48E + +gUnknown_847A79C:: @ 847A79C + .incbin "baserom.gba", 0x47A79C, 0x8 + +gUnknown_847A7A4:: @ 847A7A4 + .incbin "baserom.gba", 0x47A7A4, 0xBC + +gUnknown_847A860:: @ 847A860 + .incbin "baserom.gba", 0x47A860, 0x18 + +gUnknown_847A878:: @ 847A878 + .incbin "baserom.gba", 0x47A878, 0x18 + +gUnknown_847A890:: @ 847A890 + .incbin "baserom.gba", 0x47A890, 0x7F1C + +gUnknown_84827AC:: @ 84827AC + .incbin "baserom.gba", 0x4827AC, 0x8 + +gUnknown_84827B4:: @ 84827B4 + .incbin "baserom.gba", 0x4827B4, 0x5F34 + +gUnknown_84886E8:: @ 84886E8 + .incbin "baserom.gba", 0x4886E8, 0x588 + +gUnknown_8488C70:: @ 8488C70 + .incbin "baserom.gba", 0x488C70, 0x32 + +gUnknown_8488CA2:: @ 8488CA2 + .incbin "baserom.gba", 0x488CA2, 0x2C + +gUnknown_8488CCE:: @ 8488CCE + .incbin "baserom.gba", 0x488CCE, 0x28 + +gUnknown_8488CF6:: @ 8488CF6 + .incbin "baserom.gba", 0x488CF6, 0x34 + +gUnknown_8488D2A:: @ 8488D2A + .incbin "baserom.gba", 0x488D2A, 0x36 + +gUnknown_8488D60:: @ 8488D60 + .incbin "baserom.gba", 0x488D60, 0x1C + +gUnknown_8488D7C:: @ 8488D7C + .incbin "baserom.gba", 0x488D7C, 0x12 + +gUnknown_8488D8E:: @ 8488D8E + .incbin "baserom.gba", 0x488D8E, 0x2F + +gUnknown_8488DBD:: @ 8488DBD + .incbin "baserom.gba", 0x488DBD, 0x40 + +gUnknown_8488DFD:: @ 8488DFD + .incbin "baserom.gba", 0x488DFD, 0xB6B diff --git a/data/graphics/unknown_8456638.bin b/data/graphics/unknown_8456638.bin new file mode 100644 index 000000000..53ea8cfb8 --- /dev/null +++ b/data/graphics/unknown_8456638.bin @@ -0,0 +1 @@ +̻ \ No newline at end of file diff --git a/data/graphics/unknown_84566a8.bin b/data/graphics/unknown_84566a8.bin new file mode 100644 index 000000000..2fc4a648a Binary files /dev/null and b/data/graphics/unknown_84566a8.bin differ diff --git a/data/text/quest_log.inc b/data/text/quest_log.inc new file mode 100644 index 000000000..58c9cf66e --- /dev/null +++ b/data/text/quest_log.inc @@ -0,0 +1,481 @@ +gUnknown_841A155:: @ 841A155 + .string "Previously on your quest…$" + +gUnknown_841A16F:: @ 841A16F + .string "{PLAYER} switched the POKéMON\n" + .string "{STR_VAR_1} with {STR_VAR_2}.$" + +gUnknown_841A193:: @ 841A193 + .string "Took the item {STR_VAR_2} from\n" + .string "{STR_VAR_1} and gave it the item\n" + .string "{STR_VAR_3} to hold.$" + +gUnknown_841A1CD:: @ 841A1CD + .string "Took the item {STR_VAR_2} from\n" + .string "{STR_VAR_1}.$" + +gUnknown_841A1E7:: @ 841A1E7 + .string "Used the item {STR_VAR_1} on {STR_VAR_2}\n" + .string "at this location.$" + +gUnknown_841A210:: @ 841A210 + .string "{PLAYER} used the\n" + .string "{STR_VAR_1}.$" + +gUnknown_841A220:: @ 841A220 + .string "Used the item {STR_VAR_1}, which was\n" + .string "in the KEY ITEMS POCKET.$" + +gUnknown_841A255:: @ 841A255 + .string "{STR_VAR_1} learned the move\n" + .string "{STR_VAR_2} from a TM.$" + +gUnknown_841A277:: @ 841A277 + .string "{STR_VAR_1} learned the move\n" + .string "{STR_VAR_2} from a TM and forgot\n" + .string "the move {STR_VAR_3}.$" + +gUnknown_841A2B0:: @ 841A2B0 + .string "POKéMON were fully restored\n" + .string "at a POKéMON CENTER.$" + +gUnknown_841A2E1:: @ 841A2E1 + .string "{UNKNOWN_F7 0x00} had a marvelous battle\n" + .string "with the CHAMPION, {UNKNOWN_F7 0x01}.$" + +gUnknown_841A312:: @ 841A312 + .string "In the end, {UNKNOWN_F7 0x00} sent out {UNKNOWN_F7 0x01}\n" + .string "while {UNKNOWN_F7 0x02} countered with\n" + .string "{UNKNOWN_F7 0x03}.$" + +gUnknown_841A349:: @ 841A349 + .string "And, as a result of battling with every\n" + .string "bit of power, {UNKNOWN_F7 0x00} won\n" + .string "the match.$" + +gUnknown_841A391:: @ 841A391 + .string "Removed the item {STR_VAR_1} from\n" + .string "the BAG’s ITEMS POCKET and stored it\n" + .string "on the PC.$" + +gUnknown_841A3DA:: @ 841A3DA + .string "{PLAYER} withdrew the item {STR_VAR_1}\n" + .string "from the PC.$" + +gUnknown_841A3FF:: @ 841A3FF + .string "Traded {STR_VAR_3} in exchange for\n" + .string "{STR_VAR_1}’s {STR_VAR_2}.$" + +gUnknown_841A422:: @ 841A422 + .string "Took on {UNKNOWN_F7 0x00} in a SINGLE BATTLE.\n" + .string "It was a hotly contested match that\n" + .string "resulted in a {UNKNOWN_F7 0x01}.$" + +gUnknown_841A477:: @ 841A477 + .string "Took on {UNKNOWN_F7 0x00} in a DOUBLE BATTLE.\n" + .string "It was an extended match that resulted\n" + .string "in a {UNKNOWN_F7 0x01}.$" + +gUnknown_841A4C6:: @ 841A4C6 + .string "{UNKNOWN_F7 0x00} and {UNKNOWN_F7 0x01} took on\n" + .string "{UNKNOWN_F7 0x02} and {UNKNOWN_F7 0x03} in a\n" + .string "MULTI BATTLE and got a {UNKNOWN_F7 0x04}.$" + +gUnknown_841A502:: + .string "win$" + +gUnknown_841A506:: + .string "loss$" + +gUnknown_841A50B:: @ 841A50B + .string "Mingled with other TRAINERS in\n" + .string "the UNION ROOM.$" + +gUnknown_841A53A:: + .string "Departed {STR_VAR_2}\n" + .string "in {STR_VAR_1} for the next\n" + .string "destination.$" + +gUnknown_841A566:: @ 841A566 + .string "After consideration, switched\n" + .string "{UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00} with\n" + .string "{UNKNOWN_F7 0x03} in {UNKNOWN_F7 0x02}.$" + +gUnknown_841A59C:: @ 841A59C + .string "After deep thought, switched\n" + .string "{UNKNOWN_F7 0x01} in BOX “{UNKNOWN_F7 0x00}” to\n" + .string "the BOX “{UNKNOWN_F7 0x02}.”$" + +gUnknown_841A5D9:: @ 841A5D9 + .string "Switched around {UNKNOWN_F7 0x01} and\n" + .string "{UNKNOWN_F7 0x02} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841A5FA:: @ 841A5FA + .string "Moved {UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841A60A:: @ 841A60A + .string "Switched {UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00}\n" + .string "with {UNKNOWN_F7 0x02} in the party.$" + +gUnknown_841A632:: @ 841A632 + .string "Added {UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00}\n" + .string "to the party.$" + +gUnknown_841A64F:: @ 841A64F + .string "Moved {UNKNOWN_F7 0x00} from the party\n" + .string "to {UNKNOWN_F7 0x01}.$" + +gUnknown_841A66E:: @ 841A66E + .string "Moved a group of POKéMON in\n" + .string "{UNKNOWN_F7 0x00} to {UNKNOWN_F7 0x01}.$" + +gUnknown_841A694:: @ 841A694 + .string "a different spot$" + +gUnknown_841A6A5:: @ 841A6A5 + .string "Removed the item {STR_VAR_1} from\n" + .string "{PLAYER}’s PC and gave it to {STR_VAR_2}\n" + .string "to hold.$" + +gUnknown_841A6E1:: @ 841A6E1 + .string "Removed the item {STR_VAR_1} from\n" + .string "a PC, gave it to {STR_VAR_2}, and put\n" + .string "the {STR_VAR_3} it held in the BAG.$" + +gUnknown_841A732:: @ 841A732 + .string "Chatted with many TRAINERS.$" + +gUnknown_841A74E:: + .string "handily$" + +gUnknown_841A756:: + .string "tenaciously$" + +gUnknown_841A762:: + .string "somehow$" + +gUnknown_841A76A:: @ 841A76A + .string "Met and traded with {STR_VAR_1}.\n" + .string "Obtained the TRAINER’s {STR_VAR_2} in\n" + .string "exchange for {STR_VAR_3}.$" + +gUnknown_841A7B0:: @ 841A7B0 + .string "Met and battled {STR_VAR_1}.\n" + .string "The match ended in a {STR_VAR_2}.$" + +gUnknown_841A7DD:: @ 841A7DD + .string "Went to the POKéMON MART in\n" + .string "{UNKNOWN_F7 0x00} and bought one \n" + .string "{UNKNOWN_F7 0x01}.$" + +gUnknown_841A810:: @ 841A810 + .string "Went to the POKéMON MART in\n" + .string "{UNKNOWN_F7 0x00} and spent ¥{UNKNOWN_F7 0x02} for\n" + .string "items including {UNKNOWN_F7 0x01}(s).$" + +gUnknown_841A858:: @ 841A858 + .string "{UNKNOWN_F7 0x00} went to the POKéMON MART in\n" + .string "{UNKNOWN_F7 0x01} and sold {UNKNOWN_F7 0x03} of\n" + .string "the item {UNKNOWN_F7 0x02}.$" + +gUnknown_841A896:: @ 841A896 + .string "Sold items including {UNKNOWN_F7 0x01} at\n" + .string "the POKéMON MART in {UNKNOWN_F7 0x00},\n" + .string "worth ¥{UNKNOWN_F7 0x02}.$" + +gUnknown_841A8D4:: @ 841A8D4 + .string "just one$" + +gUnknown_841A8DD:: @ 841A8DD + .string "{UNKNOWN_F7 0x04}$" + +gUnknown_841A8E0:: @ 841A8E0 + .string "{STR_VAR_1} shared its HP using the move\n" + .string "SOFTBOILED.$" + +gUnknown_841A90C:: @ 841A90C + .string "{STR_VAR_1} shared its HP using the move\n" + .string "MILK DRINK.$" + +gUnknown_841A938:: @ 841A938 + .string "{STR_VAR_1} securely learned the move\n" + .string "{STR_VAR_2} using an HM.$" + +gUnknown_841A965:: @ 841A965 + .string "{STR_VAR_1} securely learned the move\n" + .string "{STR_VAR_2} using an HM and forgot\n" + .string "the move {STR_VAR_3}.$" + +gUnknown_841A9A9:: @ 841A9A9 + .string "{UNKNOWN_F7 0x05} managed to defeat the POKéMON\n" + .string "{UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841A9D4:: @ 841A9D4 + .string "Defeated {UNKNOWN_F7 0x02} wild POKéMON including\n" + .string "{UNKNOWN_F7 0x01} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AA01:: @ 841AA01 + .string "{UNKNOWN_F7 0x05} managed to catch the POKéMON\n" + .string "{UNKNOWN_F7 0x03} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AA2B:: @ 841AA2B + .string "Threw POKé BALLS in a frenzy, catching\n" + .string "{UNKNOWN_F7 0x04} POKéMON including {UNKNOWN_F7 0x03} here\n" + .string "in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AA76:: @ 841AA76 + .string "{UNKNOWN_F7 0x05} defeated the POKéMON\n" + .string "{UNKNOWN_F7 0x01} and caught one {UNKNOWN_F7 0x03}\n" + .string "in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AAAA:: @ 841AAAA + .string "Defeated the POKéMON {UNKNOWN_F7 0x01}\n" + .string "and caught {UNKNOWN_F7 0x04} POKéMON including\n" + .string "{UNKNOWN_F7 0x03} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AAEC:: @ 841AAEC + .string "{UNKNOWN_F7 0x05} defeated {UNKNOWN_F7 0x02} POKéMON including\n" + .string "{UNKNOWN_F7 0x01} and caught one {UNKNOWN_F7 0x03}\n" + .string "in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AB29:: @ 841AB29 + .string "Defeated {UNKNOWN_F7 0x02} POKéMON including\n" + .string "{UNKNOWN_F7 0x01} and caught {UNKNOWN_F7 0x04} POKéMON\n" + .string "including {UNKNOWN_F7 0x03} in {UNKNOWN_F7 0x00}.$" + +gUnknown_841AB74:: @ 841AB74 + .string "Made {STR_VAR_1} hold the item\n" + .string "{STR_VAR_2}.$" + +gUnknown_841AB8E:: @ 841AB8E + .string "{PLAYER} made {STR_VAR_1} hold the item\n" + .string "{STR_VAR_2}.$" + +gUnknown_841ABAB:: @ 841ABAB + .string "{STR_VAR_1} used the Hidden Move\n" + .string "CUT here.$" + +gUnknown_841ABCD:: @ 841ABCD + .string "{STR_VAR_1} used the Hidden Move\n" + .string "FLY and flew to {STR_VAR_2}.$" + +gUnknown_841ABF9:: @ 841ABF9 + .string "{STR_VAR_1} used the Hidden Move\n" + .string "SURF and rode the waves.$" + +gUnknown_841AC2A:: @ 841AC2A + .string "{STR_VAR_1} used the Hidden Move\n" + .string "STRENGTH here.$" + +gUnknown_841AC51:: @ 841AC51 + .string "{STR_VAR_1} used the Hidden Move\n" + .string "FLASH and illuminated a pitch-black\n" + .string "cave.$" + +gUnknown_841AC93:: @ 841AC93 + .string "{STR_VAR_1} used the Hidden Move\n" + .string "ROCK SMASH here.$" + +gUnknown_841ACBC:: @ 841ACBC + .string "{STR_VAR_1} used the Hidden Move\n" + .string "WATERFALL to scale a raging torrent.$" + +gUnknown_841ACF9:: @ 841ACF9 + .string "{STR_VAR_1}è êÉÁ Ñこª& òざÏ\n" + .string "éで+わざ\n" + .string "ダ¡ビング& ÚÉっŒ!$" + +gUnknown_841AD1D:: @ 841AD1D + .string "{STR_VAR_1} used DIG to escape from\n" + .string "{STR_VAR_2}.$" + +gUnknown_841AD3C:: @ 841AD3C + .string "{STR_VAR_1} used SWEET SCENT to attract\n" + .string "wild POKéMON.$" + +gUnknown_841AD69:: @ 841AD69 + .string "{STR_VAR_1} used TELEPORT, transporting\n" + .string "the party to {STR_VAR_2}’s\n" + .string "{STR_VAR_3}.$" + +gUnknown_841AD9E:: @ 841AD9E + .string "{PLAYER} left {STR_VAR_1}’s\n" + .string "{STR_VAR_2} for the next\n" + .string "destination.$" + +gUnknown_841ADC8:: @ 841ADC8 + .string "Played a lot of games at the ROCKET\n" + .string "GAME CORNER in {STR_VAR_1}.$" + +gUnknown_841ADFF:: @ 841ADFF + .string "{PLAYER} rested comfortably at home.$" + +gUnknown_841AE1E:: @ 841AE1E + .string "{PLAYER} left PROF. OAK’s POKéMON\n" + .string "RESEARCH LAB.$" + +gUnknown_841AE48:: @ 841AE48 + .string "The GYM in {STR_VAR_1} was full of\n" + .string "tough TRAINERS…\n" + .string "Preparations had to be made.$" + +gUnknown_841AE8F:: @ 841AE8F + .string "Departed the GYM in {STR_VAR_1}.$" + +gUnknown_841AEA7:: @ 841AEA7 + .string "{PLAYER} had a great time with POKéMON\n" + .string "in the SAFARI ZONE.$" + +gUnknown_841AEDC:: @ 841AEDC + .string "Managed to get out of {STR_VAR_2}\n" + .string "after wandering about.$" + +gUnknown_841AF0C:: @ 841AF0C + .string "Took on {UNKNOWN_F7 0x00} GYM LEADER\n" + .string "{UNKNOWN_F7 0x01}’s {UNKNOWN_F7 0x02} with {UNKNOWN_F7 0x03}\n" + .string "and won {UNKNOWN_F7 0x04}!$" + +gUnknown_841AF3E:: @ 841AF3E + .string "Took on ELITE FOUR {UNKNOWN_F7 0x00}’s\n" + .string "{UNKNOWN_F7 0x01} with {UNKNOWN_F7 0x02} and\n" + .string "won {UNKNOWN_F7 0x03}!$" + +gUnknown_841AF6D:: @ 841AF6D + .string "In {UNKNOWN_F7 0x00}, took on\n" + .string "{UNKNOWN_F7 0x01}’s {UNKNOWN_F7 0x02} with {UNKNOWN_F7 0x03}\n" + .string "and won {UNKNOWN_F7 0x04}!$" + +gUnknown_841AF98:: @ 841AF98 + .string "coolly$" + +gUnknown_841AF9F:: @ 841AF9F + .string "barely$" + +gUnknown_841AFA6:: @ 841AFA6 + .string "{PLAYER} used an ESCAPE ROPE to get\n" + .string "out from {STR_VAR_2}.$" + +gUnknown_841AFD1:: @ 841AFD1 + .string "draw$" + +gUnknown_841AFD6:: @ 841AFD6 + .string "Departed from the {STR_VAR_2}\n" + .string "for the next destination.$" + +gUnknown_841B005:: @ 841B005 + .string "{PLAYER} departed from\n" + .string "{STR_VAR_2} and made way\n" + .string "to the next destination.$" + +gUnknown_841B03F:: @ 841B03F + .string "Here in {STR_VAR_1}, {PLAYER}\n" + .string "obtained the item {STR_VAR_2}.$" + +gUnknown_841B064:: @ 841B064 + .string "Arrived in {STR_VAR_1}.$" + +gUnknown_841B073:: @ 841B073 + .string "And {PLAYER} saved the game at this\n" + .string "location: {STR_VAR_1}.$" + +gUnknown_841B09F:: @ 841B09F + .string "HOME$" + +gUnknown_841B0A4:: @ 841B0A4 + .string "OAK RESEARCH LAB$" + +gUnknown_841B0B5:: @ 841B0B5 + .string "GYM$" + +gUnknown_841B0B9:: @ 841B0B9 + .string "POKéMON LEAGUE GATE$" + +gUnknown_841B0CD:: @ 841B0CD + .string "VIRIDIAN FOREST$" + +gUnknown_841B0DD:: @ 841B0DD + .string "PEWTER MUSEUM OF SCIENCE$" + +gUnknown_841B0F6:: @ 841B0F6 + .string "MT. MOON$" + +gUnknown_841B0FF:: @ 841B0FF + .string "BIKE SHOP$" + +gUnknown_841B109:: @ 841B109 + .string "BILL’S HOUSE$" + +gUnknown_841B116:: @ 841B116 + .string "DAY CARE$" + +gUnknown_841B11F:: @ 841B11F + .string "UNDERGROUND PATH$" + +gUnknown_841B130:: @ 841B130 + .string "POKéMON FAN CLUB$" + +gUnknown_841B141:: @ 841B141 + .string "S.S. ANNE$" + +gUnknown_841B14B:: @ 841B14B + .string "DIGLETT’S CAVE$" + +gUnknown_841B15A:: @ 841B15A + .string "ROCK TUNNEL$" + +gUnknown_841B166:: @ 841B166 + .string "POWER PLANT$" + +gUnknown_841B172:: @ 841B172 + .string "POKéMON TOWER$" + +gUnknown_841B180:: @ 841B180 + .string "VOLUNTEER HOUSE$" + +gUnknown_841B190:: @ 841B190 + .string "NAME RATER’S HOUSE$" + +gUnknown_841B1A3:: @ 841B1A3 + .string "CELADON DEPT. STORE$" + +gUnknown_841B1B7:: @ 841B1B7 + .string "CELADON MANSION$" + +gUnknown_841B1C7:: @ 841B1C7 + .string "ROCKET GAME CORNER$" + +gUnknown_841B1DA:: @ 841B1DA + .string "RESTAURANT$" + +gUnknown_841B1E5:: @ 841B1E5 + .string "ROCKET HIDEOUT$" + +gUnknown_841B1F4:: @ 841B1F4 + .string "SAFARI ZONE$" + +gUnknown_841B200:: @ 841B200 + .string "WARDEN’S HOME$" + +gUnknown_841B20E:: @ 841B20E + .string "FIGHTING DOJO$" + +gUnknown_841B21C:: @ 841B21C + .string "SILPH CO.$" + +gUnknown_841B226:: @ 841B226 + .string "SEAFOAM ISLANDS$" + +gUnknown_841B236:: @ 841B236 + .string "POKéMON MANSION$" + +gUnknown_841B246:: @ 841B246 + .string "POKéMON RESEARCH LAB$" + +gUnknown_841B25B:: @ 841B25B + .string "VICTORY ROAD$" + +gUnknown_841B268:: @ 841B268 + .string "POKéMON LEAGUE$" + +gUnknown_841B277:: @ 841B277 + .string "CERULEAN CAVE$" diff --git a/include/battle.h b/include/battle.h index ee707f78b..c86bc9232 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_H #define GUARD_BATTLE_H +#include "global.h" + // should they be included here or included individually by every file? #include "constants/battle.h" #include "battle_util.h" @@ -602,7 +604,11 @@ struct BattleStruct u8 hpScale; u8 synchronizeMoveEffect; u8 field_B3; - void (*savedCallback)(void); + u8 field_B4; + u8 field_B5; + u8 field_B6; + u8 field_B7; + // void (*savedCallback)(void); u16 usedHeldItems[BATTLE_BANKS_COUNT]; u8 chosenItem[4]; // why is this an u8? u8 AI_itemType[2]; @@ -977,4 +983,6 @@ extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT]; extern s32 gBattleMoveDamage; +extern u8 gUnknown_2023E8A; + #endif // GUARD_BATTLE_H diff --git a/include/battle_2.h b/include/battle_2.h index ee61efd9b..ca8b78805 100644 --- a/include/battle_2.h +++ b/include/battle_2.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_2_H #define GUARD_BATTLE_2_H +#include "global.h" + void CB2_InitBattle(void); void BattleMainCB2(void); void CB2_QuitRecordedBattle(void); diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h index 5fb422b41..5f8c4419b 100644 --- a/include/battle_ai_script_commands.h +++ b/include/battle_ai_script_commands.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H #define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H +#include "global.h" + void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves); void BattleAI_SetupAIData(u8 defaultScoreMoves); u8 BattleAI_ChooseMoveOrAction(void); diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 0a230e7f6..d0461319d 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H #define GUARD_BATTLE_AI_SWITCH_ITEMS_H +#include "global.h" + enum { AI_ITEM_FULL_RESTORE = 1, diff --git a/include/battle_anim.h b/include/battle_anim.h index 9fb7ccd53..4ea3bdead 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -1,6 +1,12 @@ #ifndef GUARD_BATTLE_ANIM_H #define GUARD_BATTLE_ANIM_H +#include "global.h" + +#ifndef BATTLE_BANKS_COUNT +#define BATTLE_BANKS_COUNT 4 +#endif // BATTLE_BANKS_COUNT + enum { ANIM_BANK_ATTACKER, diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 66984b453..df00c3526 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_CONTROLLERS_H #define GUARD_BATTLE_CONTROLLERS_H +#include "global.h" + enum { REQUEST_ALL_BATTLE, diff --git a/include/battle_dome_cards.h b/include/battle_dome_cards.h index a0696d156..48d165e9c 100644 --- a/include/battle_dome_cards.h +++ b/include/battle_dome_cards.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_DOME_CARDS_H #define GUARD_BATTLE_DOME_CARDS_H +#include "global.h" + bool16 dp13_810BB8C(void); u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); diff --git a/include/battle_interface.h b/include/battle_interface.h index b2d3b1b97..27f93a3c2 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -1,6 +1,7 @@ #ifndef GUARD_BATTLE_INTERFACE_H #define GUARD_BATTLE_INTERFACE_H +#include "global.h" #include "battle_controllers.h" enum diff --git a/include/battle_message.h b/include/battle_message.h index 30ddca469..27ae88b01 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +#include "global.h" + // for 0xFD #define B_TXT_BUFF1 0x0 diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 80fabaa64..d4cb75e91 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H #define GUARD_BATTLE_SCRIPT_COMMANDS_H +#include "global.h" + #define NO_ACC_CALC 0xFFFE #define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF #define ACC_CURR_MOVE 0 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 2e31a37c5..69edacae6 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_SCRIPTS_H #define GUARD_BATTLE_SCRIPTS_H +#include "global.h" + extern const u8 BattleScript_HitFromCritCalc[]; extern const u8 BattleScript_MoveEnd[]; extern const u8 BattleScript_MakeMoveMissed[]; diff --git a/include/battle_setup.h b/include/battle_setup.h index 9b9ad2e15..2806295ca 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_SETUP_H #define GUARD_BATTLE_SETUP_H +#include "global.h" + void BattleSetup_StartScriptedWildBattle(void); u8 BattleSetup_GetTerrainId(void); u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h index f242284b0..a030a7b48 100644 --- a/include/battle_string_ids.h +++ b/include/battle_string_ids.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_STRING_IDS_H #define GUARD_BATTLE_STRING_IDS_H +#include "global.h" + #define BATTLESTRINGS_COUNT 369 #define BATTLESTRINGS_ID_ADDER 12 // all battlestrings have its ID + 12, because first 5 are reserved diff --git a/include/battle_tower.h b/include/battle_tower.h index 25b439c1b..120ab9a99 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_TOWER_H #define GUARD_BATTLE_TOWER_H +#include "global.h" + u16 sub_8164FCC(u8, u8); #endif //GUARD_BATTLE_TOWER_H diff --git a/include/battle_transition.h b/include/battle_transition.h index 1603f5c93..eba76fd61 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_TRANSITION_H #define GUARD_BATTLE_TRANSITION_H +#include "global.h" + void sub_8149DFC(u8 a1); #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/battle_util.h b/include/battle_util.h index 25e26719b..ed070720d 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_UTIL_H #define GUARD_BATTLE_UTIL_H +#include "global.h" + #define MOVE_LIMITATION_ZEROMOVE (1 << 0) #define MOVE_LIMITATION_PP (1 << 1) #define MOVE_LIMITATION_DISABLED (1 << 2) diff --git a/include/battle_util2.h b/include/battle_util2.h index 3954e42dc..3b8a6f817 100644 --- a/include/battle_util2.h +++ b/include/battle_util2.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_UTIL2_H #define GUARD_BATTLE_UTIL2_H +#include "global.h" + void AllocateBattleResources(void); void FreeBattleResources(void); void AdjustFriendshipOnBattleFaint(u8 bank); diff --git a/include/berry.h b/include/berry.h index 425a664c9..40715868b 100644 --- a/include/berry.h +++ b/include/berry.h @@ -1,6 +1,8 @@ #ifndef GUARD_BERRY_H #define GUARD_BERRY_H +#include "global.h" + enum { BERRY_FIRMNESS_UNKNOWN, diff --git a/include/bg.h b/include/bg.h index 0700e2d23..55927a5a4 100644 --- a/include/bg.h +++ b/include/bg.h @@ -1,6 +1,8 @@ #ifndef GUARD_BG_H #define GUARD_BG_H +#include "global.h" + struct BGCntrlBitfield // for the I/O registers { volatile u16 priority:2; diff --git a/include/bike.h b/include/bike.h new file mode 100644 index 000000000..468c48273 --- /dev/null +++ b/include/bike.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BIKE_H +#define GUARD_BIKE_H + +void sub_80BD620(u32 unkC, u32 unk10); + +#endif //GUARD_BIKE_H diff --git a/include/blend_palette.h b/include/blend_palette.h index 1db3f4eb0..4ece15d69 100644 --- a/include/blend_palette.h +++ b/include/blend_palette.h @@ -1,6 +1,8 @@ #ifndef GUARD_BLEND_PALETTE_H #define GUARD_BLEND_PALETTE_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/calculate_base_damage.h b/include/calculate_base_damage.h index e9146c188..8079031e8 100644 --- a/include/calculate_base_damage.h +++ b/include/calculate_base_damage.h @@ -1,6 +1,8 @@ #ifndef GUARD_CALCULATE_BASE_DAMAGE_H #define GUARD_CALCULATE_BASE_DAMAGE_H +#include "global.h" + s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef); #endif // GUARD_CALCULATE_BASE_DAMAGE_H diff --git a/include/coins.h b/include/coins.h index 996519605..83ad7d611 100644 --- a/include/coins.h +++ b/include/coins.h @@ -1,6 +1,8 @@ #ifndef GUARD_COINS_H #define GUARD_COINS_H +#include "global.h" + void PrintCoinsString(u32 coinAmount); void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y); void HideCoinsWindow(void); diff --git a/include/config.h b/include/config.h index 756fd1ebd..f094c95bd 100644 --- a/include/config.h +++ b/include/config.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONFIG_H #define GUARD_CONFIG_H +#include "global.h" + // In the Generation 3 games, Asserts were used in various debug builds. // Ruby/Sapphire and Emerald do not have these asserts while Fire Red // still has them in the ROM. This is because the developers forgot diff --git a/include/constants/items.h b/include/constants/items.h index dd2b4c4ed..64fed0e4c 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -393,4 +393,11 @@ // Check if the item is one that can be used on a Pokemon. #define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2) +// POCKETS +#define POCKET_ITEMS 1 +#define POCKET_KEY_ITEMS 2 +#define POCKET_POKE_BALLS 3 +#define POCKET_TM_CASE 4 +#define POCKET_BERRY_POUCH 5 + #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/data2.h b/include/data2.h index be0f33ab8..e383b1c9a 100644 --- a/include/data2.h +++ b/include/data2.h @@ -1,6 +1,8 @@ #ifndef GUARD_DATA2_H #define GUARD_DATA2_H +#include "global.h" + struct MonCoords { // This would use a bitfield, but some function diff --git a/include/daycare.h b/include/daycare.h index 7db44e024..6544ba21a 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -1,6 +1,8 @@ #ifndef GUARD_DAYCARE_H #define GUARD_DAYCARE_H +#include "global.h" + #define EGG_HATCH_LEVEL 5 u8 *GetMonNick(struct Pokemon *mon, u8 *dest); diff --git a/include/decompress.h b/include/decompress.h index 34a678cda..5f3863dc7 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -1,6 +1,8 @@ #ifndef GUARD_DECOMPRESS_H #define GUARD_DECOMPRESS_H +#include "global.h" + #include "sprite.h" extern u8 gDecompressionBuffer[0x4000]; diff --git a/include/diploma.h b/include/diploma.h index 8d730fa05..8477e70fc 100644 --- a/include/diploma.h +++ b/include/diploma.h @@ -1,6 +1,8 @@ #ifndef GUARD_DIPLOMA_H #define GUARD_DIPLOMA_H +#include "global.h" + void CB2_ShowDiploma(void); #endif // GUARD_DIPLOMA_H diff --git a/include/dma3.h b/include/dma3.h index 265b47824..fcd7bae43 100644 --- a/include/dma3.h +++ b/include/dma3.h @@ -1,6 +1,8 @@ #ifndef GUARD_DMA3_H #define GUARD_DMA3_H +#include "global.h" + void ClearDma3Requests(void); void ProcessDma3Requests(void); int RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode); diff --git a/include/easy_chat.h b/include/easy_chat.h index f0ac51c22..2b5664420 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -1,6 +1,8 @@ #ifndef GUARD_EASYCHAT_H #define GUARD_EASYCHAT_H +#include "global.h" + // Taken from Pokeruby, check if it's correct enum { diff --git a/include/egg_hatch.h b/include/egg_hatch.h index 862d33947..9945284e1 100644 --- a/include/egg_hatch.h +++ b/include/egg_hatch.h @@ -1,6 +1,8 @@ #ifndef GUARD_EGG_HATCH_H #define GUARD_EGG_HATCH_H +#include "global.h" + void ScriptHatchMon(void); bool8 sub_8071614(void); void EggHatch(void); diff --git a/include/event_data.h b/include/event_data.h index f28ed4f75..2e340f073 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -1,6 +1,8 @@ #ifndef GUARD_EVENT_DATA_H #define GUARD_EVENT_DATA_H +#include "global.h" + #include "constants/flags.h" #include "constants/vars.h" @@ -29,8 +31,9 @@ u8 *GetFlagPointer(u16 id); u8 FlagSet(u16 id); u8 FlagClear(u16 id); bool8 FlagGet(u16 id); -u16 * sub_806E454(u16 id); +u16 * GetVarPointer(u16 id); bool32 sub_806E2BC(void); +void sub_806E6FC(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; @@ -52,5 +55,6 @@ extern u16 gSpecialVar_MonBoxPos; extern u16 gSpecialVar_0x8014; extern u16 gUnknown_20370D0; +extern u16 gUnknown_20370C0; #endif // GUARD_EVENT_DATA_H diff --git a/include/event_scripts.h b/include/event_scripts.h index 03329ba34..ebfdb4fe3 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -5,6 +5,8 @@ #ifndef GUARD_EVENT_SCRIPTS_H #define GUARD_EVENT_SCRIPTS_H +#include "global.h" + extern const u8 gUnknown_0823B4E8[]; extern const u8 gUnknown_0823B5E9[]; extern const u8 EventScript_275BB7[]; @@ -373,6 +375,8 @@ extern const u8 SecretBase_RedCave1_Text_2751E1[]; extern const u8 SecretBase_RedCave1_Text_2754F6[]; extern const u8 SecretBase_RedCave1_Text_2758CC[]; +extern const u8 gUnknown_84178D0[]; +extern const u8 gUnknown_84178DA[]; // vs_seeker extern const u8 gUnknown_81C137C[]; extern const u8 gUnknown_81C13D6[]; diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h index f52105815..21f133872 100644 --- a/include/evolution_graphics.h +++ b/include/evolution_graphics.h @@ -1,6 +1,8 @@ #ifndef GUARD_EVOLUTION_GRAPHICS_H #define GUARD_EVOLUTION_GRAPHICS_H +#include "global.h" + void LoadEvoSparkleSpriteAndPal(void); u8 LaunchTask_PreEvoSparklesSet1(u16 arg0); diff --git a/include/evolution_scene.h b/include/evolution_scene.h index 5f8c534b9..1d87ceb76 100644 --- a/include/evolution_scene.h +++ b/include/evolution_scene.h @@ -1,6 +1,8 @@ #ifndef GUARD_EVOLUTION_SCENE_H #define GUARD_EVOLUTION_SCENE_H +#include "global.h" + void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID); diff --git a/include/field_camera.h b/include/field_camera.h index a8559e1c2..53d734081 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_CAMERA_H #define GUARD_FIELD_CAMERA_H +#include "global.h" + // Exported type declarations struct CameraObject diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h new file mode 100644 index 000000000..0a33138b3 --- /dev/null +++ b/include/field_control_avatar.h @@ -0,0 +1,8 @@ +#ifndef GUARD_FIELD_CONTROL_AVATAR_H +#define GUARD_FIELD_CONTROL_AVATAR_H + +#include "global.h" + +extern u32 gUnknown_3005078; + +#endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/include/field_door.h b/include/field_door.h index f1dfc551d..0059cbe1a 100644 --- a/include/field_door.h +++ b/include/field_door.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELDDOOR_H #define GUARD_FIELDDOOR_H +#include "global.h" + void FieldSetDoorOpened(u32, u32); void FieldSetDoorClosed(u32, u32); s8 FieldAnimateDoorClose(u32, u32); diff --git a/include/field_effect.h b/include/field_effect.h index 9404e3959..bb5e0f1d5 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_EFFECTS_H #define GUARD_FIELD_EFFECTS_H +#include "global.h" + enum FieldEffectScriptIdx { FLDEFF_EXCLAMATION_MARK_ICON_1, diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index e80daf3bd..5cd29fc5b 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -5,6 +5,8 @@ #ifndef GUARD_FIELD_EFFECT_HELPERS_H #define GUARD_FIELD_EFFECT_HELPERS_H +#include "global.h" + // Exported type declarations // Exported RAM declarations @@ -12,5 +14,6 @@ // Exported ROM declarations u8 sub_8154228(void); bool8 sub_8155DA0(struct MapObject *); +void sub_80DC44C(u8, u8); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index 7c2d16a24..051865210 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_FADETRANSITION_H #define GUARD_FIELD_FADETRANSITION_H +#include "global.h" + void sub_80AF734(void); void sp13E_warp_to_last_warp(void); void sub_80AF7D0(void); @@ -8,5 +10,7 @@ void sp13F_fall_to_last_warp(void); void sub_80AF848(void); void sub_80AF87C(void); +void sub_807DF64(void); +void sub_807DF7C(void); #endif // GUARD_FIELD_FADETRANSITION_H diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h index 63b67ceaf..49448db6a 100644 --- a/include/field_ground_effect.h +++ b/include/field_ground_effect.h @@ -5,6 +5,8 @@ #ifndef GUARD_FIELD_GROUND_EFFECT_H #define GUARD_FIELD_GROUND_EFFECT_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 304dcb825..ded970a83 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_MAP_OBJ_H #define GUARD_FIELD_MAP_OBJ_H +#include "global.h" + #define NUM_OBJECT_GRAPHICS_INFO 239 #define SPRITE_VAR 240 @@ -76,9 +78,14 @@ void MoveCoords(u8, s16 *, s16 *); bool8 FieldObjectIsSpecialAnimActive(struct MapObject *); u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *); u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z); +void sub_8063E28(struct MapObject *, struct Sprite *); +void sub_8063CA4(struct MapObject *, u8); void npc_coords_shift_still(struct MapObject *); void sub_805FE7C(struct MapObject *, u8); void npc_set_running_behaviour_etc(struct MapObject *, u8); +u8 sub_80634F0(u8 direction); +u8 sub_8063500(u8 a0); +void sub_805F060(struct MapObject *mapObject, u8 a1); // Exported data declarations diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h index ba797ec98..2d3f69d95 100644 --- a/include/field_map_obj_helpers.h +++ b/include/field_map_obj_helpers.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELDMAPOBJHELP_H #define GUARD_FIELDMAPOBJHELP_H +#include "global.h" + void UnfreezeMapObjects(void); void sub_8097B78(u8, u8); diff --git a/include/field_message_box.h b/include/field_message_box.h index 432c9078b..5777921b7 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_MESSAGE_BOX_H #define GUARD_FIELD_MESSAGE_BOX_H +#include "global.h" + bool8 ShowFieldMessage(const u8 *message); bool8 sub_8098238(const u8 *message); bool8 ShowFieldAutoScrollMessage(const u8 *message); diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 25b7f2d71..297d66441 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_PLAYER_AVATAR_H #define GUARD_FIELD_PLAYER_AVATAR_H +#include "global.h" + void ClearPlayerAvatarInfo(void); void SetPlayerAvatarExtraStateTransition(u8, u8); u8 GetPlayerAvatarGenderByGraphicsId(u8); @@ -11,6 +13,12 @@ u8 player_get_direction_upper_nybble(void); u8 player_get_x22(void); void sub_808D074(u8); +void sub_805C270(); +void sub_805C780(); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); +u8 sub_805C808(u8); +void SetPlayerAvatarStateMask(u8 mask); +void sub_805D9C4(struct Sprite *sprite); +void sub_805D154(u8 direction); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/field_poison.h b/include/field_poison.h index d1a4c823b..fcfb71cf5 100644 --- a/include/field_poison.h +++ b/include/field_poison.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_POISON_H #define GUARD_FIELD_POISON_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/field_screen.h b/include/field_screen.h index cfc0d081f..a11aa0041 100644 --- a/include/field_screen.h +++ b/include/field_screen.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_SCREEN_H #define GUARD_FIELD_SCREEN_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index ef81c2f9e..add61d57c 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_SCREEN_EFFECT_H #define GUARD_FIELD_SCREEN_EFFECT_H +#include "global.h" + void sub_80AF79C(void); void sub_80B009C(u8); void sub_80B0244(void); diff --git a/include/field_specials.h b/include/field_specials.h index 8c0e69c2c..2b7991b55 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_SPECIALS_H #define GUARD_FIELD_SPECIALS_H +#include "global.h" + u8 GetLeadMonIndex(void); void TV_PrintIntToStringVar(u8, int); diff --git a/include/field_tasks.h b/include/field_tasks.h index 2a2a772d8..aba2a9eee 100644 --- a/include/field_tasks.h +++ b/include/field_tasks.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_TASKS_H #define GUARD_FIELD_TASKS_H +#include "global.h" + void ActivatePerStepCallback(u8); #endif // GUARD_FIELD_TASKS_H diff --git a/include/field_weather.h b/include/field_weather.h index e12107e70..b896259e9 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -1,6 +1,8 @@ #ifndef GUARD_WEATHER_H #define GUARD_WEATHER_H +#include "global.h" + void fade_screen(u8, s8); void SetSav1Weather(u32); @@ -8,5 +10,6 @@ u8 GetSav1Weather(void); void sub_80AEDBC(void); void DoCurrentWeather(void); +void sub_807B0C4(u16 *, u16 *, u32); #endif // GUARD_WEATHER_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 06cb7cc77..c5abdb2e1 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELDMAP_H #define GUARD_FIELDMAP_H +#include "global.h" + extern struct MapCoords { int width; int height; diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h index d57665c68..3960c6c65 100644 --- a/include/fldeff_80F9BCC.h +++ b/include/fldeff_80F9BCC.h @@ -1,6 +1,8 @@ #ifndef GUARD_FLDEFF_80F9BCC_H #define GUARD_FLDEFF_80F9BCC_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/gba/gba.h b/include/gba/gba.h index 7e58efb9f..4b5f2de95 100644 --- a/include/gba/gba.h +++ b/include/gba/gba.h @@ -1,6 +1,7 @@ #ifndef GUARD_GBA_GBA_H #define GUARD_GBA_GBA_H +#include #include "defines.h" #include "io_reg.h" #include "types.h" diff --git a/include/global.berry.h b/include/global.berry.h index 5c8a43a02..f9e27b186 100644 --- a/include/global.berry.h +++ b/include/global.berry.h @@ -1,6 +1,8 @@ #ifndef GUARD_GLOBAL_BERRY_H #define GUARD_GLOBAL_BERRY_H +#include "global.h" + #define BERRY_NAME_COUNT 7 #define BERRY_ITEM_EFFECT_COUNT 18 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index ed5054b7d..98077d8d4 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -1,6 +1,8 @@ #ifndef GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H +#include "global.h" + #define NUM_FIELD_OBJECTS 16 enum diff --git a/include/global.h b/include/global.h index b05c87d88..050e200f9 100644 --- a/include/global.h +++ b/include/global.h @@ -3,6 +3,7 @@ #include "config.h" #include "gba/gba.h" +#include // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -12,10 +13,18 @@ #define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided") #if defined (__APPLE__) || defined (__CYGWIN__) -void *memset(void *, int, size_t); -void *memcpy(void *, const void *, size_t); -int strcmp(const char *s1, const char *s2); -char* strcpy(char *dst0, const char *src0); +// Get the IDE to stfu + +// We define it this way to fool preproc. +#define INCBIN(x) {0} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN +#define _(x) (x) +#define __(x) (x) #endif // __APPLE__ #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) @@ -146,6 +155,8 @@ struct Time /*0x04*/ s8 seconds; }; +#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0)) + struct Pokedex { /*0x00*/ u8 order; @@ -155,8 +166,8 @@ struct Pokedex /*0x04*/ u32 unownPersonality; // set when you first see Unown /*0x08*/ u32 spindaPersonality; // set when you first see Spinda /*0x0C*/ u32 unknown3; - /*0x10*/ u8 owned[52]; - /*0x44*/ u8 seen[52]; + /*0x10*/ u8 owned[DEX_FLAGS_NO]; + /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; struct PokemonJumpResults // possibly used in the game itself? @@ -243,7 +254,9 @@ struct SaveBlock2 /*0x098*/ struct Time localTimeOffset; /*0x0A0*/ struct Time lastBerryTreeUpdate; /*0x0A8*/ u32 field_A8; - /*0x0AC*/ u8 filler_AC[0xE74]; + /*0x0AC*/ u8 filler_AC[0x9ec]; + /*0xA98*/ u8 unk_A98[2][16]; + /*0xAB8*/ u8 filler_AB8[0x468]; /*0xF20*/ u32 encryptionKey; }; @@ -491,9 +504,68 @@ struct MysteryEventStruct u8 unk_1; }; +struct QuestLogNPCData +{ + u32 x:8; + u32 negx:1; + u32 y:8; + u32 negy:1; + u32 elevation:6; + u32 movementType:8; +}; + +struct UnkStruct_203B024 +{ + u16 unk_00; + u16 unk_02; + u16 unk_04[14]; +}; + +union QuestLogScene +{ + u8 allocation[32]; + u16 ident; +}; + +typedef union QuestLogScene QuestLogScene; + +// This name is a complete guess and may change. + +// Declare here so that it can be recursively referenced. +union QuestLogMovement; + +// Define here +union QuestLogMovement +{ + u16 ident_raw; + struct { + u16 ident:12; + u16 flags:4; + } ident_struct; +}; + +struct QuestLog +{ + /*0x0000*/ u8 unk_000; + /*0x0001*/ s8 unk_001; + /*0x0002*/ s8 unk_002; + /*0x0003*/ s8 unk_003; + /*0x0004*/ s16 unk_004; + /*0x0006*/ s16 unk_006; + /*0x0008*/ u8 filler_008[0x140]; + + // These arrays hold the game state for + // playing back the quest log + /*0x0148*/ u8 flags[0x120]; + /*0x02c8*/ u16 vars[0x100]; + /*0x0468*/ struct QuestLogNPCData npcData[64]; + /*0x0568*/ u16 unk_568[128]; + /*0x0668*/ u16 end[0]; +}; + #define MAP_OBJECTS_COUNT 16 #define BERRY_TREES_COUNT 128 -#define FLAGS_COUNT 300 +#define FLAGS_COUNT 288 // 300 #define VARS_COUNT 256 #define MAIL_COUNT 16 @@ -505,32 +577,55 @@ struct SaveBlock1 /*0x0014*/ struct WarpData warp2; /*0x001C*/ struct WarpData lastHealLocation; /*0x0024*/ struct WarpData warp4; - /*0x002C*/ u8 filler2C[0x8]; + /*0x002C*/ u16 savedMusic; + /*0x002E*/ u8 weather; + /*0x002F*/ u8 filler_2F; + /*0x0030*/ u8 flashLevel; + /*0x0032*/ u16 mapDataId; /*0x0034*/ u8 playerPartyCount; /*0x0038*/ struct Pokemon playerParty[PARTY_SIZE]; /*0x0290*/ u32 money; /*0x0294*/ u16 coins; - /*0x0296*/ u8 filler296[0x7A]; + /*0x0296*/ u16 registeredItem; // registered for use with SELECT button + /*0x0298*/ u8 filler298[0x78]; /*0x0310*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; - struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; - struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; - struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; - struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; - u8 filler5F8[0x40]; + /*0x03b8*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; + /*0x0430*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; + /*0x0464*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; + /*0x054c*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; + /*0x05F8*/ u8 seen1[DEX_FLAGS_NO]; + /*0x062C*/ u8 filler_062c[12]; /*0x0638*/ u8 trainerRematchStepCounter; u8 filler_639; - /*0x063a*/ u8 trainerRematches[100]; - /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; - /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; - /*0x0EE0*/ u8 fillerEE0[0x1DF0]; + /*0x063A*/ u8 trainerRematches[100]; + /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; + /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; + /*0x0EE0*/ u8 flags[FLAGS_COUNT]; + /*0x1000*/ u16 vars[VARS_COUNT]; + /*0x1200*/ u8 filler1200[0x100]; + /*0x1300*/ struct QuestLog questLog[4]; + /*0x2CA0*/ u8 filler2CA0[0x30]; /*0x2CD0*/ struct MailStruct mail[MAIL_COUNT]; - u8 filler2F10[0x1DA]; - /*0x30EA*/ struct EnigmaBerry enigmaBerry; + /*0x2F10*/ u8 filler2F10[0x184]; + struct { + /*0x3094*/ u8 unknown1[8]; + /*0x309C*/ u8 giftRibbons[11]; + /*0x30A7*/ u8 unknown2[8]; + /*0x30AF*/ u32 currentPokeCoupons; + /*0x30B3*/ u32 totalEarnedPokeCoupons; + /*0x30B7*/ u8 unknown3[6]; + /*0x30BD*/ u8 receivedWishmakerJirachi; + /*0x30BE*/ u8 unknown4[18]; + } __attribute__((packed)) externalReservedData; + /*0x30D0*/ struct Roamer roamer; + /*0x30EC*/ struct EnigmaBerry enigmaBerry; /*0x3120*/ u8 filler3120[0x340]; /*0x3460*/ struct MysteryEventStruct unk_3460; /*0x3464*/ u8 filler_3464[0x1b8]; /*0x361C*/ struct RamScript ramScript; - /*0x3A08*/ u8 filler3A08[0x44]; + /*0x3A08*/ u8 filler3A08[12]; + /*0x3A14*/ u8 seen2[DEX_FLAGS_NO]; + /*0x3A48*/ u8 filler_3a48[4]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; /*0x3A54*/ u8 filler3A54[0x2E4]; u32 unkArray[4][3]; diff --git a/include/gpu_regs.h b/include/gpu_regs.h index 89e0cb64b..3930f6809 100644 --- a/include/gpu_regs.h +++ b/include/gpu_regs.h @@ -1,6 +1,8 @@ #ifndef GUARD_GPU_REGS_H #define GUARD_GPU_REGS_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/graphics.h b/include/graphics.h index aad5c0190..9888d2f7c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5,6 +5,8 @@ #ifndef GUARD_GRAPHICS_H #define GUARD_GRAPHICS_H +#include "global.h" + extern const u8 gInterfaceGfx_PokeBall[]; extern const u8 gInterfacePal_PokeBall[]; extern const u8 gInterfaceGfx_GreatBall[]; diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index d35ecf268..2dc9fae41 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -1,6 +1,8 @@ #ifndef GUARD_HALL_OF_FAME_H #define GUARD_HALL_OF_FAME_H +#include "global.h" + void CB2_DoHallOfFameScreen(void); void CB2_DoHallOfFameScreenDontSaveData(void); void CB2_DoHallOfFamePC(void); diff --git a/include/heal_location.h b/include/heal_location.h index 1f966f1ae..0143b8158 100644 --- a/include/heal_location.h +++ b/include/heal_location.h @@ -1,6 +1,8 @@ #ifndef GUARD_HEAL_LOCATION_H #define GUARD_HEAL_LOCATION_H +#include "global.h" + // Exported type declarations struct UnkStruct_0859F534 { diff --git a/include/help_system.h b/include/help_system.h new file mode 100644 index 000000000..3f6a741c6 --- /dev/null +++ b/include/help_system.h @@ -0,0 +1,8 @@ +#ifndef GUARD_HELP_SYSTEM_H +#define GUARD_HELP_SYSTEM_H + +#include "global.h" + +extern bool8 gUnknown_3005ECC; + +#endif //GUARD_HELP_SYSTEM_H diff --git a/include/international_string_util.h b/include/international_string_util.h index e7876162e..2b922676d 100644 --- a/include/international_string_util.h +++ b/include/international_string_util.h @@ -1,6 +1,8 @@ #ifndef GUARD_INTERNATIONAL_STRING_UTIL_H #define GUARD_INTERNATIONAL_STRING_UTIL_H +#include "global.h" + #include "menu.h" void sub_81DB52C(const u8 *src); diff --git a/include/item.h b/include/item.h index a136f03ec..75c56c94d 100644 --- a/include/item.h +++ b/include/item.h @@ -60,5 +60,8 @@ u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); u16 itemid_get_market_price(u16 itemId); +void sub_809A2DC(void); +void sub_809A2A4(void); +void sub_8099E90(u16, u8 *); #endif // ITEM_H diff --git a/include/item_icon.h b/include/item_icon.h index a43b72f39..75e2475f3 100644 --- a/include/item_icon.h +++ b/include/item_icon.h @@ -5,6 +5,8 @@ #ifndef GUARD_ITEM_ICON_H #define GUARD_ITEM_ICON_H +#include "global.h" + extern EWRAM_DATA void *gUnknown_0203CEBC; extern EWRAM_DATA void *gUnknown_0203CEC0; diff --git a/include/item_menu.h b/include/item_menu.h index 0e1f20588..731c7cf2b 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_ITEM_MENU_H #define GUARD_ITEM_MENU_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index 553e7c262..7fcd6d5e1 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -1,6 +1,8 @@ #ifndef GUARD_ITEM_MENU_ICONS #define GUARD_ITEM_MENU_ICONS +#include "global.h" + u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3); #endif // GUARD_ITEM_MENU_ICONS diff --git a/include/link.h b/include/link.h index 352386523..239a59b71 100644 --- a/include/link.h +++ b/include/link.h @@ -1,6 +1,8 @@ #ifndef GUARD_LINK_H #define GUARD_LINK_H +#include "global.h" + #define MAX_LINK_PLAYERS 4 #define MAX_RFU_PLAYERS 5 #define CMD_LENGTH 8 diff --git a/include/list_menu.h b/include/list_menu.h index 0249b06af..f547801bd 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_LIST_MENU_H #define GUARD_LIST_MENU_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/load_save.h b/include/load_save.h index b3e9fe49c..064e6dff2 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -1,6 +1,8 @@ #ifndef GUARD_LOAD_SAVE_H #define GUARD_LOAD_SAVE_H +#include "global.h" + extern bool32 gFlashMemoryPresent; void ClearSav2(void); diff --git a/include/m4a.h b/include/m4a.h index 8c3380dd8..24b454104 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -1,6 +1,8 @@ #ifndef GUARD_M4A_H #define GUARD_M4A_H +#include "global.h" + #include "gba/m4a_internal.h" void m4aSoundVSync(void); diff --git a/include/mail.h b/include/mail.h index 0a70237bf..5d6ad559b 100644 --- a/include/mail.h +++ b/include/mail.h @@ -1,6 +1,8 @@ #ifndef GUARD_MAIL_H #define GUARD_MAIL_H +#include "global.h" + #define IS_ITEM_MAIL(itemId)((itemId == ITEM_ORANGE_MAIL \ || itemId == ITEM_HARBOR_MAIL \ || itemId == ITEM_GLITTER_MAIL \ diff --git a/include/mail_data.h b/include/mail_data.h index bf6540bad..bbe695203 100644 --- a/include/mail_data.h +++ b/include/mail_data.h @@ -1,6 +1,8 @@ #ifndef GUARD_MAIL_DATA_H #define GUARD_MAIL_DATA_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/main.h b/include/main.h index 82f85f881..84d356692 100644 --- a/include/main.h +++ b/include/main.h @@ -3,6 +3,8 @@ #include "global.h" +#include "global.h" + typedef void (*MainCallback)(void); typedef void (*IntrCallback)(void); typedef void (*IntrFunc)(void); diff --git a/include/malloc.h b/include/malloc.h index 6efa8fbef..ae66aecb1 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -1,6 +1,8 @@ #ifndef GUARD_MALLOC_H #define GUARD_MALLOC_H +#include "global.h" + #define HEAP_SIZE 0x1C000 #define malloc Alloc #define calloc(ct, sz) AllocZeroed((ct) * (sz)) diff --git a/include/map_name_popup.h b/include/map_name_popup.h index 8a9043a3f..cf9b005d9 100644 --- a/include/map_name_popup.h +++ b/include/map_name_popup.h @@ -1,11 +1,14 @@ #ifndef GUARD_MAP_NAME_POPUP_H #define GUARD_MAP_NAME_POPUP_H +#include "global.h" + // Exported type declarations // Exported RAM declarations // Exported ROM declarations void HideMapNamePopUpWindow(void); +void sub_8098110(u8); #endif //GUARD_MAP_NAME_POPUP_H diff --git a/include/map_obj_80688E4.h b/include/map_obj_80688E4.h new file mode 100644 index 000000000..9ab76646d --- /dev/null +++ b/include/map_obj_80688E4.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MAP_OBJ_80688E4_H +#define GUARD_MAP_OBJ_80688E4_H + +#include "global.h" + +void player_bitmagic(void); + +#endif //GUARD_MAP_OBJ_80688E4_H diff --git a/include/map_obj_8097404.h b/include/map_obj_8097404.h index 27ffd18cb..ad90bed9c 100644 --- a/include/map_obj_8097404.h +++ b/include/map_obj_8097404.h @@ -5,6 +5,8 @@ #ifndef GUARD_MAP_OBJ_8097404_H #define GUARD_MAP_OBJ_8097404_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h index cf1f714d7..c8e075658 100644 --- a/include/map_obj_lock.h +++ b/include/map_obj_lock.h @@ -1,6 +1,8 @@ #ifndef GUARD_MAP_OBJ_LOCK_H #define GUARD_MAP_OBJ_LOCK_H +#include "global.h" + bool8 sub_80983C4(void); void ScriptFreezeMapObjects(void); bool8 sub_809847C(void); diff --git a/include/menews_jisan.h b/include/menews_jisan.h index 8dc1d0a99..4db5a7be2 100644 --- a/include/menews_jisan.h +++ b/include/menews_jisan.h @@ -1,6 +1,8 @@ #ifndef GUARD_MENEWS_JISAN_H #define GUARD_MENEWS_JISAN_H +#include "global.h" + void sub_8146C30(u32 a0); void sub_8146C88(void); void sub_8146CA4(void); diff --git a/include/menu.h b/include/menu.h index 6a6e2e828..b932693f7 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_MENU_H #define GUARD_MENU_H +#include "global.h" + #include "text.h" #include "window.h" @@ -32,7 +34,7 @@ void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirs s8 ProcessMenuInputNoWrap_(void); void do_scheduled_bg_tilemap_copies_to_vram(void); void clear_scheduled_bg_copies_to_vram(void); -void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str); +void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const struct TextColor *color, s8 speed, const u8 *str); void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u16 a3); void sub_810F4D8(u8 windowId, bool32 someBool); diff --git a/include/menu_helpers.h b/include/menu_helpers.h index f083a10e2..b193388e5 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -1,6 +1,8 @@ #ifndef GUARD_MENU_HELPERS_H #define GUARD_MENU_HELPERS_H +#include "global.h" + // Exported type declarations struct YesNoFuncTable { @@ -16,5 +18,6 @@ void sub_812225C(u16 *, u16 *, u8, u8); void sub_8122298(u16 *, u16 *, u8, u8, u8); void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data); bool8 sub_81221AC(void); +bool8 sub_80BF708(void); #endif //GUARD_MENU_HELPERS_H diff --git a/include/menu_indicators.h b/include/menu_indicators.h index d0baac810..2350e2502 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -1,6 +1,8 @@ #ifndef GUARD_MENU_INDICATORS_H #define GUARD_MENU_INDICATORS_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index c81e743c7..62bcfdd38 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -1,6 +1,8 @@ #ifndef GUARD_METATILE_BEHAVIOR #define GUARD_METATILE_BEHAVIOR +#include "global.h" + bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior); bool8 MetatileBehavior_IsJumpEast(u8 metatileBehavior); bool8 MetatileBehavior_IsJumpWest(u8 metatileBehavior); diff --git a/include/mevent.h b/include/mevent.h index a611a98a8..7df669da3 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -1,6 +1,8 @@ #ifndef GUARD_MEVENT_H #define GUARD_MEVENT_H +#include "global.h" + struct MysteryEventStruct * sub_8143D94(void); bool32 sub_8143E1C(void); diff --git a/include/money.h b/include/money.h index 48b15db76..fa63e321c 100644 --- a/include/money.h +++ b/include/money.h @@ -1,6 +1,8 @@ #ifndef GUARD_MONEY_H #define GUARD_MONEY_H +#include "global.h" + u32 GetMoney(u32* moneyPtr); void SetMoney(u32* moneyPtr, u32 newValue); bool8 IsEnoughMoney(u32* moneyPtr, u32 cost); diff --git a/include/multiboot.h b/include/multiboot.h index d4700ff4e..4b4a3693a 100644 --- a/include/multiboot.h +++ b/include/multiboot.h @@ -1,6 +1,8 @@ #ifndef GUARD_MULTIBOOT_H #define GUARD_MULTIBOOT_H +#include "global.h" + #define MULTIBOOT_MASTER_INFO 0x62 #define MULTIBOOT_CLIENT_INFO 0x72 #define MULTIBOOT_MASTER_START_PROBE 0x61 diff --git a/include/mystery_event_script.h b/include/mystery_event_script.h index ab23a8d00..1ba1464fa 100644 --- a/include/mystery_event_script.h +++ b/include/mystery_event_script.h @@ -1,6 +1,8 @@ #ifndef GUARD_MYSTERY_EVENT_SCRIPT_H #define GUARD_MYSTERY_EVENT_SCRIPT_H +#include "global.h" + u32 RunMysteryEventScript(u8 *); void SetMysteryEventScriptStatus(u32 val); u16 GetRecordMixingGift(void); diff --git a/include/naming_screen.h b/include/naming_screen.h index 3d69b834f..be2cf34f8 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -1,6 +1,8 @@ #ifndef GUARD_NAMING_SCREEN_H #define GUARD_NAMING_SCREEN_H +#include "global.h" + #define NAMING_SCREEN_PLAYER 0 #define NAMING_SCREEN_BOX 1 #define NAMING_SCREEN_CAUGHT_MON 2 diff --git a/include/new_game.h b/include/new_game.h index 2088d1826..c495a9585 100644 --- a/include/new_game.h +++ b/include/new_game.h @@ -1,6 +1,8 @@ #ifndef GUARD_NEW_GAME_H #define GUARD_NEW_GAME_H +#include "global.h" + void WriteUnalignedWord(u32 var, u8 *dataPtr); u32 ReadUnalignedWord(u8* dataPtr); void CopyUnalignedWord(u8 *copyTo, u8 *copyFrom); diff --git a/include/overworld.h b/include/overworld.h index a5fba0c10..8cae07bdc 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -1,6 +1,8 @@ #ifndef GUARD_ROM4_H #define GUARD_ROM4_H +#include "global.h" + #include "main.h" struct UnkPlayerStruct @@ -68,7 +70,20 @@ void c2_load_new_map(void); void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); void mapldr_default(void); -void IncrementGameStat(u8); u32 GetGameStat(u8); +void sub_8056938(void); +void sub_8055D5C(struct WarpData *); +void sub_80572A8(void); +void sub_805726C(void); +void sub_8057430(void); +void sub_8055DC4(void); + +u8 sav1_map_get_name(void); + +extern u8 gUnknown_2031DD8; +extern u8 gUnknown_2036E28; + +extern bool8 (* gUnknown_3005024)(void); + #endif //GUARD_ROM4_H diff --git a/include/palette.h b/include/palette.h index d3bcd2271..3af0d5d7b 100644 --- a/include/palette.h +++ b/include/palette.h @@ -3,6 +3,8 @@ #include "global.h" +#include "global.h" + #define gPaletteFade_selectedPalettes (gPaletteFade.multipurpose1) // normal and fast fade #define gPaletteFade_blendCnt (gPaletteFade.multipurpose1) // hardware fade #define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade @@ -42,8 +44,8 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; extern u8 gPaletteDecompressionBuffer[]; -extern u16 gPlttBufferUnfaded[]; -extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; +extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE]; void LoadCompressedPalette(const void *, u16, u16); void LoadPalette(const void *, u16, u16); @@ -67,5 +69,8 @@ void BeginFastPaletteFade(u8); void BeginHardwarePaletteFade(u8, u8, u8, u8, u8); void BlendPalettes(u32, u8, u16); void BlendPalettesUnfaded(u32, u8, u16); +void sub_80716F8(const u16 *, u16 *, u16, u8); + +extern struct PaletteFadeControl gPaletteFade; #endif // GUARD_PALETTE_H diff --git a/include/party_menu.h b/include/party_menu.h index c787bafb1..19e1f7d4e 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_PARTY_MENU_H #define GUARD_PARTY_MENU_H +#include "global.h" + enum { AILMENT_NONE, AILMENT_PSN, @@ -14,5 +16,6 @@ bool8 pokemon_has_move(struct Pokemon *, u16); void sub_81B58A8(void); void DoWallyTutorialBagMenu(void); u8 pokemon_ailments_get_primary(u32 status); +u16 ItemIdToBattleMoveId(u16 itemId); #endif // GUARD_PARTY_MENU_H diff --git a/include/play_time.h b/include/play_time.h index 49091f4b1..233dbadda 100644 --- a/include/play_time.h +++ b/include/play_time.h @@ -1,6 +1,8 @@ #ifndef GUARD_PLAY_TIME_H #define GUARD_PLAY_TIME_H +#include "global.h" + void PlayTimeCounter_Reset(void); void PlayTimeCounter_Start(void); void PlayTimeCounter_Stop(void); diff --git a/include/player_pc.h b/include/player_pc.h index b14d1ede3..e14e5e9da 100644 --- a/include/player_pc.h +++ b/include/player_pc.h @@ -1,6 +1,8 @@ #ifndef GUARD_PLAYER_PC_H #define GUARD_PLAYER_PC_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/pokeball.h b/include/pokeball.h index 84178b5b2..10a9529b9 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEBALL_H #define GUARD_POKEBALL_H +#include "global.h" + enum { BALL_POKE, diff --git a/include/pokedex.h b/include/pokedex.h index 236feac45..ca642ed1a 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEDEX_H #define GUARD_POKEDEX_H +#include "global.h" + void ResetPokedex(void); void CopyMonCategoryText(u16 species, u8 *dst); u16 GetPokedexHeightWeight(u16 dexNum, u8 data); diff --git a/include/pokemon.h b/include/pokemon.h index e15172dd5..e8782af98 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEMON_H #define GUARD_POKEMON_H +#include "global.h" + #define MON_DATA_PERSONALITY 0 #define MON_DATA_OT_ID 1 #define MON_DATA_NICKNAME 2 @@ -570,8 +572,14 @@ void DecryptBoxMon(struct BoxPokemon *boxMon); // but they are not used since some code erroneously omits the third arg. // u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data); // u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data); + +#ifdef IS_POKEMON_C +u32 GetMonData(struct Pokemon *, s32, u8 *); +u32 GetBoxMonData(struct BoxPokemon *, s32, u8 *); +#else u32 GetMonData(); u32 GetBoxMonData(); +#endif // IS_POKEMON_C void SetMonData(struct Pokemon *mon, s32 field, const void *data); void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *data); diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 5c9862d57..cffc9780b 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEMON_3_H #define GUARD_POKEMON_3_H +#include "global.h" + const u8* GetTrainerClassNameFromId(u16 trainerId); const u8* GetTrainerNameFromId(u16 trainerId); diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index b6d21823e..da58a2d83 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEMON_ICON_H #define GUARD_POKEMON_ICON_H +#include "global.h" + const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo); const u16 *GetValidMonIconPalettePtr(u16 speciesId); u16 sub_80D2E84(u16 speciesId); diff --git a/include/pokemon_item_effects.h b/include/pokemon_item_effects.h index 505cc0f25..e02d976b2 100644 --- a/include/pokemon_item_effects.h +++ b/include/pokemon_item_effects.h @@ -55,8 +55,8 @@ struct PokemonItemEffect /*field 6 u8 value; }; -*/ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5); +*/ #endif // GUARD_POKEMON_ITEM_EFFECTS diff --git a/include/pokemon_size_record.h b/include/pokemon_size_record.h index f61286bd4..3fa448cbb 100644 --- a/include/pokemon_size_record.h +++ b/include/pokemon_size_record.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKEMON_SIZE_RECORD_H #define GUARD_POKEMON_SIZE_RECORD_H +#include "global.h" + void InitSeedotSizeRecord(void); void GetSeedotSizeRecordInfo(void); void CompareSeedotSize(void); diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 9fcfdba96..5b2d2052b 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -1,13 +1,16 @@ #ifndef GUARD_POKEMON_STORAGE_SYSTEM_H #define GUARD_POKEMON_STORAGE_SYSTEM_H +#include "global.h" + #define TOTAL_BOXES_COUNT 14 #define IN_BOX_COUNT 30 u8* GetBoxNamePtr(u8 boxNumber); -struct BoxPokemon *GetBoxedMonPtr(u8, u8); -void SetBoxMonNickFromAnyBox(u8, u8, u8 *); +struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition); +void SetBoxMonNickFromAnyBox(u8 boxId, u8 monPosition, u8 * newNick); void CompactPartySlots(void); u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request); +void sub_808BCB4(u8 boxId, u8 monPosition); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/include/pokenav.h b/include/pokenav.h index 06676610a..ad95873b1 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -1,6 +1,8 @@ #ifndef GUARD_POKENAV_H #define GUARD_POKENAV_H +#include "global.h" + bool8 sub_81D5C18(void); #endif //GUARD_POKENAV_H diff --git a/include/quest_log.h b/include/quest_log.h new file mode 100644 index 000000000..9f8a0ea21 --- /dev/null +++ b/include/quest_log.h @@ -0,0 +1,25 @@ +#ifndef GUARD_QUEST_LOG_H +#define GUARD_QUEST_LOG_H + +#include "global.h" + +struct UnkStruct_3005E90 +{ + u8 unk_0; + u8 unk_1_0:1; + u8 unk_1_1:1; + u8 unk_1_2:1; + u8 unk_1_3:1; + u8 unk_1_4:1; + u8 unk_2; +}; + +extern u8 gUnknown_3005E88; +extern u16 gUnknown_3005E8C; +extern struct UnkStruct_3005E90 gUnknown_3005E90; +extern struct UnkStruct_203AE98 * gUnknown_3005E94; + +void sub_8112720(u8); +void sub_8113550(u16, const u16 *); + +#endif //GUARD_QUEST_LOG_H diff --git a/include/quest_log_8150454.h b/include/quest_log_8150454.h new file mode 100644 index 000000000..adf5d193e --- /dev/null +++ b/include/quest_log_8150454.h @@ -0,0 +1,8 @@ +#ifndef GUARD_QUEST_LOG_8150454_H +#define GUARD_QUEST_LOG_8150454_H + +#include "global.h" + +void sub_8150454(void); + +#endif //GUARD_QUEST_LOG_8150454_H diff --git a/include/random.h b/include/random.h index 79a9d71dc..139316f9d 100644 --- a/include/random.h +++ b/include/random.h @@ -1,6 +1,8 @@ #ifndef GUARD_RANDOM_H #define GUARD_RANDOM_H +#include "global.h" + extern u32 gRngValue; extern u32 gRng2Value; diff --git a/include/region_map.h b/include/region_map.h index 91384d166..93ad5541d 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -1,6 +1,8 @@ #ifndef GUARD_REGION_MAP_H #define GUARD_REGION_MAP_H +#include "global.h" + #include "bg.h" // Exported type declarations @@ -310,5 +312,6 @@ void CreateRegionMapPlayerIcon(u16 x, u16 y); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); u8 *GetMapName(u8 *, u16, u16); bool32 sub_8124668(u8 mapSecId); +void sub_80C4DF8(u8 *, u8); #endif //GUARD_REGION_MAP_H diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h index c22135280..9d1ec30f2 100644 --- a/include/reshow_battle_screen.h +++ b/include/reshow_battle_screen.h @@ -1,6 +1,8 @@ #ifndef GUARD_RESHOW_BATTLE_SCREEN_H #define GUARD_RESHOW_BATTLE_SCREEN_H +#include "global.h" + void nullsub_35(void); void ReshowBattleScreenAfterMenu(void); diff --git a/include/roamer.h b/include/roamer.h index ba1b09b54..5ec0a17fc 100644 --- a/include/roamer.h +++ b/include/roamer.h @@ -1,6 +1,8 @@ #ifndef GUARD_ROAMER_H #define GUARD_ROAMER_H +#include "global.h" + void ClearRoamerData(void); void ClearRoamerLocationData(void); void InitRoamer(void); diff --git a/include/rom6.h b/include/rom6.h index 6d20752e2..753c07305 100644 --- a/include/rom6.h +++ b/include/rom6.h @@ -1,6 +1,8 @@ #ifndef GUARD_ROM6_H #define GUARD_ROM6_H +#include "global.h" + void sub_81357FC(u8, void(void)); u8 GetLeadMonIndex(void); u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y); diff --git a/include/rom_818CFC8.h b/include/rom_818CFC8.h index 1d0626b2b..048825778 100644 --- a/include/rom_818CFC8.h +++ b/include/rom_818CFC8.h @@ -5,6 +5,8 @@ #ifndef GUARD_ROM_818CFC8_H #define GUARD_ROM_818CFC8_H +#include "global.h" + bool8 InBattlePyramid(void); u8 sub_81AAA40(void); diff --git a/include/rom_81BE66C.h b/include/rom_81BE66C.h index 5b4f80249..fa439d8da 100644 --- a/include/rom_81BE66C.h +++ b/include/rom_81BE66C.h @@ -5,6 +5,8 @@ #ifndef GUARD_ROM_81BE66C_H #define GUARD_ROM_81BE66C_H +#include "global.h" + bool32 InTrainerHill(void); bool8 FieldObjectIsFarawayIslandMew(struct MapObject *); u32 sub_81D427C(void); diff --git a/include/safari_zone.h b/include/safari_zone.h index 9a81894b8..b20555a8c 100644 --- a/include/safari_zone.h +++ b/include/safari_zone.h @@ -1,6 +1,8 @@ #ifndef GUARD_SAFARI_ZONE_H #define GUARD_SAFARI_ZONE_H +#include "global.h" + extern u8 gNumSafariBalls; bool32 GetSafariZoneFlag(void); diff --git a/include/save.h b/include/save.h index 38ad63170..f547230b9 100644 --- a/include/save.h +++ b/include/save.h @@ -1,6 +1,8 @@ #ifndef GUARD_SAVE_H #define GUARD_SAVE_H +#include "global.h" + #define NUM_SECTORS 32 // defined in agb_flash but not in a header #define SAVE_STATUS_EMPTY 0 @@ -117,6 +119,8 @@ u8 sub_80DA45C(void); bool8 sub_80DA4A0(void); u8 Save_LoadGameData(u8 a1); u32 TryCopySpecialSaveSection(u8 sector, u8* dst); +u32 sub_8153634(u8 sector, u8* src); +void sub_8153688(u8 taskId); u32 sub_80DA5E0(u8 sector, u8* src); void sub_80DA634(u8 taskId); diff --git a/include/save_location.h b/include/save_location.h index 95b3a7d7d..69b39ea53 100644 --- a/include/save_location.h +++ b/include/save_location.h @@ -1,6 +1,8 @@ #ifndef GUARD_SAVE_LOCATION_H #define GUARD_SAVE_LOCATION_H +#include "global.h" + bool32 sub_81AFCEC(void); void TrySetMapSaveWarpStatus(void); void sub_81AFDA0(void); diff --git a/include/script.h b/include/script.h index 2b5f8c2ce..9e26b8a28 100644 --- a/include/script.h +++ b/include/script.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_H #define GUARD_SCRIPT_H +#include "global.h" + struct ScriptContext; typedef bool8 (*ScrCmdFunc)(struct ScriptContext *); diff --git a/include/script_menu.h b/include/script_menu.h index 717eda041..1e95570b3 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_MENU_H #define GUARD_SCRIPT_MENU_H +#include "global.h" + extern const u8 *const gUnknown_0858BAF0[9]; bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4); diff --git a/include/script_movement.h b/include/script_movement.h index 4c3fa6002..ae446812e 100644 --- a/include/script_movement.h +++ b/include/script_movement.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_MOVEMENT_H #define GUARD_SCRIPT_MOVEMENT_H +#include "global.h" + bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, const u8 *); bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8); void sub_80D338C(void); diff --git a/include/script_pokemon_80F8.h b/include/script_pokemon_80F8.h index 8dd7ed0c0..8a5bb12e1 100644 --- a/include/script_pokemon_80F8.h +++ b/include/script_pokemon_80F8.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPTPOKE80F8_H #define GUARD_SCRIPTPOKE80F8_H +#include "global.h" + void ShowContestWinner(void); u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); u8 ScriptGiveEgg(u16); diff --git a/include/script_pokemon_81B9.h b/include/script_pokemon_81B9.h index 1b8563ee6..d49095fcc 100644 --- a/include/script_pokemon_81B9.h +++ b/include/script_pokemon_81B9.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPTPOKE81B9_H #define GUARD_SCRIPTPOKE81B9_H +#include "global.h" + void sub_81B9404(void); #endif diff --git a/include/shop.h b/include/shop.h index d3e86408c..1046a590a 100644 --- a/include/shop.h +++ b/include/shop.h @@ -1,6 +1,8 @@ #ifndef GUARD_SHOP_H #define GUARD_SHOP_H +#include "global.h" + extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3]; void CreatePokemartMenu(const u16 *); diff --git a/include/slot_machine.h b/include/slot_machine.h index 8334e56fc..5c96384fa 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -1,6 +1,8 @@ #ifndef GUARD_SLOT_MACHINE_H #define GUARD_SLOT_MACHINE_H +#include "global.h" + void PlaySlotMachine(u8, void *); #endif // GUARD_SLOT_MACHINE_H diff --git a/include/songs.h b/include/songs.h index 5a1fff00c..f8d0fbf5b 100644 --- a/include/songs.h +++ b/include/songs.h @@ -1,6 +1,8 @@ #ifndef GUARD_SONGS_H #define GUARD_SONGS_H +#include "global.h" + enum { /*0x00*/ SE_STOP, diff --git a/include/sound.h b/include/sound.h index 7d47b7456..34fdfc839 100644 --- a/include/sound.h +++ b/include/sound.h @@ -1,6 +1,8 @@ #ifndef GUARD_SOUND_H #define GUARD_SOUND_H +#include "global.h" + void InitMapMusic(void); void MapMusicMain(void); void ResetMapMusic(void); diff --git a/include/sprite.h b/include/sprite.h index 170d77c3f..bc47f7100 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -1,6 +1,8 @@ #ifndef GUARD_SPRITE_H #define GUARD_SPRITE_H +#include "global.h" + #define MAX_SPRITES 64 struct SpriteSheet diff --git a/include/start_menu.h b/include/start_menu.h index 6c7cb3237..f5b38ee5e 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_START_MENU_H #define GUARD_START_MENU_H +#include "global.h" + void AppendToList(u8* list, u8* pos, u8 newEntry); #endif // GUARD_START_MENU_H diff --git a/include/string_util.h b/include/string_util.h index 2354c9ded..32e74e031 100644 --- a/include/string_util.h +++ b/include/string_util.h @@ -1,6 +1,8 @@ #ifndef GUARD_STRING_UTIL_H #define GUARD_STRING_UTIL_H +#include "global.h" + enum StringConvertMode { STR_CONV_MODE_LEFT_ALIGN, diff --git a/include/strings.h b/include/strings.h index 8b218e1e9..90c84c9b9 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1,6 +1,8 @@ #ifndef GUARD_STRINGS_H #define GUARD_STRINGS_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/task.h b/include/task.h index a199ba128..cd3deb544 100644 --- a/include/task.h +++ b/include/task.h @@ -1,6 +1,8 @@ #ifndef GUARD_TASK_H #define GUARD_TASK_H +#include "global.h" + #define NUM_TASKS 16 typedef void (*TaskFunc)(u8 taskId); diff --git a/include/text.h b/include/text.h index 7853598f8..2bda590c1 100644 --- a/include/text.h +++ b/include/text.h @@ -1,6 +1,8 @@ #ifndef GUARD_TEXT_H #define GUARD_TEXT_H +#include "global.h" + #define CHAR_SPACE 0x00 #define CHAR_0 0xA1 #define CHAR_QUESTION_MARK 0xAC diff --git a/include/text_window.h b/include/text_window.h index 3514296c1..72ce50efc 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -1,6 +1,8 @@ #ifndef GUARD_TEXT_WINDOW_H #define GUARD_TEXT_WINDOW_H +#include "global.h" + struct TilesPal { u32* tiles; diff --git a/include/tilesets.h b/include/tilesets.h index 70609c046..03274be60 100644 --- a/include/tilesets.h +++ b/include/tilesets.h @@ -1,6 +1,8 @@ #ifndef GUARD_tilesets_H #define GUARD_tilesets_H +#include "global.h" + // Exported type declarations // Exported RAM declarations diff --git a/include/trainer_classes.h b/include/trainer_classes.h index e5e26b359..3b93c3814 100644 --- a/include/trainer_classes.h +++ b/include/trainer_classes.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRAINER_CLASSES_H #define GUARD_TRAINER_CLASSES_H +#include "global.h" + enum { CLASS_PKMN_TRAINER0, // 0 diff --git a/include/trainer_front_sprites.h b/include/trainer_front_sprites.h index 3259bec88..8855041a5 100644 --- a/include/trainer_front_sprites.h +++ b/include/trainer_front_sprites.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRAINER_FRONT_SPRITES_H #define GUARD_TRAINER_FRONT_SPRITES_H +#include "global.h" + enum { TRAINER_FRONT_PIC_HIKER, @@ -54,8 +56,8 @@ enum TRAINER_FRONT_PIC_SCHOOL_KID_M, TRAINER_FRONT_PIC_SCHOOL_KID_F, TRAINER_FRONT_PIC_SR_JR, - TRAINER_FRONT_PIC_POKFAN_M, - TRAINER_FRONT_PIC_POKFAN_F, + TRAINER_FRONT_PIC_POKéFAN_M, + TRAINER_FRONT_PIC_POKéFAN_F, TRAINER_FRONT_PIC_YOUNGSTER, TRAINER_FRONT_PIC_WALLACE, TRAINER_FRONT_PIC_FISHERMAN, diff --git a/include/trainer_ids.h b/include/trainer_ids.h index 65c80187f..ebcb6e4e5 100644 --- a/include/trainer_ids.h +++ b/include/trainer_ids.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRAINER_IDS_H #define GUARD_TRAINER_IDS_H +#include "global.h" + #define NO_OF_TRAINERS 854 #define TRAINER_ID_STEVEN 804 diff --git a/include/trainer_see.h b/include/trainer_see.h index ab035d9f8..f87189377 100644 --- a/include/trainer_see.h +++ b/include/trainer_see.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRAINER_SEE_H #define GUARD_TRAINER_SEE_H +#include "global.h" + void sub_80B4578(struct MapObject *); u8 sub_80B47BC(void); void sub_8155D78(struct MapObject *); diff --git a/include/trig.h b/include/trig.h index a2f98a3e6..92388e05c 100644 --- a/include/trig.h +++ b/include/trig.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRIG_H #define GUARD_TRIG_H +#include "global.h" + extern const s16 gSineTable[]; s16 Sin(s16 index, s16 amplitude); diff --git a/include/unk_8159F40.h b/include/unk_8159F40.h new file mode 100644 index 000000000..f0e85d416 --- /dev/null +++ b/include/unk_8159F40.h @@ -0,0 +1,9 @@ +#ifndef GUARD_UNK_8159F40_H +#define GUARD_UNK_8159F40_H + +#include "global.h" + +void sub_815A008(struct QuestLog *); +void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *); + +#endif //GUARD_UNK_8159F40_H diff --git a/include/unk_text_util.h b/include/unk_text_util.h index 72243a90e..750c0541e 100644 --- a/include/unk_text_util.h +++ b/include/unk_text_util.h @@ -1,6 +1,8 @@ #ifndef GUARD_UNK_TEXT_UTIL_H #define GUARD_UNK_TEXT_UTIL_H +#include "global.h" + void UnkTextUtil_Reset(void); void UnkTextUtil_SetPtrI(u8 idx, const u8 *ptr); u8 *UnkTextUtil_StringExpandPlaceholders(u8 *dest, const u8 *src); diff --git a/include/unknown_task.h b/include/unknown_task.h index 9c6968c30..429e58aad 100644 --- a/include/unknown_task.h +++ b/include/unknown_task.h @@ -1,6 +1,8 @@ #ifndef GUARD_unknown_task_H #define GUARD_unknown_task_H +#include "global.h" + // Exported type declarations struct UnknownTaskStruct { diff --git a/include/util.h b/include/util.h index 63887b13f..a22cc77fa 100644 --- a/include/util.h +++ b/include/util.h @@ -1,6 +1,8 @@ #ifndef GUARD_UTIL_H #define GUARD_UTIL_H +#include "global.h" + #include "sprite.h" extern const u8 gMiscBlank_Gfx[]; // unused in Emerald diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 55bbaa7dd..2186e0b4f 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -1,6 +1,8 @@ #ifndef GUARD_WILD_ENCOUNTER_H #define GUARD_WILD_ENCOUNTER_H +#include "global.h" + #define LAND_WILD_COUNT 12 #define WATER_WILD_COUNT 5 #define ROCK_WILD_COUNT 5 @@ -40,5 +42,6 @@ void FishingWildEncounter(u8 rod); u16 GetLocalWildMon(bool8 *isWaterMon); u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); +void sub_8082740(u8); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/include/window.h b/include/window.h index 1e29119ea..2705a7895 100644 --- a/include/window.h +++ b/include/window.h @@ -1,6 +1,8 @@ #ifndef GUARD_WINDOW_H #define GUARD_WINDOW_H +#include "global.h" + enum { WINDOW_PRIORITY, diff --git a/ld_script.txt b/ld_script.txt index 40f9f25f2..67f21c48f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -219,13 +219,13 @@ SECTIONS { asm/item_pc.o(.text); asm/mailbox_pc.o(.text); asm/menu.o(.text); - asm/quest_log.o(.text); + src/quest_log.o(.text); asm/link_rfu_3.o(.text); asm/pokemon_special_anim.o(.text); asm/party_menu.o(.text); asm/union_room_chat.o(.text); asm/help_system_812B1E0.o(.text); - asm/quest_log_battle.o(.text); + src/quest_log_battle.o(.text); asm/fame_checker.o(.text); asm/menu2.o(.text); asm/oak_speech.o(.text); @@ -256,7 +256,7 @@ SECTIONS { asm/wireless_communication_status_screen.o(.text); asm/braille_text.o(.text); asm/text_window.o(.text); - asm/quest_log_8150454.o(.text); + src/quest_log_8150454.o(.text); asm/unk_81507FC.o(.text); asm/battle_controller_pokedude.o(.text); asm/unk_8159F40.o(.text); @@ -357,6 +357,7 @@ SECTIONS { src/main.o(.rodata); src/bg.o(.rodata); src/malloc.o(.rodata); + src/malloc.o(.rodata.str1.4); src/text_printer.o(.rodata); src/window.o(.rodata); src/text.o(.rodata); @@ -373,8 +374,13 @@ SECTIONS { data/data_83FECCC.o(.rodata); src/vs_seeker.o(.rodata); data/data_83FECCC.o(.rodata.8453F6C); + src/quest_log.o(.rodata); + data/data_83FECCC.o(.rodata.8456C74); src/menews_jisan.o(.rodata); + src/menews_jisan.o(.rodata.str1.4); data/data_8468C98.o(.rodata); + src/quest_log_8150454.o(.rodata); + data/data_8471F00.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); } =0 diff --git a/src/bg.c b/src/bg.c index d7f84bf4e..df91e9d4a 100644 --- a/src/bg.c +++ b/src/bg.c @@ -1067,7 +1067,6 @@ void CopyBgTilemapBufferToVram(u8 bg) void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height) { - void* srcCopy; u16 destX16; u16 destY16; u16 mode; @@ -1077,26 +1076,30 @@ void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u switch (GetBgType(bg)) { case 0: - srcCopy = src; + { + u16 * srcCopy = src; for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++; + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *(srcCopy)++; } } break; + } case 1: - srcCopy = src; + { + u8 * srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++; + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *(srcCopy)++; } } break; + } } } } diff --git a/src/dma3_manager.c b/src/dma3_manager.c index bb015c5cf..10049a566 100644 --- a/src/dma3_manager.c +++ b/src/dma3_manager.c @@ -1,7 +1,7 @@ #include "global.h" #include "dma3.h" -IWRAM_DATA struct { +static /*IWRAM_DATA*/ struct { /* 0x00 */ const u8 *src; /* 0x04 */ u8 *dest; /* 0x08 */ u16 size; diff --git a/src/load_save.c b/src/load_save.c index eba01642c..da55869aa 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -40,10 +40,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; // IWRAM common -IWRAM_DATA bool32 gFlashMemoryPresent; -IWRAM_DATA struct SaveBlock1 *gSaveBlock1Ptr; -IWRAM_DATA struct SaveBlock2 *gSaveBlock2Ptr; -IWRAM_DATA struct PokemonStorage *gPokemonStoragePtr; +bool32 gFlashMemoryPresent; +struct SaveBlock1 *gSaveBlock1Ptr; +struct SaveBlock2 *gSaveBlock2Ptr; +struct PokemonStorage *gPokemonStoragePtr; void CheckForFlashMemory(void) { diff --git a/src/menews_jisan.c b/src/menews_jisan.c index 450009318..13c787df7 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -94,7 +94,7 @@ void sub_8146C88(void) void sub_8146CA4(void) { - u16 *r4 = sub_806E454(VAR_0x4028); + u16 *r4 = GetVarPointer(VAR_0x4028); struct MysteryEventStruct *r2 = sub_8143D94(); struct MysteryEventStruct r0 = *r2; diff --git a/src/pokemon.c b/src/pokemon.c index ff7c907ca..5cd2cd2d7 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1,3 +1,5 @@ +#define IS_POKEMON_C + #include "global.h" #include "pokemon.h" #include "random.h" diff --git a/src/quest_log.c b/src/quest_log.c new file mode 100644 index 000000000..546ff6e05 --- /dev/null +++ b/src/quest_log.c @@ -0,0 +1,5027 @@ +#include "global.h" +#include "constants/species.h" +#include "constants/items.h" +#include "data2.h" +#include "malloc.h" +#include "main.h" +#include "task.h" +#include "palette.h" +#include "menu.h" +#include "random.h" +#include "menu_helpers.h" +#include "window.h" +#include "text_window.h" +#include "unk_text_util.h" +#include "event_data.h" +#include "event_scripts.h" +#include "string_util.h" +#include "script.h" +#include "overworld.h" +#include "field_fadetransition.h" +#include "field_weather.h" +#include "field_map_obj.h" +#include "map_obj_80688E4.h" +#include "map_obj_lock.h" +#include "field_player_avatar.h" +#include "field_control_avatar.h" +#include "battle.h" +#include "item.h" +#include "region_map.h" +#include "map_name_popup.h" +#include "wild_encounter.h" +#include "help_system.h" +#include "party_menu.h" +#include "unk_8159F40.h" +#include "pokemon_storage_system.h" +#include "save.h" +#include "link.h" +#include "quest_log_8150454.h" +#include "quest_log.h" + +u8 gUnknown_3005E88; + +struct Var4038Struct +{ + u8 unk_0_0:7; + u8 unk_0_7:1; + u8 unk_1; +}; + +#define VAR_0x4038_STRUCT ((struct Var4038Struct *)GetVarPointer(VAR_0x4038)) + +struct UnkStruct_203AE94 +{ + u8 unk_0_0:4; + u8 unk_0_4:2; + u8 unk_0_6:2; + u8 unk_1; + u8 unk_2; + u8 unk_3; +}; + +struct UnkStruct_203AE98 +{ + u8 unk_0; + u8 unk_1; + u8 unk_2; + u8 unk_3; + u16 unk_4; + u8 unk_6; +}; + +struct UnkStruct_300201C +{ + u16 unk_0_0:15; + u16 unk_0_f:1; + u16 unk_2; +}; + +struct UnkStruct_203B044 +{ + u8 unk_0; + u8 unk_1; + u16 unk_2; +}; + +u8 gUnknown_3005E88; +u16 gUnknown_3005E8C; +struct UnkStruct_3005E90 gUnknown_3005E90; +struct UnkStruct_203AE98 * gUnknown_3005E94; + +static struct UnkStruct_300201C * gUnknown_300201C; +static u16 gUnknown_3002020; + +EWRAM_DATA u8 gUnknown_203ADF8 = 0; +EWRAM_DATA u8 gUnknown_203ADF9 = 0; +EWRAM_DATA u8 gUnknown_203ADFA = 0; +EWRAM_DATA u16 gUnknown_203ADFC = 0; +EWRAM_DATA u8 gUnknown_203ADFE[3] = {0}; +EWRAM_DATA u16 * gUnknown_203AE04 = NULL; +EWRAM_DATA u16 * gUnknown_203AE08 = NULL; +EWRAM_DATA u16 * gUnknown_203AE0C[32] = {NULL}; +EWRAM_DATA void (* gUnknown_203AE8C)(void) = NULL; +EWRAM_DATA u16 *gUnknown_203AE90 = NULL; +EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; +EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0}; +EWRAM_DATA u16 gUnknown_203AF98 = 0; +EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}}; +EWRAM_DATA u16 gUnknown_203B01A = 0; +EWRAM_DATA u16 gUnknown_203B01C = 0; +EWRAM_DATA u16 gUnknown_203B01E = 0; +EWRAM_DATA u8 gUnknown_203B020 = 0; +EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; +EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; +EWRAM_DATA u8 gUnknown_203B048 = 0; +EWRAM_DATA u8 gUnknown_203B049 = 0; +EWRAM_DATA u8 gUnknown_203B04A = 0; +EWRAM_DATA u8 gUnknown_203B04B = 0; + +void sub_8110A00(void); +void sub_8110A3C(void); +void sub_8110BB0(u8); +void sub_8110BE8(u8); +void sub_8110E3C(void); +void sub_8110D94(void); +void sub_8110E20(void); +void sub_8110D48(u8); +u8 sub_8110E68(struct UnkStruct_203AE98 *); +void sub_8110F90(u8); +void sub_8111150(u8); +void sub_8111368(void); +void sub_81115E8(void); +u16 sub_8111618(void); +u16 sub_811164C(void); +void sub_8111688(void); +void sub_811175C(u8, struct UnkStruct_203AE98 *); +void sub_81118F4(s8); +void sub_8111914(void); +void sub_8111984(void); +void sub_8111A34(u8); +void sub_8111AD8(void); +void sub_8111B80(void); +u8 sub_8111BD4(void); +void sub_8111D10(void); +void sub_8111D90(u8); +void sub_8111E20(void); +void sub_8111E64(s8); +void sub_8111E84(void); +bool8 sub_8111F60(void); +void sub_8111F8C(u8); +void sub_8111FCC(u8); +void sub_8112044(u8); +void sub_81120AC(u8); +bool8 sub_81121D8(u8); +void sub_811229C(void); +void sub_8112364(void); +void sub_8112888(u8); +void sub_8112940(u8, struct UnkStruct_203AE98 *, u16); +u8 sub_8112CAC(void); +bool8 sub_8112CEC(void); +bool8 sub_8112D1C(void); +void sub_8113078(struct Var4038Struct *); +void sub_81130BC(struct Var4038Struct *); +u8 sub_8113194(struct Var4038Struct *); +u16 sub_81132A0(struct Var4038Struct *); +void sub_81132E0(struct Var4038Struct *); +bool16 sub_811337C(struct Var4038Struct *); +void sub_8113390(struct Var4038Struct *); +void sub_8113414(u8 (*)[16], u8, u8); +void sub_81134CC(struct Var4038Struct *); +bool8 sub_8113508(struct Var4038Struct * ); +void sub_8113524(struct Var4038Struct *); +bool8 sub_81136D4(void); +bool8 sub_8113778(u16, u16 *); +bool8 sub_81137E4(u16, u16 *); +u16 * sub_8113828(u16, u16 *); +bool8 sub_81138A0(u16, u16 *); +bool8 sub_8113954(u16, u16 *); +void sub_8113A1C(u16); +void sub_811381C(void); +void sub_81138F8(void); +bool8 sub_8113A44(u16, u16 *); +u16 * sub_8113A78(u16 *, u16 **); +void sub_8113ABC(u16 *); +bool8 sub_8113AE8(u16 *); +bool8 sub_8113B44(u16 *); +void sub_8113B88(void); +void sub_8113B94(u16); +void sub_8113BD8(void); +u16 * sub_8113BF4(u16 *); +u16 * sub_8113C20(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113C5C(u16 *, u16); +u16 * sub_8113C8C(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113CC8(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113D08(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113D48(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113D94(u16 *, struct UnkStruct_203AE98 *); +u16 * sub_8113F14(u16 *, const u16 *); +const u16 * sub_8113F3C(const u16 *); +u16 * sub_8113F80(u16 *, const u16 *); +const u16 * sub_8113FBC(const u16 *); +u16 * sub_8114174(u16 *, const u16 *); +const u16 * sub_8114188(const u16 *); +u16 * sub_81141D0(u16 *, const u16 *); +const u16 * sub_81141E4(const u16 *); +u16 * sub_811422C(u16 *, const u16 *); +const u16 * sub_8114240(const u16 *); +u16 * sub_8114288(u16 *, const u16 *); +const u16 * sub_811429C(const u16 *); +u16 * sub_8114310(u16 *, const u16 *); +const u16 * sub_8114324(const u16 *); +u16 * sub_8114380(u16 *, const u16 *); +const u16 * sub_8114394(const u16 *); +u16 * sub_81143F0(u16 *, const u16 *); +const u16 * sub_811443C(const u16 *); +u16 * sub_811445C(u16 *, const u16 *); +const u16 * sub_811448C(const u16 *); +u16 * sub_81144EC(u16 *, const u16 *); +const u16 * sub_8114518(const u16 *); +u16 * sub_8114578(u16 *, const u16 *); +const u16 * sub_81145A4(const u16 *); +u16 * sub_8114604(u16 *, const u16 *); +const u16 * sub_811464C(const u16 *); +u16 * sub_8114710(u16 *, const u16 *); +const u16 * sub_8114724(const u16 *); +u16 * sub_8114744(u16 *, const u16 *); +const u16 * sub_8114758(const u16 *); +u16 * sub_8114778(u16 *, const u16 *); +const u16 * sub_81147A8(const u16 *); +u16 * sub_8114808(u16 *, const u16 *); +const u16 * sub_8114834(const u16 *); +u16 * sub_811488C(u16 *, const u16 *); +const u16 * sub_81148BC(const u16 *); +u16 * sub_8114918(u16 *, const u16 *); +const u16 * sub_8114944(const u16 *); +u16 * sub_8114990(u16 *, const u16 *); +const u16 * sub_81149D0(const u16 *); +u16 * sub_8114A1C(u16 *, const u16 *); +const u16 * sub_8114A4C(const u16 *); +u16 * sub_8114AA0(u16 *, const u16 *); +const u16 * sub_8114AC8(const u16 *); +u16 * sub_8114B0C(u16 *, const u16 *); +const u16 * sub_8114B34(const u16 *); +u16 * sub_8114B78(u16 *, const u16 *); +const u16 * sub_8114BA0(const u16 *); +u16 * sub_8114BE4(u16 *, const u16 *); +const u16 * sub_8114C0C(const u16 *); +u16 * sub_8114C68(u16 *, const u16 *); +const u16 * sub_8114C8C(const u16 *); +u16 * sub_8114CC0(u16 *, const u16 *); +const u16 * sub_8114CE4(const u16 *); +u16 * sub_8114D4C(u16 *, const u16 *); +const u16 * sub_8114D68(const u16 *); +u16 * sub_8114DE8(u16 *, const u16 *); +const u16 * sub_8114E68(const u16 *); +bool8 sub_8114FBC(u16); +u16 * sub_8114FF0(u16 *, const u16 *); +const u16 * sub_811500C(const u16 *); +u16 * sub_8115078(u16 *, const u16 *); +const u16 * sub_81150CC(const u16 *); +u16 * sub_81151C0(u16 *, const u16 *); +const u16 * sub_81151DC(const u16 *); +u16 * sub_8115280(u16 *, const u16 *); +const u16 * sub_81152BC(const u16 *); +bool8 sub_81153A8(u16, u16 *); +bool8 sub_81153E4(u16, u16 *); +u16 * sub_8115410(u16 *, const u16 *); +const u16 * sub_8115460(const u16 *); +u16 * sub_81154DC(u16 *, const u16 *); +const u16 * sub_8115518(const u16 *); +u16 * sub_81155A4(u16 *, const u16 *); +const u16 * sub_81155E0(const u16 *); +u16 * sub_81156D8(u16 *, const u16 *); +const u16 * sub_8115700(const u16 *); +u16 * sub_81157DC(u16 *, const u16 *); +const u16 * sub_8115800(const u16 *); +void sub_8115834(u8 *); + +extern const u8 gUnknown_841A155[]; +extern const u8 gUnknown_841A16F[]; +extern const u8 gUnknown_841A193[]; +extern const u8 gUnknown_841A1CD[]; +extern const u8 gUnknown_841A1E7[]; +extern const u8 gUnknown_841A210[]; +extern const u8 gUnknown_841A220[]; +extern const u8 gUnknown_841A255[]; +extern const u8 gUnknown_841A277[]; +extern const u8 gUnknown_841A2B0[]; +extern const u8 gUnknown_841A2E1[]; +extern const u8 gUnknown_841A312[]; +extern const u8 gUnknown_841A349[]; +extern const u8 gUnknown_841A391[]; +extern const u8 gUnknown_841A3DA[]; +extern const u8 gUnknown_841A3FF[]; +extern const u8 gUnknown_841A422[]; +extern const u8 gUnknown_841A477[]; +extern const u8 gUnknown_841A4C6[]; +extern const u8 gUnknown_841A502[]; +extern const u8 gUnknown_841A506[]; +extern const u8 gUnknown_841A50B[]; +extern const u8 gUnknown_841A53A[]; +extern const u8 gUnknown_841A566[]; +extern const u8 gUnknown_841A59C[]; +extern const u8 gUnknown_841A5D9[]; +extern const u8 gUnknown_841A5FA[]; +extern const u8 gUnknown_841A60A[]; +extern const u8 gUnknown_841A632[]; +extern const u8 gUnknown_841A64F[]; +extern const u8 gUnknown_841A66E[]; +extern const u8 gUnknown_841A694[]; +extern const u8 gUnknown_841A6A5[]; +extern const u8 gUnknown_841A6E1[]; +extern const u8 gUnknown_841A732[]; +extern const u8 gUnknown_841A74E[]; +extern const u8 gUnknown_841A756[]; +extern const u8 gUnknown_841A762[]; +extern const u8 gUnknown_841A76A[]; +extern const u8 gUnknown_841A7B0[]; +extern const u8 gUnknown_841A7DD[]; +extern const u8 gUnknown_841A810[]; +extern const u8 gUnknown_841A858[]; +extern const u8 gUnknown_841A896[]; +extern const u8 gUnknown_841A8D4[]; +extern const u8 gUnknown_841A8DD[]; +extern const u8 gUnknown_841A8E0[]; +extern const u8 gUnknown_841A90C[]; +extern const u8 gUnknown_841A938[]; +extern const u8 gUnknown_841A965[]; +extern const u8 gUnknown_841A9A9[]; +extern const u8 gUnknown_841A9D4[]; +extern const u8 gUnknown_841AA01[]; +extern const u8 gUnknown_841AA2B[]; +extern const u8 gUnknown_841AA76[]; +extern const u8 gUnknown_841AAAA[]; +extern const u8 gUnknown_841AAEC[]; +extern const u8 gUnknown_841AB29[]; +extern const u8 gUnknown_841AB74[]; +extern const u8 gUnknown_841AB8E[]; +extern const u8 gUnknown_841ABAB[]; +extern const u8 gUnknown_841ABCD[]; +extern const u8 gUnknown_841ABF9[]; +extern const u8 gUnknown_841AC2A[]; +extern const u8 gUnknown_841AC51[]; +extern const u8 gUnknown_841AC93[]; +extern const u8 gUnknown_841ACBC[]; +extern const u8 gUnknown_841ACF9[]; +extern const u8 gUnknown_841AD1D[]; +extern const u8 gUnknown_841AD3C[]; +extern const u8 gUnknown_841AD69[]; +extern const u8 gUnknown_841AD9E[]; +extern const u8 gUnknown_841ADC8[]; +extern const u8 gUnknown_841ADFF[]; +extern const u8 gUnknown_841AE1E[]; +extern const u8 gUnknown_841AE48[]; +extern const u8 gUnknown_841AE8F[]; +extern const u8 gUnknown_841AEA7[]; +extern const u8 gUnknown_841AEDC[]; +extern const u8 gUnknown_841AF0C[]; +extern const u8 gUnknown_841AF3E[]; +extern const u8 gUnknown_841AF6D[]; +extern const u8 gUnknown_841AF98[]; +extern const u8 gUnknown_841AF9F[]; +extern const u8 gUnknown_841AFA6[]; +extern const u8 gUnknown_841AFD1[]; +extern const u8 gUnknown_841AFD6[]; +extern const u8 gUnknown_841B005[]; +extern const u8 gUnknown_841B03F[]; +extern const u8 gUnknown_841B064[]; +extern const u8 gUnknown_841B073[]; +extern const u8 gUnknown_841B09F[]; +extern const u8 gUnknown_841B0A4[]; +extern const u8 gUnknown_841B0B5[]; +extern const u8 gUnknown_841B0B9[]; +extern const u8 gUnknown_841B0CD[]; +extern const u8 gUnknown_841B0DD[]; +extern const u8 gUnknown_841B0F6[]; +extern const u8 gUnknown_841B0FF[]; +extern const u8 gUnknown_841B109[]; +extern const u8 gUnknown_841B116[]; +extern const u8 gUnknown_841B11F[]; +extern const u8 gUnknown_841B130[]; +extern const u8 gUnknown_841B141[]; +extern const u8 gUnknown_841B14B[]; +extern const u8 gUnknown_841B15A[]; +extern const u8 gUnknown_841B166[]; +extern const u8 gUnknown_841B172[]; +extern const u8 gUnknown_841B180[]; +extern const u8 gUnknown_841B190[]; +extern const u8 gUnknown_841B1A3[]; +extern const u8 gUnknown_841B1B7[]; +extern const u8 gUnknown_841B1C7[]; +extern const u8 gUnknown_841B1DA[]; +extern const u8 gUnknown_841B1E5[]; +extern const u8 gUnknown_841B1F4[]; +extern const u8 gUnknown_841B200[]; +extern const u8 gUnknown_841B20E[]; +extern const u8 gUnknown_841B21C[]; +extern const u8 gUnknown_841B226[]; +extern const u8 gUnknown_841B236[]; +extern const u8 gUnknown_841B246[]; +extern const u8 gUnknown_841B25B[]; +extern const u8 gUnknown_841B268[]; +extern const u8 gUnknown_841B277[]; +extern const u8 gUnknown_8418C1B[]; + + +const struct WindowTemplate gUnknown_845661C[3] = { + { 0, 0, 0, 30, 2, 15, 0x0e9 }, + { 0, 0, 18, 30, 2, 15, 0x0ad }, + { 0, 0, 14, 30, 6, 15, 0x14c } +}; + +const struct TextColor gUnknown_8456634 = {15, 1, 12}; + +const u16 gUnknown_8456638[] = INCBIN_U16("data/graphics/unknown_8456638.bin"); + +const u8 gUnknown_8456698[] = {17, 10, 3}; + +void sub_8110840(void * oldPointer) +{ + ptrdiff_t offset = (void *)gSaveBlock1Ptr - oldPointer; + if (gUnknown_203AE04) + gUnknown_203AE04 = (void *)gUnknown_203AE04 + offset; + if (gUnknown_203ADFA != 0) + { + if (gUnknown_203AE08) + gUnknown_203AE08 = (void *)gUnknown_203AE08 + offset; + if (gUnknown_203ADFA == 2) + { + int r3; + for (r3 = 0; r3 < 0x20; r3++) + if (gUnknown_203AE0C[r3]) + gUnknown_203AE0C[r3] = (void *)gUnknown_203AE0C[r3] + offset; + } + } +} + +void sub_811089C(void) +{ + memset(gSaveBlock1Ptr->questLog, 0, sizeof(gSaveBlock1Ptr->questLog)); + gUnknown_203ADF8 = 0; + gUnknown_203ADFA = 0; + gUnknown_203AE8C = 0; + gUnknown_203AE08 = NULL; + gUnknown_203AE04 = 0; + sub_8113BD8(); + sub_81138F8(); +} + +void sub_81108F0(u8 a0) +{ + memset(gSaveBlock1Ptr->questLog + a0, 0, sizeof(struct QuestLog)); + gUnknown_203AE04 = NULL; +} + +void sub_8110920(void) +{ + gUnknown_203AE04 = NULL; +} + +void sub_811092C(void) +{ + if (gUnknown_203AE8C) + gUnknown_203AE8C(); +} + +bool8 sub_8110944(const void * a0, size_t a1) +{ + void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; + void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; + r0 -= a1; + if ((const void *)a0 < r2 || (const void *)a0 > r0) + return FALSE; + return TRUE; +} + +bool8 sub_8110988(u16 * a0, size_t a1) +{ + void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; + void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; + r0 -= a1; + if ((void *)a0 < r2 || (void *)a0 > r0) + return FALSE; + return TRUE; +} + +void sub_81109CC(u8 a0) +{ + gUnknown_203ADFA = a0; + if (a0 == 1) + gUnknown_203AE8C = sub_8110A00; + else + gUnknown_203AE8C = sub_8110A3C; +} + +void sub_8110A00(void) +{ + if (sub_8110E68(gUnknown_203AE98) != 1) + { + gUnknown_3005E88 = 0; + sub_8110E3C(); + gUnknown_203ADFA = 0; + gUnknown_203AE8C = NULL; + } +} + +void sub_8110A3C(void) +{ + if (gUnknown_203AE94.unk_0_0 == 2) + gUnknown_203AE94.unk_0_0 = 0; + + if (gUnknown_203AE94.unk_0_6 == 0) + { + if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < 32 && gUnknown_203AE0C[gUnknown_203AE94.unk_1])) + sub_8111AD8(); + else + { + gUnknown_203AE94.unk_0_6 = 2; + ScriptContext2_Enable(); + sub_81118F4(0); + } + } +} + +void sub_8110AB4(void) +{ + gUnknown_20370D0 = gUnknown_203ADFA; +} + +u8 sub_8110AC8(void) +{ + return gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000; +} + +void sub_8110AEC(u16 a0) +{ + if (gUnknown_203ADF8 > 3) + gUnknown_203ADF8 = 0; + + sub_81108F0(gUnknown_203ADF8); + sub_8113B88(); + gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; + if ((a0 >= 12 && a0 < 20) || a0 == 35) + gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 2; + else + gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 1; + sub_81115E8(); + sub_8110BB0(gUnknown_203ADF8); + sub_8110BE8(gUnknown_203ADF8); + sub_8110D94(); + sub_8110E20(); + sub_8110D48(gUnknown_203ADF8); + gUnknown_203ADFC = 0; + sub_8112940(2, gUnknown_203AE98, 0x100); + sub_8110E68(gUnknown_203AE98); + sub_81109CC(1); +} + +void sub_8110BB0(u8 a0) +{ + struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; + questLog->unk_001 = gSaveBlock1Ptr->location.mapGroup; + questLog->unk_002 = gSaveBlock1Ptr->location.mapNum; + questLog->unk_003 = gSaveBlock1Ptr->location.warpId; + questLog->unk_004 = gSaveBlock1Ptr->pos.x; + questLog->unk_006 = gSaveBlock1Ptr->pos.y; +} + +#ifdef NONMATCHING +void sub_8110BE8(u8 a0) +{ + struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; + u16 i; // r6 + + sub_815A008(questLog); + + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapObjectTemplates); i++) + { + if (gSaveBlock1Ptr->mapObjectTemplates[i].x < 0) + { + questLog->npcData[i].x = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].x; + questLog->npcData[i].negx = TRUE; + } + else + { + questLog->npcData[i].x = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].x; + questLog->npcData[i].negx = FALSE; + } + if (gSaveBlock1Ptr->mapObjectTemplates[i].y < 0) + { + questLog->npcData[i].y = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].y; + questLog->npcData[i].negy = TRUE; + } + else + { + questLog->npcData[i].y = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].y; + questLog->npcData[i].negy = FALSE; + } + questLog->npcData[i].elevation = gSaveBlock1Ptr->mapObjectTemplates[i].elevation; + questLog->npcData[i].movementType = gSaveBlock1Ptr->mapObjectTemplates[i].movementType; + } +} +#else +NAKED +void sub_8110BE8(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldr r4, =gSaveBlock1Ptr\n" + "\tmovs r1, 0xCD\n" + "\tlsls r1, 3\n" + "\tmuls r0, r1\n" + "\tmovs r1, 0x98\n" + "\tlsls r1, 5\n" + "\tadds r0, r1\n" + "\tldr r1, [r4]\n" + "\tadds r7, r1, r0\n" + "\tadds r0, r7, 0\n" + "\tbl sub_815A008\n" + "\tmovs r6, 0\n" + "\tmov r9, r4\n" + "\tmovs r2, 0x8D\n" + "\tlsls r2, 3\n" + "\tmov r8, r2\n" + "\tldr r3, =0x0000046a\n" + "\tmov r10, r3\n" + "_08110C1C:\n" + "\tmov r4, r9\n" + "\tldr r1, [r4]\n" + "\tlsls r2, r6, 1\n" + "\tadds r0, r2, r6\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "\tldr r0, =0x000008e4\n" + "\tadds r1, r0\n" + "\tldrh r4, [r1]\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r1, r3]\n" + "\tmov r12, r2\n" + "\tcmp r0, 0\n" + "\tbge _08110C64\n" + "\tlsls r3, r6, 2\n" + "\tadds r2, r7, r3\n" + "\tnegs r0, r0\n" + "\tmov r4, r8\n" + "\tadds r1, r2, r4\n" + "\tstrb r0, [r1]\n" + "\tldr r0, =0x00000469\n" + "\tadds r2, r0\n" + "\tldrb r0, [r2]\n" + "\tmovs r1, 0x1\n" + "\torrs r0, r1\n" + "\tstrb r0, [r2]\n" + "\tb _08110C7C\n" + "\t.pool\n" + "_08110C64:\n" + "\tlsls r3, r6, 2\n" + "\tadds r1, r7, r3\n" + "\tmov r2, r8\n" + "\tadds r0, r1, r2\n" + "\tstrb r4, [r0]\n" + "\tldr r4, =0x00000469\n" + "\tadds r1, r4\n" + "\tldrb r2, [r1]\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\tstrb r0, [r1]\n" + "_08110C7C:\n" + "\tadds r5, r3, 0\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tmov r2, r12\n" + "\tadds r1, r2, r6\n" + "\tlsls r1, 3\n" + "\tadds r0, r1\n" + "\tldr r3, =0x000008e6\n" + "\tadds r1, r0, r3\n" + "\tldrh r2, [r1]\n" + "\tmovs r4, 0\n" + "\tldrsh r0, [r1, r4]\n" + "\tcmp r0, 0\n" + "\tbge _08110CC8\n" + "\tadds r3, r7, r5\n" + "\tadds r1, r0, 0\n" + "\tnegs r1, r1\n" + "\tlsls r1, 24\n" + "\tmov r2, r8\n" + "\tadds r4, r3, r2\n" + "\tlsrs r1, 15\n" + "\tldr r0, [r4]\n" + "\tldr r2, =0xfffe01ff\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstr r0, [r4]\n" + "\tadd r3, r10\n" + "\tldrb r0, [r3]\n" + "\tmovs r1, 0x2\n" + "\torrs r0, r1\n" + "\tb _08110CE6\n" + "\t.pool\n" + "_08110CC8:\n" + "\tadds r3, r7, r5\n" + "\tlsls r2, 24\n" + "\tmov r0, r8\n" + "\tadds r4, r3, r0\n" + "\tlsrs r2, 15\n" + "\tldr r0, [r4]\n" + "\tldr r1, =0xfffe01ff\n" + "\tands r0, r1\n" + "\torrs r0, r2\n" + "\tstr r0, [r4]\n" + "\tadd r3, r10\n" + "\tldrb r1, [r3]\n" + "\tmovs r0, 0x3\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "_08110CE6:\n" + "\tstrb r0, [r3]\n" + "\tadds r5, r7, r5\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tmov r2, r12\n" + "\tadds r3, r2, r6\n" + "\tlsls r3, 3\n" + "\tadds r0, r3\n" + "\tldr r4, =0x000008e8\n" + "\tadds r0, r4\n" + "\tldrb r1, [r0]\n" + "\tmov r0, r10\n" + "\tadds r4, r5, r0\n" + "\tlsls r1, 2\n" + "\tldrb r2, [r4]\n" + "\tmovs r0, 0x3\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4]\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tadds r0, r3\n" + "\tldr r2, =0x000008e9\n" + "\tadds r0, r2\n" + "\tldrb r0, [r0]\n" + "\tldr r3, =0x0000046b\n" + "\tadds r5, r3\n" + "\tstrb r0, [r5]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3F\n" + "\tbhi _08110D2A\n" + "\tb _08110C1C\n" + "_08110D2A:\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.pool"); +} +#endif // NONMATCHING + +void sub_8110D48(u8 a0) +{ + struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; + + CpuCopy16(gSaveBlock1Ptr->flags, questLog->flags, FLAGS_COUNT * sizeof(u8)); + CpuCopy16(gSaveBlock1Ptr->vars, questLog->vars, VARS_COUNT * sizeof(u16)); +} + +void sub_8110D94(void) +{ + u16 i, j; + u16 sp0[4]; + + for (i = 0; i < 4; i++) + { + sp0[i] = 0; + for (j = 0; j < 16; j++) + { + if (gSaveBlock1Ptr->trainerRematches[16 * i + j]) + { + sp0[i] += (1 << j); + } + } + VarSet(VAR_0x40AA + i, sp0[i]); + } +} + +void sub_8110E20(void) +{ + VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapDataId); +} + +void sub_8110E3C(void) +{ + sub_8113BF4(gUnknown_203AE08); + if (++gUnknown_203ADF8 > 3) + gUnknown_203ADF8 = 0; +} + +bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) +{ + u16 i; + + for (i = gUnknown_203ADFC; i < gUnknown_203AF98; i++) + { + if (gUnknown_203AE08 == NULL) + return FALSE; + switch (a0[i].unk_6) + { + case 0: + case 1: + gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]); + break; + default: + gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]); + break; + } + if (gUnknown_203AE08 == NULL) + { + gUnknown_3005E88 = 0; + return FALSE; + } + } + + if (gUnknown_3005E88 == 0) + { + gUnknown_203AE08 = sub_8113BF4(gUnknown_203AE08); + return FALSE; + } + gUnknown_203ADFC = gUnknown_203AF98; + return TRUE; +} + +void sub_8110F14(u8 taskId) +{ + u8 i; + + sub_811381C(); + gUnknown_203ADF9 = 0; + for (i = 0; i < 4; i++) + { + if (gSaveBlock1Ptr->questLog[i].unk_000) + gUnknown_203ADF9++; + } + + if (gUnknown_203ADF9 != 0) + { + gUnknown_3005ECC = FALSE; + sub_8110F90(taskId); + DestroyTask(taskId); + } + else + { + SetMainCallback2(sub_8056938); + DestroyTask(taskId); + } +} + +void sub_8110F90(u8 unused) +{ + gSaveBlock1Ptr->location.mapGroup = 3; + gSaveBlock1Ptr->location.mapNum = 19; + gSaveBlock1Ptr->location.warpId = -1; + gUnknown_203ADF8 = 0; + gUnknown_2031DD8 = 1; + sub_8082740(1); + sub_8111368(); +} + +void sub_8110FCC(void) +{ + sub_811175C(gUnknown_203ADF8, gUnknown_203AE98); + sub_8113B88(); + sub_8112940(1, gUnknown_203AE98, 0x100); + sub_8111150(gUnknown_203ADF8); +} + +bool8 sub_8111000(void) +{ + LoadPalette(stdpal_get(4), 0xF0, 0x20); + sub_81109CC(2); + sub_807DF64(); + gUnknown_203AE94 = (struct UnkStruct_203AE94){}; + gUnknown_203AE94.unk_0_0 = 2; + return 1; +} + +bool8 sub_8111038(void) +{ + LoadPalette(stdpal_get(4), 0xF0, 0x20); + sub_81109CC(2); + sub_807DF7C(); + gUnknown_203AE94 = (struct UnkStruct_203AE94){}; + gUnknown_203AE94.unk_0_0 = 2; + return 1; +} + +void sub_8111070(u8 a0) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + gUnknown_203ADFE[i] = AddWindow(&gUnknown_845661C[i]); + FillWindowPixelRect(gUnknown_203ADFE[i], 15, 0, 0, gUnknown_845661C[i].width * 8, gUnknown_845661C[i].height * 8); + } + + // _("Previously on your quest…$") + StringExpandPlaceholders(gStringVar4, gUnknown_841A155); + + if (a0) + { + ConvertIntToDecimalStringN(gStringVar1, a0, STR_CONV_MODE_LEFT_ALIGN, 1); + StringAppend(gStringVar4, gStringVar1); + } + + AddTextPrinterParametrized2(gUnknown_203ADFE[0], 2, 2, 2, 1, 2, &gUnknown_8456634, 0, gStringVar4); + PutWindowTilemap(gUnknown_203ADFE[0]); + PutWindowTilemap(gUnknown_203ADFE[1]); + CopyWindowToVram(gUnknown_203ADFE[0], 2); + CopyWindowToVram(gUnknown_203ADFE[2], 2); + CopyWindowToVram(gUnknown_203ADFE[1], 3); +} + +void sub_8111134(void) +{ + PutWindowTilemap(gUnknown_203ADFE[1]); + CopyWindowToVram(gUnknown_203ADFE[1], 1); +} + +void sub_8111150(u8 a0) +{ + struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[a0]; + u16 i; + + for (i = 0; i < 64; i++) + { + if (questLog->npcData[i].negx) + gSaveBlock1Ptr->mapObjectTemplates[i].x = -questLog->npcData[i].x; + else + gSaveBlock1Ptr->mapObjectTemplates[i].x = questLog->npcData[i].x; + if (questLog->npcData[i].negy) + gSaveBlock1Ptr->mapObjectTemplates[i].y = -(u8)questLog->npcData[i].y; + else + gSaveBlock1Ptr->mapObjectTemplates[i].y = questLog->npcData[i].y; + gSaveBlock1Ptr->mapObjectTemplates[i].elevation = questLog->npcData[i].elevation; + gSaveBlock1Ptr->mapObjectTemplates[i].movementType = questLog->npcData[i].movementType; + } + + sub_815A1F8(questLog, gSaveBlock1Ptr->mapObjectTemplates); +} + +void sub_8111274(u8 a0, u8 a1) +{ + struct WarpData sp0; + + if (!a1) + { + gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001; + gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002; + gSaveBlock1Ptr->location.warpId = gSaveBlock1Ptr->questLog[a0].unk_003; + gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->questLog[a0].unk_004; + gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->questLog[a0].unk_006; + } + else + { + sp0.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001; + sp0.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002; + sp0.warpId = gSaveBlock1Ptr->questLog[a0].unk_003; + sp0.x = gSaveBlock1Ptr->questLog[a0].unk_004; + sp0.y = gSaveBlock1Ptr->questLog[a0].unk_006; + sub_8055D5C(&sp0); + } +} + +void sub_8111368(void) +{ + gUnknown_203ADFA = 2; + sub_806E6FC(); + sub_809A2DC(); + sub_809A2A4(); + if (sub_8110AC8() == 1) + { + sub_8111274(gUnknown_203ADF8, 0); + gUnknown_3005024 = sub_8111038; + SetMainCallback2(sub_80572A8); + } + else + { + sub_8111274(gUnknown_203ADF8, 1); + warp_in(); + gUnknown_3005024 = sub_8111000; + SetMainCallback2(sub_805726C); + } +} + +void sub_81113E4(void) +{ + struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[gUnknown_203ADF8]; + + CpuCopy16(questLog->flags, gSaveBlock1Ptr->flags, FLAGS_COUNT * sizeof(u8)); + CpuCopy16(questLog->vars, gSaveBlock1Ptr->vars, VARS_COUNT * sizeof(u16)); + sub_8111688(); +} + +struct PokemonAndSomethingElse +{ + struct Pokemon mon; + u16 unk_64; + u16 unk_66; +}; + +void sub_8111438(void) +{ + struct PokemonAndSomethingElse *r9 = AllocZeroed(sizeof(struct PokemonAndSomethingElse)); + u16 r0, r3, r5, r6; + + CreateMon(&r9->mon, SPECIES_RATTATA, 1, 0x20, FALSE, 0, 0, 0); + r0 = VarGet(VAR_0x4027); + r9->unk_64 = r0 >> 12; + r9->unk_66 = r0 % 0x1000; + + r5 = sub_8111618(); + if (r5 > r9->unk_64) + { + for (r3 = 0; r3 < r5 - r9->unk_64; r3++) + { + ZeroMonData(&gPlayerParty[5 - r3]); + } + } + else if (r5 < r9->unk_64) + { + for (r3 = 0; r3 < 5; r3++) + { + sub_808BCB4(0, r3); + } + for (r3 = r5; r3 < r9->unk_64; r3++) + { + CopyMon(&gPlayerParty[r3], &r9->mon, sizeof(struct Pokemon)); + } + } + + r5 = sub_811164C(); + if (r5 > r9->unk_66) + { + for (r3 = 0; r3 < 14; r3++) + { + for (r6 = 0; r6 < 30; r6++) + { + if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_BIT2)) + { + sub_808BCB4(r3, r6); + r5--; + if (r5 == r9->unk_66) + break; + } + } + if (r5 == r9->unk_66) + break; + } + } + else if (r5 < r9->unk_66) + { + for (r3 = 0; r3 < TOTAL_BOXES_COUNT; r3++) + { + for (r6 = 0; r6 < IN_BOX_COUNT; r6++) + { + struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6); + if (!GetBoxMonData(boxMon, MON_DATA_SANITY_BIT2)) + { + CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon)); + r5++; + if (r5 == r9->unk_66) + break; + } + } + if (r5 == r9->unk_66) + break; + } + } + + Free(r9); +} + +void sub_81115E8(void) +{ + u16 r4 = sub_8111618(); + u16 r1 = sub_811164C(); + VarSet(VAR_0x4027, (r4 << 12) + r1); +} + +u16 sub_8111618(void) +{ + u16 count = 0; + u16 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2)) + count++; + } + + return count; +} + +u16 sub_811164C(void) +{ + u16 count = 0; + u16 i, j; + + for (i = 0; i < TOTAL_BOXES_COUNT; i++) + { + for (j = 0; j < IN_BOX_COUNT; j++) + { + if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_BIT2)) + count++; + } + } + + return count; +} + +void sub_8111688(void) +{ + u16 i, j; + u16 sp0[4]; + + for (i = 0; i < 4; i++) + { + sp0[i] = VarGet(VAR_0x40AA + i); + + for (j = 0; j < 16; j++) + { + if (sp0[i] & 1) + gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30; + else + gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0; + sp0[i] >>= 1; + } + } +} + +void sub_8111708(void) +{ + struct MapHeader sp0; + + gSaveBlock1Ptr->mapDataId = VarGet(VAR_0x40AE); + if (gSaveBlock1Ptr->mapDataId == 0) + { + sp0 = *get_mapheader_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); + gSaveBlock1Ptr->mapDataId = sp0.mapDataId; + } +} + +void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) +{ + u16 i; + u16 *r4; + u16 r6 = 0; + u16 r9 = 0; + + memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98)); + for (i = 0; i < 32; i++) + { + gUnknown_203AE0C[i] = NULL; + } + + r4 = gSaveBlock1Ptr->questLog[a0].unk_568; + for (i = 0; i < 32; i++) + { + switch (r4[0] & 0xFFF) + { + case 0: + r4 = sub_8113D08(r4, &a1[r6]); + r6++; + break; + case 1: + case 2: + r4 = sub_8113D94(r4, &a1[r6]); + r6++; + break; + case 39: + r4 = sub_8113C20(r4, &a1[r6]); + r6++; + break; + case 41: + r4 = sub_8113C8C(r4, &a1[r6]); + r6++; + break; + default: + r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]); + if (r9 == 0) + sub_8113ABC(gUnknown_203AE0C[0]); + r9++; + break; + } + if (r4 == NULL) + break; + } +} + +void sub_81118F4(s8 a0) +{ + fade_screen(1, a0); + gUnknown_203AE8C = sub_8111914; +} + +void sub_8111914(void) +{ + if (!gPaletteFade.active) + { + ScriptContext2_Enable(); + if (++gUnknown_203ADF8 < 4 && gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000) + { + gUnknown_203ADF9--; + sub_8111368(); + } + else + { + gUnknown_3005E88 = 0; + sub_8111984(); + } + } +} + +void sub_8111984(void) +{ + sub_806E6FC(); + Save_ResetSaveCounters(); + Save_LoadGameData(0); + SetMainCallback2(sub_8057430); + gUnknown_3005024 = sub_8111F60; + FreeAllWindowBuffers(); + gUnknown_203ADFA = 3; + gUnknown_203AE8C = NULL; +} + +void sub_81119C8(void) +{ + sub_8111914(); +} + +bool8 sub_81119D4(void (*a0)(void)) +{ + u8 taskId; + + switch (gUnknown_203ADFA) + { + case 1: + sub_8112364(); + break; + case 2: + gUnknown_3005E88 = 3; + taskId = CreateTask(sub_8111A34, 80); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + SetWordTaskArg(taskId, 14, (u32)a0); + return TRUE; + } + return FALSE; +} + +void sub_8111A34(u8 taskId) +{ + void (*routine)(void); + s16 * data = gTasks[taskId].data; + + switch (data[1]) + { + case 0: + if (++data[0] == 0x7F) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_203AE94.unk_0_6 = 2; + data[1]++; + } + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_3005E88 = 0; + routine = (void (*)(void)) GetWordTaskArg(taskId, 14); + if (routine != NULL) + routine(); + DestroyTask(taskId); + gUnknown_203AE8C = sub_8111914; + } + break; + } +} + +void sub_8111AD8(void) +{ + if (gUnknown_203AE94.unk_0_0 == 1) + { + if (--gUnknown_203AE94.unk_2 != 0) + return; + gUnknown_203AE94.unk_0_0 = 0; + gUnknown_203AE94.unk_0_4 = 1; + sub_8112888(2); + } + + if (gUnknown_203AE94.unk_0_4 == 1) + { + if (++gUnknown_203AE94.unk_3 > 15) + { + sub_8111E20(); + gUnknown_203AE94.unk_0_4 = 0; + gUnknown_203AE94.unk_3 = 0; + } + } + if (gUnknown_203AE94.unk_1 < 32) + { + if (sub_8113B44(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1) + sub_8111B80(); + else if (sub_8113AE8(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1) + sub_8111B80(); + } +} + +void sub_8111B80(void) +{ + if (gUnknown_203AE94.unk_0_0 == 0) + { + gUnknown_203AE94.unk_0_0 = 1; + gUnknown_203AE94.unk_0_4 = 0; + gUnknown_203AE94.unk_3 = 0; + gUnknown_203AE94.unk_2 = sub_8111BD4(); + if (gUnknown_203B044.unk_2 == 0) + gUnknown_203AE94.unk_1++; + if (gUnknown_203AE94.unk_1 > 32) + return; + sub_8111D10(); + } + sub_8112888(1); +} + +u8 sub_8111BD4(void) +{ + u16 i; + u16 count = 0; + + for (i = 0; i < 0x400 && gStringVar4[i] != EOS; i++) + { + if (gStringVar4[i] != CHAR_NEWLINE) + count++; + } + + if (count < 20) + return 0x5F; + if (count < 36) + return 0x7F; + if (count < 46) + return 0xBF; + return 0xFF; +} + +bool8 sub_8111C2C(void) +{ + if (gUnknown_203ADFA != 2) + return FALSE; + if (gUnknown_3005E88 == 0 || gUnknown_203AE94.unk_0_0 == 1 || gUnknown_203AE94.unk_0_0 == 2) + return TRUE; + return FALSE; +} + +void sub_8111C68(void) +{ + if (gUnknown_203AE94.unk_0_6 == 0) + { + if (gMain.newKeys & A_BUTTON) + { + gUnknown_203AE94.unk_0_6 = 2; + gUnknown_3005E88 = 0; + sub_81118F4(-3); + } + else if (gMain.newKeys & B_BUTTON) + { + gUnknown_203AE94.unk_0_6 = 1; + gUnknown_3005E88 = 0; + sub_8111E64(-3); + } + } +} + +bool8 sub_8111CD0(void) +{ + if (gUnknown_203AE94.unk_0_6 != 0) + return TRUE; + return FALSE; +} + +void sub_8111CF0(void) +{ + if (gUnknown_203ADFA == 2) + sub_8111070(gUnknown_203ADF9); +} + +void sub_8111D10(void) +{ + u16 i; + u8 count = 0; + + for (i = 0; i < 0x100 && gStringVar4[i] != EOS; i++) + { + if (gStringVar4[i] == CHAR_NEWLINE) + count++; + } + + PutWindowTilemap(gUnknown_203ADFE[2]); + sub_8111D90(gUnknown_203ADFE[2]); + AddTextPrinterParametrized2(gUnknown_203ADFE[2], 2, 2, gUnknown_8456698[count], 1, 0, &gUnknown_8456634, 0, gStringVar4); + schedule_bg_copy_tilemap_to_vram(0); +} + +void sub_8111D90(u8 a0) +{ + const u16 * src = gUnknown_8456638; + u16 * buffer = Alloc(0x1680); + u8 i, j, y; + + if (buffer) + { + for (i = 0; i < 6; i++) + { + switch (i) + { + default: + y = 1; + break; + case 0: + y = 0; + break; + case 5: + y = 2; + break; + } + + // r6 = y * 32 + // r5 = 2 * (i % 16) + // r4 = j + for (j = 0; j < 30; j++) + { + CpuCopy32(src + 16 * y, buffer + 16 * (2 * (15 * i) + j), 32); + } + } + + CopyToWindowPixelBuffer(a0, (const u8 *)buffer, 0x1680, 0); + Free(buffer); + } +} + +void sub_8111E20(void) +{ + ClearWindowTilemap(gUnknown_203ADFE[2]); + FillWindowPixelRect(gUnknown_203ADFE[2], 15, 0, 0, 0xf0, 0x30); + CopyWindowToVram(gUnknown_203ADFE[2], 2); + PutWindowTilemap(gUnknown_203ADFE[1]); + CopyWindowToVram(gUnknown_203ADFE[1], 1); +} + +void sub_8111E64(s8 a0) +{ + fade_screen(1, a0); + gUnknown_203AE8C = sub_8111E84; +} + +void sub_8111E84(void) +{ + if (!gPaletteFade.active) + { + ScriptContext2_Enable(); + for (gUnknown_203ADF8 = gUnknown_203ADF8; gUnknown_203ADF8 < 4; gUnknown_203ADF8++) + { + if (gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 == 0) + break; + sub_811175C(gUnknown_203ADF8, gUnknown_203AE98); + } + gUnknown_3005E88 = 0; + sub_8111984(); + } +} + +void sub_8111F14(void) +{ + if (gUnknown_203ADFA == 3) + gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16)); +} + +void sub_8111F38(u16 a0, u16 a1) +{ + CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1); +} + +bool8 sub_8111F60(void) +{ + LoadPalette(stdpal_get(4), 0xF0, 0x20); + sub_8111070(0); + sub_807DF7C(); + CreateTask(sub_8111F8C, 0xFF); + return TRUE; +} + +void sub_8111F8C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (ScriptContext2_IsEnabled() != TRUE) + { + player_bitmagic(); + sub_805C270(); + sub_805C780(); + ScriptContext2_Enable(); + task->func = sub_8111FCC; + } +} + +void sub_8111FCC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (!gPaletteFade.active) + { + if (gUnknown_203AE94.unk_0_6 != 1) + { + sub_80C4DF8(gStringVar1, gMapHeader.regionMapSectionId); + StringExpandPlaceholders(gStringVar4, gUnknown_841B073); + sub_8111D10(); + } + task->data[0] = 0; + task->data[1] = 0; + task->func = sub_8112044; + player_bitmagic(); + ScriptContext2_Enable(); + } +} + +void sub_8112044(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gMain.newKeys & (A_BUTTON | B_BUTTON) || task->data[0] >= 0x7f || gUnknown_203AE94.unk_0_6 == 1) + { + sub_8111E20(); + task->data[0] = 0; + task->func = sub_81120AC; + gUnknown_203ADFA = 0; + } + else + task->data[0]++; +} + +void sub_81120AC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 i; + + switch (data[0]) + { + case 0: + gUnknown_2031DD8 = 0; + sub_8055DC4(); + sub_811229C(); + FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8); + data[0]++; + break; + case 1: + if (sub_81121D8(taskId)) + { + for (i = 0; i < 3; i++) + { + ClearWindowTilemap(gUnknown_203ADFE[i]); + CopyWindowToVram(gUnknown_203ADFE[i], 1); + RemoveWindow(gUnknown_203ADFE[i]); + } + data[1] = 0; + data[0]++; + } + break; + case 2: + if (data[1] < 32) + data[1]++; + else + data[0]++; + break; + default: + if (gUnknown_203AE94.unk_0_6 == 1) + sub_8098110(1); + CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); + Free(gUnknown_203AE90); + gUnknown_203AE94 = (struct UnkStruct_203AE94){}; + sub_80696C0(); + ScriptContext2_Disable(); + gTextFlags.flag_2 = FALSE; + gUnknown_2036E28 = 0; + sub_8082740(0); + gUnknown_3005ECC = 1; + DestroyTask(taskId); + break; + } +} + +bool8 sub_81121D8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[1] > 15) + return TRUE; + + sub_80716F8(gPlttBufferUnfaded + 0x01, gPlttBufferFaded + 0x01, 0xDF, 0x0F - data[1]); + sub_80716F8(gPlttBufferUnfaded + 0x100, gPlttBufferFaded + 0x100, 0x100, 0x0F - data[1]); + FillWindowPixelRect(gUnknown_203ADFE[0], 0x00, 0, gUnknown_845661C[0].height * 8 - 1 - data[1], gUnknown_845661C[0].width * 8, 1); + FillWindowPixelRect(gUnknown_203ADFE[1], 0x00, 0, data[1], gUnknown_845661C[1].width * 8, 1); + CopyWindowToVram(gUnknown_203ADFE[0], 2); + CopyWindowToVram(gUnknown_203ADFE[1], 2); + data[1]++; + return FALSE; +} + +void sub_811229C(void) +{ + u16 * buffer = Alloc(0x400); + CpuCopy16(gUnknown_203AE90, buffer, 0x400); + sub_807B0C4(gUnknown_203AE90, gUnknown_203AE90, 0xd0); + sub_807B0C4(gUnknown_203AE90 + 0x110, gUnknown_203AE90 + 0x110, 0x10); + sub_807B0C4(gUnknown_203AE90 + 0x160, gUnknown_203AE90 + 0x160, 0x40); + sub_807B0C4(gUnknown_203AE90 + 0x1b0, gUnknown_203AE90 + 0x1b0, 0x50); + CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); + CpuCopy16(buffer, gUnknown_203AE90, 0x400); + Free(buffer); +} + +void sub_811231C(void) +{ + if (gUnknown_203ADFA == 1) + { + sub_8110E68(gUnknown_203AE98); + sub_8110E3C(); + gUnknown_203ADFA = 0; + gUnknown_203AE8C = NULL; + gUnknown_203AE04 = NULL; + gUnknown_203AE08 = NULL; + gUnknown_3005E88 = 0; + } +} + +void sub_8112364(void) +{ + if (gUnknown_3005E88 && gUnknown_203ADFA == 1) + { + sub_8110E68(gUnknown_203AE98); + sub_8113A1C(1); + sub_8110E3C(); + gUnknown_3005E88 = 0; + gUnknown_203ADFA = 0; + gUnknown_203AE8C = NULL; + } + gUnknown_203AE04 = NULL; + gUnknown_203AE08 = NULL; +} + +void sub_81123BC(void) +{ + struct QuestLog * buffer = AllocZeroed(4 * sizeof(struct QuestLog)); + u8 i; + u8 r4 = gUnknown_203ADF8; + u8 count = 0; + for (i = 0; i < 4; i++) + { + if (r4 > 3) + r4 = 0; + if (gSaveBlock1Ptr->questLog[r4].unk_000) + { + buffer[count] = gSaveBlock1Ptr->questLog[r4]; + count++; + } + r4++; + } + gUnknown_203ADF8 = count % 4; + CpuCopy16(buffer, gSaveBlock1Ptr->questLog, 4 * sizeof(struct QuestLog)); + Free(buffer); +} + +void sub_8112450(void) +{ + if (sub_80BF708() != 1) + { + sub_8112364(); + sub_81123BC(); + } +} + +void sub_811246C(struct Sprite *sprite) +{ + struct MapObject *mapObject = &gMapObjects[sprite->data[0]]; + if (mapObject->localId == 0xFF) + { + if (gUnknown_203AF9A[0][0] != 0xFF) + { + sub_8063CA4(mapObject, gUnknown_203AF9A[0][0]); + gUnknown_203AF9A[0][0] = 0xFF; + } + if (gUnknown_203AF9A[0][1] != 0xFF) + { + sub_8150454(); + gUnknown_203AF9A[0][1] = 0xFF; + } + sub_8063E28(mapObject, sprite); + } + else + { + if (gUnknown_203AF9A[mapObject->localId][0] != 0xFF) + { + sub_8063CA4(mapObject, gUnknown_203AF9A[mapObject->localId][0]); + gUnknown_203AF9A[mapObject->localId][0] = 0xFF; + } + sub_8063E28(mapObject, sprite); + } +} + +void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3) +{ + if (!sub_8112CEC()) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = a0; + gUnknown_3005E94[gUnknown_203AF98].unk_1 = a1; + gUnknown_3005E94[gUnknown_203AF98].unk_2 = a2; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a3; + gUnknown_203AF98++; + gUnknown_203B01A = 0; + } +} + +void sub_8112588(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4) +{ + if (!sub_8112D1C()) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = a0; + gUnknown_3005E94[gUnknown_203AF98].unk_1 = a1; + gUnknown_3005E94[gUnknown_203AF98].unk_2 = a2; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a3; + gUnknown_203AF98++; + gUnknown_203B01A = a4; + } +} + +void sub_8112628(u8 a0) +{ + if (!sub_8112CEC()) + { + if (a0 != gUnknown_3005E94[gUnknown_203B01C].unk_3 || a0 > 3) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a0; + gUnknown_203B01C = gUnknown_203AF98; + gUnknown_203AF98++; + gUnknown_203B01A = 0; + } + } +} + +void sub_81126AC(u8 a0, u8 a1) +{ + if (!sub_8112D1C()) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a0; + gUnknown_203B01C = gUnknown_203AF98; + gUnknown_203AF98++; + gUnknown_203B01A = a1; + } +} + +void sub_8112720(u8 a0) +{ + if (!sub_8112D1C()) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 1; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a0; + gUnknown_203AF98++; + gUnknown_203B01A = 0; + } +} + +void sub_811278C(u8 a0, u8 a1) +{ + if (!sub_8112D1C()) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 1; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = a0; + gUnknown_203AF98++; + gUnknown_203B01A = a1; + } +} + +void sub_81127F8(struct UnkStruct_3005E90 * a0) +{ + if (gUnknown_203AF98 < gUnknown_3005E8C) + { + u32 r2 = *(u32 *)a0 & 0x00FF00F3; + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 2; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = r2; + gUnknown_3005E94[gUnknown_203AF98].unk_1 = r2 >> 8; + gUnknown_3005E94[gUnknown_203AF98].unk_2 = r2 >> 16; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = r2 >> 24; + gUnknown_203AF98++; + if (ScriptContext2_IsEnabled()) + gUnknown_203B01A = TRUE; + else + gUnknown_203B01A = FALSE; + } +} + +void sub_8112888(u8 a0) +{ + switch (a0) + { + case 1: + if (gUnknown_3005E88 == 1) + gUnknown_3005E88 = 3; + break; + case 2: + if (gUnknown_3005E88 == 3) + gUnknown_3005E88 = 1; + break; + } +} + +void sub_81128BC(u8 a0) +{ + u8 r1 = sub_8112CAC(); + + switch (a0) + { + case 1: + if (r1 == 1) + gUnknown_3005E88 = 3; + else if (r1 == 2) + { + gUnknown_3005E94[gUnknown_203AF98].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 3; + gUnknown_203AF98++; + gUnknown_203B01A = 0; + gUnknown_3005E88 = 4; + } + break; + case 2: + if (r1 == 1) + gUnknown_3005E88 = 1; + else if (r1 == 2) + gUnknown_3005E88 = 2; + break; + } +} + +void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) +{ + s32 i; + + switch (a0) + { + default: + gUnknown_3005E88 = 0; + break; + case 1: + gUnknown_3005E94 = a1; + gUnknown_3005E8C = a2 / 8; + for (i = 0; i < 0x40; i++) + { + gUnknown_203AF9A[i][0] |= 0xFF; + gUnknown_203AF9A[i][1] |= 0xFF; + } + gUnknown_203AF98 = 0; + gUnknown_203B01C = 0; + gUnknown_3005E90 = (struct UnkStruct_3005E90){}; + gUnknown_203B01A = gUnknown_3005E94[gUnknown_203AF98].unk_4; + gUnknown_203AF9A[0][0] = gUnknown_3005E94[gUnknown_203AF98].unk_3; + gUnknown_203AF9A[0][1] = 0xFF; + gUnknown_3005E88 = 1; + break; + case 2: + gUnknown_3005E94 = a1; + gUnknown_3005E8C = a2 / 8; + for (i = 0; i < gUnknown_3005E8C; i++) + { + gUnknown_3005E94[i] = (struct UnkStruct_203AE98){ 0, 0, 0, 0, 0xFFFF, 0xFF }; + } + gUnknown_203AF98 = 0; + gUnknown_203B01A = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_4 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + switch (player_get_direction_lower_nybble()) + { + case 0: + case 1: + gUnknown_3005E94[gUnknown_203AF98].unk_3 = 0; + break; + case 4: + gUnknown_3005E94[gUnknown_203AF98].unk_3 = 3; + break; + case 2: + gUnknown_3005E94[gUnknown_203AF98].unk_3 = 1; + break; + case 3: + gUnknown_3005E94[gUnknown_203AF98].unk_3 = 2; + break; + } + gUnknown_203B01C = 0; + gUnknown_203AF98++; + gUnknown_3005E94[gUnknown_203AF98].unk_4 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_6 = 2; + gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_1 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_2 = 0; + gUnknown_3005E94[gUnknown_203AF98].unk_3 = 0; + gUnknown_203AF98++; + gUnknown_3005E88 = 2; + break; + } +} + +#ifdef NONMATCHING +void sub_8112B3C(void) +{ + switch (gUnknown_3005E88) + { + case 0: + break; + case 1: + if (sub_8112CEC()) + { + if (gUnknown_203B01A != 0) + gUnknown_203B01A--; + else + { + while (1) + { + switch (gUnknown_3005E94[gUnknown_203AF98].unk_6) + { + case 0: + gUnknown_203AF9A[gUnknown_3005E94[gUnknown_203AF98].unk_0][0] = gUnknown_3005E94[gUnknown_203AF98].unk_3; + break; + case 1: + gUnknown_203AF9A[gUnknown_3005E94[gUnknown_203AF98].unk_0][1] = gUnknown_3005E94[gUnknown_203AF98].unk_3; + break; + case 2: + *(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[gUnknown_203AF98].unk_3 << 24) | (gUnknown_3005E94[gUnknown_203AF98].unk_2 << 16) | (gUnknown_3005E94[gUnknown_203AF98].unk_1 << 8) | (gUnknown_3005E94[gUnknown_203AF98].unk_0 << 0)); + break; + case 3: + gUnknown_3005E88 = 3; + break; + case 0xFE: + break; + case 0xFF: + gUnknown_3005E88 = 0; + break; + } + if (gUnknown_3005E88 == 0) + break; + if (++gUnknown_203AF98 >= gUnknown_3005E8C) + { + gUnknown_3005E88 = 0; + break; + } + gUnknown_203B01A = gUnknown_3005E94[gUnknown_203AF98].unk_4; + if (gUnknown_3005E88 == 3) + break; + if (gUnknown_203B01A == 0) + continue; + if (gUnknown_203B01A == 0xFFFF) + break; + } + } + } + else if (gUnknown_203AF98 >= gUnknown_3005E8C) + gUnknown_3005E88 = 0; + break; + case 2: + if (ScriptContext2_IsEnabled() != 1) + gUnknown_203B01A++; + if (gUnknown_203AF98 >= gUnknown_3005E8C) + gUnknown_3005E88 = 0; + break; + case 3: + break; + case 4: + break; + } +} +#else +NAKED +void sub_8112B3C(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tldr r0, _08112B54 @ =gUnknown_3005E88\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x4\n" + "\tbls _08112B48\n" + "\tb _08112C84\n" + "_08112B48:\n" + "\tlsls r0, 2\n" + "\tldr r1, _08112B58 @ =_08112B5C\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08112B54: .4byte gUnknown_3005E88\n" + "_08112B58: .4byte _08112B5C\n" + "\t.align 2, 0\n" + "_08112B5C:\n" + "\t.4byte _08112C84\n" + "\t.4byte _08112B70\n" + "\t.4byte _08112C5E\n" + "\t.4byte _08112C84\n" + "\t.4byte _08112C84\n" + "_08112B70:\n" + "\tbl sub_8112CEC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08112B7C\n" + "\tb _08112C72\n" + "_08112B7C:\n" + "\tldr r0, _08112B8C @ =gUnknown_203B01A\n" + "\tldrh r1, [r0]\n" + "\tadds r7, r0, 0\n" + "\tcmp r1, 0\n" + "\tbeq _08112B90\n" + "\tsubs r0, r1, 0x1\n" + "\tstrh r0, [r7]\n" + "\tb _08112C84\n" + "\t.align 2, 0\n" + "_08112B8C: .4byte gUnknown_203B01A\n" + "_08112B90:\n" + "\tldr r5, _08112B98 @ =gUnknown_3005E88\n" + "\tldr r4, _08112B9C @ =gUnknown_203AF98\n" + "\tldr r6, _08112BA0 @ =gUnknown_3005E94\n" + "\tb _08112BD4\n" + "\t.align 2, 0\n" + "_08112B98: .4byte gUnknown_3005E88\n" + "_08112B9C: .4byte gUnknown_203AF98\n" + "_08112BA0: .4byte gUnknown_3005E94\n" + "_08112BA4:\n" + "\tldrh r0, [r4]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4]\n" + "\tldr r1, _08112BF0 @ =gUnknown_3005E8C\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldrh r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbcs _08112C58\n" + "\tldrh r0, [r4]\n" + "\tldr r1, [r6]\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x4]\n" + "\tstrh r0, [r7]\n" + "\tcmp r2, 0x3\n" + "\tbeq _08112C84\n" + "\tlsls r0, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, 0\n" + "\tbeq _08112BD4\n" + "\tldr r0, _08112BF4 @ =0x0000ffff\n" + "\tcmp r1, r0\n" + "\tbne _08112C84\n" + "_08112BD4:\n" + "\tldrh r0, [r4]\n" + "\tldr r1, [r6]\n" + "\tlsls r0, 3\n" + "\tadds r3, r0, r1\n" + "\tldrb r0, [r3, 0x6]\n" + "\tcmp r0, 0x2\n" + "\tbeq _08112C2C\n" + "\tcmp r0, 0x2\n" + "\tbgt _08112BF8\n" + "\tcmp r0, 0\n" + "\tbeq _08112C0C\n" + "\tcmp r0, 0x1\n" + "\tbeq _08112C18\n" + "\tb _08112C50\n" + "\t.align 2, 0\n" + "_08112BF0: .4byte gUnknown_3005E8C\n" + "_08112BF4: .4byte 0x0000ffff\n" + "_08112BF8:\n" + "\tcmp r0, 0xFE\n" + "\tbeq _08112C50\n" + "\tcmp r0, 0xFE\n" + "\tbgt _08112C06\n" + "\tcmp r0, 0x3\n" + "\tbeq _08112C4E\n" + "\tb _08112C50\n" + "_08112C06:\n" + "\tcmp r0, 0xFF\n" + "\tbeq _08112C4C\n" + "\tb _08112C50\n" + "_08112C0C:\n" + "\tldr r0, _08112C14 @ =gUnknown_203AF9A\n" + "\tldrb r1, [r3]\n" + "\tlsls r1, 1\n" + "\tb _08112C20\n" + "\t.align 2, 0\n" + "_08112C14: .4byte gUnknown_203AF9A\n" + "_08112C18:\n" + "\tldr r0, _08112C28 @ =gUnknown_203AF9A\n" + "\tldrb r1, [r3]\n" + "\tlsls r1, 1\n" + "\tadds r0, 0x1\n" + "_08112C20:\n" + "\tadds r1, r0\n" + "\tldrb r0, [r3, 0x3]\n" + "\tstrb r0, [r1]\n" + "\tb _08112C50\n" + "\t.align 2, 0\n" + "_08112C28: .4byte gUnknown_203AF9A\n" + "_08112C2C:\n" + "\tldr r2, _08112C48 @ =gUnknown_3005E90\n" + "\tldrb r1, [r3, 0x3]\n" + "\tlsls r1, 24\n" + "\tldrb r0, [r3, 0x2]\n" + "\tlsls r0, 16\n" + "\torrs r1, r0\n" + "\tldrb r0, [r3, 0x1]\n" + "\tlsls r0, 8\n" + "\torrs r1, r0\n" + "\tldrb r0, [r3]\n" + "\torrs r1, r0\n" + "\tstr r1, [r2]\n" + "\tb _08112C50\n" + "\t.align 2, 0\n" + "_08112C48: .4byte gUnknown_3005E90\n" + "_08112C4C:\n" + "\tmovs r0, 0\n" + "_08112C4E:\n" + "\tstrb r0, [r5]\n" + "_08112C50:\n" + "\tldrb r2, [r5]\n" + "\tcmp r2, 0\n" + "\tbne _08112BA4\n" + "\tb _08112C84\n" + "_08112C58:\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r5]\n" + "\tb _08112C84\n" + "_08112C5E:\n" + "\tbl ScriptContext2_IsEnabled\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq _08112C84\n" + "\tldr r1, _08112C8C @ =gUnknown_203B01A\n" + "\tldrh r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r1]\n" + "_08112C72:\n" + "\tldr r0, _08112C90 @ =gUnknown_203AF98\n" + "\tldr r1, _08112C94 @ =gUnknown_3005E8C\n" + "\tldrh r0, [r0]\n" + "\tldrh r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbcc _08112C84\n" + "\tldr r1, _08112C98 @ =gUnknown_3005E88\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r1]\n" + "_08112C84:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08112C8C: .4byte gUnknown_203B01A\n" + "_08112C90: .4byte gUnknown_203AF98\n" + "_08112C94: .4byte gUnknown_3005E8C\n" + "_08112C98: .4byte gUnknown_3005E88"); +} +#endif + +void sub_8112C9C(void) +{ + gUnknown_203B01A++; +} + +u8 sub_8112CAC(void) +{ + switch (gUnknown_3005E88) + { + case 0: + default: + return 0; + case 1: + case 3: + return 1; + case 2: + case 4: + return 2; + } +} + +bool8 sub_8112CEC(void) +{ + if (gUnknown_203AF98 >= gUnknown_3005E8C || ScriptContext2_IsEnabled() == TRUE) + return TRUE; + return FALSE; +} + +bool8 sub_8112D1C(void) +{ + if (gUnknown_203AF98 >= gUnknown_3005E8C) + return TRUE; + return FALSE; +} + +const struct UnkStruct_300201C gUnknown_84566A4 = { + 0, + FALSE, + 0x7FFF +}; + +u16 * sub_8112D40(u8 a0, u16 a1) +{ + u16 * response; + if (gUnknown_203AF98 == 0) + return NULL; + if (gUnknown_203AF98 >= gUnknown_3005E8C) + return NULL; + if (gUnknown_203B01E >= gUnknown_3002020) + return NULL; + if (gUnknown_300201C[gUnknown_203B01E].unk_0_0 == a1 && gUnknown_300201C[gUnknown_203B01E].unk_0_f == a0) + { + response = &gUnknown_300201C[gUnknown_203B01E].unk_2; + gUnknown_203B01E++; + } + else + response = NULL; + return response; +} + +void sub_8112DB0(u8 a0, u16 a1, u16 a2) +{ + if (gUnknown_203AF98 == 0) + return; + if (gUnknown_203AF98 >= gUnknown_3005E8C) + return; + if (gUnknown_203B01E >= gUnknown_3002020) + return; + gUnknown_300201C[gUnknown_203B01E].unk_0_0 = a1; + gUnknown_300201C[gUnknown_203B01E].unk_0_f = a0; + gUnknown_300201C[gUnknown_203B01E].unk_2 = a2; + gUnknown_203B01E++; +} + +void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) +{ + s32 i; + + if (a0 == 0 || a0 > 2) + gUnknown_3005E88 = 0; + else + { + gUnknown_300201C = a1; + gUnknown_3002020 = a2 >> 2; + gUnknown_203B01E = 0; + if (a0 == 2) + { + for (i = 0; i < gUnknown_3005E8C; i++) + { + gUnknown_300201C[i] = gUnknown_84566A4; + } + } + } +} + +const u16 gUnknown_84566A8[][16] = INCBIN_U16("data/graphics/unknown_84566a8.bin"); + +const struct WindowTemplate gUnknown_8456928 = { + 0x00, 0, 15, 30, 5, 15, 0x008F +}; + +void sub_8112EA8(void) +{ + gUnknown_203B020 = 0xFF; +} + +u8 sub_8112EB4(void) +{ + if (gUnknown_203B020 == 0xFF) + { + gUnknown_203B020 = AddWindow(&gUnknown_8456928); + PutWindowTilemap(gUnknown_203B020); + } + return gUnknown_203B020; +} + +void sub_8112EDC(u8 a0) +{ + if (gUnknown_203B020 != 0xFF) + { + FillWindowPixelBuffer(gUnknown_203B020, 0x00); + ClearWindowTilemap(gUnknown_203B020); + + if (a0) + CopyWindowToVram(gUnknown_203B020, a0); + + RemoveWindow(gUnknown_203B020); + gUnknown_203B020 = 0xFF; + } +} + +#ifdef NONMATCHING +void sub_8112F18(u8 a0) +{ + u8 width = GetWindowAttribute(a0, WINDOW_WIDTH); + u8 height = GetWindowAttribute(a0, WINDOW_HEIGHT); + u8 * buffer = Alloc(32 * width * height); + u8 i, j; + u8 k; + + if (buffer) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + if (i == 0) + k = 0; + else if (i == height - 1) + k = 14; + else + k = 5; + CpuCopy32( + gUnknown_84566A8[k], // operand swap on "add" instruction + buffer + 32 * (i * width + j), + 32 + ); + } + } + CopyToWindowPixelBuffer(a0, buffer, width * height * 32, 0); + Free(buffer); + } +} +#else +NAKED +void sub_8112F18(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tmovs r1, 0x3\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r0, r10\n" + "\tmovs r1, 0x4\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r0, r7, 5\n" + "\tmuls r0, r6\n" + "\tbl Alloc\n" + "\tmov r8, r0\n" + "\tcmp r0, 0\n" + "\tbeq _08112FB8\n" + "\tmovs r5, 0\n" + "\tadds r0, r6, 0\n" + "\tmuls r0, r7\n" + "\tstr r0, [sp]\n" + "\tcmp r5, r7\n" + "\tbcs _08112FA2\n" + "_08112F5A:\n" + "\tmovs r4, 0\n" + "\tadds r1, r5, 0x1\n" + "\tmov r9, r1\n" + "\tcmp r4, r6\n" + "\tbcs _08112F98\n" + "\tsubs r3, r7, 0x1\n" + "_08112F66:\n" + "\tmovs r0, 0\n" + "\tcmp r5, 0\n" + "\tbeq _08112F74\n" + "\tmovs r0, 0x5\n" + "\tcmp r5, r3\n" + "\tbne _08112F74\n" + "\tmovs r0, 0xE\n" + "_08112F74:\n" + "\tlsls r0, 5\n" + "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r5, 0\n" + "\tmuls r1, r6\n" + "\tadds r1, r4\n" + "\tlsls r1, 5\n" + "\tadd r1, r8\n" + "\tldr r2, _08112FCC @ =0x04000008\n" + "\tstr r3, [sp, 0x4]\n" + "\tbl CpuSet\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r4, r6\n" + "\tbcc _08112F66\n" + "_08112F98:\n" + "\tmov r1, r9\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, r7\n" + "\tbcc _08112F5A\n" + "_08112FA2:\n" + "\tldr r0, [sp]\n" + "\tlsls r2, r0, 21\n" + "\tlsrs r2, 16\n" + "\tmov r0, r10\n" + "\tmov r1, r8\n" + "\tmovs r3, 0\n" + "\tbl CopyToWindowPixelBuffer\n" + "\tmov r0, r8\n" + "\tbl Free\n" + "_08112FB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08112FC8: .4byte gUnknown_84566A8\n" + "_08112FCC: .4byte 0x04000008"); +} +#endif + +void sub_8112FD0(void) +{ + sub_8112F18(gUnknown_203B020); +} + +const struct TextColor gUnknown_8456930 = { + 0, 10, 2 +}; + +void sub_8112FE4(const u8 * a0) +{ + AddTextPrinterParametrized2(gUnknown_203B020, 0x02, 2, 5, 1, 1, &gUnknown_8456930, -1, a0); +} + +void sub_8113018(const u8 * a0, u8 a1) +{ + sub_8112FD0(); + sub_8112FE4(a0); + if (a1) + CopyWindowToVram(gUnknown_203B020, a1); +} + +void sub_8113044(void) +{ + VarSet(VAR_0x4038, 0); + VarSet(VAR_0x4039, 0); +} + +void sub_8113064(void) +{ + sub_8113078(VAR_0x4038_STRUCT); +} + +void sub_8113078(struct Var4038Struct * varPtr) +{ + if (sub_8113508(varPtr)) + { + sub_81132E0(varPtr); + VarSet(VAR_0x4039, gSaveBlock2Ptr->playTimeHours); + } +} + +void sub_81130A8(void) +{ + sub_81130BC(VAR_0x4038_STRUCT); +} + +void sub_81130BC(struct Var4038Struct * varPtr) +{ + if (!varPtr->unk_0_7) + { + sub_8113524(varPtr); + sub_8113390(varPtr); + VarSet(VAR_0x4039, gSaveBlock2Ptr->playTimeHours); + FlagClear(FLAG_0x06C); + FlagClear(FLAG_0x06D); + FlagClear(FLAG_0x06E); + FlagClear(FLAG_0x06F); + VarSet(VAR_0x4073, 1); + } +} + +ALIGNED(4) const u8 gUnknown_8456934[] = {2, 1, 2, 1}; + +u8 sub_8113114(struct Var4038Struct * a0, u8 a1) +{ + if (VarGet(VAR_0x4073) == 2) + { + if (a0->unk_0_0 + gUnknown_8456934[a1] >= 20) + { + if (sub_81132A0(a0) < 3) + { + sub_8113194(a0); + a0->unk_0_0 = 0; + } + else + a0->unk_0_0 = 20; + } + else + a0->unk_0_0 += gUnknown_8456934[a1]; + } + + return a0->unk_0_0; +} + +const u8 gUnknown_8456938[] = { + 1, 3, 5, 0, 7, 6, 4, 2 +}; + +u8 sub_8113194(struct Var4038Struct * a0) +{ + u8 i; + u8 retval = 0; + + for (i = 0; i < 8; i++) + { + if (!((a0->unk_1 >> gUnknown_8456938[i]) & 1)) + { + retval = i; + if (Random() % 2) + { + a0->unk_1 |= 1 << gUnknown_8456938[i]; + return gUnknown_8456938[i]; + } + } + } + a0->unk_1 |= 1 << gUnknown_8456938[retval]; + return gUnknown_8456938[retval]; +} + +const u8 gUnknown_8456940[] = { + 5, 6, 3, 7, 4, 1, 0, 2 +}; + +u8 sub_81131FC(struct Var4038Struct * a0) +{ + u8 i; + u8 retval = 0; + + if (sub_81132A0(a0) == 1) + return 0; + + for (i = 0; i < 8; i++) + { + if ((a0->unk_1 >> gUnknown_8456940[i]) & 1) + { + retval = i; + if (Random() % 2) + { + a0->unk_1 ^= 1 << gUnknown_8456940[i]; + return gUnknown_8456940[i]; + } + } + } + if ((a0->unk_1 >> gUnknown_8456940[retval]) & 1) + a0->unk_1 ^= 1 << gUnknown_8456940[retval]; + return gUnknown_8456940[retval]; +} + +u16 sub_8113288(void) +{ + return sub_81132A0(VAR_0x4038_STRUCT); +} + +u16 sub_81132A0(struct Var4038Struct * a0) +{ + u8 count = 0; + u8 i; + + for (i = 0; i < 8; i++) + { + if ((a0->unk_1 >> i) & 1) + count++; + } + + return count; +} + +void sub_81132CC(void) +{ + sub_81132E0(VAR_0x4038_STRUCT); +} + +void sub_81132E0(struct Var4038Struct * a0) +{ + u8 i = 0; + u16 var_4039; + + if (gSaveBlock2Ptr->playTimeHours < 999) + { + while (1) + { + if (sub_81132A0(a0) < 5) + { + VarSet(VAR_0x4039, gSaveBlock2Ptr->playTimeHours); + break; + } + if (i == 8) + break; + var_4039 = VarGet(VAR_0x4039); + if (gSaveBlock2Ptr->playTimeHours - var_4039 < 12) + break; + sub_81131FC(a0); + var_4039 = VarGet(VAR_0x4039); + VarSet(VAR_0x4039, var_4039 + 12); + i++; + } + } +} + +bool16 sub_8113364(void) +{ + return sub_811337C(VAR_0x4038_STRUCT); +} + +bool16 sub_811337C(struct Var4038Struct * a0) +{ + return (a0->unk_1 >> gUnknown_20370C0) & 1; +} + +void sub_8113390(struct Var4038Struct * a0) +{ + a0->unk_1 |= 1; + a0->unk_1 |= 2; + a0->unk_1 |= 4; +} + +void sub_81133A4(void) +{ + u8 r3 = 0; + u8 r2 = 0; + + switch (gUnknown_20370C0) + { + case 0: + r2 = 0; + r3 = 0; + break; + case 1: + case 2: + case 3: + case 7: + break; + case 4: + r2 = 1; + r3 = 0; + break; + case 5: + r2 = 0; + r3 = 1; + break; + case 6: + r2 = 2; + r3 = 1; + break; + } + sub_8113414(gSaveBlock2Ptr->unk_A98, r3, r2); +} + +void sub_8113414(u8 (* a0)[16], u8 a1, u8 a2) +{ + u8 * str; + const u8 * src = a0[a1]; + if (src[0] == EOS) + { + switch (a2) + { + case 0: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; + case 1: + StringCopy(gStringVar1, gUnknown_84178D0); + break; + case 2: + StringCopy(gStringVar1, gUnknown_84178DA); + break; + default: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; + } + } + else + { + str = gStringVar1; + StringCopyN(str, src, 7); + str[7] = EOS; + if ( str[0] == EXT_CTRL_CODE_BEGIN + && str[1] == EXT_CTRL_CODE_JPN) + { + str += 2; + while (*str != EOS) + str++; + *str++ = EXT_CTRL_CODE_BEGIN; + *str++ = EXT_CTRL_CODE_ENG; + *str++ = EOS; + } + } +} + +void sub_81134B8(void) +{ + sub_81134CC(VAR_0x4038_STRUCT); +} + +void sub_81134CC(struct Var4038Struct * a0) +{ + if (VarGet(VAR_0x4073) == 2) + { + sub_8113078(a0); + if (gUnknown_2023E8A == 1) + sub_8113194(a0); + else + sub_81131FC(a0); + } +} + +bool8 sub_8113508(struct Var4038Struct * a0) +{ + return a0->unk_0_7; +} + +void sub_8113510(void) +{ + sub_8113524(VAR_0x4038_STRUCT); +} + +void sub_8113524(struct Var4038Struct * a0) +{ + a0->unk_0_7 = TRUE; +} + +u8 sub_8113530(void) +{ + return sub_8113114(VAR_0x4038_STRUCT, gUnknown_20370C0); +} + +static u16 * (*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { + NULL, + NULL, + NULL, + sub_8113F14, + sub_8113F80, + sub_8114174, + sub_81141D0, + sub_811422C, + sub_8114288, + sub_8114310, + sub_8114380, + sub_81143F0, + sub_811445C, + sub_81144EC, + sub_8114578, + sub_8114604, + sub_8114710, + sub_8114744, + sub_8114778, + sub_8114808, + sub_811488C, + sub_8114918, + sub_8114990, + sub_8114A1C, + sub_8114AA0, + sub_8114B0C, + sub_8114B78, + sub_8114BE4, + sub_8114C68, + sub_8114CC0, + sub_8114D4C, + sub_8114DE8, + sub_8114FF0, + sub_8115078, + sub_81151C0, + sub_8115280, + sub_8115410, + sub_81154DC, + sub_81155A4, + NULL, + sub_81156D8, + NULL, + sub_81157DC +}; + +#ifdef NONMATCHING +void sub_8113550(u16 a0, const u16 * a1) +{ + u16 * r1; + + if (a0 == 35 && gUnknown_203B048 == 2) + { + sub_811381C(); + return; + } + sub_811381C(); + if (gUnknown_203ADFA == 2) + return; + + if (a0 < 3 || a0 > 26) + return; + + if (sub_81136D4() == TRUE) + return; + + if (sub_81138A0(a0, a1) == TRUE) + return; + + if (sub_80BF708() == TRUE) + return; + + // NONMATCHING: branch logic here + if (InUnionRoom() == TRUE) + return; + + if (sub_8113954(a0, a1) == TRUE) + return; + + if (sub_8113A44(a0, a1) == TRUE) + return; + + if (sub_81153E4(a0, a1) == FALSE) + return; + + if (gUnknown_3005E88 == 0) + { + if (sub_8113778(a0, a1) == TRUE) + return; + + if (a0 != 31 || gUnknown_203AE04 == NULL) + { + if (sub_81153A8(a0, a1) == FALSE) + return; + sub_8110AEC(a0); + } + } + else if (a0 == 40) + return; + + sub_8113B94(a0); + if (a0 == 31) + { + if (gUnknown_203AE04 == NULL) + { + gUnknown_203AE04 = gUnknown_203AE08; + r1 = sQuestLogStorageCBs[a0](gUnknown_203AE04, a1); + } + else + { + sQuestLogStorageCBs[a0](gUnknown_203AE04, a1); + return; + } + } + else + { + gUnknown_203AE04 = NULL; + r1 = sQuestLogStorageCBs[a0](gUnknown_203AE08, a1); + } + + if (r1 == NULL) + { + r1 = sub_8113828(a0, a1); + if (r1 == NULL) + return; + } + + gUnknown_203AE08 = r1; + if (gUnknown_203B048 == 0) + return; + sub_811231C(); +} +#else +NAKED +void sub_8113550(u16 a0, const u16 * a1) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tadds r5, r1, 0\n" + "\tlsls r0, 16\n" + "\tlsrs r4, r0, 16\n" + "\tcmp r4, 0x23\n" + "\tbne _08113570\n" + "\tldr r0, _0811356C @ =gUnknown_203B048\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x2\n" + "\tbne _08113570\n" + "\tbl sub_811381C\n" + "\tb ._return\n" + "\t.align 2, 0\n" + "_0811356C: .4byte gUnknown_203B048\n" + "_08113570:\n" + "\tbl sub_811381C\n" + "\tldr r0, _0811362C @ =gUnknown_203ADFA\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x2\n" + "\tbne _0811357E\n" + "\tb ._return\n" + "_0811357E:\n" + "\tsubs r0, r4, 0x3\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x27\n" + "\tbls _0811358A\n" + "\tb ._return\n" + "_0811358A:\n" + "\tbl sub_81136D4\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _08113598\n" + "\tb ._return\n" + "_08113598:\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_81138A0\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _081135AA\n" + "\tb ._return\n" + "_081135AA:\n" + "\tbl sub_80BF708\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _081135B8\n" + "\tb ._return\n" + "_081135B8:\n" + "\tbl InUnionRoom\n" + "\tcmp r0, 0x1\n" + "\tbne _081135C2\n" + "\tb ._return\n" + "_081135C2:\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_8113954\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq ._return\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_8113A44\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq ._return\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_81153E4\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq ._return\n" + "\tldr r0, _08113630 @ =gUnknown_3005E88\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _08113638\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_8113778\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq ._return\n" + "\tcmp r4, 0x1F\n" + "\tbne _08113614\n" + "\tldr r0, _08113634 @ =gUnknown_203AE04\n" + "\tldr r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _0811363C\n" + "_08113614:\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_81153A8\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq ._return\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8110AEC\n" + "\tb _0811363C\n" + "\t.align 2, 0\n" + "_0811362C: .4byte gUnknown_203ADFA\n" + "_08113630: .4byte gUnknown_3005E88\n" + "_08113634: .4byte gUnknown_203AE04\n" + "_08113638:\n" + "\tcmp r4, 0x28\n" + "\tbeq ._return\n" + "_0811363C:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8113B94\n" + "\tcmp r4, 0x1F\n" + "\tbne _0811367C\n" + "\tldr r2, _0811365C @ =gUnknown_203AE04\n" + "\tldr r1, [r2]\n" + "\tcmp r1, 0\n" + "\tbne _08113668\n" + "\tldr r0, _08113660 @ =gUnknown_203AE08\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r2]\n" + "\tldr r1, _08113664 @ =sQuestLogStorageCBs\n" + "\tldr r2, [r1, 0x7C]\n" + "\tb _0811368E\n" + "\t.align 2, 0\n" + "_0811365C: .4byte gUnknown_203AE04\n" + "_08113660: .4byte gUnknown_203AE08\n" + "_08113664: .4byte sQuestLogStorageCBs\n" + "_08113668:\n" + "\tldr r0, _08113678 @ =sQuestLogStorageCBs\n" + "\tldr r2, [r0, 0x7C]\n" + "\tadds r0, r1, 0\n" + "\tadds r1, r5, 0\n" + "\tbl _call_via_r2\n" + "\tb ._return\n" + "\t.align 2, 0\n" + "_08113678: .4byte sQuestLogStorageCBs\n" + "_0811367C:\n" + "\tldr r1, _081136C4 @ =gUnknown_203AE04\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1]\n" + "\tldr r0, _081136C8 @ =sQuestLogStorageCBs\n" + "\tlsls r1, r4, 2\n" + "\tadds r1, r0\n" + "\tldr r0, _081136CC @ =gUnknown_203AE08\n" + "\tldr r0, [r0]\n" + "\tldr r2, [r1]\n" + "_0811368E:\n" + "\tadds r1, r5, 0\n" + "\tbl _call_via_r2\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbne _081136AC\n" + "\tbl sub_811231C\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_8113828\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbeq ._return\n" + "_081136AC:\n" + "\tldr r0, _081136CC @ =gUnknown_203AE08\n" + "\tstr r1, [r0]\n" + "\tldr r0, _081136D0 @ =gUnknown_203B048\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq ._return\n" + "\tbl sub_811231C\n" + "._return:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_081136C4: .4byte gUnknown_203AE04\n" + "_081136C8: .4byte sQuestLogStorageCBs\n" + "_081136CC: .4byte gUnknown_203AE08\n" + "_081136D0: .4byte gUnknown_203B048"); +} +#endif // NONMATCHING + +bool8 sub_81136D4(void) +{ + if (gSaveBlock1Ptr->location.mapGroup == 2 && (gSaveBlock1Ptr->location.mapNum == 1 || gSaveBlock1Ptr->location.mapNum == 2 || gSaveBlock1Ptr->location.mapNum == 3 || gSaveBlock1Ptr->location.mapNum == 4 || gSaveBlock1Ptr->location.mapNum == 5 || gSaveBlock1Ptr->location.mapNum == 6 || gSaveBlock1Ptr->location.mapNum == 7 || gSaveBlock1Ptr->location.mapNum == 8 || gSaveBlock1Ptr->location.mapNum == 9 || gSaveBlock1Ptr->location.mapNum == 10 || gSaveBlock1Ptr->location.mapNum == 11)) + return TRUE; + + if (gSaveBlock1Ptr->location.mapGroup == 14 && gSaveBlock1Ptr->location.mapNum == 9) + return TRUE; + + if (gSaveBlock1Ptr->location.mapGroup == 31 && (gSaveBlock1Ptr->location.mapNum == 0 || gSaveBlock1Ptr->location.mapNum == 1)) + return TRUE; + + if ((gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 46) || (gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 58) || (gSaveBlock1Ptr->location.mapGroup == 2 && gSaveBlock1Ptr->location.mapNum == 11) || (gSaveBlock1Ptr->location.mapGroup == 10 && gSaveBlock1Ptr->location.mapNum == 6)) + return TRUE; + + return FALSE; +} + +bool8 sub_8113748(void) +{ + if (sub_81136D4() != TRUE) + return FALSE; + + if (gUnknown_203ADFA == 2) + return TRUE; + + if (gUnknown_203ADFA == 1) + sub_8112364(); + + return FALSE; +} + +bool8 sub_8113778(u16 a0, u16 * a1) +{ + if (a0 == 36 || a0 == 11) + return TRUE; + + if (!FlagGet(0x82C)) + { + if (a0 == 3 || a0 == 31 || sub_81137E4(a0, a1) == TRUE) + return TRUE; + } + + if (!FlagGet(0x844)) + { + if (a0 == 4 || a0 == 5 || a0 == 6 || a0 == 7 || a0 == 8 || a0 == 9 || a0 == 10 || a0 == 22 || a0 == 25 || a0 == 26) + return TRUE; + } + + return FALSE; +} + +bool8 sub_81137E4(u16 a0, u16 * a1) +{ + if (a0 == 34) + { + u8 trainerClass = gTrainers[*a1].trainerClass; + if ( trainerClass == 0x51 + || trainerClass == 0x59 + || trainerClass == 0x5A + || trainerClass == 0x53) + return FALSE; + return TRUE; + } + return FALSE; +} + +void sub_811381C(void) +{ + gUnknown_203B048 = 0; +} + +u16 * sub_8113828(u16 a0, u16 * a1) +{ + if (sub_8113778(a0, a1) == TRUE) + return NULL; + + if (sub_81153A8(a0, a1) == FALSE) + return NULL; + + sub_8110AEC(a0); + sub_8113B94(a0); + + if (a0 == 31) + gUnknown_203AE04 = gUnknown_203AE08; + else + gUnknown_203AE04 = NULL; + + return sQuestLogStorageCBs[a0](gUnknown_203AE08, a1); +} + +bool8 sub_81138A0(u16 a0, u16 * a1) +{ + if (a0 < 12 || a0 > 19) + return FALSE; + + sub_81138F8(); + gUnknown_203B024.unk_00 = a0; + + if (a0 < 16 || a0 > 17) + { + if (a0 == 12 || a0 == 18) + memcpy(gUnknown_203B024.unk_04, a1, 12); + else + memcpy(gUnknown_203B024.unk_04, a1, 24); + } + return TRUE; +} + +void sub_81138F8(void) +{ + gUnknown_203B024 = (struct UnkStruct_203B024){}; +} + +void sub_811390C(void) +{ + if (gUnknown_203B024.unk_00 != 0) + { + u16 * resp; + gUnknown_203B04A = 0; + sub_8110AEC(gUnknown_203B024.unk_00); + resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04); + gUnknown_203AE08 = resp; + sub_81138F8(); + } +} + +bool8 sub_8113954(u16 a0, u16 * a1) +{ + if (a0 != 34 && a0 != 30 && a0 != 32 && a0 != 33) + return FALSE; + sub_81138F8(); + if (gUnknown_3005E88 || FlagGet(0x82C) || sub_81137E4(a0, a1) != TRUE) + { + gUnknown_203B024.unk_00 = a0; + memcpy(gUnknown_203B024.unk_04, a1, 8); + } + return TRUE; +} + +void sub_81139BC(void) +{ + if (gUnknown_203B024.unk_00 != 0) + { + u16 * resp; + if (gUnknown_3005E88 == 0) + { + gUnknown_203B04A = 0; + sub_8110AEC(gUnknown_203B024.unk_00); + } + sub_8113B94(gUnknown_203B024.unk_00); + resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04); + gUnknown_203AE08 = resp; + sub_8113A1C(1); + sub_81138F8(); + sub_811231C(); + } +} + +void sub_8113A1C(u16 a0) +{ + gUnknown_203AE08 = sub_8113C5C(gUnknown_203AE08, a0); + gUnknown_203AF98++; +} + +bool8 sub_8113A44(u16 a0, u16 *a1) +{ + if (a0 != 31) + return FALSE; + + if (sub_8114FBC(a1[0]) == TRUE) + return TRUE; + + if (sub_8114FBC(a1[1]) == TRUE) + return TRUE; + + return FALSE; +} + +static const u16 * (*const sQuestLogScriptParsingCBs[])(const u16 *) = { + NULL, + NULL, + NULL, + sub_8113F3C, + sub_8113FBC, + sub_8114188, + sub_81141E4, + sub_8114240, + sub_811429C, + sub_8114324, + sub_8114394, + sub_811443C, + sub_811448C, + sub_8114518, + sub_81145A4, + sub_811464C, + sub_8114724, + sub_8114758, + sub_81147A8, + sub_8114834, + sub_81148BC, + sub_8114944, + sub_81149D0, + sub_8114A4C, + sub_8114AC8, + sub_8114B34, + sub_8114BA0, + sub_8114C0C, + sub_8114C8C, + sub_8114CE4, + sub_8114D68, + sub_8114E68, + sub_811500C, + sub_81150CC, + sub_81151DC, + sub_81152BC, + sub_8115460, + sub_8115518, + sub_81155E0, + NULL, + sub_8115700, + NULL, + sub_8115800 +}; + +const u8 gUnknown_8456AA0[] = { + 0x08, + 0x08, + 0x08, + 0x08, + 0x0a, + 0x08, + 0x08, + 0x08, + 0x08, + 0x0a, + 0x0a, + 0x04, + 0x10, + 0x0c, + 0x0c, + 0x1a, + 0x04, + 0x04, + 0x10, + 0x0c, + 0x0a, + 0x0a, + 0x0a, + 0x08, + 0x08, + 0x08, + 0x08, + 0x06, + 0x06, + 0x06, + 0x0c, + 0x0c, + 0x0c, + 0x0a, + 0x0c, + 0x06, + 0x08, + 0x0e, + 0x0e, + 0x02, + 0x08, + 0x04, + 0x06 +}; + +u16 * sub_8113A78(u16 * a0, u16 **a1) +{ + u16 r2 = a0[0] & 0xfff; + u16 r4 = a0[0] >> 12; + if (r2 == 33) + r4 = 0; + if (r2 < 3 || r2 > 42) + return NULL; + *a1 = a0; + return gUnknown_8456AA0[r2] + (gUnknown_8456AA0[r2] - 4) * r4 + (void *)a0; +} + +void sub_8113ABC(u16 * a0) +{ + u8 * r2 = (u8 *)(a0 + 2); + if ((a0[0] & 0xFFF) != 35) + gUnknown_203B04A = 0; + else + gUnknown_203B04A = r2[1] + 1; +} + +#ifdef NONMATCHING +bool8 sub_8113AE8(u16 * a0) +{ + if (a0 == NULL || a0[1] > gUnknown_203AF98) + return FALSE; + + sQuestLogScriptParsingCBs[a0[0] & 0xFFF](a0); + gUnknown_203B044.unk_0 = a0[0]; + gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12; + if (gUnknown_203B044.unk_1 != 0) + gUnknown_203B044.unk_2 = 1; + return TRUE; +} +#else +NAKED +bool8 sub_8113AE8(u16 * a0) +{ + asm_unified("\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tcmp r0, 0\n" + "\tbeq _08113AFA\n" + "\tldr r1, _08113B00 @ =gUnknown_203AF98\n" + "\tldrh r0, [r0, 0x2]\n" + "\tldrh r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbls _08113B04\n" + "_08113AFA:\n" + "\tmovs r0, 0\n" + "\tb _08113B32\n" + "\t.align 2, 0\n" + "_08113B00: .4byte gUnknown_203AF98\n" + "_08113B04:\n" + "\tldr r2, _08113B38 @ =sQuestLogScriptParsingCBs\n" + "\tldrh r1, [r4]\n" + "\tldr r0, _08113B3C @ =0x00000fff\n" + "\tands r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tldr r1, [r0]\n" + "\tadds r0, r4, 0\n" + "\tbl _call_via_r1\n" + "\tldr r2, _08113B40 @ =gUnknown_203B044\n" + "\tldrh r1, [r4]\n" + "\tstrb r1, [r2]\n" + "\tmovs r0, 0xF0\n" + "\tlsls r0, 8\n" + "\tands r0, r1\n" + "\tlsrs r0, 12\n" + "\tstrb r0, [r2, 0x1]\n" + "\tcmp r0, 0\n" + "\tbeq _08113B30\n" + "\tmovs r0, 0x1\n" + "\tstrh r0, [r2, 0x2]\n" + "_08113B30:\n" + "\tmovs r0, 0x1\n" + "_08113B32:\n" + "\tpop {r4}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_08113B38: .4byte sQuestLogScriptParsingCBs\n" + "_08113B3C: .4byte 0x00000fff\n" + "_08113B40: .4byte gUnknown_203B044"); +} +#endif + +bool8 sub_8113B44(u16 * a0) +{ + if (gUnknown_203B044.unk_2 == 0) + return FALSE; + + sQuestLogScriptParsingCBs[gUnknown_203B044.unk_0](a0); + gUnknown_203B044.unk_2++; + if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1) + sub_8113B88(); + return TRUE; +} + +void sub_8113B88(void) +{ + gUnknown_203B044 = (struct UnkStruct_203B044){}; +} + +void sub_8113B94(u16 a0) +{ + if (gUnknown_203B044.unk_0 != (u8)a0 || gUnknown_203B044.unk_2 != gUnknown_203AF98) + { + gUnknown_203B044.unk_0 = a0; + gUnknown_203B044.unk_1 = 0; + gUnknown_203B044.unk_2 = gUnknown_203AF98; + } + else if (gUnknown_203B044.unk_1 < 5) + gUnknown_203B044.unk_1++; +} + +void sub_8113BD8(void) +{ + gUnknown_203B049 = 0; + gUnknown_203B04A = 0; + gUnknown_203B04B = 0; +} + +u16 * sub_8113BF4(u16 * a0) +{ + if (!sub_8110988(a0, gUnknown_8456AA0[39])) + return NULL; + a0[0] = 39; + return a0 + 1; +} + +u16 * sub_8113C20(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + if (!sub_8110988(a0, gUnknown_8456AA0[39])) + return NULL; + a1->unk_6 = 0xFF; + a1->unk_4 = 0; + a1->unk_0 = 0; + a1->unk_1 = 0; + a1->unk_2 = 0; + a1->unk_3 = 0; + return a0 + 1; +} + +u16 * sub_8113C5C(u16 * a0, u16 a1) +{ + if (!sub_8110988(a0, gUnknown_8456AA0[41])) + return NULL; + a0[0] = 41; + a0[1] = a1; + return a0 + 2; +} + +u16 * sub_8113C8C(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + if (!sub_8110988(a0, gUnknown_8456AA0[41])) + return NULL; + a1->unk_6 = 0xFE; + a1->unk_4 = a0[1]; + a1->unk_0 = 0; + a1->unk_1 = 0; + a1->unk_2 = 0; + a1->unk_3 = 0; + return a0 + 2; +} + +u16 * sub_8113CC8(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + u8 * r6 = (u8 *)a0 + 4; + + if (!sub_8110988(a0, gUnknown_8456AA0[0])) + return NULL; + a0[0] = 0; + a0[1] = a1->unk_4; + r6[0] = a1->unk_0; + r6[1] = a1->unk_1; + r6[2] = a1->unk_2; + r6[3] = a1->unk_3; + return (u16 *)(r6 + 4); +} + +u16 * sub_8113D08(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + u8 * r6 = (u8 *)a0 + 4; + + if (!sub_8110988(a0, gUnknown_8456AA0[0])) + return NULL; + a1->unk_6 = 2; + a1->unk_4 = a0[1]; + a1->unk_0 = r6[0]; + a1->unk_1 = r6[1]; + a1->unk_2 = r6[2]; + a1->unk_3 = r6[3]; + return (u16 *)(r6 + 4); +} + +u16 * sub_8113D48(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + u16 * r4 = a0; + u8 * r6 = (u8 *)a0 + 4; + + if (!sub_8110988(r4, gUnknown_8456AA0[2])) + return NULL; + if (a1->unk_6 == 0) + r4[0] = 2; + else + r4[0] = 1; + r4[1] = a1->unk_4; + r6[0] = a1->unk_0; + r6[1] = a1->unk_1; + r6[2] = a1->unk_2; + r6[3] = a1->unk_3; + return (u16 *)(r6 + 4); +} + +u16 * sub_8113D94(u16 * a0, struct UnkStruct_203AE98 * a1) +{ + u16 * r5 = a0; + u8 * r6 = (u8 *)a0 + 4; + + if (!sub_8110988(r5, gUnknown_8456AA0[2])) + return NULL; + if (r5[0] == 2) + a1->unk_6 = 0; + else + a1->unk_6 = 1; + a1->unk_4 = r5[1]; + a1->unk_0 = r6[0]; + a1->unk_1 = r6[1]; + a1->unk_2 = r6[2]; + a1->unk_3 = r6[3]; + return (u16 *)(r6 + 4); +} + +u16 * sub_8113DE0(u16 a0, u16 * a1) +{ + u8 r6; + u16 * r5; + u8 r4; + u8 r1; + + if (gUnknown_203B044.unk_1 == 0) + r6 = gUnknown_8456AA0[a0]; + else + r6 = gUnknown_8456AA0[a0] - 4; + if (!sub_8110944(a1, r6)) + return NULL; + + r5 = (void *)a1; + + if (gUnknown_203B044.unk_1 != 0) + r5 = (void *)r5 - (gUnknown_203B044.unk_1 * r6 + 4); + + if (gUnknown_203B044.unk_1 == 5) + { + for (r4 = 0; r4 < 4; r4++) + { + memcpy( + (void *)r5 + (r4 * r6 + 4), + (void *)r5 + ((r4 + 1) * r6 + 4), + r6 + ); + } + r1 = 4; + } + else + r1 = gUnknown_203B044.unk_1; + + r5[0] = a0 + (r1 << 12); + r5[1] = gUnknown_203AF98; + r5 = (void *)r5 + (r1 * r6 + 4); + return r5; +} + +const u16 * sub_8113E88(u16 a0, const u16 * a1) +{ + a1 = (const void *)a1 + (gUnknown_203B044.unk_2 * (gUnknown_8456AA0[a0] - 4) + 4); + return a1; +} + +// TODO: delete this declaration once data_83FECCC.s is decompiled +extern const u8 gText_EggNickname[]; + +void QuestLog_AutoGetSpeciesName(u16 a0, u8 * a1, u8 a2) +{ + if (a1 != NULL) + { + if (a0 != SPECIES_EGG) + GetSpeciesName(a1, a0); + else + StringCopy(a1, gText_EggNickname); + } + else + { + if (a0 != SPECIES_EGG) + UnkTextUtil_SetPtrI(a2, gSpeciesNames[a0]); + else + UnkTextUtil_SetPtrI(a2, gText_EggNickname); + } +} + +u16 * sub_8113F14(u16 * a0, const u16 * a1) +{ + u16 * r2 = sub_8113DE0(3, a0); + if (r2 == NULL) + return NULL; + + r2[0] = a1[0]; + r2[1] = a1[1]; + return r2 + 2; +} + +const u16 * sub_8113F3C(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(3, a0); + QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0); + QuestLog_AutoGetSpeciesName(r4[1], gStringVar2, 0); + StringExpandPlaceholders(gStringVar4, gUnknown_841A16F); + r4 += 2; + return r4; +} + +u16 * sub_8113F80(u16 * a0, const u16 * a1) +{ + u16 * r2 = sub_8113DE0(4, a0); + if (r2 == NULL) + return NULL; + + r2[0] = a1[0]; + r2[1] = a1[2]; + r2[2] = a1[3]; + + if (a1[0] == ITEM_ESCAPE_ROPE) + gUnknown_203B048 = 2; + + return r2 + 3; +} + +const u16 * sub_8113FBC(const u16 * a0) +{ + const u16 * r5 = sub_8113E88(4, a0); + + switch (ItemId_GetPocket(r5[0])) + { + case POCKET_ITEMS: + case POCKET_POKE_BALLS: + case POCKET_BERRY_POUCH: + StringCopy(gStringVar1, ItemId_GetItem(r5[0])->name); + if (r5[0] == ITEM_ESCAPE_ROPE) + { + sub_80C4DF8(gStringVar2, r5[2]); + StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6); + } + else if (r5[1] != 0xFFFF) + { + QuestLog_AutoGetSpeciesName(r5[1], gStringVar2, 0); + StringExpandPlaceholders(gStringVar4, gUnknown_841A1E7); + } + else + { + StringExpandPlaceholders(gStringVar4, gUnknown_841A210); + } + break; + case POCKET_KEY_ITEMS: + StringCopy(gStringVar1, ItemId_GetItem(r5[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841A220); + break; + case POCKET_TM_CASE: + QuestLog_AutoGetSpeciesName(r5[1], gStringVar1, 0); + StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]); + if (r5[2] != 0xFFFF) + { + StringCopy(gStringVar3, gMoveNames[r5[2]]); + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gUnknown_841A965); + else + StringExpandPlaceholders(gStringVar4, gUnknown_841A277); + } + else + { + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gUnknown_841A938); + else + StringExpandPlaceholders(gStringVar4, gUnknown_841A255); + } + break; + } + return r5 + 3; +} + +u16 * sub_811414C(u16 a0, u16 * a1, const u16 * a2) +{ + u16 * r1 = sub_8113DE0(a0, a1); + if (r1 == NULL) + return NULL; + + r1[0] = a2[0]; + r1[1] = a2[2]; + return r1 + 2; +} + +u16 * sub_8114174(u16 * a0, const u16 * a1) +{ + return sub_811414C(5, a0, a1); +} + +const u16 * sub_8114188(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(5, a0); + QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841AB74); + r4 += 2; + return r4; +} + +u16 * sub_81141D0(u16 * a0, const u16 * a1) +{ + return sub_811414C(6, a0, a1); +} + +const u16 * sub_81141E4(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(6, a0); + + QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841AB8E); + r4 += 2; + return r4; +} + +u16 * sub_811422C(u16 * a0, const u16 * a1) +{ + return sub_811414C(7, a0, a1); +} + +const u16 * sub_8114240(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(7, a0); + + QuestLog_AutoGetSpeciesName(r4[1], gStringVar2, 0); + StringCopy(gStringVar1, ItemId_GetItem(r4[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841A6A5); + r4 += 2; + return r4; +} + +u16 * sub_8114288(u16 * a0, const u16 * a1) +{ + return sub_811414C(8, a0, a1); +} + +const u16 * sub_811429C(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(8, a0); + + QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841A1CD); + r4 += 2; + return r4; +} + +u16 * sub_81142E4(u16 a0, u16 * a1, const u16 * a2) +{ + u16 * r1 = sub_8113DE0(a0, a1); + if (r1 == NULL) + return NULL; + + r1[0] = a2[0]; + r1[1] = a2[1]; + r1[2] = a2[2]; + return r1 + 3; +} + +u16 * sub_8114310(u16 * a0, const u16 * a1) +{ + return sub_81142E4(9, a0, a1); +} + +const u16 * sub_8114324(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(9, a0); + QuestLog_AutoGetSpeciesName(r4[2], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name); + StringCopy(gStringVar3, ItemId_GetItem(r4[1])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841A193); + r4 += 3; + return r4; +} + +u16 * sub_8114380(u16 * a0, const u16 * a1) +{ + return sub_81142E4(10, a0, a1); +} + +const u16 * sub_8114394(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(10, a0); + QuestLog_AutoGetSpeciesName(r4[2], gStringVar2, 0); + StringCopy(gStringVar3, ItemId_GetItem(r4[0])->name); + StringCopy(gStringVar1, ItemId_GetItem(r4[1])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841A6E1); + r4 += 3; + return r4; +} + +u16 * sub_81143F0(u16 * a0, const u16 * a1) +{ + u16 * r4 = a0; + if (gUnknown_203B044.unk_0 == 11 && gUnknown_203B044.unk_1 != 0) + return r4; + + if (!sub_8110944(a0, gUnknown_8456AA0[11])) + return NULL; + + r4[0] = 11; + r4[1] = gUnknown_203AF98; + return r4 + 2; +} + +const u16 * sub_811443C(const u16 * a0) +{ + StringExpandPlaceholders(gStringVar4, gUnknown_841A2B0); + a0 += 2; + return a0; +} + +u16 * sub_811445C(u16 * a0, const u16 * a1) +{ + u16 * r4 = a0 + 4; + + a0[0] = 12; + a0[1] = gUnknown_203AF98; + a0[2] = a1[0]; + a0[3] = a1[1]; + a1 += 2; + memcpy(r4, a1, 7); + r4 += 4; + return r4; +} + +const u16 * sub_811448C(const u16 * a0) +{ + const u16 * r6 = a0 + 4; + + memset(gStringVar1, EOS, 8); + memcpy(gStringVar1, r6, 7); + + sub_8115834(gStringVar1); + QuestLog_AutoGetSpeciesName(a0[3], gStringVar2, 0); + QuestLog_AutoGetSpeciesName(a0[2], gStringVar3, 0); + StringExpandPlaceholders(gStringVar4, gUnknown_841A3FF); + r6 += 4; + return r6; +} + +const u8 *const gUnknown_8456ACC[] = { + gUnknown_841A74E, + gUnknown_841A756, + gUnknown_841A762 +}; + +const u8 *const gUnknown_8456AD8[] = { + gUnknown_841AF98, + gUnknown_841A762, + gUnknown_841AF9F +}; + +const u8 *const gUnknown_8456AE4[] = { + gUnknown_841A502, + gUnknown_841A506, + gUnknown_841AFD1 +}; + +u16 * sub_81144EC(u16 * a0, const u16 * a1) +{ + a0[0] = 13; + a0[1] = gUnknown_203AF98; + *((u8 *)a0 + 4) = *((const u8 *)a1 + 0); + memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7); + a0 += 6; + return a0; +} + +const u16 * sub_8114518(const u16 * a0) +{ + UnkTextUtil_Reset(); + + memset(gStringVar1, EOS, 8); + memcpy(gStringVar1, (const u8 *)a0 + 5, 7); + sub_8115834(gStringVar1); + UnkTextUtil_SetPtrI(0, gStringVar1); + UnkTextUtil_SetPtrI(1, gUnknown_8456AE4[((const u8 *)a0)[4]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A422); + a0 += 6; + return a0; +} + +u16 * sub_8114578(u16 * a0, const u16 * a1) +{ + a0[0] = 14; + a0[1] = gUnknown_203AF98; + *((u8 *)a0 + 4) = *((const u8 *)a1 + 0); + memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7); + a0 += 6; + return a0; +} + +const u16 * sub_81145A4(const u16 * a0) +{ + UnkTextUtil_Reset(); + + memset(gStringVar1, EOS, 8); + memcpy(gStringVar1, (const u8 *)a0 + 5, 7); + sub_8115834(gStringVar1); + UnkTextUtil_SetPtrI(0, gStringVar1); + UnkTextUtil_SetPtrI(1, gUnknown_8456AE4[((const u8 *)a0)[4]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A477); + a0 += 6; + return a0; +} + +u16 * sub_8114604(u16 * a0, const u16 * a1) +{ + a0[0] = 15; + a0[1] = gUnknown_203AF98; + *((u8 *)a0 + 4) = *((const u8 *)a1 + 0); + memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7); + memcpy((u8 *)a0 + 12, (const u8 *)a1 + 8, 7); + memcpy((u8 *)a0 + 19, (const u8 *)a1 + 15, 7); + a0 += 13; + return a0; +} + +const u16 * sub_811464C(const u16 * a0) +{ + UnkTextUtil_Reset(); + + memset(gStringVar1, EOS, 8); + memset(gStringVar2, EOS, 8); + memset(gStringVar3, EOS, 8); + StringCopy7(gStringVar1, (const u8 *)a0 + 5); + StringCopy7(gStringVar2, (const u8 *)a0 + 12); + StringCopy7(gStringVar3, (const u8 *)a0 + 19); + sub_8115834(gStringVar1); + sub_8115834(gStringVar2); + sub_8115834(gStringVar3); + UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); + UnkTextUtil_SetPtrI(1, gStringVar1); + UnkTextUtil_SetPtrI(2, gStringVar2); + UnkTextUtil_SetPtrI(3, gStringVar3); + UnkTextUtil_SetPtrI(4, gUnknown_8456AE4[((const u8 *)a0)[4]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A4C6); + a0 += 13; + return a0; +} + +u16 * sub_8114710(u16 * a0, const u16 * a1) +{ + a0[0] = 16; + a0[1] = gUnknown_203AF98; + return a0 + 2; +} + +const u16 * sub_8114724(const u16 * a0) +{ + StringExpandPlaceholders(gStringVar4, gUnknown_841A50B); + a0 += 2; + return a0; +} + +u16 * sub_8114744(u16 * a0, const u16 * a1) +{ + a0[0] = 17; + a0[1] = gUnknown_203AF98; + return a0 + 2; +} + +const u16 * sub_8114758(const u16 * a0) +{ + StringExpandPlaceholders(gStringVar4, gUnknown_841A732); + a0 += 2; + return a0; +} + +u16 * sub_8114778(u16 * a0, const u16 * a1) +{ + u8 * r4 = (u8 *)(a0 + 4); + a0[0] = 18; + a0[1] = gUnknown_203AF98; + a0[2] = a1[0]; + a0[3] = a1[1]; + memcpy(r4, a1 + 2, 7); + r4 += 8; + return (u16 *)r4; +} + +const u16 * sub_81147A8(const u16 * a0) +{ + const u8 * r6 = (const u8 *)(a0 + 4); + memset(gStringVar1, EOS, 8); + memcpy(gStringVar1, r6, 7); + sub_8115834(gStringVar1); + QuestLog_AutoGetSpeciesName(a0[3], gStringVar2, 0); + QuestLog_AutoGetSpeciesName(a0[2], gStringVar3, 0); + StringExpandPlaceholders(gStringVar4, gUnknown_841A76A); + r6 += 8; + return (const u16 *)r6; +} + +u16 * sub_8114808(u16 * a0, const u16 * a1) +{ + a0[0] = 19; + a0[1] = gUnknown_203AF98; + *(u8 *)&a0[2] = *(const u8 *)&a1[0]; + memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7); + a0 += 6; + return a0; +} + +const u16 * sub_8114834(const u16 * a0) +{ + memset(gStringVar1, EOS, 8); + memcpy(gStringVar1, (const u8 *)a0 + 5, 7); + sub_8115834(gStringVar1); + StringCopy(gStringVar2, gUnknown_8456AE4[*(const u8 *)&a0[2]]); + StringExpandPlaceholders(gStringVar4, gUnknown_841A7B0); + a0 += 6; + return a0; +} + +u16 * sub_811488C(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(20, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + a0[1] = a1[1]; + *((u8 *)a0 + 4) = *((const u8 *)a1 + 4); + *((u8 *)a0 + 5) = *((const u8 *)a1 + 5); + return a0 + 3; +} + +const u16 * sub_81148BC(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(20, a0); + boxIdxs = (const u8 *)a0 + 4; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + UnkTextUtil_SetPtrI(2, GetBoxNamePtr(boxIdxs[1])); + QuestLog_AutoGetSpeciesName(a0[1], NULL, 3); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A566); + return a0 + 3; +} + +u16 * sub_8114918(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(21, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + a0[1] = a1[1]; + *((u8 *)a0 + 4) = *((const u8 *)a1 + 4); + return a0 + 3; +} + +const u16 * sub_8114944(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(21, a0); + boxIdxs = (const u8 *)a0 + 4; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + QuestLog_AutoGetSpeciesName(a0[1], NULL, 2); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A5D9); + return a0 + 3; +} + +u16 * sub_8114990(u16 * a0, const u16 * a1) +{ + u16 * r2; + u16 * ret; + r2 = sub_8113DE0(22, a0); + if (r2 == NULL) + return NULL; + ret = r2 + 2; + if (*((const u8 *)a1 + 4) == TOTAL_BOXES_COUNT) + { + r2[0] = a1[1]; + r2[1] = a1[0]; + *((u8 *)r2 + 4) = *((const u8 *)a1 + 5); + } + else + { + r2[0] = a1[0]; + r2[1] = a1[1]; + *((u8 *)r2 + 4) = *((const u8 *)a1 + 4); + } + return ret + 1; +} + +const u16 * sub_81149D0(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(22, a0); + boxIdxs = (const u8 *)a0 + 4; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + QuestLog_AutoGetSpeciesName(a0[1], NULL, 2); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A60A); + return a0 + 3; +} + +u16 * sub_8114A1C(u16 * a0, const u16 * a1) +{ + u16 * r2; + u16 * ret; + r2 = sub_8113DE0(23, a0); + if (r2 == NULL) + return NULL; + r2[0] = a1[0]; + ret = r2 + 1; + *((u8 *)ret + 0) = *((const u8 *)a1 + 4); + *((u8 *)ret + 1) = *((const u8 *)a1 + 5); + return ret + 1; +} + +const u16 * sub_8114A4C(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(23, a0); + boxIdxs = (const u8 *)a0 + 2; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + UnkTextUtil_SetPtrI(2, GetBoxNamePtr(boxIdxs[1])); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A59C); + return (const u16 *)boxIdxs + 1; +} + +u16 * sub_8114AA0(u16 * a0, const u16 * a1) +{ + u16 * r2; + r2 = sub_8113DE0(24, a0); + if (r2 == NULL) + return NULL; + r2[0] = a1[0]; + *((u8 *)r2 + 2) = *((const u8 *)a1 + 4); + return r2 + 2; +} + +const u16 * sub_8114AC8(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(24, a0); + boxIdxs = (const u8 *)a0 + 2; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A5FA); + return (const u16 *)boxIdxs + 1; +} + +u16 * sub_8114B0C(u16 * a0, const u16 * a1) +{ + u16 * r2; + r2 = sub_8113DE0(25, a0); + if (r2 == NULL) + return NULL; + r2[0] = a1[0]; + *((u8 *)r2 + 2) = *((const u8 *)a1 + 4); + return r2 + 2; +} + +const u16 * sub_8114B34(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(25, a0); + boxIdxs = (const u8 *)a0 + 2; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A632); + return (const u16 *)boxIdxs + 1; +} + +u16 * sub_8114B78(u16 * a0, const u16 * a1) +{ + u16 * r2; + r2 = sub_8113DE0(26, a0); + if (r2 == NULL) + return NULL; + r2[0] = a1[0]; + *((u8 *)r2 + 2) = *((const u8 *)a1 + 4); + return r2 + 2; +} + +const u16 * sub_8114BA0(const u16 * a0) +{ + const u8 * boxIdxs; + a0 = sub_8113E88(26, a0); + boxIdxs = (const u8 *)a0 + 2; + UnkTextUtil_Reset(); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 0); + UnkTextUtil_SetPtrI(1, GetBoxNamePtr(boxIdxs[0])); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A64F); + return (const u16 *)boxIdxs + 1; +} + +u16 * sub_8114BE4(u16 * a0, const u16 * a1) +{ + u16 * r2; + r2 = sub_8113DE0(27, a0); + if (r2 == NULL) + return NULL; + *((u8 *)r2 + 0) = *((const u8 *)a1 + 4); + *((u8 *)r2 + 1) = *((const u8 *)a1 + 5); + return r2 + 1; +} + +const u16 * sub_8114C0C(const u16 * a0) +{ + const u16 *r4 = sub_8113E88(27, a0); + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, GetBoxNamePtr(*((const u8 *)r4 + 0))); + if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1)) + UnkTextUtil_SetPtrI(1, gUnknown_841A694); + else + UnkTextUtil_SetPtrI(1, GetBoxNamePtr(*((const u8 *)r4 + 1))); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A66E); + return r4 + 1; +} + +u16 * sub_8114C68(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(28, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + return a0 + 1; +} + +const u16 * sub_8114C8C(const u16 * a0) +{ + const u16 *r4 = sub_8113E88(28, a0); + sub_8099E90(r4[0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_841A391); + return r4 + 1; +} + +u16 * sub_8114CC0(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(29, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + return a0 + 1; +} + +const u16 * sub_8114CE4(const u16 * a0) +{ + const u16 *r4 = sub_8113E88(29, a0); + sub_8099E90(r4[0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_841A3DA); + return r4 + 1; +} + +u16 * sub_8114D18(u16 a0, u16 * a1, const u16 * a2) +{ + a1 = sub_8113DE0(a0, a1); + if (a1 == NULL) + return NULL; + a1[0] = a2[1]; + a1[1] = a2[2]; + a1[2] = a2[0]; + *((u8 *)a1 + 6) = *((const u8 *)a2 + 7); + *((u8 *)a1 + 7) = *((const u8 *)a2 + 6); + return a1 + 4; +} + +u16 * sub_8114D4C(u16 * a0, const u16 * a1) +{ + gUnknown_203B048 = TRUE; + return sub_8114D18(30, a0, a1); +} + +const u16 * sub_8114D68(const u16 * a0) +{ + const u8 * r6; + a0 = sub_8113E88(30, a0); + r6 = (const u8 *)a0 + 6; + UnkTextUtil_Reset(); + sub_80C4DF8(gStringVar1, r6[0]); + UnkTextUtil_SetPtrI(0, gStringVar1); + UnkTextUtil_SetPtrI(1, gTrainers[a0[2]].trainerName); + QuestLog_AutoGetSpeciesName(a0[0], 0, 2); + QuestLog_AutoGetSpeciesName(a0[1], 0, 3); + UnkTextUtil_SetPtrI(4, gUnknown_8456ACC[r6[1]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AF0C); + return a0 + 4; +} + +u16 * sub_8114DE8(u16 * a0, const u16 * a1) +{ + u16 * r4 = a0; + u8 * r5 = (u8 *)a0 + 8; + if (!sub_8110944(r4, gUnknown_8456AA0[31])) + return NULL; + if (r5[0] == 0 && r5[1] == 0) + { + r4[0] = 31; + r4[1] = gUnknown_203AF98; + } + if (a1[0]) + r4[2] = a1[0]; + if (a1[1]) + r4[3] = a1[1]; + if (a1[0] && r5[0] != 0xFF) + r5[0]++; + if (a1[1] && r5[1] != 0xFF) + r5[1]++; + r5[2] = *((const u8 *)a1 + 4); + return (u16 *)(r5 + 4); +} + +const u16 * sub_8114E68(const u16 * a0) +{ + const u8 * r6; + if (!sub_8110944(a0, gUnknown_8456AA0[31])) + return NULL; + + r6 = (const u8 *)a0 + 8; + UnkTextUtil_Reset(); + sub_80C4DF8(gStringVar1, r6[2]); + UnkTextUtil_SetPtrI(0, gStringVar1); + QuestLog_AutoGetSpeciesName(a0[2], NULL, 1); + ConvertIntToDecimalStringN(gStringVar2, r6[0], STR_CONV_MODE_LEFT_ALIGN, 3); + UnkTextUtil_SetPtrI(2, gStringVar2); + QuestLog_AutoGetSpeciesName(a0[3], NULL, 3); + ConvertIntToDecimalStringN(gStringVar3, r6[1], STR_CONV_MODE_LEFT_ALIGN, 3); + UnkTextUtil_SetPtrI(4, gStringVar3); + UnkTextUtil_SetPtrI(5, gSaveBlock2Ptr->playerName); + if (r6[0] == 0) + { + if (r6[1] == 1) + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AA01); + else + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AA2B); + } + else if (r6[1] == 0) + { + if (r6[0] == 1) + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A9A9); + else + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A9D4); + } + else if (r6[0] == 1) + { + if (r6[1] == 1) + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AA76); + else + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AAAA); + } + else + { + if (r6[1] == 1) + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AAEC); + else + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AB29); + } + return (const u16 *)(r6 + 4); +} + +bool8 sub_8114FBC(u16 a0) +{ + switch (a0) + { + case 0x96: + case 0x8F ... 0x92: + case 0xF9 ... 0xFA: + case 0x19A: + return TRUE; + } + return FALSE; +} + +u16 * sub_8114FF0(u16 * a0, const u16 * a1) +{ + gUnknown_203B048 = TRUE; + return sub_8114D18(32, a0, a1); +} + +const u16 * sub_811500C(const u16 * a0) +{ + const u8 * r5; + a0 = sub_8113E88(32, a0); + r5 = (const u8 *)a0 + 6; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, gTrainers[a0[2]].trainerName); + QuestLog_AutoGetSpeciesName(a0[0], NULL, 1); + QuestLog_AutoGetSpeciesName(a0[1], NULL, 2); + UnkTextUtil_SetPtrI(3, gUnknown_8456ACC[r5[1]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AF3E); + return a0 + 4; +} + +u16 * sub_8115078(u16 * a0, const u16 * a1) +{ + if (!sub_8110944(a0, gUnknown_8456AA0[33])) + return NULL; + a0[0] = 0x2021; + a0[1] = gUnknown_203AF98; + a0[2] = a1[1]; + a0[3] = a1[2]; + *((u8 *)a0 + 8) = *((const u8 *)a1 + 6); + gUnknown_203B048 = TRUE; + return a0 + 5; +} + +const u16 * sub_81150CC(const u16 * a0) +{ + const u8 * r5; + if (!sub_8110944(a0, gUnknown_8456AA0[33])) + return NULL; + + r5 = (const u8 *)a0 + 8; + UnkTextUtil_Reset(); + + switch (gUnknown_203B044.unk_2) + { + case 0: + UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); + UnkTextUtil_SetPtrI(1, gSaveBlock1Ptr->rivalName); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A2E1); + break; + case 1: + UnkTextUtil_SetPtrI(0, gSaveBlock1Ptr->rivalName); + QuestLog_AutoGetSpeciesName(a0[2], NULL, 1); + UnkTextUtil_SetPtrI(2, gSaveBlock2Ptr->playerName); + QuestLog_AutoGetSpeciesName(a0[3], NULL, 3); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A312); + break; + case 2: + UnkTextUtil_SetPtrI(0, gUnknown_8456AD8[r5[0]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A349); + break; + } + return (const u16 *)(r5 + 2); +} + +u16 * sub_81151C0(u16 * a0, const u16 * a1) +{ + gUnknown_203B048 = TRUE; + return sub_8114D18(34, a0, a1); +} + +const u16 * sub_81151DC(const u16 * a0) +{ + const u16 * r5 = sub_8113E88(34, a0); + const u8 * r6 = (const u8 *)r5 + 6; + UnkTextUtil_Reset(); + sub_80C4DF8(gStringVar1, r6[0]); + UnkTextUtil_SetPtrI(0, gStringVar1); + if ( + gTrainers[r5[2]].trainerClass == 0x51 + || gTrainers[r5[2]].trainerClass == 0x59 + || gTrainers[r5[2]].trainerClass == 0x5A + ) + UnkTextUtil_SetPtrI(1, GetExpandedPlaceholder(6)); + else + UnkTextUtil_SetPtrI(1, gTrainers[r5[2]].trainerName); + QuestLog_AutoGetSpeciesName(r5[0], NULL, 2); + QuestLog_AutoGetSpeciesName(r5[1], NULL, 3); + UnkTextUtil_SetPtrI(4, gUnknown_8456ACC[r6[1]]); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841AF6D); + return (const u16 *)(r6 + 2); +} + +const u8 *const gUnknown_8456AF0[] = { + gUnknown_841B09F, + gUnknown_841B0A4, + gUnknown_841B0B5, + gUnknown_841B0B9, + gUnknown_841B0B9, + gUnknown_841B0CD, + gUnknown_841B0CD, + gUnknown_841B0DD, + gUnknown_841B0B5, + gUnknown_841B0F6, + gUnknown_841B0F6, + gUnknown_841B0B5, + gUnknown_841B0FF, + gUnknown_841B109, + gUnknown_841B116, + gUnknown_841B11F, + gUnknown_841B11F, + gUnknown_841B130, + gUnknown_841B0B5, + gUnknown_841B141, + gUnknown_841B14B, + gUnknown_841B14B, + gUnknown_841B15A, + gUnknown_841B15A, + gUnknown_841B166, + gUnknown_841B172, + gUnknown_841B180, + gUnknown_841B190, + gUnknown_841B11F, + gUnknown_841B11F, + gUnknown_841B1A3, + gUnknown_841B1B7, + gUnknown_841B1C7, + gUnknown_841B0B5, + gUnknown_841B1DA, + gUnknown_841B1E5, + gUnknown_841B1F4, + gUnknown_841B0B5, + gUnknown_841B200, + gUnknown_841B20E, + gUnknown_841B0B5, + gUnknown_841B21C, + gUnknown_841B226, + gUnknown_841B226, + gUnknown_841B236, + gUnknown_841B0B5, + gUnknown_841B246, + gUnknown_841B25B, + gUnknown_841B25B, + gUnknown_841B268, + gUnknown_841B277 +}; + +const u8 *const gUnknown_8456BBC[] = { + gUnknown_841A53A, + gUnknown_841AD9E, + gUnknown_841ADC8, + gUnknown_841ADFF, + gUnknown_841AE1E, + gUnknown_841AE48, + gUnknown_841AEA7, + gUnknown_841AEDC, + gUnknown_841AFD6, + gUnknown_841B005 +}; + +const u8 gUnknown_8456BE4[] = { + 0x03, + 0x04, + 0x05, + 0x08, + 0x08, + 0x07, + 0x07, + 0x01, + 0x05, + 0x07, + 0x07, + 0x05, + 0x00, + 0x00, + 0x00, + 0x08, + 0x08, + 0x00, + 0x05, + 0x08, + 0x07, + 0x07, + 0x07, + 0x07, + 0x08, + 0x08, + 0x00, + 0x00, + 0x08, + 0x08, + 0x00, + 0x00, + 0x02, + 0x05, + 0x00, + 0x08, + 0x06, + 0x05, + 0x00, + 0x00, + 0x05, + 0x09, + 0x07, + 0x07, + 0x09, + 0x05, + 0x00, + 0x07, + 0x07, + 0x08, + 0x07 +}; + +const u8 gUnknown_8456C17[] = { + 0x5a, + 0x5b, + 0x5d, + 0x5e, + 0x5f, + 0x62, + 0x60, + 0x59 +}; + +const u8 *const gUnknown_8456C20[] = { + gUnknown_841AC51, + gUnknown_841ABAB, + gUnknown_841ABCD, + gUnknown_841AC2A, + gUnknown_841ABF9, + gUnknown_841AC93, + gUnknown_841ACBC, + gUnknown_841AD69, + gUnknown_841AD1D, + gUnknown_841A90C, + gUnknown_841A8E0, + gUnknown_841AD3C +}; + +u16 * sub_8115280(u16 * a0, const u16 * a1) +{ + u16 * r2 = sub_8113DE0(35, a0); + if (r2 == NULL) + return NULL; + *((u8 *)r2 + 0) = *((const u8 *)a1 + 0); + if ((*((u8 *)r2 + 1) = *((const u8 *)a1 + 1)) == 0x24) + gUnknown_203B048 = TRUE; + return r2 + 1; +} + +const u16 * sub_81152BC(const u16 * a0) +{ + u8 r4, r6; + const u16 * r5 = sub_8113E88(35, a0); + const u8 * r5_2 = (const u8 *)r5 + 0; + r6 = r5_2[1]; + sub_80C4DF8(gStringVar1, r5_2[0]); + StringCopy(gStringVar2, gUnknown_8456AF0[r6]); + if (gUnknown_8456BE4[r6] == 5) + { + for (r4 = 0; r4 < ARRAY_COUNT(gUnknown_8456C17); r4++) + { + if (r5_2[0] != gUnknown_8456C17[r4]) + continue; + if (FlagGet(0x820 + r4) == TRUE) + StringExpandPlaceholders(gStringVar4, gUnknown_841AE8F); + else + StringExpandPlaceholders(gStringVar4, gUnknown_841AE48); + break; + } + if (r4 == 8) + StringExpandPlaceholders(gStringVar4, gUnknown_8456BBC[gUnknown_8456BE4[r6]]); + } + else + StringExpandPlaceholders(gStringVar4, gUnknown_8456BBC[gUnknown_8456BE4[r6]]); + + return (const u16 *)(r5_2 + 2); +} + +void sub_811539C(void) +{ + gUnknown_203B04B = TRUE; +} + +bool8 sub_81153A8(u16 a0, u16 * a1) +{ + if (a0 != 35) + { + gUnknown_203B04A = 0; + return TRUE; + } + if (gUnknown_203B04A == *((u8 *)a1 + 1) + 1) + return FALSE; + gUnknown_203B04A = *((u8 *)a1 + 1) + 1; + return TRUE; +} + +bool8 sub_81153E4(u16 a0, u16 * a1) +{ + if (a0 != 35) + return TRUE; + if (*((u8 *)a1 + 1) == 32 && gUnknown_203B04B == 0) + return FALSE; + gUnknown_203B04B = 0; + return TRUE; +} + +u16 * sub_8115410(u16 * a0, const u16 * a1) +{ + u8 * r3; + a0 = sub_8113DE0(36, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + r3 = (u8 *)a0 + 2; + r3[0] = *((const u8 *)a1 + 2); + r3[1] = *((const u8 *)a1 + 3); + if (r3[0] == 7 || r3[0] == 8) + gUnknown_203B048 = 2; + else + gUnknown_203B048 = 1; + return (u16 *)(r3 + 2); +} + +const u16 * sub_8115460(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(36, a0); + const u8 * r5 = (const u8 *)r4 + 2; + QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0); + if (r5[1] != 0xFF) + sub_80C4DF8(gStringVar2, r5[1]); + if (r5[0] == 7) + { + if (r5[1] == 0x58) + StringCopy(gStringVar3, gUnknown_841B09F); + else + StringCopy(gStringVar3, gUnknown_8418C1B); + } + StringExpandPlaceholders(gStringVar4, gUnknown_8456C20[r5[0]]); + return (const u16 *)(r5 + 2); +} + +u16 * sub_81154DC(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(37, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[2]; + a0[1] = a1[3]; + a0[2] = *((const u32 *)a1) >> 16; + a0[3] = *((const u32 *)a1); + *((u8 *)a0 + 8) = *((const u8 *)a1 + 8); + *((u8 *)a0 + 9) = 1; + return a0 + 5; +} + +const u16 * sub_8115518(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(37, a0); + const u8 * r7 = (const u8 *)r4 + 8; + u32 r6 = (r4[2] << 16) + r4[3]; + UnkTextUtil_Reset(); + sub_80C4DF8(gStringVar1, r7[0]); + UnkTextUtil_SetPtrI(0, gStringVar1); + UnkTextUtil_SetPtrI(1, ItemId_GetItem(r4[0])->name); + if (r4[1] < 2) + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A7DD); + else + { + ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); + UnkTextUtil_SetPtrI(2, gStringVar2); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A810); + } + return (const u16 *)(r7 + 2); +} + +u16 * sub_81155A4(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(38, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[2]; + a0[1] = a1[3]; + a0[2] = *((const u32 *)a1) >> 16; + a0[3] = *((const u32 *)a1); + *((u8 *)a0 + 8) = *((const u8 *)a1 + 8); + *((u8 *)a0 + 9) = *((const u8 *)a1 + 9); + return a0 + 5; +} + +const u16 * sub_81155E0(const u16 * a0) { + const u16 *r5 = sub_8113E88(38, a0); + const u8 *r7 = (const u8 *) r5 + 8; + u32 r6 = (r5[2] << 16) + r5[3]; + UnkTextUtil_Reset(); + sub_80C4DF8(gStringVar1, r7[0]); + if (r7[1] == 0) { + UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); + UnkTextUtil_SetPtrI(1, gStringVar1); + UnkTextUtil_SetPtrI(2, ItemId_GetItem(r5[0])->name); + if (r5[1] == 1) + UnkTextUtil_SetPtrI(3, gUnknown_841A8D4); + else + { + ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3); + UnkTextUtil_SetPtrI(4, gStringVar2); + UnkTextUtil_StringExpandPlaceholders(gStringVar3, gUnknown_841A8DD); + UnkTextUtil_SetPtrI(3, gStringVar3); + } + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A858); + } + else + { + UnkTextUtil_SetPtrI(0, gStringVar1); + UnkTextUtil_SetPtrI(1, ItemId_GetItem(r5[0])->name); + ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); + UnkTextUtil_SetPtrI(2, gStringVar2); + UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_841A896); + } + return (const u16 *)(r7 + 2); +} + +u16 * sub_81156D8(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(40, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + *((u8 *)a0 + 2) = *((const u8 *)a1 + 2); + return a0 + 2; +} + +const u16 * sub_8115700(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(40, a0); + const u8 * r5 = (const u8 *)r4 + 2; + sub_80C4DF8(gStringVar1, r5[0]); + StringCopy(gStringVar2, ItemId_GetItem(r4[0])->name); + StringExpandPlaceholders(gStringVar4, gUnknown_841B03F); + return (const u16 *)(r5 + 2); +} + +const u16 gUnknown_8456C50[] = { + 0x0891, + 0x0892, + 0x0893, + 0x0894, + 0x0895, + 0x0896, + 0x0897, + 0x0898, + 0x0899, + 0x089a, + 0x089b, + 0x089c, + 0x089d, + 0x089e, + 0x089f, + 0x08a0, + 0x08a1 +}; + +#ifdef NONMATCHING +void sub_8115748(u16 a0) +{ + s32 i; + if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) + return; + for (i = 0; i < 17; i++) + { + if (a0 != gUnknown_8456C50[i]) + continue; + if (!FlagGet(a0)) + gUnknown_203B049 = TRUE; + else + gUnknown_203B049 = FALSE; + break; + } +} +#else +NAKED +void sub_8115748(u16 a0) +{ + asm_unified("\tpush {r4,lr}\n" + "\tlsls r0, 16\n" + "\tlsrs r2, r0, 16\n" + "\tldr r0, =gUnknown_203ADFA\n" + "\tldrb r0, [r0]\n" + "\tsubs r0, 0x2\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbls _08115792\n" + "\tmovs r1, 0\n" + "\tldr r4, =gUnknown_203B049\n" + "\tldr r0, =gUnknown_8456C50\n" + "\tb _08115778\n" + "\t.pool\n" + "_08115770:\n" + "\tmovs r0, 0\n" + "\tb _08115790\n" + "_08115774:\n" + "\tadds r0, 0x2\n" + "\tadds r1, 0x1\n" + "_08115778:\n" + "\tcmp r1, 0x10\n" + "\tbgt _08115792\n" + "\tldrh r3, [r0]\n" + "\tcmp r2, r3\n" + "\tbne _08115774\n" + "\tadds r0, r2, 0\n" + "\tbl FlagGet\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08115770\n" + "\tmovs r0, 0x1\n" + "_08115790:\n" + "\tstrb r0, [r4]\n" + "_08115792:\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif // NONMATCHING + +void sub_8115798(void) +{ + u16 sp0; + if (gUnknown_203ADFA != 2 && gUnknown_203ADFA != 3) + { + if (gUnknown_203B049) + { + sp0 = gMapHeader.regionMapSectionId; + sub_8113550(42, &sp0); + gUnknown_203B049 = FALSE; + } + } +} + +u16 * sub_81157DC(u16 * a0, const u16 * a1) +{ + a0 = sub_8113DE0(42, a0); + if (a0 == NULL) + return NULL; + a0[0] = a1[0]; + return a0 + 1; +} + +const u16 * sub_8115800(const u16 * a0) +{ + const u16 * r4 = sub_8113E88(42, a0); + sub_80C4DF8(gStringVar1, r4[0]); + StringExpandPlaceholders(gStringVar4, gUnknown_841B064); + return r4 + 1; +} + +void sub_8115834(u8 * a0) +{ + s32 i; + if (*a0++ == EXT_CTRL_CODE_BEGIN && *a0++ == EXT_CTRL_CODE_JPN) + { + for (i = 0; i < 5; i++) + { + if (*a0 == EXT_CTRL_CODE_BEGIN) + break; + a0++; + } + *a0++ = EXT_CTRL_CODE_BEGIN; + *a0++ = EXT_CTRL_CODE_ENG; + *a0++ = EOS; + } +} diff --git a/src/quest_log_8150454.c b/src/quest_log_8150454.c new file mode 100644 index 000000000..8af516e3a --- /dev/null +++ b/src/quest_log_8150454.c @@ -0,0 +1,197 @@ +#include "global.h" +#include "bike.h" +#include "script.h" +#include "task.h" +#include "field_player_avatar.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "field_effect.h" +#include "field_effect_helpers.h" +#include "quest_log.h" + +void sub_81504A8(void); +void sub_81504E8(void); +void sub_8150530(void); +void sub_81505C4(u8 taskId); +void sub_8150708(void); +void sub_815077C(void); +void sub_8150794(u8 taskId); +void sub_81507CC(void); +void sub_81507D8(void); +void sub_81507E4(void); +void sub_81507F0(void); +void sub_81507BC(struct MapObject *a0, u8 a1); + +void (*const gUnknown_8471EDC[])(void) = { + sub_81504A8, + sub_81504E8, + sub_8150530, + sub_8150708, + sub_81507CC, + sub_81507D8, + sub_81507E4, + sub_81507F0, + sub_815077C +}; + +void sub_8150454(u8 a0) +{ + if (a0 < ARRAY_COUNT(gUnknown_8471EDC)) + gUnknown_8471EDC[a0](); +} + +bool8 sub_8150474(u8 a0) +{ + if (gUnknown_3005E88 == 2) + { + sub_8112720(a0); + return TRUE; + } + return FALSE; +} + +void sub_8150498(u8 a0) +{ + return sub_8150454(a0); +} + +void sub_81504A8(void) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sub_81507BC(mapObject, sub_805C808(0)); + FieldObjectTurn(mapObject, mapObject->placeholder18); + SetPlayerAvatarStateMask(0x01); +} + +void sub_81504E8(void) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sub_81507BC(mapObject, sub_805C808(1)); + FieldObjectTurn(mapObject, mapObject->placeholder18); + SetPlayerAvatarStateMask(0x02); + sub_80BD620(0, 0); +} + +void sub_8150530(void) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + struct Sprite *sprite = &gSprites[mapObject->spriteId]; + + if (gUnknown_3005E88 == 1 || gUnknown_3005E88 == 3) + { + u8 taskId; + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + taskId = CreateTask(sub_81505C4, 0xFF); + gTasks[taskId].data[0] = 0; + } + else + { + sub_81507BC(mapObject, sub_805C808(4)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + } +} + +void sub_81505C4(u8 taskId) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + struct Sprite *sprite = &gSprites[mapObject->spriteId]; + + switch (gTasks[taskId].data[0]) + { + case 0: + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + mapObject->mapobj_bit_11 = TRUE; + sub_81507BC(mapObject, sub_805C808(4)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + gTasks[taskId].data[0]++; + gTasks[taskId].data[1] = 0; + break; + case 1: + sub_805D9C4(sprite); + if (gTasks[taskId].data[1] < 60) + gTasks[taskId].data[1]++; + else + gTasks[taskId].data[0]++; + break; + case 2: + StartSpriteAnim(sprite, sub_8063500(player_get_direction_lower_nybble())); + gTasks[taskId].data[0]++; + break; + case 3: + sub_805D9C4(sprite); + if (sprite->animEnded) + { + if (!(gPlayerAvatar.flags & 8)) + sub_81507BC(mapObject, sub_805C808(0)); + else + sub_81507BC(mapObject, sub_805C808(2)); + FieldObjectTurn(mapObject, mapObject->placeholder18); + sprite->pos2.x = 0; + sprite->pos2.y = 0; + ScriptContext2_Disable(); + DestroyTask(taskId); + } + break; + } +} + +void sub_8150708(void) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 fieldEffectId; + + if (!(gPlayerAvatar.flags & 0x08)) + { + sub_81507BC(mapObject, sub_805C808(2)); + FieldObjectTurn(mapObject, mapObject->placeholder18); + SetPlayerAvatarStateMask(0x08); + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId; + fieldEffectId = FieldEffectStart(0x08); + mapObject->mapobj_unk_1A = fieldEffectId; + sub_80DC44C(fieldEffectId, 1); + } +} + +void sub_815077C(void) +{ + FieldEffectStart(0x41); + CreateTask(sub_8150794, 0x00); +} + +void sub_8150794(u8 taskId) +{ + if (!FieldEffectActiveListContains(0x41)) + { + UnfreezeMapObjects(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } +} + +void sub_81507BC(struct MapObject * a0, u8 a1) +{ + sub_805F060(a0, a1); +} + +void sub_81507CC(void) +{ + sub_805D154(1); +} + +void sub_81507D8(void) +{ + sub_805D154(2); +} + +void sub_81507E4(void) +{ + sub_805D154(3); +} + +void sub_81507F0(void) +{ + sub_805D154(4); +} diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c new file mode 100644 index 000000000..c702b6a5c --- /dev/null +++ b/src/quest_log_battle.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "constants/species.h" +#include "malloc.h" +#include "battle.h" +#include "link.h" +#include "overworld.h" +#include "quest_log.h" + +struct QuestLogStruct_TrainerBattleRecord +{ + u16 v0; + u16 v2; + u16 v4; + u8 v6; + u8 v7; +}; + +struct QuestLogStruct_WildBattleRecord +{ + u16 v0; + u16 v2; + u8 v4; +}; + +void sub_812C334(s32 *, s32 *); + +void sub_812BFDC(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_DOME)) && (gUnknown_2023E8A == 1 || gUnknown_2023E8A == 7)) + { + struct QuestLogStruct_TrainerBattleRecord * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_TrainerBattleRecord)); + struct QuestLogStruct_WildBattleRecord * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_WildBattleRecord)); + u16 questLogMessageType; + u16 playerEndingHP; + u16 playerMaxHP; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + switch (gTrainers[gTrainerBattleOpponent_A].trainerClass) + { + case 0x54: + questLogMessageType = 30; + break; + case 0x5a: + questLogMessageType = 33; + break; + case 0x57: + questLogMessageType = 32; + break; + default: + questLogMessageType = 34; + break; + } + questLogTrainerBattleRecord->v0 = gTrainerBattleOpponent_A; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies; + if (GetBattlerSide(gBattleStruct->field_182) == B_SIDE_PLAYER) + questLogTrainerBattleRecord->v4 = gBattleMons[gBattleStruct->field_182].species; + else if (gBattleMons[GetBattlerAtPosition(0)].hp != 0) + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species; + else + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(2)].species; + playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp + gBattleMons[GetBattlerAtPosition(2)].hp; + playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP + gBattleMons[GetBattlerAtPosition(2)].maxHP; + } + else + { + questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies; + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species; + playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp; + playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP; + } + questLogTrainerBattleRecord->v7 = sav1_map_get_name(); + questLogTrainerBattleRecord->v6 = 0; + if (playerEndingHP < playerMaxHP / 3 * 2) + questLogTrainerBattleRecord->v6 = 1; + if (playerEndingHP < playerMaxHP / 3) + questLogTrainerBattleRecord->v6++; + sub_8113550(questLogMessageType, (const u16 *)questLogTrainerBattleRecord); + } + else + { + if (gUnknown_2023E8A == 1) + { + questLogWildBattleRecord->v0 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES); + questLogWildBattleRecord->v2 = SPECIES_NONE; + } + else + { + questLogWildBattleRecord->v0 = SPECIES_NONE; + questLogWildBattleRecord->v2 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES); + } + questLogWildBattleRecord->v4 = sav1_map_get_name(); + sub_8113550(31, (const u16 *)questLogWildBattleRecord); + } + Free(questLogTrainerBattleRecord); + Free(questLogWildBattleRecord); + } +} + +struct QuestLogStruct_LinkBattleRecord +{ + u8 v0; + u8 v1[3][7]; +}; + +void sub_812C224(void) +{ + s32 sp0; + s32 sp4[2]; + u16 r8; + s32 r3; + u32 r0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + struct QuestLogStruct_LinkBattleRecord * r5 = Alloc(sizeof(struct QuestLogStruct_LinkBattleRecord)); + r5->v0 = gUnknown_2023E8A - 1; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + r8 = 15; + sub_812C334(&sp0, sp4); + for (r3 = 0; r3 < 7; r3++) + { + r5->v1[0][r3] = gLinkPlayers[sp0].name[r3]; + r5->v1[1][r3] = gLinkPlayers[sp4[0]].name[r3]; + r5->v1[2][r3] = gLinkPlayers[sp4[1]].name[r3]; + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + r8 = 14; + else + { + r0 = InUnionRoom(); + r8 = 13; + if (r0 == TRUE) + r8 = 19; + } + for (r3 = 0; r3 < 7; r3++) + { + r5->v1[0][r3] = gLinkPlayers[gBattleStruct->field_B5 ^ 1].name[r3]; + } + } + sub_8113550(r8, (const u16 *)r5); + Free(r5); + } +} + +void sub_812C334(s32 * a0, s32 * a1) +{ + s32 r5; + s32 _optimized_out = 0; + u8 r2 = gLinkPlayers[gBattleStruct->field_B5].id ^ 2; + for (r5 = 0; r5 < 4; r5++) + { + if (r2 == gLinkPlayers[r5].id) + a0[0] = r5; + else if (r5 != gBattleStruct->field_B5) + a1[_optimized_out++] = r5; + } +} diff --git a/src/save.c b/src/save.c index 28f6a2896..ef38d8b17 100644 --- a/src/save.c +++ b/src/save.c @@ -614,7 +614,12 @@ u16 CalculateChecksum(void *data, u16 size) u32 checksum = 0; for (i = 0; i < (size / 4); i++) - checksum += *((u32 *)data)++; + { + // checksum += *(u32 *)data++; + // For compatibility with modern gcc, these statements were separated. + checksum += *(u32 *)data; + data += 4; + } return ((checksum >> 16) + checksum); } diff --git a/src/script.c b/src/script.c index 0c74debb2..59ef4e579 100644 --- a/src/script.c +++ b/src/script.c @@ -22,17 +22,17 @@ EWRAM_DATA u8 gUnknown_20370A0 = 0; EWRAM_DATA u8 *gUnknown_20370A4 = NULL; // ewram bss -IWRAM_DATA static u8 sScriptContext1Status; -IWRAM_DATA static u32 sUnusedVariable1; -IWRAM_DATA static struct ScriptContext sScriptContext1; -IWRAM_DATA static u32 sUnusedVariable2; -IWRAM_DATA static struct ScriptContext sScriptContext2; -IWRAM_DATA static bool8 sScriptContext2Enabled; -IWRAM_DATA static u8 gUnknown_3000F9D; -IWRAM_DATA static u8 gUnknown_3000F9E; -IWRAM_DATA static u8 gUnknown_3000F9F; -IWRAM_DATA static u8 gUnknown_3000FA0; -IWRAM_DATA static u8 gUnknown_3000FA1; +/*IWRAM_DATA*/ static u8 sScriptContext1Status; +/*IWRAM_DATA*/ static u32 sUnusedVariable1; +/*IWRAM_DATA*/ static struct ScriptContext sScriptContext1; +/*IWRAM_DATA*/ static u32 sUnusedVariable2; +/*IWRAM_DATA*/ static struct ScriptContext sScriptContext2; +/*IWRAM_DATA*/ static bool8 sScriptContext2Enabled; +/*IWRAM_DATA*/ static u8 gUnknown_3000F9D; +/*IWRAM_DATA*/ static u8 gUnknown_3000F9E; +/*IWRAM_DATA*/ static u8 gUnknown_3000F9F; +/*IWRAM_DATA*/ static u8 gUnknown_3000FA0; +/*IWRAM_DATA*/ static u8 gUnknown_3000FA1; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; diff --git a/src/sound.c b/src/sound.c index b8814de81..f94e44506 100644 --- a/src/sound.c +++ b/src/sound.c @@ -24,11 +24,11 @@ EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL; EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; // iwram bss -IWRAM_DATA static u16 sCurrentMapMusic; -IWRAM_DATA static u16 sNextMapMusic; -IWRAM_DATA static u8 sMapMusicState; -IWRAM_DATA static u8 sMapMusicFadeInSpeed; -IWRAM_DATA static u16 sFanfareCounter; +/*IWRAM_DATA*/ static u16 sCurrentMapMusic; +/*IWRAM_DATA*/ static u16 sNextMapMusic; +/*IWRAM_DATA*/ static u8 sMapMusicState; +/*IWRAM_DATA*/ static u8 sMapMusicFadeInSpeed; +/*IWRAM_DATA*/ static u16 sFanfareCounter; // iwram common bool8 gDisableMusic; diff --git a/src/text.c b/src/text.c index 7fb0ab034..d4d25b5aa 100644 --- a/src/text.c +++ b/src/text.c @@ -1479,17 +1479,17 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) return (u8)(GetFontAttribute(fontId, 0) + letterSpacing) * width; } -u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32) +u32 (*GetFontWidthFunc(u8 glyphId))(u16 _glyphId, bool32 _isJapanese) { u32 i; for (i = 0; i < 7; ++i) { if (glyphId == gGlyphWidthFuncs[i].font_id) - return gGlyphWidthFuncs[i].func; + return *gGlyphWidthFuncs[i].func; } - return 0; + return NULL; } u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) diff --git a/sym_bss.txt b/sym_bss.txt index 5abd54a10..20d8d561d 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -174,12 +174,9 @@ gUnknown_3002008: @ 3002008 gUnknown_3002018: @ 3002018 .space 0x4 -gUnknown_300201C: @ 300201C - .space 0x4 - -gUnknown_3002020: @ 3002020 - .space 0x4 + .include "src/quest_log.o" + .align 2 gUnknown_3002024: @ 3002024 .space 0x4 diff --git a/sym_common.txt b/sym_common.txt index 04e6982e0..6c213ca4d 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -304,8 +304,7 @@ gUnknown_3005E60: @ 3005E60 gUnknown_3005E70: @ 3005E70 .space 0x18 -gUnknown_3005E88: @ 3005E88 - .space 0x4 + .include "quest_log.o" gUnknown_3005E8C: @ 3005E8C .space 0x4 diff --git a/sym_ewram.txt b/sym_ewram.txt index 5681f9f26..16a1e7ddd 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -47,8 +47,7 @@ gStringVar3: @ 2021D04 gStringVar4: @ 2021D18 .space 0x3E8 -gUnknownStringVar: @ 2022100 - .space 0x10 + .include "src/string_util.o" gUnknown_2022110: @ 2022110 .space 0x1 @@ -81,13 +80,7 @@ gUnknown_2022720: @ 2022720 .space 0x1C gLinkPlayers: @ 202273C - .space 0x8 - -gUnknown_2022744: @ 2022744 - .space 0x1C - -gUnknown_2022760: @ 2022760 - .space 0x68 + .space 0x8C gUnknown_20227C8: @ 20227C8 .space 0x8C @@ -620,7 +613,7 @@ gUnknown_2036E34: @ 2036E34 gMapObjects: @ 2036E38 .space 0x240 -gUnknown_2037078: @ 2037078 +gPlayerAvatar: @ 2037078 .space 0x20 gUnknown_2037098: @ 2037098 @@ -746,52 +739,16 @@ gUnknown_2037104: @ 2037104 gUnknown_2037108: @ 2037108 .space 0xF0 -gUnknown_20371F8: @ 20371F8 - .space 0x2 +gPlttBufferUnfaded: @ 20371F8 + .space 0x400 -gUnknown_20371FA: @ 20371FA - .space 0x1E - -gUnknown_2037218: @ 2037218 - .space 0x20 - -gUnknown_2037238: @ 2037238 - .space 0x20 - -gUnknown_2037258: @ 2037258 - .space 0x20 - -gUnknown_2037278: @ 2037278 - .space 0x120 - -gUnknown_2037398: @ 2037398 - .space 0x60 - -gUnknown_20373F8: @ 20373F8 - .space 0x10 - -gUnknown_2037408: @ 2037408 - .space 0x1F0 - -gUnknown_20375F8: @ 20375F8 - .space 0x2 - -gUnknown_20375FA: @ 20375FA - .space 0x3E - -gUnknown_2037638: @ 2037638 - .space 0x78 - -gUnknown_20376B0: @ 20376B0 - .space 0x148 - -gUnknown_20377F8: @ 20377F8 - .space 0x200 +gPlttBufferFaded: @ 20375F8 + .space 0x400 gUnknown_20379F8: @ 20379F8 .space 0xC0 -gUnknown_2037AB8: @ 2037AB8 +gPaletteFade: @ 2037AB8 .space 0x10 gUnknown_2037AC8: @ 2037AC8 @@ -932,7 +889,7 @@ gUnknown_20386D0: @ 20386D0 gUnknown_20386DC: @ 20386DC .space 0x4 -gUnknown_20386E0: @ 20386E0 +gFieldEffectArguments: @ 20386E0 .space 0x20 gUnknown_2038700: @ 2038700 @@ -1492,77 +1449,7 @@ gUnknown_203ADF3: @ 203ADF3 gUnknown_203ADF4: @ 203ADF4 .space 0x4 -gUnknown_203ADF8: @ 203ADF8 - .space 0x1 - -gUnknown_203ADF9: @ 203ADF9 - .space 0x1 - -gUnknown_203ADFA: @ 203ADFA - .space 0x2 - -gUnknown_203ADFC: @ 203ADFC - .space 0x2 - -gUnknown_203ADFE: @ 203ADFE - .space 0x6 - -gUnknown_203AE04: @ 203AE04 - .space 0x4 - -gUnknown_203AE08: @ 203AE08 - .space 0x4 - -gUnknown_203AE0C: @ 203AE0C - .space 0x80 - -gUnknown_203AE8C: @ 203AE8C - .space 0x4 - -gUnknown_203AE90: @ 203AE90 - .space 0x4 - -gUnknown_203AE94: @ 203AE94 - .space 0x4 - -gUnknown_203AE98: @ 203AE98 - .space 0x100 - -gUnknown_203AF98: @ 203AF98 - .space 0x2 - -gUnknown_203AF9A: @ 203AF9A - .space 0x80 - -gUnknown_203B01A: @ 203B01A - .space 0x2 - -gUnknown_203B01C: @ 203B01C - .space 0x2 - -gUnknown_203B01E: @ 203B01E - .space 0x2 - -gUnknown_203B020: @ 203B020 - .space 0x4 - -gUnknown_203B024: @ 203B024 - .space 0x20 - -gUnknown_203B044: @ 203B044 - .space 0x4 - -gUnknown_203B048: @ 203B048 - .space 0x1 - -gUnknown_203B049: @ 203B049 - .space 0x1 - -gUnknown_203B04A: @ 203B04A - .space 0x1 - -gUnknown_203B04B: @ 203B04B - .space 0x1 + .include "src/quest_log.o" gUnknown_203B04C: @ 203B04C .space 0xC