mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
Decompile sub_13D24; sub_14074; add 'anglemath.h' (#115)
Some checks are pending
CI / build (push) Waiting to run
Some checks are pending
CI / build (push) Waiting to run
* Decompile sub_13D24 * remove temp names from extern function definition * decompile sub_14074 * cleanup --------- Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
parent
1c0a9314f8
commit
e8822d07ab
871
asm/rom_11B9C.s
871
asm/rom_11B9C.s
|
|
@ -262,877 +262,8 @@ _08013D14:
|
|||
pop {r0}
|
||||
bx r0
|
||||
|
||||
thumb_func_start sub_13D24
|
||||
sub_13D24: @ 0x08013D24
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0x24
|
||||
adds r4, r1, #0
|
||||
str r2, [sp, #0xc]
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
str r0, [sp, #8]
|
||||
ldrh r0, [r4]
|
||||
rsbs r0, r0, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
movs r2, #2
|
||||
ldrsh r1, [r4, r2]
|
||||
bl ArcTan2
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
str r0, [sp, #0x10]
|
||||
movs r1, #0
|
||||
ldrsh r0, [r4, r1]
|
||||
adds r1, r0, #0
|
||||
muls r1, r0, r1
|
||||
movs r2, #2
|
||||
ldrsh r0, [r4, r2]
|
||||
adds r2, r0, #0
|
||||
muls r2, r0, r2
|
||||
adds r0, r2, #0
|
||||
adds r1, r1, r0
|
||||
lsls r0, r1, #2
|
||||
bl Sqrt
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x11
|
||||
str r0, [sp, #0x18]
|
||||
ldr r0, [sp, #0x10]
|
||||
ldr r1, [sp, #8]
|
||||
cmp r0, r1
|
||||
bls _08013D84
|
||||
subs r4, r0, r1
|
||||
ldr r1, _08013D80 @ =0x0000FFFF
|
||||
b _08013D8C
|
||||
.align 2, 0
|
||||
_08013D80: .4byte 0x0000FFFF
|
||||
_08013D84:
|
||||
ldr r2, [sp, #8]
|
||||
ldr r0, [sp, #0x10]
|
||||
subs r4, r2, r0
|
||||
movs r1, #1
|
||||
_08013D8C:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #8
|
||||
cmp r4, r0
|
||||
ble _08013DA0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #9
|
||||
subs r4, r0, r4
|
||||
lsls r0, r1, #0x10
|
||||
rsbs r0, r0, #0
|
||||
lsrs r1, r0, #0x10
|
||||
_08013DA0:
|
||||
lsls r1, r1, #0x10
|
||||
asrs r0, r1, #2
|
||||
ldr r2, [sp, #8]
|
||||
adds r0, r2, r0
|
||||
str r0, [sp, #0x14]
|
||||
mov r8, r1
|
||||
cmp r0, #0
|
||||
bge _08013DB8
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #9
|
||||
adds r0, r0, r1
|
||||
str r0, [sp, #0x14]
|
||||
_08013DB8:
|
||||
lsls r4, r4, #0x10
|
||||
lsrs r4, r4, #0x10
|
||||
adds r0, r4, #0
|
||||
bl Sin
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r2, [sp, #0x18]
|
||||
muls r0, r2, r0
|
||||
ldr r5, _08013E40 @ =0x00004E20
|
||||
adds r1, r5, #0
|
||||
bl __divsi3
|
||||
str r0, [sp, #0x1c]
|
||||
adds r0, r4, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r1, [sp, #0x18]
|
||||
muls r0, r1, r0
|
||||
adds r1, r5, #0
|
||||
bl __divsi3
|
||||
adds r7, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _08013E44 @ =0x1F3F0000
|
||||
cmp r0, r1
|
||||
ble _08013E2A
|
||||
cmp r7, #0x46
|
||||
ble _08013E02
|
||||
movs r0, SE_UNKNOWN_0x77
|
||||
bl m4aSongNumStart
|
||||
_08013E02:
|
||||
movs r0, #0x8c
|
||||
lsls r0, r0, #1
|
||||
cmp r7, r0
|
||||
ble _08013E2A
|
||||
ldr r0, _08013E48 @ =gCurrentPinballGame
|
||||
ldr r0, [r0]
|
||||
ldr r2, _08013E4C @ =0x0000061C
|
||||
adds r0, r0, r2
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _08013E2A
|
||||
ldr r0, _08013E50 @ =gMain
|
||||
ldrb r0, [r0, #4]
|
||||
cmp r0, #1
|
||||
bhi _08013E2A
|
||||
movs r0, #6
|
||||
bl sub_11B0
|
||||
_08013E2A:
|
||||
ldr r0, _08013E48 @ =gCurrentPinballGame
|
||||
ldr r1, [r0]
|
||||
adds r1, #0x31
|
||||
ldrb r1, [r1]
|
||||
cmp r1, #0
|
||||
beq _08013E54
|
||||
lsls r0, r7, #2
|
||||
adds r0, r0, r7
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r7
|
||||
b _08013E58
|
||||
.align 2, 0
|
||||
_08013E40: .4byte 0x00004E20
|
||||
_08013E44: .4byte 0x1F3F0000
|
||||
_08013E48: .4byte gCurrentPinballGame
|
||||
_08013E4C: .4byte 0x0000061C
|
||||
_08013E50: .4byte gMain
|
||||
_08013E54:
|
||||
movs r0, #0x1a
|
||||
muls r0, r7, r0
|
||||
_08013E58:
|
||||
movs r1, #0x64
|
||||
bl __divsi3
|
||||
adds r7, r0, #0
|
||||
ldr r1, [sp, #0x1c]
|
||||
lsls r0, r1, #3
|
||||
movs r1, #0xa
|
||||
bl __divsi3
|
||||
adds r6, r0, #0
|
||||
ldr r2, _08014004 @ =gCurrentPinballGame
|
||||
ldr r0, [r2]
|
||||
ldr r1, _08014008 @ =0x0000132C
|
||||
adds r0, r0, r1
|
||||
ldr r4, [r0]
|
||||
movs r2, #6
|
||||
ldrsh r0, [r4, r2]
|
||||
ldr r5, _0801400C @ =0x00000EB8
|
||||
muls r0, r5, r0
|
||||
movs r1, #0xaf
|
||||
lsls r1, r1, #0xa
|
||||
bl __divsi3
|
||||
mov sb, r0
|
||||
mov r1, r8
|
||||
asrs r0, r1, #0x10
|
||||
rsbs r0, r0, #0
|
||||
mov r8, r0
|
||||
lsls r0, r0, #1
|
||||
add r0, r8
|
||||
lsls r0, r0, #3
|
||||
add r0, r8
|
||||
lsls r0, r0, #0xa
|
||||
muls r0, r6, r0
|
||||
adds r1, r5, #0
|
||||
bl __divsi3
|
||||
ldrh r1, [r4, #4]
|
||||
adds r1, r1, r0
|
||||
strh r1, [r4, #6]
|
||||
ldr r0, [sp, #8]
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r7, r0
|
||||
str r0, [sp]
|
||||
ldr r0, [sp, #8]
|
||||
bl Sin
|
||||
rsbs r1, r7, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
mov r2, sp
|
||||
str r2, [sp, #0x20]
|
||||
str r0, [sp, #4]
|
||||
ldr r1, [sp, #0x14]
|
||||
lsls r0, r1, #0x10
|
||||
lsrs r5, r0, #0x10
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r2, [sp, #0x1c]
|
||||
muls r0, r2, r0
|
||||
ldr r1, [sp]
|
||||
adds r0, r0, r1
|
||||
str r0, [sp]
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
ldr r2, [sp, #0x1c]
|
||||
rsbs r1, r2, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
adds r4, r1, #0
|
||||
muls r4, r0, r4
|
||||
ldr r0, [sp, #4]
|
||||
adds r4, r4, r0
|
||||
str r4, [sp, #4]
|
||||
ldr r0, [sp]
|
||||
ldr r7, _08014010 @ =0x00004E20
|
||||
adds r1, r7, #0
|
||||
bl __divsi3
|
||||
str r0, [sp]
|
||||
adds r0, r4, #0
|
||||
adds r1, r7, #0
|
||||
bl __divsi3
|
||||
str r0, [sp, #4]
|
||||
movs r4, #1
|
||||
mov r0, sb
|
||||
cmp r0, #0
|
||||
bge _08013F20
|
||||
subs r4, #2
|
||||
rsbs r0, r0, #0
|
||||
mov sb, r0
|
||||
_08013F20:
|
||||
mov r1, r8
|
||||
muls r1, r4, r1
|
||||
adds r4, r1, #0
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
mov r1, sb
|
||||
muls r1, r4, r1
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
adds r1, r7, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _08014014 @ =0xFFFF0000
|
||||
mov r2, sl
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
mov sl, r2
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
rsbs r1, r4, #0
|
||||
mov r2, sb
|
||||
muls r2, r1, r2
|
||||
adds r1, r2, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
adds r1, r7, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _08014018 @ =0x0000FFFF
|
||||
mov r2, sl
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
mov sl, r2
|
||||
ldr r0, [sp]
|
||||
adds r1, r0, #0
|
||||
muls r1, r0, r1
|
||||
ldr r0, [sp, #4]
|
||||
adds r2, r0, #0
|
||||
muls r2, r0, r2
|
||||
adds r0, r2, #0
|
||||
adds r6, r1, r0
|
||||
lsls r0, r6, #2
|
||||
bl Sqrt
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r6, r0, #0x11
|
||||
mov r1, sl
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r1, [sp]
|
||||
adds r0, r0, r1
|
||||
str r0, [sp]
|
||||
mov r2, sl
|
||||
asrs r0, r2, #0x10
|
||||
ldr r1, [sp, #4]
|
||||
adds r0, r0, r1
|
||||
str r0, [sp, #4]
|
||||
mov r0, sp
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
ldr r2, [sp, #0x20]
|
||||
ldrh r1, [r2, #4]
|
||||
rsbs r1, r1, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl ArcTan2
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r5, r0, #0x10
|
||||
ldr r0, _0801401C @ =gMain
|
||||
ldrb r0, [r0, #4]
|
||||
cmp r0, #1
|
||||
bne _08014020
|
||||
ldr r0, _08014004 @ =gCurrentPinballGame
|
||||
ldr r1, [r0]
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x24
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
ble _08014020
|
||||
ldr r2, _08014008 @ =0x0000132C
|
||||
adds r0, r1, r2
|
||||
ldr r0, [r0]
|
||||
movs r1, #0x12
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r0, #0xd1
|
||||
bgt _08014020
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r2, [sp, #0x18]
|
||||
muls r0, r2, r0
|
||||
adds r1, r7, #0
|
||||
bl __divsi3
|
||||
str r0, [sp]
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
ldr r2, [sp, #0x18]
|
||||
rsbs r1, r2, #0
|
||||
b _0801403E
|
||||
.align 2, 0
|
||||
_08014004: .4byte gCurrentPinballGame
|
||||
_08014008: .4byte 0x0000132C
|
||||
_0801400C: .4byte 0x00000EB8
|
||||
_08014010: .4byte 0x00004E20
|
||||
_08014014: .4byte 0xFFFF0000
|
||||
_08014018: .4byte 0x0000FFFF
|
||||
_0801401C: .4byte gMain
|
||||
_08014020:
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r6, r0
|
||||
ldr r4, _08014070 @ =0x00004E20
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
str r0, [sp]
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
rsbs r1, r6, #0
|
||||
_0801403E:
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
ldr r1, _08014070 @ =0x00004E20
|
||||
bl __divsi3
|
||||
str r0, [sp, #4]
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, sp
|
||||
ldr r2, [sp, #0x10]
|
||||
bl sub_14074
|
||||
ldr r0, [sp]
|
||||
ldr r1, [sp, #0xc]
|
||||
strh r0, [r1]
|
||||
ldr r0, [sp, #4]
|
||||
strh r0, [r1, #2]
|
||||
add sp, #0x24
|
||||
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
|
||||
_08014070: .4byte 0x00004E20
|
||||
|
||||
thumb_func_start sub_14074
|
||||
sub_14074: @ 0x08014074
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
mov r8, r1
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r5, r0, #0x10
|
||||
adds r7, r5, #0
|
||||
lsls r2, r2, #0x10
|
||||
lsrs r4, r2, #0x10
|
||||
mov ip, r4
|
||||
ldr r0, _080140CC @ =gCurrentPinballGame
|
||||
mov sl, r0
|
||||
ldr r1, [r0]
|
||||
ldr r2, _080140D0 @ =0x0000132C
|
||||
adds r0, r1, r2
|
||||
ldr r3, [r0]
|
||||
movs r2, #0x30
|
||||
ldrsh r0, [r3, r2]
|
||||
adds r2, r0, #0
|
||||
muls r2, r0, r2
|
||||
mov sb, r2
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r3, r2]
|
||||
adds r2, r0, #0
|
||||
muls r2, r0, r2
|
||||
adds r0, r2, #0
|
||||
add sb, r0
|
||||
adds r1, #0x23
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #2
|
||||
beq _080140B8
|
||||
b _08014230
|
||||
_080140B8:
|
||||
movs r1, #0x28
|
||||
ldrsh r0, [r3, r1]
|
||||
cmp r0, #0xe0
|
||||
ble _080140DC
|
||||
ldr r2, _080140D4 @ =0xFFFFD5E4
|
||||
adds r0, r4, r2
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r2, r0, #0x10
|
||||
ldr r7, _080140D8 @ =0x00006A1C
|
||||
b _080140E8
|
||||
.align 2, 0
|
||||
_080140CC: .4byte gCurrentPinballGame
|
||||
_080140D0: .4byte 0x0000132C
|
||||
_080140D4: .4byte 0xFFFFD5E4
|
||||
_080140D8: .4byte 0x00006A1C
|
||||
_080140DC:
|
||||
ldr r0, _080140FC @ =0x000055E4
|
||||
mov r1, ip
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r2, r0, #0x10
|
||||
ldr r7, _08014100 @ =0x000015E4
|
||||
_080140E8:
|
||||
movs r0, #0x90
|
||||
lsls r0, r0, #5
|
||||
cmp r2, r0
|
||||
bhi _08014108
|
||||
ldr r0, _08014104 @ =0x00003FFF
|
||||
cmp sb, r0
|
||||
bgt _08014108
|
||||
movs r6, #0
|
||||
b _0801439C
|
||||
.align 2, 0
|
||||
_080140FC: .4byte 0x000055E4
|
||||
_08014100: .4byte 0x000015E4
|
||||
_08014104: .4byte 0x00003FFF
|
||||
_08014108:
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
movs r1, #5
|
||||
bl __divsi3
|
||||
mov r1, r8
|
||||
str r0, [r1]
|
||||
ldr r0, [r1, #4]
|
||||
movs r1, #5
|
||||
bl __divsi3
|
||||
mov r2, r8
|
||||
str r0, [r2, #4]
|
||||
ldr r0, _08014180 @ =gCurrentPinballGame
|
||||
ldr r4, [r0]
|
||||
ldr r1, _08014184 @ =0x0000132C
|
||||
adds r0, r4, r1
|
||||
ldr r5, [r0]
|
||||
movs r2, #6
|
||||
ldrsh r0, [r5, r2]
|
||||
lsls r0, r0, #2
|
||||
movs r1, #0xa
|
||||
bl __divsi3
|
||||
strh r0, [r5, #6]
|
||||
adds r4, #0x31
|
||||
ldrb r0, [r4]
|
||||
cmp r0, #0
|
||||
beq _08014190
|
||||
adds r0, r7, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
movs r1, #0xe6
|
||||
muls r0, r1, r0
|
||||
ldr r4, _08014188 @ =0x00004E20
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _0801418C @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r7, #0
|
||||
bl Sin
|
||||
adds r1, r0, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
lsls r0, r1, #3
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
b _080141C8
|
||||
.align 2, 0
|
||||
_08014180: .4byte gCurrentPinballGame
|
||||
_08014184: .4byte 0x0000132C
|
||||
_08014188: .4byte 0x00004E20
|
||||
_0801418C: .4byte 0xFFFF0000
|
||||
_08014190:
|
||||
adds r0, r7, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
ldr r1, _08014200 @ =0x0000011D
|
||||
muls r0, r1, r0
|
||||
ldr r4, _08014204 @ =0x00004E20
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _08014208 @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r7, #0
|
||||
bl Sin
|
||||
adds r1, r0, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
lsls r0, r1, #3
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #3
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
_080141C8:
|
||||
rsbs r0, r0, #0
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _0801420C @ =0x0000FFFF
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
ldr r2, _08014210 @ =gCurrentPinballGame
|
||||
ldr r0, [r2]
|
||||
ldr r1, _08014214 @ =0x00000716
|
||||
adds r0, r0, r1
|
||||
movs r1, #4
|
||||
strb r1, [r0]
|
||||
ldr r1, [r2]
|
||||
ldr r2, _08014218 @ =0x0000132C
|
||||
adds r0, r1, r2
|
||||
ldr r0, [r0]
|
||||
movs r2, #0x10
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, #0x77
|
||||
bgt _08014220
|
||||
ldr r0, _0801421C @ =0x00000717
|
||||
adds r1, r1, r0
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
b _0801439C
|
||||
.align 2, 0
|
||||
_08014200: .4byte 0x0000011D
|
||||
_08014204: .4byte 0x00004E20
|
||||
_08014208: .4byte 0xFFFF0000
|
||||
_0801420C: .4byte 0x0000FFFF
|
||||
_08014210: .4byte gCurrentPinballGame
|
||||
_08014214: .4byte 0x00000716
|
||||
_08014218: .4byte 0x0000132C
|
||||
_0801421C: .4byte 0x00000717
|
||||
_08014220:
|
||||
ldr r2, _0801422C @ =0x00000717
|
||||
adds r1, r1, r2
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
b _0801439C
|
||||
.align 2, 0
|
||||
_0801422C: .4byte 0x00000717
|
||||
_08014230:
|
||||
cmp r0, #1
|
||||
beq _08014236
|
||||
b _08014340
|
||||
_08014236:
|
||||
mov r1, r8
|
||||
ldr r0, [r1]
|
||||
movs r1, #5
|
||||
bl __divsi3
|
||||
mov r2, r8
|
||||
str r0, [r2]
|
||||
ldr r0, [r2, #4]
|
||||
movs r1, #5
|
||||
bl __divsi3
|
||||
mov r1, r8
|
||||
str r0, [r1, #4]
|
||||
ldr r2, _08014298 @ =0x00005FFF
|
||||
adds r0, r5, r2
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _0801429C @ =0x3FFE0000
|
||||
cmp r0, r1
|
||||
bhi _080142A8
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
lsls r1, r0, #4
|
||||
subs r1, r1, r0
|
||||
lsls r1, r1, #2
|
||||
ldr r4, _080142A0 @ =0x00004E20
|
||||
adds r0, r1, #0
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _080142A4 @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
adds r1, r0, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
lsls r0, r1, #4
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
rsbs r0, r0, #0
|
||||
b _0801438E
|
||||
.align 2, 0
|
||||
_08014298: .4byte 0x00005FFF
|
||||
_0801429C: .4byte 0x3FFE0000
|
||||
_080142A0: .4byte 0x00004E20
|
||||
_080142A4: .4byte 0xFFFF0000
|
||||
_080142A8:
|
||||
ldr r1, _080142F0 @ =0xFFFFF000
|
||||
adds r0, r5, r1
|
||||
lsls r0, r0, #0x10
|
||||
movs r1, #0xc0
|
||||
lsls r1, r1, #0x17
|
||||
cmp r0, r1
|
||||
bhi _080142FC
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
lsls r1, r0, #4
|
||||
subs r1, r1, r0
|
||||
lsls r1, r1, #4
|
||||
ldr r4, _080142F4 @ =0x00004E20
|
||||
adds r0, r1, #0
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _080142F8 @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
adds r1, r0, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
lsls r0, r1, #4
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #4
|
||||
rsbs r0, r0, #0
|
||||
b _0801438E
|
||||
.align 2, 0
|
||||
_080142F0: .4byte 0xFFFFF000
|
||||
_080142F4: .4byte 0x00004E20
|
||||
_080142F8: .4byte 0xFFFF0000
|
||||
_080142FC:
|
||||
adds r0, r5, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
lsls r1, r0, #4
|
||||
subs r1, r1, r0
|
||||
lsls r1, r1, #3
|
||||
ldr r4, _08014338 @ =0x00004E20
|
||||
adds r0, r1, #0
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _0801433C @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r5, #0
|
||||
bl Sin
|
||||
adds r1, r0, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
lsls r0, r1, #4
|
||||
subs r0, r0, r1
|
||||
lsls r0, r0, #3
|
||||
rsbs r0, r0, #0
|
||||
b _0801438E
|
||||
.align 2, 0
|
||||
_08014338: .4byte 0x00004E20
|
||||
_0801433C: .4byte 0xFFFF0000
|
||||
_08014340:
|
||||
adds r0, r7, #0
|
||||
bl Cos
|
||||
ldr r5, _080143D4 @ =gUnknown_086ACDF4
|
||||
mov r2, sl
|
||||
ldr r1, [r2]
|
||||
adds r1, #0x23
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r5
|
||||
movs r2, #0
|
||||
ldrsh r1, [r1, r2]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
ldr r4, _080143D8 @ =0x00004E20
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
ldr r1, _080143DC @ =0xFFFF0000
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
adds r0, r7, #0
|
||||
bl Sin
|
||||
mov r2, sl
|
||||
ldr r1, [r2]
|
||||
adds r1, #0x23
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #1
|
||||
adds r1, r1, r5
|
||||
movs r2, #0
|
||||
ldrsh r1, [r1, r2]
|
||||
rsbs r1, r1, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
_0801438E:
|
||||
adds r1, r4, #0
|
||||
bl __divsi3
|
||||
lsls r0, r0, #0x10
|
||||
ldr r1, _080143E0 @ =0x0000FFFF
|
||||
ands r6, r1
|
||||
orrs r6, r0
|
||||
_0801439C:
|
||||
lsls r0, r6, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
mov r2, r8
|
||||
ldr r1, [r2]
|
||||
adds r4, r1, r0
|
||||
str r4, [r2]
|
||||
asrs r1, r6, #0x10
|
||||
ldr r0, [r2, #4]
|
||||
adds r0, r0, r1
|
||||
str r0, [r2, #4]
|
||||
ldr r1, _080143E4 @ =gCurrentPinballGame
|
||||
ldr r0, [r1]
|
||||
ldr r2, _080143E8 @ =0x000005A4
|
||||
adds r3, r0, r2
|
||||
ldrb r2, [r3]
|
||||
adds r5, r1, #0
|
||||
cmp r2, #0
|
||||
beq _0801446C
|
||||
lsls r0, r4, #0x10
|
||||
lsrs r1, r0, #0x10
|
||||
movs r4, #1
|
||||
cmp r2, #1
|
||||
bne _080143EC
|
||||
movs r0, #0
|
||||
strb r0, [r3]
|
||||
movs r0, #0x80
|
||||
mov sb, r0
|
||||
b _080143F2
|
||||
.align 2, 0
|
||||
_080143D4: .4byte gUnknown_086ACDF4
|
||||
_080143D8: .4byte 0x00004E20
|
||||
_080143DC: .4byte 0xFFFF0000
|
||||
_080143E0: .4byte 0x0000FFFF
|
||||
_080143E4: .4byte gCurrentPinballGame
|
||||
_080143E8: .4byte 0x000005A4
|
||||
_080143EC:
|
||||
movs r2, #0xa0
|
||||
lsls r2, r2, #2
|
||||
mov sb, r2
|
||||
_080143F2:
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
bge _08014402
|
||||
rsbs r0, r0, #0
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r1, r0, #0x10
|
||||
ldr r4, _0801447C @ =0x0000FFFF
|
||||
_08014402:
|
||||
lsls r0, r1, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
cmp r0, #0xff
|
||||
bgt _08014412
|
||||
lsls r0, r4, #0x10
|
||||
asrs r0, r0, #8
|
||||
mov r1, r8
|
||||
str r0, [r1]
|
||||
_08014412:
|
||||
ldr r0, [r5]
|
||||
ldr r2, _08014480 @ =0x0000132C
|
||||
adds r0, r0, r2
|
||||
ldr r1, [r0]
|
||||
movs r0, #0
|
||||
strh r0, [r1, #6]
|
||||
mov r1, r8
|
||||
movs r2, #0
|
||||
ldrsh r0, [r1, r2]
|
||||
ldr r1, [r1, #4]
|
||||
rsbs r1, r1, #0
|
||||
lsls r1, r1, #0x10
|
||||
asrs r1, r1, #0x10
|
||||
bl ArcTan2
|
||||
adds r4, r0, #0
|
||||
lsls r4, r4, #0x10
|
||||
lsrs r4, r4, #0x10
|
||||
adds r0, r4, #0
|
||||
bl Cos
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
mov r1, sb
|
||||
muls r1, r0, r1
|
||||
adds r0, r1, #0
|
||||
ldr r5, _08014484 @ =0x00004E20
|
||||
adds r1, r5, #0
|
||||
bl __divsi3
|
||||
mov r2, r8
|
||||
str r0, [r2]
|
||||
adds r0, r4, #0
|
||||
bl Sin
|
||||
mov r2, sb
|
||||
rsbs r1, r2, #0
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x10
|
||||
muls r0, r1, r0
|
||||
adds r1, r5, #0
|
||||
bl __divsi3
|
||||
mov r1, r8
|
||||
str r0, [r1, #4]
|
||||
_0801446C:
|
||||
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
|
||||
_0801447C: .4byte 0x0000FFFF
|
||||
_08014480: .4byte 0x0000132C
|
||||
_08014484: .4byte 0x00004E20
|
||||
.section .text14488
|
||||
|
||||
thumb_func_start sub_14488
|
||||
sub_14488: @ 0x08014488
|
||||
|
|
|
|||
8
include/constants/anglemath.h
Normal file
8
include/constants/anglemath.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef GUARD_CONSTANTS_ANGLE_MATH_H
|
||||
#define GUARD_CONSTANTS_ANGLE_MATH_H
|
||||
|
||||
#define ANGLE_90 0x4000
|
||||
#define ANGLE_180 0x8000
|
||||
#define ANGLE_360 0x10000
|
||||
|
||||
#endif //GUARD_CONSTANTS_ANGLE_MATH_H
|
||||
|
|
@ -377,7 +377,7 @@ extern void sub_1333C();
|
|||
extern u16 sub_13824(struct Vector16*);
|
||||
extern void sub_13B28(struct Vector16*, struct Vector16*, s16);
|
||||
extern void sub_13D24(u16, struct Vector16*, struct Vector16*);
|
||||
//extern ? sub_14074();
|
||||
extern void sub_14074(u16, struct Vector32*, u16);
|
||||
extern u16 sub_14488(struct Vector16*, struct Vector16);
|
||||
//extern ? sub_1467C();
|
||||
//extern ? sub_14740();
|
||||
|
|
|
|||
|
|
@ -431,7 +431,7 @@ struct PinballGame
|
|||
/*0x714*/ s8 unk714;
|
||||
/*0x715*/ u8 filler715[0x1];
|
||||
/*0x716*/ s8 unk716;
|
||||
/*0x717*/ u8 filler717[0x1];
|
||||
/*0x717*/ u8 unk717;
|
||||
/*0x718*/ s8 leftBallPowerUpLight;
|
||||
/*0x719*/ s8 centerBallPowerUpLight;
|
||||
/*0x71A*/ s8 rightBallPowerUpLight;
|
||||
|
|
@ -551,5 +551,6 @@ extern s32 gUnknown_081B36A4[64];
|
|||
extern s32 gUnknown_082EE0E0[0x3E0];
|
||||
extern const u16 gUnknown_08391A4C[0x1000];
|
||||
extern const u16 gUnknown_08393A4C[0x1000];
|
||||
extern const s16 gUnknown_086ACDF4[9];
|
||||
|
||||
#endif // GUARD_GLOBAL_H
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ SECTIONS
|
|||
src/rom_11B9C.o(.text);
|
||||
src/rom_1332C.o(.text);
|
||||
asm/rom_11B9C.o(.text1333C);
|
||||
src/rom_13D24.o(.text);
|
||||
asm/rom_11B9C.o(.text14488);
|
||||
src/rom_17634.o(.text);
|
||||
asm/rom_11B9C.o(.text176B0);
|
||||
src/rom_18784.o(.text);
|
||||
|
|
|
|||
272
src/rom_13D24.c
Normal file
272
src/rom_13D24.c
Normal file
|
|
@ -0,0 +1,272 @@
|
|||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "constants/bg_music.h"
|
||||
#include "m4a.h"
|
||||
#include "constants/anglemath.h"
|
||||
|
||||
|
||||
void sub_13D24(u16 arg0, struct Vector16 *arg1, struct Vector16 *arg2)
|
||||
{
|
||||
u16 angleOfFlippedArg1;
|
||||
s32 angleDelta, adjustedAngle;
|
||||
s16 angleSign;
|
||||
|
||||
u16 halfMag;
|
||||
s32 halfMag2;
|
||||
|
||||
s32 forwardMag, lateralMag, scaledForwardMag, scaledLateralMag;
|
||||
u32 vxSquared, vySquared;
|
||||
|
||||
s32 curveDir, curveSign, curveDirScaledFactor, curveScaleFactor;
|
||||
u16 finalAngle;
|
||||
|
||||
struct Vector32 tempVec;
|
||||
struct Vector16 tempVec2;
|
||||
|
||||
angleOfFlippedArg1 = ArcTan2(-arg1->x, arg1->y);
|
||||
|
||||
vxSquared = (arg1->x * arg1->x) + (arg1->y * arg1->y);
|
||||
halfMag = Sqrt(vxSquared * 4) /2;
|
||||
|
||||
// Determine smallest angle difference and its direction
|
||||
if (angleOfFlippedArg1 > arg0)
|
||||
{
|
||||
angleDelta = angleOfFlippedArg1 - arg0;
|
||||
angleSign = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
angleDelta = arg0 - angleOfFlippedArg1;
|
||||
angleSign = 1;
|
||||
}
|
||||
|
||||
//Note on angle representation:
|
||||
//0x4000 = 90 degrees
|
||||
//0x8000 = 180 degrees
|
||||
//0x10000 = 360 degrees
|
||||
|
||||
//Clamps to the closest 180, with direction
|
||||
if (angleDelta > ANGLE_180)
|
||||
{
|
||||
angleDelta = ANGLE_360 - angleDelta;
|
||||
angleSign = -angleSign;
|
||||
}
|
||||
|
||||
//Adds a 90 degree offset based on the delta factor
|
||||
adjustedAngle = arg0 + angleSign * ANGLE_90;
|
||||
|
||||
// Apply signed adjustedAngle to stay in 0..0xFFFF
|
||||
if (adjustedAngle < 0)
|
||||
adjustedAngle = ANGLE_360 + adjustedAngle;
|
||||
|
||||
// Project a curved arg2 delta based on half the magnitude
|
||||
// Note: the trigonometric functions return s16, typically scaled by 0x1000 or more
|
||||
lateralMag = halfMag * Sin(angleDelta) / 20000;
|
||||
forwardMag = halfMag * Cos(angleDelta) / 20000;
|
||||
|
||||
// 'wall' sound if collision angle is high enough
|
||||
if (Cos(angleDelta) > 0x1F3F)
|
||||
{
|
||||
if (forwardMag > 0x46)
|
||||
m4aSongNumStart(SE_UNKNOWN_0x77);
|
||||
|
||||
if (forwardMag > 0x118
|
||||
&& gCurrentPinballGame->unk61C == 0
|
||||
&& gMain.selectedField < MAIN_FIELD_COUNT)
|
||||
{
|
||||
sub_11B0(6);
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->ballSpeed != 0)
|
||||
scaledForwardMag = forwardMag * 21;
|
||||
else
|
||||
scaledForwardMag = forwardMag * 26;
|
||||
|
||||
forwardMag = scaledForwardMag / 100;
|
||||
scaledLateralMag = (lateralMag * 8) / 10;
|
||||
|
||||
curveScaleFactor = gCurrentPinballGame->ball->unk6 * 0xEB8 / 0x2BC00;
|
||||
|
||||
curveDir = -angleSign;
|
||||
curveDirScaledFactor = (curveDir * 25) * 1024;
|
||||
gCurrentPinballGame->ball->unk6 =
|
||||
curveDirScaledFactor * scaledLateralMag / 0xEB8
|
||||
+ gCurrentPinballGame->ball->unk4;
|
||||
|
||||
tempVec.x = forwardMag * Cos(arg0);
|
||||
tempVec.y = -forwardMag * Sin(arg0);
|
||||
|
||||
tempVec.x = lateralMag * Cos(adjustedAngle) + tempVec.x;
|
||||
tempVec.y = -lateralMag * Sin(adjustedAngle) + tempVec.y;
|
||||
|
||||
tempVec.x = tempVec.x / 20000;
|
||||
tempVec.y = tempVec.y / 20000;
|
||||
|
||||
// With how the curveSign/curveScaleFactor are only used 'multiplied together'
|
||||
// with the tempVec calculation, the negations cancel out. - Shouldn't be needed.
|
||||
// Speculation is that this might have been a defensive code measure against
|
||||
// sign misbehavior, written by someone familar with assembly patterns.
|
||||
curveSign = 1;
|
||||
if (curveScaleFactor < 0)
|
||||
{
|
||||
curveSign = curveSign -2;
|
||||
curveScaleFactor = -curveScaleFactor;
|
||||
}
|
||||
curveSign = curveDir * curveSign;
|
||||
|
||||
tempVec2.x = curveSign * curveScaleFactor * Cos(adjustedAngle) / 20000;
|
||||
tempVec2.y = -curveSign * curveScaleFactor * Sin(adjustedAngle) / 20000;
|
||||
|
||||
vxSquared = tempVec.x * tempVec.x;
|
||||
vySquared = tempVec.y * tempVec.y;
|
||||
//Yes, the name is weird here. -- var reuse was needed for register match
|
||||
halfMag2 = vxSquared + vySquared;
|
||||
halfMag2 = Sqrt(halfMag2 * 4) /2;
|
||||
|
||||
tempVec.x = tempVec2.x + tempVec.x;
|
||||
tempVec.y = tempVec2.y + tempVec.y;
|
||||
|
||||
finalAngle = ArcTan2( tempVec.x, -tempVec.y);
|
||||
|
||||
if (gMain.selectedField == FIELD_SAPPHIRE
|
||||
&& gCurrentPinballGame->unk24 > 0
|
||||
&& gCurrentPinballGame->ball->positionQ0.y < 0xD2)
|
||||
{
|
||||
tempVec.x = halfMag * Cos(finalAngle) / 20000;
|
||||
tempVec.y = -halfMag * Sin(finalAngle) / 20000;
|
||||
}
|
||||
else
|
||||
{
|
||||
tempVec.x = halfMag2 * Cos(finalAngle) / 20000;
|
||||
tempVec.y = -halfMag2 * Sin(finalAngle) / 20000;
|
||||
}
|
||||
|
||||
sub_14074(arg0, &tempVec, angleOfFlippedArg1);
|
||||
|
||||
arg2->x = tempVec.x;
|
||||
arg2->y = tempVec.y;
|
||||
}
|
||||
|
||||
|
||||
void sub_14074(u16 arg0, struct Vector32 *arg1, u16 arg2)
|
||||
{
|
||||
const u16 VECTORSCALEDOWN = 0x4E20;
|
||||
s32 vMagSquared;
|
||||
s16 x, y;
|
||||
s16 var0;
|
||||
|
||||
struct Vector16 tempVec;
|
||||
|
||||
x = gCurrentPinballGame->ball->velocity.x;
|
||||
y = gCurrentPinballGame->ball->velocity.y;
|
||||
vMagSquared = (x * x) + (y * y);
|
||||
|
||||
if (gCurrentPinballGame->unk23 == 2)
|
||||
{
|
||||
if (gCurrentPinballGame->ball->positionQ1.x > 0xE0)
|
||||
{
|
||||
s32 value = -0x2A1C;
|
||||
var0 = value + arg2;
|
||||
arg0 = 0x6a1c;
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 value = 0x55e4;
|
||||
var0 = value - arg2;
|
||||
arg0 = 0x15e4;
|
||||
}
|
||||
|
||||
if (var0 >= 0 && var0 <= 0x1200 && vMagSquared < 0x4000)
|
||||
{
|
||||
tempVec.x = 0;
|
||||
tempVec.y = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
arg1->x = arg1->x / 5;
|
||||
arg1->y = arg1->y / 5;
|
||||
|
||||
gCurrentPinballGame->ball->unk6 = (gCurrentPinballGame->ball->unk6 * 4) / 10;
|
||||
|
||||
if ( gCurrentPinballGame->ballSpeed > 0)
|
||||
{
|
||||
tempVec.x = 230 * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -230 * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
else
|
||||
{
|
||||
tempVec.x = 285 * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -285 * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
|
||||
gCurrentPinballGame->unk716 = 4;
|
||||
if (gCurrentPinballGame->ball->positionQ0.x < 120)
|
||||
gCurrentPinballGame->unk717 = 0;
|
||||
else
|
||||
gCurrentPinballGame->unk717 = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gCurrentPinballGame->unk23 == 1)
|
||||
{
|
||||
arg1->x = arg1->x / 5;
|
||||
arg1->y = arg1->y / 5;
|
||||
|
||||
if (arg0 > 0xA000 && arg0 < 0xE000)
|
||||
{
|
||||
tempVec.x = 60 * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -60 * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
else if (arg0 >= 0x1000 && arg0 <= 0x7000)
|
||||
{
|
||||
tempVec.x = 240 * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -240 * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
else
|
||||
{
|
||||
tempVec.x = 120 * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -120 * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tempVec.x = gUnknown_086ACDF4[gCurrentPinballGame->unk23] * Cos(arg0) / VECTORSCALEDOWN;
|
||||
tempVec.y = -gUnknown_086ACDF4[gCurrentPinballGame->unk23] * Sin(arg0) / VECTORSCALEDOWN;
|
||||
}
|
||||
}
|
||||
|
||||
arg1->x = arg1->x + tempVec.x;
|
||||
arg1->y = arg1->y + tempVec.y;
|
||||
|
||||
if (gCurrentPinballGame->unk5A4 != 0)
|
||||
{
|
||||
s16 x2 = arg1->x;
|
||||
s16 xSign = 1;
|
||||
u16 angle;
|
||||
if (gCurrentPinballGame->unk5A4 == 1)
|
||||
{
|
||||
gCurrentPinballGame->unk5A4 = 0;
|
||||
vMagSquared = 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
vMagSquared = 0x280;
|
||||
}
|
||||
|
||||
if (x2 < 0)
|
||||
{
|
||||
x2 = -x2;
|
||||
xSign = -1;
|
||||
}
|
||||
|
||||
if (x2 < 0x100)
|
||||
arg1->x = xSign * 256;
|
||||
|
||||
gCurrentPinballGame->ball->unk6 = 0;
|
||||
angle = ArcTan2(arg1->x, -arg1->y);
|
||||
arg1->x = vMagSquared * Cos(angle) / VECTORSCALEDOWN;
|
||||
arg1->y = -vMagSquared * Sin(angle) / VECTORSCALEDOWN;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user