through sub_811E040
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -5,129 +5,3 @@
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnknown_84599A4:: @ 84599A4
|
||||
.2byte 0x0000, 0x0010
|
||||
|
||||
gUnknown_84599A8:: @ 84599A8 unref, data16?
|
||||
.2byte 0x0044
|
||||
|
||||
gUnknown_84599AA:: @ 84599AA data16
|
||||
.2byte 0x0100, 0x0155, 0x01aa, 0x0200
|
||||
|
||||
gUnknown_84599B2:: @ 84599B2 data8
|
||||
.byte 0xf8, 0xf8, 0x06, 0xf3, 0x08, 0xf8
|
||||
|
||||
gUnknown_84599B8:: @ 84599B8 sprite_sheet
|
||||
obj_tiles gUnknown_84598C4, 0x0080, 2
|
||||
|
||||
gUnknown_84599C0:: @ 84599C0 sprite_palette
|
||||
obj_pal gUnknown_84598A4, 2
|
||||
|
||||
gUnknown_84599C8:: @ 84599C8 sprite_sheet
|
||||
obj_tiles gUnknown_8459960, 0x0060, 5
|
||||
|
||||
gUnknown_84599D0:: @ 84599D0 sprite_palette
|
||||
obj_pal gUnknown_8459940, 5
|
||||
|
||||
gUnknown_84599D8:: @ 84599D8
|
||||
.4byte 0xc0000300, 0x00000400
|
||||
|
||||
gUnknown_84599E0:: @ 84599E0
|
||||
obj_rot_scal_anim_frame 256, 256, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_84599F0:: @ 84599F0
|
||||
obj_rot_scal_anim_frame 341, 341, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A00:: @ 8459A00
|
||||
obj_rot_scal_anim_frame 426, 426, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A10:: @ 8459A10
|
||||
obj_rot_scal_anim_frame 512, 512, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A20:: @ 8459A20 dataptr
|
||||
.4byte gUnknown_84599E0
|
||||
.4byte gUnknown_84599F0
|
||||
.4byte gUnknown_8459A00
|
||||
.4byte gUnknown_8459A10
|
||||
|
||||
gUnknown_8459A30:: @ 8459A30 spr_template
|
||||
spr_template 0, 0, gUnknown_84599D8, gDummySpriteAnimTable, NULL, gUnknown_8459A20, SpriteCallbackDummy
|
||||
|
||||
gUnknown_8459A48:: @ 8459A48 affine_anim_cmd?
|
||||
obj_rot_scal_anim_frame 256, 256, 0, 0
|
||||
obj_rot_scal_anim_frame -28, -28, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A60:: @ 459A60
|
||||
obj_rot_scal_anim_frame 341, 341, 0, 0
|
||||
obj_rot_scal_anim_frame -37, -37, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A78:: @ 459A78
|
||||
obj_rot_scal_anim_frame 426, 426, 0, 0
|
||||
obj_rot_scal_anim_frame -47, -47, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459A90:: @ 459A90
|
||||
obj_rot_scal_anim_frame 512, 512, 0, 0
|
||||
obj_rot_scal_anim_frame -56, -56, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_8459AA8:: @ 8459AA8 dataptr
|
||||
.4byte gUnknown_8459A48
|
||||
.4byte gUnknown_8459A60
|
||||
.4byte gUnknown_8459A78
|
||||
.4byte gUnknown_8459A90
|
||||
|
||||
gUnknown_8459AB8:: @ 8459AB8
|
||||
.4byte 0x00008400, 0x00000400
|
||||
|
||||
gUnknown_8459AC0:: @ 8459AC0
|
||||
obj_image_anim_frame 0x0000, 3
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_8459AC8:: @ 8459AC8
|
||||
.4byte gUnknown_8459AC0
|
||||
|
||||
gUnknown_8459ACC:: @ 8459ACC spr_template
|
||||
spr_template 0, 0, gUnknown_8459AB8, gUnknown_8459AC8, NULL, gDummySpriteAffineAnimTable, sub_811E7B4
|
||||
|
||||
gUnknown_8459AE4:: @ 8459AE4
|
||||
.4byte 0x40000000, 0x00000400
|
||||
|
||||
gUnknown_8459AEC:: @ 8459AEC spr_template
|
||||
spr_template 2, 2, gUnknown_8459AE4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_811E300
|
||||
|
||||
gUnknown_8459B04:: @ 8459B04
|
||||
.4byte 0x00000000, 0x00000000
|
||||
|
||||
gUnknown_8459B0C:: @ 8459B0C
|
||||
obj_image_anim_frame 0x0000, 16
|
||||
obj_image_anim_frame 0x0001, 8
|
||||
obj_image_anim_frame 0x0002, 4
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_8459B1C:: @ 8459B1C
|
||||
obj_image_anim_frame 0x0001, 4
|
||||
obj_image_anim_frame 0x0000, 4
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_8459B28:: @ 8459B28
|
||||
.4byte gUnknown_8459B0C
|
||||
.4byte gUnknown_8459B1C
|
||||
|
||||
gUnknown_8459B30:: @ 8459B30 spr_template
|
||||
spr_template 5, 5, gUnknown_8459B04, gUnknown_8459B28, NULL, gDummySpriteAffineAnimTable, sub_811E520
|
||||
|
||||
gUnknown_8459B48:: @ 8459B48 dataptr
|
||||
.4byte gUnknown_841B2A9
|
||||
.4byte gUnknown_841B2B7
|
||||
.4byte gUnknown_841B2BE
|
||||
.4byte gUnknown_841B2CC
|
||||
.4byte gUnknown_841B2D4
|
||||
.4byte gUnknown_841B2C6
|
||||
|
||||
@@ -8,7 +8,10 @@ struct PokemonSpecialAnimScene
|
||||
u16 field_0000;
|
||||
u8 filler_0002[2];
|
||||
u16 field_0004;
|
||||
u8 filler_0006[0xA];
|
||||
u16 field_0006;
|
||||
u16 field_0008;
|
||||
u8 field_000a;
|
||||
struct Sprite * field_000c;
|
||||
struct Sprite * field_0010;
|
||||
u8 field_0014[0x900];
|
||||
u8 field_0914[BG_SCREEN_SIZE];
|
||||
@@ -57,7 +60,7 @@ bool8 sub_811D280(void);
|
||||
void sub_811D29C(void);
|
||||
void sub_811D2A8(void);
|
||||
void sub_811D2D0(void);
|
||||
void sub_811D2EC(u8 a0);
|
||||
void sub_811D2EC(u8 messageId);
|
||||
void sub_811D4D4(void);
|
||||
bool8 sub_811D4EC(void);
|
||||
void sub_811D4FC(void);
|
||||
@@ -68,10 +71,10 @@ bool8 sub_811D5C0(void);
|
||||
void sub_811D6EC(void);
|
||||
bool8 sub_811D6FC(void);
|
||||
bool8 sub_811D754(void);
|
||||
void sub_811D830(u8 a0);
|
||||
void sub_811D830(u8 closeness);
|
||||
void sub_811D948(u8 closeness);
|
||||
bool8 sub_811D9A8(void);
|
||||
void sub_811DC54(u16 itemId, u8 closeness, u8 a2);
|
||||
void sub_811DC54(u16 itemId, u8 closeness, bool32 a2);
|
||||
void sub_811DCF0(u16 itemId);
|
||||
bool8 sub_811DD90(void);
|
||||
void sub_811E040(void);
|
||||
|
||||
@@ -1454,5 +1454,11 @@ extern const u8 gUnknown_841B306[];
|
||||
extern const u8 gUnknown_841B315[];
|
||||
extern const u8 gUnknown_841B31B[];
|
||||
extern const u8 gUnknown_841B329[];
|
||||
extern const u8 gUnknown_841B2A9[];
|
||||
extern const u8 gUnknown_841B2B7[];
|
||||
extern const u8 gUnknown_841B2BE[];
|
||||
extern const u8 gUnknown_841B2CC[];
|
||||
extern const u8 gUnknown_841B2D4[];
|
||||
extern const u8 gUnknown_841B2C6[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
||||
@@ -557,7 +557,6 @@ SECTIONS {
|
||||
src/union_room_message.o(.rodata);
|
||||
src/pokemon_special_anim.o(.rodata);
|
||||
src/pokemon_special_anim_scene.o(.rodata);
|
||||
data/pokemon_special_anim.o(.rodata);
|
||||
src/party_menu.o(.rodata);
|
||||
src/union_room_chat.o(.rodata);
|
||||
src/union_room_chat_display.o(.rodata);
|
||||
|
||||
@@ -208,7 +208,7 @@ void sub_811C834(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
sub_811DC54(ptr->itemId, ptr->closeness, 1);
|
||||
sub_811DC54(ptr->itemId, ptr->closeness, TRUE);
|
||||
ptr->state++;
|
||||
break;
|
||||
case 7:
|
||||
@@ -414,7 +414,7 @@ void sub_811CBE4(u8 taskId)
|
||||
ptr->state++;
|
||||
break;
|
||||
case 4:
|
||||
sub_811DC54(ptr->itemId, ptr->closeness, 0);
|
||||
sub_811DC54(ptr->itemId, ptr->closeness, FALSE);
|
||||
ptr->state++;
|
||||
break;
|
||||
case 5:
|
||||
|
||||
@@ -1,23 +1,46 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
#include "dynamic_placeholder_text_util.h"
|
||||
#include "item.h"
|
||||
#include "item_menu_icons.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_special_anim_internal.h"
|
||||
#include "strings.h"
|
||||
#include "text_window.h"
|
||||
#include "trig.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
void sub_811D7D4(u16 animType);
|
||||
void sub_811D9BC(u8 taskId);
|
||||
void sub_811DA9C(struct Sprite * sprite, u8 closeness);
|
||||
bool8 sub_811DAAC(struct Sprite * sprite);
|
||||
void sub_811DB14(struct Sprite * sprite, u8 closeness);
|
||||
void sub_811DB48(struct Sprite * sprite, u8 closeness);
|
||||
void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3);
|
||||
void sub_811DBA8(struct PokemonSpecialAnimScene * scene);
|
||||
void sub_811DBBC(struct Sprite * sprite);
|
||||
void sub_811DC14(u16 *tilees, u16 *palette);
|
||||
struct Sprite * sub_811DD20(u16 itemId);
|
||||
u16 sub_811DCE8(u16 itemId);
|
||||
void sub_811DDA4(u8 taskId);
|
||||
void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite);
|
||||
void sub_811DFC0(struct Sprite * sprite);
|
||||
void sub_811E06C(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness);
|
||||
void sub_811E10C(void);
|
||||
bool8 sub_811E138(void);
|
||||
void sub_811E194(u8 a0);
|
||||
void sub_811E204(struct PokemonSpecialAnimScene * scene);
|
||||
bool8 sub_811E2F4(void);
|
||||
void sub_811E300(struct Sprite * sprite);
|
||||
void sub_811E348(struct PokemonSpecialAnimScene * scene);
|
||||
void sub_811E388(void);
|
||||
void sub_811E520(struct Sprite * sprite);
|
||||
void sub_811E588(void);
|
||||
bool32 sub_811E5A4(void);
|
||||
void sub_811E7B4(struct Sprite * sprite);
|
||||
|
||||
const u16 gUnknown_845963C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845963C.gbapal");
|
||||
const u16 gUnknown_845965C[] = INCBIN_U16("graphics/pokemon_special_anim/unk_845965C.gbapal");
|
||||
@@ -68,6 +91,238 @@ const u8 *const gUnknown_8459998[] = {
|
||||
gUnknown_841B2FF, // Poof!
|
||||
};
|
||||
|
||||
const u16 sUnref_84599A4[] = {
|
||||
0, 16, 68
|
||||
};
|
||||
|
||||
const u16 gUnknown_84599AA[] = {
|
||||
0x100,
|
||||
0x155,
|
||||
0x1AA,
|
||||
0x200
|
||||
};
|
||||
|
||||
const s8 gUnknown_84599B2[] = {
|
||||
-8, -8, 6, -13, 8, -8
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_84599B8 = {
|
||||
gUnknown_84598C4,
|
||||
0x80,
|
||||
2
|
||||
};
|
||||
|
||||
const struct SpritePalette gUnknown_84599C0 = {
|
||||
gUnknown_84598A4,
|
||||
2
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_84599C8 = {
|
||||
gUnknown_8459960,
|
||||
0x60,
|
||||
5
|
||||
};
|
||||
|
||||
const struct SpritePalette gUnknown_84599D0 = {
|
||||
gUnknown_8459940,
|
||||
5
|
||||
};
|
||||
|
||||
const struct OamData gUnknown_84599D8 = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(64x64),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(64x64),
|
||||
.tileNum = 0x000,
|
||||
.priority = 1,
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
|
||||
const union AffineAnimCmd gUnknown_84599E0[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_84599F0[] = {
|
||||
AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A00[] = {
|
||||
AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A10[] = {
|
||||
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_8459A20[] = {
|
||||
gUnknown_84599E0,
|
||||
gUnknown_84599F0,
|
||||
gUnknown_8459A00,
|
||||
gUnknown_8459A10
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_8459A30 = {
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gUnknown_84599D8,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gUnknown_8459A20,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A48[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-28, -28, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A60[] = {
|
||||
AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-37, -37, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A78[] = {
|
||||
AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-47, -47, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_8459A90[] = {
|
||||
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-56, -56, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_8459AA8[] = {
|
||||
gUnknown_8459A48,
|
||||
gUnknown_8459A60,
|
||||
gUnknown_8459A78,
|
||||
gUnknown_8459A90
|
||||
};
|
||||
|
||||
const struct OamData gUnknown_8459AB8 = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_BLEND,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(8x16),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(8x16),
|
||||
.tileNum = 0x000,
|
||||
.priority = 1,
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_8459AC0[] = {
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_8459AC8[] = {
|
||||
gUnknown_8459AC0
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_8459ACC = {
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gUnknown_8459AB8,
|
||||
.anims = gUnknown_8459AC8,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_811E7B4
|
||||
};
|
||||
|
||||
const struct OamData gUnknown_8459AE4 = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(16x16),
|
||||
.tileNum = 0x000,
|
||||
.priority = 1,
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_8459AEC = {
|
||||
.tileTag = 2,
|
||||
.paletteTag = 2,
|
||||
.oam = &gUnknown_8459AE4,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_811E300
|
||||
};
|
||||
|
||||
const struct OamData gUnknown_8459B04 = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.tileNum = 0x000,
|
||||
.priority = 0,
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_8459B0C[] = {
|
||||
ANIMCMD_FRAME(0, 16),
|
||||
ANIMCMD_FRAME(1, 8),
|
||||
ANIMCMD_FRAME(2, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_8459B1C[] = {
|
||||
ANIMCMD_FRAME(1, 4),
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_8459B28[] = {
|
||||
gUnknown_8459B0C,
|
||||
gUnknown_8459B1C
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_8459B30 = {
|
||||
.tileTag = 5,
|
||||
.paletteTag = 5,
|
||||
.oam = &gUnknown_8459B04,
|
||||
.anims = gUnknown_8459B28,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_811E520
|
||||
};
|
||||
|
||||
const u8 *const gUnknown_8459B48[] = {
|
||||
gUnknown_841B2A9,
|
||||
gUnknown_841B2B7,
|
||||
gUnknown_841B2BE,
|
||||
gUnknown_841B2CC,
|
||||
gUnknown_841B2D4,
|
||||
gUnknown_841B2C6
|
||||
};
|
||||
|
||||
void sub_811D184(struct PokemonSpecialAnimScene * buffer, u16 animType)
|
||||
{
|
||||
FreeAllWindowBuffers();
|
||||
@@ -126,18 +381,17 @@ void sub_811D2D0(void)
|
||||
CopyWindowToVram(0, 1);
|
||||
}
|
||||
|
||||
void sub_811D2EC(u8 a0)
|
||||
void sub_811D2EC(u8 messageId)
|
||||
{
|
||||
// a0 --> r5
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8(); // r4
|
||||
u16 itemId = sub_811D0B4(); // r7
|
||||
u16 strWidth = 0; // r8
|
||||
u8 textSpeed = GetTextSpeedSetting(); // r9
|
||||
struct Pokemon * pokemon = sub_811D094(); // r6
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
u16 itemId = sub_811D0B4();
|
||||
u16 strWidth = 0;
|
||||
u8 textSpeed = GetTextSpeedSetting();
|
||||
struct Pokemon * pokemon = sub_811D094();
|
||||
u16 level;
|
||||
u8 *str;
|
||||
|
||||
switch (a0)
|
||||
switch (messageId)
|
||||
{
|
||||
case 0: // Item was used on Mon
|
||||
str = StringCopy(scene->field_0014, ItemId_GetName(itemId));
|
||||
@@ -167,7 +421,7 @@ void sub_811D2EC(u8 a0)
|
||||
strWidth += GetStringWidth(2, gUnknown_841B2ED, -1);
|
||||
// fallthrough
|
||||
case 2: // 1
|
||||
StringCopy(scene->field_0014, gUnknown_8459998[a0 - 2]);
|
||||
StringCopy(scene->field_0014, gUnknown_8459998[messageId - 2]);
|
||||
textSpeed = 1;
|
||||
break;
|
||||
case 5: // Mon forgot move
|
||||
@@ -316,3 +570,431 @@ bool8 sub_811D5C0(void)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_811D6EC(void)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
scene->field_0000 = 0;
|
||||
}
|
||||
|
||||
bool8 sub_811D6FC(void)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
|
||||
switch (scene->field_0000)
|
||||
{
|
||||
case 0:
|
||||
sub_811E10C();
|
||||
PlaySE(SE_MU_PACHI);
|
||||
scene->field_0000++;
|
||||
break;
|
||||
case 1:
|
||||
return sub_811E138();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_811D734(void)
|
||||
{
|
||||
sub_811E5B8(120, 56, 4, 4, 2, 0);
|
||||
}
|
||||
|
||||
bool8 sub_811D754(void)
|
||||
{
|
||||
return sub_811E680();
|
||||
}
|
||||
|
||||
void sub_811D764(u16 *statsBefore, u16 *statsAfter)
|
||||
{
|
||||
DrawTextBorderOuter(1, 0x001, 0xE);
|
||||
DrawLevelUpWindowPg1(1, statsBefore, statsAfter, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(1, 3);
|
||||
}
|
||||
void sub_811D7A0(u16 *currStats)
|
||||
{
|
||||
DrawLevelUpWindowPg2(1, currStats, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
|
||||
CopyWindowToVram(1, 2);
|
||||
}
|
||||
|
||||
bool8 sub_811D7C4(void)
|
||||
{
|
||||
return IsDma3ManagerBusyWithBgCopy();
|
||||
}
|
||||
|
||||
void sub_811D7D4(u16 animType)
|
||||
{
|
||||
CopyToBgTilemapBuffer(3, gUnknown_845973C, 0, 0x000);
|
||||
DecompressAndCopyTileDataToVram(3, gUnknown_845967C, 0, 0x000, 0);
|
||||
if (animType != 4)
|
||||
LoadPalette(gUnknown_845963C, 0x00, 0x20);
|
||||
else
|
||||
LoadPalette(gUnknown_845965C, 0x00, 0x20);
|
||||
}
|
||||
|
||||
void sub_811D830(u8 closeness)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
struct Pokemon * pokemon = sub_811D094();
|
||||
u16 species = GetMonData(pokemon, MON_DATA_SPECIES);
|
||||
u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
|
||||
u8 r1 = sub_812EA78(species, personality, 2);
|
||||
void * r6;
|
||||
void * r9;
|
||||
void * r4;
|
||||
u8 spriteId;
|
||||
|
||||
if (r1 != 0xFF)
|
||||
{
|
||||
scene->field_0006 = 0x48;
|
||||
scene->field_0008 = r1 + 0x30;
|
||||
}
|
||||
else
|
||||
{
|
||||
scene->field_0006 = 0x48;
|
||||
scene->field_0008 = 0x60;
|
||||
}
|
||||
|
||||
r6 = Alloc(0x2000);
|
||||
r9 = Alloc(0x2000);
|
||||
r4 = Alloc(0x100);
|
||||
if (r6 != NULL && r9 != NULL && r4 != NULL)
|
||||
{
|
||||
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], r6, species, personality);
|
||||
LZ77UnCompWram(GetMonFrontSpritePal(pokemon), r4);
|
||||
sub_811DC14(r6, r4);
|
||||
spriteId = CreateSprite(&gUnknown_8459A30, 120, scene->field_0006, 4);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
scene->field_000c = &gSprites[spriteId];
|
||||
sub_811DB14(scene->field_000c, closeness);
|
||||
}
|
||||
else
|
||||
scene->field_000c = NULL;
|
||||
scene->field_000a = closeness;
|
||||
}
|
||||
if (r6 != NULL) Free(r6);
|
||||
if (r9 != NULL) Free(r9);
|
||||
if (r4 != NULL) Free(r4);
|
||||
}
|
||||
|
||||
void sub_811D948(u8 closeness)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
u8 taskId;
|
||||
if (closeness != scene->field_000a)
|
||||
{
|
||||
taskId = CreateTask(sub_811D9BC, 4);
|
||||
SetWordTaskArg(taskId, 6, (uintptr_t)scene->field_000c);
|
||||
gTasks[taskId].data[1] = scene->field_000a;
|
||||
gTasks[taskId].data[2] = closeness;
|
||||
gTasks[taskId].data[5] = 6;
|
||||
if (closeness > scene->field_000a)
|
||||
gTasks[taskId].data[3] = 1;
|
||||
else
|
||||
gTasks[taskId].data[3] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_811D9A8(void)
|
||||
{
|
||||
return FuncIsActiveTask(sub_811D9BC);
|
||||
}
|
||||
|
||||
void sub_811D9BC(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 6);
|
||||
switch (data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_811DA9C(sprite, data[1]);
|
||||
if (data[8])
|
||||
sub_811DA9C((void *)GetWordTaskArg(taskId, 9), data[1]);
|
||||
data[1] += data[3];
|
||||
data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (!sub_811DAAC(sprite))
|
||||
{
|
||||
PlaySE(SE_TB_KARA);
|
||||
sub_811DB14(sprite, data[1]);
|
||||
if (data[8])
|
||||
sub_811DB48((void *)GetWordTaskArg(taskId, 9), data[1]);
|
||||
if (data[1] == data[2])
|
||||
{
|
||||
sub_811D0A8()->field_000a = data[2];
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
data[4] = 0;
|
||||
data[0] = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
data[4]++;
|
||||
if (data[4] > data[5])
|
||||
data[0] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811DA9C(struct Sprite * sprite, u8 closeness)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = closeness;
|
||||
}
|
||||
|
||||
bool8 sub_811DAAC(struct Sprite * sprite)
|
||||
{
|
||||
return sprite->callback != SpriteCallbackDummy;
|
||||
}
|
||||
|
||||
s16 sub_811DAC0(s16 pos, u8 closeness)
|
||||
{
|
||||
return (pos * gUnknown_84599AA[closeness]) >> 8;
|
||||
}
|
||||
|
||||
// FIXME: better math
|
||||
u16 sub_811DADC(u16 pos)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
s32 v = ((((((scene->field_0008 - scene->field_0006) << 16) >> 8) / 256 * (pos - 256)) << 8) >> 16);
|
||||
return v += scene->field_0006;
|
||||
}
|
||||
|
||||
void sub_811DB14(struct Sprite * sprite, u8 closeness)
|
||||
{
|
||||
if (closeness > 3)
|
||||
closeness = 3;
|
||||
sub_811D0A8(); // return value not used
|
||||
StartSpriteAffineAnim(sprite, closeness);
|
||||
sprite->pos1.y = sub_811DADC(gUnknown_84599AA[closeness]);
|
||||
}
|
||||
|
||||
void sub_811DB48(struct Sprite * sprite, u8 closeness)
|
||||
{
|
||||
sub_811DB14(sprite, closeness);
|
||||
sprite->pos2.x = sub_811DAC0(sprite->data[6] - 32, closeness);
|
||||
sprite->pos2.y = sub_811DAC0(sprite->data[7] - 32, closeness);
|
||||
}
|
||||
|
||||
void sub_811DB7C(struct PokemonSpecialAnimScene * scene, u8 a1, u8 a2, u8 a3)
|
||||
{
|
||||
scene->field_000c->data[0] = a1;
|
||||
scene->field_000c->data[1] = a2;
|
||||
scene->field_000c->data[2] = a3;
|
||||
scene->field_000c->callback = sub_811DBBC;
|
||||
}
|
||||
|
||||
void sub_811DBA8(struct PokemonSpecialAnimScene * scene)
|
||||
{
|
||||
scene->field_000c->pos2.x = 0;
|
||||
scene->field_000c->callback = SpriteCallbackDummy;
|
||||
}
|
||||
|
||||
void sub_811DBBC(struct Sprite * sprite)
|
||||
{
|
||||
sprite->data[7]++;
|
||||
if (sprite->data[7] > sprite->data[0])
|
||||
{
|
||||
sprite->data[7] = 0;
|
||||
sprite->data[6]++;
|
||||
if (sprite->data[1] != 0 && sprite->data[6] >= sprite->data[1])
|
||||
{
|
||||
sprite->pos2.x = 0;
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
else if (sprite->data[6] & 1)
|
||||
sprite->pos2.x = sprite->data[2];
|
||||
else
|
||||
sprite->pos2.x = -sprite->data[2];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811DC14(u16 *tiles, u16 *palette)
|
||||
{
|
||||
struct SpriteSheet spriteSheet;
|
||||
struct SpritePalette spritePalette;
|
||||
|
||||
spriteSheet.data = tiles;
|
||||
spriteSheet.size = 0x800;
|
||||
spriteSheet.tag = 0;
|
||||
spritePalette.data = palette;
|
||||
spritePalette.tag = 0;
|
||||
LoadSpriteSheet(&spriteSheet);
|
||||
LoadSpritePalette(&spritePalette);
|
||||
}
|
||||
|
||||
void sub_811DC54(u16 itemId, u8 closeness, bool32 a2)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
u8 taskId;
|
||||
scene->field_0010 = sub_811DD20(itemId);
|
||||
if (scene->field_0010 != NULL)
|
||||
{
|
||||
sub_811E06C(scene, scene->field_0010, closeness);
|
||||
StartSpriteAffineAnim(scene->field_0010, closeness);
|
||||
scene->field_0010->invisible = TRUE;
|
||||
taskId = CreateTask(sub_811DDA4, 2);
|
||||
SetWordTaskArg(taskId, 4, (uintptr_t)scene->field_0010);
|
||||
gTasks[taskId].data[2] = closeness;
|
||||
gTasks[taskId].data[3] = sub_811DADC(gUnknown_84599AA[closeness]);
|
||||
gTasks[taskId].data[6] = a2;
|
||||
gTasks[taskId].data[9] = sub_811DCE8(itemId);
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_811DCE8(u16 itemId)
|
||||
{
|
||||
return RGB_WHITE;
|
||||
}
|
||||
|
||||
void sub_811DCF0(u16 itemId)
|
||||
{
|
||||
struct PokemonSpecialAnimScene * scene = sub_811D0A8();
|
||||
scene->field_0010 = sub_811DD20(itemId);
|
||||
if (scene->field_0010 != NULL)
|
||||
{
|
||||
StartSpriteAffineAnim(scene->field_0010, 3);
|
||||
sub_811E06C(scene, scene->field_0010, 3);
|
||||
}
|
||||
}
|
||||
|
||||
struct Sprite * sub_811DD20(u16 itemId)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite * sprite;
|
||||
spriteId = AddItemIconObject(1, 1, itemId);
|
||||
if (spriteId == MAX_SPRITES)
|
||||
return NULL;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
gSprites[spriteId].oam.priority = 1;
|
||||
gSprites[spriteId].subpriority = 1;
|
||||
gSprites[spriteId].affineAnims = gUnknown_8459A20;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
InitSpriteAffineAnim(&gSprites[spriteId]);
|
||||
return &gSprites[spriteId];
|
||||
}
|
||||
|
||||
bool8 sub_811DD90(void)
|
||||
{
|
||||
return FuncIsActiveTask(sub_811DDA4);
|
||||
}
|
||||
|
||||
void sub_811DDA4(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
struct Sprite * sprite = (void *)GetWordTaskArg(taskId, 4);
|
||||
switch (data[0])
|
||||
{
|
||||
case 0:
|
||||
data[1]++;
|
||||
if (data[1] > 20)
|
||||
{
|
||||
data[1] = 0;
|
||||
PlaySE(SE_W207B);
|
||||
sprite->invisible = FALSE;
|
||||
if (!data[11])
|
||||
sub_811E588();
|
||||
data[0] = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
data[1]++;
|
||||
if (data[1] > 30)
|
||||
{
|
||||
data[1] = 0;
|
||||
sprite->affineAnims = gUnknown_8459AA8;
|
||||
StartSpriteAffineAnim(sprite, data[2]);
|
||||
BeginNormalPaletteFade(0x10000 << IndexOfSpritePaletteTag(1), -2, 0, 12, data[9]);
|
||||
data[0] = 2;
|
||||
PlaySE(SE_W208);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
data[10] = 20;
|
||||
data[0] = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
data[1]++;
|
||||
if (data[1] > data[10])
|
||||
{
|
||||
data[1] = 0;
|
||||
if (!data[11])
|
||||
sub_811DF14(taskId, data, sprite);
|
||||
if (data[7] == 0)
|
||||
PlaySE(SE_W179);
|
||||
data[7]++;
|
||||
if (data[7] > 2)
|
||||
data[0] = 4;
|
||||
else
|
||||
data[10] = 8;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (data[8] == 0)
|
||||
{
|
||||
if (data[6] != 0)
|
||||
DestroySprite(sprite);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811DF14(u8 taskId, s16 *data, struct Sprite * sprite)
|
||||
{
|
||||
int x = sprite->pos1.x + sprite->pos2.x - 4;
|
||||
int y = sprite->pos1.y + sprite->pos2.y - 4;
|
||||
u8 spriteId;
|
||||
int i;
|
||||
BlendPalettes(0x10000 << IndexOfSpritePaletteTag(5), 16, data[9]);
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gUnknown_8459B30, x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].data[1] = i << 4;
|
||||
gSprites[spriteId].data[7] = taskId;
|
||||
gSprites[spriteId].callback = sub_811DFC0;
|
||||
StartSpriteAnim(&gSprites[spriteId], 1);
|
||||
data[8]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811DFC0(struct Sprite * sprite)
|
||||
{
|
||||
s16 *data = sprite->data;
|
||||
if (data[0] < 16)
|
||||
{
|
||||
data[0]++;
|
||||
data[1] += 7;
|
||||
data[1] &= 0xFF;
|
||||
data[2] += 4;
|
||||
sprite->pos2.x = (data[2] * gSineTable[data[1] + 0x40]) >> 8;
|
||||
sprite->pos2.y = (data[2] * gSineTable[data[1]]) >> 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[data[7]].data[8]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811E040(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(sub_811DDA4);
|
||||
if (taskId != 0xFF)
|
||||
{
|
||||
gTasks[taskId].data[11] = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user