diff options
61 files changed, 2563 insertions, 5079 deletions
diff --git a/.gitignore b/.gitignore index e3cb43d69..c85c20759 100644 --- a/.gitignore +++ b/.gitignore @@ -39,8 +39,10 @@ types_*.taghl Thumbs.db build/ .idea/ +cmake-build-* *.DS_Store *.pl *.bak src/data/items.h -tools/br_ips/{br_ips,ips_patch}{,.exe} +tools/br_ips/br_ips +tools/br_ips/ips_patch @@ -3,15 +3,41 @@ CPP := $(CC) -E LD := tools/binutils/bin/arm-none-eabi-ld OBJCOPY := tools/binutils/bin/arm-none-eabi-objcopy +GAME_VERSION := FIRERED +REVISION := 0 +GAME_LANGUAGE := ENGLISH + +# So long as baserom.gba is required, we error out if the +# user tries to build any ROM other than FireRed. +ifneq ($(GAME_VERSION),FIRERED) +$(error We can only build English Pokemon FireRed v1.0 currently) +else ifneq ($(REVISION),0) +$(error We can only build English Pokemon FireRed v1.0 currently) +else ifneq ($(GAME_LANGUAGE),ENGLISH) +$(error We can only build English Pokemon FireRed v1.0 currently) +endif + +ifeq ($(GAME_VERSION),FIRERED) TITLE := POKEMON FIRE -GAME_CODE := BPRE +GAME_CODE := BPR +BUILD_NAME := firered +else +TITLE := POKEMON LEAF +GAME_CODE := BPL +BUILD_NAME := leafgreen +endif +ifeq ($(GAME_LANGUAGE),ENGLISH) +GAME_CODE := $(GAME_CODE)E +endif +ifneq ($(REVISION),0) +BUILD_NAME := $(BUILD_NAME)_rev$(REVISION) +endif MAKER_CODE := 01 -REVISION := 0 SHELL := /bin/bash -o pipefail -ROM := pokefirered.gba -OBJ_DIR := build/firered +ROM := poke$(BUILD_NAME).gba +OBJ_DIR := build/$(BUILD_NAME) ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) @@ -26,12 +52,12 @@ ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi +ASFLAGS := -mcpu=arm7tdmi --defsym $(GAME_VERSION)=1 --defsym REVISION=$(REVISION) --defsym $(GAME_LANGUAGE)=1 CC1 := tools/agbcc/bin/agbcc override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -CPPFLAGS := -I tools/agbcc -I tools/agbcc/include -iquote include -nostdinc -undef +CPPFLAGS := -I tools/agbcc -I tools/agbcc/include -iquote include -nostdinc -undef -D$(GAME_VERSION) -DREVISION=$(REVISION) -D$(GAME_LANGUAGE) LDFLAGS = -Map ../../$(MAP) diff --git a/asm/intro.s b/asm/intro.s deleted file mode 100644 index 24b7bb9b6..000000000 --- a/asm/intro.s +++ /dev/null @@ -1,4841 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80EC5A4 -sub_80EC5A4: @ 80EC5A4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80EC5A4 - - thumb_func_start sub_80EC5B8 -sub_80EC5B8: @ 80EC5B8 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080EC5CA - ldr r0, _080EC5D0 @ =sub_80EC870 - bl SetMainCallback2 -_080EC5CA: - pop {r0} - bx r0 - .align 2, 0 -_080EC5D0: .4byte sub_80EC870 - thumb_func_end sub_80EC5B8 - - thumb_func_start load_copyright_graphics -load_copyright_graphics: @ 80EC5D4 - push {r4-r6,lr} - adds r3, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r3, 16 - lsrs r3, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _080EC610 @ =gUnknown_8402280 - movs r6, 0xC0 - lsls r6, 19 - adds r3, r6 - adds r1, r3, 0 - bl LZ77UnCompVram - ldr r0, _080EC614 @ =gUnknown_84024E4 - adds r4, r6 - adds r1, r4, 0 - bl LZ77UnCompVram - ldr r0, _080EC618 @ =gUnknown_8402260 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EC610: .4byte gUnknown_8402280 -_080EC614: .4byte gUnknown_84024E4 -_080EC618: .4byte gUnknown_8402260 - thumb_func_end load_copyright_graphics - - thumb_func_start SerialCb_CopyrightScreen -SerialCb_CopyrightScreen: @ 80EC61C - push {lr} - ldr r0, _080EC628 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_HandleSerialInterrupt - pop {r0} - bx r0 - .align 2, 0 -_080EC628: .4byte gUnknown_203AAD4 - thumb_func_end SerialCb_CopyrightScreen - - thumb_func_start sub_80EC62C -sub_80EC62C: @ 80EC62C - push {r4-r6,lr} - sub sp, 0xC - ldr r0, _080EC64C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r5, r0, r1 - ldrb r4, [r5] - cmp r4, 0x8C - bne _080EC640 - b _080EC778 -_080EC640: - cmp r4, 0x8C - bgt _080EC650 - cmp r4, 0 - beq _080EC65E - b _080EC732 - .align 2, 0 -_080EC64C: .4byte gMain -_080EC650: - cmp r4, 0x8D - bne _080EC656 - b _080EC7A4 -_080EC656: - cmp r4, 0x8E - bne _080EC65C - b _080EC808 -_080EC65C: - b _080EC732 -_080EC65E: - movs r0, 0 - bl SetVBlankCallback - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _080EC74C @ =0x00007fff - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - add r0, sp, 0x4 - strh r4, [r0] - ldr r1, _080EC750 @ =0x040000d4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC754 @ =0x8100c000 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - str r4, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC758 @ =0x85000100 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add r0, sp, 0x4 - strh r4, [r0] - str r0, [r1] - ldr r0, _080EC75C @ =0x05000002 - str r0, [r1, 0x4] - ldr r0, _080EC760 @ =0x810001ff - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - bl ResetPaletteFade - movs r1, 0xE0 - lsls r1, 6 - movs r0, 0 - movs r2, 0 - bl load_copyright_graphics - bl ScanlineEffect_Stop - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0x1 - negs r0, r0 - ldr r1, _080EC764 @ =0x0000ffff - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r1, 0xE0 - lsls r1, 3 - movs r0, 0x8 - bl SetGpuReg - movs r0, 0x1 - bl EnableInterrupts - ldr r0, _080EC768 @ =sub_80EC5A4 - bl SetVBlankCallback - movs r1, 0xA0 - lsls r1, 1 - movs r0, 0 - bl SetGpuReg - ldr r0, _080EC76C @ =SerialCb_CopyrightScreen - bl SetSerialCallback - ldr r0, _080EC770 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_Init -_080EC732: - bl UpdatePaletteFade - ldr r0, _080EC774 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - ldr r0, _080EC770 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_Main - b _080EC812 - .align 2, 0 -_080EC74C: .4byte 0x00007fff -_080EC750: .4byte 0x040000d4 -_080EC754: .4byte 0x8100c000 -_080EC758: .4byte 0x85000100 -_080EC75C: .4byte 0x05000002 -_080EC760: .4byte 0x810001ff -_080EC764: .4byte 0x0000ffff -_080EC768: .4byte sub_80EC5A4 -_080EC76C: .4byte SerialCb_CopyrightScreen -_080EC770: .4byte gUnknown_203AAD4 -_080EC774: .4byte gMain -_080EC778: - ldr r4, _080EC7A0 @ =gUnknown_203AAD4 - adds r0, r4, 0 - bl GameCubeMultiBoot_Main - ldrb r0, [r4, 0x2] - cmp r0, 0x1 - beq _080EC812 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _080EC812 - .align 2, 0 -_080EC7A0: .4byte gUnknown_203AAD4 -_080EC7A4: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080EC812 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - ldr r5, _080EC7E4 @ =gUnknown_203AAD4 - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _080EC7F4 - ldrb r0, [r5, 0x2] - cmp r0, 0x2 - bne _080EC7FE - ldr r6, _080EC7E8 @ =0x020000ac - ldr r4, [r6] - ldr r0, _080EC7EC @ =0x65366347 - cmp r4, r0 - bne _080EC7DC - ldr r0, _080EC7F0 @ =gMultiBootProgram_PokemonColosseum_Start - movs r1, 0x80 - lsls r1, 18 - movs r2, 0xA0 - lsls r2, 9 - bl CpuSet - str r4, [r6] -_080EC7DC: - adds r0, r5, 0 - bl GameCubeMultiBoot_ExecuteProgram - b _080EC7FE - .align 2, 0 -_080EC7E4: .4byte gUnknown_203AAD4 -_080EC7E8: .4byte 0x020000ac -_080EC7EC: .4byte 0x65366347 -_080EC7F0: .4byte gMultiBootProgram_PokemonColosseum_Start -_080EC7F4: - bl GameCubeMultiBoot_Quit - ldr r0, _080EC804 @ =SerialCB - bl SetSerialCallback -_080EC7FE: - movs r0, 0 - b _080EC814 - .align 2, 0 -_080EC804: .4byte SerialCB -_080EC808: - bl sub_800B388 - ldr r0, _080EC81C @ =sub_80EC5B8 - bl SetMainCallback2 -_080EC812: - movs r0, 0x1 -_080EC814: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080EC81C: .4byte sub_80EC5B8 - thumb_func_end sub_80EC62C - - thumb_func_start c2_copyright_1 -c2_copyright_1: @ 80EC820 - push {lr} - bl sub_80EC62C - lsls r0, 24 - cmp r0, 0 - bne _080EC858 - bl ResetMenuAndMonGlobals - bl Save_ResetSaveCounters - movs r0, 0 - bl Save_LoadGameData - ldr r0, _080EC85C @ =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _080EC846 - cmp r0, 0x2 - bne _080EC84A -_080EC846: - bl Sav2_ClearSetDefault -_080EC84A: - ldr r0, _080EC860 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x15] - lsls r0, 31 - lsrs r0, 31 - bl SetPokemonCryStereo -_080EC858: - pop {r0} - bx r0 - .align 2, 0 -_080EC85C: .4byte gSaveFileStatus -_080EC860: .4byte gSaveBlock2Ptr - thumb_func_end c2_copyright_1 - - thumb_func_start sub_80EC864 -sub_80EC864: @ 80EC864 - push {lr} - bl sub_80EC62C - pop {r0} - bx r0 - thumb_func_end sub_80EC864 - - thumb_func_start sub_80EC870 -sub_80EC870: @ 80EC870 - push {r4,lr} - sub sp, 0xC - ldr r0, _080EC88C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r4, [r0] - cmp r4, 0x1 - beq _080EC944 - cmp r4, 0x1 - bgt _080EC890 - cmp r4, 0 - beq _080EC8A0 - b _080EC894 - .align 2, 0 -_080EC88C: .4byte gMain -_080EC890: - cmp r4, 0x2 - beq _080EC988 -_080EC894: - ldr r0, _080EC928 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080EC8A0: - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r0, _080EC92C @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - bl ResetTasks - bl ResetSpriteData - bl ResetPaletteFade - bl ResetTempTileDataBuffers - bl sub_80ECA00 - add r1, sp, 0x4 - movs r0, 0 - strh r0, [r1] - ldr r1, _080EC930 @ =0x040000d4 - add r0, sp, 0x4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC934 @ =0x8100c000 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0 - str r2, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC938 @ =0x85000100 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add r0, sp, 0x4 - strh r2, [r0] - str r0, [r1] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC93C @ =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0x80 - lsls r2, 3 - movs r0, 0 - movs r1, 0 - bl FillPalette - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080EC940 @ =gUnknown_840BB80 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - b _080EC9B8 - .align 2, 0 -_080EC928: .4byte gMain -_080EC92C: .4byte gHeap -_080EC930: .4byte 0x040000d4 -_080EC934: .4byte 0x8100c000 -_080EC938: .4byte 0x85000100 -_080EC93C: .4byte 0x81000200 -_080EC940: .4byte gUnknown_840BB80 -_080EC944: - ldr r0, _080EC978 @ =gUnknown_8402630 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080EC97C @ =gUnknown_8402650 - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080EC980 @ =gUnknown_8402668 - str r4, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r0, _080EC984 @ =gUnknown_840270C - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - b _080EC9B8 - .align 2, 0 -_080EC978: .4byte gUnknown_8402630 -_080EC97C: .4byte gUnknown_8402650 -_080EC980: .4byte gUnknown_8402668 -_080EC984: .4byte gUnknown_840270C -_080EC988: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080EC9C6 - bl sub_80ECA70 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _080EC9B0 @ =sub_80EC9D4 - bl SetMainCallback2 - ldr r0, _080EC9B4 @ =sub_80EC9EC - bl SetVBlankCallback - b _080EC9C6 - .align 2, 0 -_080EC9B0: .4byte sub_80EC9D4 -_080EC9B4: .4byte sub_80EC9EC -_080EC9B8: - ldr r1, _080EC9D0 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080EC9C6: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC9D0: .4byte gMain - thumb_func_end sub_80EC870 - - thumb_func_start sub_80EC9D4 -sub_80EC9D4: @ 80EC9D4 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80EC9D4 - - thumb_func_start sub_80EC9EC -sub_80EC9EC: @ 80EC9EC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80EC9EC - - thumb_func_start sub_80ECA00 -sub_80ECA00: @ 80ECA00 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - pop {r0} - bx r0 - thumb_func_end sub_80ECA00 - - thumb_func_start sub_80ECA70 -sub_80ECA70: @ 80ECA70 - push {r4,lr} - ldr r0, _080ECA9C @ =0x000028bc - bl Alloc - adds r4, r0, 0 - ldr r1, _080ECAA0 @ =sub_80ECAF0 - bl sub_80ECAA8 - ldr r0, _080ECAA4 @ =sub_80ECAB0 - movs r1, 0x3 - bl CreateTask - strb r0, [r4, 0x5] - ldrb r0, [r4, 0x5] - movs r1, 0 - adds r2, r4, 0 - bl SetWordTaskArg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ECA9C: .4byte 0x000028bc -_080ECAA0: .4byte sub_80ECAF0 -_080ECAA4: .4byte sub_80ECAB0 - thumb_func_end sub_80ECA70 - - thumb_func_start sub_80ECAA8 -sub_80ECAA8: @ 80ECAA8 - str r1, [r0] - movs r1, 0 - strb r1, [r0, 0x4] - bx lr - thumb_func_end sub_80ECAA8 - - thumb_func_start sub_80ECAB0 -sub_80ECAB0: @ 80ECAB0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - adds r4, r0, 0 - ldr r0, _080ECAE8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xD - ands r0, r1 - cmp r0, 0 - beq _080ECAD8 - ldr r0, [r4] - ldr r1, _080ECAEC @ =sub_80EDBE8 - cmp r0, r1 - beq _080ECAD8 - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECAD8: - ldr r1, [r4] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ECAE8: .4byte gMain -_080ECAEC: .4byte sub_80EDBE8 - thumb_func_end sub_80ECAB0 - - thumb_func_start sub_80ECAF0 -sub_80ECAF0: @ 80ECAF0 - push {r4,r5,lr} - sub sp, 0xC - adds r5, r0, 0 - ldrb r0, [r5, 0x4] - cmp r0, 0 - beq _080ECB02 - cmp r0, 0x1 - beq _080ECB78 - b _080ECB8A -_080ECB02: - ldr r0, _080ECB68 @ =gUnknown_840BBA8 - bl InitWindows - ldr r0, _080ECB6C @ =gUnknown_840272C - ldr r1, _080ECB70 @ =0x0000043c - adds r4, r5, r1 - adds r1, r4, 0 - bl LZ77UnCompWram - ldr r0, _080ECB74 @ =gUnknown_84028F8 - adds r1, r5, 0 - adds r1, 0x3C - bl LZ77UnCompWram - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x90 - str r0, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x28 - bl BlitBitmapToWindow - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080ECB8A - .align 2, 0 -_080ECB68: .4byte gUnknown_840BBA8 -_080ECB6C: .4byte gUnknown_840272C -_080ECB70: .4byte 0x0000043c -_080ECB74: .4byte gUnknown_84028F8 -_080ECB78: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _080ECB8A - ldr r1, _080ECB94 @ =sub_80ECB98 - adds r0, r5, 0 - bl sub_80ECAA8 -_080ECB8A: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECB94: .4byte sub_80ECB98 - thumb_func_end sub_80ECAF0 - - thumb_func_start sub_80ECB98 -sub_80ECB98: @ 80ECB98 - push {r4,r5,lr} - adds r4, r0, 0 - ldrb r5, [r4, 0x4] - cmp r5, 0x1 - beq _080ECBE2 - cmp r5, 0x1 - bgt _080ECBAC - cmp r5, 0 - beq _080ECBB2 - b _080ECC32 -_080ECBAC: - cmp r5, 0x2 - beq _080ECBFC - b _080ECC32 -_080ECBB2: - movs r1, 0x80 - lsls r1, 7 - movs r0, 0 - bl SetGpuRegBits - movs r1, 0xFC - lsls r1, 6 - movs r0, 0x48 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0xF0 - bl SetGpuReg - movs r0, 0x46 - movs r1, 0 - bl SetGpuReg - strh r5, [r4, 0x12] - b _080ECBF4 -_080ECBE2: - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - movs r2, 0 - bl BlendPalettes -_080ECBF4: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080ECC32 -_080ECBFC: - ldrh r0, [r4, 0x12] - adds r0, 0x8 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2F - bls _080ECC0E - movs r0, 0x30 - strh r0, [r4, 0x12] -_080ECC0E: - ldrh r0, [r4, 0x12] - movs r1, 0x50 - subs r1, r0 - lsls r1, 8 - adds r0, 0x50 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x46 - bl SetGpuReg - ldrh r0, [r4, 0x12] - cmp r0, 0x30 - bne _080ECC32 - ldr r1, _080ECC38 @ =sub_80ECC3C - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECC32: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECC38: .4byte sub_80ECC3C - thumb_func_end sub_80ECB98 - - thumb_func_start sub_80ECC3C -sub_80ECC3C: @ 80ECC3C - push {r4,r5,lr} - adds r4, r0, 0 - ldrb r5, [r4, 0x4] - cmp r5, 0x1 - beq _080ECC68 - cmp r5, 0x1 - bgt _080ECC50 - cmp r5, 0 - beq _080ECC56 - b _080ECC9C -_080ECC50: - cmp r5, 0x2 - beq _080ECC86 - b _080ECC9C -_080ECC56: - ldr r0, _080ECC64 @ =0x00000141 - bl PlaySE - bl sub_80EDC40 - strh r5, [r4, 0x12] - b _080ECC7E - .align 2, 0 -_080ECC64: .4byte 0x00000141 -_080ECC68: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bne _080ECC9C - bl sub_80EDDF0 - movs r0, 0 - strh r0, [r4, 0x12] -_080ECC7E: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080ECC9C -_080ECC86: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5A - bne _080ECC9C - ldr r1, _080ECCA4 @ =sub_80ECCA8 - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECC9C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECCA4: .4byte sub_80ECCA8 - thumb_func_end sub_80ECC3C - - thumb_func_start sub_80ECCA8 -sub_80ECCA8: @ 80ECCA8 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0x5 - bhi _080ECD54 - lsls r0, 2 - ldr r1, _080ECCC0 @ =_080ECCC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECCC0: .4byte _080ECCC4 - .align 2, 0 -_080ECCC4: - .4byte _080ECCDC - .4byte _080ECCE6 - .4byte _080ECCF6 - .4byte _080ECD18 - .4byte _080ECD20 - .4byte _080ECD3E -_080ECCDC: - bl sub_80EDED8 - movs r0, 0 - strh r0, [r4, 0x12] - b _080ECD36 -_080ECCE6: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x27 - bls _080ECD54 - b _080ECD36 -_080ECCF6: - ldr r1, _080ECD14 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x30 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl StartBlendTask - b _080ECD36 - .align 2, 0 -_080ECD14: .4byte 0x00003f44 -_080ECD18: - movs r0, 0x2 - bl ShowBg - b _080ECD36 -_080ECD20: - bl IsBlendTaskActive - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080ECD54 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - strh r5, [r4, 0x12] -_080ECD36: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080ECD54 -_080ECD3E: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x32 - bls _080ECD54 - ldr r1, _080ECD5C @ =sub_80ECD60 - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECD54: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECD5C: .4byte sub_80ECD60 - thumb_func_end sub_80ECCA8 - - thumb_func_start sub_80ECD60 -sub_80ECD60: @ 80ECD60 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - ldrb r0, [r6, 0x4] - cmp r0, 0x7 - bls _080ECD6E - b _080ECE96 -_080ECD6E: - lsls r0, 2 - ldr r1, _080ECD78 @ =_080ECD7C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECD78: .4byte _080ECD7C - .align 2, 0 -_080ECD7C: - .4byte _080ECD9C - .4byte _080ECDC4 - .4byte _080ECDCC - .4byte _080ECE10 - .4byte _080ECE26 - .4byte _080ECE52 - .4byte _080ECE64 - .4byte _080ECE78 -_080ECD9C: - ldr r1, _080ECDC0 @ =0x00003f50 - movs r0, 0x50 - bl SetGpuReg - movs r5, 0x10 - str r5, [sp] - movs r4, 0 - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl StartBlendTask - strh r4, [r6, 0x8] - strh r5, [r6, 0xA] - strh r4, [r6, 0x12] - b _080ECE70 - .align 2, 0 -_080ECDC0: .4byte 0x00003f50 -_080ECDC4: - bl sub_80EDF68 - str r0, [r6, 0x14] - b _080ECE70 -_080ECDCC: - bl IsBlendTaskActive - lsls r0, 24 - cmp r0, 0 - bne _080ECE96 - adds r1, r6, 0 - adds r1, 0x3C - movs r0, 0x20 - str r0, [sp] - movs r0, 0x40 - str r0, [sp, 0x4] - movs r0, 0 - movs r2, 0x38 - movs r3, 0x6 - bl BlitBitmapToWindow - ldr r0, _080ECE0C @ =0x0000043c - adds r1, r6, r0 - movs r0, 0x90 - str r0, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - movs r0, 0 - movs r2, 0 - movs r3, 0x28 - bl BlitBitmapToWindow - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - b _080ECE70 - .align 2, 0 -_080ECE0C: .4byte 0x0000043c -_080ECE10: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080ECE96 - ldr r0, [r6, 0x14] - bl DestroySprite - strh r4, [r6, 0x12] - b _080ECE70 -_080ECE26: - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5A - bls _080ECE96 - movs r0, 0x50 - movs r1, 0x4 - bl SetGpuRegBits - movs r0, 0x14 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r0, 0x10 - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl StartBlendTask - b _080ECE70 -_080ECE52: - bl IsBlendTaskActive - lsls r0, 24 - cmp r0, 0 - bne _080ECE96 - movs r0, 0x2 - bl HideBg - b _080ECE70 -_080ECE64: - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0 - strh r0, [r6, 0x12] -_080ECE70: - ldrb r0, [r6, 0x4] - adds r0, 0x1 - strb r0, [r6, 0x4] - b _080ECE96 -_080ECE78: - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bls _080ECE96 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - ldr r1, _080ECEA0 @ =sub_80ECEA4 - adds r0, r6, 0 - bl sub_80ECAA8 -_080ECE96: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080ECEA0: .4byte sub_80ECEA4 - thumb_func_end sub_80ECD60 - - thumb_func_start sub_80ECEA4 -sub_80ECEA4: @ 80ECEA4 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrb r0, [r5, 0x4] - cmp r0, 0x5 - bls _080ECEB2 - b _080ED094 -_080ECEB2: - lsls r0, 2 - ldr r1, _080ECEBC @ =_080ECEC0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECEBC: .4byte _080ECEC0 - .align 2, 0 -_080ECEC0: - .4byte _080ECED8 - .4byte _080ECF64 - .4byte _080ECFA4 - .4byte _080ECFD8 - .4byte _080ED000 - .4byte _080ED064 -_080ECED8: - movs r0, 0 - bl SetVBlankCallback - ldr r0, _080ECF48 @ =gUnknown_8402D34 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _080ECF4C @ =gUnknown_84048CC - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - ldr r2, _080ECF50 @ =0x00007fff - movs r0, 0x6 - movs r1, 0x10 - bl BlendPalettes - ldr r1, _080ECF54 @ =gUnknown_840BB88 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r1, _080ECF58 @ =gUnknown_84048EC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ECF5C @ =gUnknown_8404F7C - movs r0, 0x1 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - movs r0, 0x1 - bl ShowBg - movs r0, 0 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r0, 0x3 - bl HideBg - bl sub_80EEBE4 - ldr r0, _080ECF60 @ =sub_80EC9EC - bl SetVBlankCallback - b _080ECFF0 - .align 2, 0 -_080ECF48: .4byte gUnknown_8402D34 -_080ECF4C: .4byte gUnknown_84048CC -_080ECF50: .4byte 0x00007fff -_080ECF54: .4byte gUnknown_840BB88 -_080ECF58: .4byte gUnknown_84048EC -_080ECF5C: .4byte gUnknown_8404F7C -_080ECF60: .4byte sub_80EC9EC -_080ECF64: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080ECF72 - b _080ED094 -_080ECF72: - ldr r1, _080ECF9C @ =gUnknown_8402D54 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ECFA0 @ =gUnknown_8403FE8 - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - bl ResetBgPositions - movs r0, 0x1 - bl ShowBg - b _080ECFF0 - .align 2, 0 -_080ECF9C: .4byte gUnknown_8402D54 -_080ECFA0: .4byte gUnknown_8403FE8 -_080ECFA4: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080ED094 - movs r0, 0 - bl ShowBg - ldr r0, _080ECFD0 @ =sub_80ED0AC - movs r1, 0 - bl CreateTask - movs r1, 0x2 - negs r1, r1 - ldr r0, _080ECFD4 @ =0x00007fff - str r0, [sp] - movs r0, 0x6 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080ECFF0 - .align 2, 0 -_080ECFD0: .4byte sub_80ED0AC -_080ECFD4: .4byte 0x00007fff -_080ECFD8: - ldr r0, _080ECFF8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080ED094 - ldr r0, _080ECFFC @ =0x00000115 - bl m4aSongNumStart - strh r4, [r5, 0x12] -_080ECFF0: - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080ED094 - .align 2, 0 -_080ECFF8: .4byte gPaletteFade -_080ECFFC: .4byte 0x00000115 -_080ED000: - ldrh r0, [r5, 0x12] - adds r0, 0x1 - strh r0, [r5, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bne _080ED01A - ldr r0, _080ED054 @ =sub_80ED140 - movs r1, 0 - bl CreateTask - bl sub_80ED118 -_080ED01A: - ldrh r0, [r5, 0x12] - cmp r0, 0x1D - bls _080ED094 - movs r0, 0x2 - negs r0, r0 - ldr r2, _080ED058 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r0, _080ED05C @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080ED054 @ =sub_80ED140 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _080ED060 @ =sub_80ED188 - adds r0, r5, 0 - bl sub_80ECAA8 - b _080ED094 - .align 2, 0 -_080ED054: .4byte sub_80ED140 -_080ED058: .4byte 0x00007fff -_080ED05C: .4byte sub_80ED0AC -_080ED060: .4byte sub_80ED188 -_080ED064: - ldr r0, _080ED09C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080ED094 - ldr r0, _080ED0A0 @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080ED0A4 @ =sub_80ED140 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _080ED0A8 @ =sub_80ED188 - adds r0, r5, 0 - bl sub_80ECAA8 -_080ED094: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ED09C: .4byte gPaletteFade -_080ED0A0: .4byte sub_80ED0AC -_080ED0A4: .4byte sub_80ED140 -_080ED0A8: .4byte sub_80ED188 - thumb_func_end sub_80ECEA4 - - thumb_func_start sub_80ED0AC -sub_80ED0AC: @ 80ED0AC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080ED114 @ =gTasks+0x8 - adds r4, r1, r0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080ED0EC - movs r1, 0 - strh r1, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080ED0DE - strh r1, [r4, 0x2] -_080ED0DE: - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r1, 15 - movs r0, 0 - movs r2, 0 - bl ChangeBgY -_080ED0EC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080ED10C - movs r1, 0x90 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r4, 0x6] - movs r0, 0x6 - ldrsh r1, [r4, r0] - movs r0, 0 - movs r2, 0x2 - bl ChangeBgY -_080ED10C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ED114: .4byte gTasks+0x8 - thumb_func_end sub_80ED0AC - - thumb_func_start sub_80ED118 -sub_80ED118: @ 80ED118 - push {lr} - ldr r0, _080ED138 @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED13C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0xC] - pop {r0} - bx r0 - .align 2, 0 -_080ED138: .4byte sub_80ED0AC -_080ED13C: .4byte gTasks - thumb_func_end sub_80ED118 - - thumb_func_start sub_80ED140 -sub_80ED140: @ 80ED140 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080ED184 @ =gTasks+0x8 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080ED17E - movs r0, 0 - strh r0, [r1] - ldrh r2, [r1, 0x2] - movs r3, 0x2 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - bgt _080ED170 - adds r0, r2, 0x1 - strh r0, [r1, 0x2] -_080ED170: - movs r0, 0x2 - ldrsh r1, [r1, r0] - lsls r1, 15 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgY -_080ED17E: - pop {r0} - bx r0 - .align 2, 0 -_080ED184: .4byte gTasks+0x8 - thumb_func_end sub_80ED140 - - thumb_func_start sub_80ED188 -sub_80ED188: @ 80ED188 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r0, 0 - ldrb r0, [r7, 0x4] - cmp r0, 0x6 - bls _080ED19A - b _080ED3F6 -_080ED19A: - lsls r0, 2 - ldr r1, _080ED1A4 @ =_080ED1A8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ED1A4: .4byte _080ED1A8 - .align 2, 0 -_080ED1A8: - .4byte _080ED1C4 - .4byte _080ED214 - .4byte _080ED32C - .4byte _080ED350 - .4byte _080ED360 - .4byte _080ED3BC - .4byte _080ED3D2 -_080ED1C4: - movs r0, 0x2 - negs r0, r0 - ldr r2, _080ED204 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r1, _080ED208 @ =gUnknown_840BB90 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r1, _080ED20C @ =gUnknown_8405414 - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED210 @ =gUnknown_8405890 - movs r0, 0x1 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - movs r0, 0x3 - bl ShowBg - b _080ED3CA - .align 2, 0 -_080ED204: .4byte 0x00007fff -_080ED208: .4byte gUnknown_840BB90 -_080ED20C: .4byte gUnknown_8405414 -_080ED210: .4byte gUnknown_8405890 -_080ED214: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - beq _080ED222 - b _080ED3F6 -_080ED222: - movs r0, 0 - bl SetVBlankCallback - ldr r0, _080ED2FC @ =gUnknown_84053B4 - movs r1, 0x10 - movs r2, 0x60 - bl LoadPalette - ldr r0, _080ED300 @ =gUnknown_8405DA4 - movs r1, 0x50 - movs r2, 0x20 - bl LoadPalette - ldr r0, _080ED304 @ =gUnknown_8406634 - movs r1, 0x60 - movs r2, 0x20 - bl LoadPalette - movs r5, 0x2 - negs r5, r5 - ldr r0, _080ED308 @ =0x00007fff - mov r8, r0 - adds r0, r5, 0 - movs r1, 0x10 - mov r2, r8 - bl BlendPalettes - ldr r1, _080ED30C @ =gUnknown_8405B28 - str r6, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED310 @ =gUnknown_8405CDC - movs r4, 0x1 - str r4, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED314 @ =gUnknown_8406654 - str r6, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED318 @ =gUnknown_84071D0 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED31C @ =gUnknown_8405DC4 - str r6, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED320 @ =gUnknown_840644C - str r4, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - bl ResetBgPositions - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r1, 0xE7 - lsls r1, 9 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgY - movs r1, 0xA0 - lsls r1, 6 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgY - ldr r0, _080ED324 @ =sub_80ED40C - movs r1, 0 - bl CreateTask - adds r0, r7, 0 - bl sub_80ED444 - adds r0, r5, 0 - movs r1, 0x10 - mov r2, r8 - bl BlendPalettes - ldr r0, _080ED328 @ =sub_80EC9EC - bl SetVBlankCallback - b _080ED3CA - .align 2, 0 -_080ED2FC: .4byte gUnknown_84053B4 -_080ED300: .4byte gUnknown_8405DA4 -_080ED304: .4byte gUnknown_8406634 -_080ED308: .4byte 0x00007fff -_080ED30C: .4byte gUnknown_8405B28 -_080ED310: .4byte gUnknown_8405CDC -_080ED314: .4byte gUnknown_8406654 -_080ED318: .4byte gUnknown_84071D0 -_080ED31C: .4byte gUnknown_8405DC4 -_080ED320: .4byte gUnknown_840644C -_080ED324: .4byte sub_80ED40C -_080ED328: .4byte sub_80EC9EC -_080ED32C: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080ED3F6 - movs r1, 0x2 - negs r1, r1 - ldr r0, _080ED34C @ =0x00007fff - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080ED3CA - .align 2, 0 -_080ED34C: .4byte 0x00007fff -_080ED350: - ldr r0, _080ED35C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - b _080ED3C0 - .align 2, 0 -_080ED35C: .4byte gPaletteFade -_080ED360: - ldrh r0, [r7, 0x12] - adds r0, 0x1 - strh r0, [r7, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3B - bls _080ED3F6 - movs r0, 0 - strh r0, [r7, 0x12] - ldr r0, _080ED3B4 @ =sub_80ED40C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - adds r0, r7, 0 - bl sub_80ED4A0 - ldr r0, _080ED3B8 @ =sub_80ED428 - movs r1, 0 - bl CreateTask - movs r1, 0x80 - lsls r1, 9 - movs r0, 0x3 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - bl HideBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - b _080ED3CA - .align 2, 0 -_080ED3B4: .4byte sub_80ED40C -_080ED3B8: .4byte sub_80ED428 -_080ED3BC: - bl IsDma3ManagerBusyWithBgCopy -_080ED3C0: - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080ED3F6 - strh r0, [r7, 0x12] -_080ED3CA: - ldrb r0, [r7, 0x4] - adds r0, 0x1 - strb r0, [r7, 0x4] - b _080ED3F6 -_080ED3D2: - ldrh r0, [r7, 0x12] - adds r0, 0x1 - strh r0, [r7, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3B - bls _080ED3F6 - ldr r0, _080ED404 @ =sub_80ED428 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _080ED408 @ =sub_80ED4C0 - adds r0, r7, 0 - bl sub_80ECAA8 -_080ED3F6: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080ED404: .4byte sub_80ED428 -_080ED408: .4byte sub_80ED4C0 - thumb_func_end sub_80ED188 - - thumb_func_start sub_80ED40C -sub_80ED40C: @ 80ED40C - push {lr} - movs r0, 0x3 - movs r1, 0xE0 - movs r2, 0x2 - bl ChangeBgX - movs r1, 0x88 - lsls r1, 1 - movs r0, 0 - movs r2, 0x1 - bl ChangeBgX - pop {r0} - bx r0 - thumb_func_end sub_80ED40C - - thumb_func_start sub_80ED428 -sub_80ED428: @ 80ED428 - push {lr} - movs r0, 0x2 - movs r1, 0x20 - movs r2, 0x1 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0x24 - movs r2, 0x2 - bl ChangeBgY - pop {r0} - bx r0 - thumb_func_end sub_80ED428 - - thumb_func_start sub_80ED444 -sub_80ED444: @ 80ED444 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - str r0, [r4, 0x1C] - str r0, [r4, 0x20] - ldr r0, _080ED494 @ =gUnknown_840BDA8 - movs r1, 0xA8 - movs r2, 0x50 - movs r3, 0xB - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080ED46E - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080ED498 @ =gSprites - adds r0, r1 - str r0, [r4, 0x20] -_080ED46E: - ldr r0, _080ED49C @ =gUnknown_840BDC0 - movs r1, 0x48 - movs r2, 0x50 - movs r3, 0xC - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080ED48E - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080ED498 @ =gSprites - adds r0, r1 - str r0, [r4, 0x1C] -_080ED48E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ED494: .4byte gUnknown_840BDA8 -_080ED498: .4byte gSprites -_080ED49C: .4byte gUnknown_840BDC0 - thumb_func_end sub_80ED444 - - thumb_func_start sub_80ED4A0 -sub_80ED4A0: @ 80ED4A0 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x1C] - cmp r0, 0 - beq _080ED4AE - bl DestroySprite -_080ED4AE: - ldr r0, [r4, 0x20] - cmp r0, 0 - beq _080ED4B8 - bl DestroySprite -_080ED4B8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ED4A0 - - thumb_func_start sub_80ED4C0 -sub_80ED4C0: @ 80ED4C0 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrb r4, [r5, 0x4] - cmp r4, 0x1 - beq _080ED59C - cmp r4, 0x1 - bgt _080ED4D6 - cmp r4, 0 - beq _080ED4E4 - b _080ED68A -_080ED4D6: - cmp r4, 0x2 - bne _080ED4DC - b _080ED5FC -_080ED4DC: - cmp r4, 0x3 - bne _080ED4E2 - b _080ED658 -_080ED4E2: - b _080ED68A -_080ED4E4: - ldr r0, _080ED584 @ =gUnknown_8407430 - movs r1, 0x10 - movs r2, 0x40 - bl LoadPalette - ldr r0, _080ED588 @ =gUnknown_8405DA4 - movs r1, 0x50 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x2 - negs r0, r0 - ldr r2, _080ED58C @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r1, _080ED590 @ =gUnknown_840BBA0 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r1, _080ED594 @ =gUnknown_8407470 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED598 @ =gUnknown_8407A50 - movs r0, 0x1 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - movs r0, 0x1 - bl ShowBg - movs r0, 0 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r0, 0x3 - bl HideBg - bl ResetBgPositions - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x12 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x1 - bl ClearGpuRegBits - movs r0, 0x4A - movs r1, 0 - bl SetGpuRegBits - movs r1, 0x82 - lsls r1, 6 - movs r0, 0x44 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0x78 - bl SetGpuReg - b _080ED68A - .align 2, 0 -_080ED584: .4byte gUnknown_8407430 -_080ED588: .4byte gUnknown_8405DA4 -_080ED58C: .4byte 0x00007fff -_080ED590: .4byte gUnknown_840BBA0 -_080ED594: .4byte gUnknown_8407470 -_080ED598: .4byte gUnknown_8407A50 -_080ED59C: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080ED68A - ldr r1, _080ED5EC @ =gUnknown_8407B9C - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED5F0 @ =gUnknown_8408D98 - str r4, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ED5F4 @ =gUnknown_203AB00 - movs r0, 0x4 - strh r0, [r1] - ldr r1, _080ED5F8 @ =gUnknown_203AB02 - movs r0, 0x34 - strh r0, [r1] - movs r1, 0xC0 - lsls r1, 5 - movs r0, 0 - movs r2, 0 - bl ChangeBgX - movs r1, 0xF8 - lsls r1, 9 - movs r0, 0 - movs r2, 0 - bl ChangeBgY - b _080ED642 - .align 2, 0 -_080ED5EC: .4byte gUnknown_8407B9C -_080ED5F0: .4byte gUnknown_8408D98 -_080ED5F4: .4byte gUnknown_203AB00 -_080ED5F8: .4byte gUnknown_203AB02 -_080ED5FC: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080ED68A - movs r0, 0x2 - negs r0, r0 - ldr r2, _080ED64C @ =0x00007fff - movs r1, 0 - bl BlendPalettes - movs r0, 0 - bl ShowBg - ldr r0, _080ED650 @ =sub_80ED714 - movs r1, 0 - bl CreateTask - adds r0, r5, 0 - bl sub_80EE4F8 - ldr r0, [r5, 0x18] - movs r1, 0 - movs r2, 0xB4 - movs r3, 0x34 - bl sub_80EE528 - ldr r0, _080ED654 @ =sub_80EE200 - movs r1, 0 - bl CreateTask - bl sub_80ED6D8 - strh r4, [r5, 0x12] -_080ED642: - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080ED68A - .align 2, 0 -_080ED64C: .4byte 0x00007fff -_080ED650: .4byte sub_80ED714 -_080ED654: .4byte sub_80EE200 -_080ED658: - ldrh r0, [r5, 0x12] - adds r0, 0x1 - strh r0, [r5, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bne _080ED66C - adds r0, r5, 0 - bl sub_80ED7D4 -_080ED66C: - adds r0, r5, 0 - bl sub_80EE5C8 - cmp r0, 0 - bne _080ED68A - ldr r0, _080ED694 @ =sub_80EE200 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _080ED68A - ldr r1, _080ED698 @ =sub_80ED898 - adds r0, r5, 0 - bl sub_80ECAA8 -_080ED68A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ED694: .4byte sub_80EE200 -_080ED698: .4byte sub_80ED898 - thumb_func_end sub_80ED4C0 - - thumb_func_start sub_80ED69C -sub_80ED69C: @ 80ED69C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED6C4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080ED6C8 - movs r1, 0x80 - lsls r1, 3 - movs r0, 0x1 - movs r2, 0x2 - bl ChangeBgX - b _080ED6D2 - .align 2, 0 -_080ED6C4: .4byte gTasks -_080ED6C8: - movs r0, 0x1 - movs r1, 0x20 - movs r2, 0x2 - bl ChangeBgX -_080ED6D2: - pop {r0} - bx r0 - thumb_func_end sub_80ED69C - - thumb_func_start sub_80ED6D8 -sub_80ED6D8: @ 80ED6D8 - push {lr} - ldr r0, _080ED6E8 @ =sub_80ED69C - movs r1, 0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080ED6E8: .4byte sub_80ED69C - thumb_func_end sub_80ED6D8 - - thumb_func_start sub_80ED6EC -sub_80ED6EC: @ 80ED6EC - push {lr} - ldr r0, _080ED70C @ =sub_80ED69C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED710 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080ED70C: .4byte sub_80ED69C -_080ED710: .4byte gTasks - thumb_func_end sub_80ED6EC - - thumb_func_start sub_80ED714 -sub_80ED714: @ 80ED714 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080ED75C @ =gTasks+0x8 - adds r2, r1, r0 - movs r0, 0 - ldrsh r1, [r2, r0] - cmp r1, 0 - bne _080ED758 - ldrh r0, [r2, 0x2] - adds r0, 0x1 - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1D - ble _080ED758 - strh r1, [r2, 0x2] - ldrh r0, [r2, 0x4] - movs r1, 0x1 - eors r0, r1 - strh r0, [r2, 0x4] - movs r0, 0x4 - ldrsh r1, [r2, r0] - lsls r1, 15 - movs r0, 0xF8 - lsls r0, 9 - adds r1, r0 - movs r0, 0 - movs r2, 0 - bl ChangeBgY -_080ED758: - pop {r0} - bx r0 - .align 2, 0 -_080ED75C: .4byte gTasks+0x8 - thumb_func_end sub_80ED714 - - thumb_func_start sub_80ED760 -sub_80ED760: @ 80ED760 - push {lr} - ldr r0, _080ED780 @ =sub_80ED714 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED784 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080ED780: .4byte sub_80ED714 -_080ED784: .4byte gTasks - thumb_func_end sub_80ED760 - - thumb_func_start sub_80ED788 -sub_80ED788: @ 80ED788 - push {lr} - ldr r0, _080ED7A8 @ =sub_80ED714 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED7AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080ED7A8: .4byte sub_80ED714 -_080ED7AC: .4byte gTasks - thumb_func_end sub_80ED788 - - thumb_func_start sub_80ED7B0 -sub_80ED7B0: @ 80ED7B0 - push {lr} - ldr r0, _080ED7CC @ =sub_80ED714 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED7D0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r0, [r1, 0xC] - pop {r1} - bx r1 - .align 2, 0 -_080ED7CC: .4byte sub_80ED714 -_080ED7D0: .4byte gTasks - thumb_func_end sub_80ED7B0 - - thumb_func_start sub_80ED7D4 -sub_80ED7D4: @ 80ED7D4 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080ED800 @ =gUnknown_840BDFC - movs r1, 0x94 - lsls r1, 1 - movs r2, 0x70 - movs r3, 0x7 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080ED80C - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080ED804 @ =gSprites - adds r0, r1 - str r0, [r4, 0x24] - ldr r1, _080ED808 @ =sub_80ED818 - str r1, [r0, 0x1C] - b _080ED810 - .align 2, 0 -_080ED800: .4byte gUnknown_840BDFC -_080ED804: .4byte gSprites -_080ED808: .4byte sub_80ED818 -_080ED80C: - movs r0, 0 - str r0, [r4, 0x24] -_080ED810: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ED7D4 - - thumb_func_start sub_80ED818 -sub_80ED818: @ 80ED818 - push {r4,lr} - adds r2, r0, 0 - adds r4, r2, 0 - adds r4, 0x2E - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x1 - beq _080ED848 - cmp r0, 0x1 - bgt _080ED832 - cmp r0, 0 - beq _080ED838 - b _080ED892 -_080ED832: - cmp r0, 0x2 - beq _080ED866 - b _080ED892 -_080ED838: - ldrh r0, [r2, 0x20] - lsls r0, 5 - strh r0, [r4, 0x2] - movs r0, 0xA0 - strh r0, [r4, 0x4] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_080ED848: - ldrh r0, [r4, 0x2] - ldrh r1, [r4, 0x4] - subs r0, r1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 21 - strh r0, [r2, 0x20] - cmp r0, 0x34 - bgt _080ED892 - bl sub_80ED6EC - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _080ED892 -_080ED866: - ldrh r0, [r4, 0x2] - subs r0, 0x20 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 21 - strh r0, [r2, 0x20] - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bgt _080ED892 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - adds r0, r2, 0 - bl DestroySprite -_080ED892: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ED818 - - thumb_func_start sub_80ED898 -sub_80ED898: @ 80ED898 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0xF - bls _080ED8A6 - b _080EDA98 -_080ED8A6: - lsls r0, 2 - ldr r1, _080ED8B0 @ =_080ED8B4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ED8B0: .4byte _080ED8B4 - .align 2, 0 -_080ED8B4: - .4byte _080ED8F4 - .4byte _080ED8F8 - .4byte _080ED910 - .4byte _080ED918 - .4byte _080ED936 - .4byte _080ED946 - .4byte _080ED95E - .4byte _080ED97C - .4byte _080ED998 - .4byte _080ED9A0 - .4byte _080ED9BA - .4byte _080ED9D2 - .4byte _080ED9DC - .4byte _080EDA1C - .4byte _080EDA5C - .4byte _080EDA7C -_080ED8F4: - movs r0, 0 - b _080EDA6C -_080ED8F8: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bhi _080ED908 - b _080EDAC4 -_080ED908: - adds r0, r4, 0 - bl sub_80EE5E4 - b _080EDA6E -_080ED910: - adds r0, r4, 0 - bl sub_80EE850 - b _080EDA64 -_080ED918: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bhi _080ED928 - b _080EDAC4 -_080ED928: - bl sub_80ED760 - adds r0, r4, 0 - bl sub_80EDF94 - movs r0, 0 - b _080EDA6C -_080ED936: - ldrb r0, [r4, 0x6] - cmp r0, 0 - bne _080ED93E - b _080EDAC4 -_080ED93E: - adds r0, r4, 0 - bl sub_80EE6A4 - b _080EDA6E -_080ED946: - adds r0, r4, 0 - bl sub_80EE850 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _080ED956 - b _080EDAC4 -_080ED956: - bl sub_80ED788 - strh r5, [r4, 0x12] - b _080EDA6E -_080ED95E: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bhi _080ED96E - b _080EDAC4 -_080ED96E: - ldr r0, [r4, 0x18] - movs r1, 0x8 - movs r2, 0xC - movs r3, 0x5 - bl sub_80EE970 - b _080EDA6E -_080ED97C: - adds r0, r4, 0 - bl sub_80EE850 - lsls r0, 24 - cmp r0, 0 - beq _080ED98A - b _080EDAC4 -_080ED98A: - ldr r0, [r4, 0x18] - movs r1, 0x8 - movs r2, 0xC - movs r3, 0x5 - bl sub_80EE970 - b _080EDA6E -_080ED998: - adds r0, r4, 0 - bl sub_80EE850 - b _080EDA64 -_080ED9A0: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bhi _080ED9B0 - b _080EDAC4 -_080ED9B0: - adds r0, r4, 0 - bl sub_80EEA94 - movs r0, 0 - b _080EDA6C -_080ED9BA: - bl sub_80ED7B0 - lsls r0, 24 - cmp r0, 0 - beq _080ED9C6 - b _080EDAC4 -_080ED9C6: - bl sub_80ED760 - adds r0, r4, 0 - bl sub_80EDAF0 - b _080EDA6E -_080ED9D2: - movs r0, 0 - bl HideBg - movs r0, 0 - b _080EDA6C -_080ED9DC: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x30 - bne _080ED9FA - ldr r0, _080EDA18 @ =0x00007fff - str r0, [sp] - movs r0, 0x6 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080ED9FA: - ldrh r0, [r4, 0x12] - cmp r0, 0x78 - bls _080EDAC4 - adds r0, r4, 0 - bl sub_80EDB70 - adds r0, r4, 0 - bl sub_80EDBAC - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - movs r0, 0 - b _080EDAC2 - .align 2, 0 -_080EDA18: .4byte 0x00007fff -_080EDA1C: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bls _080EDAC4 - add r1, sp, 0x4 - ldr r2, _080EDA50 @ =0x00007fff - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _080EDA54 @ =gPlttBufferUnfaded + 0x20 - ldr r2, _080EDA58 @ =0x01000020 - add r0, sp, 0x4 - bl CpuSet - movs r1, 0x2 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _080EDA6E - .align 2, 0 -_080EDA50: .4byte 0x00007fff -_080EDA54: .4byte gPlttBufferUnfaded + 0x20 -_080EDA58: .4byte 0x01000020 -_080EDA5C: - ldr r0, _080EDA78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 -_080EDA64: - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080EDAC4 -_080EDA6C: - strh r0, [r4, 0x12] -_080EDA6E: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080EDAC4 - .align 2, 0 -_080EDA78: .4byte gPaletteFade -_080EDA7C: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3C - bls _080EDAC4 - ldr r1, _080EDA94 @ =sub_80EDBE8 - adds r0, r4, 0 - bl sub_80ECAA8 - b _080EDAC4 - .align 2, 0 -_080EDA94: .4byte sub_80EDBE8 -_080EDA98: - ldr r0, _080EDACC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080EDAC4 - ldr r0, _080EDAD0 @ =0xffff0064 - ldr r2, _080EDAD4 @ =0x00007fff - movs r1, 0 - bl BlendPalettes - ldr r1, [r4, 0x18] - movs r0, 0 - strh r0, [r1, 0x24] - ldr r1, [r4, 0x18] - movs r0, 0xB4 - strh r0, [r1, 0x20] - movs r0, 0x1 - strb r0, [r4, 0x4] - movs r0, 0x1E -_080EDAC2: - strh r0, [r4, 0x12] -_080EDAC4: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EDACC: .4byte gMain -_080EDAD0: .4byte 0xffff0064 -_080EDAD4: .4byte 0x00007fff - thumb_func_end sub_80ED898 - - thumb_func_start sub_80EDAD8 -sub_80EDAD8: @ 80EDAD8 - push {lr} - ldrb r3, [r0, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r0, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - bl CalcCenterToCornerVec - pop {r0} - bx r0 - thumb_func_end sub_80EDAD8 - - thumb_func_start sub_80EDAF0 -sub_80EDAF0: @ 80EDAF0 - push {r4-r7,lr} - adds r7, r0, 0 - movs r5, 0 -_080EDAF6: - movs r6, 0x1 - ands r6, r5 - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 20 - lsrs r2, r5, 31 - adds r2, r5, r2 - asrs r2, 1 - lsls r2, 22 - movs r0, 0xC4 - lsls r0, 14 - adds r1, r0 - asrs r1, 16 - movs r0, 0x90 - lsls r0, 15 - adds r2, r0 - asrs r2, 16 - ldr r0, _080EDB68 @ =gUnknown_840BE4C - movs r3, 0x8 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EDB5C - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080EDB6C @ =gSprites - adds r4, r0, r1 - lsls r1, r5, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - lsls r1, r5, 2 - adds r0, r7, 0 - adds r0, 0x28 - adds r2, r0, r1 - str r4, [r2] - cmp r6, 0 - beq _080EDB56 - ldrb r0, [r4, 0x1] - movs r1, 0x3F - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - strb r1, [r4, 0x1] -_080EDB56: - ldr r0, [r2] - bl sub_80EDAD8 -_080EDB5C: - adds r5, 0x1 - cmp r5, 0x3 - ble _080EDAF6 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EDB68: .4byte gUnknown_840BE4C -_080EDB6C: .4byte gSprites - thumb_func_end sub_80EDAF0 - - thumb_func_start sub_80EDB70 -sub_80EDB70: @ 80EDB70 - push {r4,lr} - adds r4, r0, 0 - ldr r1, [r4, 0x18] - ldrh r0, [r1, 0x24] - ldrh r2, [r1, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldr r1, [r4, 0x18] - ldrh r0, [r1, 0x26] - ldrh r2, [r1, 0x22] - adds r0, r2 - strh r0, [r1, 0x22] - ldr r0, [r4, 0x18] - movs r1, 0 - movs r2, 0x2A - bl sub_8007FFC - ldr r0, [r4, 0x18] - ldr r1, _080EDBA4 @ =SpriteCallbackDummy - str r1, [r0, 0x1C] - movs r1, 0x1 - bl StartSpriteAffineAnim - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EDBA4: .4byte SpriteCallbackDummy - thumb_func_end sub_80EDB70 - - thumb_func_start nullsub_83 -nullsub_83: @ 80EDBA8 - bx lr - thumb_func_end nullsub_83 - - thumb_func_start sub_80EDBAC -sub_80EDBAC: @ 80EDBAC - push {r4-r7,lr} - adds r7, r0, 0 - movs r6, 0 - ldr r5, _080EDBE0 @ =gUnknown_840BBB8 -_080EDBB4: - lsls r0, r6, 2 - adds r4, r7, 0 - adds r4, 0x28 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, [r4] - ldr r1, _080EDBE4 @ =nullsub_83 - str r1, [r0, 0x1C] - ldrb r1, [r5] - ldrb r2, [r5, 0x1] - bl sub_8007FFC - adds r5, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _080EDBB4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EDBE0: .4byte gUnknown_840BBB8 -_080EDBE4: .4byte nullsub_83 - thumb_func_end sub_80EDBAC - - thumb_func_start sub_80EDBE8 -sub_80EDBE8: @ 80EDBE8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _080EDBF8 - cmp r0, 0x1 - beq _080EDC0C - b _080EDC34 -_080EDBF8: - movs r2, 0x80 - lsls r2, 3 - movs r0, 0 - movs r1, 0 - bl FillPalette - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080EDC34 -_080EDC0C: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080EDC34 - ldrb r0, [r4, 0x5] - bl DestroyTask - adds r0, r4, 0 - bl Free - movs r0, 0x2 - bl DisableInterrupts - movs r0, 0 - bl SetHBlankCallback - ldr r0, _080EDC3C @ =CB2_InitTitleScreen - bl SetMainCallback2 -_080EDC34: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EDC3C: .4byte CB2_InitTitleScreen - thumb_func_end sub_80EDBE8 - - thumb_func_start sub_80EDC40 -sub_80EDC40: @ 80EDC40 - push {r4-r6,lr} - movs r5, 0 - ldr r4, _080EDCE4 @ =gUnknown_840BBC0 -_080EDC46: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x4 - bls _080EDC46 - ldr r0, _080EDCE8 @ =gUnknown_840BBE8 - bl LoadSpritePalettes - ldr r6, _080EDCEC @ =gUnknown_203AB0E - movs r0, 0x60 - strh r0, [r6] - ldr r5, _080EDCF0 @ =gUnknown_203AB10 - movs r0, 0x10 - strh r0, [r5] - ldr r1, _080EDCF4 @ =gUnknown_203AB12 - movs r0, 0x7 - strh r0, [r1] - ldr r0, _080EDCF8 @ =gUnknown_203AB14 - movs r2, 0x5 - strh r2, [r0] - ldr r1, _080EDCFC @ =gUnknown_203AB16 - movs r0, 0x8 - strh r0, [r1] - ldr r1, _080EDD00 @ =gUnknown_203AB18 - movs r0, 0x5A - strh r0, [r1] - ldr r1, _080EDD04 @ =gUnknown_203AB1A - movs r0, 0x78 - strh r0, [r1] - ldr r0, _080EDD08 @ =gUnknown_203AB1E - movs r1, 0x1 - strh r1, [r0] - ldr r0, _080EDD0C @ =gUnknown_203AB20 - strh r1, [r0] - ldr r0, _080EDD10 @ =gUnknown_203AB22 - strh r2, [r0] - ldr r0, _080EDD14 @ =gUnknown_203AB24 - strh r2, [r0] - ldr r4, _080EDD18 @ =gUnknown_203AB28 - ldr r0, [r4] - cmp r0, 0 - bne _080EDCA2 - ldr r0, _080EDD1C @ =0x151b9245 - str r0, [r4] -_080EDCA2: - ldr r0, _080EDD20 @ =gUnknown_840BC6C - movs r1, 0xF8 - movs r2, 0x37 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EDCDE - ldr r0, _080EDD24 @ =gSprites - lsls r3, r1, 4 - adds r3, r1 - lsls r3, 2 - adds r2, r3, r0 - movs r1, 0xF8 - lsls r1, 4 - strh r1, [r2, 0x2E] - movs r1, 0xDC - lsls r1, 2 - strh r1, [r2, 0x30] - ldrh r1, [r6] - strh r1, [r2, 0x32] - ldrh r1, [r5] - strh r1, [r2, 0x34] - adds r0, r3 - adds r0, 0x3A - ldr r1, [r4] - bl StoreWordInTwoHalfwords -_080EDCDE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EDCE4: .4byte gUnknown_840BBC0 -_080EDCE8: .4byte gUnknown_840BBE8 -_080EDCEC: .4byte gUnknown_203AB0E -_080EDCF0: .4byte gUnknown_203AB10 -_080EDCF4: .4byte gUnknown_203AB12 -_080EDCF8: .4byte gUnknown_203AB14 -_080EDCFC: .4byte gUnknown_203AB16 -_080EDD00: .4byte gUnknown_203AB18 -_080EDD04: .4byte gUnknown_203AB1A -_080EDD08: .4byte gUnknown_203AB1E -_080EDD0C: .4byte gUnknown_203AB20 -_080EDD10: .4byte gUnknown_203AB22 -_080EDD14: .4byte gUnknown_203AB24 -_080EDD18: .4byte gUnknown_203AB28 -_080EDD1C: .4byte 0x151b9245 -_080EDD20: .4byte gUnknown_840BC6C -_080EDD24: .4byte gSprites - thumb_func_end sub_80EDC40 - - thumb_func_start sub_80EDD28 -sub_80EDD28: @ 80EDD28 - push {r4-r7,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 16 - lsrs r3, r1, 16 - lsls r2, 16 - lsrs r2, 16 - ldr r0, _080EDDCC @ =gUnknown_203AB12 - ldrh r0, [r0] - ands r2, r0 - adds r2, 0x2 - lsls r2, 16 - lsrs r4, r2, 16 - ldr r1, _080EDDD0 @ =gUnknown_203AB2C - ldrh r0, [r1] - adds r2, r0, 0 - adds r0, r2, 0x1 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080EDD5C - movs r6, 0x3 - negs r6, r6 - adds r0, r6, 0 - strh r0, [r1] -_080EDD5C: - lsls r1, r5, 16 - asrs r1, 16 - lsls r0, r4, 16 - asrs r7, r0, 16 - adds r1, r7 - lsls r0, r3, 16 - asrs r0, 16 - lsls r2, 16 - asrs r6, r2, 16 - adds r0, r6 - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - asrs r4, r1, 16 - ldr r0, _080EDDD4 @ =0xffff0000 - adds r1, r0 - lsrs r1, 16 - cmp r1, 0xEE - bhi _080EDDC6 - ldr r0, _080EDDD8 @ =gUnknown_840BC84 - lsls r1, r3, 16 - asrs r5, r1, 16 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080EDDC6 - ldr r0, _080EDDDC @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldr r0, _080EDDE0 @ =gUnknown_203AB22 - ldrh r0, [r0] - lsls r4, r0 - strh r4, [r1, 0x2E] - ldr r2, _080EDDE4 @ =gUnknown_203AB24 - adds r0, r5, 0 - ldrh r2, [r2] - lsls r0, r2 - strh r0, [r1, 0x30] - ldr r0, _080EDDE8 @ =gUnknown_203AB1E - ldrh r0, [r0] - muls r0, r7 - strh r0, [r1, 0x32] - ldr r0, _080EDDEC @ =gUnknown_203AB20 - ldrh r0, [r0] - muls r0, r6 - strh r0, [r1, 0x34] -_080EDDC6: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EDDCC: .4byte gUnknown_203AB12 -_080EDDD0: .4byte gUnknown_203AB2C -_080EDDD4: .4byte 0xffff0000 -_080EDDD8: .4byte gUnknown_840BC84 -_080EDDDC: .4byte gSprites -_080EDDE0: .4byte gUnknown_203AB22 -_080EDDE4: .4byte gUnknown_203AB24 -_080EDDE8: .4byte gUnknown_203AB1E -_080EDDEC: .4byte gUnknown_203AB20 - thumb_func_end sub_80EDD28 - - thumb_func_start sub_80EDDF0 -sub_80EDDF0: @ 80EDDF0 - push {lr} - ldr r0, _080EDE00 @ =sub_80EDE04 - movs r1, 0x1 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080EDE00: .4byte sub_80EDE04 - thumb_func_end sub_80EDDF0 - - thumb_func_start sub_80EDE04 -sub_80EDE04: @ 80EDE04 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r0, 2 - add r0, r9 - lsls r0, 3 - ldr r1, _080EDEB0 @ =gTasks+0x8 - adds r0, r1 - mov r8, r0 - ldrh r1, [r0, 0x4] - adds r1, 0x1 - strh r1, [r0, 0x4] - ldrh r0, [r0, 0x6] - adds r0, 0x1 - mov r2, r8 - strh r0, [r2, 0x6] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x6 - ble _080EDECA - movs r0, 0 - strh r0, [r2, 0x4] - ldrb r6, [r2] - ldr r0, _080EDEB4 @ =gUnknown_840BC84 - ldr r1, _080EDEB8 @ =gUnknown_840BC08 - lsls r6, 2 - adds r6, r1 - movs r3, 0 - ldrsh r1, [r6, r3] - movs r3, 0x2 - ldrsh r2, [r6, r3] - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r5, _080EDEBC @ =gSprites - adds r7, r4, r5 - adds r0, r7, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r5, 0x1C - adds r4, r5 - ldr r0, _080EDEC0 @ =sub_80EE40C - str r0, [r4] - ldrh r0, [r6, 0x2] - lsls r0, 4 - strh r0, [r7, 0x30] - movs r0, 0x78 - strh r0, [r7, 0x32] - mov r1, r8 - ldrh r0, [r1, 0x2] - strh r0, [r7, 0x34] - lsls r0, 16 - cmp r0, 0 - bge _080EDE88 - movs r0, 0x1 - strh r0, [r7, 0x34] -_080EDE88: - mov r2, r8 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bls _080EDECA - ldrh r0, [r2, 0x2] - adds r0, 0x1 - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EDEC4 - mov r0, r9 - bl DestroyTask - b _080EDECA - .align 2, 0 -_080EDEB0: .4byte gTasks+0x8 -_080EDEB4: .4byte gUnknown_840BC84 -_080EDEB8: .4byte gUnknown_840BC08 -_080EDEBC: .4byte gSprites -_080EDEC0: .4byte sub_80EE40C -_080EDEC4: - movs r0, 0 - mov r3, r8 - strh r0, [r3] -_080EDECA: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80EDE04 - - thumb_func_start sub_80EDED8 -sub_80EDED8: @ 80EDED8 - push {lr} - ldr r0, _080EDEE8 @ =sub_80EDEEC - movs r1, 0x2 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080EDEE8: .4byte sub_80EDEEC - thumb_func_end sub_80EDED8 - - thumb_func_start sub_80EDEEC -sub_80EDEEC: @ 80EDEEC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080EDF5C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080EDF44 - ldrh r1, [r4, 0x2] - ldrb r2, [r4, 0x2] - adds r0, r1, 0x4 - strh r0, [r4, 0x2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bls _080EDF1A - subs r0, r1, 0x5 - strh r0, [r4, 0x2] -_080EDF1A: - ldr r0, _080EDF60 @ =gUnknown_840BCBC - ldr r1, _080EDF64 @ =gUnknown_840BC08 - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - movs r3, 0x3 - bl CreateSprite - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080EDF44 - adds r0, r5, 0 - bl DestroyTask -_080EDF44: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _080EDF56 - movs r0, 0 - strh r0, [r4] -_080EDF56: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EDF5C: .4byte gTasks+0x8 -_080EDF60: .4byte gUnknown_840BCBC -_080EDF64: .4byte gUnknown_840BC08 - thumb_func_end sub_80EDEEC - - thumb_func_start sub_80EDF68 -sub_80EDF68: @ 80EDF68 - push {lr} - ldr r0, _080EDF8C @ =gUnknown_840BCDC - movs r1, 0x78 - movs r2, 0x46 - movs r3, 0x4 - bl CreateSprite - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080EDF90 @ =gSprites - adds r0, r1 - pop {r1} - bx r1 - .align 2, 0 -_080EDF8C: .4byte gUnknown_840BCDC -_080EDF90: .4byte gSprites - thumb_func_end sub_80EDF68 - - thumb_func_start sub_80EDF94 -sub_80EDF94: @ 80EDF94 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strb r0, [r4, 0x6] - ldr r0, _080EDFD0 @ =sub_80EE024 - movs r1, 0x4 - bl CreateTask - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x5 - adds r2, r4, 0 - bl SetWordTaskArg - ldr r0, _080EDFD4 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - movs r0, 0x40 - strh r0, [r4, 0xE] - movs r0, 0 - bl GetBgX - strh r0, [r4, 0x10] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EDFD0: .4byte sub_80EE024 -_080EDFD4: .4byte gTasks - thumb_func_end sub_80EDF94 - - thumb_func_start sub_80EDFD8 -sub_80EDFD8: @ 80EDFD8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r4, 15 - movs r0, 0xF8 - lsls r0, 9 - adds r4, r0 - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - mov r1, r8 - movs r2, 0 - bl ChangeBgX - lsls r5, 8 - movs r0, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl ChangeBgX - lsls r6, 8 - movs r0, 0 - adds r1, r6, 0 - movs r2, 0x2 - bl ChangeBgY - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80EDFD8 - - thumb_func_start sub_80EE024 -sub_80EE024: @ 80EE024 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080EE048 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bhi _080EE11C - lsls r0, 2 - ldr r1, _080EE04C @ =_080EE050 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080EE048: .4byte gTasks+0x8 -_080EE04C: .4byte _080EE050 - .align 2, 0 -_080EE050: - .4byte _080EE068 - .4byte _080EE07A - .4byte _080EE094 - .4byte _080EE0BC - .4byte _080EE0EE - .4byte _080EE114 -_080EE068: - movs r0, 0x2 - strh r0, [r5, 0xE] - movs r0, 0 - strh r0, [r5, 0x2] - movs r0, 0x6 - strh r0, [r5, 0x10] - movs r0, 0x20 - strh r0, [r5, 0x12] - b _080EE10C -_080EE07A: - ldrh r0, [r5, 0x6] - subs r0, 0x2 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE094: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xE - bne _080EE0AE - adds r0, r2, 0 - movs r1, 0x5 - bl GetWordTaskArg - movs r1, 0x1 - strb r1, [r0, 0x6] -_080EE0AE: - movs r2, 0x2 - ldrsh r0, [r5, r2] - cmp r0, 0xF - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE0BC: - ldrh r0, [r5, 0x6] - adds r0, 0x8 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080EE0E0 - bl sub_80EE160 - movs r0, 0x20 - strh r0, [r5, 0x10] - movs r0, 0x30 - strh r0, [r5, 0x12] - movs r0, 0x3 - strh r0, [r5, 0xE] -_080EE0E0: - movs r3, 0x2 - ldrsh r0, [r5, r3] - cmp r0, 0x7 - ble _080EE11C - movs r0, 0 - strh r0, [r5, 0x2] - b _080EE10C -_080EE0EE: - ldrh r0, [r5, 0x6] - subs r0, 0x8 - strh r0, [r5, 0x6] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080EE11C - movs r1, 0 - strh r1, [r5, 0xE] - movs r0, 0x40 - strh r0, [r5, 0x6] - strh r1, [r5, 0x2] -_080EE10C: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _080EE11C -_080EE114: - adds r0, r2, 0 - bl DestroyTask - b _080EE156 -_080EE11C: - movs r4, 0x6 - ldrsh r3, [r5, r4] - ldr r4, _080EE15C @ =gSineTable - adds r0, r3, 0 - adds r0, 0x40 - lsls r0, 1 - adds r0, r4 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r2, 0x12 - ldrsh r0, [r5, r2] - muls r1, r0 - asrs r1, 8 - negs r1, r1 - movs r0, 0x10 - ldrsh r2, [r5, r0] - lsls r3, 1 - adds r3, r4 - movs r4, 0 - ldrsh r0, [r3, r4] - muls r0, r2 - asrs r0, 8 - subs r2, r0 - movs r3, 0xE - ldrsh r0, [r5, r3] - movs r4, 0x8 - ldrsh r3, [r5, r4] - bl sub_80EDFD8 -_080EE156: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE15C: .4byte gSineTable - thumb_func_end sub_80EE024 - - thumb_func_start sub_80EE160 -sub_80EE160: @ 80EE160 - push {r4,lr} - ldr r4, _080EE1BC @ =gUnknown_840BE8C - adds r0, r4, 0 - movs r1, 0x84 - movs r2, 0x4E - movs r3, 0x6 - bl CreateSprite - adds r0, r4, 0 - movs r1, 0x84 - movs r2, 0x76 - movs r3, 0x6 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EE1B4 - ldr r0, _080EE1C0 @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - ldrb r2, [r4, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x40 - orrs r0, r2 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - strb r1, [r4, 0x3] - adds r0, r4, 0 - bl sub_80EDAD8 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080EE1B4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE1BC: .4byte gUnknown_840BE8C -_080EE1C0: .4byte gSprites - thumb_func_end sub_80EE160 - - thumb_func_start sub_80EE1C4 -sub_80EE1C4: @ 80EE1C4 - push {lr} - adds r3, r0, 0 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE1FA - adds r0, r3, 0 - bl DestroySprite -_080EE1FA: - pop {r0} - bx r0 - thumb_func_end sub_80EE1C4 - - thumb_func_start sub_80EE200 -sub_80EE200: @ 80EE200 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080EE220 @ =gTasks+0x8 - adds r1, r0, r1 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080EE224 - cmp r0, 0x1 - beq _080EE232 - b _080EE28A - .align 2, 0 -_080EE220: .4byte gTasks+0x8 -_080EE224: - movs r3, 0x80 - lsls r3, 3 - adds r0, r3, 0 - strh r0, [r1, 0x2] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080EE232: - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080EE250 - ldrh r2, [r1, 0x2] - movs r3, 0x2 - ldrsh r0, [r1, r3] - cmp r0, 0x10 - ble _080EE250 - adds r0, r2, 0 - subs r0, 0x10 - strh r0, [r1, 0x2] -_080EE250: - movs r0, 0x2 - ldrsh r1, [r1, r0] - movs r0, 0 - movs r2, 0x1 - bl ChangeBgX - ldr r5, _080EE290 @ =gUnknown_203AB30 - str r0, [r5] - ldr r1, _080EE294 @ =0x00007fff - cmp r0, r1 - bls _080EE270 - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits -_080EE270: - ldr r1, [r5] - ldr r0, _080EE298 @ =0x0000eeff - cmp r1, r0 - bls _080EE28A - movs r1, 0xEF - lsls r1, 8 - movs r0, 0 - movs r2, 0 - bl ChangeBgX - adds r0, r4, 0 - bl DestroyTask -_080EE28A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE290: .4byte gUnknown_203AB30 -_080EE294: .4byte 0x00007fff -_080EE298: .4byte 0x0000eeff - thumb_func_end sub_80EE200 - - thumb_func_start sub_80EE29C -sub_80EE29C: @ 80EE29C - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r2, [r5, 0x2E] - ldrh r0, [r5, 0x32] - subs r2, r0 - strh r2, [r5, 0x2E] - ldrh r1, [r5, 0x34] - ldrh r0, [r5, 0x30] - adds r1, r0 - strh r1, [r5, 0x30] - ldrh r0, [r5, 0x36] - adds r0, 0x30 - strh r0, [r5, 0x36] - lsls r2, 16 - asrs r2, 20 - strh r2, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldr r1, _080EE340 @ =gSineTable - lsls r0, 16 - asrs r0, 20 - adds r0, 0x40 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 21 - strh r0, [r5, 0x26] - ldrh r0, [r5, 0x38] - adds r0, 0x1 - strh r0, [r5, 0x38] - movs r1, 0x38 - ldrsh r0, [r5, r1] - ldr r1, _080EE344 @ =gUnknown_203AB16 - ldrh r1, [r1] - bl __modsi3 - cmp r0, 0 - beq _080EE324 - adds r4, r5, 0 - adds r4, 0x3A - adds r0, r4, 0 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r1, [sp] - ldr r0, _080EE348 @ =0x41c64e6d - muls r1, r0 - ldr r3, _080EE34C @ =0x00006073 - adds r1, r3 - str r1, [sp] - adds r0, r4, 0 - bl StoreWordInTwoHalfwords - ldr r2, [sp] - lsrs r2, 16 - str r2, [sp] - movs r1, 0x20 - ldrsh r0, [r5, r1] - ldrh r1, [r5, 0x26] - ldrh r3, [r5, 0x22] - adds r1, r3 - lsls r1, 16 - asrs r1, 16 - bl sub_80EDD28 -_080EE324: - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - bge _080EE336 - adds r0, r5, 0 - bl DestroySprite -_080EE336: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE340: .4byte gSineTable -_080EE344: .4byte gUnknown_203AB16 -_080EE348: .4byte 0x41c64e6d -_080EE34C: .4byte 0x00006073 - thumb_func_end sub_80EE29C - - thumb_func_start sub_80EE350 -sub_80EE350: @ 80EE350 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x32] - ldrh r1, [r4, 0x2E] - adds r0, r1 - strh r0, [r4, 0x2E] - ldrh r2, [r4, 0x34] - ldrh r1, [r4, 0x30] - adds r0, r2, r1 - strh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - adds r1, 0x1 - strh r1, [r4, 0x36] - ldrh r0, [r4, 0x38] - adds r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrh r0, [r4, 0x2E] - ldr r1, _080EE3F8 @ =gUnknown_203AB22 - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x20] - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldr r1, _080EE3FC @ =gUnknown_203AB24 - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x22] - ldr r1, _080EE400 @ =gUnknown_203AB1C - ldrh r0, [r1] - cmp r0, 0 - beq _080EE3A4 - lsls r0, r2, 16 - cmp r0, 0 - bge _080EE3A4 - movs r2, 0x38 - ldrsh r0, [r4, r2] - ldrh r1, [r1] - asrs r0, r1 - strh r0, [r4, 0x26] -_080EE3A4: - movs r0, 0x3C - ldrsh r1, [r4, r0] - ldr r0, _080EE404 @ =gUnknown_203AB18 - ldrh r0, [r0] - cmp r1, r0 - ble _080EE3DC - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsrs r1, r2, 2 - movs r0, 0x1 - eors r1, r0 - ands r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r2, 0x3C - ldrsh r1, [r4, r2] - ldr r0, _080EE408 @ =gUnknown_203AB1A - ldrh r0, [r0] - cmp r1, r0 - ble _080EE3DC - adds r0, r4, 0 - bl DestroySprite -_080EE3DC: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - cmp r0, 0xA0 - bls _080EE3F0 - adds r0, r4, 0 - bl DestroySprite -_080EE3F0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE3F8: .4byte gUnknown_203AB22 -_080EE3FC: .4byte gUnknown_203AB24 -_080EE400: .4byte gUnknown_203AB1C -_080EE404: .4byte gUnknown_203AB18 -_080EE408: .4byte gUnknown_203AB1A - thumb_func_end sub_80EE350 - - thumb_func_start sub_80EE40C -sub_80EE40C: @ 80EE40C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080EE490 - subs r0, r1, 0x1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - cmp r0, 0x56 - ble _080EE438 - movs r0, 0x4A - strh r0, [r4, 0x22] - movs r0, 0x94 - lsls r0, 3 - strh r0, [r4, 0x30] -_080EE438: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4D4 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080EE46C - ldrh r0, [r4, 0x20] - adds r1, r0, 0 - adds r1, 0x1A - strh r1, [r4, 0x20] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xBC - ble _080EE486 - movs r2, 0xBC - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4, 0x20] - movs r0, 0x1 - b _080EE484 -_080EE46C: - ldrh r0, [r4, 0x20] - adds r1, r0, 0 - subs r1, 0x1A - strh r1, [r4, 0x20] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x33 - bgt _080EE486 - movs r0, 0x68 - subs r0, r1 - strh r0, [r4, 0x20] - movs r0, 0 -_080EE484: - strh r0, [r4, 0x2E] -_080EE486: - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - b _080EE4D4 -_080EE490: - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080EE49E - adds r0, r4, 0 - bl DestroySprite -_080EE49E: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4B4 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_080EE4B4: - ldrh r0, [r4, 0x30] - adds r0, 0x4 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x32 - ble _080EE4D4 - adds r0, r4, 0 - bl DestroySprite -_080EE4D4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EE40C - - thumb_func_start sub_80EE4DC -sub_80EE4DC: @ 80EE4DC - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4F2 - adds r0, r2, 0 - bl DestroySprite -_080EE4F2: - pop {r0} - bx r0 - thumb_func_end sub_80EE4DC - - thumb_func_start sub_80EE4F8 -sub_80EE4F8: @ 80EE4F8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080EE520 @ =gUnknown_840BD88 - movs r1, 0 - movs r2, 0 - movs r3, 0x9 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080EE524 @ =gSprites - adds r1, r0 - str r1, [r4, 0x18] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE520: .4byte gUnknown_840BD88 -_080EE524: .4byte gSprites - thumb_func_end sub_80EE4F8 - - thumb_func_start sub_80EE528 -sub_80EE528: @ 80EE528 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - adds r4, r0, 0 - adds r0, r2, 0 - adds r5, r3, 0 - lsls r1, 16 - lsls r0, 16 - lsls r5, 16 - lsrs r5, 16 - lsrs r2, r1, 16 - mov r9, r2 - asrs r1, 16 - lsls r2, r1, 4 - movs r3, 0 - mov r8, r3 - strh r2, [r4, 0x2E] - lsrs r6, r0, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 4 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x30] - strh r5, [r4, 0x32] - strh r6, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - mov r2, r9 - strh r2, [r4, 0x20] - movs r0, 0x64 - strh r0, [r4, 0x22] - ldr r0, _080EE57C @ =sub_80EE580 - str r0, [r4, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EE57C: .4byte sub_80EE580 - thumb_func_end sub_80EE528 - - thumb_func_start sub_80EE580 -sub_80EE580: @ 80EE580 - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x36] - adds r0, 0x1 - strh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080EE5A0 - ldrh r1, [r2, 0x30] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r0, 0x1 - ble _080EE5A0 - subs r0, r1, 0x1 - strh r0, [r2, 0x30] -_080EE5A0: - ldrh r0, [r2, 0x30] - ldrh r4, [r2, 0x2E] - adds r0, r4 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - ldrh r3, [r2, 0x34] - movs r4, 0x34 - ldrsh r1, [r2, r4] - cmp r0, r1 - blt _080EE5BE - strh r3, [r2, 0x20] - ldr r0, _080EE5C4 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_080EE5BE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE5C4: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE580 - - thumb_func_start sub_80EE5C8 -sub_80EE5C8: @ 80EE5C8 - push {lr} - movs r2, 0 - ldr r0, [r0, 0x18] - ldr r1, [r0, 0x1C] - ldr r0, _080EE5E0 @ =sub_80EE580 - cmp r1, r0 - bne _080EE5D8 - movs r2, 0x1 -_080EE5D8: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 -_080EE5E0: .4byte sub_80EE580 - thumb_func_end sub_80EE5C8 - - thumb_func_start sub_80EE5E4 -sub_80EE5E4: @ 80EE5E4 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, [r4, 0x18] - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x30] - ldr r1, [r4, 0x18] - movs r0, 0x3 - strh r0, [r1, 0x26] - ldr r1, [r4, 0x18] - ldr r0, _080EE60C @ =sub_80EE610 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE60C: .4byte sub_80EE610 - thumb_func_end sub_80EE5E4 - - thumb_func_start sub_80EE610 -sub_80EE610: @ 80EE610 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080EE646 - cmp r5, 0x1 - bgt _080EE626 - cmp r5, 0 - beq _080EE62C - b _080EE69A -_080EE626: - cmp r5, 0x2 - beq _080EE65C - b _080EE69A -_080EE62C: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080EE69A - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - strh r5, [r4, 0x26] - b _080EE654 -_080EE646: - movs r0, 0x21 - movs r1, 0x3F - movs r2, 0x1 - bl PlayCry3 - movs r0, 0 - strh r0, [r4, 0x30] -_080EE654: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EE69A -_080EE65C: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EE67C - movs r0, 0 - strh r0, [r4, 0x32] - movs r1, 0 - movs r2, 0x26 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080EE67A - movs r1, 0x1 -_080EE67A: - strh r1, [r4, 0x26] -_080EE67C: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x30 - ble _080EE69A - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x26] - ldr r0, _080EE6A0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EE69A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE6A0: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE610 - - thumb_func_start sub_80EE6A4 -sub_80EE6A4: @ 80EE6A4 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080EE6F0 @ =gUnknown_203AB0A - movs r0, 0x10 - strh r0, [r1] - ldr r1, _080EE6F4 @ =gUnknown_203AB04 - movs r0, 0x3 - strh r0, [r1] - ldr r1, _080EE6F8 @ =gUnknown_203AB08 - movs r0, 0x5 - strh r0, [r1] - ldr r1, _080EE6FC @ =gUnknown_203AB06 - movs r0, 0 - strh r0, [r1] - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, [r4, 0x18] - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x30] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x32] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x34] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x36] - ldr r1, [r4, 0x18] - movs r0, 0x28 - strh r0, [r1, 0x3C] - ldr r1, [r4, 0x18] - ldr r0, _080EE700 @ =sub_80EE704 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE6F0: .4byte gUnknown_203AB0A -_080EE6F4: .4byte gUnknown_203AB04 -_080EE6F8: .4byte gUnknown_203AB08 -_080EE6FC: .4byte gUnknown_203AB06 -_080EE700: .4byte sub_80EE704 - thumb_func_end sub_80EE6A4 - - thumb_func_start sub_80EE704 -sub_80EE704: @ 80EE704 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080EE740 - cmp r0, 0x1 - bgt _080EE71A - cmp r0, 0 - beq _080EE726 - b _080EE846 -_080EE71A: - cmp r0, 0x2 - beq _080EE7C4 - cmp r0, 0x3 - bne _080EE724 - b _080EE824 -_080EE724: - b _080EE846 -_080EE726: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _080EE736 - b _080EE846 -_080EE736: - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnim - b _080EE818 -_080EE740: - ldrh r2, [r4, 0x3C] - ldrh r3, [r4, 0x32] - adds r1, r2, r3 - movs r5, 0 - strh r1, [r4, 0x32] - ldrh r0, [r4, 0x34] - adds r0, 0x8 - strh r0, [r4, 0x34] - lsls r1, 16 - asrs r1, 20 - strh r1, [r4, 0x24] - ldr r1, _080EE7B0 @ =gSineTable - movs r3, 0x34 - ldrsh r0, [r4, r3] - lsls r0, 1 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _080EE7B4 @ =gUnknown_203AB04 - ldrh r0, [r0] - muls r0, r1 - ldr r1, _080EE7B8 @ =gUnknown_203AB08 - ldrh r1, [r1] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - movs r0, 0x38 - ldrsh r1, [r4, r0] - ldr r0, _080EE7BC @ =gUnknown_203AB06 - ldrh r0, [r0] - cmp r1, r0 - ble _080EE78C - strh r5, [r4, 0x38] - subs r0, r2, 0x1 - strh r0, [r4, 0x3C] -_080EE78C: - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080EE846 - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - strh r5, [r4, 0x30] - ldr r0, _080EE7C0 @ =0x00004757 - strh r0, [r4, 0x3A] - movs r0, 0x1C - strh r0, [r4, 0x3C] - b _080EE818 - .align 2, 0 -_080EE7B0: .4byte gSineTable -_080EE7B4: .4byte gUnknown_203AB04 -_080EE7B8: .4byte gUnknown_203AB08 -_080EE7BC: .4byte gUnknown_203AB06 -_080EE7C0: .4byte 0x00004757 -_080EE7C4: - ldrh r0, [r4, 0x3C] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r1, r0, 20 - strh r1, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080EE804 - ldrh r0, [r4, 0x20] - adds r0, r1 - lsls r0, 16 - asrs r0, 16 - ldrh r1, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - movs r3, 0x3A - ldrsh r2, [r4, r3] - bl sub_80EE864 - movs r0, 0x3A - ldrsh r1, [r4, r0] - ldr r0, _080EE820 @ =0x41c64e6d - muls r0, r1 - strh r0, [r4, 0x3A] -_080EE804: - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0xC - ble _080EE846 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x30] -_080EE818: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EE846 - .align 2, 0 -_080EE820: .4byte 0x41c64e6d -_080EE824: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080EE846 - ldr r0, _080EE84C @ =gUnknown_203AB0A - ldrh r1, [r0] - ldrh r2, [r4, 0x24] - negs r2, r2 - lsls r2, 16 - asrs r2, 16 - adds r0, r4, 0 - movs r3, 0x4 - bl sub_80EE970 -_080EE846: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE84C: .4byte gUnknown_203AB0A - thumb_func_end sub_80EE704 - - thumb_func_start sub_80EE850 -sub_80EE850: @ 80EE850 - ldr r0, [r0, 0x18] - ldr r1, [r0, 0x1C] - ldr r0, _080EE860 @ =SpriteCallbackDummy - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bx lr - .align 2, 0 -_080EE860: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE850 - - thumb_func_start sub_80EE864 -sub_80EE864: @ 80EE864 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r2, 16 - lsrs r5, r2, 16 - movs r6, 0 - lsls r0, 16 - ldr r2, _080EE8D4 @ =0xffea0000 - adds r2, r0 - mov r8, r2 - lsls r1, 16 - movs r0, 0xC0 - lsls r0, 13 - adds r7, r1, r0 -_080EE880: - ldr r0, _080EE8D8 @ =gUnknown_840BEC4 - mov r2, r8 - asrs r1, r2, 16 - asrs r2, r7, 16 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080EE8C4 - ldr r0, _080EE8DC @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - lsls r5, 16 - asrs r5, 16 - adds r0, r5, 0 - movs r1, 0xD - bl __modsi3 - adds r0, 0x8 - strh r0, [r4, 0x34] - adds r0, r5, 0 - movs r1, 0x3 - bl __modsi3 - strh r0, [r4, 0x36] - strh r6, [r4, 0x3C] - ldr r0, _080EE8E0 @ =0x41c64e6d - muls r0, r5 - lsls r0, 16 - lsrs r5, r0, 16 -_080EE8C4: - adds r6, 0x1 - cmp r6, 0x1 - ble _080EE880 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EE8D4: .4byte 0xffea0000 -_080EE8D8: .4byte gUnknown_840BEC4 -_080EE8DC: .4byte gSprites -_080EE8E0: .4byte 0x41c64e6d - thumb_func_end sub_80EE864 - - thumb_func_start sub_80EE8E4 -sub_80EE8E4: @ 80EE8E4 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r5, 0 - adds r4, 0x2E - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080EE8FA - cmp r0, 0x1 - beq _080EE90C - b _080EE93E -_080EE8FA: - ldrh r0, [r5, 0x20] - lsls r0, 4 - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x22] - lsls r0, 4 - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] -_080EE90C: - ldrh r1, [r4, 0x2] - ldrh r0, [r4, 0x6] - subs r1, r0 - strh r1, [r4, 0x2] - ldrh r0, [r4, 0x8] - ldrh r2, [r4, 0x4] - adds r0, r2 - strh r0, [r4, 0x4] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x20] - ldrh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x22] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE93E - adds r0, r5, 0 - bl DestroySprite -_080EE93E: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EE96A - movs r0, 0 - strh r0, [r4, 0xE] - adds r3, r5, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080EE96A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80EE8E4 - - thumb_func_start sub_80EE970 -sub_80EE970: @ 80EE970 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r2, 0 - adds r6, r3, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - movs r1, 0 - mov r8, r1 - mov r1, r8 - strh r1, [r4, 0x2E] - strh r5, [r4, 0x30] - ldrh r1, [r4, 0x24] - lsls r1, 4 - strh r1, [r4, 0x32] - lsls r0, 16 - asrs r0, 12 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - movs r0, 0x80 - lsls r0, 4 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x38] - mov r1, r8 - strh r1, [r4, 0x3A] - strh r6, [r4, 0x3C] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, _080EE9D0 @ =sub_80EE9D4 - str r0, [r4, 0x1C] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EE9D0: .4byte sub_80EE9D4 - thumb_func_end sub_80EE970 - - thumb_func_start sub_80EE9D4 -sub_80EE9D4: @ 80EE9D4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080EEA08 - cmp r5, 0x1 - bgt _080EE9EA - cmp r5, 0 - beq _080EE9F0 - b _080EEA88 -_080EE9EA: - cmp r5, 0x2 - beq _080EEA6E - b _080EEA88 -_080EE9F0: - ldrh r0, [r4, 0x3A] - adds r0, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080EEA88 - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnim - b _080EEA64 -_080EEA08: - ldrh r0, [r4, 0x30] - subs r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r5, r0, 16 - cmp r5, 0 - beq _080EEA4C - ldrh r1, [r4, 0x34] - ldrh r2, [r4, 0x32] - adds r1, r2 - strh r1, [r4, 0x32] - ldrh r0, [r4, 0x38] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r1, 16 - asrs r1, 20 - strh r1, [r4, 0x24] - ldr r1, _080EEA48 @ =gSineTable - lsls r0, 16 - asrs r0, 20 - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - b _080EEA88 - .align 2, 0 -_080EEA48: .4byte gSineTable -_080EEA4C: - ldrh r0, [r4, 0x32] - lsrs r0, 4 - strh r0, [r4, 0x24] - strh r5, [r4, 0x26] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0x5 - beq _080EEA84 -_080EEA64: - strh r5, [r4, 0x3A] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EEA88 -_080EEA6E: - ldrh r0, [r4, 0x3A] - adds r0, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080EEA88 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_080EEA84: - ldr r0, _080EEA90 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EEA88: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEA90: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE9D4 - - thumb_func_start sub_80EEA94 -sub_80EEA94: @ 80EEA94 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x18] - movs r2, 0 - strh r2, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x30] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x32] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x34] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x36] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x38] - ldr r1, [r4, 0x18] - ldrh r0, [r1, 0x24] - ldrh r3, [r1, 0x20] - adds r0, r3 - strh r0, [r1, 0x20] - ldr r0, [r4, 0x18] - strh r2, [r0, 0x24] - ldr r1, _080EEAF4 @ =gUnknown_203AB0C - movs r0, 0x24 - strh r0, [r1] - ldr r1, _080EEAF8 @ =gUnknown_203AB06 - movs r0, 0x28 - strh r0, [r1] - ldr r1, _080EEAFC @ =gUnknown_203AB04 - movs r0, 0x3 - strh r0, [r1] - ldr r1, _080EEB00 @ =gUnknown_203AB08 - movs r0, 0x4 - strh r0, [r1] - ldr r1, [r4, 0x18] - movs r0, 0x24 - strh r0, [r1, 0x3C] - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r1, [r4, 0x18] - ldr r0, _080EEB04 @ =sub_80EEB08 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EEAF4: .4byte gUnknown_203AB0C -_080EEAF8: .4byte gUnknown_203AB06 -_080EEAFC: .4byte gUnknown_203AB04 -_080EEB00: .4byte gUnknown_203AB08 -_080EEB04: .4byte sub_80EEB08 - thumb_func_end sub_80EEA94 - - thumb_func_start sub_80EEB08 -sub_80EEB08: @ 80EEB08 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080EEB58 - cmp r0, 0x1 - bgt _080EEB1E - cmp r0, 0 - beq _080EEB24 - b _080EEBCE -_080EEB1E: - cmp r0, 0x2 - beq _080EEB84 - b _080EEBCE -_080EEB24: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080EEB4A - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - ands r0, r1 - cmp r0, 0 - beq _080EEB44 - ldrh r0, [r4, 0x24] - adds r0, 0x1 - b _080EEB48 -_080EEB44: - ldrh r0, [r4, 0x24] - subs r0, 0x1 -_080EEB48: - strh r0, [r4, 0x24] -_080EEB4A: - movs r3, 0x30 - ldrsh r0, [r4, r3] - cmp r0, 0x11 - ble _080EEBCE - movs r0, 0 - strh r0, [r4, 0x30] - b _080EEB78 -_080EEB58: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - ldr r1, _080EEB80 @ =gUnknown_203AB06 - ldrh r1, [r1] - cmp r0, r1 - blt _080EEBCE - adds r0, r4, 0 - movs r1, 0x4 - bl StartSpriteAnim - strh r5, [r4, 0x30] - strh r5, [r4, 0x32] -_080EEB78: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EEBCE - .align 2, 0 -_080EEB80: .4byte gUnknown_203AB06 -_080EEB84: - ldrh r2, [r4, 0x3C] - ldrh r1, [r4, 0x30] - adds r0, r2, r1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - negs r1, r0 - strh r1, [r4, 0x24] - ldr r1, _080EEBD4 @ =gSineTable - lsls r0, 1 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _080EEBD8 @ =gUnknown_203AB04 - ldrh r0, [r0] - muls r0, r1 - ldr r1, _080EEBDC @ =gUnknown_203AB08 - ldrh r1, [r1] - asrs r0, r1 - negs r0, r0 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xC - ble _080EEBC0 - subs r0, r2, 0x1 - strh r0, [r4, 0x3C] -_080EEBC0: - ldrh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - cmp r0, 0x3F - ble _080EEBCE - ldr r0, _080EEBE0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EEBCE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEBD4: .4byte gSineTable -_080EEBD8: .4byte gUnknown_203AB04 -_080EEBDC: .4byte gUnknown_203AB08 -_080EEBE0: .4byte SpriteCallbackDummy - thumb_func_end sub_80EEB08 - - thumb_func_start sub_80EEBE4 -sub_80EEBE4: @ 80EEBE4 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _080EEC04 @ =gUnknown_840BEDC -_080EEBEA: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x6 - bls _080EEBEA - ldr r0, _080EEC08 @ =gUnknown_840BF14 - bl LoadSpritePalettes - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EEC04: .4byte gUnknown_840BEDC -_080EEC08: .4byte gUnknown_840BF14 - thumb_func_end sub_80EEBE4 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/title_screen.s b/asm/title_screen.s index 1646e6ce4..e62cc9a9f 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -1056,7 +1056,11 @@ _080791DE: lsrs r5, r0, 24 cmp r5, 0 bne _080792A6 - movs r0, 0x6 + .ifdef FIRERED + movs r0, 0x6 @ CHARIZARD + .else + movs r0, 0x3 @ VENUSAUR + .endif movs r1, 0 bl PlayCry1 ldrb r0, [r4, 0xC] diff --git a/baserom.ips b/baserom.ips Binary files differindex 95538d30e..110503bd7 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index d10a7d403..bbd53eca8 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -165,164 +165,8 @@ gUnknown_8402250:: @ 8402250 gUnknown_8402258:: @ 8402258 .incbin "baserom.gba", 0x402258, 0x8 -gUnknown_8402260:: @ 8402260 - .incbin "baserom.gba", 0x402260, 0x20 -gUnknown_8402280:: @ 8402280 - .incbin "baserom.gba", 0x402280, 0x264 - -gUnknown_84024E4:: @ 84024E4 - .incbin "baserom.gba", 0x4024E4, 0x14C - -gUnknown_8402630:: @ 8402630 - .incbin "baserom.gba", 0x402630, 0x20 - -gUnknown_8402650:: @ 8402650 - .incbin "baserom.gba", 0x402650, 0x18 - -gUnknown_8402668:: @ 8402668 - .incbin "baserom.gba", 0x402668, 0xA4 - -gUnknown_840270C:: @ 840270C - .incbin "baserom.gba", 0x40270C, 0x20 - -gUnknown_840272C:: @ 840272C - .incbin "baserom.gba", 0x40272C, 0x1CC - -gUnknown_84028F8:: @ 84028F8 - .incbin "baserom.gba", 0x4028F8, 0x43C - -gUnknown_8402D34:: @ 8402D34 - .incbin "baserom.gba", 0x402D34, 0x20 - -gUnknown_8402D54:: @ 8402D54 - .incbin "baserom.gba", 0x402D54, 0x1294 - -gUnknown_8403FE8:: @ 8403FE8 - .incbin "baserom.gba", 0x403FE8, 0x8E4 - -gUnknown_84048CC:: @ 84048CC - .incbin "baserom.gba", 0x4048CC, 0x20 - -gUnknown_84048EC:: @ 84048EC - .incbin "baserom.gba", 0x4048EC, 0x690 - -gUnknown_8404F7C:: @ 8404F7C - .incbin "baserom.gba", 0x404F7C, 0x438 - -gUnknown_84053B4:: @ 84053B4 - .incbin "baserom.gba", 0x4053B4, 0x60 - -gUnknown_8405414:: @ 8405414 - .incbin "baserom.gba", 0x405414, 0x47C - -gUnknown_8405890:: @ 8405890 - .incbin "baserom.gba", 0x405890, 0x298 - -gUnknown_8405B28:: @ 8405B28 - .incbin "baserom.gba", 0x405B28, 0x1B4 - -gUnknown_8405CDC:: @ 8405CDC - .incbin "baserom.gba", 0x405CDC, 0xC8 - -gUnknown_8405DA4:: @ 8405DA4 - .incbin "baserom.gba", 0x405DA4, 0x20 - -gUnknown_8405DC4:: @ 8405DC4 - .incbin "baserom.gba", 0x405DC4, 0x688 - -gUnknown_840644C:: @ 840644C - .incbin "baserom.gba", 0x40644C, 0x1E8 - -gUnknown_8406634:: @ 8406634 - .incbin "baserom.gba", 0x406634, 0x20 - -gUnknown_8406654:: @ 8406654 - .incbin "baserom.gba", 0x406654, 0xB7C - -gUnknown_84071D0:: @ 84071D0 - .incbin "baserom.gba", 0x4071D0, 0x260 - -gUnknown_8407430:: @ 8407430 - .incbin "baserom.gba", 0x407430, 0x40 - -gUnknown_8407470:: @ 8407470 - .incbin "baserom.gba", 0x407470, 0x5E0 - -gUnknown_8407A50:: @ 8407A50 - .incbin "baserom.gba", 0x407A50, 0x14C - -gUnknown_8407B9C:: @ 8407B9C - .incbin "baserom.gba", 0x407B9C, 0x11FC - -gUnknown_8408D98:: @ 8408D98 - .incbin "baserom.gba", 0x408D98, 0x2DE8 - -gUnknown_840BB80:: @ 840BB80 - .incbin "baserom.gba", 0x40BB80, 0x8 - -gUnknown_840BB88:: @ 840BB88 - .incbin "baserom.gba", 0x40BB88, 0x8 - -gUnknown_840BB90:: @ 840BB90 - .incbin "baserom.gba", 0x40BB90, 0x10 - -gUnknown_840BBA0:: @ 840BBA0 - .incbin "baserom.gba", 0x40BBA0, 0x8 - -gUnknown_840BBA8:: @ 840BBA8 - .incbin "baserom.gba", 0x40BBA8, 0x10 - -gUnknown_840BBB8:: @ 840BBB8 - .incbin "baserom.gba", 0x40BBB8, 0x8 - -gUnknown_840BBC0:: @ 840BBC0 - .incbin "baserom.gba", 0x40BBC0, 0x28 - -gUnknown_840BBE8:: @ 840BBE8 - .incbin "baserom.gba", 0x40BBE8, 0x20 - -gUnknown_840BC08:: @ 840BC08 - .incbin "baserom.gba", 0x40BC08, 0x64 - -gUnknown_840BC6C:: @ 840BC6C - .incbin "baserom.gba", 0x40BC6C, 0x18 - -gUnknown_840BC84:: @ 840BC84 - .incbin "baserom.gba", 0x40BC84, 0x38 - -gUnknown_840BCBC:: @ 840BCBC - .incbin "baserom.gba", 0x40BCBC, 0x20 - -gUnknown_840BCDC:: @ 840BCDC - .incbin "baserom.gba", 0x40BCDC, 0xAC - -gUnknown_840BD88:: @ 840BD88 - .incbin "baserom.gba", 0x40BD88, 0x20 - -gUnknown_840BDA8:: @ 840BDA8 - .incbin "baserom.gba", 0x40BDA8, 0x18 - -gUnknown_840BDC0:: @ 840BDC0 - .incbin "baserom.gba", 0x40BDC0, 0x3C - -gUnknown_840BDFC:: @ 840BDFC - .incbin "baserom.gba", 0x40BDFC, 0x50 - -gUnknown_840BE4C:: @ 840BE4C - .incbin "baserom.gba", 0x40BE4C, 0x40 - -gUnknown_840BE8C:: @ 840BE8C - .incbin "baserom.gba", 0x40BE8C, 0x38 - -gUnknown_840BEC4:: @ 840BEC4 - .incbin "baserom.gba", 0x40BEC4, 0x18 - -gUnknown_840BEDC:: @ 840BEDC - .incbin "baserom.gba", 0x40BEDC, 0x38 - -gUnknown_840BF14:: @ 840BF14 - .incbin "baserom.gba", 0x40BF14, 0x28 + .section .rodata.battle_anim_special gUnknown_840BF3C:: @ 840BF3C .incbin "baserom.gba", 0x40BF3C, 0xC diff --git a/graphics/intro/unk_8402260.pal b/graphics/intro/unk_8402260.pal new file mode 100644 index 000000000..4219d4394 --- /dev/null +++ b/graphics/intro/unk_8402260.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 32 32 +24 57 57 +49 82 82 +82 106 106 +106 131 131 +139 156 156 +164 180 180 +197 205 205 +222 230 230 +255 255 255 diff --git a/graphics/intro/unk_8402280.png b/graphics/intro/unk_8402280.png Binary files differnew file mode 100644 index 000000000..dccf33afa --- /dev/null +++ b/graphics/intro/unk_8402280.png diff --git a/graphics/intro/unk_84024E4.bin b/graphics/intro/unk_84024E4.bin Binary files differnew file mode 100644 index 000000000..2e48c59b4 --- /dev/null +++ b/graphics/intro/unk_84024E4.bin diff --git a/graphics/intro/unk_8402630.pal b/graphics/intro/unk_8402630.pal new file mode 100644 index 000000000..6ca1f007c --- /dev/null +++ b/graphics/intro/unk_8402630.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +24 41 74 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +82 82 82 +180 180 180 +255 255 255 diff --git a/graphics/intro/unk_8402650.png b/graphics/intro/unk_8402650.png Binary files differnew file mode 100644 index 000000000..1ed1b6dc5 --- /dev/null +++ b/graphics/intro/unk_8402650.png diff --git a/graphics/intro/unk_8402668.bin b/graphics/intro/unk_8402668.bin Binary files differnew file mode 100644 index 000000000..2fbac69de --- /dev/null +++ b/graphics/intro/unk_8402668.bin diff --git a/graphics/intro/unk_840270C.pal b/graphics/intro/unk_840270C.pal new file mode 100644 index 000000000..619aee6a0 --- /dev/null +++ b/graphics/intro/unk_840270C.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 74 +0 0 0 +139 123 16 +189 172 16 +131 164 65 +148 230 49 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 222 222 +24 41 74 +82 82 82 +180 180 180 +255 255 255 diff --git a/graphics/intro/unk_840272C.png b/graphics/intro/unk_840272C.png Binary files differnew file mode 100644 index 000000000..d84885c6a --- /dev/null +++ b/graphics/intro/unk_840272C.png diff --git a/graphics/intro/unk_84028F8.bin b/graphics/intro/unk_84028F8.bin Binary files differnew file mode 100644 index 000000000..70782b718 --- /dev/null +++ b/graphics/intro/unk_84028F8.bin diff --git a/graphics/intro/unk_8402A64.png b/graphics/intro/unk_8402A64.png Binary files differnew file mode 100644 index 000000000..79784c7c5 --- /dev/null +++ b/graphics/intro/unk_8402A64.png diff --git a/graphics/intro/unk_8402ADC.png b/graphics/intro/unk_8402ADC.png Binary files differnew file mode 100644 index 000000000..b57006c7b --- /dev/null +++ b/graphics/intro/unk_8402ADC.png diff --git a/graphics/intro/unk_8402B2C.png b/graphics/intro/unk_8402B2C.png Binary files differnew file mode 100644 index 000000000..791cb0e47 --- /dev/null +++ b/graphics/intro/unk_8402B2C.png diff --git a/graphics/intro/unk_8402CD4.png b/graphics/intro/unk_8402CD4.png Binary files differnew file mode 100644 index 000000000..9e19b576c --- /dev/null +++ b/graphics/intro/unk_8402CD4.png diff --git a/graphics/intro/unk_8402D34.pal b/graphics/intro/unk_8402D34.pal new file mode 100644 index 000000000..4be93ec3e --- /dev/null +++ b/graphics/intro/unk_8402D34.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +115 197 106 +41 164 8 +82 180 65 +139 222 131 +98 197 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +16 139 98 +16 115 98 +24 90 90 +32 74 90 +32 65 82 diff --git a/graphics/intro/unk_8402D54.png b/graphics/intro/unk_8402D54.png Binary files differnew file mode 100644 index 000000000..0f487f0bd --- /dev/null +++ b/graphics/intro/unk_8402D54.png diff --git a/graphics/intro/unk_8403FE8.bin b/graphics/intro/unk_8403FE8.bin Binary files differnew file mode 100644 index 000000000..c81ca17d1 --- /dev/null +++ b/graphics/intro/unk_8403FE8.bin diff --git a/graphics/intro/unk_84048CC.pal b/graphics/intro/unk_84048CC.pal new file mode 100644 index 000000000..ef08ae2fe --- /dev/null +++ b/graphics/intro/unk_84048CC.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +255 255 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +238 246 246 +222 230 230 +180 189 197 +148 156 172 +106 123 139 +74 90 115 +41 57 90 +0 0 0 diff --git a/graphics/intro/unk_84048EC.png b/graphics/intro/unk_84048EC.png Binary files differnew file mode 100644 index 000000000..577f1926d --- /dev/null +++ b/graphics/intro/unk_84048EC.png diff --git a/graphics/intro/unk_8404F7C.bin b/graphics/intro/unk_8404F7C.bin Binary files differnew file mode 100644 index 000000000..fd7aef605 --- /dev/null +++ b/graphics/intro/unk_8404F7C.bin diff --git a/graphics/intro/unk_84053B4.pal b/graphics/intro/unk_84053B4.pal new file mode 100644 index 000000000..3567f4cff --- /dev/null +++ b/graphics/intro/unk_84053B4.pal @@ -0,0 +1,51 @@ +JASC-PAL +0100 +48 +0 0 0 +131 238 115 +82 189 74 +57 164 57 +115 213 98 +16 123 16 +164 255 131 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 148 0 +164 222 98 +0 0 0 +82 98 115 +98 189 123 +139 156 172 +65 139 98 +238 246 246 +106 172 57 +189 189 213 +148 213 82 +106 180 41 +164 131 41 +115 98 49 +82 74 57 +222 222 230 +32 65 90 +24 115 65 +0 0 0 +156 230 156 +131 205 148 +106 180 131 +65 139 98 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/intro/unk_8405414.png b/graphics/intro/unk_8405414.png Binary files differnew file mode 100644 index 000000000..254ec3b06 --- /dev/null +++ b/graphics/intro/unk_8405414.png diff --git a/graphics/intro/unk_8405890.bin b/graphics/intro/unk_8405890.bin Binary files differnew file mode 100644 index 000000000..aea2053b3 --- /dev/null +++ b/graphics/intro/unk_8405890.bin diff --git a/graphics/intro/unk_8405B08.pal b/graphics/intro/unk_8405B08.pal new file mode 100644 index 000000000..43cc9d949 --- /dev/null +++ b/graphics/intro/unk_8405B08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +131 238 115 +82 189 74 +57 164 57 +115 213 98 +16 123 16 +164 255 131 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 148 0 +164 222 98 diff --git a/graphics/intro/unk_8405B28.png b/graphics/intro/unk_8405B28.png Binary files differnew file mode 100644 index 000000000..45400d46d --- /dev/null +++ b/graphics/intro/unk_8405B28.png diff --git a/graphics/intro/unk_8405CDC.bin b/graphics/intro/unk_8405CDC.bin Binary files differnew file mode 100644 index 000000000..32cd439b8 --- /dev/null +++ b/graphics/intro/unk_8405CDC.bin diff --git a/graphics/intro/unk_8405DA4.pal b/graphics/intro/unk_8405DA4.pal new file mode 100644 index 000000000..79d568984 --- /dev/null +++ b/graphics/intro/unk_8405DA4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 222 205 +255 255 255 +222 222 222 +123 123 123 +255 0 255 +255 0 255 +255 0 255 +65 41 74 +255 180 123 +238 98 74 +205 57 32 +197 131 180 +164 98 148 +131 65 123 +90 57 90 +16 16 16 diff --git a/graphics/intro/unk_8405DC4.png b/graphics/intro/unk_8405DC4.png Binary files differnew file mode 100644 index 000000000..8ae6ba691 --- /dev/null +++ b/graphics/intro/unk_8405DC4.png diff --git a/graphics/intro/unk_840644C.bin b/graphics/intro/unk_840644C.bin Binary files differnew file mode 100644 index 000000000..3a6ca9351 --- /dev/null +++ b/graphics/intro/unk_840644C.bin diff --git a/graphics/intro/unk_8406634.pal b/graphics/intro/unk_8406634.pal new file mode 100644 index 000000000..8e13fe902 --- /dev/null +++ b/graphics/intro/unk_8406634.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 123 41 +65 148 90 +49 115 74 +106 57 98 +49 115 98 +82 205 156 +49 164 115 +255 255 255 +106 189 115 +90 41 82 +222 180 205 +189 131 189 +139 90 148 +205 205 222 +131 131 131 +16 16 16 diff --git a/graphics/intro/unk_8406654.png b/graphics/intro/unk_8406654.png Binary files differnew file mode 100644 index 000000000..4c6c06681 --- /dev/null +++ b/graphics/intro/unk_8406654.png diff --git a/graphics/intro/unk_84071D0.bin b/graphics/intro/unk_84071D0.bin Binary files differnew file mode 100644 index 000000000..37b2b07d8 --- /dev/null +++ b/graphics/intro/unk_84071D0.bin diff --git a/graphics/intro/unk_8407430.pal b/graphics/intro/unk_8407430.pal new file mode 100644 index 000000000..5c34c44c8 --- /dev/null +++ b/graphics/intro/unk_8407430.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +0 0 0 +82 98 115 +98 189 123 +139 156 172 +65 139 98 +238 246 246 +106 172 57 +189 189 213 +148 213 82 +106 180 41 +164 131 41 +115 98 49 +82 74 57 +222 222 230 +32 65 90 +24 115 65 +0 0 0 +164 238 139 +57 148 57 +131 213 115 +156 230 156 +131 205 148 +106 180 131 +65 139 98 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/graphics/intro/unk_8407470.png b/graphics/intro/unk_8407470.png Binary files differnew file mode 100644 index 000000000..809c259bf --- /dev/null +++ b/graphics/intro/unk_8407470.png diff --git a/graphics/intro/unk_8407A50.bin b/graphics/intro/unk_8407A50.bin Binary files differnew file mode 100644 index 000000000..6a70c1dc0 --- /dev/null +++ b/graphics/intro/unk_8407A50.bin diff --git a/graphics/intro/unk_8407B9C.png b/graphics/intro/unk_8407B9C.png Binary files differnew file mode 100644 index 000000000..75528b3b6 --- /dev/null +++ b/graphics/intro/unk_8407B9C.png diff --git a/graphics/intro/unk_8408D98.bin b/graphics/intro/unk_8408D98.bin Binary files differnew file mode 100644 index 000000000..6e02db72d --- /dev/null +++ b/graphics/intro/unk_8408D98.bin diff --git a/graphics/intro/unk_840926C.png b/graphics/intro/unk_840926C.png Binary files differnew file mode 100644 index 000000000..80cc52d52 --- /dev/null +++ b/graphics/intro/unk_840926C.png diff --git a/graphics/intro/unk_84096AC.pal b/graphics/intro/unk_84096AC.pal new file mode 100644 index 000000000..53a2c5c2b --- /dev/null +++ b/graphics/intro/unk_84096AC.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 222 205 +255 106 82 +222 65 41 +180 24 0 +57 238 189 +82 205 156 +0 164 115 +255 255 255 +255 0 255 +222 180 205 +189 131 189 +139 90 148 +106 57 98 +205 205 222 +131 131 131 +16 16 16 diff --git a/graphics/intro/unk_84096CC.png b/graphics/intro/unk_84096CC.png Binary files differnew file mode 100644 index 000000000..75aacced4 --- /dev/null +++ b/graphics/intro/unk_84096CC.png diff --git a/graphics/intro/unk_8409A1C.pal b/graphics/intro/unk_8409A1C.pal new file mode 100644 index 000000000..36cbbb9a0 --- /dev/null +++ b/graphics/intro/unk_8409A1C.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +164 238 139 +57 148 57 +131 213 115 +156 230 156 +131 205 148 +106 180 131 +65 139 98 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/graphics/intro/unk_8409A3C.png b/graphics/intro/unk_8409A3C.png Binary files differnew file mode 100644 index 000000000..01ed028f8 --- /dev/null +++ b/graphics/intro/unk_8409A3C.png diff --git a/graphics/intro/unk_8409D20.png b/graphics/intro/unk_8409D20.png Binary files differnew file mode 100644 index 000000000..11f299cfd --- /dev/null +++ b/graphics/intro/unk_8409D20.png diff --git a/graphics/intro/unk_840A3E4.png b/graphics/intro/unk_840A3E4.png Binary files differnew file mode 100644 index 000000000..7b91a5bb4 --- /dev/null +++ b/graphics/intro/unk_840A3E4.png diff --git a/graphics/intro/unk_840B834.pal b/graphics/intro/unk_840B834.pal new file mode 100644 index 000000000..40bbce557 --- /dev/null +++ b/graphics/intro/unk_840B834.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 246 189 +0 0 0 +0 0 0 +115 213 255 +156 222 255 +205 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/intro/unk_840B854.pal b/graphics/intro/unk_840B854.pal new file mode 100644 index 000000000..dcf29b92e --- /dev/null +++ b/graphics/intro/unk_840B854.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 222 205 +255 255 255 +222 222 222 +123 123 123 +156 222 255 +189 230 255 +222 238 255 +255 255 255 +255 180 123 +238 98 74 +205 57 32 +197 131 180 +164 98 148 +131 65 123 +90 57 90 +16 16 16 diff --git a/graphics/intro/unk_840B874.png b/graphics/intro/unk_840B874.png Binary files differnew file mode 100644 index 000000000..b8877f079 --- /dev/null +++ b/graphics/intro/unk_840B874.png diff --git a/graphics/intro/unk_840BAE0.png b/graphics/intro/unk_840BAE0.png Binary files differnew file mode 100644 index 000000000..bf5578cae --- /dev/null +++ b/graphics/intro/unk_840BAE0.png diff --git a/include/config.h b/include/config.h index f094c95bd..491eadf13 100644 --- a/include/config.h +++ b/include/config.h @@ -15,8 +15,6 @@ // since not all baseroms and pointers have been dumped yet and will result in // a broken ROM. -#define ENGLISH - #ifdef ENGLISH #define UNITS_IMPERIAL #else diff --git a/include/constants/global.h b/include/constants/global.h index b1c8fed3e..3cac8d473 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -23,10 +23,12 @@ enum LanguageId { LANGUAGE_ITALIAN = 4, LANGUAGE_GERMAN = 5, // 6 goes unused but the theory is it was meant to be Korean - LANGUAGE_SPANISH = 7, + LANGUAGE_SPANISH = 7, }; +#ifdef ENGLISH #define GAME_LANGUAGE (LANGUAGE_ENGLISH) +#endif #define PC_ITEMS_COUNT 30 #define BAG_ITEMS_COUNT 42 diff --git a/include/libgcnmultiboot.h b/include/libgcnmultiboot.h new file mode 100644 index 000000000..7d347df05 --- /dev/null +++ b/include/libgcnmultiboot.h @@ -0,0 +1,17 @@ +#ifndef GUARD_LIBGCMMULTIBOOT_H +#define GUARD_LIBGCNMULTIBOOT_H + +struct GcmbStruct +{ + u16 gcmb_field_0; + vu8 gcmb_field_2; + u8 filler3[0x2C - 0x3]; +}; + +void GameCubeMultiBoot_Main(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_ExecuteProgram(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Init(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_HandleSerialInterrupt(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Quit(void); + +#endif // GUARD_LIBGCNMULTIBOOT_H diff --git a/include/link.h b/include/link.h index 0ec32d8a0..e1a4e106b 100644 --- a/include/link.h +++ b/include/link.h @@ -207,5 +207,7 @@ void sub_80098D8(void); void CloseLink(void); bool8 sub_800A4BC(void); bool32 sub_800B270(void); +void sub_800B388(void); +void sub_8054A28(void); #endif // GUARD_LINK_H diff --git a/ld_script.txt b/ld_script.txt index 22672e178..494c35e86 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -210,7 +210,7 @@ SECTIONS { asm/battle_tower.o(.text); asm/battle_controller_oak.o(.text); asm/player_pc.o(.text); - asm/intro.o(.text); + src/intro.o(.text); asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); asm/credits.o(.text); @@ -418,6 +418,8 @@ SECTIONS { data/data_83F5738.o(.rodata); src/save.o(.rodata); data/data_83FECCC.o(.rodata); + src/intro.o(.rodata); + data/data_83FECCC.o(.rodata.battle_anim_special); data/strings.o(.rodata); data/data_83FECCC.o(.rodata.841EE44); src/new_menu_helpers.o(.rodata); diff --git a/src/intro.c b/src/intro.c new file mode 100644 index 000000000..0ebf71a8d --- /dev/null +++ b/src/intro.c @@ -0,0 +1,2175 @@ +#include "global.h" +#include "m4a.h" +#include "malloc.h" +#include "bg.h" +#include "palette.h" +#include "main.h" +#include "gpu_regs.h" +#include "task.h" +#include "scanline_effect.h" +#include "libgcnmultiboot.h" +#include "new_menu_helpers.h" +#include "link.h" +#include "menu.h" +#include "save.h" +#include "sound.h" +#include "new_game.h" +#include "title_screen.h" +#include "decompress.h" +#include "util.h" +#include "trig.h" +#include "constants/songs.h" +#include "constants/species.h" + +struct IntroSequenceData +{ + void (*field_0000)(struct IntroSequenceData *); + u8 field_0004; + u8 field_0005; + u8 field_0006; + u16 field_0008; + u16 field_000A; + u8 filler_000C[6]; + u16 field_0012; + struct Sprite * field_0014; + struct Sprite * field_0018; + struct Sprite * field_001C; + struct Sprite * field_0020; + struct Sprite * field_0024; + struct Sprite * field_0028[4]; + u8 filler_0038[0x4]; + u8 field_003C[0x400]; + u8 field_043C[0x400]; + u8 filler_083C[0x2080]; +}; // size: 0x28BC + +static EWRAM_DATA struct GcmbStruct gUnknown_203AAD4 = {0}; +static EWRAM_DATA u16 gUnknown_203AB00 = 0; +static EWRAM_DATA u16 gUnknown_203AB02 = 0; +static EWRAM_DATA u16 gUnknown_203AB04 = 0; +static EWRAM_DATA u16 gUnknown_203AB06 = 0; +static EWRAM_DATA u16 gUnknown_203AB08 = 0; +static EWRAM_DATA u16 gUnknown_203AB0A = 0; +static EWRAM_DATA u16 gUnknown_203AB0C = 0; +static EWRAM_DATA u16 gUnknown_203AB0E = 0; +static EWRAM_DATA u16 gUnknown_203AB10 = 0; +static EWRAM_DATA u16 gUnknown_203AB12 = 0; +static EWRAM_DATA u16 gUnknown_203AB14 = 0; +static EWRAM_DATA u16 gUnknown_203AB16 = 0; +static EWRAM_DATA u16 gUnknown_203AB18 = 0; +static EWRAM_DATA u16 gUnknown_203AB1A = 0; +static EWRAM_DATA u16 gUnknown_203AB1C = 0; +static EWRAM_DATA u16 gUnknown_203AB1E = 0; +static EWRAM_DATA u16 gUnknown_203AB20 = 0; +static EWRAM_DATA u16 gUnknown_203AB22 = 0; +static EWRAM_DATA u16 gUnknown_203AB24 = 0; +static EWRAM_DATA u16 gUnknown_203AB26 = 0; +static EWRAM_DATA u32 gUnknown_203AB28 = 0; +static EWRAM_DATA s16 gUnknown_203AB2C = 0; +static EWRAM_DATA u16 gUnknown_203AB2E = 0; +static EWRAM_DATA u32 gUnknown_203AB30 = 0; + +static void sub_80EC870(void); +static void sub_80EC9D4(void); +static void sub_80EC9EC(void); +static void sub_80ECA00(void); +static void sub_80ECA70(void); +static void sub_80ECAB0(u8 taskId); +static void sub_80ECAA8(struct IntroSequenceData * ptr, void (*cb)(struct IntroSequenceData *)); +static void sub_80ECAF0(struct IntroSequenceData * ptr); +static void sub_80ECB98(struct IntroSequenceData * ptr); +static void sub_80ECC3C(struct IntroSequenceData * ptr); +static void sub_80ECCA8(struct IntroSequenceData * ptr); +static void sub_80ECD60(struct IntroSequenceData * ptr); +static void sub_80ECEA4(struct IntroSequenceData * ptr); +static void sub_80ED0AC(u8 taskId); +static void sub_80ED118(void); +static void sub_80ED140(u8 taskId); +static void sub_80ED188(struct IntroSequenceData * ptr); +static void sub_80ED40C(u8 taskId); +static void sub_80ED428(u8 taskId); +static void sub_80ED444(struct IntroSequenceData * ptr); +static void sub_80ED4A0(struct IntroSequenceData * ptr); +static void sub_80ED4C0(struct IntroSequenceData * ptr); +static void sub_80ED6D8(void); +static void sub_80ED714(u8 taskId); +static void sub_80ED7D4(struct IntroSequenceData * ptr); +static void sub_80ED818(struct Sprite * sprite); +static void sub_80ED898(struct IntroSequenceData * ptr); +static void sub_80EDAF0(struct IntroSequenceData * ptr); +static void sub_80EDB70(struct IntroSequenceData * ptr); +static void sub_80EDBAC(struct IntroSequenceData * ptr); +static void sub_80EDBE8(struct IntroSequenceData * ptr); +static void sub_80EDC40(void); +static void sub_80EDDF0(void); +static void sub_80EDE04(u8 taskId); +static void sub_80EDED8(void); +static void sub_80EDEEC(u8 taskId); +static struct Sprite * sub_80EDF68(void); +static void sub_80EDF94(struct IntroSequenceData * ptr); +static void sub_80EE024(u8 taskId); +static void sub_80EE160(void); +static void sub_80EE1C4(struct Sprite * sprite); +static void sub_80EE200(u8 taskId); +static void sub_80EE29C(struct Sprite * sprite); +static void sub_80EE350(struct Sprite * sprite); +static void sub_80EE40C(struct Sprite * sprite); +static void sub_80EE4DC(struct Sprite * sprite); +static void sub_80EE4F8(struct IntroSequenceData * ptr); +static void sub_80EE528(struct Sprite * sprite, s16 a1, s16 a2, u16 a3); +static void sub_80EE580(struct Sprite * sprite); +static bool32 sub_80EE5C8(struct IntroSequenceData * ptr); +static void sub_80EE5E4(struct IntroSequenceData * ptr); +static void sub_80EE610(struct Sprite * sprite); +static void sub_80EE6A4(struct IntroSequenceData * ptr); +static void sub_80EE704(struct Sprite * sprite); +static bool8 sub_80EE850(struct IntroSequenceData * ptr); +static void sub_80EE864(s16 a1, s16 a2, s16 a3); +static void sub_80EE8E4(struct Sprite * sprite); +static void sub_80EE970(struct Sprite * sprite, u16 a1, s16 a2, u8 a3); +static void sub_80EE9D4(struct Sprite * sprite); +static void sub_80EEA94(struct IntroSequenceData * ptr); +static void sub_80EEB08(struct Sprite * sprite); +static void sub_80EEBE4(void); + +extern const u32 gMultiBootProgram_PokemonColosseum_Start[]; + +static const u16 gUnknown_8402260[] = INCBIN_U16("graphics/intro/unk_8402260.gbapal"); +static const u8 gUnknown_8402280[] = INCBIN_U8("graphics/intro/unk_8402280.4bpp.lz"); +static const u8 gUnknown_84024E4[] = INCBIN_U8("graphics/intro/unk_84024E4.bin.lz"); +static const u16 gUnknown_8402630[] = INCBIN_U16("graphics/intro/unk_8402630.gbapal"); +static const u8 gUnknown_8402650[] = INCBIN_U8("graphics/intro/unk_8402650.4bpp.lz"); +static const u8 gUnknown_8402668[] = INCBIN_U8("graphics/intro/unk_8402668.bin.lz"); +static const u16 gUnknown_840270C[] = INCBIN_U16("graphics/intro/unk_840270C.gbapal"); +static const u8 gUnknown_840272C[] = INCBIN_U8("graphics/intro/unk_840272C.4bpp.lz"); +static const u8 gUnknown_84028F8[] = INCBIN_U8("graphics/intro/unk_84028F8.bin.lz"); +static const u16 gUnknown_8402A44[] = INCBIN_U16("graphics/intro/unk_8402A64.gbapal"); +static const u8 gUnknown_8402A64[] = INCBIN_U8("graphics/intro/unk_8402A64.4bpp.lz"); +static const u16 gUnknown_8402ABC[] = INCBIN_U16("graphics/intro/unk_8402ADC.gbapal"); +static const u8 gUnknown_8402ADC[] = INCBIN_U8("graphics/intro/unk_8402ADC.4bpp.lz"); +static const u8 gUnknown_8402B2C[] = INCBIN_U8("graphics/intro/unk_8402B2C.4bpp.lz"); +static const u8 gUnknown_8402CD4[] = INCBIN_U8("graphics/intro/unk_8402CD4.4bpp.lz"); +static const u16 gUnknown_8402D34[] = INCBIN_U16("graphics/intro/unk_8402D34.gbapal"); +static const u8 gUnknown_8402D54[] = INCBIN_U8("graphics/intro/unk_8402D54.4bpp.lz"); +static const u8 gUnknown_8403FE8[] = INCBIN_U8("graphics/intro/unk_8403FE8.bin.lz"); +static const u16 gUnknown_84048CC[] = INCBIN_U16("graphics/intro/unk_84048CC.gbapal"); +static const u8 gUnknown_84048EC[] = INCBIN_U8("graphics/intro/unk_84048EC.4bpp.lz"); +static const u8 gUnknown_8404F7C[] = INCBIN_U8("graphics/intro/unk_8404F7C.bin.lz"); +static const u16 gUnknown_84053B4[] = INCBIN_U16("graphics/intro/unk_84053B4.gbapal"); +static const u8 gUnknown_8405414[] = INCBIN_U8("graphics/intro/unk_8405414.4bpp.lz"); +static const u8 gUnknown_8405890[] = INCBIN_U8("graphics/intro/unk_8405890.bin.lz"); +static const u16 gUnknown_8405B08[] = INCBIN_U16("graphics/intro/unk_8405B08.gbapal"); +static const u8 gUnknown_8405B28[] = INCBIN_U8("graphics/intro/unk_8405B28.4bpp.lz"); +static const u8 gUnknown_8405CDC[] = INCBIN_U8("graphics/intro/unk_8405CDC.bin.lz"); +static const u16 gUnknown_8405DA4[] = INCBIN_U16("graphics/intro/unk_8405DA4.gbapal"); +static const u8 gUnknown_8405DC4[] = INCBIN_U8("graphics/intro/unk_8405DC4.4bpp.lz"); +static const u8 gUnknown_840644C[] = INCBIN_U8("graphics/intro/unk_840644C.bin.lz"); +static const u16 gUnknown_8406634[] = INCBIN_U16("graphics/intro/unk_8406634.gbapal"); +static const u8 gUnknown_8406654[] = INCBIN_U8("graphics/intro/unk_8406654.4bpp.lz"); +static const u8 gUnknown_84071D0[] = INCBIN_U8("graphics/intro/unk_84071D0.bin.lz"); +static const u16 gUnknown_8407430[] = INCBIN_U16("graphics/intro/unk_8407430.gbapal"); +static const u8 gUnknown_8407470[] = INCBIN_U8("graphics/intro/unk_8407470.4bpp.lz"); +static const u8 gUnknown_8407A50[] = INCBIN_U8("graphics/intro/unk_8407A50.bin.lz"); +static const u8 gUnknown_8407B9C[] = INCBIN_U8("graphics/intro/unk_8407B9C.4bpp.lz"); +static const u8 gUnknown_8408D98[] = INCBIN_U8("graphics/intro/unk_8408D98.bin.lz"); +static const u8 gUnknown_840926C[] = INCBIN_U8("graphics/intro/unk_840926C.4bpp.lz"); +static const u16 gUnknown_84096AC[] = INCBIN_U16("graphics/intro/unk_84096AC.gbapal"); +static const u8 gUnknown_84096CC[] = INCBIN_U8("graphics/intro/unk_84096CC.4bpp.lz"); +static const u16 gUnknown_8409A1C[] = INCBIN_U16("graphics/intro/unk_8409A1C.gbapal"); +static const u8 gUnknown_8409A3C[] = INCBIN_U8("graphics/intro/unk_8409A3C.4bpp.lz"); +static const u8 gUnknown_8409D20[] = INCBIN_U8("graphics/intro/unk_8409D20.4bpp.lz"); +static const u8 gUnknown_840A3E4[] = INCBIN_U8("graphics/intro/unk_840A3E4.4bpp.lz"); +static const u16 gUnknown_840B834[] = INCBIN_U16("graphics/intro/unk_840B834.gbapal"); +static const u16 gUnknown_840B854[] = INCBIN_U16("graphics/intro/unk_840B854.gbapal"); +static const u8 gUnknown_840B874[] = INCBIN_U8("graphics/intro/unk_840B874.4bpp.lz"); +static const u8 gUnknown_840BAE0[] = INCBIN_U8("graphics/intro/unk_840BAE0.4bpp.lz"); + +static const struct BgTemplate gUnknown_840BB80[] = { + { 3, 3, 31, 0, 0, 3, 0x000 }, + { 2, 3, 30, 0, 0, 2, 0x010 } +}; + +static const struct BgTemplate gUnknown_840BB88[] = { + { 0, 0, 28, 2, 0, 0, 0x000 }, + { 1, 1, 30, 2, 0, 0, 0x000 } +}; + +static const struct BgTemplate gUnknown_840BB90[] = { + { 3, 1, 30, 2, 0, 3, 0x000 }, + { 0, 0, 29, 0, 0, 0, 0x000 }, + { 2, 3, 27, 0, 0, 2, 0x000 }, + { 1, 2, 28, 0, 0, 1, 0x000 } +}; + +static const struct BgTemplate gUnknown_840BBA0[] = { + { 1, 0, 29, 0, 0, 1, 0x000 }, + { 0, 1, 30, 2, 0, 0, 0x000 } +}; + +static const struct WindowTemplate gUnknown_840BBA8[] = { + { 2, 6, 4, 18, 9, 0xD, 0x000 }, + DUMMY_WIN_TEMPLATE +}; + +static const u8 gUnknown_840BBB8[][2] = { + {0x3f, 0x3f}, + {0x00, 0x3f}, + {0x3f, 0x00}, + {0x00, 0x00} +}; + +static const struct CompressedSpriteSheet gUnknown_840BBC0[] = { + {gUnknown_8402A64, 0x0080, 0}, + {gUnknown_8402ADC, 0x0080, 1}, + {gUnknown_8402B2C, 0x0800, 2}, + {gUnknown_84028F8, 0x0400, 3}, + {gUnknown_8402CD4, 0x0100, 4} +}; + +static const struct SpritePalette gUnknown_840BBE8[] = { + {gUnknown_8402A44, 0}, + {gUnknown_8402ABC, 1}, + {gUnknown_840270C, 3}, + {0} +}; + +static const struct Coords16 gUnknown_840BC08[] = { + {0x0048, 0x0050}, + {0x0088, 0x004a}, + {0x00a8, 0x0050}, + {0x0078, 0x0050}, + {0x0068, 0x0056}, + {0x0058, 0x004a}, + {0x00b8, 0x004a}, + {0x0038, 0x0056}, + {0x0098, 0x0056} +}; + +static const struct OamData gOamData_840BC2C = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_1, .tileNum = 0x000, .priority = 2, .paletteNum = 0 }; + +static const struct OamData gOamData_840BC34 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_0, .tileNum = 0x000, .priority = 2, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BC3C[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gAnimCmd_840BC50[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BC64[] = { + gAnimCmd_840BC3C, + gAnimCmd_840BC50 +}; + +static const struct SpriteTemplate gUnknown_840BC6C = {0, 0, &gOamData_840BC2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80EE29C}; + +static const struct SpriteTemplate gUnknown_840BC84 = {1, 1, &gOamData_840BC34, gAnimCmdTable_840BC64, NULL, gDummySpriteAffineAnimTable, sub_80EE350}; + +static const struct OamData gOamData_840BC9C = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_2, .tileNum = 0x000, .priority = 2, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BCA4[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(48, 8), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BCB8[] = { + gAnimCmd_840BCA4 +}; + +static const struct SpriteTemplate gUnknown_840BCBC = {2, 1, &gOamData_840BC9C, gAnimCmdTable_840BCB8, NULL, gDummySpriteAffineAnimTable, sub_80EE4DC}; + +static const struct OamData gOamData_840BCD4 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_V_RECTANGLE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 3, .paletteNum = 0 }; + +static const struct SpriteTemplate gUnknown_840BCDC = {3, 3, &gOamData_840BCD4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BCF4 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_H_RECTANGLE, .matrixNum = 0, .size = ST_OAM_SIZE_1, .tileNum = 0x000, .priority = 3, .paletteNum = 0 }; + +static const struct SpriteTemplate gUnknown_840BCFC = {4, 3, &gOamData_840BCF4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BD14 = { .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 1, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BD1C[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BD24[] = { + ANIMCMD_FRAME(64, 1), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BD2C[] = { + ANIMCMD_FRAME(128, 1), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BD34[] = { + ANIMCMD_FRAME(192, 1), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BD3C[] = { + ANIMCMD_FRAME(256, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BD44[] = { + gAnimCmd_840BD1C, + gAnimCmd_840BD24, + gAnimCmd_840BD2C, + gAnimCmd_840BD34, + gAnimCmd_840BD3C +}; + +static const union AffineAnimCmd gAffineAnimCmd_840BD58[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gAffineAnimCmd_840BD68[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(32, 32, 0, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gAffineAnimCmdTable_840BD80[] = { + gAffineAnimCmd_840BD58, + gAffineAnimCmd_840BD68 +}; + +static const struct SpriteTemplate gUnknown_840BD88 = {5, 7, &gOamData_840BD14, gAnimCmdTable_840BD44, NULL, gAffineAnimCmdTable_840BD80, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BDA0 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 1, .paletteNum = 0 }; + +static const struct SpriteTemplate gUnknown_840BDA8 = {7, 7, &gOamData_840BDA0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const struct SpriteTemplate gUnknown_840BDC0 = {6, 6, &gOamData_840BDA0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BDD8 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_H_RECTANGLE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 0, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmds_840BDE0[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmds_840BDE8[] = { + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BDF4[] = { + gAnimCmds_840BDE0, + gAnimCmds_840BDE8 +}; + +static const struct SpriteTemplate gUnknown_840BDFC = {8, 8, &gOamData_840BDD8, gAnimCmdTable_840BDF4, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BE14 = { .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 1, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BE1C[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BE24[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BE2C[] = { + ANIMCMD_FRAME(96, 0), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BE34[] = { + ANIMCMD_FRAME(160, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BE3C[] = { + gAnimCmd_840BE1C, + gAnimCmd_840BE24, + gAnimCmd_840BE2C, + gAnimCmd_840BE34 +}; + +static const struct SpriteTemplate gUnknown_840BE4C = {9, 6, &gOamData_840BE14, gAnimCmdTable_840BE3C, NULL, gAffineAnimCmdTable_840BD80, SpriteCallbackDummy}; + +static const struct OamData gOamData_840BE64 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_V_RECTANGLE, .matrixNum = 0, .size = ST_OAM_SIZE_3, .tileNum = 0x000, .priority = 1, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BE6C[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_840BE78[] = { + ANIMCMD_FRAME(64, 8), + ANIMCMD_FRAME(72, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BE84[] = { + gAnimCmd_840BE6C, + gAnimCmd_840BE78 +}; + +static const struct SpriteTemplate gUnknown_840BE8C = {10, 10, &gOamData_840BE64, gAnimCmdTable_840BE84, NULL, gDummySpriteAffineAnimTable, sub_80EE1C4}; + +static const struct OamData gOamData_840BEA4 = { .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, .mosaic = FALSE, .bpp = ST_OAM_4BPP, .shape = ST_OAM_SQUARE, .matrixNum = 0, .size = ST_OAM_SIZE_1, .tileNum = 0x000, .priority = 1, .paletteNum = 0 }; + +static const union AnimCmd gAnimCmd_840BEAC[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(12, 8), + ANIMCMD_END +}; + +static const union AnimCmd *const gAnimCmdTable_840BEC0[] = { + gAnimCmd_840BEAC +}; + +static const struct SpriteTemplate gUnknown_840BEC4 = {11, 11, &gOamData_840BEA4, gAnimCmdTable_840BEC0, NULL, gDummySpriteAffineAnimTable, sub_80EE8E4}; + +static const struct CompressedSpriteSheet gUnknown_840BEDC[] = { + {gUnknown_840926C, 0x0800, 6}, + {gUnknown_84096CC, 0x0800, 7}, + {gUnknown_840A3E4, 0x2800, 5}, + {gUnknown_8409A3C, 0x0800, 8}, + {gUnknown_8409D20, 0x1800, 9}, + {gUnknown_840B874, 0x0a00, 10}, + {gUnknown_840BAE0, 0x0200, 11} +}; + +// POTENTIAL UB +// This array is passed to LoadSpritePalettes in sub_80EEBE4. +// LoadSpritePalettes uses a {0} entry to signal end of array. +// Because such an entry is absent in this case, the function +// continues reading into the next .rodata section. +static const struct SpritePalette gUnknown_840BF14[] = { + {gUnknown_8405DA4, 6}, + {gUnknown_84096AC, 7}, + {gUnknown_8409A1C, 8}, + {gUnknown_840B834, 10}, + {gUnknown_840B854, 11}, + // {0} +}; + +static void sub_80EC5A4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_80EC5B8(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(sub_80EC870); +} + +static void load_copyright_graphics(u16 a, u16 b, u16 c) +{ + LZ77UnCompVram(gUnknown_8402280, (void *)BG_VRAM + a); + LZ77UnCompVram(gUnknown_84024E4, (void *)BG_VRAM + b); + LoadPalette(gUnknown_8402260, c, 0x20); +} + +static void SerialCb_CopyrightScreen(void) +{ + GameCubeMultiBoot_HandleSerialInterrupt(&gUnknown_203AAD4); +} + +static bool8 sub_80EC62C(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + ((vu16*)PLTT)[0] = RGB_WHITE; + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT + sizeof(vu16), PLTT_SIZE - sizeof(vu16)); + ResetPaletteFade(); + load_copyright_graphics(0, 0x3800, 0); + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes();BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); + SetGpuReg(REG_OFFSET_BG0CNT, 0x700); + EnableInterrupts(INTR_FLAG_VBLANK); + SetVBlankCallback(sub_80EC5A4); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); + SetSerialCallback(SerialCb_CopyrightScreen); + GameCubeMultiBoot_Init(&gUnknown_203AAD4); + // fallthrough + default: + UpdatePaletteFade(); + gMain.state++; + GameCubeMultiBoot_Main(&gUnknown_203AAD4); + break; + case 140: + GameCubeMultiBoot_Main(&gUnknown_203AAD4); + if (gUnknown_203AAD4.gcmb_field_2 != 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state++; + } + break; + case 141: + if (!UpdatePaletteFade()) + { + gMain.state++; + if (gUnknown_203AAD4.gcmb_field_2 != 0) + { + if (gUnknown_203AAD4.gcmb_field_2 == 2) + { + if (*((u32 *)0x020000AC) == 0x65366347) + { + CpuCopy16(gMultiBootProgram_PokemonColosseum_Start, (void *)EWRAM_START, 0x28000); + *((u32 *)0x020000AC) = 0x65366347; + } + GameCubeMultiBoot_ExecuteProgram(&gUnknown_203AAD4); + } + } + else + { + GameCubeMultiBoot_Quit(); + SetSerialCallback(SerialCB); + } + return FALSE; + } + break; + case 142: + sub_800B388(); + SetMainCallback2(sub_80EC5B8); + break; + } + return TRUE; +} + +void c2_copyright_1(void) +{ + if (!sub_80EC62C()) + { + ResetMenuAndMonGlobals(); + Save_ResetSaveCounters(); + Save_LoadGameData(0); + if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_INVALID) + Sav2_ClearSetDefault(); + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + } +} + +void sub_80EC864(void) +{ + sub_80EC62C(); +} + +static void sub_80EC870(void) +{ + switch (gMain.state) + { + default: + gMain.state = 0; + // fallthrough + case 0: + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + InitHeap(gHeap, HEAP_SIZE); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + ResetTempTileDataBuffers(); + sub_80ECA00(); + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + FillPalette(0, 0, 0x400); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_840BB80, NELEMS(gUnknown_840BB80)); + break; + case 1: + LoadPalette(gUnknown_8402630, 0x00, 0x20); + DecompressAndCopyTileDataToVram(3, gUnknown_8402650, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, gUnknown_8402668, 0, 0, 1); + LoadPalette(gUnknown_840270C, 0xD0, 0x20); + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + sub_80ECA70(); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + SetMainCallback2(sub_80EC9D4); + SetVBlankCallback(sub_80EC9EC); + } + return; + } + gMain.state++; +} + +static void sub_80EC9D4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void sub_80EC9EC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_80ECA00(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); +} + +static void sub_80ECA70(void) +{ + struct IntroSequenceData * ptr = Alloc(sizeof(struct IntroSequenceData)); + sub_80ECAA8(ptr, sub_80ECAF0); + ptr->field_0005 = CreateTask(sub_80ECAB0, 3); + SetWordTaskArg(ptr->field_0005, 0, (uintptr_t)ptr); +} + +static void sub_80ECAA8(struct IntroSequenceData * ptr, void (*cb)(struct IntroSequenceData *)) +{ + ptr->field_0000 = cb; + ptr->field_0004 = 0; +} + +static void sub_80ECAB0(u8 taskId) +{ + struct IntroSequenceData * ptr = (void *)GetWordTaskArg(taskId, 0); + if (JOY_NEW(A_BUTTON | START_BUTTON | SELECT_BUTTON) && ptr->field_0000 != sub_80EDBE8) + sub_80ECAA8(ptr, sub_80EDBE8); + ptr->field_0000(ptr); +} + +static void sub_80ECAF0(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + InitWindows(gUnknown_840BBA8); + LZ77UnCompWram(gUnknown_840272C, this->field_043C); + LZ77UnCompWram(gUnknown_84028F8, this->field_003C); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); + FillWindowPixelBuffer(0, 0x00); + BlitBitmapToWindow(0, this->field_043C, 0, 40, 144, 16); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + this->field_0004++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + sub_80ECAA8(this, sub_80ECB98); + break; + } +} + +static void sub_80ECB98(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); + SetGpuReg(REG_OFFSET_WININ, 0x3F00); + SetGpuReg(REG_OFFSET_WINOUT, 0x0000); + SetGpuReg(REG_OFFSET_WIN1H, 0x00F0); + SetGpuReg(REG_OFFSET_WIN1V, 0x0000); + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + ShowBg(3); + BlendPalettes(0xFFFFFFFF, 0x00, RGB_BLACK); + this->field_0004++; + break; + case 2: + this->field_0012 += 8; + if (this->field_0012 >= 0x30) + this->field_0012 = 0x30; + SetGpuReg(REG_OFFSET_WIN1V, ((0x50 - this->field_0012) << 8) | (0x50 + this->field_0012)); + if (this->field_0012 == 0x30) + sub_80ECAA8(this, sub_80ECC3C); + break; + } +} + +static void sub_80ECC3C(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + PlaySE(BGM_FRLG_GAMEFREAK_LOGO); + sub_80EDC40(); + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0012++; + if (this->field_0012 == 30) + { + sub_80EDDF0(); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 2: + this->field_0012++; + if (this->field_0012 == 90) + sub_80ECAA8(this, sub_80ECCA8); + break; + } +} + +static void sub_80ECCA8(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + sub_80EDED8(); + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0012++; + if (this->field_0012 >= 40) + this->field_0004++; + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); + StartBlendTask(0, 16, 16, 0, 48, 0); + this->field_0004++; + break; + case 3: + ShowBg(2); + this->field_0004++; + break; + case 4: + if (!IsBlendTaskActive()) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 5: + this->field_0012++; + if (this->field_0012 > 50) + sub_80ECAA8(this, sub_80ECD60); + break; + } +} + +static void sub_80ECD60(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); + StartBlendTask(0, 16, 16, 0, 16, 0); + this->field_0008 = 0; + this->field_000A = 16; + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0014 = sub_80EDF68(); + this->field_0004++; + break; + case 2: + if (!IsBlendTaskActive()) + { + BlitBitmapToWindow(0, this->field_003C, 0x38, 0x06, 0x20, 0x40); + BlitBitmapToWindow(0, this->field_043C, 0x00, 0x28, 0x90, 0x10); + CopyWindowToVram(0, 2); + this->field_0004++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + DestroySprite(this->field_0014); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + this->field_0012++; + if (this->field_0012 > 90) + { + SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2); + StartBlendTask(16, 0, 0, 16, 20, 0); + this->field_0004++; + } + break; + case 5: + if (!IsBlendTaskActive()) + { + HideBg(2); + this->field_0004++; + } + break; + case 6: + ResetSpriteData(); + FreeAllSpritePalettes(); + this->field_0012 = 0; + this->field_0004++; + break; + case 7: + this->field_0012++; + if (this->field_0012 > 20) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + sub_80ECAA8(this, sub_80ECEA4); + } + break; + } +} + +static void sub_80ECEA4(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + SetVBlankCallback(NULL); + LoadPalette(gUnknown_8402D34, 0x10, 0x20); + LoadPalette(gUnknown_84048CC, 0x20, 0x20); + BlendPalettes(0x06, 0x10, RGB_WHITE); + InitBgsFromTemplates(0, gUnknown_840BB88, NELEMS(gUnknown_840BB88)); + DecompressAndCopyTileDataToVram(1, gUnknown_84048EC, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8404F7C, 0, 0, 1); + ShowBg(1); + HideBg(0); + HideBg(2); + HideBg(3); + sub_80EEBE4(); + SetVBlankCallback(sub_80EC9EC); + this->field_0004++; + break; + case 1: + if (!FreeTempTileDataBuffersIfPossible()) + { + DecompressAndCopyTileDataToVram(0, gUnknown_8402D54, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8403FE8, 0, 0, 1); + ResetBgPositions(); + ShowBg(1); + this->field_0004++; + } + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + ShowBg(0); + CreateTask(sub_80ED0AC, 0); + BeginNormalPaletteFade(0x00000006, -2, 16, 0, RGB_WHITE); + this->field_0004++; + } + break; + case 3: + if (!gPaletteFade.active) + { + m4aSongNumStart(BGM_FRLG_OPENING); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + this->field_0012++; + if (this->field_0012 == 20) + { + CreateTask(sub_80ED140, 0); + sub_80ED118(); + } + if (this->field_0012 >= 30) + { + BlendPalettes(-2, 16, RGB_WHITE); + DestroyTask(FindTaskIdByFunc(sub_80ED0AC)); + DestroyTask(FindTaskIdByFunc(sub_80ED140)); + sub_80ECAA8(this, sub_80ED188); + } + break; + case 5: + if (!gPaletteFade.active) + { + DestroyTask(FindTaskIdByFunc(sub_80ED0AC)); + DestroyTask(FindTaskIdByFunc(sub_80ED140)); + sub_80ECAA8(this, sub_80ED188); + } + break; + } +} + +static void sub_80ED0AC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + data[0]++; + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + if (data[1] > 2) + data[1] = 0; + ChangeBgY(0, data[1] << 15, 0); + } + if (data[2]) + { + data[3] += 0x120; + ChangeBgY(0, data[3], 2); + } +} + +static void sub_80ED118(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED0AC); + gTasks[taskId].data[2] = TRUE; +} + +static void sub_80ED140(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + data[0]++; + if (data[0] > 3) + { + data[0] = 0; + if (data[1] < 2) + data[1]++; + ChangeBgY(1, data[1] << 15, 0); + } +} + +static void sub_80ED188(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + BlendPalettes(0xFFFFFFFE, 16, RGB_WHITE); + InitBgsFromTemplates(0, gUnknown_840BB90, NELEMS(gUnknown_840BB90)); + DecompressAndCopyTileDataToVram(3, gUnknown_8405414, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, gUnknown_8405890, 0, 0, 1); + ShowBg(3); + this->field_0004++; + break; + case 1: + if (!FreeTempTileDataBuffersIfPossible()) + { + SetVBlankCallback(NULL); + LoadPalette(gUnknown_84053B4, 0x10, 0x60); + LoadPalette(gUnknown_8405DA4, 0x50, 0x20); + LoadPalette(gUnknown_8406634, 0x60, 0x20); + BlendPalettes(0xFFFFFFFE, 16, RGB_WHITE); + DecompressAndCopyTileDataToVram(0, gUnknown_8405B28, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8405CDC, 0, 0, 1); + DecompressAndCopyTileDataToVram(1, gUnknown_8406654, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_84071D0, 0, 0, 1); + DecompressAndCopyTileDataToVram(2, gUnknown_8405DC4, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gUnknown_840644C, 0, 0, 1); + ResetBgPositions(); + ShowBg(0); + HideBg(1); + HideBg(2); + ChangeBgY(2, 0x0001CE00, 0); + ChangeBgY(1, 0x00002800, 0); + CreateTask(sub_80ED40C, 0); + sub_80ED444(this); + BlendPalettes(0xFFFFFFFE, 16, RGB_WHITE); + SetVBlankCallback(sub_80EC9EC); + this->field_0004++; + } + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + BeginNormalPaletteFade(0xFFFFFFFE, -2, 16, 0, RGB_WHITE); + this->field_0004++; + } + break; + case 3: + if (!gPaletteFade.active) + { + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + this->field_0012++; + if (this->field_0012 >= 60) + { + this->field_0012 = 0; + DestroyTask(FindTaskIdByFunc(sub_80ED40C)); + sub_80ED4A0(this); + CreateTask(sub_80ED428, 0); + ChangeBgY(3, 0x00010000, 0); + HideBg(0); + ShowBg(3); + ShowBg(1); + ShowBg(2); + this->field_0004++; + } + break; + case 5: + if (!IsDma3ManagerBusyWithBgCopy()) + { + this->field_0012 = 0; + this->field_0004++; + } + break; + case 6: + this->field_0012++; + if (this->field_0012 >= 60) + { + DestroyTask(FindTaskIdByFunc(sub_80ED428)); + sub_80ECAA8(this, sub_80ED4C0); + } + break; + } +} + +static void sub_80ED40C(u8 taskId) +{ + ChangeBgX(3, 0x0E0, 2); + ChangeBgX(0, 0x110, 1); +} + +static void sub_80ED428(u8 taskId) +{ + ChangeBgY(2, 0x020, 1); + ChangeBgY(1, 0x024, 2); +} + +static void sub_80ED444(struct IntroSequenceData * this) +{ + u8 spriteId; + + this->field_001C = NULL; + this->field_0020 = NULL; + + spriteId = CreateSprite(&gUnknown_840BDA8, 168, 80, 11); + if (spriteId != MAX_SPRITES) + this->field_0020 = &gSprites[spriteId]; + + spriteId = CreateSprite(&gUnknown_840BDC0, 72, 80, 12); + if (spriteId != MAX_SPRITES) + this->field_001C = &gSprites[spriteId]; +} + +static void sub_80ED4A0(struct IntroSequenceData * this) +{ + if (this->field_001C != NULL) + DestroySprite(this->field_001C); + if (this->field_0020 != NULL) + DestroySprite(this->field_0020); +} + +static void sub_80ED4C0(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + LoadPalette(gUnknown_8407430, 0x10, 0x40); + LoadPalette(gUnknown_8405DA4, 0x50, 0x20); + BlendPalettes(0xFFFFFFFE, 16, RGB_WHITE); + InitBgsFromTemplates(0, gUnknown_840BBA0, NELEMS(gUnknown_840BBA0)); + DecompressAndCopyTileDataToVram(1, gUnknown_8407470, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8407A50, 0, 0, 1); + ShowBg(1); + HideBg(0); + HideBg(2); + HideBg(3); + ResetBgPositions(); + this->field_0004++; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuRegBits(REG_OFFSET_WININ, 0x12); + ClearGpuRegBits(REG_OFFSET_WININ, 0x01); + SetGpuRegBits(REG_OFFSET_WINOUT, 0x00); + SetGpuReg(REG_OFFSET_WIN0V, 0x2080); + SetGpuReg(REG_OFFSET_WIN0H, 0x0078); + break; + case 1: + if (!FreeTempTileDataBuffersIfPossible()) + { + DecompressAndCopyTileDataToVram(0, gUnknown_8407B9C, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8408D98, 0, 0, 1); + gUnknown_203AB00 = 4; + gUnknown_203AB02 = 52; + ChangeBgX(0, 0x00001800, 0); + ChangeBgY(0, 0x0001F000, 0); + this->field_0004++; + } + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + BlendPalettes(0xFFFFFFFE, 0, RGB_WHITE); + ShowBg(0); + CreateTask(sub_80ED714, 0); + sub_80EE4F8(this); + sub_80EE528(this->field_0018, 0, 0xB4, 0x34); + CreateTask(sub_80EE200, 0); + sub_80ED6D8(); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 3: + this->field_0012++; + if (this->field_0012 == 16) + sub_80ED7D4(this); + if (!sub_80EE5C8(this) && !FuncIsActiveTask(sub_80EE200)) + sub_80ECAA8(this, sub_80ED898); + break; + } +} + +static void sub_80ED69C(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + ChangeBgX(1, 0x400, 2); + else + ChangeBgX(1, 0x020, 2); +} + +static void sub_80ED6D8(void) +{ + CreateTask(sub_80ED69C, 0); +} + +static void sub_80ED6EC(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED69C); + gTasks[taskId].data[0] = 1; +} + +static void sub_80ED714(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (data[0] == 0) + { + data[1]++; + if (data[1] >= 30) + { + data[1] = 0; + data[2] ^= 1; + ChangeBgY(0, (data[2] << 15) + 0x1F000, 0); + } + } +} + +static void sub_80ED760(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED714); + gTasks[taskId].data[0] = 1; +} + +static void sub_80ED788(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED714); + gTasks[taskId].data[0] = 0; +} + +static u8 sub_80ED7B0(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED714); + return gTasks[taskId].data[2]; +} + +static void sub_80ED7D4(struct IntroSequenceData * this) +{ + u8 spriteId = CreateSprite(&gUnknown_840BDFC, 296, 112, 7); + if (spriteId != MAX_SPRITES) + { + this->field_0024 = &gSprites[spriteId]; + this->field_0024->callback = sub_80ED818; + } + else + this->field_0024 = NULL; +} + +static void sub_80ED818(struct Sprite * sprite) +{ + s16 * data = sprite->data; + + switch (data[0]) + { + case 0: + data[1] = sprite->pos1.x << 5; + data[2] = 160; + data[0]++; + // fallthrough + case 1: + data[1] -= data[2]; + sprite->pos1.x = data[1] >> 5; + if (sprite->pos1.x <= 52) + { + sub_80ED6EC(); + data[0]++; + } + break; + case 2: + data[1] -= 32; + sprite->pos1.x = data[1] >> 5; + if (sprite->pos1.x <= -32) + { + sprite->invisible = TRUE; + sprite->data[0]++; + DestroySprite(sprite); + } + break; + } +} + +static void sub_80ED898(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0012++; + if (this->field_0012 > 30) + { + sub_80EE5E4(this); + this->field_0004++; + } + break; + case 2: + if (!sub_80EE850(this)) + { + this->field_0012 = 0; + this->field_0004++; + } + break; + case 3: + this->field_0012++; + if (this->field_0012 > 30) + { + sub_80ED760(); + sub_80EDF94(this); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + if (this->field_0006) + { + sub_80EE6A4(this); + this->field_0004++; + } + break; + case 5: + if (!sub_80EE850(this)) + { + sub_80ED788(); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 6: + this->field_0012++; + if (this->field_0012 > 16) + { + sub_80EE970(this->field_0018, 8, 12, 5); + this->field_0004++; + } + break; + case 7: + if (!sub_80EE850(this)) + { + sub_80EE970(this->field_0018, 8, 12, 5); + this->field_0004++; + } + break; + case 8: + if (!sub_80EE850(this)) + { + this->field_0012 = 0; + this->field_0004++; + } + break; + case 9: + this->field_0012++; + if (this->field_0012 > 20) + { + sub_80EEA94(this); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 10: + if (!sub_80ED7B0()) + { + sub_80ED760(); + sub_80EDAF0(this); + this->field_0004++; + } + break; + case 11: + HideBg(0); + this->field_0012 = 0; + this->field_0004++; + break; + case 12: + this->field_0012++; + if (this->field_0012 == 48) + BeginNormalPaletteFade(0x00000006, 2, 0, 16, RGB_WHITE); + if (this->field_0012 > 120) + { + sub_80EDB70(this); + sub_80EDBAC(this); + this->field_0004++; + this->field_0012 = 0; + } + break; + case 13: + this->field_0012++; + if (this->field_0012 > 8) + { + CpuFill16(RGB_WHITE, gPlttBufferUnfaded + 16, 64); + BeginNormalPaletteFade(0xFFFFFFFE, -2, 0, 16, RGB_BLACK); + this->field_0004++; + } + break; + case 14: + if (!gPaletteFade.active) + { + this->field_0012 = 0; + this->field_0004++; + } + break; + case 15: + this->field_0012++; + if (this->field_0012 > 60) + sub_80ECAA8(this, sub_80EDBE8); + break; + default: + if (JOY_NEW(R_BUTTON)) + { + BlendPalettes(0xFFFF0064, 0, RGB_WHITE); + this->field_0018->pos2.x = 0; + this->field_0018->pos1.x = 0xB4; + this->field_0004 = 1; + this->field_0012 = 30; + } + break; + } +} + +static void sub_80EDAD8(struct Sprite * sprite) +{ + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +static void sub_80EDAF0(struct IntroSequenceData * this) +{ + int i; + + for (i = 0; i < 4; i++) + { + int x = (i & 1) * 48 + 49; + int y = (i / 2) * 64 + 72; + u8 spriteId = CreateSprite(&gUnknown_840BE4C, x, y, 8); + if (spriteId != MAX_SPRITES) + { + StartSpriteAnim(&gSprites[spriteId], i); + this->field_0028[i] = &gSprites[spriteId]; + if (i & 1) + this->field_0028[i]->oam.shape = ST_OAM_V_RECTANGLE; + sub_80EDAD8(this->field_0028[i]); + } + } +} + +static void sub_80EDB70(struct IntroSequenceData * this) +{ + this->field_0018->pos1.x += this->field_0018->pos2.x; + this->field_0018->pos1.y += this->field_0018->pos2.y; + sub_8007FFC(this->field_0018, 0, 0x2A); + this->field_0018->callback = SpriteCallbackDummy; + StartSpriteAffineAnim(this->field_0018, 1); +} + +static void nullsub_83(struct Sprite * sprite) +{ +} + +static void sub_80EDBAC(struct IntroSequenceData * this) +{ + int i; + + for (i = 0; i < 4; i++) + { + StartSpriteAffineAnim(this->field_0028[i], 1); + this->field_0028[i]->callback = nullsub_83; + sub_8007FFC(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]); + } +} + +static void sub_80EDBE8(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + FillPalette(RGB_BLACK, 0, 0x400); + this->field_0004++; + break; + case 1: + if (!FreeTempTileDataBuffersIfPossible()) + { + DestroyTask(this->field_0005); + Free(this); + DisableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(NULL); + SetMainCallback2(CB2_InitTitleScreen); + } + break; + } +} + +static void sub_80EDC40(void) +{ + int i; + u8 spriteId; + + for (i = 0; i < NELEMS(gUnknown_840BBC0); i++) + { + LoadCompressedSpriteSheet(&gUnknown_840BBC0[i]); + } + LoadSpritePalettes(gUnknown_840BBE8); + gUnknown_203AB0E = 0x60; + gUnknown_203AB10 = 0x10; + gUnknown_203AB12 = 0x07; + gUnknown_203AB14 = 0x05; + gUnknown_203AB16 = 0x08; + gUnknown_203AB18 = 0x5A; + gUnknown_203AB1A = 0x78; + gUnknown_203AB1E = 0x01; + gUnknown_203AB20 = 0x01; + gUnknown_203AB22 = 0x05; + gUnknown_203AB24 = 0x05; + if (gUnknown_203AB28 == 0) + gUnknown_203AB28 = 354128453; + spriteId = CreateSprite(&gUnknown_840BC6C, 0xF8, 0x37, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 0xF80; + gSprites[spriteId].data[1] = 0x370; + gSprites[spriteId].data[2] = gUnknown_203AB0E; + gSprites[spriteId].data[3] = gUnknown_203AB10; + StoreWordInTwoHalfwords(&gSprites[spriteId].data[6], gUnknown_203AB28); + } +} + +static void sub_80EDD28(s16 x, s16 y, u16 a2) +{ + u8 spriteId; + s16 r4 = (a2 & gUnknown_203AB12) + 2; + s16 r2 = gUnknown_203AB2C; + gUnknown_203AB2C++; + if (gUnknown_203AB2C > 3) + gUnknown_203AB2C = -3; + x += r4; + y += r2; + if (x >= 1 && x <= 0xEF) + { + spriteId = CreateSprite(&gUnknown_840BC84, x, y, 1); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = x << gUnknown_203AB22; + gSprites[spriteId].data[1] = y << gUnknown_203AB24; + gSprites[spriteId].data[2] = gUnknown_203AB1E * r4; + gSprites[spriteId].data[3] = gUnknown_203AB20 * r2; + } + } +} + +static void sub_80EDDF0(void) +{ + CreateTask(sub_80EDE04, 1); +} + +static void sub_80EDE04(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 r6; + u8 spriteId; + + data[2]++, data[3]++; + if (data[2] > 6) + { + data[2] = 0; + r6 = data[0]; + spriteId = CreateSprite(&gUnknown_840BC84, gUnknown_840BC08[r6].x, gUnknown_840BC08[r6].y, 2); + StartSpriteAnim(&gSprites[spriteId], 1); + gSprites[spriteId].callback = sub_80EE40C; + gSprites[spriteId].data[1] = gUnknown_840BC08[r6].y << 4; + gSprites[spriteId].data[2] = 120; + gSprites[spriteId].data[3] = data[1]; + if (gSprites[spriteId].data[3] < 0) + gSprites[spriteId].data[3] = 1; + data[0]++; + if (data[0] < 0 || data[0] > 8) + { + data[1]++; + if (data[1] > 1) + DestroyTask(taskId); + else + data[0] = 0; + } + } +} + +static void sub_80EDED8(void) +{ + CreateTask(sub_80EDEEC, 2); +} + +static void sub_80EDEEC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 r2; + + if (data[0] == 0) + { + r2 = data[1]; + data[1] += 4; + if (data[1] < 0 || data[1] > 8) + data[1] -= 9; + CreateSprite(&gUnknown_840BCBC, gUnknown_840BC08[r2].x, gUnknown_840BC08[r2].y, 3); + data[2]++; + if (data[2] > 8) + DestroyTask(taskId); + } + data[0]++; + if (data[0] > 9) + data[0] = 0; +} + +static struct Sprite * sub_80EDF68(void) +{ + u8 spriteId = CreateSprite(&gUnknown_840BCDC, 120, 70, 4); + return &gSprites[spriteId]; +} + +static void sub_80EDF94(struct IntroSequenceData * this) +{ + u8 taskId; + this->field_0006 = 0; + taskId = CreateTask(sub_80EE024, 4); + SetWordTaskArg(taskId, 5, (uintptr_t)this); + gTasks[taskId].data[3] = 64; + gTasks[taskId].data[4] = GetBgX(0); +} + +static void sub_80EDFD8(int a, int b, int c, int d) +{ + ChangeBgY(0, (a << 15) + 0x1F000, 0); + ChangeBgX(0, d, 0); + ChangeBgX(0, b << 8, 2); + ChangeBgY(0, c << 8, 2); +} + +static void sub_80EE024(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + int b, c; + int angle; + switch (data[0]) + { + case 0: + data[7] = 2; + data[1] = 0; + data[8] = 6; + data[9] = 32; + data[0]++; + break; + case 1: + data[3] -= 2; + data[1]++; + if (data[1] > 15) + { + data[1] = 0; + data[0]++; + } + break; + case 2: + data[1]++; + if (data[1] == 14) + ((struct IntroSequenceData *)GetWordTaskArg(taskId, 5))->field_0006 = 1; + if (data[1] > 15) + { + data[1] = 0; + data[0]++; + } + break; + case 3: + data[3] += 8; + data[1]++; + if (data[1] == 4) + { + sub_80EE160(); + data[8] = 32; + data[9] = 48; + data[7] = 3; + } + if (data[1] > 7) + { + data[1] = 0; + data[0]++; + } + break; + case 4: + data[3] -= 8; + data[1]++; + if (data[1] > 3) + { + data[7] = 0; + data[3] = 64; + data[1] = 0; + data[0]++; + } + break; + case 5: + DestroyTask(taskId); + return; + } + angle = data[3]; + b = -((gSineTable[angle + 0x40] * data[9]) >> 8); + c = data[8] - ((gSineTable[angle] * data[8]) >> 8); + sub_80EDFD8(data[7], b, c, data[4]); +} + +static void sub_80EE160(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_840BE8C, 132, 78, 6); + spriteId = CreateSprite(&gUnknown_840BE8C, 132, 118, 6); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.shape = ST_OAM_H_RECTANGLE; + gSprites[spriteId].oam.size = ST_OAM_SIZE_2; + sub_80EDAD8(&gSprites[spriteId]); + StartSpriteAnim(&gSprites[spriteId], 1); + } +} + +static void sub_80EE1C4(struct Sprite * sprite) +{ + sprite->invisible ^= TRUE; + if (sprite->animEnded) + DestroySprite(sprite); +} + +static void sub_80EE200(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[1] = 0x400; + data[0]++; + // fallthrough + case 1: + data[2]++; + if (data[2] > 39 && data[1] > 16) + data[1] -= 16; + gUnknown_203AB30 = ChangeBgX(0, data[1], 1); + if (gUnknown_203AB30 >= 0x8000) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + if (gUnknown_203AB30 >= 0xEF00) + { + ChangeBgX(0, 0xEF00, 0); + DestroyTask(taskId); + } + break; + } +} + +static void sub_80EE29C(struct Sprite * sprite) +{ + u32 v; + sprite->data[0] -= sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->data[4] += 48; + sprite->pos1.x = sprite->data[0] >> 4; + sprite->pos1.y = sprite->data[1] >> 4; + sprite->pos2.y = gSineTable[(sprite->data[4] >> 4) + 0x40] >> 5; + sprite->data[5]++; + if (sprite->data[5] % gUnknown_203AB16) + { + LoadWordFromTwoHalfwords(&sprite->data[6], &v); + v = v * 1103515245 + 24691; + StoreWordInTwoHalfwords(&sprite->data[6], v); + v >>= 16; + sub_80EDD28(sprite->pos1.x, sprite->pos1.y + sprite->pos2.y, v); + } + if (sprite->pos1.x < -8) + DestroySprite(sprite); +} + +static void sub_80EE350(struct Sprite * sprite) +{ + u32 v; + + sprite->data[0] += sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->data[4]++; + sprite->data[5] += sprite->data[4]; + sprite->data[7]++; + sprite->pos1.x = (u16)sprite->data[0] >> gUnknown_203AB22; + sprite->pos1.y = sprite->data[1] >> gUnknown_203AB24; + if (gUnknown_203AB1C && sprite->data[3] < 0) + sprite->pos2.y = sprite->data[5] >> gUnknown_203AB1C; + if (sprite->data[7] > gUnknown_203AB18) + { + sprite->invisible = !sprite->invisible; + if (sprite->data[7] > gUnknown_203AB1A) + DestroySprite(sprite); + } + if (sprite->pos1.y + sprite->pos2.y < 0 || sprite->pos1.y + sprite->pos2.y > 160) + DestroySprite(sprite); +} + +static void sub_80EE40C(struct Sprite * sprite) +{ + if (sprite->data[2]) + { + sprite->data[2]--; + sprite->data[1]++; + sprite->pos1.y = sprite->data[1] >> 4; + if (sprite->pos1.y > 0x56) + { + sprite->pos1.y = 0x4A; + sprite->data[1] = 0x4A0; + } + if (sprite->animEnded) + { + if (sprite->data[0] == 0) + { + sprite->pos1.x += 26; + if (sprite->pos1.x > 188) + { + sprite->pos1.x = 376 - sprite->pos1.x; + sprite->data[0] = 1; + } + } + else + { + sprite->pos1.x -= 26; + if (sprite->pos1.x < 52) + { + sprite->pos1.x = 104 - sprite->pos1.x; + sprite->data[0] = 0; + } + } + StartSpriteAnim(sprite, 1); + } + } + else + { + if (sprite->data[3]) + DestroySprite(sprite); + if (sprite->animEnded) + StartSpriteAnim(sprite, 0); + sprite->data[1] += 4; + sprite->pos1.y = sprite->data[1] >> 4; + sprite->data[4]++; + if (sprite->data[4] > 50) + DestroySprite(sprite); + } +} + +static void sub_80EE4DC(struct Sprite * sprite) +{ + if (sprite->animEnded) + DestroySprite(sprite); +} + +static void sub_80EE4F8(struct IntroSequenceData * this) +{ + u8 spriteId = CreateSprite(&gUnknown_840BD88, 0, 0, 9); + this->field_0018 = &gSprites[spriteId]; +} + +static void sub_80EE528(struct Sprite * sprite, s16 a1, s16 a2, u16 a3) +{ + sprite->data[0] = a1 << 4; + sprite->data[1] = ((a2 - a1) << 4) / a3; + sprite->data[2] = a3; + sprite->data[3] = a2; + sprite->data[4] = 0; + sprite->pos1.x = a1; + sprite->pos1.y = 100; + sprite->callback = sub_80EE580; +} + +static void sub_80EE580(struct Sprite * sprite) +{ + sprite->data[4]++; + if (sprite->data[4] >= 40) + { + if (sprite->data[1] > 1) + sprite->data[1]--; + } + sprite->data[0] += sprite->data[1]; + sprite->pos1.x = sprite->data[0] >> 4; + if (sprite->pos1.x >= sprite->data[3]) + { + sprite->pos1.x = sprite->data[3]; + sprite->callback = SpriteCallbackDummy; + } +} + +static bool32 sub_80EE5C8(struct IntroSequenceData * ptr) +{ + return ptr->field_0018->callback == sub_80EE580 ? TRUE : FALSE; +} + +static void sub_80EE5E4(struct IntroSequenceData * ptr) +{ + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->pos2.y = 3; + ptr->field_0018->callback = sub_80EE610; +} + +static void sub_80EE610(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] > 8) + { + StartSpriteAnim(sprite, 1); + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 1: + PlayCry3(SPECIES_NIDORINO, 0x3F, 1); + sprite->data[1] = 0; + sprite->data[0]++; + break; + case 2: + sprite->data[2]++; + if (sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->pos2.y = sprite->pos2.y == 0 ? 1 : 0; + } + sprite->data[1]++; + if (sprite->data[1] > 48) + { + StartSpriteAnim(sprite, 0); + sprite->pos2.y = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +static void sub_80EE6A4(struct IntroSequenceData * ptr) +{ + gUnknown_203AB0A = 16; + gUnknown_203AB04 = 3; + gUnknown_203AB08 = 5; + gUnknown_203AB06 = 0; + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->data[2] = 0; + ptr->field_0018->data[3] = 0; + ptr->field_0018->data[4] = 0; + ptr->field_0018->data[7] = 40; + ptr->field_0018->callback = sub_80EE704; +} + +static void sub_80EE704(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] > 4) + { + StartSpriteAnim(sprite, 3); + sprite->data[0]++; + } + break; + case 1: + sprite->data[2] += sprite->data[7]; + sprite->data[3] += 8; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->pos2.y = -((gSineTable[sprite->data[3]] * gUnknown_203AB04) >> gUnknown_203AB08); + sprite->data[5]++; + if (sprite->data[5] > gUnknown_203AB06) + { + sprite->data[5] = 0; + sprite->data[7]--; + } + sprite->data[4]++; + if (sprite->data[4] > 15) + { + StartSpriteAnim(sprite, 2); + sprite->data[1] = 0; + sprite->data[6] = 0x4757; + sprite->data[7] = 28; + sprite->data[0]++; + } + break; + case 2: + sprite->data[2] += sprite->data[7]; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->data[1]++; + if (sprite->data[1] > 6) + { + sub_80EE864(sprite->pos1.x + sprite->pos2.x, sprite->pos1.y + sprite->pos2.y, sprite->data[6]); + sprite->data[6] *= 1103515245; + } + if (sprite->data[1] > 12) + { + StartSpriteAnim(sprite, 0); + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->data[1]++; + if (sprite->data[1] > 16) + { + sub_80EE970(sprite, gUnknown_203AB0A, -sprite->pos2.x, 4); + } + break; + } +} + +static bool8 sub_80EE850(struct IntroSequenceData * ptr) +{ + return ptr->field_0018->callback == SpriteCallbackDummy ? FALSE : TRUE; +} + +static void sub_80EE864(s16 a1, s16 a2, s16 a3) +{ + int i; + u8 spriteId; + + for (i = 0; i < 2; i++) + { + spriteId = CreateSprite(&gUnknown_840BEC4, a1 - 22, a2 + 24, 10); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[3] = (a3 % 13) + 8; + gSprites[spriteId].data[4] = a3 % 3; + gSprites[spriteId].data[7] = i; + a3 *= 1103515245; + } + } +} + +static void sub_80EE8E4(struct Sprite * sprite) +{ + s16 * data = sprite->data; + + switch (sprite->data[0]) + { + case 0: + data[1] = sprite->pos1.x << 4; + data[2] = sprite->pos1.y << 4; + sprite->data[0]++; + // fallthrough + case 1: + data[1] -= data[3]; + data[2] += data[4]; + sprite->pos1.x = data[1] >> 4; + sprite->pos1.y = data[2] >> 4; + if (sprite->animEnded) + DestroySprite(sprite); + break; + } + data[7]++; + if (data[7] > 1) + { + data[7] = 0; + sprite->invisible ^= TRUE; + } +} + +static void sub_80EE970(struct Sprite * sprite, u16 a1, s16 a2, u8 a3) +{ + sprite->data[0] = 0; + sprite->data[1] = a1; + sprite->data[2] = sprite->pos2.x << 4; + sprite->data[3] = (a2 << 4) / a1; + sprite->data[4] = 0; + sprite->data[5] = 0x800 / a1; + sprite->data[6] = 0; + sprite->data[7] = a3; + StartSpriteAnim(sprite, 2); + sprite->callback = sub_80EE9D4; +} + +static void sub_80EE9D4(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[6]++; + if (sprite->data[6] > 4) + { + StartSpriteAnim(sprite, 3); + sprite->data[6] = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[1]--; + if (sprite->data[1]) + { + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos2.x = sprite->data[2] >> 4; + sprite->pos2.y = -(gSineTable[sprite->data[4] >> 4] >> sprite->data[7]); + } + else + { + sprite->pos2.x = (u16)sprite->data[2] >> 4; + sprite->pos2.y = 0; + StartSpriteAnim(sprite, 2); + if (sprite->data[7] == 5) + sprite->callback = SpriteCallbackDummy; + else + { + sprite->data[6] = 0; + sprite->data[0]++; + } + } + break; + case 2: + sprite->data[6]++; + if (sprite->data[6] > 4) + { + StartSpriteAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +static void sub_80EEA94(struct IntroSequenceData * ptr) +{ + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->data[2] = 0; + ptr->field_0018->data[3] = 0; + ptr->field_0018->data[4] = 0; + ptr->field_0018->data[5] = 0; + ptr->field_0018->pos1.x += ptr->field_0018->pos2.x; + ptr->field_0018->pos2.x = 0; + gUnknown_203AB0C = 0x24; + gUnknown_203AB06 = 0x28; + gUnknown_203AB04 = 0x03; + gUnknown_203AB08 = 0x04; + ptr->field_0018->data[7] = 36; + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->callback = sub_80EEB08; +} + +static void sub_80EEB08(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] & 1) + { + sprite->data[2]++; + if (sprite->data[2] & 1) + sprite->pos2.x++; + else + sprite->pos2.x--; + } + if (sprite->data[1] > 17) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] >= gUnknown_203AB06) + { + StartSpriteAnim(sprite, 4); + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1] += sprite->data[7]; + sprite->pos2.x = -(sprite->data[1] >> 4); + sprite->pos2.y = -((gSineTable[sprite->data[1] >> 4] * gUnknown_203AB04) >> gUnknown_203AB08); + sprite->data[2]++; + if (sprite->data[7] > 12) + sprite->data[7]--; + if ((sprite->data[1] >> 4) > 0x3F) + sprite->callback = SpriteCallbackDummy; + break; + } +} + +static void sub_80EEBE4(void) +{ + int i; + + for (i = 0; i < NELEMS(gUnknown_840BEDC); i++) + { + LoadCompressedSpriteSheet(&gUnknown_840BEDC[i]); + } + // gUnknown_840BF14 is not properly terminated, so this + // call exhibits undefined behavior. + LoadSpritePalettes(gUnknown_840BF14); +} diff --git a/src/main.c b/src/main.c index ae9a33e81..0d4e2ee1e 100644 --- a/src/main.c +++ b/src/main.c @@ -55,7 +55,12 @@ static void VCountIntr(void); static void SerialIntr(void); static void IntrDummy(void); -const u8 gGameVersion = VERSION_FIRE_RED; +#if defined(FIRERED) +#define GAME_VERSION VERSION_FIRE_RED +#elif defined(LEAF_GREEN) +#define GAME_VERSION VERSION_LEAF_GREEN +#endif +const u8 gGameVersion = GAME_VERSION; const u8 gGameLanguage = GAME_LANGUAGE; diff --git a/sym_ewram.txt b/sym_ewram.txt index 2c791be78..63b75ae19 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1112,75 +1112,9 @@ gUnknown_203AAC4: @ 203AAC4 gUnknown_203AAC6: @ 203AAC6 .space 0xE -gUnknown_203AAD4: @ 203AAD4 - .space 0x2C - -gUnknown_203AB00: @ 203AB00 - .space 0x2 - -gUnknown_203AB02: @ 203AB02 - .space 0x2 - -gUnknown_203AB04: @ 203AB04 - .space 0x2 - -gUnknown_203AB06: @ 203AB06 - .space 0x2 - -gUnknown_203AB08: @ 203AB08 - .space 0x2 - -gUnknown_203AB0A: @ 203AB0A - .space 0x2 - -gUnknown_203AB0C: @ 203AB0C - .space 0x2 - -gUnknown_203AB0E: @ 203AB0E - .space 0x2 - -gUnknown_203AB10: @ 203AB10 - .space 0x2 - -gUnknown_203AB12: @ 203AB12 - .space 0x2 - -gUnknown_203AB14: @ 203AB14 - .space 0x2 - -gUnknown_203AB16: @ 203AB16 - .space 0x2 - -gUnknown_203AB18: @ 203AB18 - .space 0x2 - -gUnknown_203AB1A: @ 203AB1A - .space 0x2 - -gUnknown_203AB1C: @ 203AB1C - .space 0x2 - -gUnknown_203AB1E: @ 203AB1E - .space 0x2 - -gUnknown_203AB20: @ 203AB20 - .space 0x2 - -gUnknown_203AB22: @ 203AB22 - .space 0x2 - -gUnknown_203AB24: @ 203AB24 - .space 0x4 - -gUnknown_203AB28: @ 203AB28 - .space 0x4 - -gUnknown_203AB2C: @ 203AB2C - .space 0x4 - -gUnknown_203AB30: @ 203AB30 - .space 0x4 + .include "src/intro.o" + .align 2 gUnknown_203AB34: @ 203AB34 .space 0x4 |