mirror of
https://github.com/YohannDR/mzm.git
synced 2024-10-07 02:23:20 +00:00
Full item banner AI
This commit is contained in:
parent
dd513d7849
commit
7e6d1f6bdc
@ -1,6 +1,7 @@
|
|||||||
# Metroid - Zero Mission Decomp
|
# Metroid - Zero Mission Decomp
|
||||||
|
|
||||||
This is a work in progress decompilation of Metroid - Zero Mission.
|
This is a work in progress decompilation of Metroid - Zero Mission.
|
||||||
|
Progress can be seen here : https://docs.google.com/spreadsheets/d/1X8XarD5evY8ZI7r_GQqh1pYmdVMbBcINYfRBUlogmKY/edit#gid=0
|
||||||
|
|
||||||
**It's very likely that the code of this repo doesn't build, and even if it does it probably won't match, this is normal**
|
**It's very likely that the code of this repo doesn't build, and even if it does it probably won't match, this is normal**
|
||||||
|
|
||||||
|
@ -3001,8 +3001,8 @@ lbl_0800407c:
|
|||||||
lbl_08004084:
|
lbl_08004084:
|
||||||
.byte 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00
|
.byte 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00
|
||||||
|
|
||||||
thumb_func_start sub_0800408c
|
thumb_func_start backup_track_data2_sound_channels
|
||||||
sub_0800408c: @ 0x0800408c
|
backup_track_data2_sound_channels: @ 0x0800408c
|
||||||
push {r4, r5, r6, r7, lr}
|
push {r4, r5, r6, r7, lr}
|
||||||
mov r7, sb
|
mov r7, sb
|
||||||
mov r6, r8
|
mov r6, r8
|
||||||
@ -3105,8 +3105,8 @@ lbl_0800413a:
|
|||||||
.align 2, 0
|
.align 2, 0
|
||||||
lbl_0800414c: .4byte 0x030039bc
|
lbl_0800414c: .4byte 0x030039bc
|
||||||
|
|
||||||
thumb_func_start sub_08004150
|
thumb_func_start retrieve_track_data2_sound_channels
|
||||||
sub_08004150: @ 0x08004150
|
retrieve_track_data2_sound_channels: @ 0x08004150
|
||||||
push {r4, r5, r6, r7, lr}
|
push {r4, r5, r6, r7, lr}
|
||||||
mov r7, sb
|
mov r7, sb
|
||||||
mov r6, r8
|
mov r6, r8
|
||||||
|
@ -18738,7 +18738,7 @@ lbl_0801b7b0:
|
|||||||
strh r0, [r1, #4]
|
strh r0, [r1, #4]
|
||||||
ldrb r1, [r1, #0x1f]
|
ldrb r1, [r1, #0x1f]
|
||||||
adds r0, r6, #0
|
adds r0, r6, #0
|
||||||
bl sub_0806f258
|
bl start_message
|
||||||
pop {r4, r5, r6}
|
pop {r4, r5, r6}
|
||||||
pop {r0}
|
pop {r0}
|
||||||
bx r0
|
bx r0
|
||||||
@ -18833,7 +18833,7 @@ lbl_0801b856:
|
|||||||
adds r1, #0x2e
|
adds r1, #0x2e
|
||||||
movs r0, #1
|
movs r0, #1
|
||||||
strb r0, [r1]
|
strb r0, [r1]
|
||||||
bl sub_0800408c
|
bl backup_track_data2_sound_channels
|
||||||
cmp r5, #0xc
|
cmp r5, #0xc
|
||||||
beq lbl_0801b886
|
beq lbl_0801b886
|
||||||
cmp r5, #0xf
|
cmp r5, #0xf
|
||||||
@ -18862,7 +18862,7 @@ lbl_0801b8a8:
|
|||||||
adds r0, #0x2e
|
adds r0, #0x2e
|
||||||
movs r1, #1
|
movs r1, #1
|
||||||
strb r1, [r0]
|
strb r1, [r0]
|
||||||
bl sub_0800408c
|
bl backup_track_data2_sound_channels
|
||||||
movs r0, #0x37
|
movs r0, #0x37
|
||||||
b lbl_0801b8ca
|
b lbl_0801b8ca
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
@ -18891,7 +18891,7 @@ lbl_0801b8d2:
|
|||||||
cmp r5, #6
|
cmp r5, #6
|
||||||
bne lbl_0801b8ec
|
bne lbl_0801b8ec
|
||||||
lbl_0801b8e8:
|
lbl_0801b8e8:
|
||||||
bl sub_0800408c
|
bl backup_track_data2_sound_channels
|
||||||
lbl_0801b8ec:
|
lbl_0801b8ec:
|
||||||
movs r0, #0x3a
|
movs r0, #0x3a
|
||||||
bl play_sound1
|
bl play_sound1
|
||||||
@ -19148,7 +19148,7 @@ lbl_0801bad4:
|
|||||||
cmp r5, #6
|
cmp r5, #6
|
||||||
bne lbl_0801baea
|
bne lbl_0801baea
|
||||||
lbl_0801bae6:
|
lbl_0801bae6:
|
||||||
bl sub_08004150
|
bl retrieve_track_data2_sound_channels
|
||||||
lbl_0801baea:
|
lbl_0801baea:
|
||||||
ldr r1, lbl_0801bb08 @ =0x03001606
|
ldr r1, lbl_0801bb08 @ =0x03001606
|
||||||
movs r0, #0
|
movs r0, #0
|
||||||
@ -19438,7 +19438,7 @@ lbl_0801bd62:
|
|||||||
lbl_0801bd6c: .4byte 0x00000209
|
lbl_0801bd6c: .4byte 0x00000209
|
||||||
lbl_0801bd70: .4byte 0x03000738
|
lbl_0801bd70: .4byte 0x03000738
|
||||||
lbl_0801bd74:
|
lbl_0801bd74:
|
||||||
bl sub_08073ba4
|
bl save_file
|
||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
beq lbl_0801bd80
|
beq lbl_0801bd80
|
||||||
mov r0, r8
|
mov r0, r8
|
||||||
@ -157558,7 +157558,7 @@ lbl_08060afc:
|
|||||||
bl sub_08003f6c
|
bl sub_08003f6c
|
||||||
b lbl_08060b10
|
b lbl_08060b10
|
||||||
lbl_08060b02:
|
lbl_08060b02:
|
||||||
bl sub_08004150
|
bl retrieve_track_data2_sound_channels
|
||||||
b lbl_08060b10
|
b lbl_08060b10
|
||||||
lbl_08060b08:
|
lbl_08060b08:
|
||||||
movs r0, #0xe
|
movs r0, #0xe
|
||||||
@ -186649,8 +186649,8 @@ lbl_0806f24e:
|
|||||||
bx r1
|
bx r1
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
|
|
||||||
thumb_func_start sub_0806f258
|
thumb_func_start start_message
|
||||||
sub_0806f258: @ 0x0806f258
|
start_message: @ 0x0806f258
|
||||||
push {r4, r5, r6, r7, lr}
|
push {r4, r5, r6, r7, lr}
|
||||||
lsls r0, r0, #0x18
|
lsls r0, r0, #0x18
|
||||||
lsrs r0, r0, #0x18
|
lsrs r0, r0, #0x18
|
||||||
@ -196200,8 +196200,8 @@ lbl_08073b9a:
|
|||||||
pop {r1}
|
pop {r1}
|
||||||
bx r1
|
bx r1
|
||||||
|
|
||||||
thumb_func_start sub_08073ba4
|
thumb_func_start save_file
|
||||||
sub_08073ba4: @ 0x08073ba4
|
save_file: @ 0x08073ba4
|
||||||
push {lr}
|
push {lr}
|
||||||
sub sp, #4
|
sub sp, #4
|
||||||
ldr r1, lbl_08073bd4 @ =0x03000043
|
ldr r1, lbl_08073bd4 @ =0x03000043
|
||||||
|
@ -94,7 +94,6 @@
|
|||||||
#include "../src/sprites_AI/black_space_pirate.h"
|
#include "../src/sprites_AI/black_space_pirate.h"
|
||||||
#include "../src/sprites_AI/escape_ship_pirate.h"
|
#include "../src/sprites_AI/escape_ship_pirate.h"
|
||||||
#include "../src/sprites_AI/chozo_ball.h"
|
#include "../src/sprites_AI/chozo_ball.h"
|
||||||
#include "../src/sprites_AI/save_yes_no_cursor.h"
|
|
||||||
#include "../src/sprites_AI/chozo_statue_movement.h"
|
#include "../src/sprites_AI/chozo_statue_movement.h"
|
||||||
|
|
||||||
/* generic_data.c */
|
/* generic_data.c */
|
||||||
|
@ -26,6 +26,7 @@ SECTIONS {
|
|||||||
. = 0x0000003D; gDisableScrolling = .;
|
. = 0x0000003D; gDisableScrolling = .;
|
||||||
. = 0x00000042; gSkipDoorTransition = .;
|
. = 0x00000042; gSkipDoorTransition = .;
|
||||||
. = 0x00000043; gDisableSoftreset = .;
|
. = 0x00000043; gDisableSoftreset = .;
|
||||||
|
. = 0x00000044; gCollectingTank = .;
|
||||||
. = 0x00000049; gDisablePause = .;
|
. = 0x00000049; gDisablePause = .;
|
||||||
. = 0x00000049; gHideHud = .;
|
. = 0x00000049; gHideHud = .;
|
||||||
. = 0x00000054; gCurrentArea = .;
|
. = 0x00000054; gCurrentArea = .;
|
||||||
@ -71,6 +72,7 @@ SECTIONS {
|
|||||||
. = 0x000007F1; gPreviousCollisionCheck = .;
|
. = 0x000007F1; gPreviousCollisionCheck = .;
|
||||||
. = 0x000007F1; gCollisionDebris = .;
|
. = 0x000007F1; gCollisionDebris = .;
|
||||||
. = 0x000007F3; gSpriteDrawOrder = .;
|
. = 0x000007F3; gSpriteDrawOrder = .;
|
||||||
|
. = 0x0000080C; gBossWork = .;
|
||||||
. = 0x0000083C; gSpriteRNG = .;
|
. = 0x0000083C; gSpriteRNG = .;
|
||||||
. = 0x00000840; gParticleEffects = .;
|
. = 0x00000840; gParticleEffects = .;
|
||||||
. = 0x00000918; gCurrentParticleEffectOAMFramePointer = .;
|
. = 0x00000918; gCurrentParticleEffectOAMFramePointer = .;
|
||||||
|
@ -9,7 +9,8 @@ u8 EscapeDetermineTimer(void)
|
|||||||
if (EventFunction(EVENT_ACTION_CHECKING, EVENT_MOTHER_BRAIN_KILLED))
|
if (EventFunction(EVENT_ACTION_CHECKING, EVENT_MOTHER_BRAIN_KILLED))
|
||||||
return ESCAPE_MOTHER_BRAIN;
|
return ESCAPE_MOTHER_BRAIN;
|
||||||
}
|
}
|
||||||
else if (!EventFunction(EVENT_ACTION_CHECKING, EVENT_ESCAPED_CHOZODIA) && EventFunction(EVENT_ACTION_CHECKING, EVENT_MECHA_RIDLEY_KILLED))
|
else if (!EventFunction(EVENT_ACTION_CHECKING, EVENT_ESCAPED_CHOZODIA) &&
|
||||||
|
EventFunction(EVENT_ACTION_CHECKING, EVENT_MECHA_RIDLEY_KILLED))
|
||||||
return ESCAPE_MECHA_RIDLEY;
|
return ESCAPE_MECHA_RIDLEY;
|
||||||
return ESCAPE_NONE;
|
return ESCAPE_NONE;
|
||||||
}
|
}
|
||||||
@ -64,7 +65,7 @@ void EscapeSetTimer(void)
|
|||||||
gEscapeTimerCounter = 0xFF;
|
gEscapeTimerCounter = 0xFF;
|
||||||
if (escape == ESCAPE_MOTHER_BRAIN)
|
if (escape == ESCAPE_MOTHER_BRAIN)
|
||||||
{
|
{
|
||||||
if (gDifficulty == 0x0)
|
if (gDifficulty == DIFF_EASY)
|
||||||
{
|
{
|
||||||
gEscapeTimerDigits.hundredths = 0x0;
|
gEscapeTimerDigits.hundredths = 0x0;
|
||||||
gEscapeTimerDigits.tenths = 0x0;
|
gEscapeTimerDigits.tenths = 0x0;
|
||||||
@ -73,7 +74,7 @@ void EscapeSetTimer(void)
|
|||||||
gEscapeTimerDigits.minutesOnes = 0x3;
|
gEscapeTimerDigits.minutesOnes = 0x3;
|
||||||
gEscapeTimerDigits.minutesTens = 0x0;
|
gEscapeTimerDigits.minutesTens = 0x0;
|
||||||
}
|
}
|
||||||
else if (gDifficulty == 0x2)
|
else if (gDifficulty == DIFF_HARD)
|
||||||
{
|
{
|
||||||
gEscapeTimerDigits.hundredths = 0x0;
|
gEscapeTimerDigits.hundredths = 0x0;
|
||||||
gEscapeTimerDigits.tenths = 0x0;
|
gEscapeTimerDigits.tenths = 0x0;
|
||||||
@ -94,7 +95,7 @@ void EscapeSetTimer(void)
|
|||||||
}
|
}
|
||||||
else if (escape == ESCAPE_MECHA_RIDLEY)
|
else if (escape == ESCAPE_MECHA_RIDLEY)
|
||||||
{
|
{
|
||||||
if (gDifficulty == 0x2)
|
if (gDifficulty == DIFF_HARD)
|
||||||
{
|
{
|
||||||
gEscapeTimerDigits.hundredths = 0x0;
|
gEscapeTimerDigits.hundredths = 0x0;
|
||||||
gEscapeTimerDigits.tenths = 0x0;
|
gEscapeTimerDigits.tenths = 0x0;
|
||||||
|
@ -80,6 +80,7 @@ extern u8 gResetGame;
|
|||||||
extern u8 gDisableScrolling;
|
extern u8 gDisableScrolling;
|
||||||
extern u8 gSkipDoorTransition;
|
extern u8 gSkipDoorTransition;
|
||||||
extern u8 gDisableSoftreset;
|
extern u8 gDisableSoftreset;
|
||||||
|
extern i8 gCollectingTank;
|
||||||
extern u8 gDisablePause;
|
extern u8 gDisablePause;
|
||||||
extern u8 gCurrentArea;
|
extern u8 gCurrentArea;
|
||||||
extern u8 gCurrentRoom;
|
extern u8 gCurrentRoom;
|
||||||
|
@ -101,7 +101,7 @@ u8 LocationTextGetNorfair(void)
|
|||||||
u8 lt;
|
u8 lt;
|
||||||
|
|
||||||
lt = LT_INVALID;
|
lt = LT_INVALID;
|
||||||
switch(gCurrentRoom)
|
switch (gCurrentRoom)
|
||||||
{
|
{
|
||||||
case 0x24: // Save room 1
|
case 0x24: // Save room 1
|
||||||
case 0x27: // Save room 2
|
case 0x27: // Save room 2
|
||||||
@ -132,7 +132,7 @@ u8 LocationTextGetRidley(void)
|
|||||||
u8 lt;
|
u8 lt;
|
||||||
|
|
||||||
lt = LT_INVALID;
|
lt = LT_INVALID;
|
||||||
switch(gCurrentRoom)
|
switch (gCurrentRoom)
|
||||||
{
|
{
|
||||||
case 0x1: // Save room 1
|
case 0x1: // Save room 1
|
||||||
case 0x14: // Save room 2
|
case 0x14: // Save room 2
|
||||||
@ -160,7 +160,7 @@ u8 LocationTextGetChozodia(void)
|
|||||||
u8 lt;
|
u8 lt;
|
||||||
|
|
||||||
lt = LT_INVALID;
|
lt = LT_INVALID;
|
||||||
switch(gCurrentRoom)
|
switch (gCurrentRoom)
|
||||||
{
|
{
|
||||||
case 0x0: // Suitless spawn room
|
case 0x0: // Suitless spawn room
|
||||||
case 0x22: // Crateria passage with missile tank room
|
case 0x22: // Crateria passage with missile tank room
|
||||||
@ -192,7 +192,7 @@ u8 LocationTextGetTourian(void)
|
|||||||
u8 lt;
|
u8 lt;
|
||||||
|
|
||||||
lt = LT_INVALID;
|
lt = LT_INVALID;
|
||||||
switch(gCurrentRoom)
|
switch (gCurrentRoom)
|
||||||
{
|
{
|
||||||
case 0x6: // Save room 1
|
case 0x6: // Save room 1
|
||||||
case 0xB: // Save room 2
|
case 0xB: // Save room 2
|
||||||
|
28
src/sprite.h
28
src/sprite.h
@ -19,6 +19,7 @@ extern u8 gPreviousVerticalCollisionCheck;
|
|||||||
extern u8 gPreviousCollisionCheck;
|
extern u8 gPreviousCollisionCheck;
|
||||||
extern u8 gIgnoreSamusAndSpriteCollision;
|
extern u8 gIgnoreSamusAndSpriteCollision;
|
||||||
extern u8 gSpriteDrawOrder[24];
|
extern u8 gSpriteDrawOrder[24];
|
||||||
|
extern struct BossWork gBossWork;
|
||||||
extern u8 gSpriteRNG;
|
extern u8 gSpriteRNG;
|
||||||
|
|
||||||
// Defines
|
// Defines
|
||||||
@ -449,6 +450,33 @@ struct SpriteData {
|
|||||||
u8 absolutePaletteRow;
|
u8 absolutePaletteRow;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct BossWork {
|
||||||
|
u16 work1; // Usually spawn Y
|
||||||
|
u16 work2; // Usually spawn X
|
||||||
|
u16 work3;
|
||||||
|
u16 work4; // Usually health
|
||||||
|
u16 work5;
|
||||||
|
u16 work6;
|
||||||
|
u16 work7;
|
||||||
|
u16 work8;
|
||||||
|
u16 work9;
|
||||||
|
u16 work10;
|
||||||
|
u16 work11; // Completion percentage, only used by mecha ridley
|
||||||
|
u16 work12;
|
||||||
|
u16 work13;
|
||||||
|
u16 work14;
|
||||||
|
u16 work15;
|
||||||
|
u16 work16;
|
||||||
|
u16 work17;
|
||||||
|
u16 work18;
|
||||||
|
u16 work19;
|
||||||
|
u16 work20;
|
||||||
|
u16 work21;
|
||||||
|
u16 work22;
|
||||||
|
u16 work23;
|
||||||
|
u16 work24;
|
||||||
|
};
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
|
|
||||||
void SpriteUpdate(void);
|
void SpriteUpdate(void);
|
||||||
|
@ -448,6 +448,10 @@ void AreaBannerCheckRemovingAnimEnded(void)
|
|||||||
gCurrentSprite.status = 0x0; // Kill sprite
|
gCurrentSprite.status = 0x0; // Kill sprite
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 3c884 | e0 | Area banner AI
|
||||||
|
*
|
||||||
|
*/
|
||||||
void AreaBanner(void)
|
void AreaBanner(void)
|
||||||
{
|
{
|
||||||
gCurrentSprite.ignoreSamusCollisionTimer = 0x1;
|
gCurrentSprite.ignoreSamusCollisionTimer = 0x1;
|
||||||
|
@ -55,7 +55,7 @@ void AtomicChaseSamus(void)
|
|||||||
|
|
||||||
u8 AtomicElectricityCheckAtomicAlive(u8 slot)
|
u8 AtomicElectricityCheckAtomicAlive(u8 slot)
|
||||||
{
|
{
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomicElectriciytInit(void)
|
void AtomicElectriciytInit(void)
|
||||||
|
@ -2,37 +2,780 @@
|
|||||||
#include "../../data/data.h"
|
#include "../../data/data.h"
|
||||||
#include "../globals.h"
|
#include "../globals.h"
|
||||||
|
|
||||||
|
const u8 sItemBannerGFX[556];
|
||||||
|
const u16 sItemBannerPAL[32];
|
||||||
|
|
||||||
|
const u16 sSaveYesNoCursorOAM_Idle_Frame0[4] = {
|
||||||
|
0x1,
|
||||||
|
0xfc, 0x1fc, OBJ_SPRITE_OAM | 0x21e
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sSaveYesNoCursorOAM_Idle_Frame1[4] = {
|
||||||
|
0x1,
|
||||||
|
0xfc, 0x1fd, OBJ_SPRITE_OAM | 0x21e
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sSaveYesNoCursorOAM_Idle_Frame2[4] = {
|
||||||
|
0x1,
|
||||||
|
0xfc, 0x1fe, OBJ_SPRITE_OAM | 0x21e
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame0[4] = {
|
||||||
|
0x1,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, OBJ_SPRITE_OAM | 0x25c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame1[7] = {
|
||||||
|
0x2,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1e8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x8, OBJ_SPRITE_OAM | 0x25c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame2[13] = {
|
||||||
|
0x4,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1c8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1e8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x28, OBJ_SPRITE_OAM | 0x25c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame3[19] = {
|
||||||
|
0x6,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1a8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1c8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1e8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x28, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x48, OBJ_SPRITE_OAM | 0x25c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame4[25] = {
|
||||||
|
0x8,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x188, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1a8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1c8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1e8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x8, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x28, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x48, OBJ_SPRITE_OAM | 0x25c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x68, OBJ_SPRITE_OAM | 0x25c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame5[49] = {
|
||||||
|
0x10,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21f,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x260,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x264,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x268,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x26c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x270,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x274,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x278,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21f
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame6[49] = {
|
||||||
|
0x10,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x260,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x264,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x268,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x26c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x270,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x274,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x278,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame7[64] = {
|
||||||
|
0x14,
|
||||||
|
0xf6, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x2, 0x188, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21d,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x240,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x244,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x248,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x24c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x250,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x254,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x258,
|
||||||
|
0xf6, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x2, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21d
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame8[61] = {
|
||||||
|
0x14,
|
||||||
|
0xf4, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x4, 0x188, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21d,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x240,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x244,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x248,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x24c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x250,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x254,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x258,
|
||||||
|
0xf4, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x4, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21d
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesSpawn_Frame9[61] = {
|
||||||
|
0x14,
|
||||||
|
0xf2, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x6, 0x188, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21d,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x190, OBJ_SPRITE_OAM | 0x240,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x1b0, OBJ_SPRITE_OAM | 0x244,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x1d0, OBJ_SPRITE_OAM | 0x248,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x1f0, OBJ_SPRITE_OAM | 0x24c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x10, OBJ_SPRITE_OAM | 0x250,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x30, OBJ_SPRITE_OAM | 0x254,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x50, OBJ_SPRITE_OAM | 0x258,
|
||||||
|
0xf2, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x6, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21d
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_TwoLinesStatic_Frame0[31] = {
|
||||||
|
0xa,
|
||||||
|
0xf0, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x8, 0x188, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21d,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
0xf0, OBJ_SIZE_32x32 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
0xf0, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
0x8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x23c,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21d
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_OneLineSpawn_Frame5[25] = {
|
||||||
|
0x8,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x188, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1a8, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1c8, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1e8, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x8, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x28, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x48, OBJ_SPRITE_OAM | 0x27c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, 0x68, OBJ_SPRITE_OAM | 0x27c
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_OneLineSpawn_Frame6[55] = {
|
||||||
|
0x12,
|
||||||
|
0xfa, 0x188, OBJ_SPRITE_OAM | 0x21f,
|
||||||
|
0xfa, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21f,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x260,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x264,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x268,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x26c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x270,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x274,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x278,
|
||||||
|
0xfe, 0x188, OBJ_SPRITE_OAM | 0x23f,
|
||||||
|
0xfe, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x23f
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_OneLineSpawn_Frame7[49] = {
|
||||||
|
0x10,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21f,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x220,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x224,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x228,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x22c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x230,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x234,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x238,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21f
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 sItemBannerOAM_OneLineStatic_Frame0[49] = {
|
||||||
|
0x10,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, 0x188, OBJ_SPRITE_OAM | 0x21c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x200,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x204,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x208,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x20c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x210,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x214,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x218,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x190, OBJ_SPRITE_OAM | 0x220,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1b0, OBJ_SPRITE_OAM | 0x224,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1d0, OBJ_SPRITE_OAM | 0x228,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1f0, OBJ_SPRITE_OAM | 0x22c,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x10, OBJ_SPRITE_OAM | 0x230,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x30, OBJ_SPRITE_OAM | 0x234,
|
||||||
|
OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x50, OBJ_SPRITE_OAM | 0x238,
|
||||||
|
OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | 0x70, OBJ_SPRITE_OAM | 0x21c
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sSaveYesNoCursorOAM_Idle[5] = {
|
||||||
|
sSaveYesNoCursorOAM_Idle_Frame0,
|
||||||
|
0x8,
|
||||||
|
sSaveYesNoCursorOAM_Idle_Frame1,
|
||||||
|
0x4,
|
||||||
|
sSaveYesNoCursorOAM_Idle_Frame2,
|
||||||
|
0x8,
|
||||||
|
sSaveYesNoCursorOAM_Idle_Frame1,
|
||||||
|
0x8,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_TwoLinesSpawn[11] = {
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame0,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame1,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame2,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame3,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame4,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame5,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame6,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame7,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame8,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame9,
|
||||||
|
0x3,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_TwoLinesRemoving[11] = {
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame9,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame8,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame7,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame6,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame5,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame4,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame3,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame2,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame1,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame0,
|
||||||
|
0x1,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_TwoLinesStatic[2] = {
|
||||||
|
sItemBannerOAM_TwoLinesStatic_Frame0,
|
||||||
|
0xFF,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_OneLineSpawn[9] = {
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame0,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame1,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame2,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame3,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame4,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame5,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame6,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame7,
|
||||||
|
0x3,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_OneLineRemoving[9] = {
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame7,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame6,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_OneLineSpawn_Frame5,
|
||||||
|
0x3,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame4,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame3,
|
||||||
|
0x2,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame2,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame1,
|
||||||
|
0x1,
|
||||||
|
sItemBannerOAM_TwoLinesSpawn_Frame0,
|
||||||
|
0x1,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct FrameData sItemBannerOAM_OneLineStatic[2] = {
|
||||||
|
sItemBannerOAM_OneLineStatic_Frame0,
|
||||||
|
0xFF,
|
||||||
|
NULL,
|
||||||
|
0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1b6b8 | 110 | Initializes an item banner sprite
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBannerInit(void)
|
void ItemBannerInit(void)
|
||||||
{
|
{
|
||||||
|
u8 message;
|
||||||
|
u8 gfxSlot;
|
||||||
|
u8 count;
|
||||||
|
|
||||||
|
gPreventMovementTimer = 0x3E8;
|
||||||
|
|
||||||
|
if (!(gCurrentSprite.status & SPRITE_STATUS_ONSCREEN))
|
||||||
|
{
|
||||||
|
gCurrentSprite.status |= SPRITE_STATUS_ONSCREEN;
|
||||||
|
gCurrentSprite.roomSlot = 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
message = gCurrentSprite.roomSlot;
|
||||||
|
gCurrentSprite.status |= SPRITE_STATUS_UNKNOWN;
|
||||||
|
gCurrentSprite.bgPriority = 0x0; // On top of everything
|
||||||
|
gCurrentSprite.samusCollision = SSC_NONE;
|
||||||
|
gCurrentSprite.properties |= (SP_ALWAYS_ACTIVE | SP_ABSOLUTE_POSITION);
|
||||||
|
|
||||||
|
gCurrentSprite.drawDistanceTopOffset = 0x10;
|
||||||
|
gCurrentSprite.drawDistanceBottomOffset = 0x10;
|
||||||
|
gCurrentSprite.drawDistanceHorizontalOffset = 0x80;
|
||||||
|
|
||||||
|
gCurrentSprite.hitboxTopOffset = -0x4;
|
||||||
|
gCurrentSprite.hitboxBottomOffset = 0x4;
|
||||||
|
gCurrentSprite.hitboxLeftOffset = -0x4;
|
||||||
|
gCurrentSprite.hitboxRightOffset = 0x4;
|
||||||
|
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_TwoLinesSpawn;
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
|
||||||
|
gCurrentSprite.yPositionSpawn = 0x9;
|
||||||
|
gCurrentSprite.timer = 0x1;
|
||||||
|
gCurrentSprite.workVariable2 = 0x0;
|
||||||
|
|
||||||
|
// Flag if the message is the save prompt
|
||||||
|
if (message == MESSAGE_SAVE_PROMPT)
|
||||||
|
gCurrentSprite.workVariable = TRUE;
|
||||||
|
else
|
||||||
|
gCurrentSprite.workVariable = FALSE;
|
||||||
|
|
||||||
|
gfxSlot = 0x80; // Default
|
||||||
|
|
||||||
|
// Loop through sprites to try and find if an item banner is in the spriteset
|
||||||
|
for (count = 0x0; count < 0xF; count++)
|
||||||
|
{
|
||||||
|
if (gSpritesetSpritesID[count] == PSPRITE_ITEM_BANNER)
|
||||||
|
{
|
||||||
|
// Found area banner, load the gfx slot
|
||||||
|
gfxSlot = gSpritesetGFXSlots[count];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gfxSlot < 0x8)
|
||||||
|
{
|
||||||
|
// Found in the spriteset, skip gfx init
|
||||||
|
gCurrentSprite.pose = ITEM_BANNER_POSE_POP_UP;
|
||||||
|
gCurrentSprite.spritesetGFXSlot = gfxSlot;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
gCurrentSprite.pose = ITEM_BANNER_POSE_GFX_INIT;
|
||||||
|
|
||||||
|
// Middle of the screen
|
||||||
|
gCurrentSprite.yPosition = 0x36;
|
||||||
|
gCurrentSprite.xPosition = 0x78;
|
||||||
|
|
||||||
|
start_message(message, gCurrentSprite.spritesetGFXSlot); // Undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1b7c8 | 5c | Initializes the GFX for an item banner
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBannerGFXInit(void)
|
void ItemBannerGFXInit(void)
|
||||||
{
|
{
|
||||||
|
gPreventMovementTimer = 0x3E8;
|
||||||
|
|
||||||
|
gCurrentSprite.yPositionSpawn--; // Timer (started at 0x9)
|
||||||
|
if (gCurrentSprite.yPositionSpawn == 0x7)
|
||||||
|
SpriteLoadGFX(PSPRITE_ITEM_BANNER, gCurrentSprite.spritesetGFXSlot); // Load GFX
|
||||||
|
else if (gCurrentSprite.yPositionSpawn == 0x8)
|
||||||
|
SpriteLoadPAL(PSPRITE_ITEM_BANNER, gCurrentSprite.spritesetGFXSlot, 0x1); // Load PAL
|
||||||
|
|
||||||
|
if (gCurrentSprite.yPositionSpawn == 0x0)
|
||||||
|
{
|
||||||
|
// Loading done, set pop up behavior
|
||||||
|
gCurrentSprite.pose = ITEM_BANNER_POSE_POP_UP;
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1b824 | 184 | Handles the pop up animation and the custom behavior based on the current message
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBannerPopUp(void)
|
void ItemBannerPopUp(void)
|
||||||
{
|
{
|
||||||
|
u16 music;
|
||||||
|
u8 message;
|
||||||
|
u8 timer;
|
||||||
|
|
||||||
|
// Work Variable 2 is used as a bool, 1 if getting new item (leading to status screen), 0 otherwise
|
||||||
|
gPreventMovementTimer = 0x3E8;
|
||||||
|
message = gCurrentSprite.roomSlot;
|
||||||
|
if (gCurrentSprite.timer != 0x0)
|
||||||
|
{
|
||||||
|
gCurrentSprite.animationDurationCounter--;
|
||||||
|
if (process_item_banner_text()) // Process text
|
||||||
|
{
|
||||||
|
// If done processing
|
||||||
|
gCurrentSprite.timer = 0x0;
|
||||||
|
gCurrentSprite.status &= ~SPRITE_STATUS_NOT_DRAWN;
|
||||||
|
|
||||||
|
if ((u8)(message - 0x8) < 0xe)
|
||||||
|
{
|
||||||
|
// New item
|
||||||
|
gCurrentSprite.workVariable2 = TRUE;
|
||||||
|
backup_track_data2_sound_channels(); // Undefined
|
||||||
|
if (message == MESSAGE_UKNOWN_ITEM_PLASMA || message == MESSAGE_UNKNOWN_ITEM_GRAVITY
|
||||||
|
|| message == MESSAGE_UNKNOWN_ITEM_SPACE_JUMP)
|
||||||
|
InsertMusicAndQueueCurrent(0x42, 0x0); // Unknown item
|
||||||
|
else
|
||||||
|
InsertMusicAndQueueCurrent(0x37, 0x0);
|
||||||
|
}
|
||||||
|
else if (message == MESSAGE_FIRST_MISSILE_TANK || message == MESSAGE_FIRST_SUPER_MISSILE_TANK
|
||||||
|
|| message == MESSAGE_FIRST_POWER_BOMB_TANK)
|
||||||
|
{
|
||||||
|
// New tank
|
||||||
|
gCurrentSprite.workVariable2 = TRUE;
|
||||||
|
backup_track_data2_sound_channels();
|
||||||
|
InsertMusicAndQueueCurrent(0x37, 0x0);
|
||||||
|
}
|
||||||
|
else if (message == MESSAGE_FULLY_POWERED_SUIT)
|
||||||
|
{
|
||||||
|
MusicPlay(0x19, 0x0);
|
||||||
|
InsertMusicAndQueueCurrent(0x4A, 0x0);
|
||||||
|
}
|
||||||
|
else if (message != MESSAGE_SAVE_PROMPT)
|
||||||
|
{
|
||||||
|
if ((u8)(message - 0x1) <= 0x1 || message == MESSAGE_SUPER_MISSILE_TANK_ACQUIRED
|
||||||
|
|| message == MESSAGE_POWER_BOMB_TANK_ACQUIRED)
|
||||||
|
backup_track_data2_sound_channels();
|
||||||
|
SoundPlay(0x3A);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check is one line message (new item/ability, save complete, map text)
|
||||||
|
if (gCurrentSprite.workVariable2 || message == MESSAGE_SAVE_COMPLETE
|
||||||
|
|| (u8)(message - 0x1B) < 0x6)
|
||||||
|
{
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_OneLineSpawn;
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Text not done
|
||||||
|
if (SpriteUtilCheckEndCurrentSpriteAnim())
|
||||||
|
{
|
||||||
|
// Spawning animation ended
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
gCurrentSprite.pose = ITEM_BANNER_POSE_STATIC;
|
||||||
|
// Set static OAM and timer for how long the banner stays
|
||||||
|
if (gCurrentSprite.pOam == sItemBannerOAM_OneLineSpawn)
|
||||||
|
{
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_OneLineStatic;
|
||||||
|
if (message == MESSAGE_FULLY_POWERED_SUIT)
|
||||||
|
gCurrentSprite.yPositionSpawn = 0x154; // Long because jingle is long
|
||||||
|
else
|
||||||
|
gCurrentSprite.yPositionSpawn = 0x64;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_TwoLinesStatic;
|
||||||
|
gCurrentSprite.yPositionSpawn = 0x64;
|
||||||
|
if (message == MESSAGE_SAVE_PROMPT)
|
||||||
|
{
|
||||||
|
SpriteSpawnSecondary(SSPRITE_SAVE_YES_NO_CURSOR, 0x0, gCurrentSprite.spritesetGFXSlot,
|
||||||
|
gCurrentSprite.primarySpriteRAMSlot, 0x3F, 0x96, 0x0); // Spawn cursor
|
||||||
|
}
|
||||||
|
else if (0x1 >= (u8)(message - 0x21)) // Escape message
|
||||||
|
EscapeStart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1b9a8 | 68 | Handles the item banner being static
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBannerStatic(void)
|
void ItemBannerStatic(void)
|
||||||
{
|
{
|
||||||
|
u8 message;
|
||||||
|
|
||||||
|
message = gCurrentSprite.roomSlot;
|
||||||
|
if (message == MESSAGE_FULLY_POWERED_SUIT)
|
||||||
|
gPreventMovementTimer = 0x0;
|
||||||
|
else
|
||||||
|
gPreventMovementTimer = 0x3E8;
|
||||||
|
|
||||||
|
// Timer
|
||||||
|
if (gCurrentSprite.yPositionSpawn != 0x0)
|
||||||
|
gCurrentSprite.yPositionSpawn--;
|
||||||
|
// Check if should remove (input or demo active, ignore for save prompt)
|
||||||
|
else if (message != MESSAGE_SAVE_PROMPT &&
|
||||||
|
(gButtonInput & (KEY_A | KEY_B | KEY_RIGHT | KEY_LEFT | KEY_UP | KEY_DOWN) || gDemoState != 0x0))
|
||||||
|
gCurrentSprite.pose = ITEM_BANNER_POSE_REMOVAL_INIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemBannerRemoval(void)
|
/**
|
||||||
|
* @brief 1ba10 | 50 | Initializes the item banner to be removing
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void ItemBannerRemovalInit(void)
|
||||||
{
|
{
|
||||||
|
if (gCollectingTank)
|
||||||
|
BGClipFinishCollectingTank();
|
||||||
|
if (gCurrentSprite.pOam == sItemBannerOAM_OneLineStatic)
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_OneLineRemoving;
|
||||||
|
else
|
||||||
|
gCurrentSprite.pOam = sItemBannerOAM_TwoLinesRemoving;
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
gCurrentSprite.pose = 0x25;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1ba60 | b4 | Handles behavior during the removal animation
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBannerRemovalAnimation(void)
|
void ItemBannerRemovalAnimation(void)
|
||||||
{
|
{
|
||||||
|
u8 message;
|
||||||
|
|
||||||
|
message = gCurrentSprite.roomSlot;
|
||||||
|
if (SpriteUtilCheckEndCurrentSpriteAnim())
|
||||||
|
{
|
||||||
|
gCurrentSprite.status = 0x0;
|
||||||
|
if (message == MESSAGE_SAVE_COMPLETE)
|
||||||
|
gDisablePause = FALSE; // Re-enable pause
|
||||||
|
else if (message == MESSAGE_FULLY_POWERED_SUIT)
|
||||||
|
{
|
||||||
|
gSubSpriteData1.workVariable1 = 0x7; // Start suit animation
|
||||||
|
// Spawn chozo pillar
|
||||||
|
SpriteLoadGFX(PSPRITE_FALLING_CHOZO_PILLAR, 0x7);
|
||||||
|
SpriteLoadPAL(PSPRITE_FALLING_CHOZO_PILLAR, 0x7, 0x1);
|
||||||
|
SpriteSpawnPrimary(PSPRITE_FALLING_CHOZO_PILLAR, 0x0, 0x7, gBossWork.work1 - 0x100, gBossWork.work2 + 0x300, 0x0);
|
||||||
|
}
|
||||||
|
// Check replay sounds
|
||||||
|
else if ((u8)(message - 0x1) < MESSAGE_MISSILE_TANK_ACQUIRED || message == MESSAGE_SUPER_MISSILE_TANK_ACQUIRED || message == MESSAGE_POWER_BOMB_TANK_ACQUIRED)
|
||||||
|
retrieve_track_data2_sound_channels(); // Undefined
|
||||||
|
|
||||||
|
gPreventMovementTimer = 0x0;
|
||||||
|
if (gCurrentSprite.workVariable2)
|
||||||
|
gPauseScreenFlag = PAUSE_SCREEN_ITEM_ACQUISITION;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1bb14 | e8 | Item banner AI
|
||||||
|
*
|
||||||
|
*/
|
||||||
void ItemBanner(void)
|
void ItemBanner(void)
|
||||||
{
|
{
|
||||||
|
gCurrentSprite.ignoreSamusCollisionTimer = 0x1;
|
||||||
|
switch (gCurrentSprite.pose)
|
||||||
|
{
|
||||||
|
case 0x0:
|
||||||
|
ItemBannerInit();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ITEM_BANNER_POSE_GFX_INIT:
|
||||||
|
ItemBannerGFXInit();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ITEM_BANNER_POSE_POP_UP:
|
||||||
|
ItemBannerPopUp();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ITEM_BANNER_POSE_STATIC:
|
||||||
|
ItemBannerStatic();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ITEM_BANNER_POSE_REMOVAL_INIT:
|
||||||
|
ItemBannerRemovalInit();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ITEM_BANNER_POSE_REMOVAL_ANIMATION:
|
||||||
|
ItemBannerRemovalAnimation();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 1bbfc | 190 | Save yes no cursor AI
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void SaveYesNoCursor(void)
|
||||||
|
{
|
||||||
|
u8 ramSlot;
|
||||||
|
|
||||||
|
gCurrentSprite.ignoreSamusCollisionTimer = 0x1;
|
||||||
|
ramSlot = gCurrentSprite.primarySpriteRAMSlot;
|
||||||
|
|
||||||
|
switch (gCurrentSprite.pose)
|
||||||
|
{
|
||||||
|
case 0x0:
|
||||||
|
gCurrentSprite.status |= SPRITE_STATUS_UNKNOWN;
|
||||||
|
gCurrentSprite.status &= ~SPRITE_STATUS_NOT_DRAWN;
|
||||||
|
|
||||||
|
gCurrentSprite.bgPriority = 0x0;
|
||||||
|
gCurrentSprite.drawOrder = 0x3;
|
||||||
|
gCurrentSprite.samusCollision = SSC_NONE;
|
||||||
|
gCurrentSprite.properties |= (SP_ALWAYS_ACTIVE | SP_ABSOLUTE_POSITION);
|
||||||
|
|
||||||
|
gCurrentSprite.drawDistanceTopOffset = 0x10;
|
||||||
|
gCurrentSprite.drawDistanceBottomOffset = 0x10;
|
||||||
|
gCurrentSprite.drawDistanceHorizontalOffset = 0x10;
|
||||||
|
|
||||||
|
gCurrentSprite.hitboxTopOffset = -0x4;
|
||||||
|
gCurrentSprite.hitboxBottomOffset = 0x4;
|
||||||
|
gCurrentSprite.hitboxLeftOffset = -0x4;
|
||||||
|
gCurrentSprite.hitboxRightOffset = 0x4;
|
||||||
|
|
||||||
|
gCurrentSprite.pOam = sSaveYesNoCursorOAM_Idle;
|
||||||
|
gCurrentSprite.animationDurationCounter = 0x0;
|
||||||
|
gCurrentSprite.currentAnimationFrame = 0x0;
|
||||||
|
|
||||||
|
gCurrentSprite.pose = 0x9;
|
||||||
|
gCurrentSprite.yPosition = 0x3F;
|
||||||
|
|
||||||
|
if (gSpriteData[ramSlot].roomSlot == MESSAGE_SAVE_PROMPT)
|
||||||
|
gCurrentSprite.xPosition = SAVE_YES_NO_CURSOR_LEFT_POSITION;
|
||||||
|
else
|
||||||
|
gCurrentSprite.xPosition = SAVE_YES_NO_CURSOR_RIGHT_POSITION;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SAVE_YES_NO_CURSOR_POSE_INPUT:
|
||||||
|
if (gChangedInput & KEY_LEFT)
|
||||||
|
{
|
||||||
|
// Check not already on left
|
||||||
|
if (gCurrentSprite.xPosition != SAVE_YES_NO_CURSOR_LEFT_POSITION)
|
||||||
|
{
|
||||||
|
SoundPlay(0x207);
|
||||||
|
gCurrentSprite.xPosition = SAVE_YES_NO_CURSOR_LEFT_POSITION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gChangedInput & KEY_RIGHT)
|
||||||
|
{
|
||||||
|
// Check not already on right
|
||||||
|
if (gCurrentSprite.xPosition != SAVE_YES_NO_CURSOR_RIGHT_POSITION)
|
||||||
|
{
|
||||||
|
SoundPlay(0x207);
|
||||||
|
gCurrentSprite.xPosition = SAVE_YES_NO_CURSOR_RIGHT_POSITION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gChangedInput & KEY_A)
|
||||||
|
{
|
||||||
|
gSpriteData[ramSlot].pose = ITEM_BANNER_POSE_REMOVAL_INIT;
|
||||||
|
if (gCurrentSprite.xPosition == SAVE_YES_NO_CURSOR_LEFT_POSITION)
|
||||||
|
{
|
||||||
|
// On left, "yes" option selected
|
||||||
|
SoundPlay(0x208);
|
||||||
|
gSpriteData[ramSlot].workVariable = 0x1;
|
||||||
|
if (gSpriteData[ramSlot].roomSlot == MESSAGE_SAVE_PROMPT)
|
||||||
|
{
|
||||||
|
gCurrentSprite.pose = SAVE_YES_NO_CURSOR_POSE_SAVING;
|
||||||
|
gCurrentSprite.status |= SPRITE_STATUS_NOT_DRAWN;
|
||||||
|
gDisablePause = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// On right, "no" option selected
|
||||||
|
SoundPlay(0x209);
|
||||||
|
gSpriteData[ramSlot].workVariable = 0x0;
|
||||||
|
}
|
||||||
|
gCurrentSprite.status = 0x0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SAVE_YES_NO_CURSOR_POSE_SAVING:
|
||||||
|
if (save_file()) // Undefined
|
||||||
|
gCurrentSprite.status = 0x0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,70 @@
|
|||||||
|
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
|
|
||||||
|
// Item banner
|
||||||
|
|
||||||
|
#define ITEM_BANNER_POSE_GFX_INIT 0x8
|
||||||
|
#define ITEM_BANNER_POSE_POP_UP 0x9
|
||||||
|
#define ITEM_BANNER_POSE_STATIC 0x23
|
||||||
|
#define ITEM_BANNER_POSE_REMOVAL_INIT 0x24
|
||||||
|
#define ITEM_BANNER_POSE_REMOVAL_ANIMATION 0x25
|
||||||
|
|
||||||
|
// Save yes no cursor
|
||||||
|
|
||||||
|
#define SAVE_YES_NO_CURSOR_POSE_INPUT 0x9
|
||||||
|
#define SAVE_YES_NO_CURSOR_POSE_SAVING 0x43
|
||||||
|
|
||||||
|
#define SAVE_YES_NO_CURSOR_LEFT_POSITION 0x36
|
||||||
|
#define SAVE_YES_NO_CURSOR_RIGHT_POSITION 0x96
|
||||||
|
|
||||||
|
// Temporary place
|
||||||
|
#define MESSAGE_DUMMY 0x0
|
||||||
|
#define MESSAGE_ENERGY_TANK_ACQUIRED 0x1
|
||||||
|
#define MESSAGE_MISSILE_TANK_ACQUIRED 0x2
|
||||||
|
#define MESSAGE_FIRST_MISSILE_TANK 0x3
|
||||||
|
#define MESSAGE_SUPER_MISSILE_TANK_ACQUIRED 0x4
|
||||||
|
#define MESSAGE_FIRST_SUPER_MISSILE_TANK 0x5
|
||||||
|
#define MESSAGE_POWER_BOMB_TANK_ACQUIRED 0x6
|
||||||
|
#define MESSAGE_FIRST_POWER_BOMB_TANK 0x7
|
||||||
|
#define MESSAGE_LONG_BEAM 0x8
|
||||||
|
#define MESSAGE_CHARGE_BEAM 0x9
|
||||||
|
#define MESSAGE_ICE_BEAM 0xA
|
||||||
|
#define MESSAGE_WAVE_BEAM 0xB
|
||||||
|
#define MESSAGE_UKNOWN_ITEM_PLASMA 0xC
|
||||||
|
#define MESSAGE_BOMB 0xD
|
||||||
|
#define MESSAGE_VARIA_SUIT 0xE
|
||||||
|
#define MESSAGE_UNKNOWN_ITEM_GRAVITY 0xF
|
||||||
|
#define MESSAGE_MORPH_BALL 0x10
|
||||||
|
#define MESSAGE_SPEED_BOOSTER 0x11
|
||||||
|
#define MESSAGE_HIGH_JUMP 0x12
|
||||||
|
#define MESSAGE_SCREW_ATTACK 0x13
|
||||||
|
#define MESSAGE_UNKNOWN_ITEM_SPACE_JUMP 0x14
|
||||||
|
#define MESSAGE_POWER_GRIP 0x15
|
||||||
|
#define MESSAGE_SAVE_PROMPT 0x16
|
||||||
|
#define MESSAGE_SAVE_COMPLETE 0x17
|
||||||
|
#define MESSAGE_WEAPON_RESUPPLY_COMPLETE 0x18
|
||||||
|
#define MESSAGE_ENERGY_TANK_RECHARGE_COMPLETE 0x19
|
||||||
|
#define MESSAGE_WEAPONS_AND_ENERGY_RESTORED 0x1A
|
||||||
|
#define MESSAGE_BRINSTAR_MAP_ACQUIRED 0x1B
|
||||||
|
#define MESSAGE_KRAID_MAP_ACQUIRED 0x1C
|
||||||
|
#define MESSAGE_NORFAIR_MAP_ACQUIRED 0x1D
|
||||||
|
#define MESSAGE_RIDLEY_MAP_ACQUIRED 0x1E
|
||||||
|
#define MESSAGE_MOTHER_SHIP_MAP_ACQUIRED 0x1F
|
||||||
|
#define MESSAGE_FULLY_POWERED_SUIT 0x20
|
||||||
|
#define MESSAGE_ZEBES_ESCAPE 0x21
|
||||||
|
#define MESSAGE_CHOZODIA_ESCAPE 0x22
|
||||||
|
#define MESSAGE_ENEMY_LOCATION_ABNORMAL 0x23
|
||||||
|
#define MESSAGE_ACTIVATE_EASY_SLEEP 0x24
|
||||||
|
#define MESSAGE_PRESS_SELECT_L_AND_R 0x25
|
||||||
|
#define MESSAGE_EASY_SLEEP_PROMPT 0x26
|
||||||
|
|
||||||
void ItemBannerInit(void);
|
void ItemBannerInit(void);
|
||||||
void ItemBannerGFXInit(void);
|
void ItemBannerGFXInit(void);
|
||||||
void ItemBannerPopUp(void);
|
void ItemBannerPopUp(void);
|
||||||
void ItemBannerStatic(void);
|
void ItemBannerStatic(void);
|
||||||
void ItemBannerRemoval(void);
|
void ItemBannerRemovalInit(void);
|
||||||
void ItemBannerRemovalAnimation(void);
|
void ItemBannerRemovalAnimation(void);
|
||||||
void ItemBanner(void);
|
void ItemBanner(void);
|
||||||
|
void SaveYesNoCursor(void);
|
||||||
|
|
||||||
#endif /* ITEM_BANNER_AI_H* */
|
#endif /* ITEM_BANNER_AI_H* */
|
@ -1,8 +0,0 @@
|
|||||||
#include "primary_sprite_B3.h"
|
|
||||||
#include "../../data/data.h"
|
|
||||||
#include "../globals.h"
|
|
||||||
|
|
||||||
void SaveYesNoCursor(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
#ifndef SAVE_YES_NO_CURSOR_AI_H
|
|
||||||
#define SAVE_YES_NO_CURSOR_AI_H
|
|
||||||
|
|
||||||
#include "../types.h"
|
|
||||||
|
|
||||||
void SaveYesNoCursor(void);
|
|
||||||
|
|
||||||
#endif /* SAVE_YES_NO_CURSOR_AI_H */
|
|
Loading…
Reference in New Issue
Block a user