sub_478D8

This commit is contained in:
Marcus Huderle 2025-07-21 11:13:42 -05:00
parent 336962908e
commit ec3568d127
10 changed files with 235 additions and 862 deletions

View File

@ -32614,862 +32614,3 @@ _080478D0:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
thumb_func_start sub_478D8
sub_478D8: @ 0x080478D8
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
ldr r7, _08047AEC @ =gMain
ldrh r0, [r7, #0x12]
cmp r0, #0
bne _080478EE
b _08047F2E
_080478EE:
movs r0, #0xd2
lsls r0, r0, #3
adds r6, r7, r0
ldrh r0, [r6]
movs r1, #0xbb
lsls r1, r1, #3
adds r1, r1, r7
mov r8, r1
cmp r0, #0
beq _08047984
movs r0, #0x58
strh r0, [r6, #2]
ldr r0, _08047AF0 @ =gCurrentPinballGame
ldr r0, [r0]
adds r0, #0xfe
ldrh r0, [r0]
adds r0, #0x14
strh r0, [r6, #4]
movs r0, #0
ldr r7, _08047AF4 @ =gOamBuffer
ldr r2, _08047AF8 @ =0xFFFFFE00
mov sl, r2
movs r3, #0xf
rsbs r3, r3, #0
mov sb, r3
_08047920:
lsls r4, r0, #0x10
asrs r4, r4, #0x10
lsls r0, r4, #3
adds r0, #8
adds r5, r6, r0
ldrh r3, [r5]
lsls r3, r3, #3
adds r3, r3, r7
movs r0, #2
ldrsh r1, [r5, r0]
movs r2, #2
ldrsh r0, [r6, r2]
adds r1, r1, r0
ldr r2, _08047AFC @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
mov r0, sl
ands r0, r2
orrs r0, r1
strh r0, [r3, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r7
ldrb r0, [r6, #4]
ldrb r3, [r5, #4]
adds r0, r0, r3
strb r0, [r1]
ldrh r2, [r5]
lsls r2, r2, #3
adds r2, r2, r7
ldrb r0, [r2, #1]
movs r1, #3
orrs r0, r1
strb r0, [r2, #1]
ldrh r2, [r5]
lsls r2, r2, #3
adds r2, r2, r7
ldrb r1, [r2, #3]
mov r0, sb
ands r0, r1
movs r1, #6
orrs r0, r1
strb r0, [r2, #3]
adds r4, #1
lsls r4, r4, #0x10
lsrs r0, r4, #0x10
asrs r4, r4, #0x10
cmp r4, #1
ble _08047920
_08047984:
mov r6, r8
ldrh r0, [r6]
cmp r0, #0
beq _08047A14
ldr r4, _08047AF0 @ =gCurrentPinballGame
ldr r0, [r4]
movs r5, #0x80
lsls r5, r5, #1
adds r0, r0, r5
ldr r0, [r0]
movs r1, #0x64
bl __divsi3
adds r0, #0x18
strh r0, [r6, #2]
ldr r0, [r4]
adds r4, r0, #0
adds r4, #0xfe
movs r1, #0x82
lsls r1, r1, #1
adds r0, r0, r1
ldr r0, [r0]
movs r1, #0x64
bl __divsi3
adds r0, #0x14
ldrh r4, [r4]
adds r0, r0, r4
strh r0, [r6, #4]
adds r5, r6, #0
adds r5, #8
ldr r4, _08047AF4 @ =gOamBuffer
ldrh r2, [r6, #8]
lsls r2, r2, #3
adds r2, r2, r4
movs r3, #2
ldrsh r1, [r5, r3]
movs r3, #2
ldrsh r0, [r6, r3]
adds r1, r1, r0
ldr r3, _08047AFC @ =0x000001FF
adds r0, r3, #0
ands r1, r0
ldrh r3, [r2, #2]
ldr r0, _08047AF8 @ =0xFFFFFE00
ands r0, r3
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r6, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
ldrh r1, [r6, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r1, #1]
movs r2, #3
orrs r0, r2
strb r0, [r1, #1]
ldrh r2, [r6, #8]
lsls r2, r2, #3
adds r2, r2, r4
ldrb r1, [r2, #3]
movs r0, #0xf
rsbs r0, r0, #0
ands r0, r1
movs r1, #8
orrs r0, r1
strb r0, [r2, #3]
_08047A14:
subs r6, #0xb8
ldrh r0, [r6]
cmp r0, #0
beq _08047A9A
ldr r4, _08047AF0 @ =gCurrentPinballGame
ldr r0, [r4]
movs r5, #0x80
lsls r5, r5, #1
adds r0, r0, r5
ldr r0, [r0]
movs r1, #0x64
bl __divsi3
adds r0, #0x38
strh r0, [r6, #2]
ldr r0, [r4]
adds r4, r0, #0
adds r4, #0xfe
movs r1, #0x82
lsls r1, r1, #1
adds r0, r0, r1
ldr r0, [r0]
movs r1, #0x64
bl __divsi3
adds r0, #0x34
ldrh r4, [r4]
adds r0, r0, r4
strh r0, [r6, #4]
movs r0, #0
ldr r7, _08047AF4 @ =gOamBuffer
ldr r2, _08047AF8 @ =0xFFFFFE00
mov r8, r2
_08047A56:
lsls r4, r0, #0x10
asrs r4, r4, #0x10
lsls r0, r4, #3
adds r0, #8
adds r5, r6, r0
ldrh r3, [r5]
lsls r3, r3, #3
adds r3, r3, r7
movs r0, #2
ldrsh r1, [r5, r0]
movs r2, #2
ldrsh r0, [r6, r2]
adds r1, r1, r0
ldr r2, _08047AFC @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
mov r0, r8
ands r0, r2
orrs r0, r1
strh r0, [r3, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r7
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
adds r4, #1
lsls r4, r4, #0x10
lsrs r0, r4, #0x10
asrs r4, r4, #0x10
cmp r4, #1
ble _08047A56
_08047A9A:
ldr r1, _08047AEC @ =gMain
ldrh r0, [r1, #0x12]
subs r0, #1
strh r0, [r1, #0x12]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x46
bls _08047B00
ldrh r1, [r1, #0x12]
adds r2, r1, #0
adds r2, #0x14
adds r0, r2, #0
asrs r0, r0, #6
lsls r0, r0, #6
subs r0, r2, r0
lsls r0, r0, #0x1a
lsrs r0, r0, #0x10
bl Sin
ldr r1, _08047AF0 @ =gCurrentPinballGame
ldr r5, [r1]
movs r3, #0x82
lsls r3, r3, #1
adds r4, r5, r3
lsls r0, r0, #0x10
asrs r0, r0, #0x10
movs r1, #0x28
bl __divsi3
str r0, [r4]
movs r4, #0x84
lsls r4, r4, #1
adds r1, r5, r4
movs r0, #0xa
strh r0, [r1]
movs r0, #0x85
lsls r0, r0, #1
adds r1, r5, r0
adds r0, #0x86
strh r0, [r1]
b _08047B3C
.align 2, 0
_08047AEC: .4byte gMain
_08047AF0: .4byte gCurrentPinballGame
_08047AF4: .4byte gOamBuffer
_08047AF8: .4byte 0xFFFFFE00
_08047AFC: .4byte 0x000001FF
_08047B00:
ldr r0, _08047B6C @ =gCurrentPinballGame
ldr r4, [r0]
movs r2, #0x84
lsls r2, r2, #1
adds r1, r4, r2
movs r0, #0xc8
lsls r0, r0, #1
strh r0, [r1]
movs r5, #0x85
lsls r5, r5, #1
adds r3, r4, r5
ldrh r0, [r3]
subs r0, #0x23
strh r0, [r3]
movs r0, #0x80
lsls r0, r0, #1
adds r2, r4, r0
movs r5, #0
ldrsh r1, [r1, r5]
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
movs r0, #0x82
lsls r0, r0, #1
adds r2, r4, r0
movs r4, #0
ldrsh r1, [r3, r4]
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
_08047B3C:
ldr r1, _08047B70 @ =gMain
ldrh r2, [r1, #0x12]
adds r0, r2, #0
subs r0, #0x1e
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r6, r1, #0
cmp r0, #0x1d
bhi _08047B74
ldrh r1, [r6, #0x12]
movs r0, #0x3c
subs r0, r0, r1
lsls r0, r0, #8
movs r1, #0x1e
bl __divsi3
movs r5, #0x80
lsls r5, r5, #1
adds r0, r0, r5
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
str r0, [sp]
b _08047B8C
.align 2, 0
_08047B6C: .4byte gCurrentPinballGame
_08047B70: .4byte gMain
_08047B74:
movs r0, #0x80
lsls r0, r0, #1
str r0, [sp]
lsls r0, r2, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x1d
bhi _08047B8C
movs r2, #0xbb
lsls r2, r2, #3
adds r1, r6, r2
movs r0, #0
strh r0, [r1]
_08047B8C:
ldrh r0, [r6, #0x12]
cmp r0, #0x1e
bhi _08047BBE
cmp r0, #0xa
bls _08047BAE
adds r1, r0, #0
subs r1, #0xa
lsls r0, r1, #5
subs r0, r0, r1
lsls r0, r0, #3
movs r1, #0x14
bl __divsi3
adds r0, #8
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
b _08047BE4
_08047BAE:
movs r3, #8
mov sl, r3
movs r4, #0xd2
lsls r4, r4, #3
adds r1, r6, r4
movs r0, #0
strh r0, [r1]
b _08047BE6
_08047BBE:
ldr r0, _08047C48 @ =gCurrentPinballGame
ldr r0, [r0]
adds r1, r0, #0
adds r1, #0xfe
ldrh r2, [r1]
movs r5, #0
ldrsh r0, [r1, r5]
cmp r0, #0
ble _08047BE0
adds r0, r2, #0
subs r0, #8
strh r0, [r1]
lsls r0, r0, #0x10
cmp r0, #0
bge _08047BE0
movs r0, #0
strh r0, [r1]
_08047BE0:
movs r0, #0x80
lsls r0, r0, #1
_08047BE4:
mov sl, r0
_08047BE6:
adds r3, r6, #0
ldrh r0, [r3, #0x12]
cmp r0, #0xca
bls _08047BF0
b _08047DBA
_08047BF0:
cmp r0, #0x37
bls _08047C50
ldr r7, _08047C48 @ =gCurrentPinballGame
ldr r2, [r7]
movs r1, #0x84
lsls r1, r1, #1
adds r0, r2, r1
ldrh r1, [r0]
movs r4, #0x86
lsls r4, r4, #1
adds r0, r2, r4
strh r1, [r0]
movs r5, #0x85
lsls r5, r5, #1
adds r0, r2, r5
ldrh r0, [r0]
subs r0, #0x5a
adds r4, #2
adds r1, r2, r4
strh r0, [r1]
adds r5, #6
mov r8, r5
adds r1, r2, r5
subs r4, #0xe
adds r0, r2, r4
ldr r0, [r0]
str r0, [r1]
adds r5, #4
mov sb, r5
adds r1, r2, r5
adds r4, #4
adds r0, r2, r4
ldr r0, [r0]
str r0, [r1]
ldrh r0, [r3, #0x12]
cmp r0, #0x38
bne _08047C40
movs r0, SE_UNKNOWN_0x95
bl m4aSongNumStart
_08047C40:
ldr r5, [r7]
ldr r0, _08047C4C @ =0x0000132C
adds r4, r5, r0
b _08047CBC
.align 2, 0
_08047C48: .4byte gCurrentPinballGame
_08047C4C: .4byte 0x0000132C
_08047C50:
cmp r0, #0x1f
bls _08047D00
ldr r7, _08047CF4 @ =gCurrentPinballGame
ldr r5, [r7]
movs r0, #0x87
lsls r0, r0, #1
adds r4, r5, r0
ldrh r0, [r4]
adds r0, #6
movs r1, #0
mov ip, r1
strh r0, [r4]
movs r2, #0x88
lsls r2, r2, #1
mov r8, r2
adds r2, r5, r2
movs r3, #0x86
lsls r3, r3, #1
adds r0, r5, r3
movs r3, #0
ldrsh r1, [r0, r3]
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
movs r0, #0x8a
lsls r0, r0, #1
mov sb, r0
adds r2, r5, r0
movs r3, #0
ldrsh r1, [r4, r3]
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
movs r4, #0xa4
lsls r4, r4, #3
adds r0, r6, r4
mov r1, ip
strh r1, [r0]
ldrh r0, [r6, #0x12]
cmp r0, #0x20
bne _08047CB6
ldr r2, _08047CF8 @ =0x000005FA
adds r1, r5, r2
movs r0, #0
strb r0, [r1]
movs r0, SE_UNKNOWN_0x96
bl m4aSongNumStart
movs r0, #6
bl sub_11B0
_08047CB6:
ldr r5, [r7]
ldr r3, _08047CFC @ =0x0000132C
adds r4, r5, r3
_08047CBC:
ldr r6, [r4]
mov r1, r8
adds r0, r5, r1
ldr r0, [r0]
movs r1, #0x64
bl __divsi3
adds r0, #0x56
lsls r0, r0, #8
str r0, [r6, #0x34]
ldr r6, [r4]
adds r0, r5, #0
adds r0, #0xfe
movs r2, #0
ldrsh r4, [r0, r2]
add r5, sb
ldr r0, [r5]
movs r1, #0x64
bl __divsi3
movs r3, #0xba
lsls r3, r3, #1
adds r0, r0, r3
adds r4, r4, r0
lsls r4, r4, #8
str r4, [r6, #0x38]
adds r2, r7, #0
b _08047D80
.align 2, 0
_08047CF4: .4byte gCurrentPinballGame
_08047CF8: .4byte 0x000005FA
_08047CFC: .4byte 0x0000132C
_08047D00:
ldr r4, _08047E68 @ =gCurrentPinballGame
mov sb, r4
ldr r7, [r4]
movs r5, #0x86
lsls r5, r5, #1
adds r1, r7, r5
movs r0, #0
strh r0, [r1]
movs r0, #0x87
lsls r0, r0, #1
adds r3, r7, r0
ldrh r0, [r3]
adds r0, #0x14
strh r0, [r3]
movs r4, #0x88
lsls r4, r4, #1
adds r2, r7, r4
movs r5, #0
ldrsh r1, [r1, r5]
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
movs r0, #0x8a
lsls r0, r0, #1
adds r5, r7, r0
movs r4, #0
ldrsh r1, [r3, r4]
ldr r0, [r5]
adds r0, r0, r1
str r0, [r5]
ldr r0, _08047E6C @ =0x0000132C
adds r6, r7, r0
ldr r4, [r6]
ldr r0, [r2]
movs r1, #0x64
bl __divsi3
adds r0, #0x56
lsls r0, r0, #8
str r0, [r4, #0x34]
ldr r1, [r6]
mov r8, r1
adds r0, r7, #0
adds r0, #0xfe
movs r2, #0
ldrsh r4, [r0, r2]
ldr r0, [r5]
movs r1, #0x64
bl __divsi3
movs r3, #0xba
lsls r3, r3, #1
adds r0, r0, r3
adds r4, r4, r0
lsls r4, r4, #8
mov r5, r8
str r4, [r5, #0x38]
ldr r6, [r6]
ldr r0, [r6, #0x38]
ldr r1, _08047E70 @ =0x00017100
mov r2, sb
cmp r0, r1
ble _08047D80
str r1, [r6, #0x38]
_08047D80:
ldr r0, [r2]
ldr r1, _08047E6C @ =0x0000132C
adds r0, r0, r1
ldr r0, [r0]
movs r3, #0
strb r3, [r0, #1]
ldr r0, [r2]
adds r2, r0, r1
ldr r1, [r2]
ldr r0, [r1, #0x28]
str r0, [r1, #0x2c]
ldr r1, [r2]
ldr r0, [r1, #0x34]
cmp r0, #0
bge _08047DA0
adds r0, #0x7f
_08047DA0:
asrs r0, r0, #7
strh r0, [r1, #0x28]
ldr r1, [r2]
ldr r0, [r1, #0x38]
cmp r0, #0
bge _08047DAE
adds r0, #0x7f
_08047DAE:
asrs r0, r0, #7
strh r0, [r1, #0x2a]
ldr r0, [r2]
strh r3, [r0, #0x30]
ldr r0, [r2]
strh r3, [r0, #0x32]
_08047DBA:
movs r0, #0x80
lsls r0, r0, #1
mov r2, sl
lsls r1, r2, #0x10
asrs r1, r1, #0x10
movs r2, #3
bl SetMatrixScale
ldr r3, [sp]
lsls r1, r3, #0x10
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #4
bl SetMatrixScale
ldr r4, _08047E74 @ =gMain
ldrh r1, [r4, #0x12]
cmp r1, #0xcb
beq _08047DE2
b _08047F18
_08047DE2:
ldr r2, _08047E68 @ =gCurrentPinballGame
ldr r3, [r2]
movs r5, #0x80
lsls r5, r5, #1
adds r0, r3, r5
movs r1, #0
str r1, [r0]
adds r5, #4
adds r0, r3, r5
str r1, [r0]
adds r5, #4
adds r0, r3, r5
strh r1, [r0]
adds r5, #2
adds r0, r3, r5
strh r1, [r0]
adds r1, r3, #0
adds r1, #0xfe
movs r0, #0x64
strh r0, [r1]
movs r1, #0xd2
lsls r1, r1, #3
adds r0, r4, r1
movs r1, #1
strh r1, [r0]
movs r3, #0xbb
lsls r3, r3, #3
adds r0, r4, r3
strh r1, [r0]
movs r5, #0xa4
lsls r5, r5, #3
adds r0, r4, r5
strh r1, [r0]
ldrb r0, [r4, #4]
cmp r0, #0
bne _08047EAC
ldr r0, _08047E78 @ =0x040000D4
ldr r1, _08047E7C @ =gUnknown_0850100C
str r1, [r0]
ldr r1, _08047E80 @ =0x06015800
str r1, [r0, #4]
ldr r1, _08047E84 @ =0x80001200
str r1, [r0, #8]
ldr r1, [r0, #8]
ldr r1, _08047E88 @ =gUnknown_085028CC
str r1, [r0]
ldr r1, _08047E8C @ =0x06016800
str r1, [r0, #4]
ldr r1, _08047E90 @ =0x80000400
str r1, [r0, #8]
ldr r1, [r0, #8]
ldr r1, _08047E94 @ =gUnknown_085038CC
str r1, [r0]
ldr r1, _08047E98 @ =0x06017000
str r1, [r0, #4]
ldr r1, _08047E9C @ =0x80000060
str r1, [r0, #8]
ldr r1, [r0, #8]
ldr r1, _08047EA0 @ =gUnknown_08514F4C
str r1, [r0]
ldr r1, _08047EA4 @ =0x050003C0
str r1, [r0, #4]
ldr r1, _08047EA8 @ =0x80000010
str r1, [r0, #8]
ldr r0, [r0, #8]
b _08047ECA
.align 2, 0
_08047E68: .4byte gCurrentPinballGame
_08047E6C: .4byte 0x0000132C
_08047E70: .4byte 0x00017100
_08047E74: .4byte gMain
_08047E78: .4byte 0x040000D4
_08047E7C: .4byte gUnknown_0850100C
_08047E80: .4byte 0x06015800
_08047E84: .4byte 0x80001200
_08047E88: .4byte gUnknown_085028CC
_08047E8C: .4byte 0x06016800
_08047E90: .4byte 0x80000400
_08047E94: .4byte gUnknown_085038CC
_08047E98: .4byte 0x06017000
_08047E9C: .4byte 0x80000060
_08047EA0: .4byte gUnknown_08514F4C
_08047EA4: .4byte 0x050003C0
_08047EA8: .4byte 0x80000010
_08047EAC:
ldr r1, _08047EF4 @ =0x040000D4
ldr r0, _08047EF8 @ =gUnknown_0850100C
str r0, [r1]
ldr r0, _08047EFC @ =0x06015800
str r0, [r1, #4]
ldr r0, _08047F00 @ =0x80001200
str r0, [r1, #8]
ldr r0, [r1, #8]
ldr r0, _08047F04 @ =gUnknown_08514F6C
str r0, [r1]
ldr r0, _08047F08 @ =0x050003C0
str r0, [r1, #4]
ldr r0, _08047F0C @ =0x80000010
str r0, [r1, #8]
ldr r0, [r1, #8]
_08047ECA:
ldr r1, [r2]
movs r0, #2
strb r0, [r1, #0x1f]
ldr r0, [r2]
ldr r1, _08047F10 @ =0x000005FA
adds r0, r0, r1
movs r1, #1
strb r1, [r0]
ldr r0, [r2]
ldr r3, _08047F14 @ =0x000005F7
adds r0, r0, r3
strb r1, [r0]
ldr r0, [r2]
movs r4, #0x88
lsls r4, r4, #5
adds r0, r0, r4
strb r1, [r0]
movs r0, SE_UNKNOWN_0x94
bl m4aSongNumStart
b _08047FA0
.align 2, 0
_08047EF4: .4byte 0x040000D4
_08047EF8: .4byte gUnknown_0850100C
_08047EFC: .4byte 0x06015800
_08047F00: .4byte 0x80001200
_08047F04: .4byte gUnknown_08514F6C
_08047F08: .4byte 0x050003C0
_08047F0C: .4byte 0x80000010
_08047F10: .4byte 0x000005FA
_08047F14: .4byte 0x000005F7
_08047F18:
cmp r1, #0
bne _08047FA0
movs r5, #0xd2
lsls r5, r5, #3
adds r0, r4, r5
strh r1, [r0]
movs r2, #0xbb
lsls r2, r2, #3
adds r0, r4, r2
strh r1, [r0]
b _08047FA0
_08047F2E:
ldrb r1, [r7, #0xf]
movs r0, #0xf7
ands r0, r1
strb r0, [r7, #0xf]
ldr r5, _08047F6C @ =gCurrentPinballGame
ldr r1, [r5]
movs r4, #0
movs r0, #0x3c
strh r0, [r1, #0x26]
movs r0, #0
bl sub_11C14
ldr r0, [r5]
strb r4, [r0, #0x1f]
movs r0, #0
bl sub_46FD4
ldr r0, [r5]
ldr r3, _08047F70 @ =0x0000029E
adds r0, r0, r3
strb r4, [r0]
ldrb r0, [r7, #4]
cmp r0, #0
bne _08047F78
ldr r0, [r5]
ldr r4, _08047F74 @ =0x0000132C
adds r0, r0, r4
ldr r1, [r0]
movs r0, #3
b _08047F82
.align 2, 0
_08047F6C: .4byte gCurrentPinballGame
_08047F70: .4byte 0x0000029E
_08047F74: .4byte 0x0000132C
_08047F78:
ldr r0, [r5]
ldr r5, _08047FB0 @ =0x0000132C
adds r0, r0, r5
ldr r1, [r0]
movs r0, #1
_08047F82:
strb r0, [r1, #1]
ldr r2, _08047FB4 @ =gCurrentPinballGame
ldr r0, [r2]
ldr r1, _08047FB8 @ =0x000005F7
adds r0, r0, r1
movs r1, #0
strb r1, [r0]
ldr r0, [r2]
adds r0, #0xe4
strb r1, [r0]
ldr r0, [r2]
movs r2, #0x88
lsls r2, r2, #5
adds r0, r0, r2
strb r1, [r0]
_08047FA0:
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08047FB0: .4byte 0x0000132C
_08047FB4: .4byte gCurrentPinballGame
_08047FB8: .4byte 0x000005F7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -370,7 +370,7 @@ extern void ClearSomeArray(void);
// asm/rom_11B9C.s
//extern ? sub_11B9C();
//extern ? sub_11C14();
extern void sub_11C14(s16);
//extern ? sub_11C98();
extern void sub_1332C();
extern void sub_1333C();

View File

@ -183,7 +183,16 @@ struct PinballGame
/*0x0FA*/ s8 unkFA;
/*0x0FB*/ s8 unkFB;
/*0x0FC*/ u16 unkFC;
/*0x0FE*/ u8 fillerFE[0x23];
/*0x0FE*/ s16 unkFE;
/*0x100*/ s32 unk100;
/*0x104*/ s32 unk104;
/*0x108*/ s16 unk108;
/*0x10A*/ s16 unk10A;
/*0x10C*/ s16 unk10C;
/*0x10E*/ s16 unk10E;
/*0x110*/ s32 unk110;
/*0x114*/ s32 unk114;
/*0x118*/ u8 filler118[0x9];
/*0x121*/ s8 unk121;
/*0x122*/ s8 unk122;
/*0x123*/ s8 unk123;

View File

@ -4,7 +4,6 @@
#include "constants/fields.h"
#include "m4a.h"
void sub_11C14(s16);
void sub_12524(void);
void sub_12BF8(void);
void sub_2AADC(void);

View File

@ -9,6 +9,230 @@ extern const u8 gUnknown_08510CAC[][0x20];
extern const u8 gUnknown_0850558C[][0x20];
extern const s8 gUnknown_086B0128[][3][20];
extern const u8 gUnknown_0850100C[];
extern const u8 gUnknown_085028CC[];
extern const u8 gUnknown_085038CC[];
extern const u8 gUnknown_08514F4C[];
extern const u8 gUnknown_08514F6C[];
void sub_478D8(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
int newX, newY;
s16 mat3Scale;
s16 mat4Scale;
if (gMain.unk12)
{
group = &gMain.spriteGroups[5];
if (group->available)
{
group->baseX = 88;
group->baseY = 20 + gCurrentPinballGame->unkFE;
for (i = 0; i < 2; i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
gOamBuffer[oamSimple->oamId].affineMode = ST_OAM_AFFINE_DOUBLE;
gOamBuffer[oamSimple->oamId].matrixNum = 3;
}
}
group = &gMain.spriteGroups[4];
if (group->available)
{
group->baseX = 24 + gCurrentPinballGame->unk100 / 100;
group->baseY = gCurrentPinballGame->unkFE + 20 + gCurrentPinballGame->unk104 / 100;
oamSimple = &group->oam[0];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
gOamBuffer[oamSimple->oamId].affineMode = ST_OAM_AFFINE_DOUBLE;
gOamBuffer[oamSimple->oamId].matrixNum = 4;
}
group = &gMain.spriteGroups[3];
if (group->available)
{
group->baseX = 56 + gCurrentPinballGame->unk100 / 100;
group->baseY = gCurrentPinballGame->unkFE + 52 + gCurrentPinballGame->unk104 / 100;
for (i = 0; i < 2; i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
gMain.unk12--;
if (gMain.unk12 > 70)
{
int var0 = (gMain.unk12 + 20) % 0x40;
gCurrentPinballGame->unk104 = (Sin(var0 * 0x400) * 500) / 20000;
gCurrentPinballGame->unk108 = 10;
gCurrentPinballGame->unk10A = 400;
}
else
{
gCurrentPinballGame->unk108 = 400;
gCurrentPinballGame->unk10A -= 35;
gCurrentPinballGame->unk100 += gCurrentPinballGame->unk108;
gCurrentPinballGame->unk104 += gCurrentPinballGame->unk10A;
}
if (gMain.unk12 >= 30 && gMain.unk12 < 60)
{
mat4Scale = (60 - gMain.unk12) * 0x100 / 30 + 0x100;
}
else
{
mat4Scale = 0x100;
if (gMain.unk12 < 30)
gMain.spriteGroups[4].available = 0;
}
if (gMain.unk12 < 31)
{
if (gMain.unk12 > 10)
{
mat3Scale = ((gMain.unk12 - 10) * 248) / 20 + 8;
}
else
{
mat3Scale = 8;
gMain.spriteGroups[5].available = 0;
}
}
else
{
if (gCurrentPinballGame->unkFE > 0)
{
gCurrentPinballGame->unkFE -= 8;
if (gCurrentPinballGame->unkFE < 0)
gCurrentPinballGame->unkFE = 0;
}
mat3Scale = 0x100;
}
if (gMain.unk12 < 203)
{
if (gMain.unk12 > 55)
{
gCurrentPinballGame->unk10C = gCurrentPinballGame->unk108;
gCurrentPinballGame->unk10E = gCurrentPinballGame->unk10A - 90;
gCurrentPinballGame->unk110 = gCurrentPinballGame->unk100;
gCurrentPinballGame->unk114 = gCurrentPinballGame->unk104;
if (gMain.unk12 == 56)
m4aSongNumStart(SE_UNKNOWN_0x95);
gCurrentPinballGame->ball->positionQ8.x = (gCurrentPinballGame->unk110 / 100 + 86) << 8;
gCurrentPinballGame->ball->positionQ8.y = (gCurrentPinballGame->unkFE + 372 + gCurrentPinballGame->unk114 / 100) << 8;
}
else if (gMain.unk12 > 31)
{
gCurrentPinballGame->unk10E += 6;
gCurrentPinballGame->unk110 += gCurrentPinballGame->unk10C;
gCurrentPinballGame->unk114 += gCurrentPinballGame->unk10E;
gMain.spriteGroups[3].available = 0;
if (gMain.unk12 == 32)
{
gCurrentPinballGame->unk5FA = 0;
m4aSongNumStart(SE_UNKNOWN_0x96);
sub_11B0(6);
}
gCurrentPinballGame->ball->positionQ8.x = (gCurrentPinballGame->unk110 / 100 + 86) << 8;
gCurrentPinballGame->ball->positionQ8.y = (gCurrentPinballGame->unkFE + 372 + gCurrentPinballGame->unk114 / 100) << 8;
}
else
{
gCurrentPinballGame->unk10C = 0;
gCurrentPinballGame->unk10E += 20;
gCurrentPinballGame->unk110 += gCurrentPinballGame->unk10C;
gCurrentPinballGame->unk114 += gCurrentPinballGame->unk10E;
gCurrentPinballGame->ball->positionQ8.x = (gCurrentPinballGame->unk110 / 100 + 86) << 8;
gCurrentPinballGame->ball->positionQ8.y = (gCurrentPinballGame->unkFE + 372 + gCurrentPinballGame->unk114 / 100) << 8;
if (gCurrentPinballGame->ball->positionQ8.y > 0x17100)
gCurrentPinballGame->ball->positionQ8.y = 0x17100;
}
gCurrentPinballGame->ball->unk1 = 0;
gCurrentPinballGame->ball->prevPositionQ1 = gCurrentPinballGame->ball->positionQ1;
newX = gCurrentPinballGame->ball->positionQ8.x;
if (newX < 0)
newX += 0x7F;
gCurrentPinballGame->ball->positionQ1.x = newX >> 7;
newY = gCurrentPinballGame->ball->positionQ8.y;
if (newY < 0)
newY += 0x7F;
gCurrentPinballGame->ball->positionQ1.y = newY >> 7;
gCurrentPinballGame->ball->velocity.x = 0;
gCurrentPinballGame->ball->velocity.y = 0;
}
SetMatrixScale(0x100, mat3Scale, 3);
SetMatrixScale(mat4Scale, mat4Scale, 4);
if (gMain.unk12 == 203)
{
gCurrentPinballGame->unk100 = 0;
gCurrentPinballGame->unk104 = 0;
gCurrentPinballGame->unk108 = 0;
gCurrentPinballGame->unk10A = 0;
gCurrentPinballGame->unkFE = 100;
gMain.spriteGroups[5].available = 1;
gMain.spriteGroups[4].available = 1;
gMain.spriteGroups[3].available = 1;
if (gMain.selectedField == FIELD_RUBY)
{
DmaCopy16(3, gUnknown_0850100C, (void *)0x06015800, 0x2400);
DmaCopy16(3, gUnknown_085028CC, (void *)0x06016800, 0x800);
DmaCopy16(3, gUnknown_085038CC, (void *)0x06017000, 0xC0);
DmaCopy16(3, gUnknown_08514F4C, (void *)0x050003C0, 0x20);
}
else
{
DmaCopy16(3, gUnknown_0850100C, (void *)0x06015800, 0x2400);
DmaCopy16(3, gUnknown_08514F6C, (void *)0x050003C0, 0x20);
}
gCurrentPinballGame->unk1F = 2;
gCurrentPinballGame->unk5FA = 1;
gCurrentPinballGame->unk5F7 = 1;
gCurrentPinballGame->unk1100 = 1;
m4aSongNumStart(SE_UNKNOWN_0x94);
}
else if (gMain.unk12 == 0)
{
gMain.spriteGroups[5].available = 0;
gMain.spriteGroups[4].available = 0;
}
}
else
{
gMain.unkF &= 0xF7;
gCurrentPinballGame->unk26 = 60;
sub_11C14(0);
gCurrentPinballGame->unk1F = 0;
sub_46FD4(0);
gCurrentPinballGame->unk29E = 0;
if (gMain.selectedField == FIELD_RUBY)
gCurrentPinballGame->ball->unk1 = 3;
else
gCurrentPinballGame->ball->unk1 = 1;
gCurrentPinballGame->unk5F7 = 0;
gCurrentPinballGame->unkE4 = 0;
gCurrentPinballGame->unk1100 = 0;
}
}
void sub_47FBC(void)
{