diff --git a/asm/non_matchings/ceremony_and_credits/func_80283430.s b/asm/non_matchings/ceremony_and_credits/func_80283430.s deleted file mode 100644 index e318f5d0c..000000000 --- a/asm/non_matchings/ceremony_and_credits/func_80283430.s +++ /dev/null @@ -1,139 +0,0 @@ -glabel func_80283430 -/* 126A70 80283430 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 126A74 80283434 AFB00020 */ sw $s0, 0x20($sp) -/* 126A78 80283438 3C108028 */ lui $s0, %hi(D_802876E0) # $s0, 0x8028 -/* 126A7C 8028343C 3C018028 */ lui $at, %hi(D_802876D8) # $at, 0x8028 -/* 126A80 80283440 261076E0 */ addiu $s0, %lo(D_802876E0) # addiu $s0, $s0, 0x76e0 -/* 126A84 80283444 AC2076D8 */ sw $zero, %lo(D_802876D8)($at) -/* 126A88 80283448 A200001C */ sb $zero, 0x1c($s0) -/* 126A8C 8028344C 3C0E800E */ lui $t6, %hi(D_800DC5E4) # $t6, 0x800e -/* 126A90 80283450 95CEC5E4 */ lhu $t6, %lo(D_800DC5E4)($t6) -/* 126A94 80283454 AFBF002C */ sw $ra, 0x2c($sp) -/* 126A98 80283458 3C018028 */ lui $at, %hi(D_802856C4) # $at, 0x8028 -/* 126A9C 8028345C 3C048028 */ lui $a0, %hi(D_802876E0+0xC) # $a0, 0x8028 -/* 126AA0 80283460 AFB20028 */ sw $s2, 0x28($sp) -/* 126AA4 80283464 AFB10024 */ sw $s1, 0x24($sp) -/* 126AA8 80283468 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 126AAC 8028346C 248476EC */ addiu $a0, %lo(D_802876E0+0xC) # addiu $a0, $a0, 0x76ec -/* 126AB0 80283470 0C0A07F7 */ jal vec3f_clear -/* 126AB4 80283474 AC2E56C4 */ sw $t6, %lo(D_802856C4)($at) -/* 126AB8 80283478 4480A000 */ mtc1 $zero, $f20 -/* 126ABC 8028347C 02002025 */ move $a0, $s0 -/* 126AC0 80283480 3C0743FA */ lui $a3, 0x43fa -/* 126AC4 80283484 4405A000 */ mfc1 $a1, $f20 -/* 126AC8 80283488 4406A000 */ mfc1 $a2, $f20 -/* 126ACC 8028348C 0C0A07E8 */ jal vec3f_set_dupe -/* 126AD0 80283490 00000000 */ nop -/* 126AD4 80283494 3C048028 */ lui $a0, %hi(D_80287700+0x10) # $a0, 0x8028 -/* 126AD8 80283498 0C0A07F7 */ jal vec3f_clear -/* 126ADC 8028349C 24847710 */ addiu $a0, %lo(D_80287700+0x10) # addiu $a0, $a0, 0x7710 -/* 126AE0 802834A0 3C048028 */ lui $a0, %hi(D_80287700+0x4) # $a0, 0x8028 -/* 126AE4 802834A4 4405A000 */ mfc1 $a1, $f20 -/* 126AE8 802834A8 4406A000 */ mfc1 $a2, $f20 -/* 126AEC 802834AC 24847704 */ addiu $a0, %lo(D_80287700+0x4) # addiu $a0, $a0, 0x7704 -/* 126AF0 802834B0 0C0A07E8 */ jal vec3f_set_dupe -/* 126AF4 802834B4 3C0743FA */ lui $a3, 0x43fa -/* 126AF8 802834B8 3C048028 */ lui $a0, %hi(D_80287700+0x1C) # $a0, 0x8028 -/* 126AFC 802834BC 4405A000 */ mfc1 $a1, $f20 -/* 126B00 802834C0 4407A000 */ mfc1 $a3, $f20 -/* 126B04 802834C4 2484771C */ addiu $a0, %lo(D_80287700+0x1C) # addiu $a0, $a0, 0x771c -/* 126B08 802834C8 0C0A07E8 */ jal vec3f_set_dupe -/* 126B0C 802834CC 3C063F80 */ lui $a2, 0x3f80 -/* 126B10 802834D0 3C018028 */ lui $at, %hi(D_802876F8) # $at, 0x8028 -/* 126B14 802834D4 3C048028 */ lui $a0, %hi(D_80287728) # $a0, 0x8028 -/* 126B18 802834D8 E43476F8 */ swc1 $f20, %lo(D_802876F8)($at) -/* 126B1C 802834DC 0C0A07FD */ jal vec3s_clear -/* 126B20 802834E0 24847728 */ addiu $a0, %lo(D_80287728) # addiu $a0, $a0, 0x7728 -/* 126B24 802834E4 3C048028 */ lui $a0, %hi(D_80287728+0x6) # $a0, 0x8028 -/* 126B28 802834E8 0C0A07FD */ jal vec3s_clear -/* 126B2C 802834EC 2484772E */ addiu $a0, %lo(D_80287728+0x6) # addiu $a0, $a0, 0x772e -/* 126B30 802834F0 3C048028 */ lui $a0, %hi(D_80287728+0xC) # $a0, 0x8028 -/* 126B34 802834F4 0C0A07FD */ jal vec3s_clear -/* 126B38 802834F8 24847734 */ addiu $a0, %lo(D_80287728+0xC) # addiu $a0, $a0, 0x7734 -/* 126B3C 802834FC 3C048028 */ lui $a0, %hi(D_80287728+0x12) # $a0, 0x8028 -/* 126B40 80283500 0C0A07FD */ jal vec3s_clear -/* 126B44 80283504 2484773A */ addiu $a0, %lo(D_80287728+0x12) # addiu $a0, $a0, 0x773a -/* 126B48 80283508 3C018028 */ lui $at, %hi(D_80287740) # $at, 0x8028 -/* 126B4C 8028350C A4207740 */ sh $zero, %lo(D_80287740)($at) -/* 126B50 80283510 E4347744 */ swc1 $f20, %lo(D_80287740+0x4)($at) -/* 126B54 80283514 3C018028 */ lui $at, %hi(D_80287748+0x6) # $at, 0x8028 -/* 126B58 80283518 E4347748 */ swc1 $f20, %lo(D_80287740+0x8)($at) -/* 126B5C 8028351C A420774C */ sh $zero, %lo(D_80287740+0xC)($at) -/* 126B60 80283520 A420774E */ sh $zero, %lo(D_80287748+0x6)($at) -/* 126B64 80283524 3C018015 */ lui $at, %hi(D_80150130) # $at, 0x8015 -/* 126B68 80283528 C4240130 */ lwc1 $f4, %lo(D_80150130)($at) -/* 126B6C 8028352C 3C018028 */ lui $at, %hi(D_80287700) # $at, 0x8028 -/* 126B70 80283530 E4247700 */ swc1 $f4, %lo(D_80287700)($at) -/* 126B74 80283534 3C018028 */ lui $at, %hi(sCutsceneShot) # $at, 0x8028 -/* 126B78 80283538 A42076D0 */ sh $zero, %lo(sCutsceneShot)($at) -/* 126B7C 8028353C 3C018028 */ lui $at, %hi(gCutsceneShotTimer) # $at, 0x8028 -/* 126B80 80283540 A42076D2 */ sh $zero, %lo(gCutsceneShotTimer)($at) -/* 126B84 80283544 3C018028 */ lui $at, %hi(D_802876D4) # $at, 0x8028 -/* 126B88 80283548 0C0A0903 */ jal reset_spline -/* 126B8C 8028354C AC2076D4 */ sw $zero, %lo(D_802876D4)($at) -/* 126B90 80283550 3C048028 */ lui $a0, %hi(D_80287818) # $a0, 0x8028 -/* 126B94 80283554 3C028028 */ lui $v0, %hi(D_80287998) # $v0, 0x8028 -/* 126B98 80283558 3C058028 */ lui $a1, %hi(sCutsceneSplineSegmentProgress) # $a1, 0x8028 -/* 126B9C 8028355C 24A57B18 */ addiu $a1, %lo(sCutsceneSplineSegmentProgress) # addiu $a1, $a1, 0x7b18 -/* 126BA0 80283560 24427998 */ addiu $v0, %lo(D_80287998) # addiu $v0, $v0, 0x7998 -/* 126BA4 80283564 24847818 */ addiu $a0, %lo(D_80287818) # addiu $a0, $a0, 0x7818 -/* 126BA8 80283568 2403FFFF */ li $v1, -1 -.L8028356C: -/* 126BAC 8028356C 2442000C */ addiu $v0, $v0, 0xc -/* 126BB0 80283570 0045082B */ sltu $at, $v0, $a1 -/* 126BB4 80283574 2484000C */ addiu $a0, $a0, 0xc -/* 126BB8 80283578 A083FFF4 */ sb $v1, -0xc($a0) -/* 126BBC 8028357C 1420FFFB */ bnez $at, .L8028356C -/* 126BC0 80283580 A043FFF4 */ sb $v1, -0xc($v0) -/* 126BC4 80283584 3C118028 */ lui $s1, %hi(D_80287750) # $s1, 0x8028 -/* 126BC8 80283588 3C108028 */ lui $s0, 0x8028 -/* 126BCC 8028358C 3C128028 */ lui $s2, 0x8028 -/* 126BD0 80283590 26527824 */ addiu $s2, $s2, 0x7824 -/* 126BD4 80283594 2610775C */ addiu $s0, $s0, 0x775c -/* 126BD8 80283598 26317750 */ addiu $s1, %lo(D_80287750) # addiu $s1, $s1, 0x7750 -.L8028359C: -/* 126BDC 8028359C 0C0A07F7 */ jal vec3f_clear -/* 126BE0 802835A0 02202025 */ move $a0, $s1 -/* 126BE4 802835A4 0C0A07FD */ jal vec3s_clear -/* 126BE8 802835A8 02002025 */ move $a0, $s0 -/* 126BEC 802835AC 26100014 */ addiu $s0, $s0, 0x14 -/* 126BF0 802835B0 1612FFFA */ bne $s0, $s2, .L8028359C -/* 126BF4 802835B4 26310014 */ addiu $s1, $s1, 0x14 -/* 126BF8 802835B8 3C0F800E */ lui $t7, %hi(gGamestate) # $t7, 0x800e -/* 126BFC 802835BC 8DEFC50C */ lw $t7, %lo(gGamestate)($t7) -/* 126C00 802835C0 3C018028 */ lui $at, %hi(D_802856C0) # $at, 0x8028 -/* 126C04 802835C4 E43456C0 */ swc1 $f20, %lo(D_802856C0)($at) -/* 126C08 802835C8 24010005 */ li $at, 5 -/* 126C0C 802835CC 15E1000B */ bne $t7, $at, .L802835FC -/* 126C10 802835D0 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 126C14 802835D4 44810000 */ mtc1 $at, $f0 -/* 126C18 802835D8 3C018028 */ lui $at, %hi(D_802856B0) # $at, 0x8028 -/* 126C1C 802835DC E42056B0 */ swc1 $f0, %lo(D_802856B0)($at) -/* 126C20 802835E0 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 126C24 802835E4 44813000 */ mtc1 $at, $f6 -/* 126C28 802835E8 3C018028 */ lui $at, %hi(D_802856B4) # $at, 0x8028 -/* 126C2C 802835EC E42656B4 */ swc1 $f6, %lo(D_802856B4)($at) -/* 126C30 802835F0 3C018028 */ lui $at, %hi(D_802856B8) # $at, 0x8028 -/* 126C34 802835F4 1000000D */ b .L8028362C -/* 126C38 802835F8 E42056B8 */ swc1 $f0, %lo(D_802856B8)($at) -.L802835FC: -/* 126C3C 802835FC 3C0142C4 */ li $at, 0x42C40000 # 98.000000 -/* 126C40 80283600 44814000 */ mtc1 $at, $f8 -/* 126C44 80283604 3C018028 */ lui $at, %hi(D_802856B0) # $at, 0x8028 -/* 126C48 80283608 E42856B0 */ swc1 $f8, %lo(D_802856B0)($at) -/* 126C4C 8028360C 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 126C50 80283610 44815000 */ mtc1 $at, $f10 -/* 126C54 80283614 3C018028 */ lui $at, %hi(D_802856B4) # $at, 0x8028 -/* 126C58 80283618 E42A56B4 */ swc1 $f10, %lo(D_802856B4)($at) -/* 126C5C 8028361C 3C014250 */ li $at, 0x42500000 # 52.000000 -/* 126C60 80283620 44818000 */ mtc1 $at, $f16 -/* 126C64 80283624 3C018028 */ lui $at, %hi(D_802856B8) # $at, 0x8028 -/* 126C68 80283628 E43056B8 */ swc1 $f16, %lo(D_802856B8)($at) -.L8028362C: -/* 126C6C 8028362C 8FBF002C */ lw $ra, 0x2c($sp) -/* 126C70 80283630 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 126C74 80283634 8FB00020 */ lw $s0, 0x20($sp) -/* 126C78 80283638 8FB10024 */ lw $s1, 0x24($sp) -/* 126C7C 8028363C 8FB20028 */ lw $s2, 0x28($sp) -/* 126C80 80283640 03E00008 */ jr $ra -/* 126C84 80283644 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/ceremony_and_credits/func_80283648.s b/asm/non_matchings/ceremony_and_credits/func_80283648.s deleted file mode 100644 index 6a8af5972..000000000 --- a/asm/non_matchings/ceremony_and_credits/func_80283648.s +++ /dev/null @@ -1,212 +0,0 @@ -glabel func_80283648 -/* 126C88 80283648 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 126C8C 8028364C AFBF0024 */ sw $ra, 0x24($sp) -/* 126C90 80283650 AFB00020 */ sw $s0, 0x20($sp) -/* 126C94 80283654 0C0A0D0A */ jal func_80283428 -/* 126C98 80283658 00808025 */ move $s0, $a0 -/* 126C9C 8028365C 27A40058 */ addiu $a0, $sp, 0x58 -/* 126CA0 80283660 0C0A0802 */ jal vec3f_copy_dupe -/* 126CA4 80283664 02002825 */ move $a1, $s0 -/* 126CA8 80283668 2605000C */ addiu $a1, $s0, 0xc -/* 126CAC 8028366C AFA50034 */ sw $a1, 0x34($sp) -/* 126CB0 80283670 0C0A0802 */ jal vec3f_copy_dupe -/* 126CB4 80283674 27A4004C */ addiu $a0, $sp, 0x4c -/* 126CB8 80283678 26050018 */ addiu $a1, $s0, 0x18 -/* 126CBC 8028367C AFA50030 */ sw $a1, 0x30($sp) -/* 126CC0 80283680 0C0A0802 */ jal vec3f_copy_dupe -/* 126CC4 80283684 27A40040 */ addiu $a0, $sp, 0x40 -/* 126CC8 80283688 3C048028 */ lui $a0, %hi(D_802876E0) # $a0, 0x8028 -/* 126CCC 8028368C 248476E0 */ addiu $a0, %lo(D_802876E0) # addiu $a0, $a0, 0x76e0 -/* 126CD0 80283690 0C0A0CDB */ jal func_8028336C -/* 126CD4 80283694 02002825 */ move $a1, $s0 -/* 126CD8 80283698 304300FF */ andi $v1, $v0, 0xff -/* 126CDC 8028369C 3C018028 */ lui $at, %hi(D_802876E0+0x1C) # $at, 0x8028 -/* 126CE0 802836A0 10600090 */ beqz $v1, .L802838E4 -/* 126CE4 802836A4 A02376FC */ sb $v1, %lo(D_802876E0+0x1C)($at) -/* 126CE8 802836A8 3C048028 */ lui $a0, %hi(D_802876E0+0xC) # $a0, 0x8028 -/* 126CEC 802836AC 248476EC */ addiu $a0, %lo(D_802876E0+0xC) # addiu $a0, $a0, 0x76ec -/* 126CF0 802836B0 0C0A0802 */ jal vec3f_copy_dupe -/* 126CF4 802836B4 02002825 */ move $a1, $s0 -/* 126CF8 802836B8 3C048028 */ lui $a0, %hi(D_802876E0) # $a0, 0x8028 -/* 126CFC 802836BC 248476E0 */ addiu $a0, %lo(D_802876E0) # addiu $a0, $a0, 0x76e0 -/* 126D00 802836C0 0C0A0802 */ jal vec3f_copy_dupe -/* 126D04 802836C4 8FA50034 */ lw $a1, 0x34($sp) -/* 126D08 802836C8 3C048028 */ lui $a0, %hi(D_802876E0) # $a0, 0x8028 -/* 126D0C 802836CC 0C0A12BA */ jal play_cutscene -/* 126D10 802836D0 248476E0 */ addiu $a0, %lo(D_802876E0) # addiu $a0, $a0, 0x76e0 -/* 126D14 802836D4 3C048028 */ lui $a0, %hi(D_802876E0+0xC) # $a0, 0x8028 -/* 126D18 802836D8 3C058028 */ lui $a1, %hi(D_802876E0) # $a1, 0x8028 -/* 126D1C 802836DC 27AE006C */ addiu $t6, $sp, 0x6c -/* 126D20 802836E0 AFAE0010 */ sw $t6, 0x10($sp) -/* 126D24 802836E4 24A576E0 */ addiu $a1, %lo(D_802876E0) # addiu $a1, $a1, 0x76e0 -/* 126D28 802836E8 248476EC */ addiu $a0, %lo(D_802876E0+0xC) # addiu $a0, $a0, 0x76ec -/* 126D2C 802836EC 27A60064 */ addiu $a2, $sp, 0x64 -/* 126D30 802836F0 0C0A0915 */ jal func_80282454 -/* 126D34 802836F4 27A7006E */ addiu $a3, $sp, 0x6e -/* 126D38 802836F8 87A7006E */ lh $a3, 0x6e($sp) -/* 126D3C 802836FC 28E13800 */ slti $at, $a3, 0x3800 -/* 126D40 80283700 54200003 */ bnel $at, $zero, .L80283710 -/* 126D44 80283704 28E1C801 */ slti $at, $a3, -0x37ff -/* 126D48 80283708 24073800 */ li $a3, 14336 -/* 126D4C 8028370C 28E1C801 */ slti $at, $a3, -0x37ff -.L80283710: -/* 126D50 80283710 50200003 */ beql $at, $zero, .L80283720 -/* 126D54 80283714 24013800 */ li $at, 14336 -/* 126D58 80283718 2407C800 */ li $a3, -14336 -/* 126D5C 8028371C 24013800 */ li $at, 14336 -.L80283720: -/* 126D60 80283720 10E10003 */ beq $a3, $at, .L80283730 -/* 126D64 80283724 2401C800 */ li $at, -14336 -/* 126D68 80283728 14E1000A */ bne $a3, $at, .L80283754 -/* 126D6C 8028372C A7A7006E */ sh $a3, 0x6e($sp) -.L80283730: -/* 126D70 80283730 87AF006C */ lh $t7, 0x6c($sp) -/* 126D74 80283734 3C048028 */ lui $a0, %hi(D_802876E0+0xC) # $a0, 0x8028 -/* 126D78 80283738 3C058028 */ lui $a1, %hi(D_802876E0) # $a1, 0x8028 -/* 126D7C 8028373C 24A576E0 */ addiu $a1, %lo(D_802876E0) # addiu $a1, $a1, 0x76e0 -/* 126D80 80283740 248476EC */ addiu $a0, %lo(D_802876E0+0xC) # addiu $a0, $a0, 0x76ec -/* 126D84 80283744 8FA60064 */ lw $a2, 0x64($sp) -/* 126D88 80283748 A7A7006E */ sh $a3, 0x6e($sp) -/* 126D8C 8028374C 0C0A0941 */ jal func_80282504 -/* 126D90 80283750 AFAF0010 */ sw $t7, 0x10($sp) -.L80283754: -/* 126D94 80283754 3C018028 */ lui $at, %hi(D_802876E0+0x18) # $at, 0x8028 -/* 126D98 80283758 C42276F8 */ lwc1 $f2, %lo(D_802876E0+0x18)($at) -/* 126D9C 8028375C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 126DA0 80283760 44816000 */ mtc1 $at, $f12 -/* 126DA4 80283764 3C01C780 */ li $at, 0xC7800000 # -65536.000000 -/* 126DA8 80283768 44812000 */ mtc1 $at, $f4 -/* 126DAC 8028376C 4602603C */ c.lt.s $f12, $f2 -/* 126DB0 80283770 44803000 */ mtc1 $zero, $f6 -/* 126DB4 80283774 24040001 */ li $a0, 1 -/* 126DB8 80283778 45020003 */ bc1fl .L80283788 -/* 126DBC 8028377C 4604103C */ c.lt.s $f2, $f4 -/* 126DC0 80283780 460C1081 */ sub.s $f2, $f2, $f12 -/* 126DC4 80283784 4604103C */ c.lt.s $f2, $f4 -.L80283788: -/* 126DC8 80283788 00000000 */ nop -/* 126DCC 8028378C 45020003 */ bc1fl .L8028379C -/* 126DD0 80283790 4606103C */ c.lt.s $f2, $f6 -/* 126DD4 80283794 460C1080 */ add.s $f2, $f2, $f12 -/* 126DD8 80283798 4606103C */ c.lt.s $f2, $f6 -.L8028379C: -/* 126DDC 8028379C 3C018028 */ lui $at, %hi(D_802876E0+0x18) # $at, 0x8028 -/* 126DE0 802837A0 E42276F8 */ swc1 $f2, %lo(D_802876E0+0x18)($at) -/* 126DE4 802837A4 46001006 */ mov.s $f0, $f2 -/* 126DE8 802837A8 45020003 */ bc1fl .L802837B8 -/* 126DEC 802837AC 4458F800 */ cfc1 $t8, $31 -/* 126DF0 802837B0 46026000 */ add.s $f0, $f12, $f2 -/* 126DF4 802837B4 4458F800 */ cfc1 $t8, $31 -.L802837B8: -/* 126DF8 802837B8 44C4F800 */ ctc1 $a0, $31 -/* 126DFC 802837BC 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 126E00 802837C0 46000224 */ cvt.w.s $f8, $f0 -/* 126E04 802837C4 4444F800 */ cfc1 $a0, $31 -/* 126E08 802837C8 00000000 */ nop -/* 126E0C 802837CC 30840078 */ andi $a0, $a0, 0x78 -/* 126E10 802837D0 50800013 */ beql $a0, $zero, .L80283820 -/* 126E14 802837D4 44044000 */ mfc1 $a0, $f8 -/* 126E18 802837D8 44814000 */ mtc1 $at, $f8 -/* 126E1C 802837DC 24040001 */ li $a0, 1 -/* 126E20 802837E0 46080201 */ sub.s $f8, $f0, $f8 -/* 126E24 802837E4 44C4F800 */ ctc1 $a0, $31 -/* 126E28 802837E8 00000000 */ nop -/* 126E2C 802837EC 46004224 */ cvt.w.s $f8, $f8 -/* 126E30 802837F0 4444F800 */ cfc1 $a0, $31 -/* 126E34 802837F4 00000000 */ nop -/* 126E38 802837F8 30840078 */ andi $a0, $a0, 0x78 -/* 126E3C 802837FC 14800005 */ bnez $a0, .L80283814 -/* 126E40 80283800 00000000 */ nop -/* 126E44 80283804 44044000 */ mfc1 $a0, $f8 -/* 126E48 80283808 3C018000 */ lui $at, 0x8000 -/* 126E4C 8028380C 10000007 */ b .L8028382C -/* 126E50 80283810 00812025 */ or $a0, $a0, $at -.L80283814: -/* 126E54 80283814 10000005 */ b .L8028382C -/* 126E58 80283818 2404FFFF */ li $a0, -1 -/* 126E5C 8028381C 44044000 */ mfc1 $a0, $f8 -.L80283820: -/* 126E60 80283820 00000000 */ nop -/* 126E64 80283824 0480FFFB */ bltz $a0, .L80283814 -/* 126E68 80283828 00000000 */ nop -.L8028382C: -/* 126E6C 8028382C 44D8F800 */ ctc1 $t8, $31 -/* 126E70 80283830 3099FFFF */ andi $t9, $a0, 0xffff -/* 126E74 80283834 03202025 */ move $a0, $t9 -/* 126E78 80283838 0C0AE006 */ jal sins -/* 126E7C 8028383C AFB9002C */ sw $t9, 0x2c($sp) -/* 126E80 80283840 E7A00038 */ swc1 $f0, 0x38($sp) -/* 126E84 80283844 0C0AE00E */ jal coss -/* 126E88 80283848 97A4006C */ lhu $a0, 0x6c($sp) -/* 126E8C 8028384C C7AA0038 */ lwc1 $f10, 0x38($sp) -/* 126E90 80283850 460A0402 */ mul.s $f16, $f0, $f10 -/* 126E94 80283854 E6100018 */ swc1 $f16, 0x18($s0) -/* 126E98 80283858 0C0AE00E */ jal coss -/* 126E9C 8028385C 97A4002E */ lhu $a0, 0x2e($sp) -/* 126EA0 80283860 E600001C */ swc1 $f0, 0x1c($s0) -/* 126EA4 80283864 0C0AE006 */ jal sins -/* 126EA8 80283868 97A4002E */ lhu $a0, 0x2e($sp) -/* 126EAC 8028386C E7A00038 */ swc1 $f0, 0x38($sp) -/* 126EB0 80283870 0C0AE006 */ jal sins -/* 126EB4 80283874 97A4006C */ lhu $a0, 0x6c($sp) -/* 126EB8 80283878 C7B20038 */ lwc1 $f18, 0x38($sp) -/* 126EBC 8028387C 3C058028 */ lui $a1, %hi(D_802876E0+0xC) # $a1, 0x8028 -/* 126EC0 80283880 24A576EC */ addiu $a1, %lo(D_802876E0+0xC) # addiu $a1, $a1, 0x76ec -/* 126EC4 80283884 46009107 */ neg.s $f4, $f18 -/* 126EC8 80283888 02002025 */ move $a0, $s0 -/* 126ECC 8028388C 46040182 */ mul.s $f6, $f0, $f4 -/* 126ED0 80283890 0C0A0802 */ jal vec3f_copy_dupe -/* 126ED4 80283894 E6060020 */ swc1 $f6, 0x20($s0) -/* 126ED8 80283898 3C058028 */ lui $a1, %hi(D_802876E0) # $a1, 0x8028 -/* 126EDC 8028389C 24A576E0 */ addiu $a1, %lo(D_802876E0) # addiu $a1, $a1, 0x76e0 -/* 126EE0 802838A0 0C0A0802 */ jal vec3f_copy_dupe -/* 126EE4 802838A4 8FA40034 */ lw $a0, 0x34($sp) -/* 126EE8 802838A8 3C08800E */ lui $t0, %hi(gGamestate) # $t0, 0x800e -/* 126EEC 802838AC 8D08C50C */ lw $t0, %lo(gGamestate)($t0) -/* 126EF0 802838B0 24010009 */ li $at, 9 -/* 126EF4 802838B4 3C09800E */ lui $t1, %hi(gIsMirrorMode) # $t1, 0x800e -/* 126EF8 802838B8 1501000A */ bne $t0, $at, .L802838E4 -/* 126EFC 802838BC 00000000 */ nop -/* 126F00 802838C0 8D29C604 */ lw $t1, %lo(gIsMirrorMode)($t1) -/* 126F04 802838C4 11200007 */ beqz $t1, .L802838E4 -/* 126F08 802838C8 00000000 */ nop -/* 126F0C 802838CC C6080000 */ lwc1 $f8, ($s0) -/* 126F10 802838D0 C610000C */ lwc1 $f16, 0xc($s0) -/* 126F14 802838D4 46004287 */ neg.s $f10, $f8 -/* 126F18 802838D8 46008487 */ neg.s $f18, $f16 -/* 126F1C 802838DC E60A0000 */ swc1 $f10, ($s0) -/* 126F20 802838E0 E612000C */ swc1 $f18, 0xc($s0) -.L802838E4: -/* 126F24 802838E4 3C058028 */ lui $a1, %hi(D_802876E0) # $a1, 0x8028 -/* 126F28 802838E8 24A576E0 */ addiu $a1, %lo(D_802876E0) # addiu $a1, $a1, 0x76e0 -/* 126F2C 802838EC 00002025 */ move $a0, $zero -/* 126F30 802838F0 0C0A0BD1 */ jal func_80282F44 -/* 126F34 802838F4 02003025 */ move $a2, $s0 -/* 126F38 802838F8 3C058028 */ lui $a1, %hi(D_802876E0) # $a1, 0x8028 -/* 126F3C 802838FC 24A576E0 */ addiu $a1, %lo(D_802876E0) # addiu $a1, $a1, 0x76e0 -/* 126F40 80283900 24040001 */ li $a0, 1 -/* 126F44 80283904 0C0A0BD1 */ jal func_80282F44 -/* 126F48 80283908 02003025 */ move $a2, $s0 -/* 126F4C 8028390C 3C048028 */ lui $a0, %hi(D_802876E0) # $a0, 0x8028 -/* 126F50 80283910 3C058015 */ lui $a1, %hi(D_80150130) # $a1, 0x8015 -/* 126F54 80283914 24A50130 */ addiu $a1, %lo(D_80150130) # addiu $a1, $a1, 0x130 -/* 126F58 80283918 0C0A0C40 */ jal func_80283100 -/* 126F5C 8028391C 248476E0 */ addiu $a0, %lo(D_802876E0) # addiu $a0, $a0, 0x76e0 -/* 126F60 80283920 3C048028 */ lui $a0, %hi(D_80287700+0x10) # $a0, 0x8028 -/* 126F64 80283924 24847710 */ addiu $a0, %lo(D_80287700+0x10) # addiu $a0, $a0, 0x7710 -/* 126F68 80283928 0C0A0802 */ jal vec3f_copy_dupe -/* 126F6C 8028392C 02002825 */ move $a1, $s0 -/* 126F70 80283930 3C048028 */ lui $a0, %hi(D_80287700+0x4) # $a0, 0x8028 -/* 126F74 80283934 24847704 */ addiu $a0, %lo(D_80287700+0x4) # addiu $a0, $a0, 0x7704 -/* 126F78 80283938 0C0A0802 */ jal vec3f_copy_dupe -/* 126F7C 8028393C 8FA50034 */ lw $a1, 0x34($sp) -/* 126F80 80283940 3C048028 */ lui $a0, %hi(D_80287700+0x1C) # $a0, 0x8028 -/* 126F84 80283944 2484771C */ addiu $a0, %lo(D_80287700+0x1C) # addiu $a0, $a0, 0x771c -/* 126F88 80283948 0C0A0802 */ jal vec3f_copy_dupe -/* 126F8C 8028394C 8FA50030 */ lw $a1, 0x30($sp) -/* 126F90 80283950 8FBF0024 */ lw $ra, 0x24($sp) -/* 126F94 80283954 3C028028 */ lui $v0, %hi(D_802876D8) # $v0, 0x8028 -/* 126F98 80283958 8C4276D8 */ lw $v0, %lo(D_802876D8)($v0) -/* 126F9C 8028395C 8FB00020 */ lw $s0, 0x20($sp) -/* 126FA0 80283960 03E00008 */ jr $ra -/* 126FA4 80283964 27BD0070 */ addiu $sp, $sp, 0x70 diff --git a/src/camera.h b/src/camera.h index c198f5753..d29827c2e 100644 --- a/src/camera.h +++ b/src/camera.h @@ -50,50 +50,9 @@ typedef struct { /* 0xB4 */ f32 unk_B4; } Camera; /* size = 0xB8 */ -typedef BAD_RETURN(s32) (*CameraEvent)(struct Camera *c); +typedef BAD_RETURN(s32) (*CameraEvent)(Camera *c); typedef CameraEvent CutsceneShot; -// The camera used for cutscenes appears to -// use a slightly different struct. -// Or even no struct at all. -typedef struct { - /* 0x00 */ Vec3f pos; - /* 0x0C */ Vec3f lookAt; - // This is expected to be a normalized vector, indicates what direction is "up" for the camera - /* 0x18 */ f32 unk18; - /* 0x1C */ u8 cutscene; // ? - /* 0x20 */ f32 unk20[10]; // ??? - // I think these are the "nautical angles" between pos and lookAt - // rot[0] = pitch, rot[1] = yaw, rot[2] = roll? - /* 0x24 */ Vec3s rot; - /* 0x2A */ s16 rotZ; - /* 0x2C */ s16 unk_2C; - /* 0x2E */ s16 unk_2E; - /* 0x30 */ Vec3f unk_30; - /* 0x3C */ Vec3f unk_3C; - /* 0x48 */ s32 unk_48; - /* 0x4C */ s32 unk_4C; - /* 0x50 */ s32 unk_50; - /* 0x54 */ UnkActorInner unk_54; - // When you hit a wall (or another driver) the camera's pos and lookAt bounce up and down. This is the velocity(?) of that bouncing - /* 0x94 */ f32 unk_94; - /* 0x98 */ s16 unk_98; - /* 0x9A */ s16 unk_9A; - // Timer for wall-hit bounce. Counts up instead of down - /* 0x9C */ s16 unk_9C; - /* 0x9E */ s16 pad_9E; - /* 0xA0 */ f32 unk_A0; - /* 0xA4 */ s32 unk_A4; - /* 0xA8 */ s32 unk_A8; - /* 0xAC */ s16 unk_AC; - // Id of the player the camera is following. - /* 0xAE */ s16 playerId; - // Seems related to camera movement during drifting - /* 0xB0 */ s16 unk_B0; - /* 0xB2 */ s16 unk_B2; - /* 0xB4 */ f32 unk_B4; -} CinematicCamera; /* size = 0xB8 */ - void func_8001CA10(Camera*); void func_8001CA24(Player*, f32); void func_8001CA78(Player*, Camera*, Vec3f, f32*, f32*, f32*, s16, s8); diff --git a/src/ceremony_and_credits.c b/src/ceremony_and_credits.c index 82f90ca0c..04fedfd88 100644 --- a/src/ceremony_and_credits.c +++ b/src/ceremony_and_credits.c @@ -11,14 +11,13 @@ #include "variables.h" #include "math_util.h" #include "ceremony_and_credits.h" +#include "code_80280000.h" #include "objects.h" #include "main.h" #include "camera.h" +#include "audio/external.h" #include -/* externs */ -void func_80280268(s32); - extern f32 D_80150130[]; f32 D_802856B0 = 98.0f; @@ -36,124 +35,7 @@ s32 D_802876D4; s32 D_802876D8; s32 D_802876DC; // fake/padding? Or D8 is array? -struct struct_80283431 { - Vec3f unk0; - Vec3s unkC; -}; - -struct struct_80283430 { - s8 unk0; // index - s8 unk1; // speed - u16 unk2; // point - s8 unk4; - s8 unk5; - Vec3s unk6; -}; -struct unkStruct_80283430 { - s16 unk0; - f32 unk4; -}; - -struct unkStruct_80283430_2 { - f32 unk0; - s16 unk4; - s16 unk6; -}; - - -struct b18 { - f32 unk0; - s16 unk4; - s16 unk6; - s8 unk8; -}; -//extern struct b18 sCutsceneSplineSegmentProgress; -//extern s16 sCutsceneSplineSegment; -//extern s16 D_80287B1E; -//extern s8 D_80287B20; - -struct credits_data_1FA0 { - Vec3f unk0; - s8 pad[0x10]; - s8 unk1C; - s8 unk1D; - s16 unk1E; - f32 unk20; - s8 pad2[0x24]; - s16 unk48[3]; - s16 unk4E[2]; - s16 un52; - s16 unk54[2]; - s16 unk58; - s16 unk5A[2]; - s16 unk5E; - s16 unk60; - s16 unk62; - f32 unk64; - f32 unk68; - s16 unk6C; - s16 unk6E; -}; - - -// Cinematic camera? Camera rails? -// CutsceneVariable? -/** - * Struct used to store cutscene info, like the camera's target position/focus. - * - * See the sCutsceneVars[] array in camera.c for more details. - */ -struct struct_D_802876D0 { - /* 0x00 */ Vec3f unk0; // E0 - /* 0x0C */ Vec3f unkC; // EC - /* 0x18 */ f32 unk18; - /* 0x1C */ s8 unk1C; - /* 0x00 */ f32 unk20; // D_80287700[0] = D_80150130[0] (f32); - /* 0x04 */ Vec3f unk24; // vec3f_set_dupe() - /* 0x10 */ Vec3f unk30; // " - /* 0x1C */ Vec3f unk3C; // " - /* 0x28 */ Vec3s unk48; - /* 0x2E */ Vec3s unk4E; - /* 0x30 */ Vec3s unk54; - /* 0x36 */ Vec3s unk5A; - /* 0x3C */ s16 unk60; - /* 0x3E */ s16 unk62; - /* 0x40 */ f32 unk64; - /* 0x44 */ f32 unk68; - /* 0x48 */ s16 unk6C; - /* 0x4A */ s16 unk6E; -}; - -struct PlayerGeometry { - /*0x00*/ struct Surface *currFloor; - /*0x04*/ f32 currFloorHeight; - /*0x08*/ s16 currFloorType; - /*0x0C*/ struct Surface *currCeil; - /*0x10*/ s16 currCeilType; - /*0x14*/ f32 currCeilHeight; - /*0x18*/ struct Surface *prevFloor; - /*0x1C*/ f32 prevFloorHeight; - /*0x20*/ s16 prevFloorType; - /*0x24*/ struct Surface *prevCeil; - /*0x28*/ f32 prevCeilHeight; - /*0x2C*/ s16 prevCeilType; - /// Unused, but recalculated every frame - /*0x30*/ f32 waterHeight; -}; - -// unk0 Vec3f lookat -// unk[12] Vec3f pos -s8 D_802876E0[24]; // todo: Should be CinematicCamera * ? Or cameraSplineRail? - -f32 D_802876F8; -s8 D_802876FC; - -f32 D_80287700[10]; -Vec3s D_80287728[4]; - -// static bss declared in func_80283430? -struct unkStruct_80283430 D_80287740; -struct unkStruct_80283430_2 D_80287748; +struct CinematicCamera D_802876E0; struct struct_80283431 D_80287750[10]; struct struct_80283430 D_80287818[32]; struct struct_80283430 D_80287998[32]; @@ -321,7 +203,7 @@ void reset_spline(void) { D_80287B20 = 0; } -void func_80282434(Camera *arg0) { +void func_80282434(struct CinematicCamera *arg0) { reset_spline(); } @@ -359,7 +241,7 @@ UNUSED void func_802825C8(Vec3f arg0, Vec3f arg1, Vec3f arg2, Vec3s arg3) { } // evaluate_cubic_spline -void func_80282700(f32 arg0, Vec3f arg1, Vec3f arg2, f32 arg3[], f32 arg4[], f32 arg5[], f32 arg6[]) +void func_80282700(f32 arg0, Vec3f arg1, f32 *arg2, f32 arg3[], f32 arg4[], f32 arg5[], f32 arg6[]) { f32 B[4]; f32 a = arg0; @@ -375,16 +257,9 @@ void func_80282700(f32 arg0, Vec3f arg1, Vec3f arg2, f32 arg3[], f32 arg4[], f32 arg1[0] = B[0] * arg3[0] + B[1] * arg4[0] + B[2] * arg5[0] + B[3] * arg6[0]; arg1[1] = B[0] * arg3[1] + B[1] * arg4[1] + B[2] * arg5[1] + B[3] * arg6[1]; arg1[2] = B[0] * arg3[2] + B[1] * arg4[2] + B[2] * arg5[2] + B[3] * arg6[2]; - arg2[0] = B[0] * arg3[3] + B[1] * arg4[3] + B[2] * arg5[3] + B[3] * arg6[3]; + *arg2 = B[0] * arg3[3] + B[1] * arg4[3] + B[2] * arg5[3] + B[3] * arg6[3]; } -struct CutsceneSplinePoint { - s8 index; - u8 speed; - Vec3s point; - -}; - /** * Computes the point that is `progress` percent of the way through segment `splineSegment` of `spline`, * and stores the result in `p`. `progress` and `splineSegment` are updated if `progress` becomes >= 1.0. @@ -406,7 +281,7 @@ struct CutsceneSplinePoint { * @return 1 if the point has reached the end of the spline, when `progress` reaches 1.0 or greater, and * the 4th CutsceneSplinePoint in the current segment away from spline[splineSegment] has an index of -1. */ -s32 move_point_along_spline(Vec3f p, Vec3f arg1, struct struct_80283430 spline[], s16 *splineSegment, f32 *progress) { +s32 move_point_along_spline(Vec3f p, f32 *arg1, struct struct_80283430 spline[], s16 *splineSegment, f32 *progress) { s32 finished = 0; Mat4 controlPoints; s32 i = 0; @@ -495,30 +370,26 @@ dummy_label_888430: ; } // todo: Cast to normal Camera? Or from CinematicCamera? -s32 func_80282D90(Camera *camera, struct struct_80286A04 *arg1, struct struct_80286A04 *arg2, s32 arg3) { +s32 func_80282D90(struct CinematicCamera *camera, struct struct_80286A04 *arg1, struct struct_80286A04 *arg2, s32 arg3) { s32 res; - cutscene_event(&func_80282434, camera, 0, 0); + cutscene_event(func_80282434, camera, 0, 0); func_80282C40(&D_80287818, arg1, arg3); func_80282C40(&D_80287998, arg2, arg3); if (0) {}; // debug stub? - res = move_point_along_spline(camera->lookAt, camera->up, &D_80287818, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress) | - move_point_along_spline(camera->pos, camera->up, &D_80287998, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress); + res = move_point_along_spline(camera->lookAt, &camera->unk18, &D_80287818, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress) | + move_point_along_spline(camera->pos, &camera->unk18, &D_80287998, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress); return res; } -void func_80282E58(Camera *camera, struct struct_80282C40 *arg1, s32 arg2) { - //extern struct struct_80283430 D_80287818[]; - //extern s16 sCutsceneSplineSegment; - //extern f32 sCutsceneSplineSegmentProgress; - +void func_80282E58(struct CinematicCamera *camera, struct struct_80282C40 *arg1, s32 arg2) { func_80282C40(&D_80287818, arg1, arg2); - move_point_along_spline(camera->lookAt, camera->up, &D_80287818, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress); + move_point_along_spline(camera->lookAt, &camera->unk18, &D_80287818, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress); } -void func_80282EAC(s32 arg0, struct struct_D_802876D0 *arg1, s16 arg2, s16 arg3, s16 arg4) +void func_80282EAC(s32 arg0, struct CinematicCamera *arg1, s16 arg2, s16 arg3, s16 arg4) { if ((arg0 >= 0) && (arg0 < 3)) { @@ -539,34 +410,34 @@ void func_80282F00(s16 *arg0, s16 arg1) { *arg0 += arg1; } -void func_80282F44(s32 arg0, struct struct_D_802876D0 *arg1, Camera *camera) { +void func_80282F44(s32 arg0, struct CinematicCamera *arg1, Camera *camera) { f32 sp5C; s32 pad[2]; s16 sp50[2]; Vec3f pos; - Vec3f rot; + Vec3f lookat; vec3f_set_dupe(pos, camera->pos[0], camera->pos[1], camera->pos[2]); - vec3f_set_dupe(rot, camera->lookAt[0], camera->lookAt[1], camera->lookAt[2]); + vec3f_set_dupe(lookat, camera->lookAt[0], camera->lookAt[1], camera->lookAt[2]); if ((arg0 == 0) || (arg0 == 1)) { if ((arg1->unk48[0] != 0) || (arg1->unk48[1] != 0)) { - func_80282454(pos, rot, &sp5C, &sp50[0], &sp50[1]); + func_80282454(pos, lookat, &sp5C, &sp50[0], &sp50[1]); sp50[arg0] += (((f32) arg1->unk48[arg0]) * sins(arg1->unk4E[arg0])); if ((sp50[0] < 0x3800) && (sp50[0] >= -0x37FF)) { - func_80282504(pos, rot, sp5C, sp50[0], sp50[1]); + func_80282504(pos, lookat, sp5C, sp50[0], sp50[1]); } func_80282F00(&arg1->unk4E[arg0], arg1->unk54[arg0]); if (func_80282364(&arg1->unk48[arg0], 0, arg1->unk5A[arg0]) == 0) { arg1->unk4E[arg0] = 0; } } - camera->lookAt[0] = rot[0]; - camera->lookAt[1] = rot[1]; - camera->lookAt[2] = rot[2]; + camera->lookAt[0] = lookat[0]; + camera->lookAt[1] = lookat[1]; + camera->lookAt[2] = lookat[2]; } } -void func_802830B4(struct struct_D_802876D0 *arg0, s16 arg1, s16 arg2, s16 arg3) { +void func_802830B4(struct CinematicCamera *arg0, s16 arg1, s16 arg2, s16 arg3) { if (arg0->unk60 < arg1) { arg0->unk60 = arg1; arg0->unk6C = arg2; @@ -574,7 +445,7 @@ void func_802830B4(struct struct_D_802876D0 *arg0, s16 arg1, s16 arg2, s16 arg3) } } -void func_80283100(struct struct_D_802876D0 *arg0, f32 *arg1) { +void func_80283100(struct CinematicCamera *arg0, f32 *arg1) { if (arg0->unk60 != 0) { arg0->unk6E = (coss((u16) arg0->unk64) * arg0->unk60) / 256; arg0->unk64 += arg0->unk68; @@ -597,7 +468,7 @@ void func_80283240(s16 arg0) { * Call the event while `start` <= gCutsceneTimer <= `end` * If `end` is -1, call for the rest of the shot. */ -s32 cutscene_event(CameraEvent event, Camera *camera, s16 start, s16 end) { +s32 cutscene_event(CameraEvent event, struct CinematicCamera *camera, s16 start, s16 end) { if (gCutsceneShotTimer >= start) { if ((end == -1) || (end >= gCutsceneShotTimer)) { event(camera); @@ -620,7 +491,7 @@ extern s8 D_802874F5; extern s32 D_802876D8; // todo: Does this match as a return of s8? -s32 func_8028336C(UNUSED struct struct_D_802876D0 *arg0, UNUSED Camera *camera) { +s32 func_8028336C(UNUSED struct CinematicCamera *arg0, UNUSED Camera *camera) { u8 sp20[] = { 2, 3, 4, 5, 5, 5, 5, 5 }; if (D_802876D8 != 0) { @@ -649,42 +520,29 @@ s32 func_80283428(void) { return 0; } -// Matches with static. Seems to not be correct though -#ifdef NON_MATCHING -// todo: D_802876E0???? CinematicCamera struct -void func_80283430(void) -{ - - //static struct struct_80283431 D_80287750[10]; - //static struct struct_80283430 D_80287818[32]; - //static struct struct_80283430 D_80287998[32]; - - //extern f32 sCutsceneSplineSegmentProgress; - - //extern s16 sCutsceneSplineSegment; - //extern s16 D_80287B1E; - //extern s8 D_80287B20; +void func_80283430(void) { s32 i; + struct CinematicCamera *new_var = &D_802876E0; D_802876D8 = 0; - D_802876E0[28] = 0; + new_var->cutscene = 0; D_802856C4 = (s32) D_800DC5E4; - vec3f_clear(&D_802876E0[12]); - vec3f_set_dupe(&D_802876E0, 0.0f, 0.0f, 500.0f); - vec3f_clear(&D_80287700[4]); - vec3f_set_dupe(&D_80287700[1], 0.0f, 0.0f, 500.0f); - vec3f_set_dupe(&D_80287700[7], 0.0f, 1.0f, 0.0f); - D_802876F8 = 0.0f; - vec3s_clear(&D_80287728[0]); - vec3s_clear(&D_80287728[1]); - vec3s_clear(&D_80287728[2]); - vec3s_clear(&D_80287728[3]); - D_80287740.unk0 = 0; - D_80287740.unk4 = 0.0f; - D_80287748.unk0 = 0.0f; - D_80287748.unk4 = 0; - D_80287748.unk6 = 0; - D_80287700[0] = D_80150130[0]; + vec3f_clear(new_var->lookAt); + vec3f_set_dupe(new_var->pos, 0.0f, 0.0f, 500.0f); + vec3f_clear(new_var->unk30); + vec3f_set_dupe(new_var->unk24, 0.0f, 0.0f, 500.0f); + vec3f_set_dupe(new_var->unk3C, 0.0f, 1.0f, 0.0f); + new_var->unk18 = 0.0f; + vec3s_clear(new_var->unk48); + vec3s_clear(new_var->unk4E); + vec3s_clear(new_var->unk54); + vec3s_clear(new_var->unk5A); + new_var->unk60 = 0; + new_var->unk64 = 0.0f; + new_var->unk68 = 0.0f; + new_var->unk6C = 0; + new_var->unk6E = 0; + new_var->unk20 = D_80150130[0]; sCutsceneShot = 0; gCutsceneShotTimer = 0; D_802876D4 = 0; @@ -700,179 +558,139 @@ void func_80283430(void) vec3f_clear(D_80287750[i].unk0); vec3s_clear(D_80287750[i].unkC); } - D_802856C0 = 0.0f; - if (gGamestate == 5) - { + if (gGamestate == 5) { D_802856B0 = 120.0f; D_802856B4 = 12.0f; D_802856B8 = 120.0f; } else { - D_802856B0 = 98.0f; - D_802856B4 = 12.0f; - D_802856B8 = 52.0f; + D_802856B0 = 98.0f; + D_802856B4 = 12.0f; + D_802856B8 = 52.0f; } } -#else -GLOBAL_ASM("asm/non_matchings/ceremony_and_credits/func_80283430.s") -#endif -#ifdef NON_MATCHING -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -//void func_80282F44(?, s32 *, Camera *); /* extern */ -//void func_80283100(s32 *, f32 *); /* extern */ -//s32 func_8028336C(s32 *, Camera *); /* extern */ -//void play_cutscene(s32 *); /* extern */ -//extern Vec3f D_802876EC; -//extern f32 D_802876F8; -//extern f32 D_80287704; -//extern f32 D_80287710; -//extern f32 D_8028771C; - -void play_cutscene(CinematicCamera *camera); - -// Camera init? or scene init? scene_entry_point? s32 func_80283648(Camera *camera) { - s16 sp6E; - s16 sp6C; - f32 var_f0; - f32 sp64; - Vec3f sp58; - Vec3f sp4C; - Vec3f sp40; - u8 temp; + s16 sp6E; + s16 sp6C; + f32 var_f2; + f32 sp64; + Vec3f sp58; + Vec3f sp4C; + Vec3f sp40; + struct CinematicCamera *new_var = &D_802876E0; - //f32 D_802876F8 = 0; - //u8 D_802876FC; - - func_80283428(); - - vec3f_copy_dupe(&sp58, &camera->pos); - vec3f_copy_dupe(&sp4C, &camera->lookAt); - vec3f_copy_dupe(&sp40, &camera->up); - - temp = (u8)func_8028336C(&D_802876E0, camera); - D_802876FC = temp; - - if (temp != 0) - { - vec3f_copy_dupe(&D_802876E0[12], &camera->pos); - vec3f_copy_dupe(&D_802876E0, &camera->lookAt); - play_cutscene(D_802876E0); - func_80282454(&D_802876E0[12], D_802876E0, &sp64, &sp6E, &sp6C); - if (sp6E >= 0x3800) - { - sp6E = 0x3800; - } - if (sp6E < (-0x37FF)) - { - sp6E = -0x3800; - } - if ((sp6E == 0x3800) || ((sp6E == (-0x3800)))) - { - func_80282504(&D_802876E0[12], (f32 *) (&D_802876E0), sp64, sp6E, ((s32) sp6C)); - } - - var_f0 = D_802876F8; - - if (var_f0 > 65536.0f) - { - var_f0 -= 65536.0f; - } - if (var_f0 < (-65536.0f)) - { - var_f0 += 65536.0f; - } - - D_802876F8 = var_f0; - if (var_f0 < 0.0f) - { - var_f0 += 65536.0f; - } - camera->up[0] = sins(var_f0) * coss(sp6C); - camera->up[1] = coss(var_f0); - camera->up[2] = -sins(var_f0) * sins(sp6C); - vec3f_copy_dupe(camera->pos, &D_802876E0[12]); - vec3f_copy_dupe(&camera->lookAt, (f32 *) (&D_802876E0)); - - if ((gGamestate == 9) && (gIsMirrorMode != 0)) - { - camera->pos[0] = -camera->pos[0]; - camera->lookAt[0] = -camera->lookAt[0]; - } - } - func_80282F44(0, &D_802876E0, camera); - func_80282F44(1, &D_802876E0, camera); - func_80283100(&D_802876E0, D_80150130); - vec3f_copy_dupe(&D_80287700[4], &camera->pos); - vec3f_copy_dupe(&D_80287700[1], &camera->lookAt); - vec3f_copy_dupe(&D_80287700[7], &camera->up); - return D_802876D8; + func_80283428(); + vec3f_copy_dupe(sp58, camera->pos); + vec3f_copy_dupe(sp4C, camera->lookAt); + vec3f_copy_dupe(sp40, camera->up); + new_var->cutscene = func_8028336C(new_var, camera); + if (new_var->cutscene != 0) { + vec3f_copy_dupe(new_var->lookAt, camera->pos); + vec3f_copy_dupe(new_var->pos, camera->lookAt); + play_cutscene(new_var); + func_80282454(new_var->lookAt, new_var->pos, &sp64, &sp6E, &sp6C); + if (sp6E >= 0x3800) { + sp6E = 0x3800; + } + if (sp6E < -0x37FF) { + sp6E = -0x3800; + } + if ((sp6E == 0x3800) || (sp6E == -0x3800)) { + func_80282504(new_var->lookAt, new_var->pos, sp64, sp6E, sp6C); + } + if (new_var->unk18 > 65536.0f) { + new_var->unk18 -= 65536.0f; + } + if (new_var->unk18 < -65536.0f) { + new_var->unk18 += 65536.0f; + } + // Huh? + if(1) { + var_f2 = new_var->unk18; + } + if (var_f2 < 0.0f) { + var_f2 = 65536.0f + var_f2; + } + camera->up[0] = sins(var_f2) * coss(sp6C); + camera->up[1] = coss(var_f2); + camera->up[2] = -sins(var_f2) * sins(sp6C); + vec3f_copy_dupe(camera->pos, new_var->lookAt); + vec3f_copy_dupe(camera->lookAt, new_var->pos); + if ((gGamestate == 9) && (gIsMirrorMode != 0)) { + camera->pos[0] = -camera->pos[0]; + camera->lookAt[0] = -camera->lookAt[0]; + } + } + func_80282F44(0, new_var, camera); + func_80282F44(1, new_var, camera); + func_80283100(new_var, D_80150130); + vec3f_copy_dupe(new_var->unk30, camera->pos); + vec3f_copy_dupe(new_var->unk24, camera->lookAt); + vec3f_copy_dupe(new_var->unk3C, camera->up); + return D_802876D8; } -#else -GLOBAL_ASM("asm/non_matchings/ceremony_and_credits/func_80283648.s") -#endif -void func_80283968(Camera *camera) { +void func_80283968(struct CinematicCamera *camera) { func_8028100C(-0xC6C, 0xD2, -0x1EF); } -void func_80283994(CinematicCamera *camera) { +void func_80283994(struct CinematicCamera *camera) { func_80280FFC(); } -void func_802839B4(Camera *camera) { +void func_802839B4(struct CinematicCamera *camera) { D_802856B8 = 52.0f; } -void func_802839CC(Camera *camera) { +void func_802839CC(struct CinematicCamera *camera) { D_802856B8 = 0.0f; } -void func_802839E0(Camera *camera) { +void func_802839E0(struct CinematicCamera *camera) { func_80092C80(); } /** * Played at beginning of credits. */ -void play_sound_welcome(Camera *camera) { +void play_sound_welcome(struct CinematicCamera *camera) { if (D_800DC5E4 == 0) { play_sound2(SOUND_INTRO_WELCOME); } } -void func_80283A34(CinematicCamera *camera) { +void func_80283A34(struct CinematicCamera *camera) { func_800CA0CC(); } /** * Played after receiving trophy. */ -void play_sound_congratulation(Camera *camera) { +void play_sound_congratulation(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_CONGRATULATION); } /** * Played in ceremony opening with ballons. */ -void play_sound_balloon_pop(CinematicCamera *camera) { +void play_sound_balloon_pop(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_BALLOON_POP); } -void play_sound_fish(Camera *camera) { +void play_sound_fish(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_FISH); } -void play_sound_fish_2(Camera *camera) { +void play_sound_fish_2(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_FISH_2); } -void play_sound_shoot_trophy(Camera *camera) { +void play_sound_shoot_trophy(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_SHOOT_TROPHY); } -void play_sound_podium(Camera *camera) { +void play_sound_podium(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_PODIUM); } @@ -880,50 +698,50 @@ void play_sound_podium(Camera *camera) { * Played in background nearly the entire ceremony * Begins again or plays louder once the trophy appears. */ -void play_sound_trophy(Camera *camera) { +void play_sound_trophy(struct CinematicCamera *camera) { play_sound2(SOUND_CEREMONY_TROPHY); } -void func_80283B6C(Camera *camera) { +void func_80283B6C(struct CinematicCamera *camera) { func_800CA0B8(); func_800C9060(0, SOUND_ACTION_EXPLOSION); func_800CA0A0(); } -void func_80283BA4(Camera *camera) { +void func_80283BA4(struct CinematicCamera *camera) { func_800CA0B8(); func_800C90F4(0, (gPlayerFour->characterId * 0x10) + 0x29008004); func_800CA0A0(); } -void func_80283BF0(CinematicCamera *camera) { +void func_80283BF0(struct CinematicCamera *camera) { func_800C8EF8(0x1A); } // -void func_80283C14(Camera *camera) { +void func_80283C14(struct CinematicCamera *camera) { func_800C8EF8(0x1B); } -void func_80283C38(Camera *camera) { +void func_80283C38(struct CinematicCamera *camera) { func_800CB134(); } -void func_80283C58(CinematicCamera *camera) { +void func_80283C58(struct CinematicCamera *camera) { func_800CB14C(); } -void func_80283C78(s32 arg0) { +void func_80283C78(struct CinematicCamera *arg0) { if (D_800DC5E4 == 0) { func_800C8EF8(0x1C); } } -void func_80283CA8(CinematicCamera *camera) { +void func_80283CA8(struct CinematicCamera *camera) { func_800CA008(0, 3); } -void func_80283CD0(s32 arg0) { +void func_80283CD0(struct CinematicCamera *camera) { if (D_800DC5E4 == 0) { func_800CA008(0, 2); } @@ -933,7 +751,7 @@ void func_80283CD0(s32 arg0) { * End of credits farewell. * "Hey, you're very good. See you next time!" */ -void play_sound_farewell(s32 arg0) { +void play_sound_farewell(struct CinematicCamera *arg0) { play_sound2(SOUND_CREDITS_FAREWELL); } @@ -1053,13 +871,7 @@ struct struct_80282C40 D_80285940[] = { { 0xFF, 0x00, 0x00, 0x1E, 0x00, 0x00, { 0xF1E0, 0x000C, 0xFE71} }, }; -struct Cutscene { - /* 0x0 */ void (*shot)(Camera*); - /* 0x4 */ s16 duration; - /* 0x6 */ //s16 pad; -}; /* size = 0x8 */ -extern struct Cutscene D_80285D10[]; -void func_80283D2C(CinematicCamera *camera) { +void func_80283D2C(struct CinematicCamera *camera) { D_802856B8 = 120.0f; cutscene_event(&func_80283CA8, camera, 0, 0); cutscene_event(&func_80283A34, camera, 1, 1); @@ -1076,43 +888,43 @@ void func_80283D2C(CinematicCamera *camera) { func_80282D90(camera, &D_802856DC, &D_80285718, 0); } -void func_80283EA0(Camera *camera) { +void func_80283EA0(struct CinematicCamera *camera) { func_80282D90(camera, &D_80285754, &D_80285784, 0); } -void func_80283ED0(Camera *camera) { +void func_80283ED0(struct CinematicCamera *camera) { vec3f_copy_dupe(camera->pos, gPlayerTwo->pos); } -void func_80283EF8(Camera *camera) { +void func_80283EF8(struct CinematicCamera *camera) { f32_lerp(&camera->pos[0], gPlayerTwo->pos[0], 0.12f); f32_lerp(&camera->pos[1], gPlayerTwo->pos[1], 0.12f); f32_lerp(&camera->pos[2], gPlayerTwo->pos[2], 0.12f); } -void func_80283F6C(Camera *camera) { +void func_80283F6C(struct CinematicCamera *camera) { cutscene_event(&func_80283ED0, camera, 0, 0); cutscene_event(&func_80283EF8, camera, 0, -1); func_80282E58(camera, &D_802857B4, 0); } -void func_80283FCC(Camera *camera) { +void func_80283FCC(struct CinematicCamera *camera) { vec3f_copy_dupe(camera->pos, gPlayerThree->pos); } -void func_80283FF4(Camera *camera) { +void func_80283FF4(struct CinematicCamera *camera) { f32_lerp(&camera->pos[0], gPlayerThree->pos[0], 0.12f); f32_lerp(&camera->pos[1], gPlayerThree->pos[1], 0.12f); f32_lerp(&camera->pos[2], gPlayerThree->pos[2], 0.12f); } -void func_80284068(Camera *camera) { +void func_80284068(struct CinematicCamera *camera) { cutscene_event(&func_80283FCC, camera, 0, 0); cutscene_event(&func_80283FF4, camera, 0, -1); func_80282E58(camera, &D_802857CC, 0); } -void func_802840C8(Camera *camera) { +void func_802840C8(struct CinematicCamera *camera) { cutscene_event(&func_80283C14, camera, 5, 5); switch(D_802876D8) { @@ -1128,41 +940,41 @@ void func_802840C8(Camera *camera) { } } -void func_80284154(Camera *camera) { +void func_80284154(struct CinematicCamera *camera) { func_80282D90(camera, &D_80285910, &D_80285928, 0); } extern struct_80165C18_entry D_80165C20[]; extern s32 D_80183EAC; -void func_80284184(Camera *camera) +void func_80284184(struct CinematicCamera *camera) { f32 trophy; - trophy = ((D_80165C20[D_80183EAC].unk_000 - camera->lookAt[1]) * 0.899999976f) + camera->lookAt[1]; + trophy = ((D_80165C20[D_80183EAC].unk_000 - camera->lookAt[1]) * 0.9f) + camera->lookAt[1]; f32_lerp(&camera->pos[1], trophy, 0.5); } -void func_802841E8(Camera *camera) { +void func_802841E8(struct CinematicCamera *camera) { func_80282E58(camera, &D_80285940, 0); vec3f_set_dupe(camera->pos, -3202.0f, 90.0f, -478.0f); } -void func_8028422C(Camera *camera) { +void func_8028422C(struct CinematicCamera *camera) { cutscene_event(&play_sound_shoot_trophy, camera, 6, 6); cutscene_event(&play_sound_trophy, camera, 30, 30); cutscene_event(&func_802841E8, camera, 0, 0); cutscene_event(&func_80284184, camera, 6, -1); } -void func_802842A8(Camera *camera) { +void func_802842A8(struct CinematicCamera *camera) { func_80282D90(camera, &D_802858B0, &D_802858C8, 0); } -void func_802842D8(Camera *camera) { +void func_802842D8(struct CinematicCamera *camera) { func_80282D90(camera, &D_802857F0, &D_80285850, 0); } -void func_80284308(Camera *camera) { +void func_80284308(struct CinematicCamera *camera) { Player **sp30[4] = { &gPlayerOne, &gPlayerTwo, @@ -1300,8 +1112,6 @@ struct struct_80282C40 D_80285CE0[] = { { 0xFF, 0x00, 0x00, 0x19, 0x00, 0x00, { 0xF3E1, 0xFF47, 0x00A2} }, }; -void func_80284308(Camera *); - struct Cutscene D_80285D10[] = { { func_80283D2C, 330 }, { func_802840C8, 270 }, @@ -1314,25 +1124,25 @@ struct Cutscene D_80285D10[] = { { func_80284308, 0x7FFF }, }; -void func_80284418(Camera *camera) { +void func_80284418(struct CinematicCamera *camera) { cutscene_event(&play_sound_podium, camera, 0x52, 0x52); cutscene_event(&play_sound_podium, camera, 0x48, 0x48); cutscene_event(&play_sound_podium, camera, 0x3D, 0x3D); func_80282D90(camera, &D_80285A10, &D_80285A4C, 0); } -void func_80284494(Camera *camera) { +void func_80284494(struct CinematicCamera *camera) { cutscene_event(&play_sound_fish_2, camera, 0x1E, 0x1E); cutscene_event(&func_80283968, camera, 0, 0); func_80282D90(camera, &D_80285A88, &D_80285AB8, 0); } -void func_802844FC(Camera *camera) { +void func_802844FC(struct CinematicCamera *camera) { cutscene_event(&play_sound_fish, camera, 0x3B, 0x3B); func_80282D90(camera, &D_80285AE8, &D_80285B00, 0); } -void func_8028454C(Camera *camera) { +void func_8028454C(struct CinematicCamera *camera) { cutscene_event(&func_80283CA8, camera, 0, 0); cutscene_event(&func_80283A34, camera, 1, 1); cutscene_event(&func_80283C38, camera, 0, 0); @@ -1340,16 +1150,16 @@ void func_8028454C(Camera *camera) { func_80282D90(camera, &D_80285B18, &D_80285B54, 0); } -void func_802845EC(Camera *camera) { +void func_802845EC(struct CinematicCamera *camera) { func_80282D90(camera, &D_80285B90, &D_80285BA8, 0); } -void func_8028461C(Camera *camera) { +void func_8028461C(struct CinematicCamera *camera) { func_80283240(1); func_80283B6C(camera); } -void func_80284648(Camera *camera) { +void func_80284648(struct CinematicCamera *camera) { cutscene_event(&func_802845EC, camera, 0, 0); cutscene_event(&func_8028461C, camera, 0x110, 0x110); cutscene_event(&func_80283BA4, camera, 0x115, 0x115); @@ -1359,12 +1169,12 @@ UNUSED void func_802846AC(void) { } -void func_802846B4(Camera *camera) { +void func_802846B4(struct CinematicCamera *camera) { func_80282D90(camera, &D_80285C38, &D_80285C74, 0); } // todo: What does this even do? -void func_802846E4(Camera *camera) { +void func_802846E4(struct CinematicCamera *camera) { func_80282D90(camera, &D_80285CB0, &D_80285CE0, 0); camera->lookAt[0] += (gPlayerFour->pos[0] - -2796.0f); // <-- rodata @@ -1384,275 +1194,275 @@ struct Cutscene D_80285D58[] = { }; struct struct_80285D80 D_80285D80[] = { - { 0, 0, 0, 0, 0, 0, { 0xffc6, 0x0000, 0xfc02 }}, - { 0, 0, 0, 0, 4, 0, { 0xffb9, 0x0005, 0xff53 }}, - { 0, 0, 0, 0, 10, 0, { 0xfec3, 0x0036, 0x009e }}, - { -1, 0, 0, 0, 0, 0, { 0xfc1a, 0xffdd, 0x0298 }}, + { {0, 0, 0, 0, 0, 0}, { 0xffc6, 0x0000, 0xfc02 }}, + { {0, 0, 0, 0, 4, 0}, { 0xffb9, 0x0005, 0xff53 }}, + { {0, 0, 0, 0, 10, 0}, { 0xfec3, 0x0036, 0x009e }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfc1a, 0xffdd, 0x0298 }}, - { 0, 0, 0, 60, 0, 0, { 0xfeb1, 0xff45, 0xfd76 }}, - { 0, 0, 0, 60, 4, 0, { 0xfea7, 0xff73, 0x00da }}, - { 0, 0, 0, 60, 10, 0, { 0xfd94, 0xff9b, 0x020b }}, - { -1, 0, 0, 60, 0, 0, { 0xfa7b, 0x003c, 0x039c }}, + { {0, 0, 0, 60, 0, 0}, { 0xfeb1, 0xff45, 0xfd76 }}, + { {0, 0, 0, 60, 4, 0}, { 0xfea7, 0xff73, 0x00da }}, + { {0, 0, 0, 60, 10, 0}, { 0xfd94, 0xff9b, 0x020b }}, + { {-1, 0, 0, 60, 0, 0}, { 0xfa7b, 0x003c, 0x039c }}, - { 0, 0, 0, 0, 0, 0, { 0x04a7, 0x004f, 0x060b }}, - { 0, 0, 0, 0, 0, 0, { 0x04a7, 0x004f, 0x060b }}, - { 0, 0, 0, 0, 0, 0, { 0x048a, 0x0068, 0x059a }}, - { 0, 0, 0, 0, 0, 0, { 0x0501, 0x0070, 0x04b7 }}, - { -1, 0, 0, 0, 0, 0, { 0x0569, 0x0042, 0x0410 }}, - { 0, 0, 0, 18, 0, 0, { 0x051c, 0x00b9, 0x07e5 }}, - { 0, 0, 0, 40, 0, 0, { 0x051c, 0x00b9, 0x07e5 }}, - { 0, 0, 0, 50, 0, 0, { 0x04f6, 0x0032, 0x077f }}, - { 0, 0, 0, 50, 0, 0, { 0x040d, 0x0023, 0x0664 }}, - { -1, 0, 0, 50, 0, 0, { 0x044d, 0x000c, 0x05a8 }}, - { 0, 0, 0, 0, 0, 0, { 0x00d1, 0x0070, 0xf5ab }}, - { 0, 0, 0, 0, 0, 0, { 0x00d1, 0x0070, 0xf5ab }}, - { 0, 0, 0, 0, 0, 0, { 0x0145, 0x0043, 0xf624 }}, - { -1, 0, 0, 0, 0, 0, { 0x01bb, 0x001b, 0xf6a9 }}, - { 0, 0, 0, 20, 0, 0, { 0x01be, 0xff8b, 0xf723 }}, - { 0, 0, 0, 30, 0, 0, { 0x01be, 0xff8b, 0xf721 }}, - { 0, 0, 0, 60, 0, 0, { 0x023d, 0xff7a, 0xf7a5 }}, - { -1, 0, 0, 60, 0, 0, { 0x02bb, 0x0047, 0xf854 }}, - { 0, 0, 0, 0, 0, 0, { 0xfd1a, 0x001f, 0x0aaa }}, - { 0, 0, 0, 0, 0, 0, { 0xfd1a, 0x0016, 0x0890 }}, - { 0, 0, 0, 0, 0, 0, { 0xfd1b, 0x0017, 0x05ee }}, - { 0, 0, 0, 0, 0, 0, { 0xfd24, 0x0013, 0x0325 }}, - { 0, 0, 0, 0, 0, 0, { 0xfcab, 0x0010, 0x01af }}, - { 0, 0, 0, 0, 0, 0, { 0xfb52, 0x0013, 0x0094 }}, - { 0, 0, 0, 0, 0, 0, { 0xfa51, 0x001a, 0x0055 }}, - { -1, 0, 0, 0, 0, 0, { 0xf8f5, 0x001b, 0x0053 }}, - { 0, 0, 0, 50, 0, 0, { 0xfd1f, 0xfeb7, 0x094f }}, - { 0, 0, 0, 50, 0, 0, { 0xfd21, 0xffdf, 0x069f }}, - { 0, 0, 0, 50, 0, 0, { 0xfd35, 0x0012, 0x03fa }}, - { 0, 0, 0, 30, 0, 0, { 0xfd32, 0xffe5, 0x0133 }}, - { 0, 0, 0, 30, 0, 0, { 0xfb92, 0x000e, 0x0011 }}, - { 0, 0, 0, 30, 0, 0, { 0xf993, 0x001c, 0xffb7 }}, - { 0, 0, 0, 40, 0, 0, { 0xf866, 0x0009, 0xfffb }}, - { -1, 0, 0, 30, 0, 0, { 0xf712, 0xffe7, 0x00c8 }}, - { 0, 0, 0, 0, 0, 0, { 0x079c, 0x00de, 0xf99e }}, - { 0, 0, 0, 0, 0, 0, { 0x079c, 0x00de, 0xf99e }}, - { 0, 0, 0, 0, 0, 0, { 0x077f, 0x0099, 0xf9a6 }}, - { 0, 0, 0, 0, 0, 0, { 0x0784, 0x005b, 0xf9a2 }}, - { 0, 0, 0, 0, 0, 0, { 0x0784, 0x005b, 0xf9a2 }}, - { -1, 0, 0, 0, 0, 0, { 0x0784, 0x005b, 0xf9a2 }}, - { 0, 0, 0, 55, 0, 0, { 0x0886, 0xffaa, 0xf863 }}, - { 0, 0, 0, 55, 0, 0, { 0x0887, 0xffaa, 0xf864 }}, - { 0, 0, 0, 55, 0, 0, { 0x0960, 0x0010, 0xf9ad }}, - { 0, 0, 0, 66, 0, 0, { 0x092b, 0x009e, 0xfaa4 }}, - { 0, 0, 0, 50, 0, 0, { 0x0930, 0x00a9, 0xfa98 }}, - { 0, 0, 0, 50, 0, 0, { 0x0932, 0x00a9, 0xfa95 }}, - { -1, 0, 0, 50, 0, 0, { 0x092f, 0x00a1, 0xfa9c }}, - { 0, 0, 0, 0, 0, 0, { 0xff37, 0x002d, 0xf9ab }}, - { 0, 0, 0, 0, 0, 0, { 0x007b, 0x0035, 0xfaef }}, - { 0, 0, 0, 0, 0, 0, { 0x01a6, 0x002d, 0xfc8e }}, - { -1, 0, 0, 0, 0, 0, { 0x0228, 0x0035, 0xfdad }}, - { 0, 0, 0, 60, 0, 0, { 0xfdc7, 0xffe6, 0xfaf6 }}, - { 0, 0, 0, 60, 0, 0, { 0xfed8, 0xffee, 0xfbf4 }}, - { 0, 0, 0, 60, 0, 0, { 0xffdc, 0xffe6, 0xfd46 }}, - { -1, 0, 0, 60, 0, 0, { 0x004b, 0xffe7, 0xfe2d }}, - { 0, 0, 0, 0, 0, 0, { 0xfc11, 0xffcd, 0x0096 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc11, 0xffcd, 0x0096 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc16, 0x0096, 0x007c }}, - { 0, 0, 0, 0, 0, 0, { 0xfc1e, 0x01e9, 0x0049 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc2c, 0x0419, 0xfff4 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc4e, 0x0615, 0xffc1 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc31, 0x077f, 0xfff1 }}, - { -1, 0, 0, 0, 0, 0, { 0xfc31, 0x077f, 0xfff1 }}, - { 0, 0, 0, 50, 0, 0, { 0xfc60, 0xff8e, 0xfead }}, - { 0, 0, 0, 26, 0, 0, { 0xfc61, 0xff85, 0xfeae }}, - { 0, 0, 0, 45, 0, 0, { 0xfc64, 0x0015, 0xfe9f }}, - { 0, 0, 0, 40, 0, 0, { 0xfc66, 0x0104, 0xfe93 }}, - { 0, 0, 0, 40, 0, 0, { 0xfcf6, 0x02c5, 0xfec2 }}, - { 0, 0, 0, 33, 0, 0, { 0xfcd2, 0x0446, 0xff38 }}, - { 0, 0, 0, 30, 0, 0, { 0xfc82, 0x05b0, 0xff46 }}, - { -1, 0, 0, 37, 0, 0, { 0xfc7d, 0x05ac, 0xff4d }}, - { 0, 0, 0, 0, 235, 0, { 0xfffb, 0x0047, 0xfe2b }}, - { 0, 0, 0, 0, 225, 0, { 0xfff5, 0x0015, 0xfb8a }}, - { 0, 0, 0, 0, 245, 0, { 0x0143, 0x001f, 0xfab2 }}, - { 0, 0, 0, 0, 39, 0, { 0x0230, 0x001d, 0xfaee }}, - { 0, 0, 0, 0, 25, 0, { 0x0294, 0x0012, 0xfb89 }}, - { 0, 0, 0, 0, 228, 0, { 0x04b4, 0x001c, 0xfb7b }}, - { 0, 0, 0, 0, 226, 0, { 0x0545, 0x0011, 0xfc7c }}, - { 0, 0, 0, 0, 244, 0, { 0x04aa, 0x001b, 0xfd89 }}, - { 0, 0, 0, 0, 0, 0, { 0x02f5, 0x000c, 0xfde2 }}, - { 0, 0, 0, 0, 0, 0, { 0x00cd, 0xffd6, 0xfde5 }}, - { 0, 0, 0, 0, 13, 0, { 0xfefa, 0xffdd, 0xfdcf }}, - { 0, 0, 0, 0, 16, 0, { 0xfdd8, 0xfff9, 0xfe2b }}, - { -1, 0, 0, 0, 0, 0, { 0xfd15, 0x0006, 0xff68 }}, - { 0, 0, 0, 30, 235, 0, { 0x0002, 0xffcd, 0xfc47 }}, - { 0, 0, 0, 30, 225, 0, { 0x00f6, 0xffc1, 0xf9e6 }}, - { 0, 0, 0, 30, 245, 0, { 0x032d, 0xffbe, 0xfaad }}, - { 0, 0, 0, 20, 39, 0, { 0x02c7, 0xffff, 0xfcca }}, - { 0, 0, 0, 30, 25, 0, { 0x047b, 0xffb4, 0xfb52 }}, - { 0, 0, 0, 20, 228, 0, { 0x05eb, 0xffed, 0xfcff }}, - { 0, 0, 0, 30, 226, 0, { 0x053d, 0xffbc, 0xfe69 }}, - { 0, 0, 0, 30, 244, 0, { 0x02c8, 0xffb7, 0xfde1 }}, - { 0, 0, 0, 30, 0, 0, { 0x0104, 0xffd6, 0xfe02 }}, - { 0, 0, 0, 30, 0, 0, { 0xfedf, 0xff8c, 0xfdef }}, - { 0, 0, 0, 30, 13, 0, { 0xfd19, 0xff9e, 0xfe46 }}, - { 0, 0, 0, 30, 16, 0, { 0xfcc0, 0xffcd, 0xffc7 }}, - { -1, 0, 0, 30, 0, 0, { 0xfc30, 0x0060, 0x011a }}, - { 0, 0, 0, 0, 0, 0, { 0xf4cf, 0x0217, 0x07f0 }}, - { 0, 0, 0, 0, 0, 0, { 0xf575, 0x018b, 0x0622 }}, - { 0, 0, 0, 0, 0, 0, { 0xf5e3, 0x0123, 0x04ee }}, - { 0, 0, 0, 0, 0, 0, { 0xf6a2, 0x01a8, 0x02dc }}, - { 0, 0, 0, 0, 0, 0, { 0xf68b, 0x0262, 0x0050 }}, - { 0, 0, 0, 0, 0, 0, { 0xf7b5, 0x0189, 0xfcdb }}, - { -1, 0, 0, 0, 0, 0, { 0xf8a8, 0x012d, 0xf7e1 }}, - { 0, 0, 0, 30, 0, 0, { 0xf558, 0x00f2, 0x0673 }}, - { 0, 0, 0, 30, 0, 0, { 0xf5fe, 0x0065, 0x04a5 }}, - { 0, 0, 0, 30, 0, 0, { 0xf665, 0xffe3, 0x0385 }}, - { 0, 0, 0, 30, 0, 0, { 0xf771, 0x011d, 0x012a }}, - { 0, 0, 0, 30, 0, 0, { 0xf7f7, 0x0186, 0xff48 }}, - { 0, 0, 0, 30, 0, 0, { 0xf873, 0x0116, 0xfe9c }}, - { -1, 0, 0, 42, 0, 0, { 0xf86d, 0x00e0, 0xf9cc }}, - { 0, 0, 0, 0, 0, 0, { 0x06d4, 0x00a6, 0xfae3 }}, - { 0, 0, 0, 0, 0, 0, { 0x06d4, 0x00a6, 0xfae3 }}, - { 0, 0, 0, 0, 0, 0, { 0x06fe, 0x0066, 0xf9cf }}, - { 0, 0, 0, 0, 0, 0, { 0x04f6, 0x0046, 0xf966 }}, - { 0, 0, 0, 0, 0, 0, { 0x017c, 0x0053, 0xfa6c }}, - { 0, 0, 0, 0, 0, 0, { 0xfec9, 0x003a, 0xfc36 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc6f, 0xffde, 0xfdc0 }}, - { 0, 0, 0, 0, 0, 0, { 0xfb17, 0xffbe, 0xfec7 }}, - { -1, 0, 0, 0, 0, 0, { 0xf96a, 0x00ab, 0x011b }}, - { 0, 0, 0, 9, 0, 0, { 0x06db, 0xffd3, 0xfca8 }}, - { 0, 0, 0, 30, 0, 0, { 0x06dc, 0xffdc, 0xfcac }}, - { 0, 0, 0, 25, 0, 0, { 0x077f, 0xffbe, 0xfb94 }}, - { 0, 0, 0, 25, 0, 0, { 0x06b5, 0xffbd, 0xfa16 }}, - { 0, 0, 0, 25, 0, 0, { 0x0359, 0xffd6, 0xfa1e }}, - { 0, 0, 0, 25, 0, 0, { 0x005b, 0xffb1, 0xfb2f }}, - { 0, 0, 0, 25, 0, 0, { 0xfdee, 0xff57, 0xfc9c }}, - { 0, 0, 0, 25, 0, 0, { 0xfc95, 0xff34, 0xfda4 }}, - { -1, 0, 0, 25, 0, 0, { 0xfa96, 0xfff6, 0xffb7 }}, - { 0, 0, 0, 0, 0, 0, { 0xfaef, 0xff6e, 0xfdaa }}, - { 0, 0, 0, 0, 0, 0, { 0xfaef, 0xff6e, 0xfdaa }}, - { 0, 0, 0, 0, 0, 0, { 0xfb54, 0xff68, 0xfdbf }}, - { 0, 0, 0, 0, 0, 0, { 0xfbb5, 0xff64, 0xfde0 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc0d, 0xff64, 0xfdfa }}, - { 0, 0, 0, 0, 0, 0, { 0xfc9f, 0xff64, 0xfe2b }}, - { 0, 0, 0, 0, 0, 0, { 0xfd80, 0xff61, 0xfe99 }}, - { 0, 0, 0, 0, 0, 0, { 0xfdca, 0xff66, 0xfeab }}, - { -1, 0, 0, 0, 0, 0, { 0xfe06, 0xff6d, 0xfebf }}, - { 0, 0, 0, 30, 0, 0, { 0xf911, 0xff0f, 0xfe1a }}, - { 0, 0, 0, 30, 0, 0, { 0xf911, 0xff0f, 0xfe1a }}, - { 0, 0, 0, 35, 0, 0, { 0xf9dd, 0xfe99, 0xfec0 }}, - { 0, 0, 0, 35, 0, 0, { 0xfb37, 0xfe86, 0xff8e }}, - { 0, 0, 0, 35, 0, 0, { 0xfcc7, 0xfe7a, 0xff8b }}, - { 0, 0, 0, 35, 0, 0, { 0xfe21, 0xff1d, 0xff62 }}, - { 0, 0, 0, 38, 0, 0, { 0xff5c, 0xff8e, 0xff2e }}, - { 0, 0, 0, 30, 0, 0, { 0xffa1, 0xff56, 0xff54 }}, - { -1, 0, 0, 30, 0, 0, { 0xffdf, 0xff4e, 0xff5d }}, - { 0, 0, 0, 0, 0, 0, { 0x0326, 0x0016, 0xfbe5 }}, - { 0, 0, 0, 0, 0, 0, { 0x0326, 0x0016, 0xfbe5 }}, - { 0, 0, 0, 0, 0, 0, { 0x0279, 0x001c, 0xfbdc }}, - { 0, 0, 0, 0, 0, 0, { 0x00e2, 0x0014, 0xfc78 }}, - { 0, 0, 0, 0, 0, 0, { 0x0010, 0x0015, 0xfdcf }}, - { 0, 0, 0, 0, 0, 0, { 0xffa5, 0x006f, 0xfead }}, - { -1, 0, 0, 0, 0, 0, { 0xffb3, 0x008e, 0xff63 }}, - { 0, 0, 0, 30, 0, 0, { 0x0381, 0xffa1, 0xfdc3 }}, - { 0, 0, 0, 30, 0, 0, { 0x0381, 0xffa1, 0xfdc3 }}, - { 0, 0, 0, 35, 0, 0, { 0x0237, 0xff21, 0xfd88 }}, - { 0, 0, 0, 35, 0, 0, { 0x005d, 0xff63, 0xfe39 }}, - { 0, 0, 0, 35, 0, 0, { 0xfef8, 0x007d, 0xff60 }}, - { 0, 0, 0, 30, 0, 0, { 0xfe07, 0x00c8, 0xffb7 }}, - { -1, 0, 0, 30, 0, 0, { 0xfdc3, 0x00d1, 0xff6a }}, - { 0, 0, 0, 0, 0, 0, { 0xfff9, 0x004d, 0xfd4b }}, - { 0, 0, 0, 0, 0, 0, { 0xff2a, 0x009e, 0xfcf8 }}, - { 0, 0, 0, 0, 0, 0, { 0xfe1b, 0x0174, 0xfd03 }}, - { 0, 0, 0, 0, 0, 0, { 0xfc2c, 0x0163, 0xfbea }}, - { 0, 0, 0, 0, 0, 0, { 0xfbc2, 0x003c, 0xfaa3 }}, - { 0, 0, 0, 0, 0, 0, { 0xfbf4, 0x0012, 0xf87d }}, - { -1, 0, 0, 0, 0, 0, { 0xfbf4, 0x0012, 0xf87d }}, - { 0, 0, 0, 37, 0, 0, { 0xfedb, 0xff54, 0xfc06 }}, - { 0, 0, 0, 37, 0, 0, { 0xfeb0, 0xff91, 0xfb66 }}, - { 0, 0, 0, 37, 0, 0, { 0xfe79, 0x0070, 0xfb62 }}, - { 0, 0, 0, 37, 0, 0, { 0xfde5, 0x00ac, 0xfb55 }}, - { 0, 0, 0, 37, 0, 0, { 0xfd9b, 0x0079, 0xfb3c }}, - { 0, 0, 0, 48, 0, 0, { 0xfd0d, 0x0037, 0xfa1a }}, - { -1, 0, 0, 30, 0, 0, { 0xfd20, 0x001d, 0xfa0d }}, - { 0, 0, 0, 0, 0, 0, { 0x0032, 0x0017, 0xfb25 }}, - { 0, 0, 0, 0, 0, 0, { 0x0032, 0x0011, 0xf7f3 }}, - { 0, 0, 0, 0, 0, 0, { 0xffef, 0x000a, 0xf6b4 }}, - { 0, 0, 0, 0, 0, 0, { 0xff34, 0x0008, 0xf54e }}, - { 0, 0, 0, 0, 0, 0, { 0xfe63, 0x0009, 0xf494 }}, - { 0, 0, 0, 0, 0, 0, { 0xfdd3, 0x0005, 0xf436 }}, - { 0, 0, 0, 0, 0, 0, { 0xfcc0, 0x0005, 0xf3ec }}, - { 0, 0, 0, 0, 0, 0, { 0xfba1, 0x0004, 0xf3e5 }}, - { 0, 0, 0, 0, 0, 0, { 0xfa43, 0x0002, 0xf3d4 }}, - { -1, 0, 0, 0, 0, 0, { 0xf96d, 0x0003, 0xf3f1 }}, - { 0, 0, 0, 30, 0, 0, { 0x0032, 0xff86, 0xf947 }}, - { 0, 0, 0, 30, 0, 0, { 0x0042, 0xff4f, 0xf627 }}, - { 0, 0, 0, 30, 0, 0, { 0x0181, 0xff13, 0xf612 }}, - { 0, 0, 0, 30, 0, 0, { 0x00eb, 0xff7e, 0xf60e }}, - { 0, 0, 0, 30, 0, 0, { 0x002b, 0xffc5, 0xf554 }}, - { 0, 0, 0, 30, 0, 0, { 0xff90, 0xffb2, 0xf508 }}, - { 0, 0, 0, 30, 0, 0, { 0xfeb4, 0x0011, 0xf3e0 }}, - { 0, 0, 0, 30, 0, 0, { 0xfd8c, 0x001a, 0xf386 }}, - { 0, 0, 0, 30, 0, 0, { 0xfc2b, 0x0067, 0xf3ae }}, - { -1, 0, 0, 30, 0, 0, { 0xfb56, 0x0051, 0xf3ac }}, - { 0, 0, 0, 0, 0, 0, { 0xf49d, 0x001e, 0x003a }}, - { 0, 0, 0, 0, 0, 0, { 0xf4c9, 0x003c, 0x0039 }}, - { 0, 0, 0, 0, 0, 0, { 0xf4f7, 0x005a, 0x0038 }}, - { 0, 0, 0, 0, 0, 0, { 0xf4f7, 0x005a, 0x0038 }}, - { 0, 0, 0, 0, 0, 0, { 0xf535, 0x0057, 0x0036 }}, - { 0, 0, 0, 0, 0, 0, { 0xf6ae, 0x0036, 0x001d }}, - { 0, 0, 0, 0, 0, 0, { 0xf6ce, 0x0031, 0x001c }}, - { -1, 0, 0, 0, 0, 0, { 0xf6ce, 0x0031, 0x001c }}, - { 0, 0, 0, 80, 0, 0, { 0xf669, 0xff5a, 0x004d }}, - { 0, 0, 0, 80, 0, 0, { 0xf69d, 0xff8d, 0x004b }}, - { 0, 0, 0, 80, 0, 0, { 0xf6d6, 0xffc8, 0x003b }}, - { 0, 0, 0, 5, 0, 0, { 0xf6d9, 0xffd3, 0x0040 }}, - { 0, 0, 0, 3, 0, 0, { 0xf717, 0xffd0, 0x0045 }}, - { 0, 0, 0, 4, 0, 0, { 0xf894, 0xffc5, 0x000f }}, - { 0, 0, 0, 4, 0, 0, { 0xf8b8, 0xffcc, 0x001a }}, - { -1, 0, 0, 4, 0, 0, { 0xf8b8, 0xffcc, 0x0014 }}, - { 0, 0, 0, 0, 0, 0, { 0xff61, 0x03ce, 0xf2bf }}, - { 0, 0, 0, 0, 0, 0, { 0xfd33, 0x038d, 0xf40f }}, - { 0, 0, 0, 0, 0, 0, { 0xfc59, 0x0366, 0xf4df }}, - { 0, 0, 0, 0, 0, 0, { 0xfbe7, 0x0321, 0xf5d5 }}, - { 0, 0, 0, 0, 0, 0, { 0xfb9a, 0x02a9, 0xf704 }}, - { 0, 0, 0, 0, 0, 0, { 0xfb58, 0x0220, 0xf8b1 }}, - { 0, 0, 0, 0, 0, 0, { 0xfabf, 0x01f3, 0xfa36 }}, - { 0, 0, 0, 0, 0, 0, { 0xf9f2, 0x01ef, 0xfb8d }}, - { 0, 0, 0, 0, 0, 0, { 0xf943, 0x01fe, 0xfd31 }}, - { 0, 0, 0, 0, 0, 0, { 0xf950, 0x0200, 0xfea3 }}, - { 0, 0, 0, 0, 0, 0, { 0xf9cd, 0x0214, 0xff83 }}, - { 0, 0, 0, 0, 0, 0, { 0xface, 0x022d, 0x000d }}, - { -1, 0, 0, 0, 0, 0, { 0xfbd8, 0x0231, 0x000d }}, - { 0, 0, 0, 20, 0, 0, { 0xfea7, 0x033c, 0xf478 }}, - { 0, 0, 0, 20, 0, 0, { 0xfcb7, 0x0306, 0xf5e1 }}, - { 0, 0, 0, 20, 0, 0, { 0xfbf7, 0x02d4, 0xf6b4 }}, - { 0, 0, 0, 20, 0, 0, { 0xfb96, 0x0278, 0xf7a5 }}, - { 0, 0, 0, 20, 0, 0, { 0xfb66, 0x0217, 0xf8e0 }}, - { 0, 0, 0, 20, 0, 0, { 0xfb26, 0x01c5, 0xfa9b }}, - { 0, 0, 0, 20, 0, 0, { 0xfadd, 0x01eb, 0xfc29 }}, - { 0, 0, 0, 28, 0, 0, { 0xfa89, 0x0208, 0xfd69 }}, - { 0, 0, 0, 29, 0, 0, { 0xfaf3, 0x020a, 0xfe2d }}, - { 0, 0, 0, 28, 0, 0, { 0xfb2b, 0x0226, 0xfe09 }}, - { 0, 0, 0, 28, 0, 0, { 0xfb39, 0x0216, 0xfe2c }}, - { 0, 0, 0, 28, 0, 0, { 0xfb08, 0x0202, 0xfe1f }}, - { -1, 0, 0, 28, 0, 0, { 0xfb31, 0x023f, 0xfe38 }}, - { 0, 0, 0, 0, 0, 0, { 0xfe5d, 0x01f9, 0xf67a }}, - { 0, 0, 0, 0, 0, 0, { 0xfd7a, 0x0136, 0xf7ab }}, - { 0, 0, 0, 0, 0, 0, { 0xfb8b, 0x0066, 0xfa4f }}, - { 0, 0, 0, 0, 0, 0, { 0xf9c4, 0x0032, 0xfc9f }}, - { 0, 0, 0, 0, 0, 0, { 0xf7b6, 0x0022, 0xfdda }}, - { 0, 0, 0, 0, 0, 0, { 0xf771, 0x0054, 0xfdec }}, - { -1, 0, 0, 0, 0, 0, { 0xf7df, 0x00a6, 0xfed5 }}, - { 0, 0, 0, 30, 0, 0, { 0xfd5a, 0x0107, 0xf7db }}, - { 0, 0, 0, 30, 0, 0, { 0xfc6f, 0x0063, 0xf918 }}, - { 0, 0, 0, 30, 0, 0, { 0xfa65, 0x002e, 0xfbe0 }}, - { 0, 0, 0, 30, 0, 0, { 0xf843, 0x0010, 0xfddc }}, - { 0, 0, 0, 30, 0, 0, { 0xf5d2, 0x000c, 0xfe55 }}, - { 0, 0, 0, 30, 0, 0, { 0xf57e, 0x006c, 0xfde9 }}, - { -1, 0, 0, 30, 0, 0, { 0xf5f2, 0x00a8, 0xfe82 }}, - { 0, 0, 0, 0, 0, 0, { 0xf8e5, 0x0181, 0x054b }}, - { 0, 0, 0, 0, 0, 0, { 0xfae4, 0x00b9, 0x0556 }}, - { 0, 0, 0, 0, 0, 0, { 0xfccc, 0x0010, 0x0556 }}, - { -1, 0, 0, 0, 0, 0, { 0xfd42, 0x0047, 0x056d }}, - { 0, 0, 0, 70, 0, 0, { 0xf88a, 0x00e8, 0x0378 }}, - { 0, 0, 0, 70, 0, 0, { 0xfc3e, 0x001d, 0x0410 }}, - { 0, 0, 0, 70, 0, 0, { 0xfea3, 0x0041, 0x05f7 }}, - { -1, 0, 0, 70, 0, 0, { 0xfeda, 0x0109, 0x0642 }}, + { {0, 0, 0, 0, 0, 0}, { 0x04a7, 0x004f, 0x060b }}, + { {0, 0, 0, 0, 0, 0}, { 0x04a7, 0x004f, 0x060b }}, + { {0, 0, 0, 0, 0, 0}, { 0x048a, 0x0068, 0x059a }}, + { {0, 0, 0, 0, 0, 0}, { 0x0501, 0x0070, 0x04b7 }}, + { {-1, 0, 0, 0, 0, 0}, { 0x0569, 0x0042, 0x0410 }}, + { {0, 0, 0, 18, 0, 0}, { 0x051c, 0x00b9, 0x07e5 }}, + { {0, 0, 0, 40, 0, 0}, { 0x051c, 0x00b9, 0x07e5 }}, + { {0, 0, 0, 50, 0, 0}, { 0x04f6, 0x0032, 0x077f }}, + { {0, 0, 0, 50, 0, 0}, { 0x040d, 0x0023, 0x0664 }}, + { {-1, 0, 0, 50, 0, 0}, { 0x044d, 0x000c, 0x05a8 }}, + { {0, 0, 0, 0, 0, 0}, { 0x00d1, 0x0070, 0xf5ab }}, + { {0, 0, 0, 0, 0, 0}, { 0x00d1, 0x0070, 0xf5ab }}, + { {0, 0, 0, 0, 0, 0}, { 0x0145, 0x0043, 0xf624 }}, + { {-1, 0, 0, 0, 0, 0}, { 0x01bb, 0x001b, 0xf6a9 }}, + { {0, 0, 0, 20, 0, 0}, { 0x01be, 0xff8b, 0xf723 }}, + { {0, 0, 0, 30, 0, 0}, { 0x01be, 0xff8b, 0xf721 }}, + { {0, 0, 0, 60, 0, 0}, { 0x023d, 0xff7a, 0xf7a5 }}, + { {-1, 0, 0, 60, 0, 0}, { 0x02bb, 0x0047, 0xf854 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd1a, 0x001f, 0x0aaa }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd1a, 0x0016, 0x0890 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd1b, 0x0017, 0x05ee }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd24, 0x0013, 0x0325 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfcab, 0x0010, 0x01af }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb52, 0x0013, 0x0094 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfa51, 0x001a, 0x0055 }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf8f5, 0x001b, 0x0053 }}, + { {0, 0, 0, 50, 0, 0}, { 0xfd1f, 0xfeb7, 0x094f }}, + { {0, 0, 0, 50, 0, 0}, { 0xfd21, 0xffdf, 0x069f }}, + { {0, 0, 0, 50, 0, 0}, { 0xfd35, 0x0012, 0x03fa }}, + { {0, 0, 0, 30, 0, 0}, { 0xfd32, 0xffe5, 0x0133 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfb92, 0x000e, 0x0011 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf993, 0x001c, 0xffb7 }}, + { {0, 0, 0, 40, 0, 0}, { 0xf866, 0x0009, 0xfffb }}, + { {-1, 0, 0, 30, 0, 0}, { 0xf712, 0xffe7, 0x00c8 }}, + { {0, 0, 0, 0, 0, 0}, { 0x079c, 0x00de, 0xf99e }}, + { {0, 0, 0, 0, 0, 0}, { 0x079c, 0x00de, 0xf99e }}, + { {0, 0, 0, 0, 0, 0}, { 0x077f, 0x0099, 0xf9a6 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0784, 0x005b, 0xf9a2 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0784, 0x005b, 0xf9a2 }}, + { {-1, 0, 0, 0, 0, 0}, { 0x0784, 0x005b, 0xf9a2 }}, + { {0, 0, 0, 55, 0, 0}, { 0x0886, 0xffaa, 0xf863 }}, + { {0, 0, 0, 55, 0, 0}, { 0x0887, 0xffaa, 0xf864 }}, + { {0, 0, 0, 55, 0, 0}, { 0x0960, 0x0010, 0xf9ad }}, + { {0, 0, 0, 66, 0, 0}, { 0x092b, 0x009e, 0xfaa4 }}, + { {0, 0, 0, 50, 0, 0}, { 0x0930, 0x00a9, 0xfa98 }}, + { {0, 0, 0, 50, 0, 0}, { 0x0932, 0x00a9, 0xfa95 }}, + { {-1, 0, 0, 50, 0, 0}, { 0x092f, 0x00a1, 0xfa9c }}, + { {0, 0, 0, 0, 0, 0}, { 0xff37, 0x002d, 0xf9ab }}, + { {0, 0, 0, 0, 0, 0}, { 0x007b, 0x0035, 0xfaef }}, + { {0, 0, 0, 0, 0, 0}, { 0x01a6, 0x002d, 0xfc8e }}, + { {-1, 0, 0, 0, 0, 0}, { 0x0228, 0x0035, 0xfdad }}, + { {0, 0, 0, 60, 0, 0}, { 0xfdc7, 0xffe6, 0xfaf6 }}, + { {0, 0, 0, 60, 0, 0}, { 0xfed8, 0xffee, 0xfbf4 }}, + { {0, 0, 0, 60, 0, 0}, { 0xffdc, 0xffe6, 0xfd46 }}, + { {-1, 0, 0, 60, 0, 0}, { 0x004b, 0xffe7, 0xfe2d }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc11, 0xffcd, 0x0096 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc11, 0xffcd, 0x0096 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc16, 0x0096, 0x007c }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc1e, 0x01e9, 0x0049 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc2c, 0x0419, 0xfff4 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc4e, 0x0615, 0xffc1 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc31, 0x077f, 0xfff1 }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfc31, 0x077f, 0xfff1 }}, + { {0, 0, 0, 50, 0, 0}, { 0xfc60, 0xff8e, 0xfead }}, + { {0, 0, 0, 26, 0, 0}, { 0xfc61, 0xff85, 0xfeae }}, + { {0, 0, 0, 45, 0, 0}, { 0xfc64, 0x0015, 0xfe9f }}, + { {0, 0, 0, 40, 0, 0}, { 0xfc66, 0x0104, 0xfe93 }}, + { {0, 0, 0, 40, 0, 0}, { 0xfcf6, 0x02c5, 0xfec2 }}, + { {0, 0, 0, 33, 0, 0}, { 0xfcd2, 0x0446, 0xff38 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfc82, 0x05b0, 0xff46 }}, + { {-1, 0, 0, 37, 0, 0}, { 0xfc7d, 0x05ac, 0xff4d }}, + { {0, 0, 0, 0, 235, 0}, { 0xfffb, 0x0047, 0xfe2b }}, + { {0, 0, 0, 0, 225, 0}, { 0xfff5, 0x0015, 0xfb8a }}, + { {0, 0, 0, 0, 245, 0}, { 0x0143, 0x001f, 0xfab2 }}, + { {0, 0, 0, 0, 39, 0}, { 0x0230, 0x001d, 0xfaee }}, + { {0, 0, 0, 0, 25, 0}, { 0x0294, 0x0012, 0xfb89 }}, + { {0, 0, 0, 0, 228, 0}, { 0x04b4, 0x001c, 0xfb7b }}, + { {0, 0, 0, 0, 226, 0}, { 0x0545, 0x0011, 0xfc7c }}, + { {0, 0, 0, 0, 244, 0}, { 0x04aa, 0x001b, 0xfd89 }}, + { {0, 0, 0, 0, 0, 0}, { 0x02f5, 0x000c, 0xfde2 }}, + { {0, 0, 0, 0, 0, 0}, { 0x00cd, 0xffd6, 0xfde5 }}, + { {0, 0, 0, 0, 13, 0}, { 0xfefa, 0xffdd, 0xfdcf }}, + { {0, 0, 0, 0, 16, 0}, { 0xfdd8, 0xfff9, 0xfe2b }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfd15, 0x0006, 0xff68 }}, + { {0, 0, 0, 30, 235, 0}, { 0x0002, 0xffcd, 0xfc47 }}, + { {0, 0, 0, 30, 225, 0}, { 0x00f6, 0xffc1, 0xf9e6 }}, + { {0, 0, 0, 30, 245, 0}, { 0x032d, 0xffbe, 0xfaad }}, + { {0, 0, 0, 20, 39, 0}, { 0x02c7, 0xffff, 0xfcca }}, + { {0, 0, 0, 30, 25, 0}, { 0x047b, 0xffb4, 0xfb52 }}, + { {0, 0, 0, 20, 228, 0}, { 0x05eb, 0xffed, 0xfcff }}, + { {0, 0, 0, 30, 226, 0}, { 0x053d, 0xffbc, 0xfe69 }}, + { {0, 0, 0, 30, 244, 0}, { 0x02c8, 0xffb7, 0xfde1 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0104, 0xffd6, 0xfe02 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfedf, 0xff8c, 0xfdef }}, + { {0, 0, 0, 30, 13, 0}, { 0xfd19, 0xff9e, 0xfe46 }}, + { {0, 0, 0, 30, 16, 0}, { 0xfcc0, 0xffcd, 0xffc7 }}, + { {-1, 0, 0, 30, 0, 0}, { 0xfc30, 0x0060, 0x011a }}, + { {0, 0, 0, 0, 0, 0}, { 0xf4cf, 0x0217, 0x07f0 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf575, 0x018b, 0x0622 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf5e3, 0x0123, 0x04ee }}, + { {0, 0, 0, 0, 0, 0}, { 0xf6a2, 0x01a8, 0x02dc }}, + { {0, 0, 0, 0, 0, 0}, { 0xf68b, 0x0262, 0x0050 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf7b5, 0x0189, 0xfcdb }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf8a8, 0x012d, 0xf7e1 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf558, 0x00f2, 0x0673 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf5fe, 0x0065, 0x04a5 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf665, 0xffe3, 0x0385 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf771, 0x011d, 0x012a }}, + { {0, 0, 0, 30, 0, 0}, { 0xf7f7, 0x0186, 0xff48 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf873, 0x0116, 0xfe9c }}, + { {-1, 0, 0, 42, 0, 0}, { 0xf86d, 0x00e0, 0xf9cc }}, + { {0, 0, 0, 0, 0, 0}, { 0x06d4, 0x00a6, 0xfae3 }}, + { {0, 0, 0, 0, 0, 0}, { 0x06d4, 0x00a6, 0xfae3 }}, + { {0, 0, 0, 0, 0, 0}, { 0x06fe, 0x0066, 0xf9cf }}, + { {0, 0, 0, 0, 0, 0}, { 0x04f6, 0x0046, 0xf966 }}, + { {0, 0, 0, 0, 0, 0}, { 0x017c, 0x0053, 0xfa6c }}, + { {0, 0, 0, 0, 0, 0}, { 0xfec9, 0x003a, 0xfc36 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc6f, 0xffde, 0xfdc0 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb17, 0xffbe, 0xfec7 }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf96a, 0x00ab, 0x011b }}, + { {0, 0, 0, 9, 0, 0}, { 0x06db, 0xffd3, 0xfca8 }}, + { {0, 0, 0, 30, 0, 0}, { 0x06dc, 0xffdc, 0xfcac }}, + { {0, 0, 0, 25, 0, 0}, { 0x077f, 0xffbe, 0xfb94 }}, + { {0, 0, 0, 25, 0, 0}, { 0x06b5, 0xffbd, 0xfa16 }}, + { {0, 0, 0, 25, 0, 0}, { 0x0359, 0xffd6, 0xfa1e }}, + { {0, 0, 0, 25, 0, 0}, { 0x005b, 0xffb1, 0xfb2f }}, + { {0, 0, 0, 25, 0, 0}, { 0xfdee, 0xff57, 0xfc9c }}, + { {0, 0, 0, 25, 0, 0}, { 0xfc95, 0xff34, 0xfda4 }}, + { {-1, 0, 0, 25, 0, 0}, { 0xfa96, 0xfff6, 0xffb7 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfaef, 0xff6e, 0xfdaa }}, + { {0, 0, 0, 0, 0, 0}, { 0xfaef, 0xff6e, 0xfdaa }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb54, 0xff68, 0xfdbf }}, + { {0, 0, 0, 0, 0, 0}, { 0xfbb5, 0xff64, 0xfde0 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc0d, 0xff64, 0xfdfa }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc9f, 0xff64, 0xfe2b }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd80, 0xff61, 0xfe99 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfdca, 0xff66, 0xfeab }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfe06, 0xff6d, 0xfebf }}, + { {0, 0, 0, 30, 0, 0}, { 0xf911, 0xff0f, 0xfe1a }}, + { {0, 0, 0, 30, 0, 0}, { 0xf911, 0xff0f, 0xfe1a }}, + { {0, 0, 0, 35, 0, 0}, { 0xf9dd, 0xfe99, 0xfec0 }}, + { {0, 0, 0, 35, 0, 0}, { 0xfb37, 0xfe86, 0xff8e }}, + { {0, 0, 0, 35, 0, 0}, { 0xfcc7, 0xfe7a, 0xff8b }}, + { {0, 0, 0, 35, 0, 0}, { 0xfe21, 0xff1d, 0xff62 }}, + { {0, 0, 0, 38, 0, 0}, { 0xff5c, 0xff8e, 0xff2e }}, + { {0, 0, 0, 30, 0, 0}, { 0xffa1, 0xff56, 0xff54 }}, + { {-1, 0, 0, 30, 0, 0}, { 0xffdf, 0xff4e, 0xff5d }}, + { {0, 0, 0, 0, 0, 0}, { 0x0326, 0x0016, 0xfbe5 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0326, 0x0016, 0xfbe5 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0279, 0x001c, 0xfbdc }}, + { {0, 0, 0, 0, 0, 0}, { 0x00e2, 0x0014, 0xfc78 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0010, 0x0015, 0xfdcf }}, + { {0, 0, 0, 0, 0, 0}, { 0xffa5, 0x006f, 0xfead }}, + { {-1, 0, 0, 0, 0, 0}, { 0xffb3, 0x008e, 0xff63 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0381, 0xffa1, 0xfdc3 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0381, 0xffa1, 0xfdc3 }}, + { {0, 0, 0, 35, 0, 0}, { 0x0237, 0xff21, 0xfd88 }}, + { {0, 0, 0, 35, 0, 0}, { 0x005d, 0xff63, 0xfe39 }}, + { {0, 0, 0, 35, 0, 0}, { 0xfef8, 0x007d, 0xff60 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfe07, 0x00c8, 0xffb7 }}, + { {-1, 0, 0, 30, 0, 0}, { 0xfdc3, 0x00d1, 0xff6a }}, + { {0, 0, 0, 0, 0, 0}, { 0xfff9, 0x004d, 0xfd4b }}, + { {0, 0, 0, 0, 0, 0}, { 0xff2a, 0x009e, 0xfcf8 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfe1b, 0x0174, 0xfd03 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc2c, 0x0163, 0xfbea }}, + { {0, 0, 0, 0, 0, 0}, { 0xfbc2, 0x003c, 0xfaa3 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfbf4, 0x0012, 0xf87d }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfbf4, 0x0012, 0xf87d }}, + { {0, 0, 0, 37, 0, 0}, { 0xfedb, 0xff54, 0xfc06 }}, + { {0, 0, 0, 37, 0, 0}, { 0xfeb0, 0xff91, 0xfb66 }}, + { {0, 0, 0, 37, 0, 0}, { 0xfe79, 0x0070, 0xfb62 }}, + { {0, 0, 0, 37, 0, 0}, { 0xfde5, 0x00ac, 0xfb55 }}, + { {0, 0, 0, 37, 0, 0}, { 0xfd9b, 0x0079, 0xfb3c }}, + { {0, 0, 0, 48, 0, 0}, { 0xfd0d, 0x0037, 0xfa1a }}, + { {-1, 0, 0, 30, 0, 0}, { 0xfd20, 0x001d, 0xfa0d }}, + { {0, 0, 0, 0, 0, 0}, { 0x0032, 0x0017, 0xfb25 }}, + { {0, 0, 0, 0, 0, 0}, { 0x0032, 0x0011, 0xf7f3 }}, + { {0, 0, 0, 0, 0, 0}, { 0xffef, 0x000a, 0xf6b4 }}, + { {0, 0, 0, 0, 0, 0}, { 0xff34, 0x0008, 0xf54e }}, + { {0, 0, 0, 0, 0, 0}, { 0xfe63, 0x0009, 0xf494 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfdd3, 0x0005, 0xf436 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfcc0, 0x0005, 0xf3ec }}, + { {0, 0, 0, 0, 0, 0}, { 0xfba1, 0x0004, 0xf3e5 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfa43, 0x0002, 0xf3d4 }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf96d, 0x0003, 0xf3f1 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0032, 0xff86, 0xf947 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0042, 0xff4f, 0xf627 }}, + { {0, 0, 0, 30, 0, 0}, { 0x0181, 0xff13, 0xf612 }}, + { {0, 0, 0, 30, 0, 0}, { 0x00eb, 0xff7e, 0xf60e }}, + { {0, 0, 0, 30, 0, 0}, { 0x002b, 0xffc5, 0xf554 }}, + { {0, 0, 0, 30, 0, 0}, { 0xff90, 0xffb2, 0xf508 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfeb4, 0x0011, 0xf3e0 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfd8c, 0x001a, 0xf386 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfc2b, 0x0067, 0xf3ae }}, + { {-1, 0, 0, 30, 0, 0}, { 0xfb56, 0x0051, 0xf3ac }}, + { {0, 0, 0, 0, 0, 0}, { 0xf49d, 0x001e, 0x003a }}, + { {0, 0, 0, 0, 0, 0}, { 0xf4c9, 0x003c, 0x0039 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf4f7, 0x005a, 0x0038 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf4f7, 0x005a, 0x0038 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf535, 0x0057, 0x0036 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf6ae, 0x0036, 0x001d }}, + { {0, 0, 0, 0, 0, 0}, { 0xf6ce, 0x0031, 0x001c }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf6ce, 0x0031, 0x001c }}, + { {0, 0, 0, 80, 0, 0}, { 0xf669, 0xff5a, 0x004d }}, + { {0, 0, 0, 80, 0, 0}, { 0xf69d, 0xff8d, 0x004b }}, + { {0, 0, 0, 80, 0, 0}, { 0xf6d6, 0xffc8, 0x003b }}, + { {0, 0, 0, 5, 0, 0}, { 0xf6d9, 0xffd3, 0x0040 }}, + { {0, 0, 0, 3, 0, 0}, { 0xf717, 0xffd0, 0x0045 }}, + { {0, 0, 0, 4, 0, 0}, { 0xf894, 0xffc5, 0x000f }}, + { {0, 0, 0, 4, 0, 0}, { 0xf8b8, 0xffcc, 0x001a }}, + { {-1, 0, 0, 4, 0, 0}, { 0xf8b8, 0xffcc, 0x0014 }}, + { {0, 0, 0, 0, 0, 0}, { 0xff61, 0x03ce, 0xf2bf }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd33, 0x038d, 0xf40f }}, + { {0, 0, 0, 0, 0, 0}, { 0xfc59, 0x0366, 0xf4df }}, + { {0, 0, 0, 0, 0, 0}, { 0xfbe7, 0x0321, 0xf5d5 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb9a, 0x02a9, 0xf704 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb58, 0x0220, 0xf8b1 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfabf, 0x01f3, 0xfa36 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf9f2, 0x01ef, 0xfb8d }}, + { {0, 0, 0, 0, 0, 0}, { 0xf943, 0x01fe, 0xfd31 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf950, 0x0200, 0xfea3 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf9cd, 0x0214, 0xff83 }}, + { {0, 0, 0, 0, 0, 0}, { 0xface, 0x022d, 0x000d }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfbd8, 0x0231, 0x000d }}, + { {0, 0, 0, 20, 0, 0}, { 0xfea7, 0x033c, 0xf478 }}, + { {0, 0, 0, 20, 0, 0}, { 0xfcb7, 0x0306, 0xf5e1 }}, + { {0, 0, 0, 20, 0, 0}, { 0xfbf7, 0x02d4, 0xf6b4 }}, + { {0, 0, 0, 20, 0, 0}, { 0xfb96, 0x0278, 0xf7a5 }}, + { {0, 0, 0, 20, 0, 0}, { 0xfb66, 0x0217, 0xf8e0 }}, + { {0, 0, 0, 20, 0, 0}, { 0xfb26, 0x01c5, 0xfa9b }}, + { {0, 0, 0, 20, 0, 0}, { 0xfadd, 0x01eb, 0xfc29 }}, + { {0, 0, 0, 28, 0, 0}, { 0xfa89, 0x0208, 0xfd69 }}, + { {0, 0, 0, 29, 0, 0}, { 0xfaf3, 0x020a, 0xfe2d }}, + { {0, 0, 0, 28, 0, 0}, { 0xfb2b, 0x0226, 0xfe09 }}, + { {0, 0, 0, 28, 0, 0}, { 0xfb39, 0x0216, 0xfe2c }}, + { {0, 0, 0, 28, 0, 0}, { 0xfb08, 0x0202, 0xfe1f }}, + { {-1, 0, 0, 28, 0, 0}, { 0xfb31, 0x023f, 0xfe38 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfe5d, 0x01f9, 0xf67a }}, + { {0, 0, 0, 0, 0, 0}, { 0xfd7a, 0x0136, 0xf7ab }}, + { {0, 0, 0, 0, 0, 0}, { 0xfb8b, 0x0066, 0xfa4f }}, + { {0, 0, 0, 0, 0, 0}, { 0xf9c4, 0x0032, 0xfc9f }}, + { {0, 0, 0, 0, 0, 0}, { 0xf7b6, 0x0022, 0xfdda }}, + { {0, 0, 0, 0, 0, 0}, { 0xf771, 0x0054, 0xfdec }}, + { {-1, 0, 0, 0, 0, 0}, { 0xf7df, 0x00a6, 0xfed5 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfd5a, 0x0107, 0xf7db }}, + { {0, 0, 0, 30, 0, 0}, { 0xfc6f, 0x0063, 0xf918 }}, + { {0, 0, 0, 30, 0, 0}, { 0xfa65, 0x002e, 0xfbe0 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf843, 0x0010, 0xfddc }}, + { {0, 0, 0, 30, 0, 0}, { 0xf5d2, 0x000c, 0xfe55 }}, + { {0, 0, 0, 30, 0, 0}, { 0xf57e, 0x006c, 0xfde9 }}, + { {-1, 0, 0, 30, 0, 0}, { 0xf5f2, 0x00a8, 0xfe82 }}, + { {0, 0, 0, 0, 0, 0}, { 0xf8e5, 0x0181, 0x054b }}, + { {0, 0, 0, 0, 0, 0}, { 0xfae4, 0x00b9, 0x0556 }}, + { {0, 0, 0, 0, 0, 0}, { 0xfccc, 0x0010, 0x0556 }}, + { {-1, 0, 0, 0, 0, 0}, { 0xfd42, 0x0047, 0x056d }}, + { {0, 0, 0, 70, 0, 0}, { 0xf88a, 0x00e8, 0x0378 }}, + { {0, 0, 0, 70, 0, 0}, { 0xfc3e, 0x001d, 0x0410 }}, + { {0, 0, 0, 70, 0, 0}, { 0xfea3, 0x0041, 0x05f7 }}, + { {-1, 0, 0, 70, 0, 0}, { 0xfeda, 0x0109, 0x0642 }}, }; struct struct_80286A10 { @@ -1694,7 +1504,7 @@ u16 D_80286B34[] = { 0x00F2, 0x00F9, 0x00F0, 0x0000, }; -void func_802847CC(Camera *camera) { +void func_802847CC(struct CinematicCamera *camera) { u16 sp2E; u16 sp2C; // D_802856B4 cast to u32 triggers cfc1. @@ -1740,8 +1550,6 @@ void func_802847CC(Camera *camera) { } } -void func_802847CC(Camera*); - // Start of credits cutscene? struct Cutscene D_80286B5C[] = { { func_802847CC, 0x7FFF }, @@ -1752,14 +1560,14 @@ struct struct_80284AE8 { u8 unk1C; }; -void play_cutscene(CinematicCamera *camera) { +void play_cutscene(struct CinematicCamera *camera) { s32 pad[3]; s16 cutsceneDuration; -#define CUTSCENE(id, cutscene) \ - case id: \ - cutsceneDuration = cutscene[sCutsceneShot].duration; \ - cutscene[sCutsceneShot].shot(camera); \ +#define CUTSCENE(id, cutscene) \ + case id: \ + cutsceneDuration = cutscene[sCutsceneShot].duration; \ + cutscene[sCutsceneShot].shot(camera); \ if (!camera->cutscene) { return; } switch (camera->cutscene) { diff --git a/src/ceremony_and_credits.h b/src/ceremony_and_credits.h index 16bbfe38b..48841436f 100644 --- a/src/ceremony_and_credits.h +++ b/src/ceremony_and_credits.h @@ -2,6 +2,73 @@ #define CEREMONY_AND_CREDITS_H #include "common_structs.h" +#include "camera.h" + +struct struct_80283431 { + Vec3f unk0; + Vec3s unkC; +}; + +struct struct_80283430 { + s8 unk0; // index + s8 unk1; // speed + u16 unk2; // point + s8 unk4; + s8 unk5; + Vec3s unk6; +}; + +struct credits_data_1FA0 { + Vec3f unk0; + s8 pad[0x10]; + s8 unk1C; + s8 unk1D; + s16 unk1E; + f32 unk20; + s8 pad2[0x24]; + s16 unk48[3]; + s16 unk4E[2]; + s16 un52; + s16 unk54[2]; + s16 unk58; + s16 unk5A[2]; + s16 unk5E; + s16 unk60; + s16 unk62; + f32 unk64; + f32 unk68; + s16 unk6C; + s16 unk6E; +}; + + +// Cinematic camera? Camera rails? +// CutsceneVariable? +/** + * Struct used to store cutscene info, like the camera's target position/focus. + * + * See the sCutsceneVars[] array in camera.c for more details. + */ +struct CinematicCamera { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f lookAt; + /* 0x18 */ f32 unk18; + /* 0x1C */ u8 cutscene; + /* 0x20 */ f32 unk20; + /* 0x24 */ Vec3f unk24; + /* 0x30 */ Vec3f unk30; + /* 0x3C */ Vec3f unk3C; + /* 0x48 */ Vec3s unk48; + /* 0x4E */ Vec3s unk4E; + /* 0x54 */ Vec3s unk54; + /* 0x5A */ Vec3s unk5A; + /* 0x60 */ s16 unk60; + /* 0x62 */ s16 unk62; + /* 0x64 */ f32 unk64; + /* 0x68 */ f32 unk68; + /* 0x6C */ s16 unk6C; + /* 0x6E */ s16 unk6E; +}; // size = 0x70 struct struct_80282C40 { s8 unk0; @@ -15,7 +82,7 @@ struct struct_80282C40 { struct struct_80285D80 { u8 unk0[6]; - s16 unk6[3]; + Vec3s unk6; }; struct struct_80286A04 { @@ -26,6 +93,19 @@ struct struct_80286A04 { u16 unkC; }; +struct CutsceneSplinePoint { + s8 index; + u8 speed; + Vec3s point; + +}; + +struct Cutscene { + /* 0x0 */ void (*shot)(struct CinematicCamera*); + /* 0x4 */ s16 duration; + /* 0x6 */ //s16 pad; +}; /* size = 0x8 */ + /* Function Prototypes */ void vec3f_set_dupe(Vec3f, f32, f32, f32); @@ -43,59 +123,80 @@ s32 func_80282200(s16*, s16, s16); s32 set_transition_colour_fade_alpha_ending(f32*, f32, f32); s32 func_80282364(s16*, s16, s16); void reset_spline(); -void func_80282434(Camera*); +void func_80282434(struct CinematicCamera*); void func_80282454(Vec3f, Vec3f, f32*, s16*, s16*); void func_80282504(Vec3f, Vec3f, f32, s16, s16); void func_802825C8(Vec3f, Vec3f, Vec3f, Vec3s); -s32 func_80282D90(Camera*, struct struct_80286A04*, struct struct_80286A04*, s32); -void func_80282E58(Camera*, struct struct_80282C40*, s32); +void func_80282700(f32, Vec3f, f32*, f32[], f32[], f32[], f32[]); +s32 move_point_along_spline(Vec3f, f32*, struct struct_80283430[], s16*, f32*); +void func_80282BE4(struct struct_80283430*, s8, u8, s8, Vec3s, s32); +void func_80282C40(struct struct_80283430*, struct struct_80282C40*, s32); +s32 func_80282D90(struct CinematicCamera*, struct struct_80286A04*, struct struct_80286A04*, s32); +void func_80282E58(struct CinematicCamera*, struct struct_80282C40*, s32); +void func_80282EAC(s32, struct CinematicCamera*, s16, s16, s16); void func_80282F00(s16*, s16); +void func_80282F44(s32, struct CinematicCamera*, Camera*); +void func_802830B4(struct CinematicCamera*, s16, s16, s16); +void func_80283100(struct CinematicCamera*, f32*); void func_80283240(s16); -s32 cutscene_event(CameraEvent event, Camera*, s16, s16); +s32 cutscene_event(CameraEvent event, struct CinematicCamera*, s16, s16); s32 func_80283330(s32); +s32 func_8028336C(struct CinematicCamera*, Camera*); s32 func_80283428(); -void func_80283968(Camera*); -void func_80283994(CinematicCamera*); -void func_802839B4(Camera*); -void func_802839CC(Camera*); -void func_802839E0(Camera*); -void func_80283A34(CinematicCamera*); -void func_80283A54(Camera*); -void func_80283A7C(CinematicCamera*); -void func_80283B6C(Camera*); -void func_80283BA4(Camera*); -void func_80283BF0(CinematicCamera*); -void func_80283C14(Camera*); -void func_80283C38(Camera*); -void func_80283C58(CinematicCamera*); -void func_80283C78(s32); -void func_80283CA8(CinematicCamera*); -void func_80283CD0(s32); -void play_sound_farewell(s32); -void func_80283D2C(CinematicCamera*); -void func_80283EA0(Camera*); -void func_80283ED0(Camera*); -void func_80283EF8(Camera*); -void func_80283F6C(Camera*); -void func_80283FCC(Camera*); -void func_80283FF4(Camera*); -void func_80284068(Camera*); -void func_802840C8(Camera*); -void func_80284154(Camera*); -void func_80284184(Camera*); -void func_802841E8(Camera*); -void func_8028422C(Camera*); -void func_802842A8(Camera*); -void func_802842D8(Camera*); -void func_80284418(Camera*); -void func_80284494(Camera*); -void func_802844FC(Camera*); -void func_8028454C(Camera*); -void func_802845EC(Camera*); -void func_8028461C(Camera*); -void func_80284648(Camera*); +void func_80283968(struct CinematicCamera*); +void func_80283994(struct CinematicCamera*); +void func_802839B4(struct CinematicCamera*); +void func_802839CC(struct CinematicCamera*); +void func_802839E0(struct CinematicCamera*); +void play_sound_welcome(struct CinematicCamera*); +void func_80283A34(struct CinematicCamera*); +void play_sound_congratulation(struct CinematicCamera*); +void play_sound_balloon_pop(struct CinematicCamera*); +void play_sound_fish(struct CinematicCamera*); +void play_sound_fish_2(struct CinematicCamera*); +void play_sound_shoot_trophy(struct CinematicCamera*); +void play_sound_podium(struct CinematicCamera*); +void play_sound_trophy(struct CinematicCamera*); +void func_80283A54(struct CinematicCamera*); +void func_80283A7C(struct CinematicCamera*); +void func_80283B6C(struct CinematicCamera*); +void func_80283BA4(struct CinematicCamera*); +void func_80283BF0(struct CinematicCamera*); +void func_80283C14(struct CinematicCamera*); +void func_80283C38(struct CinematicCamera*); +void func_80283C58(struct CinematicCamera*); +void func_80283C78(struct CinematicCamera*); +void func_80283CA8(struct CinematicCamera*); +void func_80283CD0(struct CinematicCamera*); +void play_sound_farewell(struct CinematicCamera*); +void func_80283D2C(struct CinematicCamera*); +void func_80283EA0(struct CinematicCamera*); +void func_80283ED0(struct CinematicCamera*); +void func_80283EF8(struct CinematicCamera*); +void func_80283F6C(struct CinematicCamera*); +void func_80283FCC(struct CinematicCamera*); +void func_80283FF4(struct CinematicCamera*); +void func_80284068(struct CinematicCamera*); +void func_802840C8(struct CinematicCamera*); +void func_80284154(struct CinematicCamera*); +void func_80284184(struct CinematicCamera*); +void func_802841E8(struct CinematicCamera*); +void func_8028422C(struct CinematicCamera*); +void func_802842A8(struct CinematicCamera*); +void func_802842D8(struct CinematicCamera*); +void func_80284308(struct CinematicCamera*); +void func_80284418(struct CinematicCamera*); +void func_80284494(struct CinematicCamera*); +void func_802844FC(struct CinematicCamera*); +void func_8028454C(struct CinematicCamera*); +void func_802845EC(struct CinematicCamera*); +void func_8028461C(struct CinematicCamera*); +void func_80284648(struct CinematicCamera*); void func_802846AC(); -void func_802846B4(Camera*); +void func_802846B4(struct CinematicCamera*); +void func_802846E4(struct CinematicCamera*); +void func_802847CC(struct CinematicCamera*); +void play_cutscene(struct CinematicCamera*); void func_80284CC0(); /* This is where I'd put my static data, if I had any */ @@ -133,6 +234,7 @@ extern struct struct_80282C40 D_80285B90[]; extern struct struct_80282C40 D_80285BA8[]; extern struct struct_80282C40 D_80285C38[]; extern struct struct_80282C40 D_80285C74[]; +extern struct Cutscene D_80285D10[]; extern s16 D_80285D14; extern s32 D_802876D4; extern s32 D_802876D8; diff --git a/src/code_80280000.c b/src/code_80280000.c index 16fe7a833..80194bcdc 100644 --- a/src/code_80280000.c +++ b/src/code_80280000.c @@ -4,6 +4,7 @@ #include #include "main.h" +#include "variables.h" #include "types.h" #include "camera.h" #include "memory.h" diff --git a/src/code_80280000.h b/src/code_80280000.h index be17c0ba3..1b0cbda1e 100644 --- a/src/code_80280000.h +++ b/src/code_80280000.h @@ -18,16 +18,12 @@ extern f32 D_80150130[4]; extern s16 gCreditsCourseId; extern u16 D_80150112; extern s16 D_80164AF0; -extern u32 D_8018D120; -extern mk64_surface_map_ram (*D_8015F580)[]; -extern u16 D_8015F588; // Number of entires in D_8015F580 extern u16 gIsInQuitToMenuTransition, gQuitToMenuTransitionCounter; extern s32 D_802874A0; extern u16 D_80164714, D_80164716, D_80164718; extern u16 D_800DC5E4; -extern u32 gGamestate; extern u32 D_802874FC; extern u16 D_800DC518;