From 4341aba391f69531795c0f2bf5878506a765718a Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 25 Feb 2022 19:05:19 +0200 Subject: [PATCH] Decompile ladderUp --- asm/object/ladderUp.s | 534 ------------------------------------------ linker.ld | 2 +- src/object/ladderUp.c | 78 ++++++ 3 files changed, 79 insertions(+), 535 deletions(-) delete mode 100644 asm/object/ladderUp.s create mode 100644 src/object/ladderUp.c diff --git a/asm/object/ladderUp.s b/asm/object/ladderUp.s deleted file mode 100644 index cd53a0b7..00000000 --- a/asm/object/ladderUp.s +++ /dev/null @@ -1,534 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LadderUp -LadderUp: @ 0x0808DB54 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0xc] - cmp r0, #1 - beq _0808D4D8 - cmp r0, #1 - bgt _0808D518 - cmp r0, #0 - bne _0808D518 - ldrb r0, [r7, #0xe] - movs r1, #2 - cmp r0, #0 - beq _0808D46C - movs r1, #1 -_0808D46C: - strb r1, [r7, #0xc] - adds r1, r7, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #8 - strb r0, [r1] - adds r0, r7, #0 - movs r1, #0xa - bl InitializeAnimation - ldrb r0, [r7, #0xc] - cmp r0, #1 - bne _0808D48A - ldr r0, _0808D4CC @ =0x0000FF80 - strh r0, [r7, #0x36] -_0808D48A: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808D492 - b _0808D642 -_0808D492: - ldrh r1, [r7, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #0xc - strh r0, [r7, #0x32] - ldr r0, _0808D4D0 @ =0x00004023 - movs r2, #0x2e - ldrsh r1, [r7, r2] - ldr r3, _0808D4D4 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r5, #0x32 - ldrsh r2, [r7, r5] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r7, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _0808D642 - .align 2, 0 -_0808D4CC: .4byte 0x0000FF80 -_0808D4D0: .4byte 0x00004023 -_0808D4D4: .4byte gRoomControls -_0808D4D8: - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r7, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808D4E8 - b _0808D642 -_0808D4E8: - adds r0, r7, #0 - movs r1, #0x46 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0808D4FE - ldrh r0, [r1, #0x32] - adds r0, #8 - strh r0, [r1, #0x32] -_0808D4FE: - movs r0, #0x1e - movs r1, #0 - bl InitScreenShake - ldr r0, _0808D514 @ =0x0000010B - bl SoundReq - movs r0, #2 - strb r0, [r7, #0xc] - b _0808D642 - .align 2, 0 -_0808D514: .4byte 0x0000010B -_0808D518: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808D520 - b _0808D642 -_0808D520: - ldr r0, _0808D598 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r0, [r7, r3] - cmp r1, r0 - bge _0808D5AC - ldr r0, _0808D59C @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808D538 - b _0808D642 -_0808D538: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r1, _0808D5A0 @ =0x00004017 - cmp r0, r1 - beq _0808D546 - b _0808D642 -_0808D546: - ldr r0, _0808D5A4 @ =0x00004023 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r4, _0808D5A8 @ =gRoomControls - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r5, #0x3f - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - bl SetTile - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r5 - movs r2, #0x32 - ldrsh r1, [r7, r2] - ldrh r2, [r4, #8] - adds r2, #0x10 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r6] - bl sub_0807BA8C - b _0808D642 - .align 2, 0 -_0808D598: .4byte gPlayerEntity -_0808D59C: .4byte gPlayerState -_0808D5A0: .4byte 0x00004017 -_0808D5A4: .4byte 0x00004023 -_0808D5A8: .4byte gRoomControls -_0808D5AC: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r3, _0808D614 @ =0x00004017 - mov r8, r3 - cmp r0, r8 - beq _0808D642 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r5, _0808D618 @ =gRoomControls - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r7, #0 - adds r4, #0x38 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0808D61C - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - adds r2, #0x10 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - b _0808D642 - .align 2, 0 -_0808D614: .4byte 0x00004017 -_0808D618: .4byte gRoomControls -_0808D61C: - ldr r0, _0808D648 @ =0x00004014 - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r5, #8] - adds r3, #0x10 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4] - bl SetTile -_0808D642: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808D648: .4byte 0x00004014 - - -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0xc] - cmp r0, #1 - beq _0808DBE8 - cmp r0, #1 - bgt _0808DB6C - cmp r0, #0 - beq _0808DB72 - b _0808DC46 -_0808DB6C: - cmp r0, #2 - beq _0808DC2C - b _0808DC46 -_0808DB72: - ldrb r0, [r7, #0xe] - movs r1, #3 - cmp r0, #0 - beq _0808DB7C - movs r1, #1 -_0808DB7C: - strb r1, [r7, #0xc] - adds r1, r7, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #8 - strb r0, [r1] - adds r0, r7, #0 - movs r1, #0xa - bl InitializeAnimation - ldrb r0, [r7, #0xc] - cmp r0, #1 - bne _0808DB9A - ldr r0, _0808DBDC @ =0x0000FF80 - strh r0, [r7, #0x36] -_0808DB9A: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808DBA2 - b _0808DD72 -_0808DBA2: - ldrh r1, [r7, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #0xc - strh r0, [r7, #0x32] - ldr r0, _0808DBE0 @ =0x00004023 - movs r2, #0x2e - ldrsh r1, [r7, r2] - ldr r3, _0808DBE4 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r5, #0x32 - ldrsh r2, [r7, r5] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r7, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - b _0808DD72 - .align 2, 0 -_0808DBDC: .4byte 0x0000FF80 -_0808DBE0: .4byte 0x00004023 -_0808DBE4: .4byte gRoomControls -_0808DBE8: - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r7, #0 - bl GravityUpdate - cmp r0, #0 - beq _0808DBF8 - b _0808DD72 -_0808DBF8: - adds r0, r7, #0 - movs r1, #0x46 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0808DC0E - ldrh r0, [r1, #0x32] - adds r0, #8 - strh r0, [r1, #0x32] -_0808DC0E: - movs r0, #0x1e - movs r1, #0 - bl InitScreenShake - ldr r0, _0808DC28 @ =0x0000010B - bl SoundReq - movs r0, #2 - strb r0, [r7, #0xc] - movs r0, #0x3c - strb r0, [r7, #0xe] - b _0808DD72 - .align 2, 0 -_0808DC28: .4byte 0x0000010B -_0808DC2C: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _0808DC3A - b _0808DD72 -_0808DC3A: - movs r0, #3 - strb r0, [r7, #0xc] - movs r0, #0x73 - bl SoundReq - b _0808DD72 -_0808DC46: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _0808DC4E - b _0808DD72 -_0808DC4E: - ldr r0, _0808DCC8 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r0, [r7, r3] - cmp r1, r0 - bge _0808DCDC - ldr r0, _0808DCCC @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808DC66 - b _0808DD72 -_0808DC66: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r1, _0808DCD0 @ =0x00004017 - cmp r0, r1 - beq _0808DC74 - b _0808DD72 -_0808DC74: - ldr r0, _0808DCD4 @ =0x00004023 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r4, _0808DCD8 @ =gRoomControls - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r5, #0x3f - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - bl SetTile - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r5 - movs r2, #0x32 - ldrsh r1, [r7, r2] - ldrh r2, [r4, #8] - adds r2, #0x10 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r6] - bl sub_0807BA8C - b _0808DD72 - .align 2, 0 -_0808DCC8: .4byte gPlayerEntity -_0808DCCC: .4byte gPlayerState -_0808DCD0: .4byte 0x00004017 -_0808DCD4: .4byte 0x00004023 -_0808DCD8: .4byte gRoomControls -_0808DCDC: - adds r0, r7, #0 - bl GetTileTypeByEntity - ldr r3, _0808DD44 @ =0x00004017 - mov r8, r3 - cmp r0, r8 - beq _0808DD72 - movs r5, #0x2e - ldrsh r1, [r7, r5] - ldr r5, _0808DD48 @ =gRoomControls - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r7, #0 - adds r4, #0x38 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0808DD4C - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r0, [r5, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r7, r2] - ldrh r2, [r5, #8] - adds r2, #0x10 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4] - mov r0, r8 - bl SetTile - b _0808DD72 - .align 2, 0 -_0808DD44: .4byte 0x00004017 -_0808DD48: .4byte gRoomControls -_0808DD4C: - ldr r0, _0808DD78 @ =0x00004014 - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - movs r3, #0x32 - ldrsh r2, [r7, r3] - ldrh r3, [r5, #8] - adds r3, #0x10 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4] - bl SetTile -_0808DD72: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808DD78: .4byte 0x00004014 -.endif diff --git a/linker.ld b/linker.ld index 3686cc5e..2a41a4dd 100644 --- a/linker.ld +++ b/linker.ld @@ -710,7 +710,7 @@ SECTIONS { src/object/object3E.o(.text); src/object/giantLeaf.o(.text); src/object/fairy.o(.text); - asm/object/ladderUp.o(.text); + src/object/ladderUp.o(.text); asm/object/object42.o(.text); asm/object/object43.o(.text); asm/object/object44.o(.text); diff --git a/src/object/ladderUp.c b/src/object/ladderUp.c new file mode 100644 index 00000000..7cdd361b --- /dev/null +++ b/src/object/ladderUp.c @@ -0,0 +1,78 @@ +#include "entity.h" +#include "room.h" +#include "player.h" +#include "asm.h" +#include "sound.h" +#include "functions.h" +#include "effects.h" + +void LadderUp(Entity* this) { + Entity* fxEnt; + u32 uVar4; + + switch (this->action) { + case 0: + if (this->actionDelay) { + uVar4 = 1; + } else { +#ifndef EU + uVar4 = 3; +#else + uVar4 = 2; +#endif + } + this->action = uVar4; + this->spriteOffsetY += 8; + InitializeAnimation(this, 10); + if (this->action == 1) { + this->z.HALF.HI = 0xff80; + } + if (this->type2) { + return; + } + this->y.HALF.HI = (this->y.HALF.HI & 0xfff0) + 0xc; + SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer); + break; + case 1: + if (GravityUpdate(this, 0x1000) == 0) { + fxEnt = CreateFx(this, FX_GIANT_EXPLOSION, 0x40); + if (fxEnt) { + fxEnt->y.HALF.HI += 8; + } + InitScreenShake(0x1e, 0); + SoundReq(SFX_10B); + this->action = 2; +#ifndef EU + this->actionDelay = 0x3c; +#endif + } + break; + case 2: +#ifndef EU + if (--this->actionDelay) { + return; + } + this->action = 3; + SoundReq(SFX_SECRET_BIG); + break; +#endif + default: + if (this->type2 == 0) { + if (gPlayerEntity.y.HALF.HI < this->y.HALF.HI) { + if (gPlayerState.floor_type != 0x1e && (GetTileTypeByEntity(this) == 0x4017)) { + SetTile(0x4023, COORD_TO_TILE(this), this->collisionLayer); + sub_0807BA8C(COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } + } else { + if (GetTileTypeByEntity(this) != 0x4017) { + SetTile(0x4017, COORD_TO_TILE(this), this->collisionLayer); + if (this->type == 0) { + SetTile(0x4017, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } else { + SetTile(0x4014, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer); + } + } + } + } + } +}