Merge pull request #157 from PikalaxALT/dism_more_data

Evolution Graphics and others
This commit is contained in:
PikalaxALT 2019-11-19 14:05:18 -05:00 committed by GitHub
commit 43efafa12c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 2424 additions and 2185 deletions

View File

@ -466,9 +466,4 @@ _080F5944: .4byte gUnknown_841EE64
_080F5948: .4byte gUnknown_841EE68
thumb_func_end sub_80F5820
thumb_func_start nullsub_85
nullsub_85: @ 80F594C
bx lr
thumb_func_end nullsub_85
.align 2, 0 @ Don't pad with nop.

File diff suppressed because it is too large Load Diff

View File

@ -1619,7 +1619,7 @@ _080CEBA6:
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x3]
bl sub_80F5EC0
bl LaunchTask_PreEvoSparklesSet2
strb r0, [r4, 0x2]
bl _080CF528
.align 2, 0
@ -1641,7 +1641,7 @@ _080CEBE6:
ldr r1, [r0]
ldrb r0, [r1]
ldrb r1, [r1, 0x1]
bl sub_80F62B4
bl LaunchTask_PrePostEvoMonSprites
strb r0, [r4, 0x2]
mov r0, r8
adds r1, r0, r7
@ -1685,7 +1685,7 @@ _080CEC38:
_080CEC44: .4byte gUnknown_2039A20
_080CEC48: .4byte gBattleCommunication
_080CEC4C:
bl sub_80F5F74
bl LaunchTask_PostEvoSparklesSet1
ldr r1, _080CEC60 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CEC64 @ =gTasks
@ -2953,7 +2953,7 @@ _080CF752:
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x3]
bl sub_80F5EC0
bl LaunchTask_PreEvoSparklesSet2
strb r0, [r4, 0x2]
bl _080D003A
.align 2, 0
@ -2975,7 +2975,7 @@ _080CF78E:
ldr r1, [r0]
ldrb r0, [r1]
ldrb r1, [r1, 0x1]
bl sub_80F62B4
bl LaunchTask_PrePostEvoMonSprites
strb r0, [r4, 0x2]
adds r1, r7, r6
lsls r1, 3
@ -3017,7 +3017,7 @@ _080CF7DC:
_080CF7E4: .4byte gUnknown_2039A20
_080CF7E8: .4byte gBattleCommunication
_080CF7EC:
bl sub_80F5F74
bl LaunchTask_PostEvoSparklesSet1
ldr r1, _080CF800 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CF804 @ =gTasks
@ -3045,7 +3045,7 @@ _080CF820:
lsls r4, 3
adds r4, r5
ldrh r0, [r4, 0xC]
bl sub_80F6190
bl LaunchTask_PostEvoSparklesSet2AndFlash_Trade
mov r1, r8
strb r0, [r1, 0x2]
b _080CFA90

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +1,148 @@
#include "constants/region_map.h"
#include "constants/flags.h"
#include "constants/moves.h"
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_840BF3C:: @ 840BF3C
.incbin "baserom.gba", 0x40BF3C, 0xC
.byte 10, 2, -3, 0
.byte 15, 0, -4, 0
.byte -10, 2, -4, 0
gUnknown_840BF48:: @ 840BF48
.incbin "baserom.gba", 0x40BF48, 0x60
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55020
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55021
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55022
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55023
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55024
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55025
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55026
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55027
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55028
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55029
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55030
obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55031
gUnknown_840BFA8:: @ 840BFA8
.incbin "baserom.gba", 0x40BFA8, 0xC0
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55020
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55021
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55022
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55023
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55024
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55025
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55026
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55027
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55028
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55029
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55030
obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55031
gAnimCmd_840C008:: @ 840C008
obj_image_anim_frame 0x0000, 1
obj_image_anim_frame 0x0001, 1
obj_image_anim_frame 0x0002, 1
obj_image_anim_frame 0x0000, 1, OBJ_IMAGE_ANIM_H_FLIP
obj_image_anim_frame 0x0002, 1
obj_image_anim_frame 0x0001, 1
obj_image_anim_jump 0x0000
gAnimCmd_840C024:: @ 840C024
obj_image_anim_frame 0x0003, 1
obj_image_anim_end
gAnimCmd_840C02C:: @ 840C02C
obj_image_anim_frame 0x0004, 1
obj_image_anim_end
gAnimCmd_840C034:: @ 840C034
obj_image_anim_frame 0x0005, 1
obj_image_anim_end
gAnimCmd_840C03C:: @ 840C03C
obj_image_anim_frame 0x0006, 4
obj_image_anim_frame 0x0007, 4
obj_image_anim_jump 0x0000
gAnimCmd_840C048:: @ 840C048
obj_image_anim_frame 0x0007, 4
obj_image_anim_end
gSpriteAnimTable_840C050::
.4byte gAnimCmd_840C008
.4byte gAnimCmd_840C024
.4byte gAnimCmd_840C02C
.4byte gAnimCmd_840C034
.4byte gAnimCmd_840C03C
.4byte gAnimCmd_840C048
gUnknown_840C068:: @ 840C068
.incbin "baserom.gba", 0x40C068, 0xC
.byte 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x05, 0x04, 0x04
gUnknown_840C074:: @ 840C074
.incbin "baserom.gba", 0x40C074, 0x30
.4byte sub_80F06A4
.4byte sub_80F0C28
.4byte sub_80F0A20
.4byte sub_80F0B20
.4byte sub_80F0F10
.4byte sub_80F0A20
.4byte sub_80F091C
.4byte sub_80F0B20
.4byte sub_80F0DB4
.4byte sub_80F0818
.4byte sub_80F0C28
.4byte sub_80F103C
gUnknown_840C0A4:: @ 840C0A4
.incbin "baserom.gba", 0x40C0A4, 0x60
spr_template 55020, 55020, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C0BC::
spr_template 55021, 55021, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55022, 55022, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55023, 55023, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C104:: @ 840C104
.incbin "baserom.gba", 0x40C104, 0xC0
spr_template 55024, 55024, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55025, 55025, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55026, 55026, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55027, 55027, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55028, 55028, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55029, 55029, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55030, 55030, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55031, 55031, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C1C4:: @ 840C1C4
.incbin "baserom.gba", 0x40C1C4, 0x28
.2byte RGB(31, 22, 30)
.2byte RGB(16, 23, 30)
.2byte RGB(23, 30, 20)
.2byte RGB(31, 31, 15)
.2byte RGB(23, 20, 28)
.2byte RGB(21, 31, 25)
.2byte RGB(12, 25, 30)
.2byte RGB(30, 27, 10)
.2byte RGB(31, 24, 16)
.2byte RGB(29, 30, 30)
.2byte RGB(31, 17, 10)
.2byte RGB(31, 9, 10)
gUnknown_840C1DC:: @ 840C1DC
.byte 0x00, 0x00, 0x01, 0x02, 0x03
.byte 0x04, 0x01, 0x01, 0x00, 0x01
.byte 0x03, 0x05, 0x06, 0x05, 0x04
.align 2
gUnknown_840C1EC::
.incbin "baserom.gba", 0x40C1EC, 0x24
spr_template 10269, 10269, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C
gUnknown_840C204::
obj_image_anim_frame 0x0040, 1
obj_image_anim_end
gSpriteAnimTable_840C20C::
.4byte gUnknown_840C204
gUnknown_840C210::
.incbin "baserom.gba", 0x40C210, 0x18
spr_template 10058, 10058, gOamData_83AC9D8, gSpriteAnimTable_840C20C, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C

View File

@ -1,22 +0,0 @@
#include "constants/region_map.h"
#include "constants/flags.h"
#include "constants/moves.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_841EE84:: @ 841EE84
.incbin "baserom.gba", 0x41EE84, 0x40
gUnknown_841EEC4:: @ 841EEC4
.incbin "baserom.gba", 0x41EEC4, 0x10
gUnknown_841EED4:: @ 841EED4
.incbin "baserom.gba", 0x41EED4, 0x24
gUnknown_841EEF8:: @ 841EEF8
.incbin "baserom.gba", 0x41EEF8, 0x18
gUnknown_841EF10:: @ 841EF10
.incbin "baserom.gba", 0x41EF10, 0x2B8

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

View File

@ -1,5 +1,5 @@
#ifndef GUARD_UNK_TEXT_UTIL_H
#define GUARD_UNK_TEXT_UTIL_H
#ifndef GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
#define GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
#include "global.h"
@ -9,4 +9,4 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src);
const u8 *DynamicPlaceholderTextUtil_GetPlaceholderPtr(u8 idx);
u8 GetColorFromTextColorTable(u16 graphicId);
#endif //GUARD_UNK_TEXT_UTIL_H
#endif //GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H

View File

@ -10,7 +10,7 @@ u8 LaunchTask_PreEvoSparklesSet2(void);
u8 LaunchTask_PostEvoSparklesSet1(void);
u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species);
u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species);
u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID);
u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId);
#define EvoGraphicsTaskEvoStop data[8]

View File

@ -8,5 +8,6 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
extern void (*gCB2_AfterEvolution)(void);
void sub_80D0474(void);
#endif // GUARD_EVOLUTION_SCENE_H

View File

@ -218,7 +218,7 @@ SECTIONS {
src/diploma.o(.text);
asm/save_failed_screen.o(.text);
asm/clear_save_data_screen.o(.text);
asm/evolution_graphics.o(.text);
src/evolution_graphics.o(.text);
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
asm/box_party_pokemon_dropdown.o(.text);
@ -494,7 +494,7 @@ SECTIONS {
data/strings.o(.rodata);
data/save_failed_screen.o(.rodata);
data/clear_save_data_screen.o(.rodata);
data/evolution_graphics.o(.rodata);
src/evolution_graphics.o(.rodata);
src/new_menu_helpers.o(.rodata);
data/box_party_pokemon_dropdown.o(.rodata);
src/map_preview_screen.o(.rodata);

View File

@ -82,7 +82,7 @@ static const union AffineAnimCmd gUnknown_83E7900[] =
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7910[] =
const union AffineAnimCmd *const gUnknown_83E7910[] =
{
gUnknown_83E7890,
gUnknown_83E78A0,

638
src/evolution_graphics.c Normal file
View File

@ -0,0 +1,638 @@
#include "global.h"
#include "trig.h"
#include "random.h"
#include "decompress.h"
#include "palette.h"
#include "sound.h"
#include "task.h"
#include "evolution_scene.h"
#include "evolution_graphics.h"
#include "constants/songs.h"
static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite);
static void EvoTask_PreEvoSparkleSet1Init(u8 taskId);
static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId);
static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId);
static void EvoTask_PreEvoSparkleSet2Init(u8 taskId);
static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId);
static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId);
static void EvoTask_PostEvoSparklesSet1Init(u8 taskId);
static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId);
static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId);
static void EvoTask_PostEvoSparklesSet2Init(u8 taskId);
static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId);
static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId);
static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId);
static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId);
static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId);
static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId);
static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId);
static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId);
static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId);
static const u16 sEvolutionSparklesPalData[] = INCBIN_U16("graphics/misc/evolution_sprite_841EEA4.gbapal");
static const u32 sEvolutionSparklesTileData[] = INCBIN_U32("graphics/misc/evolution_sprite_841EEA4.4bpp.lz");
static const struct CompressedSpriteSheet sSpriteSheet_EvolutionSparkles[] = {
{ sEvolutionSparklesTileData, 0x20, 1001 },
{}
};
static const struct SpritePalette sSpritePalette_EvolutionSparkles[] = {
{ sEvolutionSparklesPalData, 1001 },
{}
};
static const struct OamData sOamData_EvolutionSparkles = {
.y = 160,
.priority = 1
};
static const union AnimCmd sSpriteAnim_EvolutionSparkles_0[] = {
ANIMCMD_FRAME(0, 8),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_EvolutionSparkles[] = {
sSpriteAnim_EvolutionSparkles_0
};
static const struct SpriteTemplate sSpriteTemplate_EvolutionSparkles = {
.tileTag = 1001,
.paletteTag = 1001,
.oam = &sOamData_EvolutionSparkles,
.anims = sSpriteAnimTable_EvolutionSparkles,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy_EvoSparkles
};
static const u16 sEvolutionSparkleMatrixScales[12] = {
0x3C0,
0x380,
0x340,
0x300,
0x2C0,
0x280,
0x240,
0x200,
0x1C0,
0x180,
0x140,
0x100
};
static const s16 sUnref_841EF28[][2] = {
{-4, 0x10},
{-3, 0x30},
{-2, 0x50},
{-1, 0x70},
{ 1, 0x70},
{ 2, 0x50},
{ 3, 0x30},
{ 4, 0x10}
};
static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite)
{
}
static void SetEvoSparklesMatrices(void)
{
u16 i;
for (i = 0; i < NELEMS(sEvolutionSparkleMatrixScales); i++)
SetOamMatrix(i + 20, sEvolutionSparkleMatrixScales[i], 0, 0, sEvolutionSparkleMatrixScales[i]);
}
static void SpriteCB_PreEvoSparkleSet1(struct Sprite * sprite)
{
u8 mnum;
if (sprite->pos1.y > 8)
{
sprite->pos1.y = 88 - sprite->data[7] * sprite->data[7] / 80;
sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
sprite->pos2.x = Cos((u8) sprite->data[6], sprite->data[5]);
sprite->data[6] += 4;
if (sprite->data[7] & 1)
sprite->data[5]--;
sprite->data[7]++;
if (sprite->pos2.y > 0)
sprite->subpriority = 1;
else
sprite->subpriority = 20;
mnum = sprite->data[5] / 4 + 20;
if (mnum > 31)
mnum = 31;
sprite->oam.matrixNum = mnum;
}
else
{
DestroySprite(sprite);
}
}
static void CreatePreEvoSparkleSet1(u8 a0)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 88, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[5] = 48;
gSprites[spriteId].data[6] = a0;
gSprites[spriteId].data[7] = 0;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 31;
gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet1;
}
}
static void SpriteCB_PreEvoSparkleSet2(struct Sprite * sprite)
{
if (sprite->pos1.y < 88)
{
sprite->pos1.y = 8 + sprite->data[7] * sprite->data[7] / 5;
sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
sprite->data[5] = Sin((u8)(sprite->data[7] * 4), 40) + 8;
sprite->data[7]++;
}
else
{
DestroySprite(sprite);
}
}
static void CreatePreEvoSparkleSet2(u8 a0)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 8, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[5] = 8;
gSprites[spriteId].data[6] = a0;
gSprites[spriteId].data[7] = 0;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 25;
gSprites[spriteId].subpriority = 1;
gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet2;
}
}
static void SpriteCB_PostEvoSparkleSet1(struct Sprite * sprite)
{
if (sprite->data[5] > 8)
{
sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]);
sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
sprite->data[5] -= sprite->data[3];
sprite->data[6] += 4;
}
else
{
DestroySprite(sprite);
}
}
static void CreatePostEvoSparkleSet1(u8 a0, u8 a1)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[3] = a1;
gSprites[spriteId].data[5] = 120;
gSprites[spriteId].data[6] = a0;
gSprites[spriteId].data[7] = 0;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 31;
gSprites[spriteId].subpriority = 1;
gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet1;
}
}
static void SpriteCB_PostEvoSparkleSet2(struct Sprite * sprite)
{
u8 mnum;
if ((sprite->data[7] & 3) == 0)
sprite->pos1.y++;
if (sprite->data[6] < 128)
{
sprite->pos2.y = -Sin((u8)sprite->data[6], sprite->data[5]);
sprite->pos1.x = 120 + sprite->data[3] * sprite->data[7] / 3;
sprite->data[6]++;
mnum = 31 - sprite->data[6] * 12 / 128;
if (sprite->data[6] > 64)
{
sprite->subpriority = 1;
}
else
{
sprite->invisible = FALSE;
sprite->subpriority = 20;
if (sprite->data[6] > 112 && (sprite->data[6] & 1))
sprite->invisible = TRUE;
}
if (mnum < 20)
mnum = 20;
sprite->oam.matrixNum = mnum;
sprite->data[7]++;
}
else
{
DestroySprite(sprite);
}
}
static void CreatePostEvoSparkleSet2(u8 unused)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[3] = 3 - (Random() % 7);
gSprites[spriteId].data[5] = 48 + (Random() & 63);
gSprites[spriteId].data[7] = 0;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 31;
gSprites[spriteId].subpriority = 20;
gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet2;
}
}
void LoadEvoSparkleSpriteAndPal(void)
{
LoadCompressedSpriteSheetUsingHeap(sSpriteSheet_EvolutionSparkles);
LoadSpritePalettes(sSpritePalette_EvolutionSparkles);
}
u8 LaunchTask_PreEvoSparklesSet1(u16 a0)
{
u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet1Init, 0);
gTasks[taskId].data[1] = a0;
return taskId;
}
static void EvoTask_PreEvoSparkleSet1Init(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
BeginNormalPaletteFade(3 << gTasks[taskId].data[1], 10, 0, 16, RGB_WHITE);
gTasks[taskId].func = EvoTask_CreatePreEvoSparkleSet1;
PlaySE(SE_W025);
}
static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId)
{
u8 i;
if (gTasks[taskId].data[15] < 64)
{
if ((gTasks[taskId].data[15] & 7) == 0)
{
for (i = 0; i < 4; i++)
CreatePreEvoSparkleSet1(2 * (gTasks[taskId].data[15] & 0x78) + 64 * i);
}
gTasks[taskId].data[15]++;
}
else
{
gTasks[taskId].data[15] = 96;
gTasks[taskId].func = EvoTask_WaitForPre1SparklesToGoUp;
}
}
static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId)
{
if (gTasks[taskId].data[15] != 0)
gTasks[taskId].data[15]--;
else
DestroyTask(taskId);
}
u8 LaunchTask_PreEvoSparklesSet2(void)
{
u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet2Init, 0);
return taskId;
}
static void EvoTask_PreEvoSparkleSet2Init(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
gTasks[taskId].func = EvoTask_CreatePreEvoSparklesSet2;
PlaySE(SE_W062B);
}
static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId)
{
u8 i;
if (gTasks[taskId].data[15] < 96)
{
if (gTasks[taskId].data[15] < 6)
{
for (i = 0; i < 9; i++)
CreatePreEvoSparkleSet2(16 * i);
}
gTasks[taskId].data[15]++;
}
else
{
gTasks[taskId].func = EvoTask_PreEvoSparkleSet2Teardown;
}
}
static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId)
{
DestroyTask(taskId);
}
u8 LaunchTask_PostEvoSparklesSet1(void)
{
u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet1Init, 0);
return taskId;
}
static void EvoTask_PostEvoSparklesSet1Init(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet1;
PlaySE(SE_REAPOKE);
}
static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId)
{
u8 i;
if (gTasks[taskId].data[15] < 48)
{
if (gTasks[taskId].data[15] == 0)
{
for (i = 0; i < 16; i++)
{
CreatePostEvoSparkleSet1(i * 16, 4);
}
}
if (gTasks[taskId].data[15] == 32)
{
for (i = 0; i < 16; i++)
{
CreatePostEvoSparkleSet1(i * 16, 8);
}
}
gTasks[taskId].data[15]++;
}
else
{
gTasks[taskId].func = EvoTask_PostEvoSparklesSet1Teardown;
}
}
static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId)
{
DestroyTask(taskId);
}
u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
{
u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2Init, 0);
gTasks[taskId].data[2] = species;
return taskId;
}
static void EvoTask_PostEvoSparklesSet2Init(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
sub_80D0474();
CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
BeginNormalPaletteFade(0xFFF90F1C, 0, 0, 16, RGB_WHITE);
gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2;
PlaySE(SE_W080);
}
static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId)
{
u8 i;
if (gTasks[taskId].data[15] < 128)
{
switch (gTasks[taskId].data[15])
{
default:
if (gTasks[taskId].data[15] < 50)
CreatePostEvoSparkleSet2(Random() & 7);
break;
case 0:
for (i = 0; i < 8; i++)
CreatePostEvoSparkleSet2(i);
break;
case 32:
BeginNormalPaletteFade(0xFFFF0F1C, 16, 16, 0, RGB_WHITE);
break;
}
gTasks[taskId].data[15]++;
}
else
{
gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
}
}
static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId)
{
if (!gPaletteFade.active)
DestroyTask(taskId);
}
u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
{
u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2TradeInit, 0);
gTasks[taskId].data[2] = species;
return taskId;
}
static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
sub_80D0474();
CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
BeginNormalPaletteFade(0xFFF90F00, 0, 0, 16, RGB_WHITE);
gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2Trade;
PlaySE(SE_W080);
}
static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId)
{
u8 i;
if (gTasks[taskId].data[15] < 128)
{
switch (gTasks[taskId].data[15])
{
default:
if (gTasks[taskId].data[15] < 50)
CreatePostEvoSparkleSet2(Random() & 7);
break;
case 0:
for (i = 0; i < 8; i++)
CreatePostEvoSparkleSet2(i);
break;
case 32:
BeginNormalPaletteFade(0xFFFF0F00, 16, 16, 0, RGB_WHITE);
break;
}
gTasks[taskId].data[15]++;
}
else
{
gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
}
}
static void SpriteCallbackDummy_MonSprites(struct Sprite * sprite)
{
}
#define tPreEvoSpriteId data[1]
#define tPostEvoSpriteId data[2]
#define tPreEvoScale data[3]
#define tPostEvoScale data[4]
#define tDirection data[5]
#define tSpeed data[6]
u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId)
{
u16 i;
u8 taskId;
u16 palette[16];
for (i = 0; i < 16; i++)
palette[i] = RGB_WHITE;
taskId = CreateTask(EvoTask_PrePostEvoMonSpritesInit, 0);
gTasks[taskId].tPreEvoSpriteId = preEvoSpriteId;
gTasks[taskId].tPostEvoSpriteId = postEvoSpriteId;
gTasks[taskId].tPreEvoScale = 256;
gTasks[taskId].tPostEvoScale = 16;
SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
gSprites[preEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[preEvoSpriteId].oam.matrixNum = 30;
gSprites[preEvoSpriteId].invisible = FALSE;
CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[preEvoSpriteId].oam.paletteNum], 32);
gSprites[postEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[postEvoSpriteId].oam.matrixNum = 31;
gSprites[postEvoSpriteId].invisible = FALSE;
CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[postEvoSpriteId].oam.paletteNum], 32);
gTasks[taskId].EvoGraphicsTaskEvoStop = FALSE;
return taskId;
}
static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId)
{
gTasks[taskId].tDirection = FALSE;
gTasks[taskId].tSpeed = 8;
gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
}
static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId)
{
if (gTasks[taskId].EvoGraphicsTaskEvoStop)
{
PreEvoVisible_PostEvoInvisible_KillTask(taskId);
}
else if (gTasks[taskId].tSpeed == 128)
{
PreEvoInvisible_PostEvoVisible_KillTask(taskId);
}
else
{
gTasks[taskId].tSpeed += 2;
gTasks[taskId].tDirection ^= TRUE;
gTasks[taskId].func = EvoTask_ShrinkOrExpandEvoSprites;
}
}
static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId)
{
u8 r6;
if (gTasks[taskId].EvoGraphicsTaskEvoStop)
{
gTasks[taskId].func = PreEvoVisible_PostEvoInvisible_KillTask;
}
else
{
r6 = 0;
if (!gTasks[taskId].tDirection)
{
if (gTasks[taskId].tPreEvoScale < 0x100 - gTasks[taskId].tSpeed)
{
gTasks[taskId].tPreEvoScale += gTasks[taskId].tSpeed;
}
else
{
gTasks[taskId].tPreEvoScale = 0x100;
r6 = 1;
}
if (gTasks[taskId].tPostEvoScale > 0x10 + gTasks[taskId].tSpeed)
{
gTasks[taskId].tPostEvoScale -= gTasks[taskId].tSpeed;
}
else
{
gTasks[taskId].tPostEvoScale = 0x10;
r6++;
}
}
else
{
if (gTasks[taskId].tPostEvoScale < 0x100 - gTasks[taskId].tSpeed)
{
gTasks[taskId].tPostEvoScale += gTasks[taskId].tSpeed;
}
else
{
gTasks[taskId].tPostEvoScale = 0x100;
r6 = 1;
}
if (gTasks[taskId].tPreEvoScale > 0x10 + gTasks[taskId].tSpeed)
{
gTasks[taskId].tPreEvoScale -= gTasks[taskId].tSpeed;
}
else
{
gTasks[taskId].tPreEvoScale = 0x10;
r6++;
}
}
SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
if (r6 == 2)
{
gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
}
}
}
static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId)
{
gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = TRUE;
gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = FALSE;
DestroyTask(taskId);
}
static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId)
{
gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = FALSE;
gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = TRUE;
DestroyTask(taskId);
}
#undef tPreEvoSpriteId
#undef tPostEvoSpriteId
#undef tPreEvoScale
#undef tPostEvoScale
#undef tDirection
#undef tSpeed

View File

@ -135,7 +135,7 @@ static const union AnimCmd *const gUnknown_83E632C[] =
gUnknown_83E6308,
};
static const union AnimCmd *const gUnknown_83E6330[] =
const union AnimCmd *const gUnknown_83E6330[] =
{
gUnknown_83E6310,
};

View File

@ -21,11 +21,13 @@
#define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214
static EWRAM_DATA bool8 gUnknown_203AB58[4] = {FALSE}; // knizz: bgmaps_that_need_syncing
static EWRAM_DATA u16 gUnknown_203AB5C = {0};
static EWRAM_DATA void *gUnknown_203AB60[0x20] = {NULL};
static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE};
static EWRAM_DATA u16 sTempTileDataBufferCursor = {0};
static EWRAM_DATA void *sTempTileDataBuffers[0x20] = {NULL};
static EWRAM_DATA u8 sStartMenuWindowId = {0};
static const u16 gUnknown_841EF48[] = INCBIN_U16("graphics/unknown/unk_841EF48.4bpp");
const u16 gUnknown_841F1C8[] = INCBIN_U16("graphics/text_window/unk_841F1C8.4bpp");
const u16 gTMCaseMainWindowPalette[] = INCBIN_U16("graphics/tm_case/unk_841F408.gbapal");
@ -169,35 +171,35 @@ static void TaskFreeBufAfterCopyingTileDataToVram(u8 taskId);
void ClearScheduledBgCopiesToVram(void)
{
memset(gUnknown_203AB58, 0, sizeof(gUnknown_203AB58));
memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram));
}
void ScheduleBgCopyTilemapToVram(u8 bgId)
{
gUnknown_203AB58[bgId] = TRUE;
sScheduledBgCopiesToVram[bgId] = TRUE;
}
void DoScheduledBgTilemapCopiesToVram(void)
{
if (gUnknown_203AB58[0] == TRUE)
if (sScheduledBgCopiesToVram[0] == TRUE)
{
CopyBgTilemapBufferToVram(0);
gUnknown_203AB58[0] = FALSE;
sScheduledBgCopiesToVram[0] = FALSE;
}
if (gUnknown_203AB58[1] == TRUE)
if (sScheduledBgCopiesToVram[1] == TRUE)
{
CopyBgTilemapBufferToVram(1);
gUnknown_203AB58[1] = FALSE;
sScheduledBgCopiesToVram[1] = FALSE;
}
if (gUnknown_203AB58[2] == TRUE)
if (sScheduledBgCopiesToVram[2] == TRUE)
{
CopyBgTilemapBufferToVram(2);
gUnknown_203AB58[2] = FALSE;
sScheduledBgCopiesToVram[2] = FALSE;
}
if (gUnknown_203AB58[3] == TRUE)
if (sScheduledBgCopiesToVram[3] == TRUE)
{
CopyBgTilemapBufferToVram(3);
gUnknown_203AB58[3] = FALSE;
sScheduledBgCopiesToVram[3] = FALSE;
}
}
@ -205,11 +207,11 @@ void ResetTempTileDataBuffers(void)
{
int i;
for (i = 0; i < (s32)NELEMS(gUnknown_203AB60); i++)
for (i = 0; i < (s32)NELEMS(sTempTileDataBuffers); i++)
{
gUnknown_203AB60[i] = NULL;
sTempTileDataBuffers[i] = NULL;
}
gUnknown_203AB5C = 0;
sTempTileDataBufferCursor = 0;
}
bool8 FreeTempTileDataBuffersIfPossible(void)
@ -218,13 +220,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
if (!IsDma3ManagerBusyWithBgCopy())
{
if (gUnknown_203AB5C)
if (sTempTileDataBufferCursor)
{
for (i = 0; i < gUnknown_203AB5C; i++)
for (i = 0; i < sTempTileDataBufferCursor; i++)
{
FREE_AND_SET_NULL(gUnknown_203AB60[i]);
FREE_AND_SET_NULL(sTempTileDataBuffers[i]);
}
gUnknown_203AB5C = 0;
sTempTileDataBufferCursor = 0;
}
return FALSE;
}
@ -238,7 +240,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
{
u32 sizeOut;
if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (!size)
@ -246,7 +248,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, size, offset, mode);
gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}
@ -257,7 +259,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
{
u32 sizeOut;
if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (sizeOut > size)
@ -265,7 +267,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, sizeOut, offset, mode);
gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}

View File

@ -134,7 +134,7 @@ static const union AffineAnimCmd gUnknown_83E6A68[] =
AFFINEANIMCMD_JUMP(0),
};
static const union AffineAnimCmd *const gUnknown_83E6A80[] =
const union AffineAnimCmd *const gUnknown_83E6A80[] =
{
gUnknown_83E6A68,
};