diff options
-rw-r--r-- | asm/event_object_movement.s | 16 | ||||
-rw-r--r-- | asm/field_camera.s | 24 | ||||
-rw-r--r-- | asm/field_effect.s | 499 | ||||
-rw-r--r-- | asm/field_player_avatar.s | 4 | ||||
-rw-r--r-- | asm/overworld.s | 16 | ||||
-rw-r--r-- | data/field_effect.s | 43 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 10 | ||||
-rw-r--r-- | include/constants/field_effects.h | 4 | ||||
-rw-r--r-- | include/field_camera.h | 7 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_effect.c | 237 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rw-r--r-- | sym_common.txt | 4 |
13 files changed, 272 insertions, 598 deletions
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s index 163ebe51f..cf5b8c54d 100644 --- a/asm/event_object_movement.s +++ b/asm/event_object_movement.s @@ -12893,12 +12893,12 @@ sub_8063AD4: @ 8063AD4 subs r1, r0 lsls r1, 4 strh r1, [r3] - ldr r1, _08063B14 @ =gUnknown_300506C + ldr r1, _08063B14 @ =gTotalCameraPixelOffsetX ldrh r0, [r2] ldrh r1, [r1] subs r0, r1 strh r0, [r2] - ldr r1, _08063B18 @ =gUnknown_3005068 + ldr r1, _08063B18 @ =gTotalCameraPixelOffsetY ldrh r0, [r3] ldrh r1, [r1] subs r0, r1 @@ -12908,8 +12908,8 @@ sub_8063AD4: @ 8063AD4 bx r0 .align 2, 0 _08063B10: .4byte gSaveBlock1Ptr -_08063B14: .4byte gUnknown_300506C -_08063B18: .4byte gUnknown_3005068 +_08063B14: .4byte gTotalCameraPixelOffsetX +_08063B18: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_8063AD4 thumb_func_start sub_8063B1C @@ -12921,7 +12921,7 @@ sub_8063B1C: @ 8063B1C lsrs r5, r0, 16 lsls r1, 16 lsrs r6, r1, 16 - ldr r0, _08063BB0 @ =gUnknown_300506C + ldr r0, _08063BB0 @ =gTotalCameraPixelOffsetX ldrh r0, [r0] negs r0, r0 ldr r1, _08063BB4 @ =gUnknown_3005050 @@ -12929,7 +12929,7 @@ sub_8063B1C: @ 8063B1C subs r0, r2 lsls r0, 16 lsrs r3, r0, 16 - ldr r0, _08063BB8 @ =gUnknown_3005068 + ldr r0, _08063BB8 @ =gTotalCameraPixelOffsetY ldrh r0, [r0] negs r0, r0 ldr r1, [r1, 0x14] @@ -12992,9 +12992,9 @@ _08063B7C: pop {r0} bx r0 .align 2, 0 -_08063BB0: .4byte gUnknown_300506C +_08063BB0: .4byte gTotalCameraPixelOffsetX _08063BB4: .4byte gUnknown_3005050 -_08063BB8: .4byte gUnknown_3005068 +_08063BB8: .4byte gTotalCameraPixelOffsetY _08063BBC: .4byte 0xfff00000 _08063BC0: .4byte gSaveBlock1Ptr thumb_func_end sub_8063B1C diff --git a/asm/field_camera.s b/asm/field_camera.s index cf9fff21d..aa906d6fc 100644 --- a/asm/field_camera.s +++ b/asm/field_camera.s @@ -956,11 +956,11 @@ _0805AC7E: adds r1, r7, 0 mov r2, r8 bl coords8_add - ldr r1, _0805ACAC @ =gUnknown_300506C + ldr r1, _0805ACAC @ =gTotalCameraPixelOffsetX ldrh r0, [r1] subs r0, r7 strh r0, [r1] - ldr r1, _0805ACB0 @ =gUnknown_3005068 + ldr r1, _0805ACB0 @ =gTotalCameraPixelOffsetY ldrh r0, [r1] mov r2, r8 subs r0, r2 @@ -973,8 +973,8 @@ _0805AC7E: .align 2, 0 _0805ACA4: .4byte gUnknown_3005050 _0805ACA8: .4byte gUnknown_3000E90 -_0805ACAC: .4byte gUnknown_300506C -_0805ACB0: .4byte gUnknown_3005068 +_0805ACAC: .4byte gTotalCameraPixelOffsetX +_0805ACB0: .4byte gTotalCameraPixelOffsetY thumb_func_end CameraUpdate thumb_func_start sub_805ACB4 @@ -989,12 +989,12 @@ sub_805ACB4: @ 805ACB4 asrs r1, 16 bl UpdateObjectEventsForCameraUpdate bl DrawWholeMapView - ldr r1, _0805ACE8 @ =gUnknown_300506C + ldr r1, _0805ACE8 @ =gTotalCameraPixelOffsetX lsls r4, 4 ldrh r0, [r1] subs r0, r4 strh r0, [r1] - ldr r1, _0805ACEC @ =gUnknown_3005068 + ldr r1, _0805ACEC @ =gTotalCameraPixelOffsetY lsls r5, 4 ldrh r0, [r1] subs r0, r5 @@ -1003,8 +1003,8 @@ sub_805ACB4: @ 805ACB4 pop {r0} bx r0 .align 2, 0 -_0805ACE8: .4byte gUnknown_300506C -_0805ACEC: .4byte gUnknown_3005068 +_0805ACE8: .4byte gTotalCameraPixelOffsetX +_0805ACEC: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_805ACB4 thumb_func_start sub_805ACF0 @@ -1184,14 +1184,14 @@ UpdateCameraPanning: @ 805AE28 bl _call_via_r0 _0805AE36: ldr r2, _0805AE5C @ =gSpriteCoordOffsetX - ldr r0, _0805AE60 @ =gUnknown_300506C + ldr r0, _0805AE60 @ =gTotalCameraPixelOffsetX ldr r1, _0805AE64 @ =gUnknown_3000E98 ldrh r0, [r0] ldrh r1, [r1] subs r0, r1 strh r0, [r2] ldr r2, _0805AE68 @ =gSpriteCoordOffsetY - ldr r0, _0805AE6C @ =gUnknown_3005068 + ldr r0, _0805AE6C @ =gTotalCameraPixelOffsetY ldr r1, _0805AE70 @ =gUnknown_3000E9A ldrh r0, [r0] ldrh r1, [r1] @@ -1203,10 +1203,10 @@ _0805AE36: .align 2, 0 _0805AE58: .4byte gUnknown_3000EA0 _0805AE5C: .4byte gSpriteCoordOffsetX -_0805AE60: .4byte gUnknown_300506C +_0805AE60: .4byte gTotalCameraPixelOffsetX _0805AE64: .4byte gUnknown_3000E98 _0805AE68: .4byte gSpriteCoordOffsetY -_0805AE6C: .4byte gUnknown_3005068 +_0805AE6C: .4byte gTotalCameraPixelOffsetY _0805AE70: .4byte gUnknown_3000E9A thumb_func_end UpdateCameraPanning diff --git a/asm/field_effect.s b/asm/field_effect.s deleted file mode 100644 index 3c633130e..000000000 --- a/asm/field_effect.s +++ /dev/null @@ -1,499 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8087AB4 -sub_8087AB4: @ 8087AB4 - push {r4,lr} - sub sp, 0x4 - ldr r4, _08087AF8 @ =gFieldEffectArguments - ldrb r0, [r4] - ldrb r1, [r4, 0x4] - ldrb r2, [r4, 0x8] - mov r3, sp - bl TryGetObjectEventIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08087B04 - ldr r0, _08087AFC @ =sub_8087BC0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08087B00 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, sp - ldrb r0, [r0] - strh r0, [r1, 0xC] - ldr r0, [r4] - strh r0, [r1, 0x14] - ldr r0, [r4, 0x4] - strh r0, [r1, 0x16] - ldr r0, [r4, 0x8] - strh r0, [r1, 0x18] - b _08087B0A - .align 2, 0 -_08087AF8: .4byte gFieldEffectArguments -_08087AFC: .4byte sub_8087BC0 -_08087B00: .4byte gTasks -_08087B04: - movs r0, 0x44 - bl FieldEffectActiveListRemove -_08087B0A: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8087AB4 - - thumb_func_start sub_8087B14 -sub_8087B14: @ 8087B14 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08087B4C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08087B50 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08087B54 - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08087B54 - subs r0, r1, 0x1 - b _08087B52 - .align 2, 0 -_08087B4C: .4byte gTasks+0x8 -_08087B50: - movs r0, 0x4 -_08087B52: - strh r0, [r4, 0xA] -_08087B54: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08087B8E - movs r0, 0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08087B84 - ldrh r1, [r4, 0xA] - negs r1, r1 - lsls r1, 16 - asrs r1, 16 - movs r0, 0 - bl SetCameraPanning - b _08087B8E -_08087B84: - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning -_08087B8E: - bl UpdateCameraPanning - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08087BA0 - adds r0, r5, 0 - bl DestroyTask -_08087BA0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8087B14 - - thumb_func_start sub_8087BA8 -sub_8087BA8: @ 8087BA8 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08087BBC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x16] - bx lr - .align 2, 0 -_08087BBC: .4byte gTasks - thumb_func_end sub_8087BA8 - - thumb_func_start sub_8087BC0 -sub_8087BC0: @ 8087BC0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _08087BF8 @ =gTasks+0x8 - adds r4, r0 - bl InstallCameraPanAheadCallback - movs r0, 0 - bl SetCameraPanningCallback - ldr r1, _08087BFC @ =gUnknown_83CC244 - movs r2, 0x2 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl _call_via_r2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087BF8: .4byte gTasks+0x8 -_08087BFC: .4byte gUnknown_83CC244 - thumb_func_end sub_8087BC0 - - thumb_func_start sub_8087C00 -sub_8087C00: @ 8087C00 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08087C28 @ =sub_8087B14 - movs r1, 0x5A - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x51 - bl PlaySE - strh r4, [r5, 0xA] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087C28: .4byte sub_8087B14 - thumb_func_end sub_8087C00 - - thumb_func_start sub_8087C2C -sub_8087C2C: @ 8087C2C - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - ldrh r0, [r7, 0x6] - adds r0, 0x1 - strh r0, [r7, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - ble _08087C9A - ldr r2, _08087CA4 @ =gObjectEvents - movs r1, 0x4 - ldrsh r0, [r7, r1] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087CA8 @ =gSprites - adds r4, r0 - ldrb r0, [r1, 0x1] - movs r2, 0x20 - orrs r0, r2 - strb r0, [r1, 0x1] - ldr r6, _08087CAC @ =0x0000ffff - ldr r5, _08087CB0 @ =0x00007fff - adds r0, r6, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - adds r0, r4, 0 - bl sub_8087CFC - movs r0, 0x50 - bl PlaySE - ldrb r0, [r7, 0xA] - bl sub_8087BA8 - movs r0, 0 - strh r0, [r7, 0x6] - ldrh r0, [r7, 0x2] - adds r0, 0x1 - strh r0, [r7, 0x2] -_08087C9A: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08087CA4: .4byte gObjectEvents -_08087CA8: .4byte gSprites -_08087CAC: .4byte 0x0000ffff -_08087CB0: .4byte 0x00007fff - thumb_func_end sub_8087C2C - - thumb_func_start sub_8087CB4 -sub_8087CB4: @ 8087CB4 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _08087CF4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08087CEE - ldr r0, _08087CF8 @ =sub_8087B14 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08087CEE - bl InstallCameraPanAheadCallback - ldrb r0, [r4, 0xC] - ldrb r1, [r4, 0xE] - ldrb r2, [r4, 0x10] - bl RemoveObjectEventByLocalIdAndMap - movs r0, 0x44 - bl FieldEffectActiveListRemove - adds r0, r5, 0 - bl DestroyTask -_08087CEE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087CF4: .4byte gPaletteFade -_08087CF8: .4byte sub_8087B14 - thumb_func_end sub_8087CB4 - - thumb_func_start sub_8087CFC -sub_8087CFC: @ 8087CFC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r0, _08087D80 @ =gUnknown_300506C - movs r1, 0 - ldrsh r2, [r0, r1] - movs r3, 0x20 - ldrsh r0, [r6, r3] - adds r2, r0 - movs r1, 0x24 - ldrsh r0, [r6, r1] - adds r2, r0 - ldr r0, _08087D84 @ =gUnknown_3005068 - movs r3, 0 - ldrsh r0, [r0, r3] - movs r3, 0x22 - ldrsh r1, [r6, r3] - adds r0, r1 - movs r3, 0x26 - ldrsh r1, [r6, r3] - adds r0, r1 - subs r0, 0x4 - movs r5, 0 - lsls r2, 16 - mov r8, r2 - lsls r7, r0, 16 -_08087D32: - ldr r0, _08087D88 @ =gUnknown_83CC2A0 - mov r2, r8 - asrs r1, r2, 16 - asrs r2, r7, 16 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08087D6E - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087D8C @ =gSprites - adds r4, r0 - lsls r1, r5, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - strh r5, [r4, 0x2E] - ldrb r1, [r6, 0x5] - lsrs r1, 4 - lsls r1, 4 - ldrb r2, [r4, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] -_08087D6E: - adds r5, 0x1 - cmp r5, 0x3 - ble _08087D32 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08087D80: .4byte gUnknown_300506C -_08087D84: .4byte gUnknown_3005068 -_08087D88: .4byte gUnknown_83CC2A0 -_08087D8C: .4byte gSprites - thumb_func_end sub_8087CFC - - thumb_func_start sub_8087D90 -sub_8087D90: @ 8087D90 - push {lr} - adds r1, r0, 0 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _08087DBC - cmp r0, 0x1 - bgt _08087DA6 - cmp r0, 0 - beq _08087DB0 - b _08087DDA -_08087DA6: - cmp r0, 0x2 - beq _08087DC8 - cmp r0, 0x3 - beq _08087DCE - b _08087DDA -_08087DB0: - ldrh r0, [r1, 0x20] - subs r0, 0x10 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - subs r0, 0xC - b _08087DD8 -_08087DBC: - ldrh r0, [r1, 0x20] - adds r0, 0x10 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - subs r0, 0xC - b _08087DD8 -_08087DC8: - ldrh r0, [r1, 0x20] - subs r0, 0x10 - b _08087DD2 -_08087DCE: - ldrh r0, [r1, 0x20] - adds r0, 0x10 -_08087DD2: - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - adds r0, 0xC -_08087DD8: - strh r0, [r1, 0x22] -_08087DDA: - ldrh r0, [r1, 0x20] - adds r0, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xF8 - bhi _08087DF6 - movs r0, 0x22 - ldrsh r2, [r1, r0] - movs r0, 0x4 - negs r0, r0 - cmp r2, r0 - blt _08087DF6 - cmp r2, 0xA4 - ble _08087DFC -_08087DF6: - adds r0, r1, 0 - bl DestroySprite -_08087DFC: - pop {r0} - bx r0 - thumb_func_end sub_8087D90 - - thumb_func_start sub_8087E00 -sub_8087E00: @ 8087E00 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08087E24 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08087E1E - movs r0, 0x45 - bl FieldEffectActiveListRemove - adds r0, r4, 0 - bl DestroyTask -_08087E1E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087E24: .4byte gPaletteFade - thumb_func_end sub_8087E00 - - thumb_func_start sub_8087E28 -sub_8087E28: @ 8087E28 - push {r4,r5,lr} - sub sp, 0x4 - movs r4, 0x1 - negs r4, r4 - ldr r5, _08087E5C @ =0x00007fff - adds r0, r4, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0xF - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _08087E60 @ =sub_8087E00 - movs r1, 0x5A - bl CreateTask - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087E5C: .4byte 0x00007fff -_08087E60: .4byte sub_8087E00 - thumb_func_end sub_8087E28 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 6e425d2c7..ccf946752 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5337,7 +5337,7 @@ _0805DBBA: strh r0, [r7, 0x22] movs r2, 0x22 ldrsh r1, [r7, r2] - ldr r0, _0805DBF0 @ =gUnknown_3005068 + ldr r0, _0805DBF0 @ =gTotalCameraPixelOffsetY movs r2, 0 ldrsh r0, [r0, r2] adds r1, r0 @@ -5350,7 +5350,7 @@ _0805DBBA: strh r0, [r5] b _0805DBFA .align 2, 0 -_0805DBF0: .4byte gUnknown_3005068 +_0805DBF0: .4byte gTotalCameraPixelOffsetY _0805DBF4: adds r0, r2, 0 bl DestroyTask diff --git a/asm/overworld.s b/asm/overworld.s index d8b87c987..301b1e01d 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -4659,10 +4659,10 @@ _0805706A: thumb_func_start sub_8057074 sub_8057074: @ 8057074 push {lr} - ldr r0, _08057094 @ =gUnknown_300506C + ldr r0, _08057094 @ =gTotalCameraPixelOffsetX movs r1, 0 strh r1, [r0] - ldr r0, _08057098 @ =gUnknown_3005068 + ldr r0, _08057098 @ =gTotalCameraPixelOffsetY strh r1, [r0] bl sub_805DE74 movs r0, 0 @@ -4672,18 +4672,18 @@ sub_8057074: @ 8057074 pop {r0} bx r0 .align 2, 0 -_08057094: .4byte gUnknown_300506C -_08057098: .4byte gUnknown_3005068 +_08057094: .4byte gTotalCameraPixelOffsetX +_08057098: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_8057074 thumb_func_start mli4_mapscripts_and_other mli4_mapscripts_and_other: @ 805709C push {r4,r5,lr} sub sp, 0x4 - ldr r0, _080570F4 @ =gUnknown_300506C + ldr r0, _080570F4 @ =gTotalCameraPixelOffsetX movs r1, 0 strh r1, [r0] - ldr r0, _080570F8 @ =gUnknown_3005068 + ldr r0, _080570F8 @ =gTotalCameraPixelOffsetY strh r1, [r0] bl sub_805DE74 mov r4, sp @@ -4715,8 +4715,8 @@ mli4_mapscripts_and_other: @ 805709C pop {r0} bx r0 .align 2, 0 -_080570F4: .4byte gUnknown_300506C -_080570F8: .4byte gUnknown_3005068 +_080570F4: .4byte gTotalCameraPixelOffsetX +_080570F8: .4byte gTotalCameraPixelOffsetY _080570FC: .4byte gSaveBlock2Ptr thumb_func_end mli4_mapscripts_and_other diff --git a/data/field_effect.s b/data/field_effect.s deleted file mode 100644 index 529205a57..000000000 --- a/data/field_effect.s +++ /dev/null @@ -1,43 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83CC244:: @ 83CC244 dataptr - .4byte sub_8087C00 - .4byte sub_8087C2C - .4byte sub_8087CB4 - -gUnknown_83CC250:: @ 83CC250 sprite_frames - obj_frame_tiles gUnknown_83CBDB0 + 0x00, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x20, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x40, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x60, 0x0020 - -gUnknown_83CC270:: @ 83CC270 animcmd - obj_image_anim_frame 0x0000, 0 - obj_image_anim_end - -gUnknown_83CC278:: @ 83CC278 animcmd - obj_image_anim_frame 0x0001, 0 - obj_image_anim_end - -gUnknown_83CC280:: @ 83CC280 animcmd - obj_image_anim_frame 0x0002, 0 - obj_image_anim_end - -gUnknown_83CC288:: @ 83CC288 animcmd - obj_image_anim_frame 0x0003, 0 - obj_image_anim_end - -gUnknown_83CC290:: @ 83CC290 dataptr - .4byte gUnknown_83CC270 - .4byte gUnknown_83CC278 - .4byte gUnknown_83CC280 - .4byte gUnknown_83CC288 - -gUnknown_83CC2A0:: @ 83CC2A0 spr_template - spr_template 65535, 4371, gOamData_83CBE58, gUnknown_83CC290, gUnknown_83CC250, gDummySpriteAffineAnimTable, sub_8087D90 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 484de872b..010627fb5 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -69,7 +69,7 @@ gFieldEffectScriptPointers:: @ 81D96AC .4byte gFldEffScript_SmileyFaceIcon .4byte gFldEffScript_UseVsSeeker .4byte gFldEffScript_DoubleExclMarkIcon - .4byte gFldEffScript_Unk43 + .4byte gFldEffScript_MoveDeoxysRock .4byte gFldEffScript_Unk44 .4byte gFldEffScript_Unk45 @@ -333,14 +333,14 @@ gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 callnative FldEff_DoubleExclMarkIcon end -gFldEffScript_Unk43:: @ 81D999E - callnative FldEff_Unk43 +gFldEffScript_MoveDeoxysRock:: @ 81D999E + callnative Fldeff_MoveDeoxysRock end gFldEffScript_Unk44:: @ 81D99A4 - callnative sub_8087AB4 + callnative FldEff_Unk44 end gFldEffScript_Unk45:: @ 81D99AA - callnative sub_8087E28 + callnative FldEff_Unk45 end diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 80240adc6..5aa885b37 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -66,9 +66,9 @@ #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 #define FLDEFF_SMILEY_FACE_ICON 64 -#define FLDEFF_USE_VS_SEEKER 65 // TODO: related to vs_seeker +#define FLDEFF_USE_VS_SEEKER 65 #define FLDEFF_DOUBLE_EXCL_MARK_ICON 66 -#define FLDEFF_UNK_43 67 // TODO: related to deoxys +#define FLDEFF_MOVE_DEOXYS_ROCK 67 #define FLDEFF_UNK_44 68 // TODO: related to ??? #define FLDEFF_UNK_45 69 // TODO: related to fame checker photos diff --git a/include/field_camera.h b/include/field_camera.h index fb9861014..fdab03255 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -15,12 +15,12 @@ struct CameraObject s32 y; }; -extern struct CameraObject gUnknown_03005DD0; +extern struct CameraObject gFieldCamera; // Exported RAM declarations -extern u16 gUnknown_03005DEC; -extern u16 gUnknown_03005DE8; +extern u16 gTotalCameraPixelOffsetX; +extern u16 gTotalCameraPixelOffsetY; // Exported ROM declarations @@ -29,6 +29,7 @@ void CurrentMapDrawMetatileAt(int x, int y); void sub_805A658(s16 *x, s16 *y); void SetCameraPanningCallback(void (*cb)(void)); void SetCameraPanning(s16 x, s16 y); +void UpdateCameraPanning(void); void InstallCameraPanAheadCallback(void); void DrawDoorMetatileAt(int x, int y, const u16 *data); diff --git a/ld_script.txt b/ld_script.txt index bf1c0a26a..a56593731 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -124,7 +124,6 @@ SECTIONS { src/trainer_see.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); - asm/field_effect.o(.text); src/scanline_effect.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); @@ -446,7 +445,6 @@ SECTIONS { src/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); src/field_effect.o(.rodata); - data/field_effect.o(.rodata); src/option_menu.o(.rodata); src/trainer_card.o(.rodata); data/pokemon_storage_system.o(.rodata); diff --git a/src/field_effect.c b/src/field_effect.c index a38924549..59c3677f9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -67,7 +67,7 @@ const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83 const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); -const u16 gUnknown_83CBDB0[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); +const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_loadtiles, @@ -96,7 +96,7 @@ const struct OamData gNewGameOakOamAttributes = { .affineParam = 0 }; -const struct OamData gOamData_83CBE58 = { +const struct OamData sOamData_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -112,7 +112,7 @@ const struct OamData gOamData_83CBE58 = { .affineParam = 0 }; -const struct OamData gOamData_83CBE60 = { +const struct OamData sOamData_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -308,7 +308,7 @@ const union AnimCmd *const gUnknown_83CBF84[] = { const struct SpriteTemplate gUnknown_83CBF88 = { .tileTag = 65535, .paletteTag = 4103, - .oam = &gOamData_83CBE58, + .oam = &sOamData_8x8, .anims = gUnknown_83CBF54, .images = gUnknown_83CBEB4, .affineAnims = gDummySpriteAffineAnimTable, @@ -328,7 +328,7 @@ const struct SpriteTemplate gUnknown_83CBFA0 = { const struct SpriteTemplate gUnknown_83CBFB8 = { .tileTag = 65535, .paletteTag = 4112, - .oam = &gOamData_83CBE60, + .oam = &sOamData_16x16, .anims = gUnknown_83CBF84, .images = gUnknown_83CBEDC, .affineAnims = gDummySpriteAffineAnimTable, @@ -3625,9 +3625,9 @@ void sub_80878C0(struct Sprite * sprite) } } -void Task_FldEffUnk43(u8 taskId); +void Task_MoveDeoxysRock_Step(u8 taskId); -bool8 FldEff_Unk43(void) +u32 Fldeff_MoveDeoxysRock(void) { u8 taskId; u8 objectEventIdBuffer; @@ -3642,7 +3642,7 @@ bool8 FldEff_Unk43(void) x = (gFieldEffectArguments[3] - x) * 16; y = (gFieldEffectArguments[4] - y) * 16; npc_coords_shift(objectEvent, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); - taskId = CreateTask(Task_FldEffUnk43, 0x50); + taskId = CreateTask(Task_MoveDeoxysRock_Step, 0x50); gTasks[taskId].data[1] = objectEvent->spriteId; gTasks[taskId].data[2] = gSprites[objectEvent->spriteId].pos1.x + x; gTasks[taskId].data[3] = gSprites[objectEvent->spriteId].pos1.y + y; @@ -3652,7 +3652,7 @@ bool8 FldEff_Unk43(void) return FALSE; } -void Task_FldEffUnk43(u8 taskId) +void Task_MoveDeoxysRock_Step(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite = &gSprites[data[1]]; @@ -3682,9 +3682,226 @@ void Task_FldEffUnk43(u8 taskId) sprite->pos1.y = data[3]; npc_coords_shift_still(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; - FieldEffectActiveListRemove(FLDEFF_UNK_43); + FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK); DestroyTask(taskId); } break; } } + +void Task_FldEffUnk44(u8 taskId); +void Unk44Effect_0(s16 *data, u8 taskId); +void Unk44Effect_1(s16 *data, u8 taskId); +void Unk44Effect_2(s16 *data, u8 taskId); +void sub_8087CFC(struct Sprite * sprite); +void SpriteCB_FldEffUnk44(struct Sprite * sprite); + +void (*const sUnk44EffectFuncs[])(s16 *data, u8 taskId) = { + Unk44Effect_0, + Unk44Effect_1, + Unk44Effect_2 +}; + +const struct SpriteFrameImage sImages_FldEffUnk44[] = { + {sFldEffUnk44_Tiles + 0x00, 0x20}, + {sFldEffUnk44_Tiles + 0x10, 0x20}, + {sFldEffUnk44_Tiles + 0x20, 0x20}, + {sFldEffUnk44_Tiles + 0x30, 0x20} +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_0[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_1[] = { + ANIMCMD_FRAME(1, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_2[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_3[] = { + ANIMCMD_FRAME(3, 0), + ANIMCMD_END +}; + +const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = { + sAnimCmd_FldEffUnk44_0, + sAnimCmd_FldEffUnk44_1, + sAnimCmd_FldEffUnk44_2, + sAnimCmd_FldEffUnk44_3 +}; + +const struct SpriteTemplate gUnknown_83CC2A0 = { + .tileTag = 0xFFFF, + .paletteTag = 4371, + .oam = &sOamData_8x8, + .anims = sAnimCmdTable_FldEffUnk44, + .images = sImages_FldEffUnk44, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FldEffUnk44 +}; + +u32 FldEff_Unk44(void) +{ + u8 taskId; + u8 objectEventIdBuffer; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + { + taskId = CreateTask(Task_FldEffUnk44, 0x50); + gTasks[taskId].data[2] = objectEventIdBuffer; + gTasks[taskId].data[6] = gFieldEffectArguments[0]; + gTasks[taskId].data[7] = gFieldEffectArguments[1]; + gTasks[taskId].data[8] = gFieldEffectArguments[2]; + } + else + { + FieldEffectActiveListRemove(FLDEFF_UNK_44); + } + return FALSE; +} + +void sub_8087B14(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[7] != 0) + { + if (++data[6] > 20) + { + data[6] = 0; + if (data[5] != 0) + data[5]--; + } + } + else + { + data[5] = 4; + } + + if (++data[0] > 1) + { + data[0] = 0; + if (++data[1] & 1) + { + SetCameraPanning(0, -data[5]); + } + else + { + SetCameraPanning(0, data[5]); + } + } + UpdateCameraPanning(); + if (data[5] == 0) + DestroyTask(taskId); +} + +void sub_8087BA8(u8 taskId) +{ + gTasks[taskId].data[7] = 1; +} + +void Task_FldEffUnk44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + InstallCameraPanAheadCallback(); + SetCameraPanningCallback(NULL); + sUnk44EffectFuncs[data[1]](data, taskId); +} + +void Unk44Effect_0(s16 *data, u8 taskId) +{ + u8 newTaskId = CreateTask(sub_8087B14, 90); + PlaySE(SE_T_KAMI2); + data[5] = newTaskId; + data[1]++; +} + +void Unk44Effect_1(s16 *data, u8 taskId) +{ + if (++data[3] > 0x78) + { + struct Sprite * sprite = &gSprites[gObjectEvents[data[2]].spriteId]; + gObjectEvents[data[2]].invisible = TRUE; + BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE); + sub_8087CFC(sprite); + PlaySE(SE_T_KAMI); + sub_8087BA8(data[5]); + data[3] = 0; + data[1]++; + } +} + +void Unk44Effect_2(s16 *data, u8 taskId) +{ + if (!gPaletteFade.active && !FuncIsActiveTask(sub_8087B14)) + { + InstallCameraPanAheadCallback(); + RemoveObjectEventByLocalIdAndMap(data[6], data[7], data[8]); + FieldEffectActiveListRemove(FLDEFF_UNK_44); + DestroyTask(taskId); + } +} + +void sub_8087CFC(struct Sprite* sprite) +{ + int i; + int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; + int yPos = (s16)gTotalCameraPixelOffsetY + sprite->pos1.y + sprite->pos2.y - 4; + + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gUnknown_83CC2A0, xPos, yPos, 0); + if (spriteId != MAX_SPRITES) + { + StartSpriteAnim(&gSprites[spriteId], i); + gSprites[spriteId].data[0] = i; + gSprites[spriteId].oam.paletteNum = sprite->oam.paletteNum; + } + } +} + +void SpriteCB_FldEffUnk44(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x -= 16; + sprite->pos1.y -= 12; + break; + case 1: + sprite->pos1.x += 16; + sprite->pos1.y -= 12; + break; + case 2: + sprite->pos1.x -= 16; + sprite->pos1.y += 12; + break; + case 3: + sprite->pos1.x += 16; + sprite->pos1.y += 12; + break; + } + if (sprite->pos1.x < -4 || sprite->pos1.x > 0xF4 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4) + DestroySprite(sprite); +} + +void Task_FldEffUnk45(u8 taskId) +{ + if (!gPaletteFade.active) + { + FieldEffectActiveListRemove(FLDEFF_UNK_45); + DestroyTask(taskId); + } +} + +void FldEff_Unk45(void) +{ + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x0F, 0x00, RGB_WHITE); + CreateTask(Task_FldEffUnk45, 90); +} diff --git a/src/field_specials.c b/src/field_specials.c index 6554f6116..d3d9816af 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2389,13 +2389,13 @@ static void MoveDeoxysObject(u8 num) gFieldEffectArguments[5] = 60; else gFieldEffectArguments[5] = 5; - FieldEffectStart(FLDEFF_UNK_43); + FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK); Overworld_SetMapObjTemplateCoords(1, sDeoxysCoords[num][0], sDeoxysCoords[num][1]); } static void Task_WaitDeoxysFieldEffect(u8 taskId) { - if (!FieldEffectActiveListContains(FLDEFF_UNK_43)) + if (!FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK)) { EnableBothScriptContexts(); DestroyTask(taskId); diff --git a/sym_common.txt b/sym_common.txt index e729f5515..b20ad7411 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -51,10 +51,10 @@ gFieldLinkPlayerCount: @ 3005030 gUnknown_3005050: @ 3005050 .space 0x18 -gUnknown_3005068: @ 3005068 +gTotalCameraPixelOffsetY: @ 3005068 .space 0x4 -gUnknown_300506C: @ 300506C +gTotalCameraPixelOffsetX: @ 300506C .space 0x4 .align 2 |