summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-06-12 20:37:47 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-06-12 20:37:47 -0400
commit28f5eee3737942c9779b6943fac6c30160efa3b8 (patch)
treee3746fac60b39f4614733dea08001ae4a0979fbe
parentdb6818ca9149304463e5e2219ec90993a3af53b2 (diff)
Convert data/field_effect.s to C
-rw-r--r--Makefile20
-rw-r--r--data/field_effect.s433
-rwxr-xr-xinclude/field_effect.h106
-rwxr-xr-x[-rw-r--r--]include/sprite.h4
-rw-r--r--ld_script.txt3
-rwxr-xr-xsrc/data/field_effect.c400
6 files changed, 526 insertions, 440 deletions
diff --git a/Makefile b/Makefile
index f656b86b6..f5d8a6553 100644
--- a/Makefile
+++ b/Makefile
@@ -40,10 +40,11 @@ VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_d
$(VERSIONS) $(VERSIONS:%=compare_%)
-$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,src,asm,data}))
+$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,src,src/data,asm,data}))
C_SRCS := $(wildcard src/*.c)
ASM_SRCS := $(wildcard asm/*.s)
+DATA_C_SRCS := $(wildcard src/data/*.c)
DATA_ASM_SRCS := $(wildcard data/*.s)
SONG_SRCS := $(wildcard sound/songs/*.s)
@@ -109,22 +110,33 @@ define VERSION_RULES
$1_C_OBJS := $$(C_SRCS:%.c=build/$1/%.o)
$1_ASM_OBJS := $$(ASM_SRCS:%.s=build/$1/%.o)
+$1_DATA_C_OBJS := $$(DATA_C_SRCS:%.c=build/$1/%.o)
$1_DATA_ASM_OBJS := $$(DATA_ASM_SRCS:%.s=build/$1/%.o)
ifeq ($$(NODEP),)
build/$1/src/%.o: c_dep = $$(shell $$(SCANINC) src/$$(*F).c)
+build/$1/src/data/%.o: c_dep = $$(shell $$(SCANINC) src/data/$$(*F).c)
build/$1/asm/%.o: asm_dep = $$(shell $$(SCANINC) asm/$$(*F).s)
build/$1/data/%.o: asm_dep = $$(shell $$(SCANINC) data/$$(*F).s)
endif
-$1_OBJS := $$($1_C_OBJS) $$($1_ASM_OBJS) $$($1_DATA_ASM_OBJS) $$(SONG_OBJS)
+$1_OBJS := $$($1_C_OBJS) $$($1_DATA_C_OBJS) $$($1_ASM_OBJS) $$($1_DATA_ASM_OBJS) $$(SONG_OBJS)
$1_OBJS_REL := $$($1_OBJS:build/$1/%=%)
$1_OBJS_REL := $$($1_OBJS_REL:sound/%=../../sound/%)
$$($1_C_OBJS): VERSION := $2
$$($1_C_OBJS): REVISION := $3
$$($1_C_OBJS): LANGUAGE := $4
-build/$1/%.o : %.c $$$$(c_dep)
+build/$1/src/%.o : src/%.c $$$$(c_dep)
+ @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i
+ @$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s
+ @printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s
+ $$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s
+
+$$($1_DATA_C_OBJS): VERSION := $2
+$$($1_DATA_C_OBJS): REVISION := $3
+$$($1_DATA_C_OBJS): LANGUAGE := $4
+build/$1/src/data/%.o : src/data/%.c $$$$(c_dep)
@$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i
@$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s
@printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s
@@ -147,7 +159,7 @@ build/$1/sym_bss.ld: sym_bss.txt
cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt $$(LANGUAGE) >sym_bss.ld
build/$1/sym_common.ld: LANGUAGE := $4
-build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$(wildcard common_syms/*.txt)
+build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$($1_DATA_C_OBJS) $$(wildcard common_syms/*.txt)
cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt $$(LANGUAGE) -c src,../../common_syms >sym_common.ld
build/$1/sym_ewram.ld: LANGUAGE := $4
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 bda635885..6bf7a38c5 100644..100755
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -131,7 +131,7 @@ struct Subsprite
struct SubspriteTable
{
u8 subspriteCount;
- struct Subsprite *subsprites;
+ const struct Subsprite *subsprites;
};
struct Sprite;
@@ -142,7 +142,7 @@ struct SpriteTemplate
u16 paletteTag;
const struct OamData *oam;
const union AnimCmd *const *anims;
- struct SpriteFrameImage *images;
+ const struct SpriteFrameImage *images;
const union AffineAnimCmd *const *affineAnims;
void (*callback)(struct Sprite *);
};
diff --git a/ld_script.txt b/ld_script.txt
index 24a7c2ddf..418520720 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -389,7 +389,8 @@ SECTIONS {
data/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
data/wild_encounter.o(.rodata);
- data/field_effect.o(.rodata);
+ src/data/field_effect.o(.rodata);
+ src/data/field_effect.o(.data);
data/pokemon_menu.o(.rodata);
data/option_menu.o(.rodata);
data/pokedex.o(.rodata);
diff --git a/src/data/field_effect.c b/src/data/field_effect.c
new file mode 100755
index 000000000..4aae09667
--- /dev/null
+++ b/src/data/field_effect.c
@@ -0,0 +1,400 @@
+//
+// Created by scott on 6/8/2017.
+//
+
+#include "global.h"
+#include "sprite.h"
+#include "task.h"
+#include "field_effect.h"
+
+#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
+};