mirror of
https://github.com/zeldaret/tmc
synced 2026-05-30 00:47:12 -04:00
util files
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0806EC20
|
||||
sub_0806EC20: @ 0x0806EC20
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x58
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateNPC
|
||||
cmp r0, #0
|
||||
beq _0806EC34
|
||||
str r4, [r0, #0x50]
|
||||
_0806EC34:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0806EC38
|
||||
sub_0806EC38: @ 0x0806EC38
|
||||
push {lr}
|
||||
movs r0, #7
|
||||
movs r1, #0x58
|
||||
movs r2, #7
|
||||
bl FindEntityByID
|
||||
cmp r0, #0
|
||||
beq _0806EC4C
|
||||
bl DeleteEntity
|
||||
_0806EC4C:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
-1749
File diff suppressed because it is too large
Load Diff
@@ -1,197 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start CreateItemEntity
|
||||
CreateItemEntity: @ 0x080A7C00
|
||||
push {r4, lr}
|
||||
bl GiveItemWithCutscene
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _080A7C16
|
||||
ldrb r1, [r4, #0xa]
|
||||
movs r2, #0
|
||||
bl sub_080A276C
|
||||
str r0, [r4, #0x50]
|
||||
_080A7C16:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_080A7C18
|
||||
sub_080A7C18: @ 0x080A7C18
|
||||
push {lr}
|
||||
bl GiveItemWithCutscene
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _080A7C32
|
||||
ldr r0, _080A7C34 @ =gPlayerEntity
|
||||
str r0, [r2, #0x50]
|
||||
ldrb r1, [r2, #0xa]
|
||||
adds r0, r2, #0
|
||||
movs r2, #0
|
||||
bl sub_08078AF0
|
||||
_080A7C32:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A7C34: .4byte gPlayerEntity
|
||||
|
||||
thumb_func_start GiveItemWithCutscene
|
||||
GiveItemWithCutscene: @ 0x080A7C38
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r6, r1, #0
|
||||
adds r7, r2, #0
|
||||
cmp r5, #0x3f
|
||||
bne _080A7C52
|
||||
ldr r0, _080A7C78 @ =gSave
|
||||
adds r0, #0xbb
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _080A7C52
|
||||
movs r5, #0x57
|
||||
movs r6, #0
|
||||
_080A7C52:
|
||||
bl sub_0805E744
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _080A7C72
|
||||
strb r5, [r4, #0xa]
|
||||
strb r6, [r4, #0xb]
|
||||
strb r7, [r4, #0xe]
|
||||
movs r0, #0xb
|
||||
strb r0, [r4, #9]
|
||||
movs r0, #6
|
||||
strb r0, [r4, #8]
|
||||
adds r0, r4, #0
|
||||
movs r1, #6
|
||||
bl AppendEntityToList
|
||||
_080A7C72:
|
||||
adds r0, r4, #0
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_080A7C78: .4byte gSave
|
||||
|
||||
thumb_func_start sub_080A7C7C
|
||||
sub_080A7C7C: @ 0x080A7C7C
|
||||
push {lr}
|
||||
ldr r0, _080A7C88 @ =gUnk_02017660
|
||||
movs r1, #0x40
|
||||
bl MemClear
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A7C88: .4byte gUnk_02017660
|
||||
|
||||
thumb_func_start sub_080A7C8C
|
||||
sub_080A7C8C: @ 0x080A7C8C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
adds r6, r1, #0
|
||||
ldr r4, _080A7C9C @ =gUnk_02017660
|
||||
movs r2, #0
|
||||
movs r1, #0
|
||||
b _080A7CA8
|
||||
.align 2, 0
|
||||
_080A7C9C: .4byte gUnk_02017660
|
||||
_080A7CA0:
|
||||
adds r1, #1
|
||||
adds r4, #8
|
||||
cmp r1, #7
|
||||
bhi _080A7CB0
|
||||
_080A7CA8:
|
||||
ldrh r0, [r4, #4]
|
||||
cmp r0, r5
|
||||
bne _080A7CA0
|
||||
movs r2, #1
|
||||
_080A7CB0:
|
||||
lsrs r1, r6, #1
|
||||
ldrb r0, [r4, #6]
|
||||
lsls r0, r0, #0x1f
|
||||
lsrs r0, r0, #0x1f
|
||||
cmp r1, r0
|
||||
bne _080A7CF4
|
||||
cmp r2, #0
|
||||
beq _080A7CD2
|
||||
ldrb r0, [r4, #1]
|
||||
bl SetLocalFlag
|
||||
ldrb r0, [r4, #2]
|
||||
ldrb r1, [r4, #3]
|
||||
movs r2, #0
|
||||
bl CreateItemEntity
|
||||
b _080A7CDC
|
||||
_080A7CD2:
|
||||
movs r0, #0x60
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateItemEntity
|
||||
_080A7CDC:
|
||||
movs r0, #0x74
|
||||
adds r1, r5, #0
|
||||
adds r2, r6, #0
|
||||
bl sub_0807B7D8
|
||||
movs r0, #0
|
||||
movs r1, #0x78
|
||||
bl RequestPriorityDuration
|
||||
ldr r0, _080A7CF8 @ =0x0000011B
|
||||
bl SoundReq
|
||||
_080A7CF4:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_080A7CF8: .4byte 0x0000011B
|
||||
|
||||
thumb_func_start sub_080A7CFC
|
||||
sub_080A7CFC: @ 0x080A7CFC
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
movs r4, #0xc0
|
||||
lsls r4, r4, #3
|
||||
movs r6, #0
|
||||
movs r0, #3
|
||||
bl GetCurrentRoomProperty
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _080A7D38
|
||||
_080A7D12:
|
||||
ldrh r0, [r1, #4]
|
||||
cmp r0, r5
|
||||
bne _080A7D30
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #5
|
||||
beq _080A7D24
|
||||
cmp r0, #6
|
||||
beq _080A7D2A
|
||||
b _080A7D38
|
||||
_080A7D24:
|
||||
movs r6, #0
|
||||
ldrh r4, [r1, #6]
|
||||
b _080A7D38
|
||||
_080A7D2A:
|
||||
movs r6, #1
|
||||
ldrh r4, [r1, #6]
|
||||
b _080A7D38
|
||||
_080A7D30:
|
||||
adds r1, #8
|
||||
ldrh r0, [r1, #4]
|
||||
cmp r0, #0
|
||||
bne _080A7D12
|
||||
_080A7D38:
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl sub_080A7D44
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_080A7D44
|
||||
sub_080A7D44: @ 0x080A7D44
|
||||
push {lr}
|
||||
cmp r1, #0
|
||||
beq _080A7D52
|
||||
movs r1, #0
|
||||
bl sub_08078AA8
|
||||
b _080A7D56
|
||||
_080A7D52:
|
||||
bl MessageFromTarget
|
||||
_080A7D56:
|
||||
pop {pc}
|
||||
@@ -0,0 +1,216 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
mov r8, r0
|
||||
adds r6, r1, #0
|
||||
ldrh r1, [r6, #2]
|
||||
asrs r7, r1, #4
|
||||
movs r0, #1
|
||||
ands r7, r0
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
cmp r1, #6
|
||||
bls _0806F1C8
|
||||
b _0806F332
|
||||
_0806F1C8:
|
||||
lsls r0, r1, #2
|
||||
ldr r1, _0806F1D4 @ =_0806F1D8
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0806F1D4: .4byte _0806F1D8
|
||||
_0806F1D8: @ jump table
|
||||
.4byte _0806F332 @ case 0
|
||||
.4byte _0806F342 @ case 1
|
||||
.4byte _0806F1F4 @ case 2
|
||||
.4byte _0806F24E @ case 3
|
||||
.4byte _0806F2BA @ case 4
|
||||
.4byte _0806F324 @ case 5
|
||||
.4byte _0806F336 @ case 6
|
||||
_0806F1F4:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F210 @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #1
|
||||
beq _0806F22A
|
||||
cmp r1, #1
|
||||
bgt _0806F214
|
||||
cmp r1, #0
|
||||
beq _0806F21A
|
||||
b _0806F248
|
||||
.align 2, 0
|
||||
_0806F210: .4byte 0x00000FFF
|
||||
_0806F214:
|
||||
cmp r1, #2
|
||||
beq _0806F23A
|
||||
b _0806F248
|
||||
_0806F21A:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
adds r5, r0, #0
|
||||
_0806F222:
|
||||
adds r0, r4, #0
|
||||
bl SetRoomFlag
|
||||
b _0806F248
|
||||
_0806F22A:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
adds r5, r0, #0
|
||||
_0806F232:
|
||||
adds r0, r4, #0
|
||||
bl SetLocalFlag
|
||||
b _0806F248
|
||||
_0806F23A:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
adds r5, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl SetGlobalFlag
|
||||
_0806F248:
|
||||
cmp r5, #0
|
||||
beq _0806F342
|
||||
b _0806F34C
|
||||
_0806F24E:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F26C @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #1
|
||||
beq _0806F28A
|
||||
cmp r1, #1
|
||||
bgt _0806F270
|
||||
cmp r1, #0
|
||||
beq _0806F276
|
||||
b _0806F248
|
||||
.align 2, 0
|
||||
_0806F26C: .4byte 0x00000FFF
|
||||
_0806F270:
|
||||
cmp r1, #2
|
||||
beq _0806F29E
|
||||
b _0806F248
|
||||
_0806F276:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0806F222
|
||||
adds r0, r4, #0
|
||||
bl ClearRoomFlag
|
||||
b _0806F248
|
||||
_0806F28A:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
beq _0806F232
|
||||
adds r0, r4, #0
|
||||
bl ClearLocalFlag
|
||||
b _0806F248
|
||||
_0806F29E:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0
|
||||
bne _0806F2B2
|
||||
adds r0, r4, #0
|
||||
bl SetGlobalFlag
|
||||
b _0806F248
|
||||
_0806F2B2:
|
||||
adds r0, r4, #0
|
||||
bl ClearGlobalFlag
|
||||
b _0806F248
|
||||
_0806F2BA:
|
||||
ldr r4, [r6]
|
||||
asrs r1, r4, #0xc
|
||||
movs r0, #0xf
|
||||
ands r1, r0
|
||||
ldr r0, _0806F2D8 @ =0x00000FFF
|
||||
ands r4, r0
|
||||
movs r5, #0
|
||||
cmp r1, #4
|
||||
bhi _0806F248
|
||||
lsls r0, r1, #2
|
||||
ldr r1, _0806F2DC @ =_0806F2E0
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0806F2D8: .4byte 0x00000FFF
|
||||
_0806F2DC: .4byte _0806F2E0
|
||||
_0806F2E0: @ jump table
|
||||
.4byte _0806F2F4 @ case 0
|
||||
.4byte _0806F2FC @ case 1
|
||||
.4byte _0806F304 @ case 2
|
||||
.4byte _0806F30C @ case 3
|
||||
.4byte _0806F314 @ case 4
|
||||
_0806F2F4:
|
||||
adds r0, r4, #0
|
||||
bl CheckRoomFlag
|
||||
b _0806F320
|
||||
_0806F2FC:
|
||||
adds r0, r4, #0
|
||||
bl CheckLocalFlag
|
||||
b _0806F320
|
||||
_0806F304:
|
||||
adds r0, r4, #0
|
||||
bl CheckGlobalFlag
|
||||
b _0806F320
|
||||
_0806F30C:
|
||||
adds r0, r4, #0
|
||||
bl CheckKinstoneFused
|
||||
b _0806F320
|
||||
_0806F314:
|
||||
adds r0, r4, #0
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
beq _0806F320
|
||||
movs r0, #1
|
||||
_0806F320:
|
||||
adds r5, r0, #0
|
||||
b _0806F248
|
||||
_0806F324:
|
||||
ldr r1, [r6, #4]
|
||||
cmp r1, #0
|
||||
beq _0806F332
|
||||
mov r0, r8
|
||||
bl _call_via_r1
|
||||
b _0806F35E
|
||||
_0806F332:
|
||||
movs r0, #0
|
||||
b _0806F34E
|
||||
_0806F336:
|
||||
ldr r0, _0806F348 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F34C
|
||||
_0806F342:
|
||||
ldrh r0, [r6, #6]
|
||||
b _0806F34E
|
||||
.align 2, 0
|
||||
_0806F348: .4byte gPlayerState
|
||||
_0806F34C:
|
||||
ldrh r0, [r6, #4]
|
||||
_0806F34E:
|
||||
cmp r7, #0
|
||||
beq _0806F35A
|
||||
mov r1, r8
|
||||
bl MessageNoOverlap
|
||||
b _0806F35E
|
||||
_0806F35A:
|
||||
bl MessageFromTarget
|
||||
_0806F35E:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.syntax divided
|
||||
@@ -0,0 +1,30 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r2, r0, #0
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r2, r1]
|
||||
ldr r4, [r2, #0x48]
|
||||
movs r1, #0
|
||||
ldrsb r1, [r4, r1]
|
||||
adds r0, r0, r1
|
||||
ldr r3, _0806F7CC @ =gRoomControls
|
||||
ldrh r1, [r3, #6]
|
||||
subs r0, r0, r1
|
||||
movs r5, #0x32
|
||||
ldrsh r1, [r2, r5]
|
||||
movs r2, #1
|
||||
ldrsb r2, [r4, r2]
|
||||
adds r1, r1, r2
|
||||
ldrh r2, [r3, #8]
|
||||
subs r1, r1, r2
|
||||
movs r2, #0x3f
|
||||
lsrs r0, r0, #4
|
||||
ands r0, r2
|
||||
lsrs r1, r1, #4
|
||||
ands r1, r2
|
||||
lsls r1, r1, #6
|
||||
adds r0, r0, r1
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806F7CC: .4byte gRoomControls
|
||||
.syntax divided
|
||||
@@ -0,0 +1,25 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
adds r4, r2, #0
|
||||
adds r5, r3, #0
|
||||
movs r2, #0x2e
|
||||
ldrsh r6, [r0, r2]
|
||||
movs r2, #0x32
|
||||
ldrsh r3, [r0, r2]
|
||||
mov r8, r3
|
||||
movs r3, #0x2e
|
||||
ldrsh r2, [r1, r3]
|
||||
adds r2, r2, r4
|
||||
movs r0, #0x32
|
||||
ldrsh r3, [r1, r0]
|
||||
adds r3, r3, r5
|
||||
adds r0, r6, #0
|
||||
mov r1, r8
|
||||
bl sub_080045D4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,48 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r2, r0, #0
|
||||
ldrb r4, [r2, #0x14]
|
||||
ldrb r1, [r2, #0x15]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0806F9E6
|
||||
movs r0, #0x1c
|
||||
ands r0, r1
|
||||
lsrs r3, r0, #2
|
||||
movs r1, #1
|
||||
adds r0, r3, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F9C4
|
||||
subs r0, r3, r4
|
||||
adds r0, #1
|
||||
movs r1, #4
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F9E6
|
||||
_0806F9C4:
|
||||
ldrb r0, [r2, #0x15]
|
||||
lsrs r0, r0, #2
|
||||
movs r1, #0x7e
|
||||
ands r0, r1
|
||||
strb r0, [r2, #0x14]
|
||||
adds r4, r0, #0
|
||||
cmp r4, #4
|
||||
bhi _0806F9DE
|
||||
ldrb r1, [r2, #0x18]
|
||||
movs r0, #0x41
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
b _0806F9E4
|
||||
_0806F9DE:
|
||||
ldrb r0, [r2, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
_0806F9E4:
|
||||
strb r0, [r2, #0x18]
|
||||
_0806F9E6:
|
||||
adds r0, r4, #0
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -0,0 +1,65 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
sub sp, #4
|
||||
ldr r7, _0806F114 @ =gUnk_03003DA8
|
||||
ldr r5, [r7, #4]
|
||||
movs r0, #0
|
||||
cmp r5, r7
|
||||
beq _0806F0BA
|
||||
_0806F0B2:
|
||||
adds r0, #1
|
||||
ldr r5, [r5, #4]
|
||||
cmp r5, r7
|
||||
bne _0806F0B2
|
||||
_0806F0BA:
|
||||
cmp r0, #1
|
||||
bls _0806F10E
|
||||
ldr r5, [r7, #4]
|
||||
cmp r5, r7
|
||||
beq _0806F10E
|
||||
movs r2, #1
|
||||
_0806F0C6:
|
||||
ldrb r1, [r5, #0x10]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F108
|
||||
ldrb r1, [r5, #0x17]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F108
|
||||
ldr r4, [r5, #4]
|
||||
cmp r4, r7
|
||||
beq _0806F108
|
||||
movs r6, #1
|
||||
_0806F0E2:
|
||||
ldrb r1, [r4, #0x10]
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F102
|
||||
ldrb r1, [r4, #0x17]
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806F102
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
str r2, [sp]
|
||||
bl sub_08004484
|
||||
ldr r2, [sp]
|
||||
_0806F102:
|
||||
ldr r4, [r4, #4]
|
||||
cmp r4, r7
|
||||
bne _0806F0E2
|
||||
_0806F108:
|
||||
ldr r5, [r5, #4]
|
||||
cmp r5, r7
|
||||
bne _0806F0C6
|
||||
_0806F10E:
|
||||
add sp, #4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0806F114: .4byte gUnk_03003DA8
|
||||
.syntax divided
|
||||
+2
-2
@@ -29,7 +29,7 @@ extern Entity* CreateDeathFx(Entity*, u32, u32);
|
||||
extern void UpdateAnimationVariableFrames(Entity*, u32);
|
||||
extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
|
||||
extern bool32 LoadFixedGFX(Entity*, u32);
|
||||
extern Entity* CreateItemEntity(u32, u32, u32);
|
||||
extern void CreateItemEntity(u32, u32, u32);
|
||||
extern u32 ProcessMovement(Entity*);
|
||||
extern void MenuFadeIn(u32, u32);
|
||||
extern void LoadResourceAsync(const void*, u32, u32);
|
||||
@@ -276,7 +276,7 @@ extern Entity* sub_08077C0C(ItemBehavior*, u32);
|
||||
extern void sub_08077D38(ItemBehavior*, u32);
|
||||
extern void sub_08077E78(ItemBehavior*, u32);
|
||||
extern void UpdateItemAnim(ItemBehavior*);
|
||||
extern void sub_0806F948(Entity*);
|
||||
extern u32 sub_0806F948(Entity*);
|
||||
extern void sub_08077DF4(ItemBehavior*, u32);
|
||||
extern void sub_08077BB8(ItemBehavior*);
|
||||
extern bool32 sub_08077EFC(ItemBehavior*);
|
||||
|
||||
@@ -143,6 +143,17 @@ typedef struct {
|
||||
} ScreenTransition;
|
||||
extern ScreenTransition gScreenTransition;
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3;
|
||||
u16 _4;
|
||||
u8 _6;
|
||||
u8 _7;
|
||||
} TileEntity;
|
||||
extern TileEntity gUnk_02017660[];
|
||||
|
||||
extern void SetTileType(u32, u32, u32);
|
||||
extern void sub_08080964(u32 time, u32 magnitude); // shake screen
|
||||
|
||||
|
||||
+6
-5
@@ -42,11 +42,12 @@ typedef struct {
|
||||
/*0x088*/ PlayerWorldStatus saved_status;
|
||||
/*0x0A8*/ Stats stats;
|
||||
/*0x0D0*/ u8 fillerD0[0x71];
|
||||
/*0x141*/ u8 unk141[0x45c - 0x141];
|
||||
/*0x45c*/ u8 unk45C[0x10];
|
||||
/*0x46c*/ u8 unk46C[0x20];
|
||||
/*0x48c*/ u32 unk48C[8];
|
||||
/*0x4ac*/ u8 filler4ac[0x8];
|
||||
/*0x141*/ u8 unk141[0x1c1 - 0x141];
|
||||
/*0x1C1*/ u8 unk1C1[0x45c - 0x1c1];
|
||||
/*0x45C*/ u8 unk45C[0x10];
|
||||
/*0x46C*/ u8 unk46C[0x20];
|
||||
/*0x48C*/ u32 unk48C[8];
|
||||
/*0x4AC*/ u8 filler4ac[0x8];
|
||||
} SaveFile;
|
||||
|
||||
extern SaveFile gSave;
|
||||
|
||||
@@ -475,7 +475,7 @@ SECTIONS {
|
||||
/* END enemies */
|
||||
src/code_08049CD4.o(.text);
|
||||
asm/code_08049D30.o(.text);
|
||||
src/enemyInit.o(.text);
|
||||
src/enemyUtils.o(.text);
|
||||
asm/code_0804A720.o(.text);
|
||||
asm/sub_0804AA30.o(.text);
|
||||
src/createEnemy.o(.text);
|
||||
@@ -650,9 +650,7 @@ SECTIONS {
|
||||
src/npc/phonograph.o(.text);
|
||||
src/npc/npc58.o(.text);
|
||||
/* END npcs */
|
||||
asm/code_0806EC20.o(.text);
|
||||
src/createNPC.o(.text);
|
||||
asm/code_0806ED78.o(.text);
|
||||
src/npcUtils.o(.text);
|
||||
src/coord.o(.text);
|
||||
asm/code_0806FA6C.o(.text);
|
||||
src/playerItem/playerItem12.o(.text);
|
||||
@@ -901,7 +899,7 @@ SECTIONS {
|
||||
asm/objectC1.o(.text);
|
||||
/* END objects */
|
||||
asm/sub_080A276C.o(.text);
|
||||
src/createObject.o(.text);
|
||||
src/objectUtils.o(.text);
|
||||
asm/code_080A29BC.o(.text);
|
||||
src/playerItem/playerItemShield.o(.text);
|
||||
src/playerItem/playerItem15.o(.text);
|
||||
@@ -915,8 +913,8 @@ SECTIONS {
|
||||
src/sub_080A554C.o(.text);
|
||||
asm/code_080A5574.o(.text);
|
||||
src/playerItem/playerItemSword.o(.text);
|
||||
asm/code_080A7C00.o(.text);
|
||||
src/projectileInit.o(.text);
|
||||
src/playerItemUtils.o(.text);
|
||||
src/projectileUtils.o(.text);
|
||||
src/projectile/darkNutSwordSlash.o(.text);
|
||||
src/projectile/rockProjectile.o(.text);
|
||||
src/projectile/boneProjectile.o(.text);
|
||||
|
||||
+251
@@ -1,10 +1,261 @@
|
||||
#include "area.h"
|
||||
#include "player.h"
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "coord.h"
|
||||
#include "utils.h"
|
||||
#include "audio.h"
|
||||
#include "room.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern u8 gUnk_08114F78[];
|
||||
extern u8 gUnk_08114F80[];
|
||||
|
||||
typedef struct {
|
||||
u32 _0;
|
||||
u16 _4[0x1000];
|
||||
u8 _2004[0x2000];
|
||||
} struct_02025EB0;
|
||||
extern struct_02025EB0 gUnk_02025EB0;
|
||||
|
||||
extern s8 gUnk_08126EE4[];
|
||||
extern u8 gUnk_08114F38[];
|
||||
extern u8 gUnk_08114F58[];
|
||||
|
||||
void sub_080027EA(Entity*, u32, u32);
|
||||
void sub_0806F5BC(Entity*, u32, u32);
|
||||
u32 sub_0806F58C(Entity*, Entity*);
|
||||
u32 sub_0806FCA0(Entity*, Entity*);
|
||||
|
||||
void sub_0806F364(void) {
|
||||
gArea.filler[2] ^= 0x80;
|
||||
MemClear(&gArea.filler5[(gArea.filler[2] + 7) / 8], 16);
|
||||
}
|
||||
|
||||
void sub_0806F38C(void) {
|
||||
gArea.filler[2] ^= 0x80;
|
||||
}
|
||||
|
||||
u32 sub_0806F39C(Entity* ent) {
|
||||
s32 dist;
|
||||
|
||||
if (gPlayerEntity.animationState & 2) {
|
||||
dist = ent->x.HALF.HI - gPlayerEntity.x.HALF.HI;
|
||||
} else {
|
||||
dist = ent->y.HALF.HI - gPlayerEntity.y.HALF.HI;
|
||||
}
|
||||
if (dist < 0) {
|
||||
dist = -dist;
|
||||
}
|
||||
|
||||
if (dist > 64) {
|
||||
sub_080027EA(&gPlayerEntity, ent->speed, ent->direction);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F3E4(Entity* ent) {
|
||||
Entity tmp_ent;
|
||||
s8* p;
|
||||
|
||||
if ((gPlayerState.field_0x1c & 0x7F) != 1)
|
||||
return 0;
|
||||
switch (gPlayerState.field_0x1d[0]) {
|
||||
case 1:
|
||||
ent->field_0x46 += 64;
|
||||
break;
|
||||
case 2:
|
||||
ent->field_0x46 += 128;
|
||||
break;
|
||||
case 3:
|
||||
ent->field_0x46 += 192;
|
||||
break;
|
||||
}
|
||||
if (ent->field_0x46 > 0x500)
|
||||
ent->field_0x46 = 0x500;
|
||||
p = &gUnk_08126EE4[gPlayerEntity.animationState & 0xE];
|
||||
tmp_ent.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI;
|
||||
tmp_ent.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI;
|
||||
sub_0806F5BC(ent, ent->field_0x46, GetFacingDirection(ent, &tmp_ent));
|
||||
if (sub_0800419C(&tmp_ent, ent, 4, 4)) {
|
||||
u32 state = ent->field_0x1c & 0xF;
|
||||
if (state == 2) {
|
||||
Entity* item;
|
||||
ent->subAction = 3;
|
||||
(Entity*)gPlayerEntity.field_0x70.WORD = ent;
|
||||
gPlayerState.field_0x1c = 7;
|
||||
item = CreatePlayerItem(0x11, 0, 0, 0);
|
||||
if (item != NULL) {
|
||||
item->child = ent;
|
||||
ent->parent = item;
|
||||
}
|
||||
SoundReq(SFX_ED);
|
||||
} else if (state == 1) {
|
||||
gPlayerState.field_0x2c[10] = 1;
|
||||
SoundReq(SFX_EF);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_0806F4E8(Entity* ent) {
|
||||
switch (ent->field_0x1d & 3) {
|
||||
case 2:
|
||||
ent->spriteOffsetX = -2;
|
||||
break;
|
||||
case 1:
|
||||
ent->spriteOffsetX = 0;
|
||||
break;
|
||||
case 0:
|
||||
ent->spriteOffsetX = 2;
|
||||
break;
|
||||
case 3:
|
||||
ent->spriteOffsetX = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0806F520(Entity* ent) {
|
||||
if (ent->bitfield == 0x93)
|
||||
return 1;
|
||||
ent->field_0x3a &= ~4;
|
||||
ent->spriteOffsetY = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F548(Entity* a, Entity* b, u32 x, u32 y) {
|
||||
if (EntityInRectRadius(a, b, x, y))
|
||||
return sub_0806F58C(a, b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F564(Entity* ent, u32 b, u32 c) {
|
||||
u32 tmp = sub_080045D4(ent->x.HALF.HI, ent->y.HALF.HI, b, c);
|
||||
return ent->animationState == sub_0806F5A4(tmp);
|
||||
}
|
||||
|
||||
u32 sub_0806F58C(Entity* a, Entity* b) {
|
||||
return a->animationState >> 1 == sub_0806FCA0(a, b);
|
||||
}
|
||||
|
||||
u32 sub_0806F5A4(u32 idx) {
|
||||
return gUnk_08114F38[idx];
|
||||
}
|
||||
|
||||
u32 sub_0806F5B0(u32 idx) {
|
||||
return gUnk_08114F58[idx];
|
||||
}
|
||||
|
||||
void sub_0806F5BC(Entity* ent, u32 a, u32 b) {
|
||||
if ((b & 0x80) == 0) {
|
||||
u32 m1 = b;
|
||||
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[m1 *= 8], a), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[m1 + 64], a), 256) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806F62C(Entity* ent, u32 a, u32 b) {
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[(u8)b], a), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[(u8)b + 64], a), 256) << 8;
|
||||
}
|
||||
|
||||
void sub_0806F69C(Entity* ent) {
|
||||
if ((ent->direction & 0x80) == 0) {
|
||||
ent->x.WORD += FixedDiv(FixedMul(gSineTable[ent->direction * 8], ent->speed), 256) << 8;
|
||||
ent->y.WORD -= FixedDiv(FixedMul(gSineTable[ent->direction * 8 + 64], ent->speed), 256) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806F704(Entity* ent, u32 a2) {
|
||||
ent->x.HALF.HI = (((16 * a2) & 0x3F0) | 8) + gRoomControls.roomOriginX;
|
||||
ent->y.HALF.HI = (((a2 >> 2) & 0x3F0) | 8) + gRoomControls.roomOriginY;
|
||||
}
|
||||
|
||||
u32 sub_0806F730(Entity* ent) {
|
||||
u32 tmp = 0x3F;
|
||||
u32 x = ent->x.HALF.HI + ent->hitbox->offset_x - gRoomControls.roomOriginX;
|
||||
u32 y = ent->y.HALF.HI + ent->hitbox->offset_y - gRoomControls.roomOriginY;
|
||||
switch (ent->animationState) {
|
||||
case 0:
|
||||
y -= ent->hitbox->unk2[3];
|
||||
break;
|
||||
case 4:
|
||||
y += ent->hitbox->unk2[3];
|
||||
break;
|
||||
case 2:
|
||||
x += ent->hitbox->unk2[0];
|
||||
break;
|
||||
case 6:
|
||||
x -= ent->hitbox->unk2[0];
|
||||
break;
|
||||
}
|
||||
return ((x >> 4) & tmp) + (((y >> 4) & tmp) << 6);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F798.inc", u32 sub_0806F798(Entity* ent));
|
||||
|
||||
u32 sub_0806F7D0(Entity* ent) {
|
||||
return gUnk_02025EB0._2004[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F7EC(Entity* ent) {
|
||||
return gUnk_02025EB0._4[sub_0806F730(ent)];
|
||||
}
|
||||
|
||||
u32 sub_0806F804(u32 x, u32 y) {
|
||||
u32 idx = ((x >> 4) & 0x3F) + 4 * (y & 0x3F0);
|
||||
return gUnk_02025EB0._4[idx];
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F824.inc", void sub_0806F824(Entity* a, Entity* b, u32 x, u32 y));
|
||||
|
||||
u32 sub_0806F854(Entity* ent, s32 x, s32 y) {
|
||||
if (ent->z.WORD == 0 || (ent->collisionLayer & 2))
|
||||
return 0;
|
||||
if (!sub_080002F0(TILE(ent->x.HALF.HI + x, ent->y.HALF.HI + y), 2, 8)) {
|
||||
ent->spriteRendering.b3 = 1;
|
||||
ent->spriteOrientation.flipY = 1;
|
||||
return 0;
|
||||
}
|
||||
ent->spriteRendering.b3 = 2;
|
||||
ent->spriteOrientation.flipY = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0806F8DC(Entity* ent) {
|
||||
if (ent->collisionLayer & 2)
|
||||
return 0;
|
||||
if (!GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, 2)) {
|
||||
GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, ent->collisionLayer);
|
||||
ent->spriteRendering.b3 = 1;
|
||||
ent->spriteOrientation.flipY = 1;
|
||||
return 0;
|
||||
}
|
||||
ent->spriteRendering.b3 = 2;
|
||||
ent->spriteOrientation.flipY = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0806F948(Entity* ent) {
|
||||
u32 v1;
|
||||
if (gPlayerState.field_0xd == 0xFF)
|
||||
return ent->animationState;
|
||||
|
||||
v1 = gPlayerState.field_0xd / 4;
|
||||
if ((v1 & 1) && !(((v1 + 1) - ent->animationState) & 4)) {
|
||||
return ent->animationState;
|
||||
} else {
|
||||
ent->spriteSettings.flipX = v1 > 4;
|
||||
ent->animationState = v1 & 6;
|
||||
}
|
||||
return ent->animationState;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806F998.inc", u32 sub_0806F998(Entity* ent));
|
||||
|
||||
s16 FixedMul(s16 r0, s16 r1) {
|
||||
s32 temp = r0 * r1;
|
||||
if (temp < 0)
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
// #include "entity.h"
|
||||
// #include "entityData.h"
|
||||
// #include "global.h"
|
||||
|
||||
// extern Entity * DeepFindEntityByID(u32, u32);
|
||||
// extern Entity * GetEmptyEntityByKind();
|
||||
// extern void RegisterRoomEntity(Entity *, EntityData *);
|
||||
// extern u32 sub_0804AF0C(Entity *, EntityData *);
|
||||
// extern void sub_08016A30(Entity *);
|
||||
// extern u32 gRoomControls;
|
||||
|
||||
// Entity * LoadRoomEntity(EntityData *param_1)
|
||||
// {
|
||||
// Entity *preexisting;
|
||||
// Entity *entity;
|
||||
// s32 type;
|
||||
|
||||
// type = param_1->entityType & 15;
|
||||
// if (((param_1->field_0x1 & 240) == 80) &&
|
||||
// (preexisting = DeepFindEntityByID(type,param_1->entitySubtype), preexisting != NULL)) {
|
||||
// entity = NULL;
|
||||
// }
|
||||
// else {
|
||||
// entity = GetEmptyEntityByKind(); //Get empty entity
|
||||
// if (entity != NULL) {
|
||||
// (entity->entityType).type = type;
|
||||
// (entity->entityType).subtype = param_1->entitySubtype;
|
||||
// (entity->entityType).form = param_1->entityform;
|
||||
// RegisterRoomEntity(entity,param_1);
|
||||
// if ((param_1->field_0x1 & 240) != 16) {
|
||||
// (entity->type2 = *(u8 *)¶m_1->entityparameter;
|
||||
// entity->actionDelay = (u8)((u32)param_1->entityparameter >> 8);
|
||||
// if ((type != 9) && (sub_0804AF0C(entity,param_1), entity->field_0x4 != NULL)) {
|
||||
// if ((param_1->entityType & 16) == 0) {
|
||||
// if ((param_1->entityType & 32) != 0) {
|
||||
// entity->collisionLayer = 2;
|
||||
// return entity;
|
||||
// }
|
||||
// if ((gRoomControls & 2) == 0) {
|
||||
// sub_08016A30(entity);
|
||||
// return entity;
|
||||
// }
|
||||
// }
|
||||
// entity->collisionLayer = 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return entity;
|
||||
// }
|
||||
@@ -1,67 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "definitions.h"
|
||||
|
||||
extern const NPCDefinition gNPCDefinitions[];
|
||||
|
||||
extern Hitbox* gNPCHitboxes[];
|
||||
const NPCDefinition* GetNPCDefinition(Entity*);
|
||||
|
||||
const NPCDefinition* GetNPCDefinition(Entity* this) {
|
||||
const NPCDefinition* definition = &gNPCDefinitions[this->id];
|
||||
if (definition->bitfield.type == 2) {
|
||||
definition = &definition->data.definition[this->type];
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
void NPCInit(Entity* this) {
|
||||
u32 tmp;
|
||||
u32 tmp2;
|
||||
|
||||
if ((this->flags & 1) == 0) {
|
||||
const NPCDefinition* definition = GetNPCDefinition(this);
|
||||
if (definition->bitfield.type == 0) {
|
||||
// No sprite for this NPC
|
||||
this->flags |= 1;
|
||||
} else {
|
||||
tmp = definition->bitfield.gfx;
|
||||
switch (definition->bitfield.gfx_type) {
|
||||
case 2:
|
||||
this->spriteVramOffset = definition->bitfield.gfx;
|
||||
break;
|
||||
case 1:
|
||||
LoadSwapGFX(this, tmp, 0);
|
||||
break;
|
||||
default:
|
||||
LoadFixedGFX(this, tmp);
|
||||
break;
|
||||
}
|
||||
tmp = definition->data.sprite.paletteIndex;
|
||||
LoadObjPalette(this, tmp);
|
||||
this->spriteIndex = definition->data.sprite.spriteIndex;
|
||||
this->spriteSettings.shadow = definition->data.sprite.shadow;
|
||||
this->spritePriority.b1 = definition->data.sprite.spritePriority;
|
||||
this->spriteSettings.draw = definition->data.sprite.draw;
|
||||
this->hitbox = gNPCHitboxes[definition->bitfield.hitbox];
|
||||
this->flags |= ENT_DID_INIT;
|
||||
tmp2 = 0xff;
|
||||
this->animIndex = tmp2;
|
||||
this->frameIndex = tmp2;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter) {
|
||||
Entity* entity = GetEmptyEntity();
|
||||
if (entity != NULL) {
|
||||
entity->kind = 7;
|
||||
entity->id = subtype;
|
||||
entity->type = form;
|
||||
entity->type2 = parameter;
|
||||
AppendEntityToList(entity, 7);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
+312
@@ -0,0 +1,312 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "definitions.h"
|
||||
#include "save.h"
|
||||
|
||||
extern const NPCDefinition gNPCDefinitions[];
|
||||
|
||||
extern Hitbox* gNPCHitboxes[];
|
||||
const NPCDefinition* GetNPCDefinition(Entity*);
|
||||
extern u32 (*gUnk_08114EFC[])();
|
||||
extern u32 (*gUnk_08114F0C[])(Entity*, u8*);
|
||||
|
||||
typedef struct {
|
||||
u16 _0;
|
||||
u16 _2;
|
||||
u16 _4;
|
||||
} NPCData;
|
||||
extern NPCData* gUnk_08001A7C[];
|
||||
|
||||
u32 sub_0800445C(Entity*);
|
||||
void sub_08077B20(void);
|
||||
void sub_0806EF14(Entity*);
|
||||
void sub_0806F69C(Entity*);
|
||||
void sub_0806EF4C(Entity*, u16*);
|
||||
u32 sub_080041DC(Entity*, u32, u32);
|
||||
u32 sub_0806EF74(Entity*, u32);
|
||||
u32 sub_0806EF88(Entity*);
|
||||
|
||||
void sub_0806EC20(Entity* ent) {
|
||||
Entity* e = CreateNPC(0x58, 0, 0);
|
||||
if (e != NULL) {
|
||||
e->parent = ent;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0806EC38(void) {
|
||||
Entity* e = FindEntityByID(7, 0x58, 7);
|
||||
if (e != NULL)
|
||||
DeleteEntity(e);
|
||||
}
|
||||
|
||||
const NPCDefinition* GetNPCDefinition(Entity* this) {
|
||||
const NPCDefinition* definition = &gNPCDefinitions[this->id];
|
||||
if (definition->bitfield.type == 2) {
|
||||
definition = &definition->data.definition[this->type];
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
void NPCInit(Entity* this) {
|
||||
u32 tmp;
|
||||
u32 tmp2;
|
||||
|
||||
if ((this->flags & 1) == 0) {
|
||||
const NPCDefinition* definition = GetNPCDefinition(this);
|
||||
if (definition->bitfield.type == 0) {
|
||||
// No sprite for this NPC
|
||||
this->flags |= 1;
|
||||
} else {
|
||||
tmp = definition->bitfield.gfx;
|
||||
switch (definition->bitfield.gfx_type) {
|
||||
case 2:
|
||||
this->spriteVramOffset = definition->bitfield.gfx;
|
||||
break;
|
||||
case 1:
|
||||
LoadSwapGFX(this, tmp, 0);
|
||||
break;
|
||||
default:
|
||||
LoadFixedGFX(this, tmp);
|
||||
break;
|
||||
}
|
||||
tmp = definition->data.sprite.paletteIndex;
|
||||
LoadObjPalette(this, tmp);
|
||||
this->spriteIndex = definition->data.sprite.spriteIndex;
|
||||
this->spriteSettings.shadow = definition->data.sprite.shadow;
|
||||
this->spritePriority.b1 = definition->data.sprite.spritePriority;
|
||||
this->spriteSettings.draw = definition->data.sprite.draw;
|
||||
this->hitbox = gNPCHitboxes[definition->bitfield.hitbox];
|
||||
this->flags |= ENT_DID_INIT;
|
||||
tmp2 = 0xff;
|
||||
this->animIndex = tmp2;
|
||||
this->frameIndex = tmp2;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Entity* CreateNPC(u32 subtype, u32 form, u32 parameter) {
|
||||
Entity* entity = GetEmptyEntity();
|
||||
if (entity != NULL) {
|
||||
entity->kind = 7;
|
||||
entity->id = subtype;
|
||||
entity->type = form;
|
||||
entity->type2 = parameter;
|
||||
AppendEntityToList(entity, 7);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
u32 sub_0806ED78(Entity* ent) {
|
||||
u32 result = sub_0800445C(ent);
|
||||
if (result) {
|
||||
if (gPlayerState.field_0x1d[1] & 0x40) {
|
||||
sub_08077B20();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
s32 sub_0806ED9C(Entity* ent, u32 x, u32 y) {
|
||||
s32 anim = -1;
|
||||
if (EntityInRectRadius(ent, &gPlayerEntity, x, y))
|
||||
anim = GetAnimationState(ent);
|
||||
return anim;
|
||||
}
|
||||
|
||||
u32 GetAnimationState(Entity* ent) {
|
||||
u32 direction = GetFacingDirection(ent, &gPlayerEntity);
|
||||
return sub_0806F5A4(direction);
|
||||
}
|
||||
|
||||
s32 sub_0806EDD8(Entity* ent, u32 x, u32 y) {
|
||||
s32 anim = -1;
|
||||
if (EntityInRectRadius(ent, &gPlayerEntity, x, y))
|
||||
anim = GetFacingDirection(ent, &gPlayerEntity);
|
||||
return anim;
|
||||
}
|
||||
|
||||
void sub_0806EE04(Entity* ent, void* a2, u32 a3) {
|
||||
ent->child = a2;
|
||||
ent->field_0x3c = a3;
|
||||
ent->hitType = 0;
|
||||
ent->field_0x46 = 0;
|
||||
ent->field_0x16 = 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EE20(Entity* ent) {
|
||||
u32 v3;
|
||||
|
||||
if (!ent->interactType) {
|
||||
if (ent->child)
|
||||
return gUnk_08114EFC[ent->field_0x16](ent);
|
||||
} else {
|
||||
ent->field_0x46 = 8;
|
||||
v3 = GetFacingDirection(ent, &gPlayerEntity);
|
||||
ent->knockbackDirection = sub_0806F5A4(v3);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EE70(Entity* ent) {
|
||||
s32 tmp1;
|
||||
s32 tmp2;
|
||||
u32 result;
|
||||
u16 xy[2];
|
||||
|
||||
if (++ent->field_0x46 > 8) {
|
||||
ent->field_0x46 = 0;
|
||||
sub_0806EF14(ent);
|
||||
}
|
||||
sub_0806F69C(ent);
|
||||
sub_0806EF4C(ent, xy);
|
||||
tmp1 = sub_080041DC(ent, xy[0], xy[1]);
|
||||
tmp2 = ent->speed;
|
||||
if (tmp2 < 0)
|
||||
tmp2 = -tmp2;
|
||||
if ((u32)tmp2 / 8 <= tmp1)
|
||||
result = 0;
|
||||
else
|
||||
result = sub_0806EF74(ent, 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
u32 sub_0806EED0(Entity* ent) {
|
||||
if (!--ent->field_0x46)
|
||||
return sub_0806EF74(ent, 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EEF4(Entity* ent) {
|
||||
if (ent->frame & 0x80)
|
||||
return sub_0806EF74(ent, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_0806EF14(Entity* ent) {
|
||||
u16 xy[2];
|
||||
sub_0806EF4C(ent, xy);
|
||||
ent->direction = sub_080045B4(ent, xy[0], xy[1]);
|
||||
if ((ent->field_0x3c & 1) == 0)
|
||||
ent->knockbackDirection = sub_0806F5A4(ent->direction);
|
||||
}
|
||||
|
||||
void sub_0806EF4C(Entity* ent, u16* xy) {
|
||||
u16* src = &((u16*)ent->child)[ent->hitType];
|
||||
xy[0] = gRoomControls.roomOriginX + src[1];
|
||||
xy[1] = gRoomControls.roomOriginY + src[2];
|
||||
}
|
||||
|
||||
u32 sub_0806EF74(Entity* ent, u32 a2) {
|
||||
ent->hitType += a2;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806EF88(Entity* ent) {
|
||||
u8* v1 = (u8*)&((u16*)ent->child)[ent->hitType];
|
||||
return gUnk_08114F0C[*v1](ent, v1);
|
||||
}
|
||||
|
||||
u32 sub_0806EFAC(Entity* ent, u16* a2) {
|
||||
ent->hitType = 0;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806EFBC(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 1;
|
||||
ent->field_0x46 = 8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EFCC(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 2;
|
||||
ent->field_0x46 = a2[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806EFDC(Entity* ent, u16* a2) {
|
||||
if (*a2 >> 8) {
|
||||
ent->field_0x3c &= ~1;
|
||||
} else {
|
||||
ent->field_0x3c |= 1;
|
||||
}
|
||||
ent->hitType++;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F014(Entity* ent, u16* a2) {
|
||||
ent->speed = a2[1];
|
||||
ent->hitType += 2;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F02C(Entity* ent, u16* a2) {
|
||||
ent->knockbackDirection = *a2 >> 8;
|
||||
ent->hitType++;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F048(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 3;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_0806F050(Entity* ent, u16* a2) {
|
||||
(u16*)ent->child = a2 + 1;
|
||||
ent->hitType = 0;
|
||||
return sub_0806EF88(ent);
|
||||
}
|
||||
|
||||
u32 sub_0806F064(Entity* ent, u16* a2) {
|
||||
ent->field_0x16 = 0;
|
||||
ent->hitType++;
|
||||
return *a2 >> 8;
|
||||
}
|
||||
|
||||
s32 sub_0806F078(Entity* ent, s32 a2) {
|
||||
if (a2 != ent->animIndex) {
|
||||
if (ent->spriteAnimation[0])
|
||||
InitAnimationForceUpdate(ent, a2);
|
||||
else
|
||||
InitializeAnimation(ent, a2);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/sub_0806FOA4.inc", void sub_0806F0A4(void));
|
||||
|
||||
void sub_0806F118(Entity* ent) {
|
||||
u32 idx = sub_08002632(ent);
|
||||
NPCData* data = gUnk_08001A7C[idx];
|
||||
sub_0801DFB4(ent, data->_0, data->_2, data->_4);
|
||||
gPlayerState.controlMode = 3;
|
||||
}
|
||||
|
||||
u32 UpdateFuseInteraction(void) {
|
||||
u32 ret;
|
||||
sub_0801E00C();
|
||||
ret = -1;
|
||||
switch (gUnk_02022740[0]) {
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
case 2:
|
||||
gPlayerState.controlMode = 3;
|
||||
ret = 1;
|
||||
case 1:
|
||||
sub_0807919C();
|
||||
gPlayerState.controlMode = 1;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_0806F188(Entity* ent) {
|
||||
u32 idx = sub_08002632(ent);
|
||||
if (idx != 0)
|
||||
gSave.unk1C1[idx] = 0xF3;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/showNPCDialogue.inc", void ShowNPCDialogue(Entity* ent, Dialog* dia));
|
||||
@@ -180,7 +180,6 @@ extern void RespawnPlayer();
|
||||
extern void sub_080797EC();
|
||||
extern void sub_08079E08();
|
||||
extern void sub_08078F60();
|
||||
extern void sub_0806F948();
|
||||
extern void sub_08077698();
|
||||
extern void DisplayEzloMessage();
|
||||
extern void sub_08079258();
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "room.h"
|
||||
#include "save.h"
|
||||
#include "utils.h"
|
||||
#include "audio.h"
|
||||
#include "flags.h"
|
||||
#include "textbox.h"
|
||||
|
||||
Entity* GiveItemWithCutscene(u32, u32, u32);
|
||||
Entity* sub_080A276C(Entity*, u32, u32);
|
||||
void sub_08078AF0(Entity*, u32, u32);
|
||||
Entity* sub_0805E744(void);
|
||||
void sub_080A7D44(u32, u32);
|
||||
|
||||
void CreateItemEntity(u32 a, u32 b, u32 c) {
|
||||
Entity* e = GiveItemWithCutscene(a, b, c);
|
||||
if (e != NULL) {
|
||||
e->parent = sub_080A276C(e, e->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A7C18(u32 a, u32 b, u32 c) {
|
||||
Entity* e = GiveItemWithCutscene(a, b, c);
|
||||
if (e != NULL) {
|
||||
e->parent = &gPlayerEntity;
|
||||
sub_08078AF0(e, e->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Entity* GiveItemWithCutscene(u32 type, u32 type2, u32 delay) {
|
||||
Entity* e;
|
||||
if (type == 63 && gSave.stats.filler3[0]) {
|
||||
type = 87;
|
||||
type2 = 0;
|
||||
}
|
||||
e = sub_0805E744();
|
||||
if (e != NULL) {
|
||||
e->type = type;
|
||||
e->type2 = type2;
|
||||
e->actionDelay = delay;
|
||||
e->id = 11;
|
||||
e->kind = 6;
|
||||
AppendEntityToList(e, 6);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
void sub_080A7C7C(void) {
|
||||
MemClear(gUnk_02017660, 0x40);
|
||||
}
|
||||
|
||||
void sub_080A7C8C(u32 pos, u32 layer) {
|
||||
TileEntity* t = gUnk_02017660;
|
||||
u32 found = 0;
|
||||
u32 i;
|
||||
for (i = 0; i < 8; ++i, ++t) {
|
||||
if (*(u16*)&t->_4 == pos) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((layer >> 1) == ((u32)(t->_6 << 31) >> 31)) {
|
||||
if (found) {
|
||||
SetLocalFlag(t->_1);
|
||||
CreateItemEntity(t->_2, t->_3, 0);
|
||||
} else {
|
||||
CreateItemEntity(0x60, 0, 0);
|
||||
}
|
||||
sub_0807B7D8(0x74, pos, layer);
|
||||
RequestPriorityDuration(NULL, 120);
|
||||
SoundReq(283);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_080A7CFC(u32 a1) {
|
||||
u32 ta = 0x600;
|
||||
u32 tb = 0;
|
||||
TileEntity* t = GetCurrentRoomProperty(3);
|
||||
if (t != 0) {
|
||||
do {
|
||||
if (t->_4 == a1) {
|
||||
switch (t->type) {
|
||||
case 5:
|
||||
tb = 0;
|
||||
ta = *(u16*)&t->_6;
|
||||
break;
|
||||
case 6:
|
||||
tb = 1;
|
||||
ta = *(u16*)&t->_6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
t++;
|
||||
} while (t->_4 != 0);
|
||||
}
|
||||
sub_080A7D44(ta, tb);
|
||||
}
|
||||
|
||||
void sub_080A7D44(u32 msg, u32 a2) {
|
||||
if (a2)
|
||||
sub_08078AA8(msg, 0);
|
||||
else
|
||||
MessageFromTarget(msg);
|
||||
}
|
||||
-11
@@ -29,17 +29,6 @@ void sub_0806F704(Entity*, u32);
|
||||
|
||||
void sub_0805BB00(u32, u32);
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3;
|
||||
u16 _4;
|
||||
u8 _6;
|
||||
u8 _7;
|
||||
} TileEntity;
|
||||
extern TileEntity gUnk_02017660[];
|
||||
|
||||
static void sub_0804B290(TileEntity*);
|
||||
static void sub_0804B29C(TileEntity*);
|
||||
static void sub_0804B300(TileEntity*);
|
||||
|
||||
@@ -2011,11 +2011,7 @@ void sub_StateChange_Ruins_TripleTektites(void) {
|
||||
}
|
||||
|
||||
void sub_unk1_Ruins_TripleTektites(void) {
|
||||
#if defined(JP) || defined(EU) || defined(DEMO_JP)
|
||||
if (CheckLocalFlagByBank(FLAG_BANK_1, LOST_03_00)) {
|
||||
#else
|
||||
if (CheckLocalFlagByBank(FLAG_BANK_1, LOST_02_00)) {
|
||||
#endif
|
||||
SetDirtTile(0x85);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user