Decompile Object3E

This commit is contained in:
octorock 2022-02-13 11:55:12 +01:00
parent e20bdddf2f
commit 9036135c6f
6 changed files with 258 additions and 731 deletions

View File

@ -1,682 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Object3E
Object3E: @ 0x0808D0C8
push {lr}
ldr r2, _0808D0DC @ =gUnk_081216DC
ldrb r1, [r0, #0xa]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0808D0DC: .4byte gUnk_081216DC
thumb_func_start sub_0808D0E0
sub_0808D0E0: @ 0x0808D0E0
push {r4, r5, r6, lr}
adds r5, r0, #0
ldrb r6, [r5, #0xc]
cmp r6, #1
beq _0808D12C
cmp r6, #1
bgt _0808D0F4
cmp r6, #0
beq _0808D0FA
b _0808D192
_0808D0F4:
cmp r6, #2
beq _0808D150
b _0808D192
_0808D0FA:
movs r4, #1
strb r4, [r5, #0xc]
bl Random
movs r1, #0x1f
ands r0, r1
movs r1, #0x40
subs r1, r1, r0
strb r1, [r5, #0xe]
strb r6, [r5, #0x1e]
strb r6, [r5, #0x14]
ldrb r0, [r5, #0x19]
movs r1, #0xc0
orrs r0, r1
strb r0, [r5, #0x19]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
adds r0, r5, #0
adds r0, #0x38
strb r4, [r0]
b _0808D192
_0808D12C:
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D192
movs r0, #8
strb r0, [r5, #0xe]
movs r0, #4
strb r0, [r5, #0xf]
movs r0, #2
strb r0, [r5, #0xc]
bl Random
movs r1, #3
ands r0, r1
strb r0, [r5, #0x14]
b _0808D192
_0808D150:
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
movs r1, #0xff
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D192
ldrb r0, [r5, #0xf]
subs r0, #1
strb r0, [r5, #0xf]
ands r0, r1
cmp r0, #0
bne _0808D180
strb r0, [r5, #0x1e]
movs r0, #1
strb r0, [r5, #0xc]
bl Random
movs r1, #0x1f
ands r0, r1
movs r1, #0x40
subs r1, r1, r0
strb r1, [r5, #0xe]
b _0808D192
_0808D180:
movs r0, #8
strb r0, [r5, #0xe]
ldrb r1, [r5, #0x14]
ldrb r0, [r5, #0x1e]
movs r2, #0
cmp r0, r1
beq _0808D190
adds r2, r1, #0
_0808D190:
strb r2, [r5, #0x1e]
_0808D192:
pop {r4, r5, r6, pc}
thumb_func_start sub_0808D194
sub_0808D194: @ 0x0808D194
push {r4, r5, r6, lr}
adds r5, r0, #0
ldrb r1, [r5, #0xc]
cmp r1, #1
beq _0808D234
cmp r1, #1
bgt _0808D1A8
cmp r1, #0
beq _0808D1AE
b _0808D234
_0808D1A8:
cmp r1, #2
beq _0808D1FC
b _0808D234
_0808D1AE:
movs r0, #1
strb r0, [r5, #0xc]
movs r0, #8
strb r0, [r5, #0xe]
strb r1, [r5, #0xf]
strb r1, [r5, #0x1e]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
ldr r0, _0808D1F4 @ =0x00004069
movs r2, #0x2e
ldrsh r1, [r5, r2]
ldr r3, _0808D1F8 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
subs r1, #0x40
movs r2, #1
bl SetTile
b _0808D234
.align 2, 0
_0808D1F4: .4byte 0x00004069
_0808D1F8: .4byte gRoomControls
_0808D1FC:
ldr r0, _0808D274 @ =gRoomTransition
ldr r3, [r0]
movs r0, #3
ands r3, r0
cmp r3, #0
bne _0808D234
ldr r4, _0808D278 @ =gScreen
ldrb r2, [r5, #0xd]
lsls r1, r2, #8
movs r0, #0x10
subs r0, r0, r2
orrs r1, r0
adds r0, r4, #0
adds r0, #0x68
strh r1, [r0]
ldrb r0, [r5, #0xd]
adds r0, #1
strb r0, [r5, #0xd]
lsls r1, r1, #0x10
movs r0, #0x80
lsls r0, r0, #0x15
cmp r1, r0
bne _0808D234
adds r0, r4, #0
adds r0, #0x66
strh r3, [r0]
bl DeleteThisEntity
_0808D234:
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D272
movs r0, #8
strb r0, [r5, #0xe]
ldrb r0, [r5, #0xa]
cmp r0, #9
bne _0808D24E
movs r0, #2
strb r0, [r5, #0xe]
_0808D24E:
ldr r4, _0808D27C @ =gUnk_08121704
ldrb r0, [r5, #0xf]
adds r1, r0, #1
strb r1, [r5, #0xf]
lsls r0, r0, #0x18
lsrs r0, r0, #0x17
adds r0, r0, r4
ldrh r1, [r0]
adds r0, r5, #0
bl ChangeObjPalette
ldrb r0, [r5, #0xf]
lsls r0, r0, #1
adds r0, r0, r4
ldrh r0, [r0]
cmp r0, #0
bne _0808D272
strb r0, [r5, #0xf]
_0808D272:
pop {r4, r5, r6, pc}
.align 2, 0
_0808D274: .4byte gRoomTransition
_0808D278: .4byte gScreen
_0808D27C: .4byte gUnk_08121704
thumb_func_start sub_0808D280
sub_0808D280: @ 0x0808D280
push {r4, lr}
sub sp, #4
movs r4, #0
str r4, [sp]
movs r0, #6
movs r1, #0x3e
movs r2, #6
movs r3, #9
bl FindEntity
adds r2, r0, #0
cmp r2, #0
beq _0808D2C4
movs r0, #2
strb r0, [r2, #0xc]
strb r4, [r2, #0xd]
ldrb r1, [r2, #0x19]
subs r0, #0xf
ands r0, r1
movs r1, #4
orrs r0, r1
strb r0, [r2, #0x19]
ldr r1, _0808D2C8 @ =gScreen
adds r2, r1, #0
adds r2, #0x66
movs r0, #0xc8
lsls r0, r0, #3
strh r0, [r2]
adds r1, #0x68
movs r0, #0x10
strh r0, [r1]
movs r0, #0xf6
bl SoundReq
_0808D2C4:
add sp, #4
pop {r4, pc}
.align 2, 0
_0808D2C8: .4byte gScreen
thumb_func_start sub_0808D2CC
sub_0808D2CC: @ 0x0808D2CC
push {lr}
sub sp, #4
movs r0, #0
str r0, [sp]
movs r0, #6
movs r1, #0x3e
movs r2, #6
movs r3, #1
bl FindEntity
adds r1, r0, #0
cmp r1, #0
beq _0808D2F2
movs r0, #9
strb r0, [r1, #0xa]
adds r0, r1, #0
movs r1, #2
bl SetDefaultPriority
_0808D2F2:
add sp, #4
pop {pc}
.align 2, 0
thumb_func_start nullsub_521
nullsub_521: @ 0x0808D2F8
bx lr
.align 2, 0
thumb_func_start sub_0808D2FC
sub_0808D2FC: @ 0x0808D2FC
push {r4, r5, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _0808D31C
strb r0, [r4, #0xc]
strb r0, [r4, #0x1e]
adds r2, r4, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
adds r0, r4, #0
bl sub_0807DD64
_0808D31C:
movs r0, #0x2e
ldrsh r5, [r4, r0]
adds r0, r4, #0
movs r1, #0
bl ExecuteScriptForEntity
adds r0, r4, #0
bl HandleEntity0x82Actions
ldr r0, _0808D354 @ =gRoomControls
ldrh r0, [r0, #0x16]
cmp r0, #0
beq _0808D350
movs r1, #0x2e
ldrsh r0, [r4, r1]
cmp r5, r0
beq _0808D350
ldr r0, _0808D358 @ =gRoomTransition
ldr r0, [r0]
movs r1, #8
ands r0, r1
cmp r0, #0
bne _0808D350
ldr r0, _0808D35C @ =0x0000010F
bl SoundReq
_0808D350:
pop {r4, r5, pc}
.align 2, 0
_0808D354: .4byte gRoomControls
_0808D358: .4byte gRoomTransition
_0808D35C: .4byte 0x0000010F
thumb_func_start sub_0808D360
sub_0808D360: @ 0x0808D360
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _0808D382
strb r0, [r4, #0xc]
movs r0, #1
strb r0, [r4, #0x1e]
adds r2, r4, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
adds r0, r4, #0
bl sub_0807DD64
_0808D382:
adds r0, r4, #0
movs r1, #0
bl ExecuteScriptForEntity
adds r0, r4, #0
bl HandleEntity0x82Actions
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0808D394
sub_0808D394: @ 0x0808D394
push {r4, r5, lr}
adds r5, r0, #0
ldrb r0, [r5, #0xc]
cmp r0, #0
bne _0808D3C4
movs r0, #1
strb r0, [r5, #0xc]
movs r0, #8
strb r0, [r5, #0xe]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
ldr r1, _0808D3FC @ =gScreen
adds r2, r1, #0
adds r2, #0x66
movs r0, #0xc8
lsls r0, r0, #3
strh r0, [r2]
adds r1, #0x68
ldr r0, _0808D400 @ =0x00001003
strh r0, [r1]
_0808D3C4:
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D3F8
movs r0, #2
strb r0, [r5, #0xe]
ldr r4, _0808D404 @ =gUnk_08121720
ldrb r0, [r5, #0xf]
adds r1, r0, #1
strb r1, [r5, #0xf]
lsls r0, r0, #0x18
lsrs r0, r0, #0x17
adds r0, r0, r4
ldrh r1, [r0]
adds r0, r5, #0
bl sub_0801D28C
ldrb r0, [r5, #0xf]
lsls r0, r0, #1
adds r0, r0, r4
ldrh r0, [r0]
cmp r0, #0
bne _0808D3F8
strb r0, [r5, #0xf]
_0808D3F8:
pop {r4, r5, pc}
.align 2, 0
_0808D3FC: .4byte gScreen
_0808D400: .4byte 0x00001003
_0808D404: .4byte gUnk_08121720
thumb_func_start sub_0808D408
sub_0808D408: @ 0x0808D408
push {lr}
adds r3, r0, #0
ldrb r0, [r3, #0xc]
cmp r0, #0
bne _0808D458
movs r1, #1
strb r1, [r3, #0xc]
ldrb r0, [r3, #0x19]
movs r2, #0xc0
orrs r0, r2
strb r0, [r3, #0x19]
movs r0, #0x29
adds r0, r0, r3
mov ip, r0
ldrb r0, [r0]
movs r2, #7
orrs r0, r2
mov r2, ip
strb r0, [r2]
ldrb r2, [r3, #0x19]
movs r0, #0xd
rsbs r0, r0, #0
ands r0, r2
movs r2, #4
orrs r0, r2
strb r0, [r3, #0x19]
ldrb r0, [r3, #0xb]
strb r0, [r3, #0x1e]
ldrb r0, [r3, #0xb]
subs r1, r1, r0
lsls r1, r1, #9
movs r0, #0x80
lsls r0, r0, #1
adds r1, r1, r0
movs r2, #0xc0
rsbs r2, r2, #0
adds r0, r3, #0
movs r3, #0
bl sub_0805EC9C
_0808D458:
pop {pc}
.align 2, 0
thumb_func_start sub_0808D45C
sub_0808D45C: @ 0x0808D45C
push {lr}
ldr r2, _0808D470 @ =gUnk_0812172C
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0808D470: .4byte gUnk_0812172C
thumb_func_start sub_0808D474
sub_0808D474: @ 0x0808D474
push {r4, r5, lr}
adds r5, r0, #0
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
ldrb r0, [r5, #0xb]
strb r0, [r5, #0x1e]
movs r1, #2
strb r1, [r5, #0xc]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D4D4
movs r0, #0x7c
bl CheckLocalFlag
adds r1, r0, #0
cmp r1, #0
bne _0808D4D4
movs r0, #1
strb r0, [r5, #0xc]
strb r1, [r5, #0xe]
ldrb r1, [r5, #0x19]
subs r0, #0xe
ands r0, r1
movs r1, #4
orrs r0, r1
strb r0, [r5, #0x19]
ldr r1, _0808D4CC @ =gScreen
adds r2, r1, #0
adds r2, #0x66
movs r0, #0xc8
lsls r0, r0, #3
strh r0, [r2]
adds r1, #0x68
movs r0, #0x80
lsls r0, r0, #5
strh r0, [r1]
ldr r0, _0808D4D0 @ =0x00000179
bl SoundReq
b _0808D50E
.align 2, 0
_0808D4CC: .4byte gScreen
_0808D4D0: .4byte 0x00000179
_0808D4D4:
movs r0, #8
strb r0, [r5, #0xe]
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r3, _0808D510 @ =gRoomControls
ldrh r1, [r3, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
ldrb r0, [r5, #0xb]
cmp r0, #0
beq _0808D500
subs r4, #0x40
_0808D500:
ldr r0, _0808D514 @ =0x00004069
adds r1, r5, #0
adds r1, #0x38
ldrb r2, [r1]
adds r1, r4, #0
bl SetTile
_0808D50E:
pop {r4, r5, pc}
.align 2, 0
_0808D510: .4byte gRoomControls
_0808D514: .4byte 0x00004069
thumb_func_start sub_0808D518
sub_0808D518: @ 0x0808D518
push {r4, r5, r6, lr}
adds r5, r0, #0
ldr r0, _0808D58C @ =gRoomTransition
ldr r2, [r0]
movs r0, #3
ands r2, r0
cmp r2, #0
bne _0808D58A
ldr r3, _0808D590 @ =gScreen
ldrb r0, [r5, #0xe]
movs r1, #0x10
subs r1, r1, r0
lsls r1, r1, #8
orrs r1, r0
adds r0, r3, #0
adds r0, #0x68
strh r1, [r0]
ldrb r0, [r5, #0xe]
adds r0, #1
strb r0, [r5, #0xe]
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
cmp r1, #0x10
bne _0808D58A
movs r0, #2
strb r0, [r5, #0xc]
movs r0, #8
strb r0, [r5, #0xe]
ldrb r1, [r5, #0x19]
subs r0, #0x15
ands r0, r1
strb r0, [r5, #0x19]
adds r0, r3, #0
adds r0, #0x66
strh r2, [r0]
ldr r0, _0808D594 @ =0x00004069
movs r2, #0x2e
ldrsh r1, [r5, r2]
ldr r3, _0808D598 @ =gRoomControls
ldrh r2, [r3, #6]
subs r1, r1, r2
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r6, #0x32
ldrsh r2, [r5, r6]
ldrh r3, [r3, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r4
lsls r2, r2, #6
orrs r1, r2
adds r2, r5, #0
adds r2, #0x38
ldrb r2, [r2]
bl SetTile
_0808D58A:
pop {r4, r5, r6, pc}
.align 2, 0
_0808D58C: .4byte gRoomTransition
_0808D590: .4byte gScreen
_0808D594: .4byte 0x00004069
_0808D598: .4byte gRoomControls
thumb_func_start sub_0808D59C
sub_0808D59C: @ 0x0808D59C
push {r4, r5, lr}
adds r5, r0, #0
ldrb r0, [r5, #0xe]
subs r0, #1
strb r0, [r5, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808D5D4
movs r0, #8
strb r0, [r5, #0xe]
ldr r4, _0808D5D8 @ =gUnk_08121738
ldrb r0, [r5, #0xf]
adds r1, r0, #1
strb r1, [r5, #0xf]
lsls r0, r0, #0x18
lsrs r0, r0, #0x17
adds r0, r0, r4
ldrh r1, [r0]
adds r0, r5, #0
bl ChangeObjPalette
ldrb r0, [r5, #0xf]
lsls r0, r0, #1
adds r0, r0, r4
ldrh r0, [r0]
cmp r0, #0
bne _0808D5D4
strb r0, [r5, #0xf]
_0808D5D4:
pop {r4, r5, pc}
.align 2, 0
_0808D5D8: .4byte gUnk_08121738

View File

@ -43640,21 +43640,6 @@
"start": 1185480,
"size": 20
},
{
"path": "object3E/gUnk_08121704.bin",
"start": 1185540,
"size": 28
},
{
"path": "object3E/gUnk_08121720.bin",
"start": 1185568,
"size": 12
},
{
"path": "object3E/gUnk_08121738.bin",
"start": 1185592,
"size": 24
},
{
"path": "giantLeaf/gUnk_08121750.bin",
"start": 1185616,

View File

@ -1,31 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_081216DC:: @ 081216DC
.4byte sub_0808D0E0
.4byte sub_0808D194
.4byte sub_0808D194
.4byte nullsub_521
.4byte sub_0808D2FC
.4byte sub_0808D360
.4byte sub_0808D394
.4byte sub_0808D408
.4byte sub_0808D45C
.4byte sub_0808D194
gUnk_08121704:: @ 08121704
.incbin "object3E/gUnk_08121704.bin"
gUnk_08121720:: @ 08121720
.incbin "object3E/gUnk_08121720.bin"
gUnk_0812172C:: @ 0812172C
.4byte sub_0808D474
.4byte sub_0808D518
.4byte sub_0808D59C
gUnk_08121738:: @ 08121738
.incbin "object3E/gUnk_08121738.bin"

View File

@ -288,7 +288,7 @@ void Object3A(Entity*);
void MacroMushromStalks(Entity*);
void MacroPlayer(Entity*);
void Object3D(Entity*);
void Object3E(Entity*);
void Object3E();
void GiantLeaf(Entity*);
void Fairy(Entity*);
void LadderUp(Entity*);

View File

@ -709,7 +709,7 @@ SECTIONS {
asm/object/code_0808C964.o(.text);
asm/object/macroPlayer.o(.text);
asm/object/object3D.o(.text);
asm/object/object3E.o(.text);
src/object/object3E.o(.text);
src/object/giantLeaf.o(.text);
asm/object/fairy.o(.text);
asm/object/ladderUp.o(.text);
@ -1445,7 +1445,7 @@ SECTIONS {
data/const/object/object76.o(.rodata);
data/const/object/macroPlayer.o(.rodata);
data/const/object/object3D.o(.rodata);
data/const/object/object3E.o(.rodata);
src/object/object3E.o(.rodata);
data/const/object/giantLeaf.o(.rodata);
data/const/object/fairy.o(.rodata);
data/const/object/object42.o(.rodata);

255
src/object/object3E.c Normal file
View File

@ -0,0 +1,255 @@
/**
* @file object3E.c
* @ingroup Objects
*
* @brief Object3E object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
#include "screen.h"
typedef struct {
/*0x00*/ Entity base;
} Object3EEntity;
void Object3E_Type0(Object3EEntity*);
void Object3E_Type1(Object3EEntity*);
void Object3E_Type3(Object3EEntity*);
void Object3E_Type4(Object3EEntity*);
void Object3E_Type5(Object3EEntity*);
void Object3E_Type6(Object3EEntity*);
void Object3E_Type7(Object3EEntity*);
void Object3E_Type8(Object3EEntity*);
void Object3E_Type8_Init(Object3EEntity*);
void Object3E_Type8_Action1(Object3EEntity*);
void Object3E_Type8_Action2(Object3EEntity*);
void Object3E(Object3EEntity* this) {
static void (*const Object3E_Types[])(Object3EEntity*) = {
Object3E_Type0, Object3E_Type1, Object3E_Type1, Object3E_Type3, Object3E_Type4,
Object3E_Type5, Object3E_Type6, Object3E_Type7, Object3E_Type8, Object3E_Type1,
};
Object3E_Types[super->type](this);
}
void Object3E_Type0(Object3EEntity* this) {
u32 tmp;
u32 tmp2;
switch (super->action) {
case 0:
super->action = 1;
super->actionDelay = 0x40 - (Random() & 0x1f);
super->frameIndex = 0;
super->animationState = 0;
super->spriteRendering.b3 = 3;
super->spritePriority.b0 = 7;
super->collisionLayer = 1;
break;
case 1:
if (--super->actionDelay == 0) {
super->actionDelay = 8;
super->field_0xf = 4;
super->action = 2;
super->animationState = Random() & 3;
}
break;
case 2:
if (--super->actionDelay == 0) {
if (--super->field_0xf == 0) {
super->frameIndex = 0;
super->action = 1;
super->actionDelay = 0x40 - (Random() & 0x1f);
} else {
super->actionDelay = 8;
tmp2 = super->animationState;
if (super->frameIndex != tmp2) {
tmp = tmp2;
} else {
tmp = 0;
}
super->frameIndex = tmp;
}
}
break;
}
}
void Object3E_Type1(Object3EEntity* this) {
static const u16 gUnk_08121704[] = {
0x12d, 0x12e, 0x12f, 0x130, 0x131, 0x132, 0x133, 0x132, 0x131, 0x130, 0x12f, 0x12e, 0x12d, 0,
};
switch (super->action) {
case 0:
super->action = 1;
super->actionDelay = 8;
super->field_0xf = 0;
super->frameIndex = 0;
super->spritePriority.b0 = 7;
SetTile(0x4069, COORD_TO_TILE(super) - 0x40, 1);
break;
case 2:
if ((gRoomTransition.frameCount & 3U) == 0) {
gScreen.controls.alphaBlend = (super->subAction << 8) | (0x10 - super->subAction);
super->subAction++;
if (gScreen.controls.alphaBlend == 0x1000) {
gScreen.controls.layerFXControl = 0;
DeleteThisEntity();
}
}
break;
case 1:
break;
}
if (--super->actionDelay == 0) {
super->actionDelay = 8;
if (super->type == 9) {
super->actionDelay = 2;
}
ChangeObjPalette(super, gUnk_08121704[super->field_0xf++]);
if (gUnk_08121704[super->field_0xf] == 0) {
super->field_0xf = 0;
}
}
}
void sub_0808D280(void) {
Entity* obj = FindEntity(6, OBJECT_3E, 6, 9, 0);
if (obj != NULL) {
obj->action = 2;
obj->subAction = 0;
obj->spriteRendering.alphaBlend = 1;
gScreen.controls.layerFXControl = 0x640;
gScreen.controls.alphaBlend = 0x10;
SoundReq(SFX_EVAPORATE);
}
}
void sub_0808D2CC(void) {
Entity* obj = FindEntity(6, OBJECT_3E, 6, 1, 0);
if (obj != NULL) {
obj->type = 9;
SetDefaultPriority(obj, 2);
}
}
void Object3E_Type3(Object3EEntity* this) {
}
void Object3E_Type4(Object3EEntity* this) {
s32 tmp;
if (super->action == 0) {
super->action = 0;
super->frameIndex = 0;
super->spritePriority.b0 = 7;
sub_0807DD64(super);
}
tmp = super->x.HALF.HI;
ExecuteScriptForEntity(super, NULL);
HandleEntity0x82Actions(super);
if (((gRoomControls.shake_duration != 0) && (tmp != super->x.HALF.HI)) && ((gRoomTransition.frameCount & 8) == 0)) {
SoundReq(SFX_10F);
}
}
void Object3E_Type5(Object3EEntity* this) {
if (super->action == 0) {
super->action = 0;
super->frameIndex = 1;
super->spritePriority.b0 = 7;
sub_0807DD64(super);
}
ExecuteScriptForEntity(super, NULL);
HandleEntity0x82Actions(super);
}
void Object3E_Type6(Object3EEntity* this) {
static const u16 gUnk_08121720[] = { 0x149, 0x14a, 0x14b, 0x14a, 0, 0 };
if (super->action == 0) {
super->action = 1;
super->actionDelay = 8;
super->spritePriority.b0 = 7;
gScreen.controls.layerFXControl = 0x640;
gScreen.controls.alphaBlend = 0x1003;
}
if (--super->actionDelay == 0) {
super->actionDelay = 2;
sub_0801D28C(super, gUnk_08121720[super->field_0xf++]);
if (gUnk_08121720[super->field_0xf] == 0) {
super->field_0xf = 0;
}
}
}
void Object3E_Type7(Object3EEntity* this) {
if (super->action == 0) {
super->action = 1;
super->spriteRendering.b3 = 3;
super->spritePriority.b0 = 7;
super->spriteRendering.alphaBlend = 1;
super->frameIndex = super->type2;
sub_0805EC9C(super, (1 - super->type2) * 0x200 + 0x100, 0xffffff40, 0);
}
}
void Object3E_Type8(Object3EEntity* this) {
static void (*const Object3E_Type8_Actions[])(Object3EEntity*) = {
Object3E_Type8_Init,
Object3E_Type8_Action1,
Object3E_Type8_Action2,
};
Object3E_Type8_Actions[super->action](this);
}
void Object3E_Type8_Init(Object3EEntity* this) {
u32 tilePosition;
super->spritePriority.b0 = 7;
super->frameIndex = super->type2;
super->action = 2;
if ((super->type2 == 0) && (CheckLocalFlag(0x7c) == 0)) {
super->action = 1;
super->actionDelay = 0;
super->spriteRendering.alphaBlend = 1;
gScreen.controls.layerFXControl = 0x640;
gScreen.controls.alphaBlend = 0x1000;
SoundReq(SFX_179);
} else {
super->actionDelay = 8;
tilePosition = COORD_TO_TILE(super);
if (super->type2 != 0) {
tilePosition -= 0x40;
}
SetTile(0x4069, tilePosition, super->collisionLayer);
}
}
void Object3E_Type8_Action1(Object3EEntity* this) {
if ((gRoomTransition.frameCount & 3U) == 0) {
gScreen.controls.alphaBlend = ((0x10 - super->actionDelay) * 0x100) | super->actionDelay;
super->actionDelay++;
if (gScreen.controls.alphaBlend == 0x10) {
super->action = 2;
super->actionDelay = 8;
super->spriteRendering.alphaBlend = 0;
gScreen.controls.layerFXControl = 0;
SetTile(0x4069, COORD_TO_TILE(super), super->collisionLayer);
}
}
}
void Object3E_Type8_Action2(Object3EEntity* this) {
static const u16 gUnk_08121738[] = {
0x14c, 0x14d, 0x14e, 0x14f, 0x150, 0x151, 0x150, 0x14f, 0x14e, 0x14d, 0x14c, 0,
};
if (--super->actionDelay == 0) {
super->actionDelay = 8;
ChangeObjPalette(super, gUnk_08121738[super->field_0xf++]);
if (gUnk_08121738[super->field_0xf] == 0) {
super->field_0xf = 0;
}
}
}