mirror of
https://github.com/zeldaret/tmc
synced 2026-08-16 21:18:15 -04:00
decompile WaterDrop
This commit is contained in:
-246
@@ -1,246 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start WaterDrop
|
||||
WaterDrop: @ 0x0802A238
|
||||
push {lr}
|
||||
ldr r2, _0802A24C @ =gUnk_080CD030
|
||||
ldrb r1, [r0, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0802A24C: .4byte gUnk_080CD030
|
||||
|
||||
thumb_func_start sub_0802A250
|
||||
sub_0802A250: @ 0x0802A250
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r1, #0
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r5, #0xe]
|
||||
ldr r0, _0802A2A8 @ =0xFFFD0000
|
||||
str r0, [r5, #0x20]
|
||||
bl Random
|
||||
ldr r1, _0802A2AC @ =gUnk_080CD03C
|
||||
movs r4, #3
|
||||
ands r0, r4
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
strh r0, [r5, #0x24]
|
||||
bl Random
|
||||
ldr r1, _0802A2B0 @ =gUnk_080CD040
|
||||
ands r0, r4
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
adds r0, #0x18
|
||||
strb r0, [r5, #0x15]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
adds r0, r5, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
movs r0, #0x66
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
cmp r0, #0
|
||||
beq _0802A2A6
|
||||
str r5, [r0, #0x50]
|
||||
_0802A2A6:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0802A2A8: .4byte 0xFFFD0000
|
||||
_0802A2AC: .4byte gUnk_080CD03C
|
||||
_0802A2B0: .4byte gUnk_080CD040
|
||||
|
||||
thumb_func_start sub_0802A2B4
|
||||
sub_0802A2B4: @ 0x0802A2B4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0xa0
|
||||
lsls r1, r1, #6
|
||||
bl sub_08003FC4
|
||||
cmp r0, #0
|
||||
bne _0802A2DC
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r0, [r2]
|
||||
movs r1, #7
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
movs r0, #0x84
|
||||
bl EnqueueSFX
|
||||
b _0802A2E2
|
||||
_0802A2DC:
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F69C
|
||||
_0802A2E2:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802A39C
|
||||
movs r0, #0x36
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r1, r0
|
||||
ble _0802A2FA
|
||||
adds r0, r4, #0
|
||||
bl sub_0802A334
|
||||
_0802A2FA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802A2FC
|
||||
sub_0802A2FC: @ 0x0802A2FC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetNextFrame
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0802A31A
|
||||
adds r0, r4, #0
|
||||
bl DeleteEntity
|
||||
b _0802A332
|
||||
_0802A31A:
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0802A32C
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
b _0802A332
|
||||
_0802A32C:
|
||||
adds r0, r4, #0
|
||||
bl sub_0802A39C
|
||||
_0802A332:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_0802A334
|
||||
sub_0802A334: @ 0x0802A334
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
ldr r2, _0802A380 @ =gRoomControls
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r2, r3]
|
||||
ldr r3, _0802A384 @ =gScreen
|
||||
subs r1, r1, r0
|
||||
ldrh r5, [r3, #0x16]
|
||||
adds r1, r1, r5
|
||||
asrs r1, r1, #3
|
||||
movs r5, #0x32
|
||||
ldrsh r0, [r4, r5]
|
||||
movs r5, #0xc
|
||||
ldrsh r2, [r2, r5]
|
||||
subs r0, r0, r2
|
||||
ldrh r3, [r3, #0x18]
|
||||
adds r0, r0, r3
|
||||
asrs r0, r0, #3
|
||||
ldr r3, _0802A388 @ =gUnk_02001A40
|
||||
movs r2, #0x1f
|
||||
ands r1, r2
|
||||
ands r0, r2
|
||||
lsls r0, r0, #5
|
||||
adds r1, r1, r0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
adds r1, r1, r0
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r3
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0802A38C
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #2
|
||||
b _0802A392
|
||||
.align 2, 0
|
||||
_0802A380: .4byte gRoomControls
|
||||
_0802A384: .4byte gScreen
|
||||
_0802A388: .4byte gUnk_02001A40
|
||||
_0802A38C:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x38
|
||||
movs r0, #1
|
||||
_0802A392:
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0802A39C
|
||||
sub_0802A39C: @ 0x0802A39C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
ldr r4, _0802A3EC @ =gPlayerEntity
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r4, r0]
|
||||
ldr r2, _0802A3F0 @ =gRoomControls
|
||||
movs r3, #0xa
|
||||
ldrsh r0, [r2, r3]
|
||||
ldr r3, _0802A3F4 @ =gScreen
|
||||
subs r1, r1, r0
|
||||
ldrh r6, [r3, #0x16]
|
||||
adds r1, r1, r6
|
||||
asrs r1, r1, #3
|
||||
movs r6, #0x32
|
||||
ldrsh r0, [r4, r6]
|
||||
movs r4, #0xc
|
||||
ldrsh r2, [r2, r4]
|
||||
subs r0, r0, r2
|
||||
ldrh r3, [r3, #0x18]
|
||||
adds r0, r0, r3
|
||||
subs r0, #0xa
|
||||
asrs r0, r0, #3
|
||||
ldr r3, _0802A3F8 @ =gUnk_02001A40
|
||||
movs r2, #0x1f
|
||||
ands r1, r2
|
||||
ands r0, r2
|
||||
lsls r0, r0, #5
|
||||
adds r1, r1, r0
|
||||
movs r6, #0x80
|
||||
lsls r6, r6, #3
|
||||
adds r1, r1, r6
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r3
|
||||
ldrh r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0802A3FC
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
b _0802A402
|
||||
.align 2, 0
|
||||
_0802A3EC: .4byte gPlayerEntity
|
||||
_0802A3F0: .4byte gRoomControls
|
||||
_0802A3F4: .4byte gScreen
|
||||
_0802A3F8: .4byte gUnk_02001A40
|
||||
_0802A3FC:
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
_0802A402:
|
||||
strb r0, [r5, #0x10]
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
@@ -29,3 +29,66 @@ gUnk_080CCE53:: @ 080CCE53
|
||||
|
||||
gUnk_080CCE64:: @ 080CCE64
|
||||
.incbin "baserom.gba", 0x0CCE64, 0x0000024
|
||||
|
||||
gUnk_080CCE88:: @ 080CCE88
|
||||
.incbin "baserom.gba", 0x0CCE88, 0x0000011
|
||||
|
||||
gUnk_080CCE99:: @ 080CCE99
|
||||
.incbin "baserom.gba", 0x0CCE99, 0x0000011
|
||||
|
||||
gUnk_080CCEAA:: @ 080CCEAA
|
||||
.incbin "baserom.gba", 0x0CCEAA, 0x0000011
|
||||
|
||||
gUnk_080CCEBB:: @ 080CCEBB
|
||||
.incbin "baserom.gba", 0x0CCEBB, 0x0000011
|
||||
|
||||
gUnk_080CCECC:: @ 080CCECC
|
||||
.incbin "baserom.gba", 0x0CCECC, 0x0000011
|
||||
|
||||
gUnk_080CCEDD:: @ 080CCEDD
|
||||
.incbin "baserom.gba", 0x0CCEDD, 0x0000011
|
||||
|
||||
gUnk_080CCEEE:: @ 080CCEEE
|
||||
.incbin "baserom.gba", 0x0CCEEE, 0x0000011
|
||||
|
||||
gUnk_080CCEFF:: @ 080CCEFF
|
||||
.incbin "baserom.gba", 0x0CCEFF, 0x0000011
|
||||
|
||||
gUnk_080CCF10:: @ 080CCF10
|
||||
.incbin "baserom.gba", 0x0CCF10, 0x0000005
|
||||
|
||||
gUnk_080CCF15:: @ 080CCF15
|
||||
.incbin "baserom.gba", 0x0CCF15, 0x0000005
|
||||
|
||||
gUnk_080CCF1A:: @ 080CCF1A
|
||||
.incbin "baserom.gba", 0x0CCF1A, 0x0000005
|
||||
|
||||
gUnk_080CCF1F:: @ 080CCF1F
|
||||
.incbin "baserom.gba", 0x0CCF1F, 0x0000005
|
||||
|
||||
gUnk_080CCF24:: @ 080CCF24
|
||||
.incbin "baserom.gba", 0x0CCF24, 0x000001D
|
||||
|
||||
gUnk_080CCF41:: @ 080CCF41
|
||||
.incbin "baserom.gba", 0x0CCF41, 0x000001D
|
||||
|
||||
gUnk_080CCF5E:: @ 080CCF5E
|
||||
.incbin "baserom.gba", 0x0CCF5E, 0x000001D
|
||||
|
||||
gUnk_080CCF7B:: @ 080CCF7B
|
||||
.incbin "baserom.gba", 0x0CCF7B, 0x000001D
|
||||
|
||||
gUnk_080CCF98:: @ 080CCF98
|
||||
.incbin "baserom.gba", 0x0CCF98, 0x0000011
|
||||
|
||||
gUnk_080CCFA9:: @ 080CCFA9
|
||||
.incbin "baserom.gba", 0x0CCFA9, 0x0000011
|
||||
|
||||
gUnk_080CCFBA:: @ 080CCFBA
|
||||
.incbin "baserom.gba", 0x0CCFBA, 0x0000011
|
||||
|
||||
gUnk_080CCFCB:: @ 080CCFCB
|
||||
.incbin "baserom.gba", 0x0CCFCB, 0x0000011
|
||||
|
||||
gUnk_080CCFDC:: @ 080CCFDC
|
||||
.incbin "baserom.gba", 0x0CCFDC, 0x0000054
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
|
||||
gUnk_080CD044:: @ 080CD044
|
||||
.incbin "baserom.gba", 0x0CD044, 0x0000025
|
||||
|
||||
gUnk_080CD069:: @ 080CD069
|
||||
.incbin "baserom.gba", 0x0CD069, 0x0000007
|
||||
|
||||
gUnk_080CD070:: @ 080CD070
|
||||
.incbin "baserom.gba", 0x0CD070, 0x000000C
|
||||
|
||||
@@ -3,87 +3,6 @@
|
||||
|
||||
.section .rodata
|
||||
|
||||
gUnk_080CCE88:: @ 080CCE88
|
||||
.incbin "baserom.gba", 0x0CCE88, 0x0000011
|
||||
|
||||
gUnk_080CCE99:: @ 080CCE99
|
||||
.incbin "baserom.gba", 0x0CCE99, 0x0000011
|
||||
|
||||
gUnk_080CCEAA:: @ 080CCEAA
|
||||
.incbin "baserom.gba", 0x0CCEAA, 0x0000011
|
||||
|
||||
gUnk_080CCEBB:: @ 080CCEBB
|
||||
.incbin "baserom.gba", 0x0CCEBB, 0x0000011
|
||||
|
||||
gUnk_080CCECC:: @ 080CCECC
|
||||
.incbin "baserom.gba", 0x0CCECC, 0x0000011
|
||||
|
||||
gUnk_080CCEDD:: @ 080CCEDD
|
||||
.incbin "baserom.gba", 0x0CCEDD, 0x0000011
|
||||
|
||||
gUnk_080CCEEE:: @ 080CCEEE
|
||||
.incbin "baserom.gba", 0x0CCEEE, 0x0000011
|
||||
|
||||
gUnk_080CCEFF:: @ 080CCEFF
|
||||
.incbin "baserom.gba", 0x0CCEFF, 0x0000011
|
||||
|
||||
gUnk_080CCF10:: @ 080CCF10
|
||||
.incbin "baserom.gba", 0x0CCF10, 0x0000005
|
||||
|
||||
gUnk_080CCF15:: @ 080CCF15
|
||||
.incbin "baserom.gba", 0x0CCF15, 0x0000005
|
||||
|
||||
gUnk_080CCF1A:: @ 080CCF1A
|
||||
.incbin "baserom.gba", 0x0CCF1A, 0x0000005
|
||||
|
||||
gUnk_080CCF1F:: @ 080CCF1F
|
||||
.incbin "baserom.gba", 0x0CCF1F, 0x0000005
|
||||
|
||||
gUnk_080CCF24:: @ 080CCF24
|
||||
.incbin "baserom.gba", 0x0CCF24, 0x000001D
|
||||
|
||||
gUnk_080CCF41:: @ 080CCF41
|
||||
.incbin "baserom.gba", 0x0CCF41, 0x000001D
|
||||
|
||||
gUnk_080CCF5E:: @ 080CCF5E
|
||||
.incbin "baserom.gba", 0x0CCF5E, 0x000001D
|
||||
|
||||
gUnk_080CCF7B:: @ 080CCF7B
|
||||
.incbin "baserom.gba", 0x0CCF7B, 0x000001D
|
||||
|
||||
gUnk_080CCF98:: @ 080CCF98
|
||||
.incbin "baserom.gba", 0x0CCF98, 0x0000011
|
||||
|
||||
gUnk_080CCFA9:: @ 080CCFA9
|
||||
.incbin "baserom.gba", 0x0CCFA9, 0x0000011
|
||||
|
||||
gUnk_080CCFBA:: @ 080CCFBA
|
||||
.incbin "baserom.gba", 0x0CCFBA, 0x0000011
|
||||
|
||||
gUnk_080CCFCB:: @ 080CCFCB
|
||||
.incbin "baserom.gba", 0x0CCFCB, 0x0000011
|
||||
|
||||
gUnk_080CCFDC:: @ 080CCFDC
|
||||
.incbin "baserom.gba", 0x0CCFDC, 0x0000054
|
||||
|
||||
gUnk_080CD030:: @ 080CD030
|
||||
.incbin "baserom.gba", 0x0CD030, 0x000000C
|
||||
|
||||
gUnk_080CD03C:: @ 080CD03C
|
||||
.incbin "baserom.gba", 0x0CD03C, 0x0000004
|
||||
|
||||
gUnk_080CD040:: @ 080CD040
|
||||
.incbin "baserom.gba", 0x0CD040, 0x0000004
|
||||
|
||||
gUnk_080CD044:: @ 080CD044
|
||||
.incbin "baserom.gba", 0x0CD044, 0x0000025
|
||||
|
||||
gUnk_080CD069:: @ 080CD069
|
||||
.incbin "baserom.gba", 0x0CD069, 0x0000007
|
||||
|
||||
gUnk_080CD070:: @ 080CD070
|
||||
.incbin "baserom.gba", 0x0CD070, 0x000000C
|
||||
|
||||
gUnk_080CD07C:: @ 080CD07C
|
||||
.incbin "baserom.gba", 0x0CD07C, 0x0000018
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@ SECTIONS {
|
||||
src/enemy/businessScrub.o(.text);
|
||||
src/enemy/rupeeLike.o(.text);
|
||||
src/enemy/madderpillar.o(.text);
|
||||
asm/waterDrop.o(.text);
|
||||
src/enemy/waterDrop.o(.text);
|
||||
asm/wallMaster.o(.text);
|
||||
src/enemy/bombPeahat.o(.text);
|
||||
asm/bombPeahat.o(.text);
|
||||
@@ -953,6 +953,8 @@ SECTIONS {
|
||||
data/animations/rupeeLike.o(.rodata);
|
||||
src/enemy/madderpillar.o(.rodata);
|
||||
data/animations/madderpillar.o(.rodata);
|
||||
src/enemy/waterDrop.o(.rodata);
|
||||
data/animations/waterDrop.o(.rodata);
|
||||
data/data_080CC6FC.o(.rodata);
|
||||
src/enemy.o(.rodata);
|
||||
data/data_080D3D94.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#include "enemy.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "screen.h"
|
||||
|
||||
void sub_0802A39C(Entity*);
|
||||
void sub_0802A334(Entity*);
|
||||
|
||||
extern u16 gUnk_02001A40[];
|
||||
|
||||
extern void (*const gUnk_080CD030[])(Entity*);
|
||||
extern const u8 gUnk_080CD03C[];
|
||||
extern const s8 gUnk_080CD040[];
|
||||
|
||||
void WaterDrop(Entity* this) {
|
||||
gUnk_080CD030[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0802A250(Entity* this) {
|
||||
Entity* ent;
|
||||
|
||||
this->action = 1;
|
||||
this->actionDelay = 0;
|
||||
this->field_0x20 = -0x30000;
|
||||
this->nonPlanarMovement = gUnk_080CD03C[Random() & 3];
|
||||
this->direction = gUnk_080CD040[Random() & 3] + 0x18;
|
||||
this->collisionLayer = 2;
|
||||
InitializeAnimation(this, 0);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
|
||||
ent = CreateObject(0x66, 0, 0);
|
||||
if (ent) {
|
||||
ent->parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802A2B4(Entity* this) {
|
||||
if (!sub_08003FC4(this, 0x2800)) {
|
||||
this->action = 2;
|
||||
this->spritePriority.b0 = 7;
|
||||
EnqueueSFX(0x84);
|
||||
} else {
|
||||
sub_0806F69C(this);
|
||||
}
|
||||
|
||||
sub_0802A39C(this);
|
||||
if (-8 < this->height.HALF.HI) {
|
||||
sub_0802A334(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802A2FC(Entity* this) {
|
||||
GetNextFrame(this);
|
||||
if (this->frames.all & 0x80) {
|
||||
DeleteEntity(this);
|
||||
} else if (this->frames.all & 1) {
|
||||
this->flags &= ~0x80;
|
||||
} else {
|
||||
sub_0802A39C(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0802A334(Entity* this) {
|
||||
u32 x = (this->x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1yOffset) >> 3;
|
||||
u32 y = (this->y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg2xOffset) >> 3;
|
||||
if (gUnk_02001A40[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
||||
this->collisionLayer = 2;
|
||||
} else {
|
||||
this->collisionLayer = 1;
|
||||
}
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
|
||||
void sub_0802A39C(Entity* this) {
|
||||
u32 x = (gPlayerEntity.x.HALF.HI - gRoomControls.roomScrollX + gScreen.bg.bg1yOffset) >> 3;
|
||||
u32 y = (gPlayerEntity.y.HALF.HI - gRoomControls.roomScrollY + gScreen.bg.bg2xOffset - 10) >> 3;
|
||||
if (gUnk_02001A40[(x & 0x1fU) + (y & 0x1fU) * 0x20 + 0x400]) {
|
||||
this->flags &= ~0x80;
|
||||
} else {
|
||||
this->flags |= 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
void (*const gUnk_080CD030[])(Entity*) = {
|
||||
sub_0802A250,
|
||||
sub_0802A2B4,
|
||||
sub_0802A2FC,
|
||||
};
|
||||
|
||||
const u8 gUnk_080CD03C[] = {
|
||||
0x60, 0x80,
|
||||
0xA0, 0xC0,
|
||||
};
|
||||
|
||||
const s8 gUnk_080CD040[] = {
|
||||
-2, -1, -1, -3,
|
||||
};
|
||||
// clang-format on
|
||||
Reference in New Issue
Block a user