mirror of
https://github.com/YohannDR/mzm.git
synced 2025-02-21 14:00:31 +00:00
Match GadoraHatchUpdate
This commit is contained in:
parent
c1703cfb20
commit
06618d7236
@ -2,7 +2,7 @@
|
||||
|
||||
This is a work in progress decompilation of Metroid - Zero Mission.
|
||||
|
||||
2503/2721 functions decompiled (91.99%, 218 left)
|
||||
2504/2721 functions decompiled (92.02%, 217 left)
|
||||
Progress can be seen here : https://docs.google.com/spreadsheets/d/1X8XarD5evY8ZI7r_GQqh1pYmdVMbBcINYfRBUlogmKY/edit#gid=0
|
||||
|
||||
**This decomp is not shiftable, don't use it as a base to work on anything**
|
||||
|
@ -1939,8 +1939,8 @@ lbl_0804fc2e:
|
||||
pop {r1}
|
||||
bx r1
|
||||
|
||||
thumb_func_start set_projectile_trail
|
||||
set_projectile_trail: @ 0x0804fc38
|
||||
thumb_func_start ProjectileSetTrail
|
||||
ProjectileSetTrail: @ 0x0804fc38
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
lsls r1, r1, #0x18
|
||||
@ -4232,7 +4232,7 @@ lbl_08050d80:
|
||||
movs r1, #0x16
|
||||
lbl_08050d84:
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08050e3c
|
||||
lbl_08050d8c:
|
||||
cmp r0, #1
|
||||
@ -4638,7 +4638,7 @@ lbl_080510a0:
|
||||
movs r1, #0x16
|
||||
lbl_080510a4:
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051166
|
||||
lbl_080510ac:
|
||||
cmp r5, #1
|
||||
@ -4817,7 +4817,7 @@ lbl_0805120c:
|
||||
movs r1, #0x16
|
||||
lbl_08051210:
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_0805132a
|
||||
lbl_08051218:
|
||||
cmp r5, #1
|
||||
@ -5247,7 +5247,7 @@ ProjectileProcessChargedLongBeam: @ 0x08051538
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x18
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_0805161c
|
||||
.align 2, 0
|
||||
lbl_08051568: .4byte gCurrentClipdataAffectingAction
|
||||
@ -5378,7 +5378,7 @@ ProjectileProcessChargedIceBeam: @ 0x08051630
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x17
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051676
|
||||
.align 2, 0
|
||||
lbl_08051668: .4byte gCurrentClipdataAffectingAction
|
||||
@ -5386,12 +5386,12 @@ lbl_0805166c:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x16
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
lbl_08051676:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x19
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051734
|
||||
lbl_08051682:
|
||||
cmp r0, #1
|
||||
@ -5532,7 +5532,7 @@ ProjectileProcessChargedWaveBeam: @ 0x08051764
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x17
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_080517aa
|
||||
.align 2, 0
|
||||
lbl_0805179c: .4byte gEquipment
|
||||
@ -5540,12 +5540,12 @@ lbl_080517a0:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x16
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
lbl_080517aa:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1a
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_0805186e
|
||||
lbl_080517b6:
|
||||
cmp r5, #1
|
||||
@ -5715,7 +5715,7 @@ lbl_080518e2:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x17
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051922
|
||||
.align 2, 0
|
||||
lbl_08051914: .4byte gEquipment
|
||||
@ -5723,7 +5723,7 @@ lbl_08051918:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x16
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
lbl_08051922:
|
||||
cmp r6, #0
|
||||
beq lbl_08051936
|
||||
@ -5741,7 +5741,7 @@ lbl_08051936:
|
||||
movs r1, #0x1b
|
||||
lbl_0805193a:
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051a50
|
||||
lbl_08051942:
|
||||
cmp r5, #1
|
||||
@ -5920,7 +5920,7 @@ ProjectileProcessChargedPistol: @ 0x08051a7c
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1d
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051b60
|
||||
.align 2, 0
|
||||
lbl_08051aac: .4byte gCurrentClipdataAffectingAction
|
||||
@ -6084,7 +6084,7 @@ lbl_08051bda:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x14
|
||||
movs r2, #7
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051cbe
|
||||
.align 2, 0
|
||||
lbl_08051be8: .4byte gCurrentClipdataAffectingAction
|
||||
@ -6255,7 +6255,7 @@ lbl_08051d2a:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x15
|
||||
movs r2, #3
|
||||
bl set_projectile_trail
|
||||
bl ProjectileSetTrail
|
||||
b lbl_08051e0e
|
||||
.align 2, 0
|
||||
lbl_08051d38: .4byte gCurrentClipdataAffectingAction
|
||||
|
@ -1,99 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
thumb_func_start GadoraHatchUpdate
|
||||
GadoraHatchUpdate: @ 0x0805790c
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #4
|
||||
lsls r0, r0, #0x10
|
||||
lsls r1, r1, #0x10
|
||||
lsls r2, r2, #0x18
|
||||
lsrs r2, r2, #0x18
|
||||
rsbs r3, r2, #0
|
||||
orrs r3, r2
|
||||
lsrs r3, r3, #0x1f
|
||||
str r3, [sp]
|
||||
movs r6, #0
|
||||
movs r7, #0
|
||||
movs r4, #0
|
||||
lsrs r0, r0, #0x16
|
||||
lsls r0, r0, #0x10
|
||||
mov r8, r0
|
||||
lsrs r1, r1, #0x16
|
||||
lsls r1, r1, #0x10
|
||||
mov ip, r1
|
||||
mov sb, r3
|
||||
ldr r3, lbl_08057990 @ =gHatchData
|
||||
movs r0, #2
|
||||
rsbs r0, r0, #0
|
||||
mov sl, r0
|
||||
lbl_08057944:
|
||||
ldrb r0, [r3, #1]
|
||||
lsls r0, r0, #0x1e
|
||||
cmp r0, #0
|
||||
bne lbl_08057994
|
||||
ldrb r1, [r3, #5]
|
||||
adds r0, r1, r6
|
||||
mov r5, r8
|
||||
lsrs r2, r5, #0x10
|
||||
cmp r0, r2
|
||||
blt lbl_08057974
|
||||
subs r0, r1, r6
|
||||
cmp r0, r2
|
||||
bgt lbl_08057974
|
||||
ldrb r1, [r3, #6]
|
||||
adds r0, r1, #3
|
||||
mov r5, ip
|
||||
lsrs r2, r5, #0x10
|
||||
cmp r0, r2
|
||||
blt lbl_08057974
|
||||
movs r5, #0
|
||||
subs r0, r1, r5
|
||||
cmp r0, r2
|
||||
bgt lbl_08057974
|
||||
movs r7, #1
|
||||
lbl_08057974:
|
||||
cmp r7, #0
|
||||
beq lbl_08057994
|
||||
ldrb r1, [r3]
|
||||
lsls r0, r1, #0x1f
|
||||
lsrs r0, r0, #0x1f
|
||||
ldr r2, [sp]
|
||||
cmp r0, r2
|
||||
beq lbl_080579a2
|
||||
mov r0, sl
|
||||
ands r0, r1
|
||||
mov r5, sb
|
||||
orrs r0, r5
|
||||
strb r0, [r3]
|
||||
b lbl_0805799c
|
||||
.align 2, 0
|
||||
lbl_08057990: .4byte gHatchData
|
||||
lbl_08057994:
|
||||
adds r3, #8
|
||||
adds r4, #1
|
||||
cmp r4, #0xf
|
||||
ble lbl_08057944
|
||||
lbl_0805799c:
|
||||
adds r4, #1
|
||||
cmp r7, #0
|
||||
bne lbl_080579a4
|
||||
lbl_080579a2:
|
||||
movs r4, #0
|
||||
lbl_080579a4:
|
||||
adds r0, r4, #0
|
||||
add sp, #4
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
|
@ -500,7 +500,7 @@ SECTIONS {
|
||||
src/particle.o(.text);
|
||||
asm/disasm_0x08055344.o(.text);
|
||||
src/power_bomb_explosion.o(.text);
|
||||
asm/disasm_0x0805745c.o(.text);
|
||||
src/gadora_hatch.o(.text);
|
||||
src/in_game_timer.o(.text);
|
||||
src/display.o(.text);
|
||||
src/process_pause_press.o(.text);
|
||||
|
@ -4,16 +4,23 @@
|
||||
|
||||
#include "structs/connection.h"
|
||||
|
||||
/**
|
||||
* @brief 5790c | ac | Activates/deactivates the hatch for a gadora
|
||||
*
|
||||
* @param xPosition X position
|
||||
* @param yPosition Y position
|
||||
* @param action Action (0 = Close, 1 = Open)
|
||||
* @return u32 Iterator
|
||||
*/
|
||||
u32 GadoraHatchUpdate(u16 xPosition, u16 yPosition, u8 action)
|
||||
{
|
||||
// https://decomp.me/scratch/GcieN
|
||||
|
||||
i32 i;
|
||||
u32 exists;
|
||||
u8 found;
|
||||
i32 xOffset;
|
||||
i32 yOffset;
|
||||
|
||||
// Get should the hatch exists or not
|
||||
if (action)
|
||||
exists = TRUE;
|
||||
else
|
||||
@ -25,24 +32,28 @@ u32 GadoraHatchUpdate(u16 xPosition, u16 yPosition, u8 action)
|
||||
|
||||
for (i = 0; i < MAX_AMOUNT_OF_HATCHES; i++)
|
||||
{
|
||||
if (!(gHatchData[i].opening))
|
||||
{
|
||||
if (gHatchData[i].xPosition + xOffset >= xPosition / BLOCK_SIZE && gHatchData[i].xPosition - xOffset <= xPosition / BLOCK_SIZE &&
|
||||
gHatchData[i].yPosition + 3 >= yPosition / BLOCK_SIZE && gHatchData[i].yPosition - yOffset <= yPosition / BLOCK_SIZE)
|
||||
found = TRUE;
|
||||
if (gHatchData[i].opening)
|
||||
continue;
|
||||
|
||||
// Try find door at position
|
||||
if (gHatchData[i].xPosition + xOffset >= xPosition / BLOCK_SIZE && gHatchData[i].xPosition - xOffset <= xPosition / BLOCK_SIZE &&
|
||||
gHatchData[i].yPosition + 3 >= yPosition / BLOCK_SIZE && gHatchData[i].yPosition - yOffset <= yPosition / BLOCK_SIZE)
|
||||
found = TRUE;
|
||||
|
||||
if (found)
|
||||
{
|
||||
if (gHatchData[i].exists != exists)
|
||||
gHatchData[i].exists = exists;
|
||||
else;
|
||||
break;
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
// Apply exists status
|
||||
if (gHatchData[i].exists != exists)
|
||||
gHatchData[i].exists = exists;
|
||||
else
|
||||
found = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
if (!found)
|
||||
if (found)
|
||||
i++;
|
||||
else
|
||||
i = 0;
|
||||
|
||||
return i;
|
||||
|
@ -985,10 +985,10 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay)
|
||||
{
|
||||
// https://decomp.me/scratch/4n6pN
|
||||
|
||||
/*u16 xPosition;
|
||||
u16 xPosition;
|
||||
u16 yPosition;
|
||||
u16 movement;
|
||||
u8 status;
|
||||
u16 tmp;
|
||||
|
||||
if (gFrameCounter8Bit & delay)
|
||||
return;
|
||||
@ -1009,18 +1009,16 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay)
|
||||
break;
|
||||
|
||||
case ACD_DIAGONALLY_UP:
|
||||
status = PROJ_STATUS_XFLIP;
|
||||
yPosition += 0x18;
|
||||
if (status & pProj->status)
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
xPosition -= 0x18;
|
||||
else
|
||||
xPosition += 0x18;
|
||||
break;
|
||||
|
||||
case ACD_DIAGONALLY_DOWN:
|
||||
status = PROJ_STATUS_XFLIP;
|
||||
yPosition -= 0x18;
|
||||
if (status & pProj->status)
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
xPosition -= 0x18;
|
||||
else
|
||||
xPosition += 0x18;
|
||||
@ -1034,7 +1032,7 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay)
|
||||
break;
|
||||
}
|
||||
|
||||
ParticleSet(yPosition, xPosition, effect);*/
|
||||
ParticleSet(yPosition, xPosition, effect);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1048,27 +1046,28 @@ void ProjectileMoveTumbling(struct ProjectileData* pProj)
|
||||
i16 movement;
|
||||
u32 newPosition;
|
||||
|
||||
if ((pProj->status & PROJ_STATUS_ON_SCREEN) == 0x0)
|
||||
if (!(pProj->status & PROJ_STATUS_ON_SCREEN))
|
||||
{
|
||||
pProj->status = 0x0;
|
||||
return;
|
||||
}
|
||||
|
||||
timer = pProj->timer;
|
||||
movement = sTumblingMissileSpeed[timer];
|
||||
if (movement == SHORT_MAX)
|
||||
newPosition = sTumblingMissileSpeed[timer - 1] + pProj->yPosition;
|
||||
else
|
||||
{
|
||||
timer = pProj->timer;
|
||||
movement = sTumblingMissileSpeed[timer];
|
||||
if (movement == SHORT_MAX)
|
||||
newPosition = sTumblingMissileSpeed[timer - 1] + pProj->yPosition;
|
||||
else
|
||||
{
|
||||
pProj->timer = timer + 1;
|
||||
newPosition = pProj->yPosition + movement;
|
||||
}
|
||||
pProj->yPosition = newPosition;
|
||||
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
newPosition = pProj->xPosition + 0x4;
|
||||
else
|
||||
newPosition = pProj->xPosition - 0x4;
|
||||
pProj->xPosition = newPosition;
|
||||
pProj->timer = timer + 1;
|
||||
newPosition = pProj->yPosition + movement;
|
||||
}
|
||||
pProj->yPosition = newPosition;
|
||||
|
||||
if (pProj->status & PROJ_STATUS_XFLIP)
|
||||
newPosition = pProj->xPosition + 0x4;
|
||||
else
|
||||
newPosition = pProj->xPosition - 0x4;
|
||||
pProj->xPosition = newPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user