mirror of
https://github.com/YohannDR/mzm.git
synced 2024-10-06 18:13:20 +00:00
Match kraid, improve a few functions
This commit is contained in:
parent
b57868f77a
commit
de305c3ed5
@ -2,7 +2,7 @@
|
||||
|
||||
This is a work in progress decompilation of Metroid - Zero Mission.
|
||||
|
||||
2703/2721 functions decompiled (99.34%, 18 left)
|
||||
2704/2721 functions decompiled (99.38%, 17 left)
|
||||
|
||||
0x76b014/0x76b014 bytes of data not in blobs (100%, 0 left)
|
||||
|
||||
|
@ -48,6 +48,8 @@ struct FrameData {
|
||||
.timer = 0\
|
||||
}
|
||||
|
||||
#define FRAME_DATA_LAST_ANIM_FRAME(oam) (ARRAY_SIZE((oam)) - 2)
|
||||
|
||||
union OamData {
|
||||
struct {
|
||||
/*0x00*/ u32 y:8;
|
||||
|
@ -7,7 +7,7 @@
|
||||
#define BOSS_STATUE_POSE_OPENING 0xB
|
||||
#define BOSS_STATUE_POSE_IDLE 0xF
|
||||
|
||||
void BossStatueVerticalLignChangeCcaa(u8 caa);
|
||||
void BossStatusSetWallBehindSamusCollision(u8 caa);
|
||||
void KraidStatueHorizontalLignThreeChangeCcaa(u8 caa);
|
||||
void KraidStatueInsideChangeCcaa(u8 caa);
|
||||
void KraidStatueOpenedInit(void);
|
||||
|
@ -929,7 +929,6 @@ void CutsceneUpdateSpecialEffect(void)
|
||||
void CutsceneStartSpriteEffect(u16 bldcnt, u8 bldy, u32 interval, u8 intensity)
|
||||
{
|
||||
u8 _interval;
|
||||
u8* ptr;
|
||||
|
||||
CUTSCENE_DATA.specialEffect.status &= ~CUTSCENE_SPECIAL_EFFECT_STATUS_SPRITE_ENDED;
|
||||
CUTSCENE_DATA.specialEffect.status |= CUTSCENE_SPECIAL_EFFECT_STATUS_ON_SPRITE;
|
||||
@ -937,11 +936,12 @@ void CutsceneStartSpriteEffect(u16 bldcnt, u8 bldy, u32 interval, u8 intensity)
|
||||
CUTSCENE_DATA.specialEffect.s_WrittenToBLDY = bldy;
|
||||
CUTSCENE_DATA.specialEffect.s_Intensity = intensity;
|
||||
|
||||
// The following code is written like that to produce matching ASM:
|
||||
ptr = &CUTSCENE_DATA.specialEffect.s_Interval;
|
||||
_interval = interval;
|
||||
*ptr = _interval;
|
||||
if (CUTSCENE_DATA.specialEffect.s_Interval)
|
||||
{
|
||||
}
|
||||
|
||||
_interval = interval;
|
||||
CUTSCENE_DATA.specialEffect.s_Interval = _interval;
|
||||
CUTSCENE_DATA.specialEffect.s_Timer = _interval;
|
||||
|
||||
CUTSCENE_DATA.bldcnt = CUTSCENE_DATA.specialEffect.s_Bldcnt = bldcnt;
|
||||
@ -959,7 +959,6 @@ void CutsceneStartSpriteEffect(u16 bldcnt, u8 bldy, u32 interval, u8 intensity)
|
||||
void CutsceneStartBackgroundEffect(u16 bldcnt, u8 bldalphaL, u8 bldalphaH, u32 interval, u8 intensity)
|
||||
{
|
||||
u8 _interval;
|
||||
u8* ptr;
|
||||
|
||||
CUTSCENE_DATA.specialEffect.status &= ~CUTSCENE_SPECIAL_EFFECT_STATUS_BG_ENDED;
|
||||
CUTSCENE_DATA.specialEffect.status |= CUTSCENE_SPECIAL_EFFECT_STATUS_ON_BG;
|
||||
@ -968,11 +967,12 @@ void CutsceneStartBackgroundEffect(u16 bldcnt, u8 bldalphaL, u8 bldalphaH, u32 i
|
||||
CUTSCENE_DATA.specialEffect.bg_WrittenToBldalpha_H = bldalphaH;
|
||||
CUTSCENE_DATA.specialEffect.bg_Intensity = intensity;
|
||||
|
||||
// The following code is written like that to produce matching ASM:
|
||||
ptr = &CUTSCENE_DATA.specialEffect.bg_Interval;
|
||||
_interval = interval;
|
||||
*ptr = _interval;
|
||||
if (CUTSCENE_DATA.specialEffect.bg_Interval)
|
||||
{
|
||||
}
|
||||
|
||||
_interval = interval;
|
||||
CUTSCENE_DATA.specialEffect.bg_Interval = _interval;
|
||||
CUTSCENE_DATA.specialEffect.bg_Timer = _interval;
|
||||
|
||||
CUTSCENE_DATA.specialEffect.bg_WrittenToBLDCNT = bldcnt;
|
||||
|
@ -43,26 +43,26 @@
|
||||
u32 unk_68168(u16 param_1, u8 param_2, s8 param_3)
|
||||
{
|
||||
s32 _param_3 = param_3;
|
||||
u32 _uselessVarForMatching = !sNonGameplayRamPointer;
|
||||
|
||||
if (!PAUSE_SCREEN_DATA.unk_7C && param_2 != 0)
|
||||
{
|
||||
if (PAUSE_SCREEN_DATA.unk_7C)
|
||||
return FALSE;
|
||||
|
||||
if (param_2 == 0)
|
||||
return FALSE;
|
||||
|
||||
PAUSE_SCREEN_DATA.unk_7C++;
|
||||
|
||||
PAUSE_SCREEN_DATA.unk_7D = param_2;
|
||||
PAUSE_SCREEN_DATA.unk_7F = _param_3;
|
||||
|
||||
PAUSE_SCREEN_DATA.unk_80 = 0x1F & param_1;
|
||||
PAUSE_SCREEN_DATA.unk_81 = _uselessVarForMatching = (param_1 >> 8) & 0x1F;
|
||||
PAUSE_SCREEN_DATA.unk_80 = param_1 & 0x1F;
|
||||
PAUSE_SCREEN_DATA.unk_81 = (param_1 >> 8) & 0x1F;
|
||||
|
||||
PAUSE_SCREEN_DATA.unk_7E = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 681c8 | 124 | To document
|
||||
*
|
||||
|
@ -993,15 +993,11 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay)
|
||||
u16 xPosition;
|
||||
u16 yPosition;
|
||||
u16 movement;
|
||||
u16 diagMovement;
|
||||
u32 tmp1;
|
||||
u32 tmp2;
|
||||
|
||||
if (gFrameCounter8Bit & delay)
|
||||
return;
|
||||
|
||||
movement = HALF_BLOCK_SIZE;
|
||||
diagMovement = QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE;
|
||||
|
||||
yPosition = pProj->yPosition;
|
||||
xPosition = pProj->xPosition;
|
||||
@ -1017,25 +1013,21 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay)
|
||||
break;
|
||||
|
||||
case ACD_DIAGONALLY_UP:
|
||||
tmp1 = BLOCK_SIZE;
|
||||
yPosition += diagMovement;
|
||||
yPosition += FRACT_MUL(movement, 3, 4);
|
||||
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
xPosition -= diagMovement;
|
||||
xPosition -= FRACT_MUL(movement, 3, 4);
|
||||
else
|
||||
xPosition += diagMovement;
|
||||
movement = tmp1;
|
||||
xPosition += FRACT_MUL(movement, 3, 4);
|
||||
break;
|
||||
|
||||
case ACD_DIAGONALLY_DOWN:
|
||||
tmp2 = BLOCK_SIZE;
|
||||
yPosition -= diagMovement;
|
||||
yPosition -= FRACT_MUL(movement, 3, 4);
|
||||
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
xPosition -= diagMovement;
|
||||
xPosition -= FRACT_MUL(movement, 3, 4);
|
||||
else
|
||||
xPosition += diagMovement;
|
||||
movement = tmp2;
|
||||
xPosition += FRACT_MUL(movement, 3, 4);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1062,7 +1054,7 @@ void ProjectileMoveTumbling(struct ProjectileData* pProj)
|
||||
|
||||
if (!(pProj->status & PROJ_STATUS_ON_SCREEN))
|
||||
{
|
||||
pProj->status = 0x0;
|
||||
pProj->status = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -107,7 +107,7 @@ s32 ScreenShakeUpdateVertical(void)
|
||||
|
||||
gScreenShakeY.direction ^= TRUE;
|
||||
if (gScreenShakeY.timer < 16)
|
||||
offset >>= 1;
|
||||
offset = DIV_SHIFT(offset, 2);
|
||||
|
||||
gScreenShakeYOffset = offset;
|
||||
|
||||
@ -153,7 +153,7 @@ s32 ScreenShakeUpdateHorizontal(void)
|
||||
|
||||
gScreenShakeX.direction ^= TRUE;
|
||||
if (gScreenShakeX.timer < 16)
|
||||
offset >>= 1;
|
||||
offset = DIV_SHIFT(offset, 2);
|
||||
|
||||
gScreenShakeXOffset = offset;
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "structs/sprite.h"
|
||||
|
||||
#define JUMPING_X_VELOCITY (PIXEL_SIZE * 2 + PIXEL_SIZE / 2)
|
||||
#define WALKING_SPEED (ONE_SUB_PIXEL * 3)
|
||||
|
||||
/**
|
||||
* @brief 47600 | 20 | Checks if samus is near the baristute (8 blocks range on each side)
|
||||
@ -102,10 +103,11 @@ void BaristuteCheckBeforeJumpingAnimEnded(void)
|
||||
xPosition = gCurrentSprite.xPosition;
|
||||
|
||||
// Check if there's still ground under the baristute
|
||||
if (SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxRightOffset) == COLLISION_AIR
|
||||
&& SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxLeftOffset) == COLLISION_AIR)
|
||||
if (SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxRightOffset) == COLLISION_AIR &&
|
||||
SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxLeftOffset) == COLLISION_AIR)
|
||||
{
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_FALLING_INIT; // Set falling
|
||||
// Set falling
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_FALLING_INIT;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -130,7 +132,7 @@ void BaristuteCheckBeforeJumpingAnimEnded(void)
|
||||
void BaristuteJumping(void)
|
||||
{
|
||||
s32 movement;
|
||||
u32 topEdge;
|
||||
u32 blockTop;
|
||||
|
||||
movement = sBaristuteJumpingYVelocity[gCurrentSprite.work3 / 4];
|
||||
|
||||
@ -174,13 +176,13 @@ void BaristuteJumping(void)
|
||||
if (gCurrentSprite.work3 < ARRAY_SIZE(sBaristuteJumpingYVelocity) * 4 - 1)
|
||||
gCurrentSprite.work3++;
|
||||
|
||||
if (movement >= 1)
|
||||
if (movement > 0)
|
||||
{
|
||||
// Check landing if velocity is positive
|
||||
topEdge = SpriteUtilCheckVerticalCollisionAtPositionSlopes(gCurrentSprite.yPosition, gCurrentSprite.xPosition);
|
||||
blockTop = SpriteUtilCheckVerticalCollisionAtPositionSlopes(gCurrentSprite.yPosition, gCurrentSprite.xPosition);
|
||||
if (gPreviousVerticalCollisionCheck != COLLISION_AIR)
|
||||
{
|
||||
gCurrentSprite.yPosition = topEdge;
|
||||
gCurrentSprite.yPosition = blockTop;
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_LANDING_INIT;
|
||||
}
|
||||
}
|
||||
@ -234,6 +236,7 @@ void BaristuteIdleInit(void)
|
||||
gCurrentSprite.animationDurationCounter = 0;
|
||||
gCurrentSprite.currentAnimationFrame = 0;
|
||||
|
||||
// Random variable to determine behavior after being idle
|
||||
gCurrentSprite.work1 = MOD_AND(gSpriteRng, 4);
|
||||
}
|
||||
|
||||
@ -249,39 +252,47 @@ void BaristuteIdle(void)
|
||||
yPosition = gCurrentSprite.yPosition;
|
||||
xPosition = gCurrentSprite.xPosition;
|
||||
|
||||
if (SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxRightOffset) == COLLISION_AIR
|
||||
&& SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxLeftOffset) == COLLISION_AIR)
|
||||
// Check if there's still ground under the baristute
|
||||
if (SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxRightOffset) == COLLISION_AIR &&
|
||||
SpriteUtilGetCollisionAtPosition(yPosition, xPosition + gCurrentSprite.hitboxLeftOffset) == COLLISION_AIR)
|
||||
{
|
||||
// Set falling
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_FALLING_INIT;
|
||||
return;
|
||||
}
|
||||
|
||||
// Wait for the idle animatio to end
|
||||
if (!SpriteUtilCheckNearEndCurrentSpriteAnim())
|
||||
return;
|
||||
|
||||
// Face samus
|
||||
SpriteUtilMakeSpriteFaceSamusDirection();
|
||||
if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT)
|
||||
gCurrentSprite.status |= SPRITE_STATUS_XFLIP;
|
||||
else
|
||||
gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP;
|
||||
|
||||
// Check should walk or jump, get the collision in front of the baristute
|
||||
if ((gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT
|
||||
? SpriteUtilGetCollisionAtPosition(yPosition - QUARTER_BLOCK_SIZE, xPosition + gCurrentSprite.hitboxRightOffset + QUARTER_BLOCK_SIZE)
|
||||
: SpriteUtilGetCollisionAtPosition(yPosition - QUARTER_BLOCK_SIZE, xPosition + gCurrentSprite.hitboxLeftOffset - QUARTER_BLOCK_SIZE)) == COLLISION_AIR)
|
||||
{
|
||||
if (gCurrentSprite.spriteId == PSPRITE_BARISTUTE_KRAID_UPPER)
|
||||
{
|
||||
// The upper kraid baristute can't jump, so always walk
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_WALKING_INIT;
|
||||
}
|
||||
else if (gCurrentSprite.spriteId != PSPRITE_BARISTUTE_KRAID_LOWER)
|
||||
else if (gCurrentSprite.spriteId == PSPRITE_BARISTUTE_KRAID_LOWER)
|
||||
{
|
||||
if (gCurrentSprite.work1 > 1)
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_WALKING_INIT;
|
||||
else
|
||||
// The upper kraid baristute can't walk, so always jump
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_JUMP_WARNING_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Is a normal baristute, so have random behavior, 50/50 to either wlak or jump
|
||||
if (gCurrentSprite.work1 >= 2)
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_WALKING_INIT;
|
||||
else
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_JUMP_WARNING_INIT;
|
||||
}
|
||||
}
|
||||
@ -306,22 +317,22 @@ void BaristuteWalkingInit(void)
|
||||
if (paletteRow == 1)
|
||||
{
|
||||
gCurrentSprite.pOam = sBaristuteOam_WalkingFast;
|
||||
gCurrentSprite.work2 = PIXEL_SIZE + PIXEL_SIZE / 2;
|
||||
gCurrentSprite.work2 = WALKING_SPEED * 2;
|
||||
}
|
||||
else if (paletteRow == 2)
|
||||
{
|
||||
gCurrentSprite.pOam = sBaristuteOam_WalkingVeryFast;
|
||||
gCurrentSprite.work2 = PIXEL_SIZE * 2;
|
||||
gCurrentSprite.work2 = WALKING_SPEED * 2.8f;
|
||||
}
|
||||
else if (paletteRow == 3)
|
||||
{
|
||||
gCurrentSprite.pOam = sBaristuteOam_WalkingExtremelyFast;
|
||||
gCurrentSprite.work2 = PIXEL_SIZE * 2 + PIXEL_SIZE / 2;
|
||||
gCurrentSprite.work2 = WALKING_SPEED * 3.5f;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentSprite.pOam = sBaristuteOam_WalkingSlow;
|
||||
gCurrentSprite.work2 = PIXEL_SIZE / 4 * 3;
|
||||
gCurrentSprite.work2 = WALKING_SPEED * 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -333,7 +344,7 @@ void BaristutePlayWalkingSound(void)
|
||||
{
|
||||
if (gCurrentSprite.animationDurationCounter == 1 && (gCurrentSprite.currentAnimationFrame == 1 || gCurrentSprite.currentAnimationFrame == 4))
|
||||
{
|
||||
if (gCurrentSprite.work2 <= PIXEL_SIZE + PIXEL_SIZE / 2)
|
||||
if (gCurrentSprite.work2 <= WALKING_SPEED * 2)
|
||||
{
|
||||
// Slow or fast
|
||||
if (gCurrentSprite.status & SPRITE_STATUS_ONSCREEN)
|
||||
@ -368,8 +379,8 @@ void BaristuteWalking(void)
|
||||
if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT)
|
||||
{
|
||||
// Check collision
|
||||
if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, gCurrentSprite.xPosition + gCurrentSprite.hitboxRightOffset + PIXEL_SIZE) == COLLISION_AIR
|
||||
&& SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition + gCurrentSprite.hitboxRightOffset + PIXEL_SIZE) == COLLISION_SOLID)
|
||||
if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, gCurrentSprite.xPosition + gCurrentSprite.hitboxRightOffset + PIXEL_SIZE) == COLLISION_AIR &&
|
||||
SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition + gCurrentSprite.hitboxRightOffset + PIXEL_SIZE) == COLLISION_SOLID)
|
||||
{
|
||||
currentDistance = gCurrentSprite.xPosition - gCurrentSprite.xPositionSpawn;
|
||||
if (currentDistance > walkingDistance)
|
||||
@ -394,8 +405,8 @@ void BaristuteWalking(void)
|
||||
else
|
||||
{
|
||||
// Check collision
|
||||
if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, gCurrentSprite.xPosition + gCurrentSprite.hitboxLeftOffset - PIXEL_SIZE) == COLLISION_AIR
|
||||
&& SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition + gCurrentSprite.hitboxLeftOffset - PIXEL_SIZE) == COLLISION_SOLID)
|
||||
if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, gCurrentSprite.xPosition + gCurrentSprite.hitboxLeftOffset - PIXEL_SIZE) == COLLISION_AIR &&
|
||||
SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition + gCurrentSprite.hitboxLeftOffset - PIXEL_SIZE) == COLLISION_SOLID)
|
||||
{
|
||||
currentDistance = gCurrentSprite.xPositionSpawn - gCurrentSprite.xPosition;
|
||||
if (currentDistance > walkingDistance)
|
||||
@ -439,16 +450,16 @@ void BaristuteFallingInit(void)
|
||||
*/
|
||||
void BaristuteFalling(void)
|
||||
{
|
||||
u32 topEdge;
|
||||
u32 blockTop;
|
||||
s32 velocity;
|
||||
u8 offset;
|
||||
|
||||
topEdge = SpriteUtilCheckVerticalCollisionAtPositionSlopes(gCurrentSprite.yPosition, gCurrentSprite.xPosition);
|
||||
blockTop = SpriteUtilCheckVerticalCollisionAtPositionSlopes(gCurrentSprite.yPosition, gCurrentSprite.xPosition);
|
||||
|
||||
if (gPreviousVerticalCollisionCheck != COLLISION_AIR)
|
||||
{
|
||||
// Touching ground
|
||||
gCurrentSprite.yPosition = topEdge;
|
||||
gCurrentSprite.yPosition = blockTop;
|
||||
gCurrentSprite.pose = BARISTUTE_POSE_LANDING_INIT;
|
||||
}
|
||||
else
|
||||
@ -486,7 +497,7 @@ void BaristuteDeath(void)
|
||||
// Check for the second baristute in Kraid
|
||||
|
||||
// Get sprite ID
|
||||
spriteId = 0;
|
||||
spriteId = PSPRITE_UNUSED0;
|
||||
if (gCurrentSprite.spriteId == PSPRITE_BARISTUTE_KRAID_UPPER)
|
||||
spriteId = PSPRITE_BARISTUTE_KRAID_LOWER;
|
||||
else if (gCurrentSprite.spriteId == PSPRITE_BARISTUTE_KRAID_LOWER)
|
||||
|
@ -21,11 +21,11 @@
|
||||
#include "structs/game_state.h"
|
||||
|
||||
/**
|
||||
* @brief 49184 | 80 | Changes the clipdata of a 6 blocks vertical lign
|
||||
* @brief 49184 | 80 | Sets the collision of the wall behind Samus to lock here in the screen
|
||||
*
|
||||
* @param caa Clipdata Affecting Action
|
||||
*/
|
||||
void BossStatueVerticalLignChangeCcaa(u8 caa)
|
||||
void BossStatusSetWallBehindSamusCollision(u8 caa)
|
||||
{
|
||||
u16 yPosition;
|
||||
u16 xPosition;
|
||||
@ -34,17 +34,22 @@ void BossStatueVerticalLignChangeCcaa(u8 caa)
|
||||
xPosition = gCurrentSprite.xPosition + HALF_BLOCK_SIZE;
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition, xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 0, xPosition + BLOCK_SIZE * 8);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition + BLOCK_SIZE * 8);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - (BLOCK_SIZE * 2), xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition + BLOCK_SIZE * 8);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - (BLOCK_SIZE * 3), xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 3, xPosition + BLOCK_SIZE * 8);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - (BLOCK_SIZE * 4), xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 4, xPosition + BLOCK_SIZE * 8);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - (BLOCK_SIZE * 5), xPosition + (BLOCK_SIZE * 8));
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 5, xPosition + BLOCK_SIZE * 8);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,8 +67,10 @@ void KraidStatueHorizontalLignThreeChangeCcaa(u8 caa)
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 4, xPosition + BLOCK_SIZE * 2);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 4, xPosition + BLOCK_SIZE * 3);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 4, xPosition + BLOCK_SIZE * 4);
|
||||
}
|
||||
@ -82,20 +89,26 @@ void KraidStatueInsideChangeCcaa(u8 caa)
|
||||
xPosition = gCurrentSprite.xPosition + HALF_BLOCK_SIZE;
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition + BLOCK_SIZE * 2);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition + BLOCK_SIZE * 2);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition + BLOCK_SIZE * 3);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition + BLOCK_SIZE * 3);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition + BLOCK_SIZE * 4);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition + BLOCK_SIZE * 4);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition + BLOCK_SIZE * 5);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition + BLOCK_SIZE * 5);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition + BLOCK_SIZE * 2);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition + BLOCK_SIZE * 3);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition + BLOCK_SIZE * 4);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 3, xPosition + BLOCK_SIZE * 3);
|
||||
}
|
||||
@ -109,6 +122,7 @@ void KraidStatueOpenedInit(void)
|
||||
gCurrentSprite.pOam = sKraidStatueOam_Opened;
|
||||
gCurrentSprite.currentAnimationFrame = 0;
|
||||
gCurrentSprite.animationDurationCounter = 0;
|
||||
|
||||
gCurrentSprite.pose = BOSS_STATUE_POSE_IDLE;
|
||||
KraidStatueHorizontalLignThreeChangeCcaa(CAA_MAKE_NON_POWER_GRIP);
|
||||
}
|
||||
@ -161,6 +175,7 @@ void KraidStatueInit(void)
|
||||
gCurrentSprite.pOam = sKraidStatueOam_Idle;
|
||||
gCurrentSprite.pose = BOSS_STATUE_POSE_IDLE;
|
||||
}
|
||||
|
||||
gCurrentSprite.currentAnimationFrame = 0;
|
||||
gCurrentSprite.animationDurationCounter = 0;
|
||||
|
||||
@ -181,12 +196,14 @@ void KraidStatueCheckBackgroundLocked(void)
|
||||
SoundPlay(0x12A);
|
||||
|
||||
spriteX = gCurrentSprite.xPosition + HALF_BLOCK_SIZE;
|
||||
spriteX /= 4;
|
||||
spriteX = SUB_PIXEL_TO_PIXEL(spriteX);
|
||||
|
||||
bgX = gBg1XPosition / 4;
|
||||
bgX = SUB_PIXEL_TO_PIXEL(gBg1XPosition);
|
||||
|
||||
distance = spriteX - bgX;
|
||||
if (distance == BLOCK_SIZE * 2 - EIGHTH_BLOCK_SIZE) // Sprite is also 2 blocks from lock screen center
|
||||
|
||||
// Check if the sprite reached the middle of the screen with the scrolling
|
||||
if (distance == SUB_PIXEL_TO_PIXEL(SCREEN_SIZE_X_SUB_PIXEL / 2))
|
||||
{
|
||||
// Set opening behavior
|
||||
gCurrentSprite.pose = BOSS_STATUE_POSE_OPENING;
|
||||
@ -199,7 +216,7 @@ void KraidStatueCheckBackgroundLocked(void)
|
||||
gCurrentSprite.work2 = 0;
|
||||
SoundPlay(0x12B);
|
||||
|
||||
BossStatueVerticalLignChangeCcaa(CAA_MAKE_NON_POWER_GRIP);
|
||||
BossStatusSetWallBehindSamusCollision(CAA_MAKE_NON_POWER_GRIP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,7 +233,7 @@ void KraidStatueOpening(void)
|
||||
u16 xPosition;
|
||||
|
||||
if (gSamusData.xPosition > gCurrentSprite.xPosition + (BLOCK_SIZE * 8 + HALF_BLOCK_SIZE))
|
||||
BossStatueVerticalLignChangeCcaa(CAA_REMOVE_SOLID);
|
||||
BossStatusSetWallBehindSamusCollision(CAA_REMOVE_SOLID);
|
||||
|
||||
if (gCurrentSprite.currentAnimationFrame == 29 && gCurrentSprite.animationDurationCounter == 1)
|
||||
KraidStatueInsideChangeCcaa(CAA_REMOVE_SOLID);
|
||||
@ -225,20 +242,24 @@ void KraidStatueOpening(void)
|
||||
{
|
||||
// Set opened
|
||||
KraidStatueOpenedInit();
|
||||
|
||||
// Set event
|
||||
EventFunction(EVENT_ACTION_SETTING, EVENT_KRAID_STATUE_OPENED);
|
||||
|
||||
// Check should open doors
|
||||
if (!EventFunction(EVENT_ACTION_CHECKING, EVENT_RIDLEY_KILLED) || EventFunction(EVENT_ACTION_CHECKING, EVENT_RIDLEY_STATUE_OPENED))
|
||||
{
|
||||
gDoorUnlockTimer = -20;
|
||||
BossStatueVerticalLignChangeCcaa(CAA_REMOVE_SOLID);
|
||||
BossStatusSetWallBehindSamusCollision(CAA_REMOVE_SOLID);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ((u16)(gCurrentSprite.currentAnimationFrame - 0x9) < 0x1F)
|
||||
else if (gCurrentSprite.currentAnimationFrame > 8 && gCurrentSprite.currentAnimationFrame < 40)
|
||||
{
|
||||
gCurrentSprite.work2++;
|
||||
if (!(gCurrentSprite.work1++ & 0x1F))
|
||||
ScreenShakeStartVertical(0xA, 0x81);
|
||||
if (MOD_AND(gCurrentSprite.work1++, 32) == 0)
|
||||
ScreenShakeStartVertical(10, 0x80 | 1);
|
||||
|
||||
// Set debris
|
||||
rngParam1 = gCurrentSprite.work1;
|
||||
@ -253,7 +274,6 @@ void KraidStatueOpening(void)
|
||||
{
|
||||
if (rngParam2 & 0x20)
|
||||
{
|
||||
|
||||
SpriteDebrisInit(0, 0x5, yPosition, xPosition + 0x78 - rngParam3 * 0x10);
|
||||
SpriteDebrisInit(0, 0x8, yPosition, xPosition - 0x190 + rngParam3 * 0x8);
|
||||
}
|
||||
@ -315,13 +335,14 @@ void RidleyStatueInsideChangeCcaa(u8 caa)
|
||||
xPosition = gCurrentSprite.xPosition - HALF_BLOCK_SIZE;
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition - BLOCK_SIZE * 0);
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE, xPosition - BLOCK_SIZE);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 1, xPosition - BLOCK_SIZE * 1);
|
||||
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition - BLOCK_SIZE * 0);
|
||||
gCurrentClipdataAffectingAction = caa;
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition - BLOCK_SIZE);
|
||||
ClipdataProcess(yPosition - BLOCK_SIZE * 2, xPosition - BLOCK_SIZE * 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -333,6 +354,7 @@ void RidleyStatueOpenedInit(void)
|
||||
gCurrentSprite.pOam = sRidleyStatueOam_Opened;
|
||||
gCurrentSprite.currentAnimationFrame = 0;
|
||||
gCurrentSprite.animationDurationCounter = 0;
|
||||
|
||||
gCurrentSprite.pose = BOSS_STATUE_POSE_IDLE;
|
||||
RidleyStatueChangeThreeCcaa(CAA_MAKE_NON_POWER_GRIP);
|
||||
}
|
||||
@ -345,9 +367,9 @@ void RidleyStatueInit(void)
|
||||
{
|
||||
gCurrentSprite.xPosition += HALF_BLOCK_SIZE;
|
||||
|
||||
gCurrentSprite.drawDistanceTopOffset = 0x58;
|
||||
gCurrentSprite.drawDistanceBottomOffset = 0;
|
||||
gCurrentSprite.drawDistanceHorizontalOffset = 0x70;
|
||||
gCurrentSprite.drawDistanceTopOffset = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 5 + HALF_BLOCK_SIZE);
|
||||
gCurrentSprite.drawDistanceBottomOffset = SUB_PIXEL_TO_PIXEL(0);
|
||||
gCurrentSprite.drawDistanceHorizontalOffset = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 7);
|
||||
|
||||
gCurrentSprite.hitboxTopOffset = 0;
|
||||
gCurrentSprite.hitboxBottomOffset = 0;
|
||||
@ -394,21 +416,25 @@ void RidleyStatueCheckBackgroundLocked(void)
|
||||
{
|
||||
u16 spriteX;
|
||||
u16 bgX;
|
||||
u16 distance;
|
||||
|
||||
if (gCurrentSprite.currentAnimationFrame == 0 && gCurrentSprite.animationDurationCounter == 1)
|
||||
SoundPlay(0x12A);
|
||||
|
||||
spriteX = gCurrentSprite.xPosition + HALF_BLOCK_SIZE;
|
||||
spriteX /= 4;
|
||||
spriteX = SUB_PIXEL_TO_PIXEL(spriteX);
|
||||
|
||||
bgX = gBg1XPosition / 4;
|
||||
bgX = SUB_PIXEL_TO_PIXEL(gBg1XPosition);
|
||||
|
||||
if ((u16)(spriteX - bgX) == 0x78) // Sprite is 0x78 pixels from lock screen center
|
||||
distance = spriteX - bgX;
|
||||
|
||||
// Check if the sprite reached the middle of the screen with the scrolling
|
||||
if (distance == SUB_PIXEL_TO_PIXEL(SCREEN_SIZE_X_SUB_PIXEL / 2))
|
||||
{
|
||||
// Set opening behavior
|
||||
gCurrentSprite.pose = BOSS_STATUE_POSE_OPENING;
|
||||
gCurrentSprite.work0 = 0x3C;
|
||||
BossStatueVerticalLignChangeCcaa(CAA_MAKE_NON_POWER_GRIP);
|
||||
gCurrentSprite.work0 = 60;
|
||||
BossStatusSetWallBehindSamusCollision(CAA_MAKE_NON_POWER_GRIP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -424,8 +450,8 @@ void RidleyStatueOpening(void)
|
||||
u16 yPosition;
|
||||
u16 xPosition;
|
||||
|
||||
if (gSamusData.xPosition > gCurrentSprite.xPosition + 0x220)
|
||||
BossStatueVerticalLignChangeCcaa(CAA_REMOVE_SOLID);
|
||||
if (gSamusData.xPosition > gCurrentSprite.xPosition + BLOCK_SIZE * 8 + HALF_BLOCK_SIZE)
|
||||
BossStatusSetWallBehindSamusCollision(CAA_REMOVE_SOLID);
|
||||
|
||||
if (gCurrentSprite.work0 != 0)
|
||||
{
|
||||
@ -454,18 +480,19 @@ void RidleyStatueOpening(void)
|
||||
{
|
||||
// Set opened
|
||||
RidleyStatueOpenedInit();
|
||||
|
||||
// Set event
|
||||
EventFunction(EVENT_ACTION_SETTING, EVENT_RIDLEY_STATUE_OPENED);
|
||||
|
||||
// Unlock doors
|
||||
gDoorUnlockTimer = -20;
|
||||
BossStatueVerticalLignChangeCcaa(CAA_REMOVE_SOLID);
|
||||
BossStatusSetWallBehindSamusCollision(CAA_REMOVE_SOLID);
|
||||
}
|
||||
else if ((u16)(gCurrentSprite.currentAnimationFrame - 0x9) < 0x1F)
|
||||
else if (gCurrentSprite.currentAnimationFrame > 8 && gCurrentSprite.currentAnimationFrame < 40)
|
||||
{
|
||||
// Set random debris
|
||||
gCurrentSprite.work2++;
|
||||
if (!(gCurrentSprite.work1++ & 0x1F))
|
||||
if (MOD_AND(gCurrentSprite.work1++, 32) == 0)
|
||||
ScreenShakeStartVertical(10, 0x80 | 1);
|
||||
|
||||
rngParam1 = gCurrentSprite.work1;
|
||||
|
@ -2364,13 +2364,8 @@ void KraidNailMovement(void)
|
||||
* @brief 1aa3c | 474 | Kraid AI
|
||||
*
|
||||
*/
|
||||
#ifdef NON_MATCHING
|
||||
void Kraid(void)
|
||||
{
|
||||
// https://decomp.me/scratch/AWjiU
|
||||
|
||||
struct SubSpriteData* pSub;
|
||||
|
||||
if (gCurrentSprite.pose != 0 && gSubSpriteData1.health != 0)
|
||||
KraidOpenCloseRoutineAndProjectileCollision();
|
||||
|
||||
@ -2432,83 +2427,88 @@ void Kraid(void)
|
||||
SpriteUtilUpdateSubSprite1Anim();
|
||||
SpriteUtilSyncCurrentSpritePositionWithSubSprite1Position();
|
||||
|
||||
pSub = &gSubSpriteData1;
|
||||
if (pSub->animationDurationCounter == 1)
|
||||
if (gSubSpriteData1.animationDurationCounter == 1)
|
||||
{
|
||||
if (pSub->pMultiOam == sKraidMultiSpriteData_Rising ||
|
||||
pSub->pMultiOam == sKraidMultiSpriteData_Standing ||
|
||||
pSub->pMultiOam == sKraidMultiSpriteData_StandingBetweenSteps)
|
||||
if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_Rising ||
|
||||
gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_Standing)
|
||||
{
|
||||
if (pSub->currentAnimationFrame == 1)
|
||||
if (gSubSpriteData1.currentAnimationFrame == 1)
|
||||
gBg2Movement.yOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 2)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 2)
|
||||
gBg2Movement.yOffset += 4;
|
||||
}
|
||||
else if (pSub->pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToRight ||
|
||||
pSub->pMultiOam == sKraidMultiSpriteData_MovingRightFeetToLeft)
|
||||
else if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_StandingBetweenSteps)
|
||||
{
|
||||
if (pSub->currentAnimationFrame == 1)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 2)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 3)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 4)
|
||||
if (gSubSpriteData1.currentAnimationFrame == 1)
|
||||
gBg2Movement.yOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 5)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 2)
|
||||
gBg2Movement.yOffset += 4;
|
||||
}
|
||||
else if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToRight ||
|
||||
gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingRightFeetToLeft)
|
||||
{
|
||||
if (gSubSpriteData1.currentAnimationFrame == 1)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 2)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 3)
|
||||
gBg2Movement.xOffset -= 4;
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 4)
|
||||
gBg2Movement.yOffset -= 4;
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 5)
|
||||
{
|
||||
gBg2Movement.yOffset += 4;
|
||||
ScreenShakeStartVertical(10, 0x80 | 1);
|
||||
SoundPlay(0x1CC);
|
||||
if (pSub->pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToRight)
|
||||
if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToRight)
|
||||
{
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition - (HALF_BLOCK_SIZE + 12), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition - (HALF_BLOCK_SIZE + 12), PE_SECOND_MEDIUM_DUST);
|
||||
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition - (BLOCK_SIZE * 2 + QUARTER_BLOCK_SIZE), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition - (BLOCK_SIZE * 2 + QUARTER_BLOCK_SIZE), PE_SECOND_MEDIUM_DUST);
|
||||
}
|
||||
else
|
||||
{
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition + (BLOCK_SIZE * 3 + HALF_BLOCK_SIZE + 12), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition + (BLOCK_SIZE * 3 + HALF_BLOCK_SIZE + 12), PE_SECOND_MEDIUM_DUST);
|
||||
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition + (BLOCK_SIZE * 5 + QUARTER_BLOCK_SIZE), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition + (BLOCK_SIZE * 5 + QUARTER_BLOCK_SIZE), PE_SECOND_MEDIUM_DUST);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pSub->pMultiOam == sKraidMultiSpriteData_MovingRightFeetToRight ||
|
||||
pSub->pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToLeft)
|
||||
else if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingRightFeetToRight ||
|
||||
gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToLeft)
|
||||
{
|
||||
if (pSub->currentAnimationFrame == 1)
|
||||
if (gSubSpriteData1.currentAnimationFrame == 1)
|
||||
gBg2Movement.xOffset += 4;
|
||||
else if (pSub->currentAnimationFrame == 2)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 2)
|
||||
gBg2Movement.xOffset += 4;
|
||||
else if (pSub->currentAnimationFrame == 3)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 3)
|
||||
gBg2Movement.xOffset += 4;
|
||||
else if (pSub->currentAnimationFrame == 4)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 4)
|
||||
gBg2Movement.yOffset -= 4;
|
||||
else if (pSub->currentAnimationFrame == 5)
|
||||
else if (gSubSpriteData1.currentAnimationFrame == 5)
|
||||
{
|
||||
gBg2Movement.yOffset += 4;
|
||||
ScreenShakeStartVertical(10, 0x80 | 1);
|
||||
SoundPlay(0x1CC);
|
||||
if (pSub->pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToLeft)
|
||||
if (gSubSpriteData1.pMultiOam == sKraidMultiSpriteData_MovingLeftFeetToLeft)
|
||||
{
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition - (BLOCK_SIZE + HALF_BLOCK_SIZE + 4), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition - (BLOCK_SIZE + HALF_BLOCK_SIZE + 4), PE_SECOND_MEDIUM_DUST);
|
||||
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition - (BLOCK_SIZE * 3 + 8), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition - (BLOCK_SIZE * 3 + 8), PE_SECOND_MEDIUM_DUST);
|
||||
}
|
||||
else
|
||||
{
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition + (BLOCK_SIZE * 4 + 10), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition + (BLOCK_SIZE * 4 + 10), PE_SECOND_MEDIUM_DUST);
|
||||
|
||||
ParticleSet(gCurrentSprite.yPositionSpawn + BLOCK_SIZE * 7 + HALF_BLOCK_SIZE,
|
||||
pSub->xPosition + (BLOCK_SIZE * 5 + HALF_BLOCK_SIZE + 14), PE_SECOND_MEDIUM_DUST);
|
||||
gSubSpriteData1.xPosition + (BLOCK_SIZE * 5 + HALF_BLOCK_SIZE + 14), PE_SECOND_MEDIUM_DUST);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2532,474 +2532,6 @@ void Kraid(void)
|
||||
else
|
||||
gLockScreen.lock = LOCK_SCREEN_TYPE_NONE;
|
||||
}
|
||||
#else
|
||||
NAKED_FUNCTION
|
||||
void Kraid(void)
|
||||
{
|
||||
asm(" \n\
|
||||
push {r4, r5, r6, lr} \n\
|
||||
ldr r0, lbl_0801aa6c @ =gCurrentSprite \n\
|
||||
add r0, #0x24 \n\
|
||||
ldrb r0, [r0] \n\
|
||||
cmp r0, #0 \n\
|
||||
beq lbl_0801aa54 \n\
|
||||
ldr r0, lbl_0801aa70 @ =gSubSpriteData1 \n\
|
||||
ldrh r0, [r0, #0xa] \n\
|
||||
cmp r0, #0 \n\
|
||||
beq lbl_0801aa54 \n\
|
||||
bl KraidOpenCloseRoutineAndProjectileCollision \n\
|
||||
lbl_0801aa54: \n\
|
||||
ldr r0, lbl_0801aa6c @ =gCurrentSprite \n\
|
||||
add r0, #0x24 \n\
|
||||
ldrb r0, [r0] \n\
|
||||
cmp r0, #0x68 \n\
|
||||
bls lbl_0801aa60 \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801aa60: \n\
|
||||
lsl r0, r0, #2 \n\
|
||||
ldr r1, lbl_0801aa74 @ =lbl_0801aa78 \n\
|
||||
add r0, r0, r1 \n\
|
||||
ldr r0, [r0] \n\
|
||||
mov pc, r0 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801aa6c: .4byte gCurrentSprite \n\
|
||||
lbl_0801aa70: .4byte gSubSpriteData1 \n\
|
||||
lbl_0801aa74: .4byte lbl_0801aa78 \n\
|
||||
lbl_0801aa78: @ jump table \n\
|
||||
.4byte lbl_0801ac1c @ case 0 \n\
|
||||
.4byte lbl_0801ac22 @ case 1 \n\
|
||||
.4byte lbl_0801ac28 @ case 2 \n\
|
||||
.4byte lbl_0801ac64 @ case 3 \n\
|
||||
.4byte lbl_0801ac64 @ case 4 \n\
|
||||
.4byte lbl_0801ac64 @ case 5 \n\
|
||||
.4byte lbl_0801ac64 @ case 6 \n\
|
||||
.4byte lbl_0801ac64 @ case 7 \n\
|
||||
.4byte lbl_0801ac2e @ case 8 \n\
|
||||
.4byte lbl_0801ac32 @ case 9 \n\
|
||||
.4byte lbl_0801ac64 @ case 10 \n\
|
||||
.4byte lbl_0801ac64 @ case 11 \n\
|
||||
.4byte lbl_0801ac64 @ case 12 \n\
|
||||
.4byte lbl_0801ac64 @ case 13 \n\
|
||||
.4byte lbl_0801ac42 @ case 14 \n\
|
||||
.4byte lbl_0801ac46 @ case 15 \n\
|
||||
.4byte lbl_0801ac4c @ case 16 \n\
|
||||
.4byte lbl_0801ac50 @ case 17 \n\
|
||||
.4byte lbl_0801ac64 @ case 18 \n\
|
||||
.4byte lbl_0801ac64 @ case 19 \n\
|
||||
.4byte lbl_0801ac64 @ case 20 \n\
|
||||
.4byte lbl_0801ac64 @ case 21 \n\
|
||||
.4byte lbl_0801ac64 @ case 22 \n\
|
||||
.4byte lbl_0801ac64 @ case 23 \n\
|
||||
.4byte lbl_0801ac64 @ case 24 \n\
|
||||
.4byte lbl_0801ac64 @ case 25 \n\
|
||||
.4byte lbl_0801ac64 @ case 26 \n\
|
||||
.4byte lbl_0801ac64 @ case 27 \n\
|
||||
.4byte lbl_0801ac64 @ case 28 \n\
|
||||
.4byte lbl_0801ac64 @ case 29 \n\
|
||||
.4byte lbl_0801ac64 @ case 30 \n\
|
||||
.4byte lbl_0801ac64 @ case 31 \n\
|
||||
.4byte lbl_0801ac64 @ case 32 \n\
|
||||
.4byte lbl_0801ac64 @ case 33 \n\
|
||||
.4byte lbl_0801ac38 @ case 34 \n\
|
||||
.4byte lbl_0801ac3c @ case 35 \n\
|
||||
.4byte lbl_0801ac64 @ case 36 \n\
|
||||
.4byte lbl_0801ac64 @ case 37 \n\
|
||||
.4byte lbl_0801ac64 @ case 38 \n\
|
||||
.4byte lbl_0801ac64 @ case 39 \n\
|
||||
.4byte lbl_0801ac64 @ case 40 \n\
|
||||
.4byte lbl_0801ac64 @ case 41 \n\
|
||||
.4byte lbl_0801ac64 @ case 42 \n\
|
||||
.4byte lbl_0801ac64 @ case 43 \n\
|
||||
.4byte lbl_0801ac64 @ case 44 \n\
|
||||
.4byte lbl_0801ac64 @ case 45 \n\
|
||||
.4byte lbl_0801ac64 @ case 46 \n\
|
||||
.4byte lbl_0801ac64 @ case 47 \n\
|
||||
.4byte lbl_0801ac64 @ case 48 \n\
|
||||
.4byte lbl_0801ac64 @ case 49 \n\
|
||||
.4byte lbl_0801ac64 @ case 50 \n\
|
||||
.4byte lbl_0801ac64 @ case 51 \n\
|
||||
.4byte lbl_0801ac64 @ case 52 \n\
|
||||
.4byte lbl_0801ac64 @ case 53 \n\
|
||||
.4byte lbl_0801ac64 @ case 54 \n\
|
||||
.4byte lbl_0801ac64 @ case 55 \n\
|
||||
.4byte lbl_0801ac64 @ case 56 \n\
|
||||
.4byte lbl_0801ac64 @ case 57 \n\
|
||||
.4byte lbl_0801ac64 @ case 58 \n\
|
||||
.4byte lbl_0801ac64 @ case 59 \n\
|
||||
.4byte lbl_0801ac64 @ case 60 \n\
|
||||
.4byte lbl_0801ac64 @ case 61 \n\
|
||||
.4byte lbl_0801ac64 @ case 62 \n\
|
||||
.4byte lbl_0801ac64 @ case 63 \n\
|
||||
.4byte lbl_0801ac64 @ case 64 \n\
|
||||
.4byte lbl_0801ac64 @ case 65 \n\
|
||||
.4byte lbl_0801ac64 @ case 66 \n\
|
||||
.4byte lbl_0801ac64 @ case 67 \n\
|
||||
.4byte lbl_0801ac64 @ case 68 \n\
|
||||
.4byte lbl_0801ac64 @ case 69 \n\
|
||||
.4byte lbl_0801ac64 @ case 70 \n\
|
||||
.4byte lbl_0801ac64 @ case 71 \n\
|
||||
.4byte lbl_0801ac64 @ case 72 \n\
|
||||
.4byte lbl_0801ac64 @ case 73 \n\
|
||||
.4byte lbl_0801ac64 @ case 74 \n\
|
||||
.4byte lbl_0801ac64 @ case 75 \n\
|
||||
.4byte lbl_0801ac64 @ case 76 \n\
|
||||
.4byte lbl_0801ac64 @ case 77 \n\
|
||||
.4byte lbl_0801ac64 @ case 78 \n\
|
||||
.4byte lbl_0801ac64 @ case 79 \n\
|
||||
.4byte lbl_0801ac64 @ case 80 \n\
|
||||
.4byte lbl_0801ac64 @ case 81 \n\
|
||||
.4byte lbl_0801ac64 @ case 82 \n\
|
||||
.4byte lbl_0801ac64 @ case 83 \n\
|
||||
.4byte lbl_0801ac64 @ case 84 \n\
|
||||
.4byte lbl_0801ac64 @ case 85 \n\
|
||||
.4byte lbl_0801ac64 @ case 86 \n\
|
||||
.4byte lbl_0801ac64 @ case 87 \n\
|
||||
.4byte lbl_0801ac64 @ case 88 \n\
|
||||
.4byte lbl_0801ac64 @ case 89 \n\
|
||||
.4byte lbl_0801ac64 @ case 90 \n\
|
||||
.4byte lbl_0801ac64 @ case 91 \n\
|
||||
.4byte lbl_0801ac64 @ case 92 \n\
|
||||
.4byte lbl_0801ac64 @ case 93 \n\
|
||||
.4byte lbl_0801ac64 @ case 94 \n\
|
||||
.4byte lbl_0801ac64 @ case 95 \n\
|
||||
.4byte lbl_0801ac64 @ case 96 \n\
|
||||
.4byte lbl_0801ac64 @ case 97 \n\
|
||||
.4byte lbl_0801ac56 @ case 98 \n\
|
||||
.4byte lbl_0801ac64 @ case 99 \n\
|
||||
.4byte lbl_0801ac64 @ case 100 \n\
|
||||
.4byte lbl_0801ac64 @ case 101 \n\
|
||||
.4byte lbl_0801ac64 @ case 102 \n\
|
||||
.4byte lbl_0801ac5a @ case 103 \n\
|
||||
.4byte lbl_0801ac60 @ case 104 \n\
|
||||
lbl_0801ac1c: \n\
|
||||
bl KraidInit \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac22: \n\
|
||||
bl KraidGoUp \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac28: \n\
|
||||
bl KraidCheckFullyUp \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac2e: \n\
|
||||
bl KraidFirstStepInit \n\
|
||||
lbl_0801ac32: \n\
|
||||
bl KraidFirstStep \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac38: \n\
|
||||
bl KraidSecondStepInit \n\
|
||||
lbl_0801ac3c: \n\
|
||||
bl KraidSecondStep \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac42: \n\
|
||||
bl KraidStandingInit \n\
|
||||
lbl_0801ac46: \n\
|
||||
bl KraidStanding \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac4c: \n\
|
||||
bl KraidStandingBetweenStepsInit \n\
|
||||
lbl_0801ac50: \n\
|
||||
bl KraidStandingBetweenSteps \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac56: \n\
|
||||
bl KraidDyingInit \n\
|
||||
lbl_0801ac5a: \n\
|
||||
bl KraidDying \n\
|
||||
b lbl_0801ac64 \n\
|
||||
lbl_0801ac60: \n\
|
||||
bl KraidBeforeDeath \n\
|
||||
lbl_0801ac64: \n\
|
||||
ldr r5, lbl_0801acac @ =gCurrentSprite \n\
|
||||
ldrb r0, [r5, #0x1d] \n\
|
||||
cmp r0, #0x6f \n\
|
||||
beq lbl_0801ac6e \n\
|
||||
b lbl_0801aea0 \n\
|
||||
lbl_0801ac6e: \n\
|
||||
bl SpriteUtilUpdateSubSprite1Anim \n\
|
||||
bl SpriteUtilSyncCurrentSpritePositionWithSubSprite1Position \n\
|
||||
ldr r6, lbl_0801acb0 @ =gSubSpriteData1 \n\
|
||||
ldrb r0, [r6, #0xc] \n\
|
||||
cmp r0, #1 \n\
|
||||
beq lbl_0801ac80 \n\
|
||||
b lbl_0801ae26 \n\
|
||||
lbl_0801ac80: \n\
|
||||
ldr r1, [r6] \n\
|
||||
ldr r0, lbl_0801acb4 @ =sKraidMultiSpriteData_Rising \n\
|
||||
cmp r1, r0 \n\
|
||||
beq lbl_0801ac94 \n\
|
||||
ldr r0, lbl_0801acb8 @ =sKraidMultiSpriteData_Standing \n\
|
||||
cmp r1, r0 \n\
|
||||
beq lbl_0801ac94 \n\
|
||||
ldr r0, lbl_0801acbc @ =sKraidMultiSpriteData_StandingBetweenSteps \n\
|
||||
cmp r1, r0 \n\
|
||||
bne lbl_0801acc4 \n\
|
||||
lbl_0801ac94: \n\
|
||||
ldrh r0, [r6, #4] \n\
|
||||
cmp r0, #1 \n\
|
||||
bne lbl_0801ac9c \n\
|
||||
b lbl_0801ad98 \n\
|
||||
lbl_0801ac9c: \n\
|
||||
cmp r0, #2 \n\
|
||||
beq lbl_0801aca2 \n\
|
||||
b lbl_0801ae26 \n\
|
||||
lbl_0801aca2: \n\
|
||||
ldr r1, lbl_0801acc0 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1, #2] \n\
|
||||
add r0, #4 \n\
|
||||
strh r0, [r1, #2] \n\
|
||||
b lbl_0801ae26 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801acac: .4byte gCurrentSprite \n\
|
||||
lbl_0801acb0: .4byte gSubSpriteData1 \n\
|
||||
lbl_0801acb4: .4byte sKraidMultiSpriteData_Rising \n\
|
||||
lbl_0801acb8: .4byte sKraidMultiSpriteData_Standing \n\
|
||||
lbl_0801acbc: .4byte sKraidMultiSpriteData_StandingBetweenSteps \n\
|
||||
lbl_0801acc0: .4byte gBg2Movement \n\
|
||||
lbl_0801acc4: \n\
|
||||
ldr r4, lbl_0801ace8 @ =sKraidMultiSpriteData_MovingLeftFeetToRight \n\
|
||||
cmp r1, r4 \n\
|
||||
beq lbl_0801acd0 \n\
|
||||
ldr r0, lbl_0801acec @ =sKraidMultiSpriteData_MovingRightFeetToLeft \n\
|
||||
cmp r1, r0 \n\
|
||||
bne lbl_0801ad64 \n\
|
||||
lbl_0801acd0: \n\
|
||||
ldrh r0, [r6, #4] \n\
|
||||
cmp r0, #1 \n\
|
||||
beq lbl_0801acde \n\
|
||||
cmp r0, #2 \n\
|
||||
beq lbl_0801acde \n\
|
||||
cmp r0, #3 \n\
|
||||
bne lbl_0801acf4 \n\
|
||||
lbl_0801acde: \n\
|
||||
ldr r1, lbl_0801acf0 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1] \n\
|
||||
sub r0, #4 \n\
|
||||
strh r0, [r1] \n\
|
||||
b lbl_0801ae26 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ace8: .4byte sKraidMultiSpriteData_MovingLeftFeetToRight \n\
|
||||
lbl_0801acec: .4byte sKraidMultiSpriteData_MovingRightFeetToLeft \n\
|
||||
lbl_0801acf0: .4byte gBg2Movement \n\
|
||||
lbl_0801acf4: \n\
|
||||
cmp r0, #4 \n\
|
||||
beq lbl_0801ad98 \n\
|
||||
cmp r0, #5 \n\
|
||||
beq lbl_0801acfe \n\
|
||||
b lbl_0801ae26 \n\
|
||||
lbl_0801acfe: \n\
|
||||
ldr r1, lbl_0801ad38 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1, #2] \n\
|
||||
add r0, #4 \n\
|
||||
strh r0, [r1, #2] \n\
|
||||
movs r0, #0xa \n\
|
||||
movs r1, #0x81 \n\
|
||||
bl ScreenShakeStartVertical \n\
|
||||
movs r0, #0xe6 \n\
|
||||
lsl r0, r0, #1 \n\
|
||||
bl SoundPlay \n\
|
||||
ldr r0, [r6] \n\
|
||||
cmp r0, r4 \n\
|
||||
bne lbl_0801ad3c \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
movs r4, #0xf0 \n\
|
||||
lsl r4, r4, #1 \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
sub r1, #0x2c \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
sub r1, #0x90 \n\
|
||||
b lbl_0801ade8 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ad38: .4byte gBg2Movement \n\
|
||||
lbl_0801ad3c: \n\
|
||||
ldr r5, lbl_0801ad60 @ =gCurrentSprite \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
movs r4, #0xf0 \n\
|
||||
lsl r4, r4, #1 \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
add r1, #0xec \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
movs r2, #0xa8 \n\
|
||||
lsl r2, r2, #1 \n\
|
||||
add r1, r1, r2 \n\
|
||||
b lbl_0801ade8 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ad60: .4byte gCurrentSprite \n\
|
||||
lbl_0801ad64: \n\
|
||||
ldr r0, lbl_0801ad88 @ =sKraidMultiSpriteData_MovingLeftFeetToLeft \n\
|
||||
cmp r1, r0 \n\
|
||||
beq lbl_0801ad70 \n\
|
||||
ldr r0, lbl_0801ad8c @ =sKraidMultiSpriteData_MovingLeftFeetToLeft \n\
|
||||
cmp r1, r0 \n\
|
||||
bne lbl_0801ae26 \n\
|
||||
lbl_0801ad70: \n\
|
||||
ldrh r0, [r6, #4] \n\
|
||||
cmp r0, #1 \n\
|
||||
beq lbl_0801ad7e \n\
|
||||
cmp r0, #2 \n\
|
||||
beq lbl_0801ad7e \n\
|
||||
cmp r0, #3 \n\
|
||||
bne lbl_0801ad94 \n\
|
||||
lbl_0801ad7e: \n\
|
||||
ldr r1, lbl_0801ad90 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1] \n\
|
||||
add r0, #4 \n\
|
||||
strh r0, [r1] \n\
|
||||
b lbl_0801ae26 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ad88: .4byte sKraidMultiSpriteData_MovingRightFeetToRight \n\
|
||||
lbl_0801ad8c: .4byte sKraidMultiSpriteData_MovingLeftFeetToLeft \n\
|
||||
lbl_0801ad90: .4byte gBg2Movement \n\
|
||||
lbl_0801ad94: \n\
|
||||
cmp r0, #4 \n\
|
||||
bne lbl_0801ada8 \n\
|
||||
lbl_0801ad98: \n\
|
||||
ldr r1, lbl_0801ada4 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1, #2] \n\
|
||||
sub r0, #4 \n\
|
||||
strh r0, [r1, #2] \n\
|
||||
b lbl_0801ae26 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ada4: .4byte gBg2Movement \n\
|
||||
lbl_0801ada8: \n\
|
||||
cmp r0, #5 \n\
|
||||
bne lbl_0801ae26 \n\
|
||||
ldr r1, lbl_0801adf0 @ =gBg2Movement \n\
|
||||
ldrh r0, [r1, #2] \n\
|
||||
add r0, #4 \n\
|
||||
strh r0, [r1, #2] \n\
|
||||
movs r0, #0xa \n\
|
||||
movs r1, #0x81 \n\
|
||||
bl ScreenShakeStartVertical \n\
|
||||
movs r0, #0xe6 \n\
|
||||
lsl r0, r0, #1 \n\
|
||||
bl SoundPlay \n\
|
||||
ldr r1, [r6] \n\
|
||||
ldr r0, lbl_0801adf4 @ =sKraidMultiSpriteData_MovingLeftFeetToLeft \n\
|
||||
cmp r1, r0 \n\
|
||||
bne lbl_0801adfc \n\
|
||||
ldr r5, lbl_0801adf8 @ =gCurrentSprite \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
movs r4, #0xf0 \n\
|
||||
lsl r4, r4, #1 \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
sub r1, #0x64 \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
sub r1, #0xc8 \n\
|
||||
lbl_0801ade8: \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
b lbl_0801ae26 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801adf0: .4byte gBg2Movement \n\
|
||||
lbl_0801adf4: .4byte sKraidMultiSpriteData_MovingLeftFeetToLeft \n\
|
||||
lbl_0801adf8: .4byte gCurrentSprite \n\
|
||||
lbl_0801adfc: \n\
|
||||
ldr r5, lbl_0801ae74 @ =gCurrentSprite \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
movs r4, #0xf0 \n\
|
||||
lsl r4, r4, #1 \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
movs r3, #0x85 \n\
|
||||
lsl r3, r3, #1 \n\
|
||||
add r1, r1, r3 \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
ldrh r0, [r5, #6] \n\
|
||||
add r0, r0, r4 \n\
|
||||
ldrh r1, [r6, #8] \n\
|
||||
movs r2, #0xb7 \n\
|
||||
lsl r2, r2, #1 \n\
|
||||
add r1, r1, r2 \n\
|
||||
movs r2, #0x38 \n\
|
||||
bl ParticleSet \n\
|
||||
lbl_0801ae26: \n\
|
||||
ldr r1, lbl_0801ae78 @ =gSubSpriteData1 \n\
|
||||
ldrb r0, [r1, #0xd] \n\
|
||||
cmp r0, #0 \n\
|
||||
beq lbl_0801ae34 \n\
|
||||
ldrb r0, [r1, #0xc] \n\
|
||||
add r0, #4 \n\
|
||||
strb r0, [r1, #0xc] \n\
|
||||
lbl_0801ae34: \n\
|
||||
ldr r1, lbl_0801ae7c @ =gLockScreen \n\
|
||||
movs r0, #1 \n\
|
||||
strb r0, [r1] \n\
|
||||
ldr r2, lbl_0801ae80 @ =gSamusData \n\
|
||||
ldrh r0, [r2, #0x14] \n\
|
||||
strh r0, [r1, #4] \n\
|
||||
ldr r3, lbl_0801ae84 @ =0xfffffec0 \n\
|
||||
add r0, r3, #0 \n\
|
||||
ldrh r2, [r2, #0x12] \n\
|
||||
add r0, r0, r2 \n\
|
||||
strh r0, [r1, #2] \n\
|
||||
ldr r3, lbl_0801ae74 @ =gCurrentSprite \n\
|
||||
add r0, r3, #0 \n\
|
||||
add r0, #0x20 \n\
|
||||
ldrb r2, [r0] \n\
|
||||
add r0, #0x13 \n\
|
||||
ldrb r1, [r0] \n\
|
||||
movs r0, #0xe \n\
|
||||
sub r0, r0, r1 \n\
|
||||
cmp r2, r0 \n\
|
||||
bne lbl_0801ae88 \n\
|
||||
ldrh r1, [r3] \n\
|
||||
movs r2, #0x80 \n\
|
||||
lsl r2, r2, #3 \n\
|
||||
add r0, r2, #0 \n\
|
||||
and r0, r1 \n\
|
||||
cmp r0, #0 \n\
|
||||
bne lbl_0801aea6 \n\
|
||||
add r0, r2, #0 \n\
|
||||
orr r0, r1 \n\
|
||||
strh r0, [r3] \n\
|
||||
b lbl_0801aea6 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ae74: .4byte gCurrentSprite \n\
|
||||
lbl_0801ae78: .4byte gSubSpriteData1 \n\
|
||||
lbl_0801ae7c: .4byte gLockScreen \n\
|
||||
lbl_0801ae80: .4byte gSamusData \n\
|
||||
lbl_0801ae84: .4byte 0xfffffec0 \n\
|
||||
lbl_0801ae88: \n\
|
||||
ldrh r1, [r3] \n\
|
||||
movs r0, #0x80 \n\
|
||||
lsl r0, r0, #3 \n\
|
||||
and r0, r1 \n\
|
||||
cmp r0, #0 \n\
|
||||
beq lbl_0801aea6 \n\
|
||||
ldr r0, lbl_0801ae9c @ =0x0000fbff \n\
|
||||
and r0, r1 \n\
|
||||
strh r0, [r3] \n\
|
||||
b lbl_0801aea6 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801ae9c: .4byte 0x0000fbff \n\
|
||||
lbl_0801aea0: \n\
|
||||
ldr r1, lbl_0801aeac @ =gLockScreen \n\
|
||||
movs r0, #0 \n\
|
||||
strb r0, [r1] \n\
|
||||
lbl_0801aea6: \n\
|
||||
pop {r4, r5, r6} \n\
|
||||
pop {r0} \n\
|
||||
bx r0 \n\
|
||||
.align 2, 0 \n\
|
||||
lbl_0801aeac: .4byte gLockScreen \n\
|
||||
");
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 1aeb0 | 198 | Kraid part AI
|
||||
|
@ -4368,34 +4368,24 @@ void SpacePirate(void)
|
||||
{
|
||||
if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT)
|
||||
{
|
||||
if (gSpriteDrawOrder[1] == TRUE)
|
||||
{
|
||||
if (!(gCurrentSprite.status & SPRITE_STATUS_NOT_DRAWN))
|
||||
{
|
||||
if (gSpriteDrawOrder[1] == TRUE && !(gCurrentSprite.status & SPRITE_STATUS_NOT_DRAWN))
|
||||
gCurrentSprite.spriteId = PSPRITE_SPACE_PIRATE;
|
||||
goto lasercheck;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
gSpriteDrawOrder[2] = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSpriteDrawOrder[1] == FALSE)
|
||||
{
|
||||
if (!(gCurrentSprite.status & SPRITE_STATUS_NOT_DRAWN))
|
||||
{
|
||||
if (gSpriteDrawOrder[1] == FALSE && !(gCurrentSprite.status & SPRITE_STATUS_NOT_DRAWN))
|
||||
gCurrentSprite.spriteId = PSPRITE_SPACE_PIRATE;
|
||||
goto lasercheck;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
gSpriteDrawOrder[2] = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gAlarmTimer == 0)
|
||||
{
|
||||
gCurrentSprite.status &= ~SPRITE_STATUS_UNKNOWN_400;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
@ -4404,7 +4394,6 @@ void SpacePirate(void)
|
||||
gCurrentSprite.status |= SPRITE_STATUS_UNKNOWN_400;
|
||||
}
|
||||
|
||||
lasercheck:
|
||||
SpacePirateCheckCollidingWithLaser();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user