railtrack.c

This commit is contained in:
theo3 2020-07-12 15:54:01 -07:00
parent cdeae36d09
commit 4cffc35604
10 changed files with 612 additions and 909 deletions

View File

@ -6,476 +6,6 @@
.text
thumb_func_start Guard
Guard: @ 0x08063CF8
push {lr}
adds r2, r0, #0
ldrb r1, [r2, #0x10]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _08063D1C
ldr r0, _08063D18 @ =gUnk_0810F544
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
b _08063D22
.align 2, 0
_08063D18: .4byte gUnk_0810F544
_08063D1C:
adds r0, r2, #0
bl sub_08063D24
_08063D22:
pop {pc}
thumb_func_start sub_08063D24
sub_08063D24: @ 0x08063D24
push {r4, lr}
adds r4, r0, #0
ldr r1, _08063D40 @ =gUnk_0810F550
ldrb r0, [r4, #0xc]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
bl sub_0806ED78
pop {r4, pc}
.align 2, 0
_08063D40: .4byte gUnk_0810F550
thumb_func_start sub_08063D44
sub_08063D44: @ 0x08063D44
push {r4, lr}
adds r4, r0, #0
ldr r0, _08063DA0 @ =gUnk_03003DBC
ldrb r0, [r0]
cmp r0, #0x46
bhi _08063DC6
ldrb r0, [r4, #9]
movs r1, #0x15
eors r0, r1
rsbs r1, r0, #0
orrs r1, r0
lsrs r1, r1, #0x1f
lsls r1, r1, #4
ldr r0, _08063DA4 @ =gUnk_0810F524
adds r1, r1, r0
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _08063DC6
adds r0, r4, #0
movs r1, #4
bl InitializeAnimation
ldr r0, _08063DA8 @ =gUnk_0810F6BC
ldrb r1, [r4, #0xa]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
movs r2, #0
bl sub_0806EE04
ldrb r0, [r4, #0xa]
cmp r0, #0
blt _08063DB6
cmp r0, #3
bgt _08063DAC
movs r0, #0xc
bl sub_080A7EE0
str r4, [r0, #0x50]
movs r1, #0x3c
strb r1, [r0, #0xf]
b _08063DB6
.align 2, 0
_08063DA0: .4byte gUnk_03003DBC
_08063DA4: .4byte gUnk_0810F524
_08063DA8: .4byte gUnk_0810F6BC
_08063DAC:
cmp r0, #5
bgt _08063DB6
adds r0, r4, #0
bl sub_08078778
_08063DB6:
ldrb r0, [r4, #0xc]
adds r0, #1
movs r1, #0
strb r0, [r4, #0xc]
strb r1, [r4, #0xa]
adds r0, r4, #0
bl sub_08063DC8
_08063DC6:
pop {r4, pc}
thumb_func_start sub_08063DC8
sub_08063DC8: @ 0x08063DC8
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #0xff
bne _08063DF8
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #0x1e
strb r0, [r4, #0xe]
ldr r1, _08063DF4 @ =gLinkEntity
adds r0, r4, #0
bl GetFacingDirection
bl sub_0806F5A4
strb r0, [r4, #0x14]
ldrb r1, [r4, #0x14]
adds r1, #4
adds r0, r4, #0
bl InitAnimationForceUpdate
b _08063E4C
.align 2, 0
_08063DF4: .4byte gLinkEntity
_08063DF8:
adds r0, r4, #0
bl sub_0806EE20
adds r0, r4, #0
adds r0, #0x3e
ldrb r0, [r0]
ldrb r1, [r4, #0x14]
cmp r0, r1
beq _08063E18
strb r0, [r4, #0x14]
ldrb r1, [r4, #0x14]
adds r1, #4
adds r0, r4, #0
bl InitializeAnimation
b _08063E1E
_08063E18:
adds r0, r4, #0
bl GetNextFrame
_08063E1E:
adds r2, r4, #0
adds r2, #0x39
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #0
beq _08063E4C
movs r1, #0
movs r0, #3
strb r0, [r4, #0xc]
strb r1, [r2]
ldr r1, _08063E50 @ =gLinkEntity
adds r0, r4, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r4, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_08064428
_08063E4C:
pop {r4, pc}
.align 2, 0
_08063E50: .4byte gLinkEntity
thumb_func_start sub_08063E54
sub_08063E54: @ 0x08063E54
push {lr}
ldrb r1, [r0, #0xe]
subs r1, #1
strb r1, [r0, #0xe]
lsls r1, r1, #0x18
cmp r1, #0
bne _08063E68
movs r0, #0xf
bl SetRoomFlag
_08063E68:
pop {pc}
.align 2, 0
thumb_func_start sub_08063E6C
sub_08063E6C: @ 0x08063E6C
push {lr}
adds r2, r0, #0
ldr r0, _08063E8C @ =gTextBox
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0
bne _08063E8A
movs r0, #1
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x14]
adds r1, #4
adds r0, r2, #0
bl InitializeAnimation
_08063E8A:
pop {pc}
.align 2, 0
_08063E8C: .4byte gTextBox
thumb_func_start sub_08063E90
sub_08063E90: @ 0x08063E90
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #9]
movs r1, #0x15
eors r0, r1
rsbs r1, r0, #0
orrs r1, r0
lsrs r1, r1, #0x1f
lsls r1, r1, #4
ldr r0, _08063EC8 @ =gUnk_0810F524
adds r1, r1, r0
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _08063F1E
ldrb r0, [r4, #0xc]
adds r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0xe]
cmp r1, #0
beq _08063ECC
adds r1, r4, #0
adds r1, #0x70
movs r0, #8
strb r0, [r1]
b _08063ED2
.align 2, 0
_08063EC8: .4byte gUnk_0810F524
_08063ECC:
adds r0, r4, #0
adds r0, #0x70
strb r1, [r0]
_08063ED2:
movs r0, #0
strb r0, [r4, #0xe]
adds r0, r4, #0
bl sub_0805ACC0
adds r2, r0, #0
cmp r2, #0
bne _08063EF2
ldrh r0, [r4, #0x2e]
adds r1, r4, #0
adds r1, #0x68
strh r0, [r1]
ldrh r0, [r4, #0x32]
adds r1, #2
strh r0, [r1]
b _08063EFE
_08063EF2:
lsrs r1, r2, #0x10
adds r0, r4, #0
adds r0, #0x68
strh r1, [r0]
adds r0, #2
strh r2, [r0]
_08063EFE:
adds r1, r4, #0
adds r1, #0x71
movs r0, #0
strb r0, [r1]
subs r1, #0x39
movs r0, #1
strb r0, [r1]
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
adds r0, r4, #0
bl sub_0807DD64
adds r0, r4, #0
bl sub_08063F20
_08063F1E:
pop {r4, pc}
thumb_func_start sub_08063F20
sub_08063F20: @ 0x08063F20
push {r4, lr}
adds r4, r0, #0
movs r1, #0
bl sub_0807DDAC
adds r0, r4, #0
bl sub_0807DDE4
adds r0, r4, #0
bl GetNextFrame
adds r2, r4, #0
adds r2, #0x39
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #0
beq _08063F72
ldrb r0, [r4, #0xc]
adds r0, #1
movs r1, #0
strb r0, [r4, #0xc]
strb r1, [r2]
ldr r1, _08063F74 @ =gLinkEntity
adds r0, r4, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r4, #0
adds r0, #0x70
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
adds r1, r1, r0
adds r0, r4, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_08064428
_08063F72:
pop {r4, pc}
.align 2, 0
_08063F74: .4byte gLinkEntity
thumb_func_start sub_08063F78
sub_08063F78: @ 0x08063F78
push {lr}
adds r2, r0, #0
ldr r0, _08063FA8 @ =gTextBox
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0
bne _08063FA6
ldrb r0, [r2, #0xc]
subs r0, #1
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x14]
lsrs r1, r1, #1
adds r0, r2, #0
adds r0, #0x70
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
adds r0, #4
adds r1, r1, r0
adds r0, r2, #0
bl InitializeAnimation
_08063FA6:
pop {pc}
.align 2, 0
_08063FA8: .4byte gTextBox
thumb_func_start Guard_Head
Guard_Head: @ 0x08063FAC
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x3f
adds r2, r0, #0
ands r2, r1
ldrb r3, [r6, #0x1e]
adds r5, r0, #0
ands r5, r3
adds r1, r6, #0
adds r1, #0x5b
ldrb r1, [r1]
adds r4, r0, #0
ands r4, r1
ldrb r0, [r6, #9]
cmp r0, #0x15
bne _08063FEC
movs r0, #0x40
ands r0, r3
cmp r0, #0
beq _08063FE2
adds r5, #0x21
movs r2, #1
rsbs r2, r2, #0
movs r4, #0
b _08063FF6
_08063FE2:
adds r2, #0x19
cmp r4, #0
beq _08063FF6
adds r4, #0x1f
b _08063FF6
_08063FEC:
adds r2, #0x46
adds r5, #0x2d
cmp r4, #0
beq _08063FF6
adds r4, #0x4c
_08063FF6:
subs r4, #1
adds r0, r6, #0
movs r1, #0
bl SetExtraSpriteFrame
adds r0, r6, #0
movs r1, #1
adds r2, r5, #0
bl SetExtraSpriteFrame
adds r0, r6, #0
movs r1, #2
adds r2, r4, #0
bl SetExtraSpriteFrame
adds r0, r6, #0
movs r1, #1
movs r2, #0
bl SetSpriteSubEntryOffsetData1
adds r0, r6, #0
movs r1, #1
movs r2, #2
bl SetSpriteSubEntryOffsetData2
adds r0, r6, #0
bl sub_0807000C
pop {r4, r5, r6, pc}
thumb_func_start sub_08064030
sub_08064030: @ 0x08064030
ldr r0, _08064040 @ =gRoomVars
ldr r2, [r0, #0x68]
rsbs r0, r2, #0
orrs r0, r2
lsrs r0, r0, #0x1f
str r0, [r1, #0x14]
bx lr
.align 2, 0
_08064040: .4byte gRoomVars
thumb_func_start sub_08064044
sub_08064044: @ 0x08064044
ldr r1, _0806404C @ =gUnk_030010A0
movs r0, #1
strb r0, [r1, #8]
bx lr
.align 2, 0
_0806404C: .4byte gUnk_030010A0
thumb_func_start sub_08064050
sub_08064050: @ 0x08064050
push {lr}
adds r2, r1, #0
movs r1, #0
str r1, [r2, #4]
ldrb r0, [r0, #0xb]
cmp r0, #0x12
beq _08064072
cmp r0, #0x12
bgt _08064068
cmp r0, #0x11
beq _0806406E
b _0806407A
_08064068:
cmp r0, #0x13
beq _08064076
b _0806407A
_0806406E:
movs r0, #1
b _08064078
_08064072:
movs r0, #2
b _08064078
_08064076:
movs r0, #3
_08064078:
str r0, [r2, #4]
_0806407A:
pop {pc}
thumb_func_start sub_0806407C
sub_0806407C: @ 0x0806407C
push {r4, r5, r6, lr}

View File

@ -0,0 +1,69 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, lr}
adds r4, r0, #0
ldr r0, _08063DA0 @ =gUnk_03003DBC
ldrb r0, [r0]
cmp r0, #0x46
bhi _08063DC6
ldrb r0, [r4, #9]
movs r1, #0x15
eors r0, r1
rsbs r1, r0, #0
orrs r1, r0
lsrs r1, r1, #0x1f
lsls r1, r1, #4
ldr r0, _08063DA4 @ =gUnk_0810F524
adds r1, r1, r0
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _08063DC6
adds r0, r4, #0
movs r1, #4
bl InitializeAnimation
ldr r0, _08063DA8 @ =gUnk_0810F6BC
ldrb r1, [r4, #0xa]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
movs r2, #0
bl sub_0806EE04
ldrb r0, [r4, #0xa]
cmp r0, #0
blt _08063DB6
cmp r0, #3
bgt _08063DAC
movs r0, #0xc
bl sub_080A7EE0
str r4, [r0, #0x50]
movs r1, #0x3c
strb r1, [r0, #0xf]
b _08063DB6
.align 2, 0
_08063DA0: .4byte gUnk_03003DBC
_08063DA4: .4byte gUnk_0810F524
_08063DA8: .4byte gUnk_0810F6BC
_08063DAC:
cmp r0, #5
bgt _08063DB6
adds r0, r4, #0
bl sub_08078778
_08063DB6:
ldrb r0, [r4, #0xc]
adds r0, #1
movs r1, #0
strb r0, [r4, #0xc]
strb r1, [r4, #0xa]
adds r0, r4, #0
bl sub_08063DC8
_08063DC6:
pop {r4, pc}
.syntax divided

View File

@ -0,0 +1,73 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #9]
movs r1, #0x15
eors r0, r1
rsbs r1, r0, #0
orrs r1, r0
lsrs r1, r1, #0x1f
lsls r1, r1, #4
ldr r0, _08063EC8 @ =gUnk_0810F524
adds r1, r1, r0
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _08063F1E
ldrb r0, [r4, #0xc]
adds r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0xe]
cmp r1, #0
beq _08063ECC
adds r1, r4, #0
adds r1, #0x70
movs r0, #8
strb r0, [r1]
b _08063ED2
.align 2, 0
_08063EC8: .4byte gUnk_0810F524
_08063ECC:
adds r0, r4, #0
adds r0, #0x70
strb r1, [r0]
_08063ED2:
movs r0, #0
strb r0, [r4, #0xe]
adds r0, r4, #0
bl sub_0805ACC0
adds r2, r0, #0
cmp r2, #0
bne _08063EF2
ldrh r0, [r4, #0x2e]
adds r1, r4, #0
adds r1, #0x68
strh r0, [r1]
ldrh r0, [r4, #0x32]
adds r1, #2
strh r0, [r1]
b _08063EFE
_08063EF2:
lsrs r1, r2, #0x10
adds r0, r4, #0
adds r0, #0x68
strh r1, [r0]
adds r0, #2
strh r2, [r0]
_08063EFE:
adds r1, r4, #0
adds r1, #0x71
movs r0, #0
strb r0, [r1]
subs r1, #0x39
movs r0, #1
strb r0, [r1]
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
adds r0, r4, #0
bl sub_0807DD64
adds r0, r4, #0
bl sub_08063F20
_08063F1E:
pop {r4, pc}
.syntax divided

View File

@ -0,0 +1,87 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r7, r0, #0
ldr r0, _08085430 @ =gUnk_081205E0
ldrb r2, [r7, #0x14]
lsrs r2, r2, #1
lsls r2, r2, #1
adds r0, r2, r0
ldrh r0, [r0]
mov sl, r0
ldr r0, _08085434 @ =gUnk_080B4488
adds r2, r2, r0
ldr r0, [r7, #0x70]
mov sb, r0
movs r1, #0x2e
ldrsh r4, [r7, r1]
ldr r1, _08085438 @ =gRoomControls
ldrh r0, [r1, #6]
subs r4, r4, r0
asrs r4, r4, #4
movs r3, #0x3f
ands r4, r3
movs r5, #0x32
ldrsh r0, [r7, r5]
ldrh r1, [r1, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
ldrb r2, [r2]
lsls r2, r2, #0x18
asrs r2, r2, #0x18
mov r8, r2
lsls r5, r2, #1
mov r1, sb
subs r0, r1, r5
ldrh r1, [r0]
adds r0, r7, #0
adds r0, #0x74
strh r1, [r0]
subs r1, r4, r2
adds r6, r7, #0
adds r6, #0x38
ldrb r2, [r6]
mov r0, sl
bl SetTile
mov r1, sb
ldrh r0, [r1]
adds r1, r7, #0
adds r1, #0x76
strh r0, [r1]
ldrb r2, [r6]
mov r0, sl
adds r1, r4, #0
bl SetTile
add r5, sb
ldrh r1, [r5]
adds r0, r7, #0
adds r0, #0x78
strh r1, [r0]
add r4, r8
ldrb r2, [r6]
mov r0, sl
adds r1, r4, #0
bl SetTile
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08085430: .4byte gUnk_081205E0
_08085434: .4byte gUnk_080B4488
_08085438: .4byte gRoomControls
.syntax divided

View File

@ -0,0 +1,36 @@
.syntax unified
push {r4, lr}
ldr r2, _080854E0 @ =gUnk_081205E0
ldrb r1, [r0, #0x14]
lsrs r1, r1, #1
lsls r1, r1, #1
adds r2, r1, r2
ldrh r3, [r2]
adds r4, r3, #0
ldr r2, _080854E4 @ =gUnk_080B4488
adds r1, r1, r2
ldr r2, [r0, #0x70]
movs r0, #0
ldrsb r0, [r1, r0]
lsls r1, r0, #1
subs r0, r2, r1
ldrh r0, [r0]
cmp r3, r0
bne _080854E8
ldrh r0, [r2]
cmp r3, r0
bne _080854E8
adds r0, r1, r2
ldrh r0, [r0]
cmp r4, r0
bne _080854E8
movs r0, #0
b _080854EA
.align 2, 0
_080854E0: .4byte gUnk_081205E0
_080854E4: .4byte gUnk_080B4488
_080854E8:
movs r0, #1
_080854EA:
pop {r4, pc}
.syntax divided

View File

@ -1,438 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Railtrack
Railtrack: @ 0x08085194
push {lr}
ldr r2, _080851A8 @ =gUnk_081205D0
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_080851A8: .4byte gUnk_081205D0
thumb_func_start sub_080851AC
sub_080851AC: @ 0x080851AC
push {r4, r5, r6, lr}
adds r5, r0, #0
movs r2, #1
movs r3, #1
strb r3, [r5, #0xc]
ldrb r1, [r5, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
orrs r0, r2
strb r0, [r5, #0x18]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
ldrb r1, [r5, #0xb]
adds r0, r3, #0
ands r0, r1
cmp r0, #0
beq _080851E8
adds r1, r5, #0
adds r1, #0x7c
ldr r0, _080851E4 @ =0x0000FFFF
strh r0, [r1]
b _080851EE
.align 2, 0
_080851E4: .4byte 0x0000FFFF
_080851E8:
adds r0, r5, #0
adds r0, #0x7c
strh r3, [r0]
_080851EE:
ldrb r1, [r5, #0xb]
movs r0, #2
ands r0, r1
strb r0, [r5, #0x14]
ldrb r4, [r5, #0xa]
cmp r4, #3
bne _0808521E
adds r0, r5, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
adds r1, r5, #0
adds r1, #0x7a
strh r0, [r1]
lsls r0, r0, #0x10
cmp r0, #0
beq _0808521E
ldrb r0, [r5, #0x14]
adds r0, #2
movs r1, #3
ands r0, r1
strb r0, [r5, #0x14]
strb r4, [r5, #0xc]
_0808521E:
ldrb r1, [r5, #0x14]
adds r0, r5, #0
bl InitializeAnimation
adds r0, r5, #0
adds r0, #0x38
ldrb r0, [r0]
bl GetLayerByIndex
movs r1, #0x2e
ldrsh r2, [r5, r1]
ldr r3, _08085260 @ =gRoomControls
ldrh r1, [r3, #6]
subs r2, r2, r1
asrs r2, r2, #4
movs r4, #0x3f
ands r2, r4
movs r6, #0x32
ldrsh r1, [r5, r6]
ldrh r3, [r3, #8]
subs r1, r1, r3
asrs r1, r1, #4
ands r1, r4
lsls r1, r1, #6
orrs r2, r1
lsls r2, r2, #1
adds r2, #4
adds r0, r0, r2
str r0, [r5, #0x70]
adds r0, r5, #0
bl sub_08085394
pop {r4, r5, r6, pc}
.align 2, 0
_08085260: .4byte gRoomControls
thumb_func_start sub_08085264
sub_08085264: @ 0x08085264
push {r4, r5, lr}
adds r4, r0, #0
adds r5, r4, #0
adds r5, #0x86
ldrh r0, [r5]
bl CheckFlags
cmp r0, #0
beq _080852AE
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #8
strb r0, [r4, #0xf]
ldrb r0, [r4, #0xa]
cmp r0, #1
bne _0808528A
ldrh r0, [r5]
bl ClearFlag
_0808528A:
adds r0, r4, #0
adds r0, #0x7c
ldrb r0, [r0]
ldrb r1, [r4, #0x14]
adds r0, r0, r1
movs r1, #3
ands r0, r1
strb r0, [r4, #0x14]
ldrb r1, [r4, #0x14]
adds r0, r4, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_0808543C
ldr r0, _080852B0 @ =0x00000151
bl sub_08004488
_080852AE:
pop {r4, r5, pc}
.align 2, 0
_080852B0: .4byte 0x00000151
thumb_func_start sub_080852B4
sub_080852B4: @ 0x080852B4
push {r4, r5, lr}
adds r5, r0, #0
ldrb r0, [r5, #0xf]
subs r0, #1
strb r0, [r5, #0xf]
lsls r0, r0, #0x18
cmp r0, #0
bne _08085300
movs r4, #3
movs r0, #3
strb r0, [r5, #0xc]
ldrb r0, [r5, #0xe]
strb r0, [r5, #0xf]
adds r0, r5, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
adds r1, r5, #0
adds r1, #0x7a
strh r0, [r1]
adds r0, r5, #0
adds r0, #0x7c
ldrb r0, [r0]
ldrb r1, [r5, #0x14]
adds r0, r0, r1
ands r0, r4
strb r0, [r5, #0x14]
ldrb r1, [r5, #0x14]
adds r0, r5, #0
bl InitializeAnimation
adds r0, r5, #0
bl sub_08085394
ldr r0, _08085304 @ =0x00000151
bl sub_08004488
_08085300:
pop {r4, r5, pc}
.align 2, 0
_08085304: .4byte 0x00000151
thumb_func_start sub_08085308
sub_08085308: @ 0x08085308
push {r4, lr}
adds r4, r0, #0
bl sub_080854A8
cmp r0, #0
bne _0808538C
ldrb r0, [r4, #0xa]
cmp r0, #2
beq _08085324
cmp r0, #2
ble _08085354
cmp r0, #3
beq _08085338
b _08085354
_08085324:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
bne _08085354
movs r0, #1
strb r0, [r4, #0xc]
b _0808538C
_08085338:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
adds r1, r4, #0
adds r1, #0x7a
ldrh r1, [r1]
cmp r0, r1
bne _08085350
movs r0, #0xff
b _08085352
_08085350:
movs r0, #1
_08085352:
strb r0, [r4, #0xf]
_08085354:
ldrb r0, [r4, #0xf]
subs r0, #1
strb r0, [r4, #0xf]
lsls r0, r0, #0x18
cmp r0, #0
bne _0808538C
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #8
strb r0, [r4, #0xf]
adds r0, r4, #0
adds r0, #0x7c
ldrb r0, [r0]
ldrb r1, [r4, #0x14]
adds r0, r0, r1
movs r1, #3
ands r0, r1
strb r0, [r4, #0x14]
ldrb r1, [r4, #0x14]
adds r0, r4, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_0808543C
ldr r0, _08085390 @ =0x00000151
bl sub_08004488
_0808538C:
pop {r4, pc}
.align 2, 0
_08085390: .4byte 0x00000151
thumb_func_start sub_08085394
sub_08085394: @ 0x08085394
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r7, r0, #0
ldr r0, _08085430 @ =gUnk_081205E0
ldrb r2, [r7, #0x14]
lsrs r2, r2, #1
lsls r2, r2, #1
adds r0, r2, r0
ldrh r0, [r0]
mov sl, r0
ldr r0, _08085434 @ =gUnk_080B4488
adds r2, r2, r0
ldr r0, [r7, #0x70]
mov sb, r0
movs r1, #0x2e
ldrsh r4, [r7, r1]
ldr r1, _08085438 @ =gRoomControls
ldrh r0, [r1, #6]
subs r4, r4, r0
asrs r4, r4, #4
movs r3, #0x3f
ands r4, r3
movs r5, #0x32
ldrsh r0, [r7, r5]
ldrh r1, [r1, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
ldrb r2, [r2]
lsls r2, r2, #0x18
asrs r2, r2, #0x18
mov r8, r2
lsls r5, r2, #1
mov r1, sb
subs r0, r1, r5
ldrh r1, [r0]
adds r0, r7, #0
adds r0, #0x74
strh r1, [r0]
subs r1, r4, r2
adds r6, r7, #0
adds r6, #0x38
ldrb r2, [r6]
mov r0, sl
bl SetTile
mov r1, sb
ldrh r0, [r1]
adds r1, r7, #0
adds r1, #0x76
strh r0, [r1]
ldrb r2, [r6]
mov r0, sl
adds r1, r4, #0
bl SetTile
add r5, sb
ldrh r1, [r5]
adds r0, r7, #0
adds r0, #0x78
strh r1, [r0]
add r4, r8
ldrb r2, [r6]
mov r0, sl
adds r1, r4, #0
bl SetTile
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08085430: .4byte gUnk_081205E0
_08085434: .4byte gUnk_080B4488
_08085438: .4byte gRoomControls
thumb_func_start sub_0808543C
sub_0808543C: @ 0x0808543C
push {r4, r5, r6, r7, lr}
adds r7, r0, #0
ldr r0, _080854A0 @ =gUnk_080B4488
ldrb r2, [r7, #0x14]
lsrs r2, r2, #1
lsls r2, r2, #1
adds r2, r2, r0
movs r0, #0x2e
ldrsh r4, [r7, r0]
ldr r1, _080854A4 @ =gRoomControls
ldrh r0, [r1, #6]
subs r4, r4, r0
asrs r4, r4, #4
movs r3, #0x3f
ands r4, r3
movs r5, #0x32
ldrsh r0, [r7, r5]
ldrh r1, [r1, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
adds r0, r7, #0
adds r0, #0x74
ldrh r0, [r0]
movs r6, #0
ldrsb r6, [r2, r6]
subs r1, r4, r6
adds r5, r7, #0
adds r5, #0x38
ldrb r2, [r5]
bl SetTile
adds r0, r7, #0
adds r0, #0x76
ldrh r0, [r0]
ldrb r2, [r5]
adds r1, r4, #0
bl SetTile
adds r0, r7, #0
adds r0, #0x78
ldrh r0, [r0]
adds r4, r4, r6
ldrb r2, [r5]
adds r1, r4, #0
bl SetTile
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080854A0: .4byte gUnk_080B4488
_080854A4: .4byte gRoomControls
thumb_func_start sub_080854A8
sub_080854A8: @ 0x080854A8
push {r4, lr}
ldr r2, _080854E0 @ =gUnk_081205E0
ldrb r1, [r0, #0x14]
lsrs r1, r1, #1
lsls r1, r1, #1
adds r2, r1, r2
ldrh r3, [r2]
adds r4, r3, #0
ldr r2, _080854E4 @ =gUnk_080B4488
adds r1, r1, r2
ldr r2, [r0, #0x70]
movs r0, #0
ldrsb r0, [r1, r0]
lsls r1, r0, #1
subs r0, r2, r1
ldrh r0, [r0]
cmp r3, r0
bne _080854E8
ldrh r0, [r2]
cmp r3, r0
bne _080854E8
adds r0, r1, r2
ldrh r0, [r0]
cmp r4, r0
bne _080854E8
movs r0, #0
b _080854EA
.align 2, 0
_080854E0: .4byte gUnk_081205E0
_080854E4: .4byte gUnk_080B4488
_080854E8:
movs r0, #1
_080854EA:
pop {r4, pc}

View File

@ -168,6 +168,7 @@ extern void GetNextFrame(Entity*);
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
extern void SetExtraSpriteFrame(Entity*, u32, u32);
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
extern Entity* CreateEnemy(u32 subtype, u32 form);
extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter);

View File

@ -551,6 +551,7 @@ SECTIONS {
asm/brocco.o(.text);
asm/sittingPerson.o(.text);
asm/pina.o(.text);
src/guard.o(.text);
asm/guardWithSpear.o(.text);
asm/castleMaid.o(.text);
asm/din.o(.text);
@ -676,7 +677,7 @@ SECTIONS {
asm/object10.o(.text);
asm/object11.o(.text);
asm/object12.o(.text);
asm/railtrack.o(.text);
src/railtrack.o(.text);
asm/lilypadLarge.o(.text);
asm/object15.o(.text);
asm/floatingPlatform.o(.text);

196
src/guard.c Normal file
View File

@ -0,0 +1,196 @@
#include "global.h"
#include "entity.h"
#include "link.h"
#include "flags.h"
#include "textbox.h"
#include "room.h"
typedef struct {
u32 unk;
u32 entityCount;
} struct_03003DB8;
typedef struct {
u8 filler[8];
u8 unk;
} struct_030010A0;
typedef struct {
u32 unk;
u32 unk2;
} struct_08064050;
extern void sub_08063D24(Entity*);
extern void sub_0806ED78(Entity*);
extern u32 GetFacingDirection(Entity*, Entity*);
extern u32 sub_0806F5A4(u32);
extern void sub_0806EE20(Entity*);
extern void sub_08064428(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern void sub_0807DDAC(Entity*, u32);
extern void sub_0807DDE4(Entity*);
extern void sub_0807000C(Entity*);
extern void (*const gUnk_0810F544[])(Entity*);
extern void (*const gUnk_0810F550[])(Entity*);
// entity count
extern u8 gUnk_03003DBC;
extern SpriteLoadData gUnk_0810F524[];
extern void* gUnk_0810F6BC[];
extern struct_030010A0 gUnk_030010A0;
void Guard(Entity *this)
{
if ((this->flags & 2) != 0) {
gUnk_0810F544[this->action](this);
}
else {
sub_08063D24(this);
}
}
void sub_08063D24(Entity *this)
{
gUnk_0810F550[this->action](this);
sub_0806ED78(this);
}
NAKED
void sub_08063D44(Entity* this) {
asm(".include \"asm/non_matching/guard/sub_08063D44.inc\"");
}
void sub_08063DC8(Entity *this)
{
if ((this->entityType).form == 0xff) {
this->action = 2;
this->actionDelay = 0x1e;
this->animationState = sub_0806F5A4(GetFacingDirection(this,&gLinkEntity));
InitAnimationForceUpdate(this, this->animationState + 4);
}
else {
sub_0806EE20(this);
if (this->field_0x3e != this->animationState) {
this->animationState = this->field_0x3e;
InitializeAnimation(this, this->animationState + 4);
}
else {
GetNextFrame(this);
}
if (this->interactType != 0) {
this->action = 3;
this->interactType = 0;
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this,&gLinkEntity)));
sub_08064428(this);
}
}
}
void sub_08063E54(Entity *this)
{
if (--this->actionDelay == 0) {
SetRoomFlag(0xf);
}
}
void sub_08063E6C(Entity *this)
{
if ((gTextBox.doTextBox & 0x7f) == 0) {
this->action = 1;
InitializeAnimation(this, this->animationState + 4);
}
}
NAKED
void sub_08063E90(Entity* this) {
asm(".include \"asm/non_matching/guard/sub_08063E90.inc\"");
}
void sub_08063F20(Entity *this)
{
sub_0807DDAC(this, 0);
sub_0807DDE4(this);
GetNextFrame(this);
if (this->interactType != 0) {
this->action++;
this->interactType = 0;
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8 *)&this->field_0x70);
sub_08064428(this);
}
}
void sub_08063F78(Entity *this)
{
if ((gTextBox.doTextBox & 0x7f) == 0) {
this->action = this->action - 1;
InitializeAnimation(this,(this->animationState >> 1) + 4 + *(s8 *)&this->field_0x70);
}
}
void Guard_Head(Entity *this)
{
u8 bVar1;
u32 uVar2;
u32 pbVar3;
u32 uVar4;
u32 pbVar5;
uVar2 = this->frames.all & 0x3f;
pbVar5 = (this->frameIndex & 0x3f);
uVar4 = this->frameSpriteSettings & 0x3f;
if ((this->entityType).subtype == 0x15) {
if ((this->frameIndex & 0x40) != 0) {
pbVar5 = pbVar5 + 0x21;
pbVar3 = 0xffffffff;
uVar4 = 0;
}
else {
pbVar3 = (uVar2 + 0x19);
if ((this->frameSpriteSettings & 0x3f) != 0) {
uVar4 += 0x1f;
}
}
}
else {
pbVar3 = (uVar2 + 0x46);
pbVar5 = pbVar5 + 0x2d;
if ((this->frameSpriteSettings & 0x3f) != 0) {
uVar4 += 0x4c;
}
}
uVar4--;
SetExtraSpriteFrame(this, 0, pbVar3);
SetExtraSpriteFrame(this, 1, pbVar5);
SetExtraSpriteFrame(this, 2, uVar4);
SetSpriteSubEntryOffsetData1(this, 1, 0);
SetSpriteSubEntryOffsetData2(this, 1, 2);
sub_0807000C(this);
}
void sub_08064030(Entity *arg0,Entity *arg1)
{
*(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f;
}
void sub_08064044(void)
{
gUnk_030010A0.unk = 1;
}
void sub_08064050(Entity *arg0, struct_08064050 *arg1)
{
u32 unk;
arg1->unk2 = 0;
switch (arg0->entityType.parameter) {
case 0x11:
arg1->unk2 = 1;
break;
case 0x12:
arg1->unk2 = 2;
break;
case 0x13:
arg1->unk2 = 3;
}
}

148
src/railtrack.c Normal file
View File

@ -0,0 +1,148 @@
#include "global.h"
#include "entity.h"
#include "room.h"
#include "flags.h"
extern u32* GetLayerByIndex(u32);
extern void sub_08085394(Entity*);
extern void sub_0808543C(Entity*);
extern void sub_08004488(u32);
extern u32 sub_080854A8(Entity*);
extern void SetTile(u32, u32, u32);
extern void (*const gUnk_081205D0[])(Entity*);
extern u16 gUnk_081205E0[];
extern s8 gUnk_080B4488[];
void Railtrack(Entity* this) {
gUnk_081205D0[this->action](this);
}
void sub_080851AC(Entity* this) {
u32 uVar1;
this->action = 1;
this->spriteSettings.b.draw = 1;
this->spritePriority.b0 = 7;
if ((this->entityType.parameter & 1) != 0) {
this->field_0x7c.HALF.LO = -1;
} else {
this->field_0x7c.HALF.LO = 1;
}
this->animationState = this->entityType.parameter & 2;
if ((this->entityType).form == 3) {
uVar1 = CheckFlags(this->field_0x86);
this->field_0x7a = uVar1;
if ((u16)(uVar1 & -1) != 0) {
this->animationState = (this->animationState + 2) & 3;
this->action = 3;
}
}
InitializeAnimation(this, this->animationState);
this->field_0x70 = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2);
sub_08085394(this);
}
void sub_08085264(Entity* this) {
if (CheckFlags(this->field_0x86)) {
this->action = 2;
this->field_0xf = 8;
if (this->entityType.form == 1) {
ClearFlag(this->field_0x86);
}
this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3;
InitializeAnimation(this, this->animationState);
sub_0808543C(this);
sub_08004488(0x151);
}
}
void sub_080852B4(Entity* this) {
if (--this->field_0xf == 0) {
this->action = 3;
this->field_0xf = this->actionDelay;
this->field_0x7a = CheckFlags(this->field_0x86);
this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3;
InitializeAnimation(this, this->animationState);
sub_08085394(this);
sub_08004488(0x151);
}
}
void sub_08085308(Entity* this) {
if (sub_080854A8(this) == 0) {
switch (this->entityType.form) {
case 0:
case 1:
break;
case 2:
if (CheckFlags(this->field_0x86) == 0) {
this->action = 1;
return;
}
break;
case 3:
if (CheckFlags(this->field_0x86) == *(u16*)&this->field_0x7a) {
this->field_0xf = 0xff;
} else {
this->field_0xf = 1;
}
}
if (--this->field_0xf == 0) {
this->action = 2;
this->field_0xf = 8;
this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3;
InitializeAnimation(this, this->animationState);
sub_0808543C(this);
sub_08004488(0x151);
}
}
}
#if 0
void sub_08085394(Entity *this)
{
u32 uVar1;
u16 *layerData;
u32 iVar3;
u32 uVar4;
u8 *pbVar5;
uVar1 = gUnk_081205E0[this->animationState / 2];
iVar3 = this->animationState / 2;
layerData = *(u16 **)&this->field_0x70;
uVar4 = COORD_TO_TILE(this);
this->field_0x74 = layerData[gUnk_080B4488[iVar3]];
pbVar5 = &this->collisionLayer;
SetTile(uVar1, uVar4 - iVar3, *pbVar5);
this->field_0x76 = layerData[0];
SetTile(uVar1,uVar4, *pbVar5);
*(u16 *)&this->field_0x78 = layerData[iVar3];
SetTile(uVar1,uVar4 + iVar3, *pbVar5);
}
#endif
NAKED
void sub_08085394(Entity* this) {
asm(".include \"asm/non_matching/railtrack/sub_08085394.inc\"");
}
void sub_0808543C(Entity *this)
{
s8 *cVar1;
u32 uVar2;
s8 temp;
temp = gUnk_080B4488[(this->animationState >> 1) << 1];
uVar2 = COORD_TO_TILE(this);
SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer);
SetTile(this->field_0x76, uVar2, this->collisionLayer);
SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer);
}
NAKED
u32 sub_080854A8(Entity *this) {
asm(".include \"asm/non_matching/railtrack/sub_080854A8.inc\"");
}