diff options
-rw-r--r-- | asm/seagallop.s | 795 | ||||
-rw-r--r-- | data/data_8468C98.s | 37 | ||||
-rw-r--r-- | data/seagallop/unk_8468C98.png | bin | 0 -> 283 bytes | |||
-rw-r--r-- | data/seagallop/unk_84691B8.pal | 19 | ||||
-rw-r--r-- | data/seagallop/unk_84691D8.bin | bin | 0 -> 2048 bytes | |||
-rw-r--r-- | data/seagallop/unk_84699D8.bin | bin | 0 -> 2048 bytes | |||
-rw-r--r-- | data/seagallop/unk_846A1D8.png | bin | 0 -> 595 bytes | |||
-rw-r--r-- | data/seagallop/unk_846A6D8.pal | 19 | ||||
-rw-r--r-- | data/seagallop/unk_846A6F8.png | bin | 0 -> 574 bytes | |||
-rw-r--r-- | graphics_file_rules.mk | 3 | ||||
-rw-r--r-- | include/constants/maps.h | 2 | ||||
-rw-r--r-- | include/field_fadetransition.h | 1 | ||||
-rw-r--r-- | include/field_weather.h | 1 | ||||
-rw-r--r-- | include/help_system.h | 1 | ||||
-rw-r--r-- | include/overworld.h | 6 | ||||
-rw-r--r-- | include/seagallop.h | 19 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/seagallop.c | 444 | ||||
-rw-r--r-- | sym_ewram.txt | 4 |
19 files changed, 524 insertions, 831 deletions
diff --git a/asm/seagallop.s b/asm/seagallop.s deleted file mode 100644 index c4bf6cccf..000000000 --- a/asm/seagallop.s +++ /dev/null @@ -1,795 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8146E78 -sub_8146E78: @ 8146E78 - push {lr} - movs r0, 0 - bl SetVBlankCallback - bl sub_812B478 - ldr r0, _08146E90 @ =sub_8146E94 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08146E90: .4byte sub_8146E94 - thumb_func_end sub_8146E78 - - thumb_func_start sub_8146E94 -sub_8146E94: @ 8146E94 - push {r4,lr} - sub sp, 0x8 - ldr r0, _08146EB4 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x7 - bls _08146EA8 - b _0814703C -_08146EA8: - lsls r0, 2 - ldr r1, _08146EB8 @ =_08146EBC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08146EB4: .4byte gMain -_08146EB8: .4byte _08146EBC - .align 2, 0 -_08146EBC: - .4byte _08146EDC - .4byte _08146EE8 - .4byte _08146EEE - .4byte _08146F20 - .4byte _08146F8C - .4byte _08146FAC - .4byte _08146FBE - .4byte _08146FE4 -_08146EDC: - movs r0, 0 - bl SetVBlankCallback - bl sub_81471C4 - b _08146FCE -_08146EE8: - bl sub_81472FC - b _08146FCE -_08146EEE: - ldr r4, _08146F18 @ =gUnknown_203F3D0 - movs r0, 0x80 - lsls r0, 4 - bl AllocZeroed - str r0, [r4] - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08146F1C @ =gUnknown_846AEF8 - movs r0, 0 - movs r2, 0x1 - bl InitBgsFromTemplates - ldr r1, [r4] - movs r0, 0x3 - bl SetBgTilemapBuffer - bl sub_814732C - b _08146FCE - .align 2, 0 -_08146F18: .4byte gUnknown_203F3D0 -_08146F1C: .4byte gUnknown_846AEF8 -_08146F20: - ldr r1, _08146F50 @ =gUnknown_8468C98 - movs r2, 0xA4 - lsls r2, 3 - movs r0, 0x3 - movs r3, 0 - bl LoadBgTiles - bl sub_81474CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08146F58 - ldr r1, _08146F54 @ =gUnknown_84699D8 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - b _08146F6A - .align 2, 0 -_08146F50: .4byte gUnknown_8468C98 -_08146F54: .4byte gUnknown_84699D8 -_08146F58: - ldr r1, _08146F84 @ =gUnknown_84691D8 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect -_08146F6A: - ldr r0, _08146F88 @ =gUnknown_84691B8 - movs r1, 0x40 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x2 - bl stdpal_get - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - b _08146FCE - .align 2, 0 -_08146F84: .4byte gUnknown_84691D8 -_08146F88: .4byte gUnknown_84691B8 -_08146F8C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0814703C - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - b _08146FCE -_08146FAC: - bl sub_8147384 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _08146FCE -_08146FBE: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_08146FCE: - ldr r1, _08146FE0 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0814703C - .align 2, 0 -_08146FE0: .4byte gMain -_08146FE4: - bl sub_814731C - ldr r0, _08147044 @ =sub_8147058 - bl SetVBlankCallback - movs r0, 0x13 - bl PlaySE - bl sub_81473C4 - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - ldr r1, _08147048 @ =0x00001888 - movs r0, 0x44 - bl SetGpuReg - ldr r0, _0814704C @ =sub_8147084 - movs r1, 0x8 - bl CreateTask - ldr r0, _08147050 @ =sub_814706C - bl SetMainCallback2 - ldr r0, _08147054 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_0814703C: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147044: .4byte sub_8147058 -_08147048: .4byte 0x00001888 -_0814704C: .4byte sub_8147084 -_08147050: .4byte sub_814706C -_08147054: .4byte gMain - thumb_func_end sub_8146E94 - - thumb_func_start sub_8147058 -sub_8147058: @ 8147058 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8147058 - - thumb_func_start sub_814706C -sub_814706C: @ 814706C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_814706C - - thumb_func_start sub_8147084 -sub_8147084: @ 8147084 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08147098 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _0814709C @ =sub_81470CC - str r0, [r1] - bx lr - .align 2, 0 -_08147098: .4byte gTasks -_0814709C: .4byte sub_81470CC - thumb_func_end sub_8147084 - - thumb_func_start sub_81470A0 -sub_81470A0: @ 81470A0 - push {lr} - bl sub_81474CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081470BC - movs r1, 0xC0 - lsls r1, 3 - movs r0, 0x3 - movs r2, 0x1 - bl ChangeBgX - b _081470C8 -_081470BC: - movs r1, 0xC0 - lsls r1, 3 - movs r0, 0x3 - movs r2, 0x2 - bl ChangeBgX -_081470C8: - pop {r0} - bx r0 - thumb_func_end sub_81470A0 - - thumb_func_start sub_81470CC -sub_81470CC: @ 81470CC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08147100 @ =gTasks - adds r4, r1, r0 - bl sub_81470A0 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8C - bne _081470FA - bl Overworld_FadeOutMapMusic - bl sub_807DC18 - ldr r0, _08147104 @ =sub_8147108 - str r0, [r4] -_081470FA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147100: .4byte gTasks -_08147104: .4byte sub_8147108 - thumb_func_end sub_81470CC - - thumb_func_start sub_8147108 -sub_8147108: @ 8147108 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_81470A0 - bl sub_8055FC4 - lsls r0, 24 - cmp r0, 0 - beq _08147136 - ldr r0, _0814713C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08147136 - bl sub_8147140 - bl sub_812B484 - adds r0, r4, 0 - bl DestroyTask -_08147136: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814713C: .4byte gPaletteFade - thumb_func_end sub_8147108 - - thumb_func_start sub_8147140 -sub_8147140: @ 8147140 - push {r4,lr} - sub sp, 0x4 - ldr r1, _081471AC @ =gSpecialVar_0x8006 - ldrh r0, [r1] - cmp r0, 0xA - bls _08147150 - movs r0, 0 - strh r0, [r1] -_08147150: - ldrh r4, [r1] - lsls r4, 2 - ldr r0, _081471B0 @ =gUnknown_846AEFC - adds r4, r0 - movs r0, 0 - ldrsb r0, [r4, r0] - movs r1, 0x1 - ldrsb r1, [r4, r1] - movs r2, 0x1 - negs r2, r2 - movs r3, 0x2 - ldrsb r3, [r4, r3] - ldrb r4, [r4, 0x3] - lsls r4, 24 - asrs r4, 24 - str r4, [sp] - bl Overworld_SetWarpDestination - bl play_some_sound - movs r0, 0x9 - bl PlaySE - ldr r1, _081471B4 @ =gUnknown_3005020 - ldr r0, _081471B8 @ =sub_807DF64 - str r0, [r1] - bl warp_in - ldr r0, _081471BC @ =sub_805671C - bl SetMainCallback2 - bl ResetInitialPlayerAvatarState - bl sub_81473A0 - ldr r0, _081471C0 @ =gUnknown_203F3D0 - ldr r0, [r0] - bl Free - bl FreeAllWindowBuffers - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081471AC: .4byte gSpecialVar_0x8006 -_081471B0: .4byte gUnknown_846AEFC -_081471B4: .4byte gUnknown_3005020 -_081471B8: .4byte sub_807DF64 -_081471BC: .4byte sub_805671C -_081471C0: .4byte gUnknown_203F3D0 - thumb_func_end sub_8147140 - - thumb_func_start sub_81471C4 -sub_81471C4: @ 81471C4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, _081472F4 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _081472F8 @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_081471EA: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _081471EA - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, _081472F4 @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x8 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0xA - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0xC - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0xE - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - 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 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081472F4: .4byte 0x040000d4 -_081472F8: .4byte 0x81000800 - thumb_func_end sub_81471C4 - - thumb_func_start sub_81472FC -sub_81472FC: @ 81472FC - push {lr} - bl ScanlineEffect_Stop - bl ResetTasks - bl ResetSpriteData - bl dp13_810BB8C - bl ResetPaletteFade - bl FreeAllSpritePalettes - pop {r0} - bx r0 - thumb_func_end sub_81472FC - - thumb_func_start sub_814731C -sub_814731C: @ 814731C - push {lr} - movs r1, 0xCA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_814731C - - thumb_func_start sub_814732C -sub_814732C: @ 814732C - push {lr} - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - pop {r0} - bx r0 - thumb_func_end sub_814732C - - thumb_func_start sub_8147384 -sub_8147384: @ 8147384 - push {lr} - ldr r0, _08147398 @ =gUnknown_846AF78 - bl LoadSpriteSheets - ldr r0, _0814739C @ =gUnknown_846AF90 - bl LoadSpritePalettes - pop {r0} - bx r0 - .align 2, 0 -_08147398: .4byte gUnknown_846AF78 -_0814739C: .4byte gUnknown_846AF90 - thumb_func_end sub_8147384 - - thumb_func_start sub_81473A0 -sub_81473A0: @ 81473A0 - push {r4,lr} - ldr r4, _081473C0 @ =0x00000bb8 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - movs r0, 0xFA - lsls r0, 4 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081473C0: .4byte 0x00000bb8 - thumb_func_end sub_81473A0 - - thumb_func_start sub_81473C4 -sub_81473C4: @ 81473C4 - push {r4,lr} - ldr r0, _081473FC @ =gUnknown_846AF60 - movs r1, 0 - movs r2, 0x5C - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08147400 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r4, r1, r2 - movs r0, 0x30 - strh r0, [r4, 0x2E] - bl sub_81474CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147404 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - b _08147410 - .align 2, 0 -_081473FC: .4byte gUnknown_846AF60 -_08147400: .4byte gSprites -_08147404: - movs r0, 0xF0 - strh r0, [r4, 0x20] - movs r1, 0x2E - ldrsh r0, [r4, r1] - negs r0, r0 - strh r0, [r4, 0x2E] -_08147410: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81473C4 - - thumb_func_start sub_8147418 -sub_8147418: @ 8147418 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r5, r0, 20 - strh r5, [r4, 0x24] - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x5 - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - bne _08147446 - ldrh r0, [r4, 0x20] - adds r0, r5 - lsls r0, 16 - asrs r0, 16 - bl sub_814746C -_08147446: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - movs r1, 0x96 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r4, 0x24] - adds r0, r1 - lsls r0, 16 - movs r1, 0x96 - lsls r1, 18 - cmp r0, r1 - bls _08147466 - adds r0, r4, 0 - bl DestroySprite -_08147466: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8147418 - - thumb_func_start sub_814746C -sub_814746C: @ 814746C - push {r4,lr} - adds r1, r0, 0 - ldr r0, _081474A8 @ =gUnknown_846AFD0 - lsls r1, 16 - asrs r1, 16 - movs r2, 0x5C - movs r3, 0x8 - bl CreateSprite - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x40 - beq _081474A2 - bl sub_81474CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081474A2 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - ldr r1, _081474AC @ =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAnim -_081474A2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081474A8: .4byte gUnknown_846AFD0 -_081474AC: .4byte gSprites - thumb_func_end sub_814746C - - thumb_func_start sub_81474B0 -sub_81474B0: @ 81474B0 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081474C6 - adds r0, r2, 0 - bl DestroySprite -_081474C6: - pop {r0} - bx r0 - thumb_func_end sub_81474B0 - - thumb_func_start sub_81474CC -sub_81474CC: @ 81474CC - push {lr} - ldr r2, _081474EC @ =gSpecialVar_0x8004 - ldrh r0, [r2] - cmp r0, 0xA - bhi _081474F8 - ldr r1, _081474F0 @ =gUnknown_846AF28 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _081474F4 @ =gSpecialVar_0x8006 - ldrh r1, [r1] - asrs r0, r1 - movs r1, 0x1 - ands r0, r1 - b _081474FA - .align 2, 0 -_081474EC: .4byte gSpecialVar_0x8004 -_081474F0: .4byte gUnknown_846AF28 -_081474F4: .4byte gSpecialVar_0x8006 -_081474F8: - movs r0, 0x1 -_081474FA: - pop {r1} - bx r1 - thumb_func_end sub_81474CC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_8468C98.s b/data/data_8468C98.s index f850fe141..828932cc6 100644 --- a/data/data_8468C98.s +++ b/data/data_8468C98.s @@ -1,38 +1,11 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + .section .rodata .align 2 -gUnknown_8468C98:: @ 8468C98 - .incbin "baserom.gba", 0x468C98, 0x520 - -gUnknown_84691B8:: @ 84691B8 - .incbin "baserom.gba", 0x4691B8, 0x20 - -gUnknown_84691D8:: @ 84691D8 - .incbin "baserom.gba", 0x4691D8, 0x800 - -gUnknown_84699D8:: @ 84699D8 - .incbin "baserom.gba", 0x4699D8, 0x1520 - -gUnknown_846AEF8:: @ 846AEF8 - .incbin "baserom.gba", 0x46AEF8, 0x4 - -gUnknown_846AEFC:: @ 846AEFC - .incbin "baserom.gba", 0x46AEFC, 0x2C - -gUnknown_846AF28:: @ 846AF28 - .incbin "baserom.gba", 0x46AF28, 0x38 - -gUnknown_846AF60:: @ 846AF60 - .incbin "baserom.gba", 0x46AF60, 0x18 - -gUnknown_846AF78:: @ 846AF78 - .incbin "baserom.gba", 0x46AF78, 0x18 - -gUnknown_846AF90:: @ 846AF90 - .incbin "baserom.gba", 0x46AF90, 0x40 - -gUnknown_846AFD0:: @ 846AFD0 - .incbin "baserom.gba", 0x46AFD0, 0x45C +gUnknown_846AFE8:: @ 846AFE8 + .incbin "baserom.gba", 0x46AFE8, 0x444 gUnknown_846B42C:: @ 846B42C .incbin "baserom.gba", 0x46B42C, 0x10 diff --git a/data/seagallop/unk_8468C98.png b/data/seagallop/unk_8468C98.png Binary files differnew file mode 100644 index 000000000..ccf64591a --- /dev/null +++ b/data/seagallop/unk_8468C98.png diff --git a/data/seagallop/unk_84691B8.pal b/data/seagallop/unk_84691B8.pal new file mode 100644 index 000000000..4b2dc6c7d --- /dev/null +++ b/data/seagallop/unk_84691B8.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 238 255 +172 205 255 +139 180 238 +106 156 230 +49 115 180 +65 123 189 +82 139 205 +205 222 238 +172 189 205 +123 123 131 +90 90 115 +49 115 172 +238 230 139 +230 213 139 +213 197 106 diff --git a/data/seagallop/unk_84691D8.bin b/data/seagallop/unk_84691D8.bin Binary files differnew file mode 100644 index 000000000..a3c27d319 --- /dev/null +++ b/data/seagallop/unk_84691D8.bin diff --git a/data/seagallop/unk_84699D8.bin b/data/seagallop/unk_84699D8.bin Binary files differnew file mode 100644 index 000000000..2f912fb18 --- /dev/null +++ b/data/seagallop/unk_84699D8.bin diff --git a/data/seagallop/unk_846A1D8.png b/data/seagallop/unk_846A1D8.png Binary files differnew file mode 100644 index 000000000..cc06fbffa --- /dev/null +++ b/data/seagallop/unk_846A1D8.png diff --git a/data/seagallop/unk_846A6D8.pal b/data/seagallop/unk_846A6D8.pal new file mode 100644 index 000000000..c25501332 --- /dev/null +++ b/data/seagallop/unk_846A6D8.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 123 180 +238 246 255 +222 230 238 +189 205 230 +156 164 189 +139 139 156 +98 98 123 +57 57 106 +197 98 98 +172 65 106 +32 74 156 +197 148 0 +246 213 24 +222 238 255 +255 255 255 +74 106 139 diff --git a/data/seagallop/unk_846A6F8.png b/data/seagallop/unk_846A6F8.png Binary files differnew file mode 100644 index 000000000..a5ff28c6e --- /dev/null +++ b/data/seagallop/unk_846A6F8.png diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 549527050..6906e8edc 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -662,3 +662,6 @@ $(FAMECHECKERGFXDIR)/img_845cf00.4bpp: %.4bpp: %.png $(GLOBALGFXDIR)/fame_checker_bg.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 165 + +data/seagallop/unk_8468C98.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 41 diff --git a/include/constants/maps.h b/include/constants/maps.h index 8a8a023a8..5fb5f88fa 100644 --- a/include/constants/maps.h +++ b/include/constants/maps.h @@ -9,4 +9,6 @@ #define MAP_GROUP(map) (MAP_##map >> 8) #define MAP_NUM(map) (MAP_##map & 0xFF) +#define MAP(map) MAP_GROUP(map), MAP_NUM(map) + #endif // GUARD_CONSTANTS_MAPS_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index a2a4d3eac..228ff3bfb 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -12,5 +12,6 @@ void DoFallWarp(void); void sub_807E59C(void); void sub_807E500(void); void sub_807DF64(void); +void sub_807DC18(void); #endif // GUARD_FIELD_FADETRANSITION_H diff --git a/include/field_weather.h b/include/field_weather.h index eb80c455a..eeda3b5b5 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -12,5 +12,6 @@ void sub_80AEDBC(void); void DoCurrentWeather(void); void SetSav1WeatherFromCurrMapHeader(void); void sub_807B0C4(u16 *, u16 *, u32); +void play_some_sound(void); #endif // GUARD_WEATHER_H diff --git a/include/help_system.h b/include/help_system.h index 3ef5f53e4..6398d306b 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -7,5 +7,6 @@ extern bool8 gUnknown_3005ECC; void sub_812B484(void); void HelpSystem_SetSomeVariable2(u8); +void sub_812B478(void); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/overworld.h b/include/overworld.h index 8c32d3e06..0020e9f57 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -96,9 +96,15 @@ void sub_80563F0(void); extern u8 gUnknown_2031DD8; extern u8 gUnknown_2036E28; +extern void (*gUnknown_3005020)(void); + extern bool8 (* gUnknown_3005024)(void); void SetLastHealLocationWarp(u8 healLocaionId); void sub_8055864(u8 mapGroup, u8 mapNum); void CB2_NewGame(void); +void Overworld_FadeOutMapMusic(void); +void sub_805671C(void); +bool8 sub_8055FC4(void); + #endif //GUARD_ROM4_H diff --git a/include/seagallop.h b/include/seagallop.h new file mode 100644 index 000000000..a656ae3be --- /dev/null +++ b/include/seagallop.h @@ -0,0 +1,19 @@ +#ifndef GUARD_SEAGALLOP_H +#define GUARD_SEAGALLOP_H + +enum SeaGallopDestinations +{ + SEAGALLOP_VERMILION_CITY, + SEAGALLOP_ONE_ISLAND, + SEAGALLOP_TWO_ISLAND, + SEAGALLOP_THREE_ISLAND, + SEAGALLOP_FOUR_ISLAND, + SEAGALLOP_FIVE_ISLAND, + SEAGALLOP_SIX_ISLAND, + SEAGALLOP_SEVEN_ISLAND, + SEAGALLOP_CINNABAR_ISLAND, + SEAGALLOP_NAVEL_ROCK, + SEAGALLOP_BIRTH_ISLAND +}; + +#endif //GUARD_SEAGALLOP_H diff --git a/ld_script.txt b/ld_script.txt index 867510f1a..283c711f7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -248,7 +248,7 @@ SECTIONS { src/mevent_server.o(.text); src/mevent_8145654.o(.text); src/menews_jisan.o(.text); - asm/seagallop.o(.text); + src/seagallop.o(.text); asm/unk_8147500.o(.text); asm/unk_8147AA8.o(.text); asm/unk_814B6F0.o(.text); @@ -418,6 +418,8 @@ SECTIONS { data/data_8466FB8.o(.rodata); src/menews_jisan.o(.rodata); src/menews_jisan.o(.rodata.str1.4); + . = ALIGN(4); + src/seagallop.o(.rodata); data/data_8468C98.o(.rodata); src/quest_log_8150454.o(.rodata); data/data_8471F00.o(.rodata); diff --git a/src/seagallop.c b/src/seagallop.c new file mode 100644 index 000000000..dc329e940 --- /dev/null +++ b/src/seagallop.c @@ -0,0 +1,444 @@ +#include "global.h" +#include "gpu_regs.h" +#include "bg.h" +#include "palette.h" +#include "malloc.h" +#include "scanline_effect.h" +#include "battle_dome_cards.h" +#include "window.h" +#include "text_window.h" +#include "sound.h" +#include "task.h" +#include "help_system.h" +#include "overworld.h" +#include "event_data.h" +#include "field_fadetransition.h" +#include "field_weather.h" +#include "constants/songs.h" +#include "constants/maps.h" +#include "seagallop.h" + +EWRAM_DATA void * gUnknown_203F3D0 = NULL; + +void sub_8146E94(void); +void sub_8147058(void); +void sub_814706C(void); +void sub_8147084(u8 taskId); +void sub_81470CC(u8 taskId); +void sub_8147108(u8 taskId); +void sub_8147140(void); +void sub_81471C4(void); +void sub_81472FC(void); +void sub_814731C(void); +void sub_814732C(void); +void sub_8147384(void); +void sub_81473A0(void); +void sub_81473C4(void); +void sub_8147418(struct Sprite * sprite); +void sub_814746C(s16 x); +void sub_81474B0(struct Sprite * sprite); +bool8 sub_81474CC(void); + +const u16 gUnknown_8468C98[] = INCBIN_U16("data/seagallop/unk_8468C98.4bpp"); +const u16 gUnknown_84691B8[] = INCBIN_U16("data/seagallop/unk_84691B8.gbapal"); +const u16 gUnknown_84691D8[] = INCBIN_U16("data/seagallop/unk_84691D8.bin"); +const u16 gUnknown_84699D8[] = INCBIN_U16("data/seagallop/unk_84699D8.bin"); +const u16 gUnknown_846A1D8[] = INCBIN_U16("data/seagallop/unk_846A1D8.4bpp"); +const u16 gUnknown_846A6D8[] = INCBIN_U16("data/seagallop/unk_846A6D8.gbapal"); +const u16 gUnknown_846A6F8[] = INCBIN_U16("data/seagallop/unk_846A6F8.4bpp"); + +const struct BgTemplate gUnknown_846AEF8[] = { + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const s8 gUnknown_846AEFC[][4] = { + {MAP(VERMILIONCITY), 0x17, 0x20}, + {MAP(ONEISLAND_HARBOR), 0x08, 0x05}, + {MAP(TWOISLAND_HARBOR), 0x08, 0x05}, + {MAP(THREEISLAND_HARBOR), 0x08, 0x05}, + {MAP(FOURISLAND_HARBOR), 0x08, 0x05}, + {MAP(FIVEISLAND_HARBOR), 0x08, 0x05}, + {MAP(SIXISLAND_HARBOR), 0x08, 0x05}, + {MAP(SEVENISLAND_HARBOR), 0x08, 0x05}, + {MAP(CINNABARISLAND), 0x15, 0x07}, + {MAP(NAVELROCK_HARBOR), 0x08, 0x05}, + {MAP(BIRTHISLAND_HARBOR), 0x08, 0x05} +}; + +const u16 gUnknown_846AF28[] = { + 0x06fe, + 0x06fc, + 0x06f8, + 0x06f0, + 0x06e0, + 0x04c0, + 0x0400, + 0x0440, + 0x07ff, + 0x06e0, + 0x0000 +}; + +const union AnimCmd gUnknown_846AF40[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846AF48[] = { + ANIMCMD_FRAME(0, 10, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_846AF50[] = { + gUnknown_846AF40, + gUnknown_846AF48 +}; + +const struct OamData gOamData_846AF58 = { + .size = 3 +}; + +const struct SpriteTemplate gUnknown_846AF60 = { + 3000, + 3000, + &gOamData_846AF58, + gUnknown_846AF50, + NULL, + gDummySpriteAffineAnimTable, + sub_8147418 +}; + +const struct SpriteSheet gUnknown_846AF78[] = { + {(void *)gUnknown_846A6F8, 0x0800, 4000}, + {(void *)gUnknown_846A1D8, 0x0500, 3000}, + {} +}; + +const struct SpritePalette gUnknown_846AF90[] = { + {gUnknown_846A6D8, 3000}, + {} +}; + +const union AnimCmd gUnknown_846AFA0[] = { + ANIMCMD_FRAME(0x00, 0x14), + ANIMCMD_FRAME(0x10, 0x14), + ANIMCMD_FRAME(0x20, 0x0f), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_846AFB0[] = { + ANIMCMD_FRAME(0x00, 0x14, .hFlip = TRUE), + ANIMCMD_FRAME(0x10, 0x14, .hFlip = TRUE), + ANIMCMD_FRAME(0x20, 0x0f, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_846AFC0[] = { + gUnknown_846AFA0, + gUnknown_846AFB0 +}; + +const struct OamData gOamData_846AFC8 = { + .size = 2 +}; + +const struct SpriteTemplate gUnknown_846AFD0 = { + 4000, + 3000, + &gOamData_846AFC8, + gUnknown_846AFC0, + NULL, + gDummySpriteAffineAnimTable, + sub_81474B0 +}; + +void sub_8146E78(void) +{ + SetVBlankCallback(NULL); + sub_812B478(); + SetMainCallback2(sub_8146E94); +} + +void sub_8146E94(void) +{ + void ** ptr; + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); // redundant since the setup routine already did this + sub_81471C4(); + gMain.state++; + break; + case 1: + sub_81472FC(); + gMain.state++; + break; + case 2: + ptr = &gUnknown_203F3D0; + *ptr = AllocZeroed(0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_846AEF8, NELEMS(gUnknown_846AEF8)); + SetBgTilemapBuffer(3, *ptr); + sub_814732C(); + gMain.state++; + break; + case 3: + LoadBgTiles(3, gUnknown_8468C98, sizeof(gUnknown_8468C98), 0); + if (sub_81474CC() == TRUE) + { + CopyToBgTilemapBufferRect(3, gUnknown_84699D8, 0, 0, 32, 32); + } + else + { + CopyToBgTilemapBufferRect(3, gUnknown_84691D8, 0, 0, 32, 32); + } + LoadPalette(gUnknown_84691B8, 0x40, 0x20); + LoadPalette(stdpal_get(2), 0xF0, 0x20); + gMain.state++; + break; + case 4: + if (IsDma3ManagerBusyWithBgCopy() != TRUE) + { + ShowBg(0); + ShowBg(3); + CopyBgTilemapBufferToVram(3); + gMain.state++; + } + break; + case 5: + sub_8147384(); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + gMain.state++; + break; + case 6: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + case 7: + sub_814731C(); + SetVBlankCallback(sub_8147058); + PlaySE(SE_NAMINORI); + sub_81473C4(); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x00); + SetGpuReg(REG_OFFSET_WIN0H, 0x00F0); + SetGpuReg(REG_OFFSET_WIN0V, 0x1888); + CreateTask(sub_8147084, 8); + SetMainCallback2(sub_814706C); + gMain.state = 0; + break; + } +} + +void sub_8147058(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_814706C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8147084(u8 taskId) +{ + gTasks[taskId].func = sub_81470CC; +} + +void sub_81470A0(void) +{ + if (sub_81474CC() == TRUE) + { + ChangeBgX(3, 0x600, 1); + } + else + { + ChangeBgX(3, 0x600, 2); + } +} + +void sub_81470CC(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + + sub_81470A0(); + if (++task->data[1] == 140) + { + Overworld_FadeOutMapMusic(); + sub_807DC18(); + task->func = sub_8147108; + } +} + +void sub_8147108(u8 taskId) +{ + sub_81470A0(); + if (sub_8055FC4() && !gPaletteFade.active) + { + sub_8147140(); + sub_812B484(); + DestroyTask(taskId); + } +} + +void sub_8147140(void) +{ + const s8 * warpInfo; + + if (gSpecialVar_0x8006 >= NELEMS(gUnknown_846AEFC)) + gSpecialVar_0x8006 = 0; + + warpInfo = gUnknown_846AEFC[gSpecialVar_0x8006]; + Overworld_SetWarpDestination(warpInfo[0], warpInfo[1], -1, warpInfo[2], warpInfo[3]); + play_some_sound(); + PlaySE(SE_KAIDAN); + gUnknown_3005020 = sub_807DF64; + warp_in(); + SetMainCallback2(sub_805671C); + ResetInitialPlayerAvatarState(); + sub_81473A0(); + Free(gUnknown_203F3D0); + FreeAllWindowBuffers(); +} + +void sub_81471C4(void) +{ + void * dest = (void *) VRAM; + DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); + + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3CNT, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); +} + +void sub_81472FC(void) +{ + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + dp13_810BB8C(); + ResetPaletteFade(); + FreeAllSpritePalettes(); +} + +void sub_814731C(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON); +} + +void sub_814732C(void) +{ + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); +} + +void sub_8147384(void) +{ + LoadSpriteSheets(gUnknown_846AF78); + LoadSpritePalettes(gUnknown_846AF90); +} + +void sub_81473A0(void) +{ + FreeSpriteTilesByTag(3000); + FreeSpriteTilesByTag(4000); + FreeSpritePaletteByTag(3000); +} + +void sub_81473C4(void) +{ + u8 spriteId = CreateSprite(&gUnknown_846AF60, 0, 92, 0); + gSprites[spriteId].data[0] = 48; + if (sub_81474CC() == TRUE) + { + StartSpriteAnim(&gSprites[spriteId], 1); + } + else + { + gSprites[spriteId].pos1.x = 240; + gSprites[spriteId].data[0] *= -1; + } +} + +void sub_8147418(struct Sprite * sprite) +{ + sprite->data[1] += sprite->data[0]; + sprite->pos2.x = sprite->data[1] >> 4; + if (sprite->data[2] % 5 == 0) + { + sub_814746C(sprite->pos1.x + sprite->pos2.x); + } + sprite->data[2]++; + if ((u16)(300 + sprite->pos2.x) > 600) + { + DestroySprite(sprite); + } +} + +void sub_814746C(s16 x) +{ + u8 spriteId = CreateSprite(&gUnknown_846AFD0, x, 92, 8); + if (spriteId != MAX_SPRITES) + { + if (sub_81474CC() == TRUE) + { + StartSpriteAnim(&gSprites[spriteId], 1); + } + } +} + +void sub_81474B0(struct Sprite * sprite) +{ + if (sprite->animEnded) + { + DestroySprite(sprite); + } +} + +bool8 sub_81474CC(void) +{ + if (gSpecialVar_0x8004 >= NELEMS(gUnknown_846AF28)) + { + return TRUE; + } + return (gUnknown_846AF28[gSpecialVar_0x8004] >> gSpecialVar_0x8006) & 1; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 5a9795eb1..258f3d849 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1625,9 +1625,7 @@ gUnknown_203F3B8: @ 203F3B8 .include "src/mevent_server_helpers.o" .include "src/mevent_server.o" .include "src/mevent_8145654.o" - -gUnknown_203F3D0: @ 203F3D0 - .space 0x4 + .include "src/seagallop.o" gUnknown_203F3D4: @ 203F3D4 .space 0x4 |