diff options
-rw-r--r-- | Makefile | 20 | ||||
-rw-r--r-- | data/field_effect.s | 433 | ||||
-rwxr-xr-x | include/field_effect.h | 106 | ||||
-rwxr-xr-x[-rw-r--r--] | include/sprite.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rwxr-xr-x | src/data/field_effect.c | 400 |
6 files changed, 526 insertions, 440 deletions
@@ -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 +}; |