summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-13 21:53:39 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-13 21:53:39 -0400
commit79101b9dad9e934ec65fca7c7e1030dd9c4e3413 (patch)
tree5a60ea6f9b6d5ae6961979c5a366d2b711af52b0
parentc1601f8555bc54e9d08eb046015fc8bbfad3052c (diff)
parent8f48da59b18f0d0431e8c64d369d3e82f96be191 (diff)
Merge branch 'field_effect'
-rw-r--r--data/field_effect.s433
-rwxr-xr-xinclude/field_effect.h106
-rwxr-xr-x[-rw-r--r--]include/sprite.h2
-rw-r--r--ld_script.txt2
-rwxr-xr-xsrc/field_effect.c434
5 files changed, 499 insertions, 478 deletions
diff --git a/data/field_effect.s b/data/field_effect.s
deleted file mode 100644
index 3347bc19c..000000000
--- a/data/field_effect.s
+++ /dev/null
@@ -1,433 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSpriteImage_839DC14:: @ 839DC14
- .incbin "graphics/birch_speech/birch.4bpp"
-
- .align 2
-gBirchPalette:: @ 839E414
- .incbin "graphics/birch_speech/birch.gbapal"
-
- .align 2
-gSpriteImage_839E434:: @ 839E434
- .incbin "graphics/misc/pokeball_glow.4bpp"
-
- .align 2
-gFieldEffectObjectPalette4: @ 839E454
- .incbin "graphics/field_effect_objects/palettes/04.gbapal"
-
- .align 2
-gSpriteImage_839E474:: @ 839E474
- .incbin "graphics/misc/pokecenter_monitor/0.4bpp"
-
- .align 2
-gSpriteImage_839E534:: @ 839E534
- .incbin "graphics/misc/pokecenter_monitor/1.4bpp"
-
- .align 2
-gSpriteImage_839E5F4:: @ 839E5F4
- .incbin "graphics/misc/big_hof_monitor.4bpp"
-
- .align 2
-gSpriteImage_839E7F4:: @ 839E7F4
- .incbin "graphics/misc/small_hof_monitor.4bpp"
-
- .align 2
-gFieldEffectObjectPalette5: @ 839E8F4
- .incbin "graphics/field_effect_objects/palettes/05.gbapal"
-
-@ Graphics for the lights streaking past your Pokémon when it uses a field move.
-
- .align 2
-gFieldMoveStreaksTiles:: @ 839E914
- .incbin "graphics/misc/field_move_streaks.4bpp"
-
- .align 2
-gFieldMoveStreaksPalette:: @ 839EB14
- .incbin "graphics/misc/field_move_streaks.gbapal"
-
- .align 2
-gFieldMoveStreaksTilemap:: @ 839EB34
- .incbin "graphics/misc/field_move_streaks_map.bin"
-
-@ The following light streaks effect is used when the map is dark (e.g. a cave).
-
- .align 2
-gDarknessFieldMoveStreaksTiles:: @ 839EDB4
- .incbin "graphics/misc/darkness_field_move_streaks.4bpp"
-
- .align 2
-gDarknessFieldMoveStreaksPalette:: @ 839EE34
- .incbin "graphics/misc/darkness_field_move_streaks.gbapal"
-
- .align 2
-gDarknessFieldMoveStreaksTilemap:: @ 839EE54
- .incbin "graphics/misc/darkness_field_move_streaks_map.bin"
-
- .align 2
-gFieldEffectScriptFuncs:: @ 839F0D4
- .4byte FieldEffectCmd_loadtiles
- .4byte FieldEffectCmd_loadfadedpal
- .4byte FieldEffectCmd_loadpal
- .4byte FieldEffectCmd_callnative
- .4byte FieldEffectCmd_end
- .4byte FieldEffectCmd_loadgfx_callnative
- .4byte FieldEffectCmd_loadtiles_callnative
- .4byte FieldEffectCmd_loadfadedpal_callnative
-
- .align 2
-gOamData_839F0F4:: @ 839F0F4
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x0000
-
- .align 2
-gOamData_839F0FC:: @ 839F0FC
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
-
- .align 2
-gOamData_839F104:: @ 839F104
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0000
-
- .align 2
-gSpriteImageTable_839F10C:: @ 839F10C
- obj_frame_tiles gSpriteImage_839DC14, 0x800
-
- .align 2
-gUnknown_0839F114:: @ 839F114
- obj_pal gBirchPalette, 0x1006
-
- .align 2
-gSpriteAnim_839F11C:: @ 839F11C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_839F124:: @ 839F124
- .4byte gSpriteAnim_839F11C
-
- .align 2
-gSpriteTemplate_839F128:: @ 839F128
- spr_template 0xFFFF, 4102, gOamData_839F0F4, gSpriteAnimTable_839F124, gSpriteImageTable_839F10C, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gFieldEffectObjectPaletteInfo4:: @ 839F140
- obj_pal gFieldEffectObjectPalette4, 0x1007
-
- .align 2
-gFieldEffectObjectPaletteInfo5:: @ 839F148
- obj_pal gFieldEffectObjectPalette5, 0x1010
-
- .align 2
-gOamData_839F150:: @ 839F150
- .2byte 0x4000
- .2byte 0x8000
- .2byte 0x0000
-
- .align 2
-gSpriteImageTable_839F158:: @ 839F158
- obj_frame_tiles gSpriteImage_839E434, 0x20
-
- .align 2
-gSpriteImageTable_839F160:: @ 839F160
- obj_frame_tiles gSpriteImage_839E474, 0xc0
- obj_frame_tiles gSpriteImage_839E534, 0xc0
-
- .align 2
-gSpriteImageTable_839F170:: @ 839F170
- obj_frame_tiles gSpriteImage_839E5F4, 0x200
-
- .align 2
-gSpriteImageTable_839F178:: @ 839F178
- obj_frame_tiles gSpriteImage_839E7F4, 0x200
-
- .align 2
-Unknown_39F180:: @ 839F180
- subsprite -12, -8, 2, 0, 16x8
- subsprite 4, -8, 2, 2, 8x8
- subsprite -12, 0, 2, 3, 16x8
- subsprite 4, 0, 2, 5, 8x8
-
- .align 2
-gUnknown_0839F1A0:: @ 839F1A0
- .4byte 4, Unknown_39F180
-
- .align 2
-Unknown_39F1A8:: @ 39F1A8
- subsprite -32, -8, 2, 0, 32x8
- subsprite 0, -8, 2, 4, 32x8
- subsprite -32, 0, 2, 8, 32x8
- subsprite 0, 0, 2, 12, 32x8
-
- .align 2
-gUnknown_0839F1C8:: @ 839F1C8
- .4byte 4, Unknown_39F1A8
-
- .align 2
-gSpriteAnim_839F1D0:: @ 839F1D0
- obj_image_anim_frame 0, 1
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_839F1D8:: @ 839F1D8
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_839F1FC:: @ 839F1FC
- .4byte gSpriteAnim_839F1D0
- .4byte gSpriteAnim_839F1D8
-
- .align 2
-gSpriteAnimTable_839F204:: @ 839F204
- .4byte gSpriteAnim_839F1D0
-
- .align 2
-gSpriteTemplate_839F208:: @ 839F208
- spr_template 0xFFFF, 4103, gOamData_839F0FC, gSpriteAnimTable_839F1FC, gSpriteImageTable_839F158, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow
-
- .align 2
-gSpriteTemplate_839F220:: @ 839F220
- spr_template 0xFFFF, 4100, gOamData_839F104, gSpriteAnimTable_839F1FC, gSpriteImageTable_839F160, gDummySpriteAffineAnimTable, SpriteCB_PokecenterMonitor
-
- .align 2
-gSpriteTemplate_839F238:: @ 839F238
- spr_template 0xFFFF, 4112, gOamData_839F104, gSpriteAnimTable_839F204, gSpriteImageTable_839F170, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor
-
- .align 2
-gSpriteTemplate_839F250:: @ 839F250
- spr_template 0xFFFF, 4112, gOamData_839F150, gSpriteAnimTable_839F204, gSpriteImageTable_839F178, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor
-
- .align 2
-gUnknown_0839F268:: @ 839F268
- .4byte PokecenterHealEffect_0
- .4byte PokecenterHealEffect_1
- .4byte PokecenterHealEffect_2
- .4byte PokecenterHealEffect_3
-
- .align 2
-gUnknown_0839F278:: @ 839F278
- .4byte HallOfFameRecordEffect_0
- .4byte HallOfFameRecordEffect_1
- .4byte HallOfFameRecordEffect_2
- .4byte HallOfFameRecordEffect_3
-
- .align 2
-gUnknown_0839F288:: @ 839F288
- .4byte PokeballGlowEffect_0
- .4byte PokeballGlowEffect_1
- .4byte PokeballGlowEffect_2
- .4byte PokeballGlowEffect_3
- .4byte PokeballGlowEffect_4
- .4byte PokeballGlowEffect_5
- .4byte PokeballGlowEffect_6
- .4byte PokeballGlowEffect_7
-
-gUnknown_0839F2A8:: @ 839F2A8
- .2byte 0, 0
- .2byte 6, 0
- .2byte 0, 4
- .2byte 6, 4
- .2byte 0, 8
- .2byte 6, 8
-
-gUnknown_0839F2C0:: @ 839F2C0
- .byte 16, 12, 8, 0
-
-gUnknown_0839F2C4:: @ 839F2C4
- .byte 16, 12, 8, 0
-
-gUnknown_0839F2C8:: @ 839F2C8
- .space 4
-
- .align 2
-gUnknown_0839F2CC:: @ 839F2CC
- .4byte sub_80867AC
- .4byte sub_8086854
- .4byte sub_8086870
- .4byte sub_80868E4
- .4byte sub_808699C
- .4byte sub_80869B8
- .4byte sub_80869F8
-
- .align 2
-gUnknown_0839F2E8:: @ 839F2E8
- .4byte sub_8086AA0
- .4byte sub_8086AC0
- .4byte sub_8086B30
- .4byte sub_8086B54
- .4byte sub_8086B64
- .4byte sub_8086B88
-
- .align 2
-gUnknown_0839F300:: @ 839F300
- .4byte sub_8086CF4
- .4byte sub_8086D70
- .4byte sub_8086DB0
- .4byte sub_8086E10
- .4byte sub_8086E50
- .4byte sub_8086EB0
- .4byte sub_8086ED4
-
- .align 2
-gUnknown_0839F31C:: @ 839F31C
- .4byte sub_8086FB0
- .4byte waterfall_1_do_anim_probably
- .4byte waterfall_2_wait_anim_finish_probably
- .4byte sub_8087030
- .4byte sub_8087058
-
- .align 2
-gUnknown_0839F330:: @ 839F330
- .4byte sub_8087124
- .4byte dive_2_unknown
- .4byte dive_3_unknown
-
- .align 2
-gUnknown_0839F33C:: @ 839F33C
- .4byte sub_808722C
- .4byte sub_8087264
- .4byte sub_8087298
- .4byte sub_80872E4
- .4byte sub_80873D8
- .4byte sub_80873F4
-
- .align 2
-gUnknown_0839F354:: @ 839F354
- .4byte sub_80874CC
- .4byte sub_80874FC
- .4byte sub_8087548
- .4byte sub_808759C
-
- .align 2
-gUnknown_0839F364:: @ 839F364
- .4byte sub_80876C8
- .4byte sub_80876F8
- .4byte sub_8087774
- .4byte sub_80877AC
- .4byte sub_80877D4
-
- .align 2
-gUnknown_0839F378:: @ 839F378
- .4byte sub_80878F4
- .4byte sub_8087914
-
-gUnknown_0839F380:: @ 839F380
- .byte 1, 3, 4, 2, 1
-
- .align 2
-gUnknown_0839F388:: @ 839F388
- .4byte sub_8087AA4
- .4byte sub_8087AC8
-
- .align 2
-gUnknown_0839F390:: @ 839F390
- .4byte sub_8087BEC
- .4byte sub_8087C14
- .4byte sub_8087CA4
- .4byte sub_8087D78
-
- .align 2
-gUnknown_0839F3A0:: @ 839F3A0
- .4byte sub_8087E4C
- .4byte sub_8087ED8
- .4byte sub_8087FDC
-
- .align 2
-gUnknown_0839F3AC:: @ 839F3AC
- .4byte sub_8088150
- .4byte sub_80881C0
- .4byte sub_8088228
- .4byte sub_80882B4
- .4byte sub_80882E4
- .4byte sub_8088338
- .4byte sub_8088380
-
- .align 2
-gUnknown_0839F3C8:: @ 839F3C8
- .4byte sub_80884AC
- .4byte sub_80884E8
- .4byte sub_8088554
- .4byte sub_80885A8
- .4byte sub_80885D8
- .4byte sub_808860C
- .4byte sub_808862C
-
- .align 2
-gUnknown_0839F3E4:: @ 839F3E4
- .4byte sub_8088984
- .4byte sub_80889E4
- .4byte sub_8088A30
- .4byte sub_8088A78
- .4byte sub_8088AF4
-
- .align 2
-gUnknown_0839F3F8:: @ 839F3F8
- .4byte sub_8088CA0
- .4byte sub_8088CF8
- .4byte sub_8088D3C
- .4byte sub_8088D94
- .4byte sub_8088DD8
- .4byte sub_8088E2C
- .4byte sub_8088EB4
- .4byte sub_8088F10
- .4byte sub_8088F30
-
-SpriteAffineAnim_839F41C:
- obj_rot_scal_anim_frame 8, 8, -30, 0
- obj_rot_scal_anim_frame 28, 28, 0, 30
- obj_rot_scal_anim_end
-
-SpriteAffineAnim_839F434:
- obj_rot_scal_anim_frame 256, 256, 64, 0
- obj_rot_scal_anim_frame -10, -10, 0, 22
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_0839F44C:: @ 839F44C
- .4byte SpriteAffineAnim_839F41C
- .4byte SpriteAffineAnim_839F434
-
- .align 2
-gUnknown_0839F454:: @ 839F454
- .4byte sub_80892A0
- .4byte sub_8089354
- .4byte sub_80893C0
- .4byte sub_8089414
- .4byte sub_808948C
- .4byte sub_80894C4
- .4byte fishE
-
-gUnknown_0839F470:: @ 839F470
- .2byte -2
- .2byte -4
- .2byte -5
- .2byte -6
- .2byte -7
- .2byte -8
- .2byte -8
- .2byte -8
- .2byte -7
- .2byte -7
- .2byte -6
- .2byte -5
- .2byte -3
- .2byte -2
- .2byte 0
- .2byte 2
- .2byte 4
- .2byte 8
diff --git a/include/field_effect.h b/include/field_effect.h
index 6306b81ac..2cf7f0c7a 100755
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -129,4 +129,110 @@ void PokeballGlowEffect_5(struct Sprite *);
void PokeballGlowEffect_6(struct Sprite *);
void PokeballGlowEffect_7(struct Sprite *);
+bool8 sub_80867AC(struct Task *);
+bool8 sub_8086854(struct Task *);
+bool8 sub_8086870(struct Task *);
+bool8 sub_80868E4(struct Task *);
+bool8 sub_808699C(struct Task *);
+bool8 sub_80869B8(struct Task *);
+bool8 sub_80869F8(struct Task *);
+
+bool8 sub_8086AA0(struct Task *);
+bool8 sub_8086AC0(struct Task *);
+bool8 sub_8086B30(struct Task *);
+bool8 sub_8086B54(struct Task *);
+bool8 sub_8086B64(struct Task *);
+bool8 sub_8086B88(struct Task *);
+
+bool8 sub_8086CF4(struct Task *);
+bool8 sub_8086D70(struct Task *);
+bool8 sub_8086DB0(struct Task *);
+bool8 sub_8086E10(struct Task *);
+bool8 sub_8086E50(struct Task *);
+bool8 sub_8086EB0(struct Task *);
+bool8 sub_8086ED4(struct Task *);
+
+bool8 sub_8086FB0(struct Task *, struct MapObject *);
+bool8 waterfall_1_do_anim_probably(struct Task *, struct MapObject *);
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct MapObject *);
+bool8 sub_8087030(struct Task *, struct MapObject *);
+bool8 sub_8087058(struct Task *, struct MapObject *);
+
+bool8 sub_8087124(struct Task *);
+bool8 dive_2_unknown(struct Task *);
+bool8 dive_3_unknown(struct Task *);
+
+bool8 sub_808722C(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087264(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087298(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80872E4(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80873D8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80873F4(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80874CC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80874FC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087548(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_808759C(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80876C8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80876F8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087774(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80877AC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80877D4(struct Task *, struct MapObject *, struct Sprite *);
+
+void sub_80878F4(struct Task *);
+void sub_8087914(struct Task *);
+
+void sub_8087AA4(struct Task *);
+void sub_8087AC8(struct Task *);
+
+void sub_8087BEC(struct Task *);
+void sub_8087C14(struct Task *);
+void sub_8087CA4(struct Task *);
+void sub_8087D78(struct Task *);
+
+void sub_8087E4C(struct Task *);
+void sub_8087ED8(struct Task *);
+void sub_8087FDC(struct Task *);
+
+void sub_8088150(struct Task *);
+void sub_80881C0(struct Task *);
+void sub_8088228(struct Task *);
+void sub_80882B4(struct Task *);
+void sub_80882E4(struct Task *);
+void sub_8088338(struct Task *);
+void sub_8088380(struct Task *);
+
+void sub_80884AC(struct Task *);
+void sub_80884E8(struct Task *);
+void sub_8088554(struct Task *);
+void sub_80885A8(struct Task *);
+void sub_80885D8(struct Task *);
+void sub_808860C(struct Task *);
+void sub_808862C(struct Task *);
+
+void sub_8088984(struct Task *);
+void sub_80889E4(struct Task *);
+void sub_8088A30(struct Task *);
+void sub_8088A78(struct Task *);
+void sub_8088AF4(struct Task *);
+
+void sub_8088CA0(struct Task *);
+void sub_8088CF8(struct Task *);
+void sub_8088D3C(struct Task *);
+void sub_8088D94(struct Task *);
+void sub_8088DD8(struct Task *);
+void sub_8088E2C(struct Task *);
+void sub_8088EB4(struct Task *);
+void sub_8088F10(struct Task *);
+void sub_8088F30(struct Task *);
+
+void sub_80892A0(struct Task *);
+void sub_8089354(struct Task *);
+void sub_80893C0(struct Task *);
+void sub_8089414(struct Task *);
+void sub_808948C(struct Task *);
+void sub_80894C4(struct Task *);
+void fishE(struct Task *);
+
#endif // GUARD_FIELD_EFFECT_H
diff --git a/include/sprite.h b/include/sprite.h
index 13c03ab51..dd9d5efb7 100644..100755
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -133,7 +133,7 @@ struct Subsprite
struct SubspriteTable
{
u8 subspriteCount;
- struct Subsprite *subsprites;
+ const struct Subsprite *subsprites;
};
struct Sprite;
diff --git a/ld_script.txt b/ld_script.txt
index d7f3d3637..adecfd79d 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -388,7 +388,7 @@ SECTIONS {
data/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
data/wild_encounter.o(.rodata);
- data/field_effect.o(.rodata);
+ src/field_effect.o(.rodata);
data/pokemon_menu.o(.rodata);
data/option_menu.o(.rodata);
data/pokedex.o(.rodata);
diff --git a/src/field_effect.c b/src/field_effect.c
index 6cff8b864..8728155e1 100755
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -22,14 +22,402 @@
#include "field_camera.h"
#include "field_effect.h"
-typedef bool8 (*FldEffCmd)(u8 **, u32 *);
+#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
+
+#define obj_frame_tiles(ptr) {.data = (u8 *)ptr, .size = sizeof ptr}
+
+const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
+const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
+const u32 gSpriteImage_839E434[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp");
+const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_objects/palettes/04.gbapal");
+const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
+const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
+const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp");
+const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp");
+const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal");
+
+// Graphics for the lights streaking past your Pokemon when it uses a field move.
+const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp");
+const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal");
+const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin");
+
+// The following light streaks effect is used when the map is dark (e.g. a cave).
+const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp");
+const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal");
+const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin");
+
+bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = {
+ FieldEffectCmd_loadtiles,
+ FieldEffectCmd_loadfadedpal,
+ FieldEffectCmd_loadpal,
+ FieldEffectCmd_callnative,
+ FieldEffectCmd_end,
+ FieldEffectCmd_loadgfx_callnative,
+ FieldEffectCmd_loadtiles_callnative,
+ FieldEffectCmd_loadfadedpal_callnative,
+};
+
+const struct OamData gOamData_839F0F4 = {.size = 3};
+const struct OamData gOamData_839F0FC = {.size = 0};
+const struct OamData gOamData_839F104 = {.size = 1};
+
+const struct SpriteFrameImage gSpriteImageTable_839F10C[] = {
+ obj_frame_tiles(gSpriteImage_839DC14)
+};
+const struct SpritePalette gUnknown_0839F114 = {.data = gBirchPalette, .tag = 0x1006};
+
+const union AnimCmd gSpriteAnim_839F11C[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F124[] = {
+ gSpriteAnim_839F11C
+};
+
+const struct SpriteTemplate gSpriteTemplate_839F128 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4102,
+ .oam = &gOamData_839F0F4,
+ .anims = (const union AnimCmd *const *)&gSpriteAnimTable_839F124,
+ .images = gSpriteImageTable_839F10C,
+ .affineAnims = (const union AffineAnimCmd *const *)&gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007};
+const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010};
+const struct OamData gOamData_839F150 = {
+ .shape = 1,
+ .size = 2
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F158[] = {
+ obj_frame_tiles(gSpriteImage_839E434)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F160[] = {
+ obj_frame_tiles(gSpriteImage_839E474),
+ obj_frame_tiles(gSpriteImage_839E534)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F170[] = {
+ obj_frame_tiles(gSpriteImage_839E5F4)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F178[] = {
+ {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here
+};
+
+const struct Subsprite Unknown_39F180[] = {
+ {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0},
+ {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0},
+ {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0},
+ {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0}
+};
+
+const struct SubspriteTable gUnknown_0839F1A0 = subsprite_table(Unknown_39F180);
+
+const struct Subsprite Unknown_39F1A8[] = {
+ {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1},
+ {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1},
+ {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1},
+ {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1}
+};
+
+const struct SubspriteTable gUnknown_0839F1C8 = subsprite_table(Unknown_39F1A8);
+
+const union AnimCmd gSpriteAnim_839F1D0[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd gSpriteAnim_839F1D8[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F1FC[] = {
+ gSpriteAnim_839F1D0,
+ gSpriteAnim_839F1D8
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F204[] = {
+ gSpriteAnim_839F1D0
+};
+
+const struct SpriteTemplate gSpriteTemplate_839F208 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4103,
+ .oam = &gOamData_839F0FC,
+ .anims = gSpriteAnimTable_839F1FC,
+ .images = gSpriteImageTable_839F158,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokeballGlow
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F220 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4100,
+ .oam = &gOamData_839F104,
+ .anims = gSpriteAnimTable_839F1FC,
+ .images = gSpriteImageTable_839F160,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokecenterMonitor
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F238 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_839F104,
+ .anims = gSpriteAnimTable_839F204,
+ .images = gSpriteImageTable_839F170,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F250 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_839F150,
+ .anims = gSpriteAnimTable_839F204,
+ .images = gSpriteImageTable_839F178,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+void (*const gUnknown_0839F268[])(struct Task *) = {
+ PokecenterHealEffect_0,
+ PokecenterHealEffect_1,
+ PokecenterHealEffect_2,
+ PokecenterHealEffect_3
+};
+
+void (*const gUnknown_0839F278[])(struct Task *) = {
+ HallOfFameRecordEffect_0,
+ HallOfFameRecordEffect_1,
+ HallOfFameRecordEffect_2,
+ HallOfFameRecordEffect_3
+};
+
+void (*const gUnknown_0839F288[])(struct Sprite *) = {
+ PokeballGlowEffect_0,
+ PokeballGlowEffect_1,
+ PokeballGlowEffect_2,
+ PokeballGlowEffect_3,
+ PokeballGlowEffect_4,
+ PokeballGlowEffect_5,
+ PokeballGlowEffect_6,
+ PokeballGlowEffect_7
+};
+
+const struct Coords16 gUnknown_0839F2A8[] = {
+ {.x = 0, .y = 0},
+ {.x = 6, .y = 0},
+ {.x = 0, .y = 4},
+ {.x = 6, .y = 4},
+ {.x = 0, .y = 8},
+ {.x = 6, .y = 8}
+};
+
+const u8 gUnknown_0839F2C0[] = {16, 12, 8, 0};
+const u8 gUnknown_0839F2C4[] = {16, 12, 8, 0};
+const u8 gUnknown_0839F2C8[] = { 0, 0, 0, 0};
+
+bool8 (*const gUnknown_0839F2CC[])(struct Task *) = {
+ sub_80867AC,
+ sub_8086854,
+ sub_8086870,
+ sub_80868E4,
+ sub_808699C,
+ sub_80869B8,
+ sub_80869F8
+};
+
+bool8 (*const gUnknown_0839F2E8[])(struct Task *) = {
+ sub_8086AA0,
+ sub_8086AC0,
+ sub_8086B30,
+ sub_8086B54,
+ sub_8086B64,
+ sub_8086B88
+};
+
+bool8 (*const gUnknown_0839F300[])(struct Task *) = {
+ sub_8086CF4,
+ sub_8086D70,
+ sub_8086DB0,
+ sub_8086E10,
+ sub_8086E50,
+ sub_8086EB0,
+ sub_8086ED4
+};
+
+bool8 (*const gUnknown_0839F31C[])(struct Task *, struct MapObject *) = {
+ sub_8086FB0,
+ waterfall_1_do_anim_probably,
+ waterfall_2_wait_anim_finish_probably,
+ sub_8087030,
+ sub_8087058
+};
+
+bool8 (*const gUnknown_0839F330[])(struct Task *) = {
+ sub_8087124,
+ dive_2_unknown,
+ dive_3_unknown
+};
+
+bool8 (*const gUnknown_0839F33C[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_808722C,
+ sub_8087264,
+ sub_8087298,
+ sub_80872E4,
+ sub_80873D8,
+ sub_80873F4
+};
+
+bool8 (*const gUnknown_0839F354[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80874CC,
+ sub_80874FC,
+ sub_8087548,
+ sub_808759C
+};
+
+bool8 (*const gUnknown_0839F364[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80876C8,
+ sub_80876F8,
+ sub_8087774,
+ sub_80877AC,
+ sub_80877D4
+};
+
+void (*const gUnknown_0839F378[])(struct Task *) = {
+ sub_80878F4,
+ sub_8087914
+};
+
+const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1};
+
+void (*const gUnknown_0839F388[])(struct Task *) = {
+ sub_8087AA4,
+ sub_8087AC8
+};
+
+void (*const gUnknown_0839F390[])(struct Task *) = {
+ sub_8087BEC,
+ sub_8087C14,
+ sub_8087CA4,
+ sub_8087D78
+};
+
+void (*const gUnknown_0839F3A0[])(struct Task *) = {
+ sub_8087E4C,
+ sub_8087ED8,
+ sub_8087FDC
+};
+
+void (*const gUnknown_0839F3AC[])(struct Task *) = {
+ sub_8088150,
+ sub_80881C0,
+ sub_8088228,
+ sub_80882B4,
+ sub_80882E4,
+ sub_8088338,
+ sub_8088380
+};
+
+void (*const gUnknown_0839F3C8[])(struct Task *) = {
+ sub_80884AC,
+ sub_80884E8,
+ sub_8088554,
+ sub_80885A8,
+ sub_80885D8,
+ sub_808860C,
+ sub_808862C
+};
+
+void (*const gUnknown_0839F3E4[])(struct Task *) = {
+ sub_8088984,
+ sub_80889E4,
+ sub_8088A30,
+ sub_8088A78,
+ sub_8088AF4
+};
+
+void (*const gUnknown_0839F3F8[])(struct Task *) = {
+ sub_8088CA0,
+ sub_8088CF8,
+ sub_8088D3C,
+ sub_8088D94,
+ sub_8088DD8,
+ sub_8088E2C,
+ sub_8088EB4,
+ sub_8088F10,
+ sub_8088F30
+};
+
+const union AffineAnimCmd SpriteAffineAnim_839F41C[] = {
+ AFFINEANIMCMD_FRAME(8, 8, -30, 0),
+ AFFINEANIMCMD_FRAME(28, 28, 0, 30),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd SpriteAffineAnim_839F434[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = {
+ SpriteAffineAnim_839F41C,
+ SpriteAffineAnim_839F434
+};
+
+void (*const gUnknown_0839F454[])(struct Task *) = {
+ sub_80892A0,
+ sub_8089354,
+ sub_80893C0,
+ sub_8089414,
+ sub_808948C,
+ sub_80894C4,
+ fishE
+};
+
+const s16 gUnknown_0839F470[] = {
+ -2,
+ -4,
+ -5,
+ -6,
+ -7,
+ -8,
+ -8,
+ -8,
+ -7,
+ -7,
+ -6,
+ -5,
+ -3,
+ -2,
+ 0,
+ 2,
+ 4,
+ 8
+};
static u8 sActiveList[32];
extern u8 *gFieldEffectScriptPointers[];
-extern FldEffCmd gFieldEffectScriptFuncs[];
-
u32 FieldEffectStart(u8 id)
{
u8 *script;
@@ -460,7 +848,6 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
#endif
void Task_PokecenterHeal(u8 taskId);
-extern const void (*gUnknown_0839F268[4])(struct Task *);
u8 CreatePokeballGlowSprite(s16, s16, s16, u16);
u8 PokecenterHealEffectHelper(s16, s16);
@@ -521,7 +908,6 @@ void PokecenterHealEffect_3(struct Task *task)
}
void Task_HallOfFameRecord(u8 taskId);
-extern const void (*gUnknown_0839F278[4])(struct Task *);
void HallOfFameRecordEffectHelper(s16, s16, s16, u8);
bool8 FldEff_HallOfFameRecord(void)
@@ -585,14 +971,6 @@ void HallOfFameRecordEffect_3(struct Task *task)
}
void SpriteCB_PokeballGlowEffect(struct Sprite *);
-extern const void (*gUnknown_0839F288[8])(struct Sprite *);
-extern const struct SpriteTemplate gSpriteTemplate_839F208;
-extern const struct SpriteTemplate gSpriteTemplate_839F220;
-extern const struct SpriteTemplate gSpriteTemplate_839F238;
-extern const struct SpriteTemplate gSpriteTemplate_839F250;
-extern const struct SubspriteTable gUnknown_0839F1A0;
-extern const struct SubspriteTable gUnknown_0839F1C8;
-extern const struct Coords16 gUnknown_0839F2A8[6];
u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
{
@@ -633,10 +1011,6 @@ void PokeballGlowEffect_0(struct Sprite *sprite)
}
}
-extern const u8 gUnknown_0839F2C0[4]; // red
-extern const u8 gUnknown_0839F2C4[4]; // green
-extern const u8 gUnknown_0839F2C8[4]; // blue
-
void PokeballGlowEffect_1(struct Sprite *sprite)
{
if ((--sprite->data1) == 0)
@@ -881,7 +1255,6 @@ void c3_080843F8(u8 taskId)
extern void pal_fill_for_map_transition(void);
void sub_8086774(u8);
-extern const bool8 (*gUnknown_0839F2CC[7])(struct Task *);
extern void CameraObjectReset2(void);
extern void CameraObjectReset1(void);
@@ -1015,8 +1388,6 @@ bool8 sub_80869F8(struct Task *task)
}
void sub_8086A68(u8);
-extern const bool8 (*gUnknown_0839F2E8[6])(struct Task *);
-extern const bool8 (*gUnknown_0839F300[7])(struct Task *);
extern void sub_80B4824(u8);
extern void sub_8053FF8(void);
extern void fade_8080918(void);
@@ -1285,7 +1656,6 @@ bool8 sub_8086ED4(struct Task *task)
}
void sub_8086F64(u8);
-extern const bool8 (*gUnknown_0839F31C[5])(struct Task *, struct MapObject *);
bool8 FldEff_UseWaterfall(void)
{
@@ -1358,7 +1728,6 @@ bool8 sub_8087058(struct Task *task, struct MapObject *mapObject)
}
void Task_Dive(u8);
-extern const bool8 (*gUnknown_0839F330[3])(struct Task *);
extern int dive_warp(struct MapPosition *, u16);
bool8 FldEff_UseDive(void)
@@ -1406,7 +1775,6 @@ bool8 dive_3_unknown(struct Task *task)
}
void sub_80871D0(u8);
-extern const bool8 (*gUnknown_0839F33C[6])(struct Task *, struct MapObject *, struct Sprite *);
void mapldr_080851BC(void);
void sub_80871B8(u8 priority)
@@ -1522,7 +1890,6 @@ bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite
}
void sub_8087470(u8);
-extern const bool8 (*gUnknown_0839F354[4])(struct Task *, struct MapObject *, struct Sprite *);
extern u8 sub_80608A4(u8);
void mapldr_080851BC(void)
@@ -1611,7 +1978,6 @@ void sub_8087638(struct Sprite *sprite)
}
void sub_808766C(u8);
-extern const bool8 (*gUnknown_0839F364[5])(struct Task *, struct MapObject *, struct Sprite *);
void sub_8087654(u8 priority)
{
@@ -1677,8 +2043,6 @@ bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite
}
void sub_80878C4(u8);
-extern u8 gUnknown_0839F380[5];
-extern const void (*gUnknown_0839F378[2])(struct Task *);
void mapldr_080859D4(void);
bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
@@ -1764,7 +2128,6 @@ void sub_8087914(struct Task *task)
}
void sub_8087A74(u8);
-extern const void (*gUnknown_0839F388[2])(struct Task *);
void mapldr_080859D4(void)
{
@@ -1822,7 +2185,6 @@ void sub_8087AC8(struct Task *task)
}
void sub_8087BBC(u8);
-extern const void (*gUnknown_0839F390[4])(struct Task *);
void mapldr_08085D88(void);
void sub_8087BA8(void)
@@ -1910,7 +2272,6 @@ void sub_8087D78(struct Task *task)
}
void sub_8087E1C(u8);
-extern const void (*gUnknown_0839F3A0[3])(struct Task *);
void mapldr_08085D88(void)
{
@@ -2013,14 +2374,6 @@ void sub_8087FDC(struct Task *task)
void sub_8088120(u8);
void sub_808847C(u8);
u8 sub_8088830(u32, u32, u32);
-extern const void (*gUnknown_0839F3AC[7])(struct Task *);
-extern const void (*gUnknown_0839F3C8[7])(struct Task *);
-extern const u32 gFieldMoveStreaksTiles[0x200];
-extern const u16 gFieldMoveStreaksPalette[16];
-extern const u16 gFieldMoveStreaksTilemap[10 * 32];
-extern const u32 gDarknessFieldMoveStreaksTiles[0x80];
-extern const u16 gDarknessFieldMoveStreaksPalette[16];
-extern const u16 gDarknessFieldMoveStreaksTilemap[10 * 32];
void sub_80883DC(void);
void sub_808843C(u16);
void sub_8088890(struct Sprite *);
@@ -2517,7 +2870,6 @@ void sub_80888F0(struct Sprite *sprite)
}
void sub_8088954(u8);
-extern const void (*gUnknown_0839F3E4[5])(struct Task *);
u8 FldEff_UseSurf(void)
{
@@ -2641,7 +2993,6 @@ void sub_8088BC4(struct Sprite *sprite)
}
void sub_8088C70(u8);
-extern const void (*gUnknown_0839F3F8[9])(struct Task *);
extern void sub_8127EFC(u8, u8);
u8 sub_8088F60(void);
bool8 sub_8088FA4(u8);
@@ -2649,7 +3000,6 @@ void sub_8088FC0(u8);
void sub_8088FFC(u8, u8);
void sub_8089018(struct Sprite *);
void sub_80890D8(struct Sprite *);
-extern const union AffineAnimCmd *gSpriteAffineAnimTable_0839F44C[];
u8 FldEff_UseFly(void)
{
@@ -2922,8 +3272,6 @@ void sub_8089230(u8 spriteId)
}
void sub_8089270(u8);
-extern const void (*gUnknown_0839F454[7])(struct Task *);
-extern const s16 gUnknown_0839F470[18];
u8 FldEff_FlyIn(void)
{