decompile WaterDrop

This commit is contained in:
Behemoth
2020-09-18 23:57:50 +02:00
parent db2f3d3af8
commit 0299272ba5
6 changed files with 179 additions and 328 deletions
-246
View File
@@ -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
+63
View File
@@ -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
+14
View File
@@ -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
-81
View File
@@ -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
+3 -1
View File
@@ -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);
+99
View File
@@ -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