forestMinish.c 1 nonmatching

This commit is contained in:
theo3 2020-07-13 01:31:58 -07:00
parent 6aba97697b
commit 73b72d6696
10 changed files with 590 additions and 729 deletions

View File

@ -6,150 +6,6 @@
.text
thumb_func_start sub_0805FE10
sub_0805FE10: @ 0x0805FE10
push {r4, lr}
adds r4, r0, #0
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r0, r4, #0
movs r1, #2
bl sub_0805E3A0
adds r0, r4, #0
bl sub_0801E99C
adds r1, r4, #0
adds r1, #0x68
strb r0, [r1]
ldrb r1, [r1]
adds r0, r4, #0
bl sub_08078784
adds r0, r4, #0
bl sub_0807DD50
pop {r4, pc}
thumb_func_start sub_0805FE48
sub_0805FE48: @ 0x0805FE48
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r2, r5, #0
adds r2, #0x39
movs r1, #0
ldrsb r1, [r2, r1]
cmp r1, #2
bne _0805FE80
movs r0, #0
strb r1, [r5, #0xc]
strb r0, [r2]
ldr r1, _0805FE7C @ =gLinkEntity
adds r0, r5, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r5, #0
bl InitAnimationForceUpdate
adds r0, r5, #0
bl sub_0806F118
b _0805FF14
.align 2, 0
_0805FE7C: .4byte gLinkEntity
_0805FE80:
adds r4, r5, #0
adds r4, #0x84
ldr r1, [r4]
adds r0, r5, #0
bl ExecuteScriptCommandSet
ldr r1, [r4]
adds r0, r5, #0
bl sub_0805FF2C
adds r0, r5, #0
adds r0, #0x80
ldrh r3, [r0]
adds r7, r0, #0
adds r6, r5, #0
adds r6, #0x82
cmp r3, #7
bhi _0805FEC6
ldrh r1, [r6]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0805FEBA
movs r1, #0xfc
ands r1, r3
ldrb r0, [r5, #0xf]
lsrs r0, r0, #1
adds r3, r1, r0
b _0805FEC6
_0805FEBA:
movs r0, #0xfc
ands r0, r3
ldrb r2, [r5, #0x14]
lsrs r1, r2, #1
adds r3, r0, r1
strb r2, [r5, #0xf]
_0805FEC6:
adds r4, r5, #0
adds r4, #0x58
ldrb r0, [r4]
cmp r3, r0
beq _0805FED8
adds r0, r5, #0
adds r1, r3, #0
bl InitAnimationForceUpdate
_0805FED8:
adds r0, r5, #0
bl UpdateAnimationSingleFrame
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0805FF02
ldrb r0, [r4]
cmp r0, #8
beq _0805FEFE
cmp r0, #8
blt _0805FF02
cmp r0, #0xc
bgt _0805FF02
cmp r0, #0xa
blt _0805FF02
_0805FEFE:
movs r0, #0
strh r0, [r7]
_0805FF02:
ldrh r1, [r6]
mvns r0, r1
adds r0, #1
ands r1, r0
cmp r1, #2
bne _0805FF14
adds r0, r5, #0
bl sub_0806ED78
_0805FF14:
pop {r4, r5, r6, r7, pc}
.align 2, 0
thumb_func_start sub_0805FF18
sub_0805FF18: @ 0x0805FF18
push {r4, lr}
adds r4, r0, #0
bl UpdateFuseInteraction
cmp r0, #0
beq _0805FF28
movs r0, #1
strb r0, [r4, #0xc]
_0805FF28:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0805FF2C
sub_0805FF2C: @ 0x0805FF2C
push {r4, r5, r6, lr}

View File

@ -1,561 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ForestMinish
ForestMinish: @ 0x0805FFD8
push {r4, r5, lr}
adds r4, r0, #0
ldrb r5, [r4, #0xc]
cmp r5, #1
beq _08060044
cmp r5, #1
bgt _0805FFEC
cmp r5, #0
beq _0805FFF2
b _0806008C
_0805FFEC:
cmp r5, #2
beq _0806007E
b _0806008C
_0805FFF2:
ldr r1, _0806003C @ =gUnk_0810A348
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _0806008C
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
ldrb r0, [r4, #0xe]
lsls r0, r0, #1
strb r0, [r4, #0x14]
adds r1, r4, #0
adds r1, #0x69
strb r0, [r1]
strb r5, [r4, #0xe]
adds r0, r4, #0
movs r1, #2
bl sub_0805E3A0
ldr r1, _08060040 @ =gUnk_08109D18
ldrb r0, [r4, #0xb]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl StartCutscene
adds r0, r4, #0
bl sub_0807DD50
b _0806008C
.align 2, 0
_0806003C: .4byte gUnk_0810A348
_08060040: .4byte gUnk_08109D18
_08060044:
adds r2, r4, #0
adds r2, #0x39
movs r1, #0
ldrsb r1, [r2, r1]
cmp r1, #2
bne _0806005E
movs r0, #0
strb r1, [r4, #0xc]
strb r0, [r2]
adds r0, r4, #0
bl sub_0806F118
b _0806008C
_0806005E:
adds r0, r4, #0
movs r1, #0
bl sub_0807DDAC
adds r0, r4, #0
bl sub_0807DDE4
adds r0, r4, #0
adds r0, #0x59
ldrb r0, [r0]
cmp r0, #0xf0
beq _0806008C
adds r0, r4, #0
bl sub_080600F0
b _0806008C
_0806007E:
adds r0, r4, #0
bl UpdateFuseInteraction
cmp r0, #0
beq _0806008C
movs r0, #1
strb r0, [r4, #0xc]
_0806008C:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08060090
sub_08060090: @ 0x08060090
push {r4, lr}
adds r4, r0, #0
bl sub_0801E99C
adds r1, r4, #0
adds r1, #0x68
strb r0, [r1]
ldrb r1, [r1]
adds r0, r4, #0
bl sub_08078784
pop {r4, pc}
thumb_func_start ForestMinish_Head
ForestMinish_Head: @ 0x080600A8
push {r4, lr}
adds r4, r0, #0
adds r0, #0x5a
ldrb r2, [r0]
cmp r2, #0xff
beq _080600BA
movs r0, #0x81
rsbs r0, r0, #0
ands r2, r0
_080600BA:
adds r0, r4, #0
adds r0, #0x5b
ldrb r1, [r0]
movs r0, #1
ands r0, r1
cmp r0, #0
bne _080600CA
movs r2, #0xff
_080600CA:
adds r0, r4, #0
movs r1, #0
bl SetExtraSpriteFrame
ldrb r2, [r4, #0x1e]
adds r0, r4, #0
movs r1, #1
bl SetExtraSpriteFrame
adds r0, r4, #0
movs r1, #1
movs r2, #0
bl SetSpriteSubEntryOffsetData1
adds r0, r4, #0
bl sub_0807000C
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080600F0
sub_080600F0: @ 0x080600F0
push {r4, lr}
adds r4, r0, #0
adds r0, #0x80
ldrh r3, [r0]
cmp r3, #7
bhi _08060120
adds r0, #2
ldrh r1, [r0]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _08060114
movs r1, #0xfc
ands r1, r3
ldrb r0, [r4, #0xf]
lsrs r0, r0, #1
adds r3, r1, r0
b _08060120
_08060114:
movs r0, #0xfc
ands r0, r3
ldrb r2, [r4, #0x14]
lsrs r1, r2, #1
adds r3, r0, r1
strb r2, [r4, #0xf]
_08060120:
adds r0, r4, #0
adds r0, #0x58
ldrb r0, [r0]
cmp r3, r0
beq _08060132
adds r0, r4, #0
adds r1, r3, #0
bl InitAnimationForceUpdate
_08060132:
adds r0, r4, #0
adds r0, #0x82
ldrh r1, [r0]
movs r0, #4
ands r0, r1
movs r1, #1
cmp r0, #0
beq _08060144
movs r1, #2
_08060144:
adds r0, r4, #0
bl sub_080042BA
pop {r4, pc}
thumb_func_start sub_0806014C
sub_0806014C: @ 0x0806014C
push {lr}
movs r1, #0
strb r1, [r0, #0xe]
bl sub_08060158
pop {pc}
thumb_func_start sub_08060158
sub_08060158: @ 0x08060158
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
adds r7, r0, #0
cmp r7, #0
beq _0806016A
subs r0, #1
strb r0, [r4, #0xe]
b _080601CC
_0806016A:
movs r0, #2
strb r0, [r4, #0xe]
adds r0, r4, #0
movs r1, #0x20
movs r2, #0x20
bl sub_0806EDD8
adds r3, r0, #0
cmp r3, #0
bge _08060188
adds r0, r4, #0
adds r0, #0x69
ldrb r0, [r0]
strb r0, [r4, #0x14]
lsls r3, r0, #2
_08060188:
ldrb r0, [r4, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #5
asrs r1, r3, #1
lsls r1, r1, #1
ldr r2, _080601D0 @ =gUnk_08109C98
adds r1, r1, r2
adds r0, r0, r1
ldrb r6, [r0]
ldrb r5, [r0, #1]
movs r0, #0x80
ands r0, r5
cmp r0, #0
beq _080601AC
adds r0, r3, #0
bl sub_0806F5B0
strb r0, [r4, #0x14]
_080601AC:
movs r0, #0x7f
ands r5, r0
adds r0, r4, #0
adds r0, #0x5a
strb r6, [r0]
strb r5, [r4, #0x1e]
adds r1, r4, #0
adds r1, #0x5b
movs r0, #1
strb r0, [r1]
adds r0, r4, #0
adds r0, #0x58
strb r7, [r0]
subs r1, #2
movs r0, #0xf0
strb r0, [r1]
_080601CC:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080601D0: .4byte gUnk_08109C98
thumb_func_start sub_080601D4
sub_080601D4: @ 0x080601D4
push {r4, lr}
adds r4, r0, #0
movs r0, #4
bl CheckGlobalFlag
cmp r0, #0
bne _080601E6
movs r1, #2
b _080601F2
_080601E6:
movs r0, #0x17
bl CheckKinstoneFused
rsbs r1, r0, #0
orrs r1, r0
lsrs r1, r1, #0x1f
_080601F2:
ldr r0, _08060204 @ =gUnk_0810A354
lsls r1, r1, #1
adds r1, r1, r0
ldrh r0, [r1]
adds r1, r4, #0
bl TextboxNoOverlap
pop {r4, pc}
.align 2, 0
_08060204: .4byte gUnk_0810A354
thumb_func_start sub_08060208
sub_08060208: @ 0x08060208
push {lr}
ldrb r1, [r0, #0xb]
lsls r1, r1, #5
ldr r2, _08060218 @ =gUnk_08109DC8
adds r1, r1, r2
bl ShowNPCDialogue
pop {pc}
.align 2, 0
_08060218: .4byte gUnk_08109DC8
thumb_func_start sub_0806021C
sub_0806021C: @ 0x0806021C
push {r4, r5, lr}
adds r5, r0, #0
movs r0, #0x5b
bl GetInventoryValue
rsbs r1, r0, #0
orrs r1, r0
lsrs r4, r1, #0x1f
movs r0, #0x40
bl GetInventoryValue
cmp r0, #0
beq _08060238
movs r4, #2
_08060238:
movs r0, #0x13
bl GetInventoryValue
cmp r0, #0
beq _08060244
movs r4, #3
_08060244:
ldrb r1, [r5, #0xb]
lsls r1, r1, #5
lsls r0, r4, #3
ldr r2, _08060258 @ =gUnk_08109DC8
adds r0, r0, r2
adds r1, r1, r0
adds r0, r5, #0
bl ShowNPCDialogue
pop {r4, r5, pc}
.align 2, 0
_08060258: .4byte gUnk_08109DC8
thumb_func_start sub_0806025C
sub_0806025C: @ 0x0806025C
push {lr}
ldrb r1, [r0, #0xb]
lsls r1, r1, #5
ldr r2, _0806026C @ =gUnk_08109DC8
adds r1, r1, r2
bl ShowNPCDialogue
pop {pc}
.align 2, 0
_0806026C: .4byte gUnk_08109DC8
thumb_func_start sub_08060270
sub_08060270: @ 0x08060270
push {r4, r5, lr}
adds r5, r0, #0
movs r0, #0x46
bl GetInventoryValue
cmp r0, #0
bne _08060294
movs r4, #1
movs r0, #0x29
bl CheckGlobalFlag
cmp r0, #0
bne _080602A8
movs r4, #0
movs r0, #0x29
bl SetGlobalFlag
b _080602A8
_08060294:
movs r4, #3
movs r0, #0x76
bl CheckLocalFlag
cmp r0, #0
bne _080602A8
movs r4, #2
movs r0, #0x76
bl SetLocalFlag
_080602A8:
ldr r0, _080602B8 @ =gUnk_0810A35A
lsls r1, r4, #1
adds r1, r1, r0
ldrh r0, [r1]
adds r1, r5, #0
bl TextboxNoOverlap
pop {r4, r5, pc}
.align 2, 0
_080602B8: .4byte gUnk_0810A35A
thumb_func_start sub_080602BC
sub_080602BC: @ 0x080602BC
push {r4, lr}
adds r4, r0, #0
movs r0, #0x48
bl GetInventoryValue
cmp r0, #0
beq _080602D6
bl Random
movs r1, #1
ands r1, r0
adds r2, r1, #2
b _080602F0
_080602D6:
ldr r0, _08060300 @ =gUnk_02002A40
adds r2, r0, #0
adds r2, #0xac
ldr r1, _08060304 @ =gBombBagSizes
adds r0, #0xae
ldrb r0, [r0]
adds r0, r0, r1
ldrb r1, [r2]
movs r2, #0
ldrb r0, [r0]
cmp r1, r0
bhs _080602F0
movs r2, #1
_080602F0:
ldr r0, _08060308 @ =gUnk_0810A362
lsls r1, r2, #1
adds r1, r1, r0
ldrh r0, [r1]
adds r1, r4, #0
bl TextboxNoOverlap
pop {r4, pc}
.align 2, 0
_08060300: .4byte gUnk_02002A40
_08060304: .4byte gBombBagSizes
_08060308: .4byte gUnk_0810A362
thumb_func_start sub_0806030C
sub_0806030C: @ 0x0806030C
push {lr}
ldr r0, [r1, #4]
bl ModBombs
pop {pc}
.align 2, 0
thumb_func_start sub_08060318
sub_08060318: @ 0x08060318
push {r4, r5, lr}
movs r5, #2
_0806031C:
movs r0, #8
movs r1, #2
movs r2, #2
bl sub_0805EB00
adds r4, r0, #0
cmp r4, #0
beq _08060336
bl sub_080A29BC
adds r0, r4, #0
bl DeleteEntity
_08060336:
subs r5, #1
cmp r5, #0
bge _0806031C
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08060340
sub_08060340: @ 0x08060340
ldr r0, _08060350 @ =gUnk_02002A40
movs r2, #0x92
lsls r2, r2, #3
adds r1, r0, r2
ldr r0, [r0, #0x50]
str r0, [r1]
bx lr
.align 2, 0
_08060350: .4byte gUnk_02002A40
thumb_func_start sub_08060354
sub_08060354: @ 0x08060354
push {r4, lr}
ldr r0, _08060378 @ =gUnk_02002A40
movs r2, #0x92
lsls r2, r2, #3
adds r1, r0, r2
ldr r2, [r0, #0x50]
ldr r0, [r1]
subs r4, r2, r0
movs r0, #0x3b
bl CheckGlobalFlag
cmp r0, #0
bne _08060380
cmp r4, #4
ble _080603B0
ldr r0, _0806037C @ =0x00008444
b _080603B2
.align 2, 0
_08060378: .4byte gUnk_02002A40
_0806037C: .4byte 0x00008444
_08060380:
movs r0, #0x3c
bl CheckGlobalFlag
cmp r0, #0
bne _08060398
cmp r4, #9
ble _080603B0
ldr r0, _08060394 @ =0x00008444
b _080603B2
.align 2, 0
_08060394: .4byte 0x00008444
_08060398:
movs r0, #0x3d
bl CheckGlobalFlag
cmp r0, #0
bne _080603B0
cmp r4, #0xe
ble _080603B0
ldr r0, _080603AC @ =0x00008444
b _080603B2
.align 2, 0
_080603AC: .4byte 0x00008444
_080603B0:
movs r0, #0
_080603B2:
pop {r4, pc}
thumb_func_start ForestMinish_Fusion
ForestMinish_Fusion: @ 0x080603B4
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _080603F4
ldr r1, _080603F0 @ =gUnk_0810A348
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _080603FA
ldrb r0, [r4, #0xc]
adds r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
adds r0, r4, #0
movs r1, #2
bl sub_0805E3A0
adds r0, r4, #0
movs r1, #6
bl InitializeAnimation
b _080603FA
.align 2, 0
_080603F0: .4byte gUnk_0810A348
_080603F4:
adds r0, r4, #0
bl GetNextFrame
_080603FA:
pop {r4, pc}

View File

@ -1,20 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Festari
Festari: @ 0x0805FDF8
push {lr}
ldr r2, _0805FE0C @ =gUnk_08109BBC
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0805FE0C: .4byte gUnk_08109BBC

View File

@ -0,0 +1,110 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r2, r5, #0
adds r2, #0x39
movs r1, #0
ldrsb r1, [r2, r1]
cmp r1, #2
bne _0805FE80
movs r0, #0
strb r1, [r5, #0xc]
strb r0, [r2]
ldr r1, _0805FE7C @ =gLinkEntity
adds r0, r5, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r5, #0
bl InitAnimationForceUpdate
adds r0, r5, #0
bl sub_0806F118
b _0805FF14
.align 2, 0
_0805FE7C: .4byte gLinkEntity
_0805FE80:
adds r4, r5, #0
adds r4, #0x84
ldr r1, [r4]
adds r0, r5, #0
bl ExecuteScriptCommandSet
ldr r1, [r4]
adds r0, r5, #0
bl sub_0805FF2C
adds r0, r5, #0
adds r0, #0x80
ldrh r3, [r0]
adds r7, r0, #0
adds r6, r5, #0
adds r6, #0x82
cmp r3, #7
bhi _0805FEC6
ldrh r1, [r6]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0805FEBA
movs r1, #0xfc
ands r1, r3
ldrb r0, [r5, #0xf]
lsrs r0, r0, #1
adds r3, r1, r0
b _0805FEC6
_0805FEBA:
movs r0, #0xfc
ands r0, r3
ldrb r2, [r5, #0x14]
lsrs r1, r2, #1
adds r3, r0, r1
strb r2, [r5, #0xf]
_0805FEC6:
adds r4, r5, #0
adds r4, #0x58
ldrb r0, [r4]
cmp r3, r0
beq _0805FED8
adds r0, r5, #0
adds r1, r3, #0
bl InitAnimationForceUpdate
_0805FED8:
adds r0, r5, #0
bl UpdateAnimationSingleFrame
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _0805FF02
ldrb r0, [r4]
cmp r0, #8
beq _0805FEFE
cmp r0, #8
blt _0805FF02
cmp r0, #0xc
bgt _0805FF02
cmp r0, #0xa
blt _0805FF02
_0805FEFE:
movs r0, #0
strh r0, [r7]
_0805FF02:
ldrh r1, [r6]
mvns r0, r1
adds r0, #1
ands r1, r0
cmp r1, #2
bne _0805FF14
adds r0, r5, #0
bl sub_0806ED78
_0805FF14:
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided

View File

@ -0,0 +1,72 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
adds r7, r0, #0
cmp r7, #0
beq _0806016A
subs r0, #1
strb r0, [r4, #0xe]
b _080601CC
_0806016A:
movs r0, #2
strb r0, [r4, #0xe]
adds r0, r4, #0
movs r1, #0x20
movs r2, #0x20
bl sub_0806EDD8
adds r3, r0, #0
cmp r3, #0
bge _08060188
adds r0, r4, #0
adds r0, #0x69
ldrb r0, [r0]
strb r0, [r4, #0x14]
lsls r3, r0, #2
_08060188:
ldrb r0, [r4, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #5
asrs r1, r3, #1
lsls r1, r1, #1
ldr r2, _080601D0 @ =gUnk_08109C98
adds r1, r1, r2
adds r0, r0, r1
ldrb r6, [r0]
ldrb r5, [r0, #1]
movs r0, #0x80
ands r0, r5
cmp r0, #0
beq _080601AC
adds r0, r3, #0
bl sub_0806F5B0
strb r0, [r4, #0x14]
_080601AC:
movs r0, #0x7f
ands r5, r0
adds r0, r4, #0
adds r0, #0x5a
strb r6, [r0]
strb r5, [r4, #0x1e]
adds r1, r4, #0
adds r1, #0x5b
movs r0, #1
strb r0, [r1]
adds r0, r4, #0
adds r0, #0x58
strb r7, [r0]
subs r1, #2
movs r0, #0xf0
strb r0, [r1]
_080601CC:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080601D0: .4byte gUnk_08109C98
.syntax divided

View File

@ -74,6 +74,8 @@ typedef struct {
u8 filler3[12];
} Stats;
extern u8 gBombBagSizes[];
extern LinkState gLinkState;
extern Stats gStats;
extern Entity gLinkEntity;

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "entity.h"
#include "link.h"
#ifndef NPC_H
#define NPC_H
@ -174,8 +175,14 @@ extern u32 UpdateFuseInteraction(Entity*);
extern void ShowNPCDialogue(Entity*, u32*);
typedef struct {
u8 filler[8];
u8 unk;
/*0x000*/ u8 filler[8];
/*0x008*/ u8 unk;
/*0x009*/ u8 filler2[0x47];
/*0x050*/ u32 unk2;
/*0x051*/ u8 filler3[0x54];
/*0x0a8*/ Stats stats;
/*0x0d0*/ u8 filler4[0x3c0];
/*0x490*/ u32 unk3;
} struct_02002A40;
extern struct_02002A40 gUnk_02002A40;

View File

@ -534,9 +534,9 @@ SECTIONS {
asm/code_0805E744.o(.text);
/* npcs */
src/gentari.o(.text);
asm/gentari.o(.text);
src/festari.o(.text);
asm/festari.o(.text);
asm/forestMinish.o(.text);
src/forestMinish.o(.text);
asm/postman.o(.text);
asm/npc5.o(.text);
asm/townsperson.o(.text);

91
src/festari.c Normal file
View File

@ -0,0 +1,91 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
#include "link.h"
extern void sub_0805E3A0(Entity*, u32);
extern u32 sub_0801E99C(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern void sub_0806F118(Entity*);
extern void ExecuteScriptCommandSet(Entity*, void *);
extern void sub_0805FF2C(Entity*, void*);
extern void sub_0806ED78(Entity*);
extern void (*const gUnk_08109BBC[])(Entity*);
void Festari(Entity *this)
{
gUnk_08109BBC[this->action](this);
}
void sub_0805FE10(Entity *this)
{
this->action = 1;
this->spriteSettings.b.draw = TRUE;
sub_0805E3A0(this, 2);
this->field_0x68 = sub_0801E99C(this);
sub_08078784(this, this->field_0x68);
sub_0807DD50(this);
}
#if NON_MATCHING
void sub_0805FE48(Entity *this)
{
u8 bVar1;
u16 uVar2;
u32 uVar3;
u32 uVar4;
if (this->interactType == 2) {
this->action = 2;
this->interactType = 0;
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
sub_0806F118(this);
}
else {
ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh);
sub_0805FF2C(this, *(void **)&this->cutsceneBeh);
if (this->field_0x80 < 8) {
if ((this->field_0x82 & 1) != 0) {
uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1);
}
else {
uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1);
this->field_0xf = this->animationState;
}
}
if (uVar4 != this->animIndex) {
InitAnimationForceUpdate(this, uVar4);
}
UpdateAnimationSingleFrame(this);
if (this->frames.b.f3)
{
switch (this->animIndex) {
case 8:
case 10:
case 11:
case 12:
this->field_0x80 = 0;
}
}
if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) {
sub_0806ED78(this);
}
}
}
#else
NAKED
void sub_0805FE48(Entity *this) {
asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\"");
}
#endif
void sub_0805FF18(Entity *this)
{
if (UpdateFuseInteraction(this)) {
this->action = 1;
}
}

304
src/forestMinish.c Normal file
View File

@ -0,0 +1,304 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
#include "flags.h"
#include "textbox.h"
#include "link.h"
extern void sub_0805E3A0(Entity*, u32);
extern void StartCutscene(Entity*, void*);
extern void sub_0807DD50(Entity*);
extern void sub_0806F118(Entity*);
extern void sub_0807DDAC(Entity*, u32);
extern void sub_0807DDE4(Entity*);
extern void sub_080600F0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_0807000C(Entity*);
extern void sub_080042BA(Entity*, u32);
extern void sub_08060158(Entity*);
extern u32 CheckKinstoneFused(u32);
extern Entity* sub_0805EB00(u32, u32, u32);
extern void sub_080A29BC(Entity* parent);
extern void DeleteEntity(Entity*);
extern u32 Random(void);
extern void ModBombs(s32);
extern SpriteLoadData gUnk_0810A348;
extern void* gUnk_08109D18[];
extern u8 gUnk_08109C98[];
extern u16 gUnk_0810A354[];
extern u32 gUnk_08109DC8[];
extern u16 gUnk_0810A35A[];
extern u16 gUnk_0810A362[];
void ForestMinish(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
this->action = 1;
this->spriteSettings.b.draw = TRUE;
this->field_0x69 = this->animationState = this->actionDelay << 1;
this->actionDelay = 0;
sub_0805E3A0(this, 2);
StartCutscene(this, gUnk_08109D18[this->entityType.parameter]);
sub_0807DD50(this);
}
break;
case 1:
if (this->interactType == 2) {
this->action = 2;
this->interactType = 0;
sub_0806F118(this);
} else {
sub_0807DDAC(this, 0);
sub_0807DDE4(this);
if (this->frameDuration != 0xf0) {
sub_080600F0(this);
}
}
break;
case 2:
if (UpdateFuseInteraction(this)) {
this->action = 1;
}
}
}
void sub_08060090(Entity* this) {
this->field_0x68 = sub_0801E99C(this);
sub_08078784(this, this->field_0x68);
}
void ForestMinish_Head(Entity* this) {
u32 pbVar1;
pbVar1 = this->frames.all;
if (this->frames.all != 0xff) {
pbVar1 &= -0x81;
}
if ((this->frameSpriteSettings & 1) == 0) {
pbVar1 = 0xff;
}
SetExtraSpriteFrame(this, 0, pbVar1);
SetExtraSpriteFrame(this, 1, this->frameIndex);
SetSpriteSubEntryOffsetData1(this, 1, 0);
sub_0807000C(this);
}
void sub_080600F0(Entity* this) {
u32 uVar1;
u32 uVar2;
uVar2 = this->field_0x80;
if (this->field_0x80 < 8) {
if ((this->field_0x82 & 1) != 0) {
uVar2 = (uVar2 & 0xfc) + (this->field_0xf >> 1);
} else {
uVar2 = (uVar2 & 0xfc) + (this->animationState >> 1);
this->field_0xf = this->animationState;
}
}
if (uVar2 != this->animIndex) {
InitAnimationForceUpdate(this, uVar2);
}
if ((this->field_0x82 & 4) != 0) {
uVar1 = 2;
} else {
uVar1 = 1;
}
sub_080042BA(this, uVar1);
}
void sub_0806014C(Entity* this) {
this->actionDelay = 0;
sub_08060158(this);
}
#if 0
void sub_08060158(Entity *this)
{
u8 bVar1;
u8 bVar2;
s32 iVar4;
u32 temp;
if (this->actionDelay != 0) {
this->actionDelay--;
}
else {
this->actionDelay = 2;
iVar4 = sub_0806EDD8(this, 0x20, 0x20);
if (iVar4 < 0) {
this->animationState = this->field_0x69;
iVar4 = this->field_0x69 << 2;
}
temp = (this->animationState >> 1) * 0x20 + (iVar4 >> 1) * 2;
bVar1 = gUnk_08109C98[temp];
bVar2 = gUnk_08109C98[temp + 1];
if ((bVar2 & 0x80) != 0) {
this->animationState = sub_0806F5B0(iVar4);
}
this->frames.all = bVar1;
this->frameIndex = bVar2 & 0x7f;
this->frameSpriteSettings = 1;
this->animIndex = 0;
this->frameDuration = 0xf0;
}
}
#endif
NAKED
void sub_08060158(Entity* this) {
asm(".include \"asm/non_matching/forestMinish/sub_08060158.inc\"");
}
void sub_080601D4(Entity* this) {
u32 temp;
u32 uVar2;
if (CheckGlobalFlag(4) == 0) {
uVar2 = 2;
} else {
temp = CheckKinstoneFused(0x17);
uVar2 = (-temp | temp) >> 0x1f;
}
TextboxNoOverlap(gUnk_0810A354[uVar2], this);
}
void sub_08060208(Entity *this)
{
ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]);
}
void sub_0806021C(Entity *this)
{
u32 uVar1;
u32 uVar2;
//jabber nut
uVar1 = GetInventoryValue(0x5B);
uVar2 = (-uVar1 | uVar1) >> 0x1f;
//earth element
if (GetInventoryValue(0x40)) {
uVar2 = 2;
}
//mole mitts
if (GetInventoryValue(0x13)) {
uVar2 = 3;
}
ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x8 + uVar2 * 2);
}
void sub_0806025C(Entity *this)
{
ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]);
}
void sub_08060270(Entity *this)
{
u32 index;
//flippers
if (GetInventoryValue(0x46) == 0) {
index = 1;
if (CheckGlobalFlag(0x29) == 0) {
index = 0;
SetGlobalFlag(0x29);
}
}
else {
index = 3;
if (CheckLocalFlag(0x76) == 0) {
index = 2;
SetLocalFlag(0x76);
}
}
TextboxNoOverlap(gUnk_0810A35A[index], this);
}
void sub_080602BC(Entity *this)
{
u32 index;
//spin attack
if (GetInventoryValue(0x48) != 0) {
index = (Random() & 1) + 2;
}
else {
if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) {
index = 1;
}
else {
index = 0;
}
}
TextboxNoOverlap(gUnk_0810A362[index], this);
}
void sub_0806030C(Entity* this, u32 *arg1)
{
ModBombs(*(arg1 + 1));
}
void sub_08060318(void)
{
Entity *ent;
int i;
for (i = 2; i >= 0; i--) {
ent = sub_0805EB00(8, 2, 2);
if (ent != NULL) {
sub_080A29BC(ent);
DeleteEntity(ent);
}
}
}
void sub_08060340(void)
{
gUnk_02002A40.unk3 = gUnk_02002A40.unk2;
}
u32 sub_08060354(void)
{
u32 iVar1;
s32 iVar2;
iVar2 = gUnk_02002A40.unk2 - gUnk_02002A40.unk3;
if (CheckGlobalFlag(0x3b) == 0) {
if (4 < iVar2) {
return 0x8444;
}
}
else {
if (CheckGlobalFlag(0x3c) == 0) {
if (iVar2 > 9) {
return 0x8444;
}
}
else {
if (CheckGlobalFlag(0x3d) == 0) {
if (iVar2 > 14) {
return 0x8444;
}
}
}
}
return 0;
}
void ForestMinish_Fusion(Entity *this)
{
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
this->action++;
this->spriteSettings.b.draw = TRUE;
sub_0805E3A0(this, 2);
InitializeAnimation(this, 6);
}
}
else {
GetNextFrame(this);
}
}