### RAW ASSEMBLY INSTRUCTIONS:

glabel update_camera_zone_interp
/* C894 80031494 27BDFF80 */  addiu     $sp, $sp, -0x80
/* C898 80031498 AFB10044 */  sw        $s1, 0x44($sp)
/* C89C 8003149C 0080882D */  daddu     $s1, $a0, $zero
/* C8A0 800314A0 AFBF004C */  sw        $ra, 0x4C($sp)
/* C8A4 800314A4 AFB20048 */  sw        $s2, 0x48($sp)
/* C8A8 800314A8 AFB00040 */  sw        $s0, 0x40($sp)
/* C8AC 800314AC F7BE0078 */  sdc1      $f30, 0x78($sp)
/* C8B0 800314B0 F7BC0070 */  sdc1      $f28, 0x70($sp)
/* C8B4 800314B4 F7BA0068 */  sdc1      $f26, 0x68($sp)
/* C8B8 800314B8 F7B80060 */  sdc1      $f24, 0x60($sp)
/* C8BC 800314BC F7B60058 */  sdc1      $f22, 0x58($sp)
/* C8C0 800314C0 F7B40050 */  sdc1      $f20, 0x50($sp)
/* C8C4 800314C4 C6300060 */  lwc1      $f16, 0x60($s1)
/* C8C8 800314C8 E7B00038 */  swc1      $f16, 0x38($sp)
/* C8CC 800314CC C63E0064 */  lwc1      $f30, 0x64($s1)
/* C8D0 800314D0 86220008 */  lh        $v0, 0x8($s1)
/* C8D4 800314D4 C6300068 */  lwc1      $f16, 0x68($s1)
/* C8D8 800314D8 0000802D */  daddu     $s0, $zero, $zero
/* C8DC 800314DC 10400017 */  beqz      $v0, .L8003153C
/* C8E0 800314E0 E7B0003C */   swc1     $f16, 0x3C($sp)
/* C8E4 800314E4 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* C8E8 800314E8 44810000 */  mtc1      $at, $f0
/* C8EC 800314EC AE200448 */  sw        $zero, 0x448($s1)
/* C8F0 800314F0 AE200444 */  sw        $zero, 0x444($s1)
/* C8F4 800314F4 AE200488 */  sw        $zero, 0x488($s1)
/* C8F8 800314F8 AE200494 */  sw        $zero, 0x494($s1)
/* C8FC 800314FC E63E04A0 */  swc1      $f30, 0x4A0($s1)
/* C900 80031500 AE200098 */  sw        $zero, 0x98($s1)
/* C904 80031504 AE20009C */  sw        $zero, 0x9C($s1)
/* C908 80031508 AE2004A4 */  sw        $zero, 0x4A4($s1)
/* C90C 8003150C AE2004A8 */  sw        $zero, 0x4A8($s1)
/* C910 80031510 AE2004AC */  sw        $zero, 0x4AC($s1)
/* C914 80031514 A62004D4 */  sh        $zero, 0x4D4($s1)
/* C918 80031518 A62004D6 */  sh        $zero, 0x4D6($s1)
/* C91C 8003151C AE200508 */  sw        $zero, 0x508($s1)
/* C920 80031520 3C01800A */  lui       $at, %hi(D_800A08DC)
/* C924 80031524 AC2008DC */  sw        $zero, %lo(D_800A08DC)($at)
/* C928 80031528 3C01800A */  lui       $at, %hi(D_800A08E0)
/* C92C 8003152C AC2008E0 */  sw        $zero, %lo(D_800A08E0)($at)
/* C930 80031530 E6200484 */  swc1      $f0, 0x484($s1)
/* C934 80031534 E6200498 */  swc1      $f0, 0x498($s1)
/* C938 80031538 E620048C */  swc1      $f0, 0x48C($s1)
.L8003153C:
/* C93C 8003153C 96220002 */  lhu       $v0, 0x2($s1)
/* C940 80031540 C7B60038 */  lwc1      $f22, 0x38($sp)
/* C944 80031544 30420001 */  andi      $v0, $v0, 0x1
/* C948 80031548 54400008 */  bnel      $v0, $zero, .L8003156C
/* C94C 8003154C AE200498 */   sw       $zero, 0x498($s1)
/* C950 80031550 C6200494 */  lwc1      $f0, 0x494($s1)
/* C954 80031554 461E0032 */  c.eq.s    $f0, $f30
/* C958 80031558 00000000 */  nop
/* C95C 8003155C 45010004 */  bc1t      .L80031570
/* C960 80031560 00000000 */   nop
/* C964 80031564 E63E0494 */  swc1      $f30, 0x494($s1)
/* C968 80031568 AE200498 */  sw        $zero, 0x498($s1)
.L8003156C:
/* C96C 8003156C C6200494 */  lwc1      $f0, 0x494($s1)
.L80031570:
/* C970 80031570 4600F03C */  c.lt.s    $f30, $f0
/* C974 80031574 00000000 */  nop
/* C978 80031578 4500000A */  bc1f      .L800315A4
/* C97C 8003157C 00000000 */   nop
/* C980 80031580 C62004A0 */  lwc1      $f0, 0x4A0($s1)
/* C984 80031584 4600F03E */  c.le.s    $f30, $f0
/* C988 80031588 00000000 */  nop
/* C98C 8003158C 45000005 */  bc1f      .L800315A4
/* C990 80031590 00000000 */   nop
/* C994 80031594 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* C998 80031598 44810000 */  mtc1      $at, $f0
/* C99C 8003159C E63E0494 */  swc1      $f30, 0x494($s1)
/* C9A0 800315A0 E6200498 */  swc1      $f0, 0x498($s1)
.L800315A4:
/* C9A4 800315A4 C6220498 */  lwc1      $f2, 0x498($s1)
/* C9A8 800315A8 3C01800A */  lui       $at, %hi(D_80098250)
/* C9AC 800315AC D4248250 */  ldc1      $f4, %lo(D_80098250)($at)
/* C9B0 800315B0 C620049C */  lwc1      $f0, 0x49C($s1)
/* C9B4 800315B4 460010A1 */  cvt.d.s   $f2, $f2
/* C9B8 800315B8 46222101 */  sub.d     $f4, $f4, $f2
/* C9BC 800315BC 46000021 */  cvt.d.s   $f0, $f0
/* C9C0 800315C0 46202103 */  div.d     $f4, $f4, $f0
/* C9C4 800315C4 46241080 */  add.d     $f2, $f2, $f4
/* C9C8 800315C8 3C013FF0 */  lui       $at, (0x3FF00000 >> 16)
/* C9CC 800315CC 44812800 */  mtc1      $at, $f5
/* C9D0 800315D0 44802000 */  mtc1      $zero, $f4
/* C9D4 800315D4 462010A0 */  cvt.s.d   $f2, $f2
/* C9D8 800315D8 46001021 */  cvt.d.s   $f0, $f2
/* C9DC 800315DC 4620203C */  c.lt.d    $f4, $f0
/* C9E0 800315E0 00000000 */  nop
/* C9E4 800315E4 45000005 */  bc1f      .L800315FC
/* C9E8 800315E8 E6220498 */   swc1     $f2, 0x498($s1)
/* C9EC 800315EC 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* C9F0 800315F0 44810000 */  mtc1      $at, $f0
/* C9F4 800315F4 00000000 */  nop
/* C9F8 800315F8 E6200498 */  swc1      $f0, 0x498($s1)
.L800315FC:
/* C9FC 800315FC 96220002 */  lhu       $v0, 0x2($s1)
/* CA00 80031600 30420004 */  andi      $v0, $v0, 0x4
/* CA04 80031604 10400010 */  beqz      $v0, .L80031648
/* CA08 80031608 00000000 */   nop
/* CA0C 8003160C C6200498 */  lwc1      $f0, 0x498($s1)
/* CA10 80031610 3C01800A */  lui       $at, %hi(D_80098258)
/* CA14 80031614 D4228258 */  ldc1      $f2, %lo(D_80098258)($at)
/* CA18 80031618 46000021 */  cvt.d.s   $f0, $f0
/* CA1C 8003161C 46220000 */  add.d     $f0, $f0, $f2
/* CA20 80031620 46200020 */  cvt.s.d   $f0, $f0
/* CA24 80031624 460000A1 */  cvt.d.s   $f2, $f0
/* CA28 80031628 4622203E */  c.le.d    $f4, $f2
/* CA2C 8003162C 00000000 */  nop
/* CA30 80031630 45000005 */  bc1f      .L80031648
/* CA34 80031634 E6200498 */   swc1     $f0, 0x498($s1)
/* CA38 80031638 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* CA3C 8003163C 44810000 */  mtc1      $at, $f0
/* CA40 80031640 00000000 */  nop
/* CA44 80031644 E6200498 */  swc1      $f0, 0x498($s1)
.L80031648:
/* CA48 80031648 96220002 */  lhu       $v0, 0x2($s1)
/* CA4C 8003164C 30420002 */  andi      $v0, $v0, 0x2
/* CA50 80031650 14400009 */  bnez      $v0, .L80031678
/* CA54 80031654 00000000 */   nop
/* CA58 80031658 C6200494 */  lwc1      $f0, 0x494($s1)
/* CA5C 8003165C C62204A0 */  lwc1      $f2, 0x4A0($s1)
/* CA60 80031660 46020001 */  sub.s     $f0, $f0, $f2
/* CA64 80031664 C6240498 */  lwc1      $f4, 0x498($s1)
/* CA68 80031668 46040002 */  mul.s     $f0, $f0, $f4
/* CA6C 8003166C 00000000 */  nop
/* CA70 80031670 46001080 */  add.s     $f2, $f2, $f0
/* CA74 80031674 E62204A0 */  swc1      $f2, 0x4A0($s1)
.L80031678:
/* CA78 80031678 96220506 */  lhu       $v0, 0x506($s1)
/* CA7C 8003167C 14400014 */  bnez      $v0, .L800316D0
/* CA80 80031680 C7B4003C */   lwc1     $f20, 0x3C($sp)
/* CA84 80031684 C62004A4 */  lwc1      $f0, 0x4A4($s1)
/* CA88 80031688 C7B00038 */  lwc1      $f16, 0x38($sp)
/* CA8C 8003168C 46100032 */  c.eq.s    $f0, $f16
/* CA90 80031690 00000000 */  nop
/* CA94 80031694 4500000E */  bc1f      .L800316D0
/* CA98 80031698 00000000 */   nop
/* CA9C 8003169C C62004A8 */  lwc1      $f0, 0x4A8($s1)
/* CAA0 800316A0 461E0032 */  c.eq.s    $f0, $f30
/* CAA4 800316A4 00000000 */  nop
/* CAA8 800316A8 45000009 */  bc1f      .L800316D0
/* CAAC 800316AC 00000000 */   nop
/* CAB0 800316B0 C62004AC */  lwc1      $f0, 0x4AC($s1)
/* CAB4 800316B4 46140032 */  c.eq.s    $f0, $f20
/* CAB8 800316B8 00000000 */  nop
/* CABC 800316BC 45000004 */  bc1f      .L800316D0
/* CAC0 800316C0 00000000 */   nop
/* CAC4 800316C4 86220008 */  lh        $v0, 0x8($s1)
/* CAC8 800316C8 104000C6 */  beqz      $v0, .L800319E4
/* CACC 800316CC 00000000 */   nop
.L800316D0:
/* CAD0 800316D0 96220504 */  lhu       $v0, 0x504($s1)
/* CAD4 800316D4 14400008 */  bnez      $v0, .L800316F8
/* CAD8 800316D8 262404D8 */   addiu    $a0, $s1, 0x4D8
/* CADC 800316DC 3C014120 */  lui       $at, (0x41200000 >> 16)
/* CAE0 800316E0 44817000 */  mtc1      $at, $f14
/* CAE4 800316E4 8FA6003C */  lw        $a2, 0x3C($sp)
/* CAE8 800316E8 C7AC0038 */  lwc1      $f12, 0x38($sp)
/* CAEC 800316EC 0C00C116 */  jal       test_ray_zone_aabb
/* CAF0 800316F0 460EF380 */   add.s    $f14, $f30, $f14
/* CAF4 800316F4 0040202D */  daddu     $a0, $v0, $zero
.L800316F8:
/* CAF8 800316F8 0000402D */  daddu     $t0, $zero, $zero
/* CAFC 800316FC 8E230448 */  lw        $v1, 0x448($s1)
/* CB00 80031700 1080007E */  beqz      $a0, .L800318FC
/* CB04 80031704 0080382D */   daddu    $a3, $a0, $zero
/* CB08 80031708 1060007C */  beqz      $v1, .L800318FC
/* CB0C 8003170C 00000000 */   nop
/* CB10 80031710 8C850000 */  lw        $a1, 0x0($a0)
/* CB14 80031714 8C620000 */  lw        $v0, 0x0($v1)
/* CB18 80031718 14A20078 */  bne       $a1, $v0, .L800318FC
/* CB1C 8003171C 00000000 */   nop
/* CB20 80031720 8C860028 */  lw        $a2, 0x28($a0)
/* CB24 80031724 8C620028 */  lw        $v0, 0x28($v1)
/* CB28 80031728 14C20074 */  bne       $a2, $v0, .L800318FC
/* CB2C 8003172C 00000000 */   nop
/* CB30 80031730 C4820004 */  lwc1      $f2, 0x4($a0)
/* CB34 80031734 C4600004 */  lwc1      $f0, 0x4($v1)
/* CB38 80031738 46001032 */  c.eq.s    $f2, $f0
/* CB3C 8003173C 00000000 */  nop
/* CB40 80031740 4500006E */  bc1f      .L800318FC
/* CB44 80031744 00000000 */   nop
/* CB48 80031748 C4820008 */  lwc1      $f2, 0x8($a0)
/* CB4C 8003174C C4600008 */  lwc1      $f0, 0x8($v1)
/* CB50 80031750 46001032 */  c.eq.s    $f2, $f0
/* CB54 80031754 00000000 */  nop
/* CB58 80031758 45000068 */  bc1f      .L800318FC
/* CB5C 8003175C 00000000 */   nop
/* CB60 80031760 C4820024 */  lwc1      $f2, 0x24($a0)
/* CB64 80031764 C4600024 */  lwc1      $f0, 0x24($v1)
/* CB68 80031768 46001032 */  c.eq.s    $f2, $f0
/* CB6C 8003176C 00000000 */  nop
/* CB70 80031770 45000062 */  bc1f      .L800318FC
/* CB74 80031774 00000000 */   nop
/* CB78 80031778 10A00005 */  beqz      $a1, .L80031790
/* CB7C 8003177C 24020001 */   addiu    $v0, $zero, 0x1
/* CB80 80031780 10A20017 */  beq       $a1, $v0, .L800317E0
/* CB84 80031784 00000000 */   nop
/* CB88 80031788 0800C61B */  j         .L8003186C
/* CB8C 8003178C 00000000 */   nop
.L80031790:
/* CB90 80031790 C482000C */  lwc1      $f2, 0xC($a0)
/* CB94 80031794 C460000C */  lwc1      $f0, 0xC($v1)
/* CB98 80031798 46001032 */  c.eq.s    $f2, $f0
/* CB9C 8003179C 00000000 */  nop
/* CBA0 800317A0 45000056 */  bc1f      .L800318FC
/* CBA4 800317A4 00000000 */   nop
/* CBA8 800317A8 C4820014 */  lwc1      $f2, 0x14($a0)
/* CBAC 800317AC C4600014 */  lwc1      $f0, 0x14($v1)
/* CBB0 800317B0 46001032 */  c.eq.s    $f2, $f0
/* CBB4 800317B4 00000000 */  nop
/* CBB8 800317B8 45000050 */  bc1f      .L800318FC
/* CBBC 800317BC 00000000 */   nop
/* CBC0 800317C0 C4820018 */  lwc1      $f2, 0x18($a0)
/* CBC4 800317C4 C4600018 */  lwc1      $f0, 0x18($v1)
/* CBC8 800317C8 46001032 */  c.eq.s    $f2, $f0
/* CBCC 800317CC 00000000 */  nop
/* CBD0 800317D0 4500004A */  bc1f      .L800318FC
/* CBD4 800317D4 00000000 */   nop
/* CBD8 800317D8 0800C63A */  j         .L800318E8
/* CBDC 800317DC C4820020 */   lwc1     $f2, 0x20($a0)
.L800317E0:
/* CBE0 800317E0 10C00005 */  beqz      $a2, .L800317F8
/* CBE4 800317E4 00000000 */   nop
/* CBE8 800317E8 10C5000C */  beq       $a2, $a1, .L8003181C
/* CBEC 800317EC 00000000 */   nop
/* CBF0 800317F0 0800C63F */  j         .L800318FC
/* CBF4 800317F4 00000000 */   nop
.L800317F8:
/* CBF8 800317F8 C482000C */  lwc1      $f2, 0xC($a0)
/* CBFC 800317FC C460000C */  lwc1      $f0, 0xC($v1)
/* CC00 80031800 46001032 */  c.eq.s    $f2, $f0
/* CC04 80031804 00000000 */  nop
/* CC08 80031808 4500003C */  bc1f      .L800318FC
/* CC0C 8003180C 00000000 */   nop
/* CC10 80031810 C4820014 */  lwc1      $f2, 0x14($a0)
/* CC14 80031814 0800C63B */  j         .L800318EC
/* CC18 80031818 C4600014 */   lwc1     $f0, 0x14($v1)
.L8003181C:
/* CC1C 8003181C C482000C */  lwc1      $f2, 0xC($a0)
/* CC20 80031820 C460000C */  lwc1      $f0, 0xC($v1)
/* CC24 80031824 46001032 */  c.eq.s    $f2, $f0
/* CC28 80031828 00000000 */  nop
/* CC2C 8003182C 45000033 */  bc1f      .L800318FC
/* CC30 80031830 00000000 */   nop
/* CC34 80031834 C4820014 */  lwc1      $f2, 0x14($a0)
/* CC38 80031838 C4600014 */  lwc1      $f0, 0x14($v1)
/* CC3C 8003183C 46001032 */  c.eq.s    $f2, $f0
/* CC40 80031840 00000000 */  nop
/* CC44 80031844 4500002D */  bc1f      .L800318FC
/* CC48 80031848 00000000 */   nop
/* CC4C 8003184C C4820018 */  lwc1      $f2, 0x18($a0)
/* CC50 80031850 C4600018 */  lwc1      $f0, 0x18($v1)
/* CC54 80031854 46001032 */  c.eq.s    $f2, $f0
/* CC58 80031858 00000000 */  nop
/* CC5C 8003185C 45000027 */  bc1f      .L800318FC
/* CC60 80031860 00000000 */   nop
/* CC64 80031864 0800C63A */  j         .L800318E8
/* CC68 80031868 C4820020 */   lwc1     $f2, 0x20($a0)
.L8003186C:
/* CC6C 8003186C C4E2000C */  lwc1      $f2, 0xC($a3)
/* CC70 80031870 C460000C */  lwc1      $f0, 0xC($v1)
/* CC74 80031874 46001032 */  c.eq.s    $f2, $f0
/* CC78 80031878 00000000 */  nop
/* CC7C 8003187C 4500001F */  bc1f      .L800318FC
/* CC80 80031880 00000000 */   nop
/* CC84 80031884 C4E20014 */  lwc1      $f2, 0x14($a3)
/* CC88 80031888 C4600014 */  lwc1      $f0, 0x14($v1)
/* CC8C 8003188C 46001032 */  c.eq.s    $f2, $f0
/* CC90 80031890 00000000 */  nop
/* CC94 80031894 45000019 */  bc1f      .L800318FC
/* CC98 80031898 00000000 */   nop
/* CC9C 8003189C C4E20010 */  lwc1      $f2, 0x10($a3)
/* CCA0 800318A0 C4600010 */  lwc1      $f0, 0x10($v1)
/* CCA4 800318A4 46001032 */  c.eq.s    $f2, $f0
/* CCA8 800318A8 00000000 */  nop
/* CCAC 800318AC 45000013 */  bc1f      .L800318FC
/* CCB0 800318B0 00000000 */   nop
/* CCB4 800318B4 C4E2001C */  lwc1      $f2, 0x1C($a3)
/* CCB8 800318B8 C460001C */  lwc1      $f0, 0x1C($v1)
/* CCBC 800318BC 46001032 */  c.eq.s    $f2, $f0
/* CCC0 800318C0 00000000 */  nop
/* CCC4 800318C4 4500000D */  bc1f      .L800318FC
/* CCC8 800318C8 00000000 */   nop
/* CCCC 800318CC C4E20018 */  lwc1      $f2, 0x18($a3)
/* CCD0 800318D0 C4600018 */  lwc1      $f0, 0x18($v1)
/* CCD4 800318D4 46001032 */  c.eq.s    $f2, $f0
/* CCD8 800318D8 00000000 */  nop
/* CCDC 800318DC 45000007 */  bc1f      .L800318FC
/* CCE0 800318E0 00000000 */   nop
/* CCE4 800318E4 C4E20020 */  lwc1      $f2, 0x20($a3)
.L800318E8:
/* CCE8 800318E8 C4600020 */  lwc1      $f0, 0x20($v1)
.L800318EC:
/* CCEC 800318EC 46001032 */  c.eq.s    $f2, $f0
/* CCF0 800318F0 00000000 */  nop
/* CCF4 800318F4 45030001 */  bc1tl     .L800318FC
/* CCF8 800318F8 24080001 */   addiu    $t0, $zero, 0x1
.L800318FC:
/* CCFC 800318FC 96220506 */  lhu       $v0, 0x506($s1)
/* CD00 80031900 14400005 */  bnez      $v0, .L80031918
/* CD04 80031904 00000000 */   nop
/* CD08 80031908 15000036 */  bnez      $t0, .L800319E4
/* CD0C 8003190C 00000000 */   nop
/* CD10 80031910 10E30034 */  beq       $a3, $v1, .L800319E4
/* CD14 80031914 00000000 */   nop
.L80031918:
/* CD18 80031918 C6220484 */  lwc1      $f2, 0x484($s1)
/* CD1C 8003191C 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* CD20 80031920 44810000 */  mtc1      $at, $f0
/* CD24 80031924 00000000 */  nop
/* CD28 80031928 46001032 */  c.eq.s    $f2, $f0
/* CD2C 8003192C 00000000 */  nop
/* CD30 80031930 45000004 */  bc1f      .L80031944
/* CD34 80031934 2402FFFF */   addiu    $v0, $zero, -0x1
/* CD38 80031938 8E220448 */  lw        $v0, 0x448($s1)
/* CD3C 8003193C 0800C652 */  j         .L80031948
/* CD40 80031940 AE220444 */   sw       $v0, 0x444($s1)
.L80031944:
/* CD44 80031944 AE220444 */  sw        $v0, 0x444($s1)
.L80031948:
/* CD48 80031948 3C0C800A */  lui       $t4, %hi(gCurrentCamConfiguration)
/* CD4C 8003194C 258C08C0 */  addiu     $t4, $t4, %lo(gCurrentCamConfiguration)
/* CD50 80031950 8D890000 */  lw        $t1, 0x0($t4)
/* CD54 80031954 8D8A0004 */  lw        $t2, 0x4($t4)
/* CD58 80031958 8D8B0008 */  lw        $t3, 0x8($t4)
/* CD5C 8003195C AE29044C */  sw        $t1, 0x44C($s1)
/* CD60 80031960 AE2A0450 */  sw        $t2, 0x450($s1)
/* CD64 80031964 AE2B0454 */  sw        $t3, 0x454($s1)
/* CD68 80031968 8D89000C */  lw        $t1, 0xC($t4)
/* CD6C 8003196C 8D8A0010 */  lw        $t2, 0x10($t4)
/* CD70 80031970 8D8B0014 */  lw        $t3, 0x14($t4)
/* CD74 80031974 AE290458 */  sw        $t1, 0x458($s1)
/* CD78 80031978 AE2A045C */  sw        $t2, 0x45C($s1)
/* CD7C 8003197C AE2B0460 */  sw        $t3, 0x460($s1)
/* CD80 80031980 8D890018 */  lw        $t1, 0x18($t4)
/* CD84 80031984 AE290464 */  sw        $t1, 0x464($s1)
/* CD88 80031988 C6200490 */  lwc1      $f0, 0x490($s1)
/* CD8C 8003198C 962204D6 */  lhu       $v0, 0x4D6($s1)
/* CD90 80031990 96230504 */  lhu       $v1, 0x504($s1)
/* CD94 80031994 C62204C8 */  lwc1      $f2, 0x4C8($s1)
/* CD98 80031998 C62404CC */  lwc1      $f4, 0x4CC($s1)
/* CD9C 8003199C C62604D0 */  lwc1      $f6, 0x4D0($s1)
/* CDA0 800319A0 C62804B0 */  lwc1      $f8, 0x4B0($s1)
/* CDA4 800319A4 C62A04B4 */  lwc1      $f10, 0x4B4($s1)
/* CDA8 800319A8 C62C04B8 */  lwc1      $f12, 0x4B8($s1)
/* CDAC 800319AC 24100001 */  addiu     $s0, $zero, 0x1
/* CDB0 800319B0 AE240448 */  sw        $a0, 0x448($s1)
/* CDB4 800319B4 AE200484 */  sw        $zero, 0x484($s1)
/* CDB8 800319B8 AE200488 */  sw        $zero, 0x488($s1)
/* CDBC 800319BC A6200506 */  sh        $zero, 0x506($s1)
/* CDC0 800319C0 E620048C */  swc1      $f0, 0x48C($s1)
/* CDC4 800319C4 A62204D4 */  sh        $v0, 0x4D4($s1)
/* CDC8 800319C8 A62304D6 */  sh        $v1, 0x4D6($s1)
/* CDCC 800319CC E62204BC */  swc1      $f2, 0x4BC($s1)
/* CDD0 800319D0 E62404C0 */  swc1      $f4, 0x4C0($s1)
/* CDD4 800319D4 E62604C4 */  swc1      $f6, 0x4C4($s1)
/* CDD8 800319D8 E62804C8 */  swc1      $f8, 0x4C8($s1)
/* CDDC 800319DC E62A04CC */  swc1      $f10, 0x4CC($s1)
/* CDE0 800319E0 E62C04D0 */  swc1      $f12, 0x4D0($s1)
.L800319E4:
/* CDE4 800319E4 962204D4 */  lhu       $v0, 0x4D4($s1)
/* CDE8 800319E8 10400005 */  beqz      $v0, .L80031A00
/* CDEC 800319EC 4600B286 */   mov.s    $f10, $f22
/* CDF0 800319F0 C62A04BC */  lwc1      $f10, 0x4BC($s1)
/* CDF4 800319F4 C62804C0 */  lwc1      $f8, 0x4C0($s1)
/* CDF8 800319F8 0800C682 */  j         .L80031A08
/* CDFC 800319FC C62604C4 */   lwc1     $f6, 0x4C4($s1)
.L80031A00:
/* CE00 80031A00 C62804A0 */  lwc1      $f8, 0x4A0($s1)
/* CE04 80031A04 4600A186 */  mov.s     $f6, $f20
.L80031A08:
/* CE08 80031A08 962204D6 */  lhu       $v0, 0x4D6($s1)
/* CE0C 80031A0C 10400006 */  beqz      $v0, .L80031A28
/* CE10 80031A10 4600B106 */   mov.s    $f4, $f22
/* CE14 80031A14 C62004CC */  lwc1      $f0, 0x4CC($s1)
/* CE18 80031A18 C62404C8 */  lwc1      $f4, 0x4C8($s1)
/* CE1C 80031A1C C62204D0 */  lwc1      $f2, 0x4D0($s1)
/* CE20 80031A20 0800C68C */  j         .L80031A30
/* CE24 80031A24 E62004A0 */   swc1     $f0, 0x4A0($s1)
.L80031A28:
/* CE28 80031A28 C62004A0 */  lwc1      $f0, 0x4A0($s1)
/* CE2C 80031A2C 4600A086 */  mov.s     $f2, $f20
.L80031A30:
/* CE30 80031A30 0220202D */  daddu     $a0, $s1, $zero
/* CE34 80031A34 26260444 */  addiu     $a2, $s1, 0x444
/* CE38 80031A38 26270468 */  addiu     $a3, $s1, 0x468
/* CE3C 80031A3C 26220448 */  addiu     $v0, $s1, 0x448
/* CE40 80031A40 AFA20010 */  sw        $v0, 0x10($sp)
/* CE44 80031A44 26220484 */  addiu     $v0, $s1, 0x484
/* CE48 80031A48 E7AA0014 */  swc1      $f10, 0x14($sp)
/* CE4C 80031A4C E7A80018 */  swc1      $f8, 0x18($sp)
/* CE50 80031A50 E7A6001C */  swc1      $f6, 0x1C($sp)
/* CE54 80031A54 E7A40020 */  swc1      $f4, 0x20($sp)
/* CE58 80031A58 E7A00024 */  swc1      $f0, 0x24($sp)
/* CE5C 80031A5C E7A20028 */  swc1      $f2, 0x28($sp)
/* CE60 80031A60 86230008 */  lh        $v1, 0x8($s1)
/* CE64 80031A64 2625044C */  addiu     $a1, $s1, 0x44C
/* CE68 80031A68 AFA20030 */  sw        $v0, 0x30($sp)
/* CE6C 80031A6C AFB00034 */  sw        $s0, 0x34($sp)
/* CE70 80031A70 0C00C13F */  jal       update_camera_from_controller
/* CE74 80031A74 AFA3002C */   sw       $v1, 0x2C($sp)
/* CE78 80031A78 86220008 */  lh        $v0, 0x8($s1)
/* CE7C 80031A7C 10400013 */  beqz      $v0, .L80031ACC
/* CE80 80031A80 00000000 */   nop
/* CE84 80031A84 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* CE88 80031A88 44810000 */  mtc1      $at, $f0
/* CE8C 80031A8C 8E290468 */  lw        $t1, 0x468($s1)
/* CE90 80031A90 8E2A046C */  lw        $t2, 0x46C($s1)
/* CE94 80031A94 8E2B0470 */  lw        $t3, 0x470($s1)
/* CE98 80031A98 8E2C0474 */  lw        $t4, 0x474($s1)
/* CE9C 80031A9C AE29044C */  sw        $t1, 0x44C($s1)
/* CEA0 80031AA0 AE2A0450 */  sw        $t2, 0x450($s1)
/* CEA4 80031AA4 AE2B0454 */  sw        $t3, 0x454($s1)
/* CEA8 80031AA8 AE2C0458 */  sw        $t4, 0x458($s1)
/* CEAC 80031AAC 8E290478 */  lw        $t1, 0x478($s1)
/* CEB0 80031AB0 8E2A047C */  lw        $t2, 0x47C($s1)
/* CEB4 80031AB4 8E2B0480 */  lw        $t3, 0x480($s1)
/* CEB8 80031AB8 AE29045C */  sw        $t1, 0x45C($s1)
/* CEBC 80031ABC AE2A0460 */  sw        $t2, 0x460($s1)
/* CEC0 80031AC0 AE2B0464 */  sw        $t3, 0x464($s1)
/* CEC4 80031AC4 A6200008 */  sh        $zero, 0x8($s1)
/* CEC8 80031AC8 E6200484 */  swc1      $f0, 0x484($s1)
.L80031ACC:
/* CECC 80031ACC C622044C */  lwc1      $f2, 0x44C($s1)
/* CED0 80031AD0 C6200468 */  lwc1      $f0, 0x468($s1)
/* CED4 80031AD4 46001001 */  sub.s     $f0, $f2, $f0
/* CED8 80031AD8 3C014334 */  lui       $at, (0x43340000 >> 16)
/* CEDC 80031ADC 44813000 */  mtc1      $at, $f6
/* CEE0 80031AE0 00000000 */  nop
/* CEE4 80031AE4 4600303C */  c.lt.s    $f6, $f0
/* CEE8 80031AE8 00000000 */  nop
/* CEEC 80031AEC 45000006 */  bc1f      .L80031B08
/* CEF0 80031AF0 00000000 */   nop
/* CEF4 80031AF4 3C0143B4 */  lui       $at, (0x43B40000 >> 16)
/* CEF8 80031AF8 44810000 */  mtc1      $at, $f0
/* CEFC 80031AFC 00000000 */  nop
/* CF00 80031B00 46001001 */  sub.s     $f0, $f2, $f0
/* CF04 80031B04 E620044C */  swc1      $f0, 0x44C($s1)
.L80031B08:
/* CF08 80031B08 C624044C */  lwc1      $f4, 0x44C($s1)
/* CF0C 80031B0C C6200468 */  lwc1      $f0, 0x468($s1)
/* CF10 80031B10 46002001 */  sub.s     $f0, $f4, $f0
/* CF14 80031B14 3C01C334 */  lui       $at, (0xC3340000 >> 16)
/* CF18 80031B18 44811000 */  mtc1      $at, $f2
/* CF1C 80031B1C 00000000 */  nop
/* CF20 80031B20 4602003C */  c.lt.s    $f0, $f2
/* CF24 80031B24 00000000 */  nop
/* CF28 80031B28 45000006 */  bc1f      .L80031B44
/* CF2C 80031B2C 00000000 */   nop
/* CF30 80031B30 3C0143B4 */  lui       $at, (0x43B40000 >> 16)
/* CF34 80031B34 44810000 */  mtc1      $at, $f0
/* CF38 80031B38 00000000 */  nop
/* CF3C 80031B3C 46002000 */  add.s     $f0, $f4, $f0
/* CF40 80031B40 E620044C */  swc1      $f0, 0x44C($s1)
.L80031B44:
/* CF44 80031B44 C622044C */  lwc1      $f2, 0x44C($s1)
/* CF48 80031B48 C6200468 */  lwc1      $f0, 0x468($s1)
/* CF4C 80031B4C 46001301 */  sub.s     $f12, $f2, $f0
/* CF50 80031B50 44804000 */  mtc1      $zero, $f8
/* CF54 80031B54 00000000 */  nop
/* CF58 80031B58 4608603C */  c.lt.s    $f12, $f8
/* CF5C 80031B5C 00000000 */  nop
/* CF60 80031B60 45030001 */  bc1tl     .L80031B68
/* CF64 80031B64 46006307 */   neg.s    $f12, $f12
.L80031B68:
/* CF68 80031B68 460C303C */  c.lt.s    $f6, $f12
/* CF6C 80031B6C 00000000 */  nop
/* CF70 80031B70 45000005 */  bc1f      .L80031B88
/* CF74 80031B74 00000000 */   nop
/* CF78 80031B78 3C0143B4 */  lui       $at, (0x43B40000 >> 16)
/* CF7C 80031B7C 44810000 */  mtc1      $at, $f0
/* CF80 80031B80 00000000 */  nop
/* CF84 80031B84 460C0301 */  sub.s     $f12, $f0, $f12
.L80031B88:
/* CF88 80031B88 C6220454 */  lwc1      $f2, 0x454($s1)
/* CF8C 80031B8C C6200470 */  lwc1      $f0, 0x470($s1)
/* CF90 80031B90 46006506 */  mov.s     $f20, $f12
/* CF94 80031B94 46001301 */  sub.s     $f12, $f2, $f0
/* CF98 80031B98 4608603C */  c.lt.s    $f12, $f8
/* CF9C 80031B9C 00000000 */  nop
/* CFA0 80031BA0 45030001 */  bc1tl     .L80031BA8
/* CFA4 80031BA4 46006307 */   neg.s    $f12, $f12
.L80031BA8:
/* CFA8 80031BA8 460C303C */  c.lt.s    $f6, $f12
/* CFAC 80031BAC 00000000 */  nop
/* CFB0 80031BB0 45000005 */  bc1f      .L80031BC8
/* CFB4 80031BB4 00000000 */   nop
/* CFB8 80031BB8 3C0143B4 */  lui       $at, (0x43B40000 >> 16)
/* CFBC 80031BBC 44810000 */  mtc1      $at, $f0
/* CFC0 80031BC0 00000000 */  nop
/* CFC4 80031BC4 460C0301 */  sub.s     $f12, $f0, $f12
.L80031BC8:
/* CFC8 80031BC8 460CA03C */  c.lt.s    $f20, $f12
/* CFCC 80031BCC 00000000 */  nop
/* CFD0 80031BD0 45030001 */  bc1tl     .L80031BD8
/* CFD4 80031BD4 46006506 */   mov.s    $f20, $f12
.L80031BD8:
/* CFD8 80031BD8 C6220458 */  lwc1      $f2, 0x458($s1)
/* CFDC 80031BDC C6200474 */  lwc1      $f0, 0x474($s1)
/* CFE0 80031BE0 46001301 */  sub.s     $f12, $f2, $f0
/* CFE4 80031BE4 4608603C */  c.lt.s    $f12, $f8
/* CFE8 80031BE8 00000000 */  nop
/* CFEC 80031BEC 45030001 */  bc1tl     .L80031BF4
/* CFF0 80031BF0 46006307 */   neg.s    $f12, $f12
.L80031BF4:
/* CFF4 80031BF4 460C303C */  c.lt.s    $f6, $f12
/* CFF8 80031BF8 00000000 */  nop
/* CFFC 80031BFC 45000005 */  bc1f      .L80031C14
/* D000 80031C00 00000000 */   nop
/* D004 80031C04 3C0143B4 */  lui       $at, (0x43B40000 >> 16)
/* D008 80031C08 44810000 */  mtc1      $at, $f0
/* D00C 80031C0C 00000000 */  nop
/* D010 80031C10 460C0301 */  sub.s     $f12, $f0, $f12
.L80031C14:
/* D014 80031C14 460CA03C */  c.lt.s    $f20, $f12
/* D018 80031C18 00000000 */  nop
/* D01C 80031C1C 45030001 */  bc1tl     .L80031C24
/* D020 80031C20 46006506 */   mov.s    $f20, $f12
.L80031C24:
/* D024 80031C24 C6220450 */  lwc1      $f2, 0x450($s1)
/* D028 80031C28 C620046C */  lwc1      $f0, 0x46C($s1)
/* D02C 80031C2C 46001301 */  sub.s     $f12, $f2, $f0
/* D030 80031C30 4608603C */  c.lt.s    $f12, $f8
/* D034 80031C34 00000000 */  nop
/* D038 80031C38 45030001 */  bc1tl     .L80031C40
/* D03C 80031C3C 46006307 */   neg.s    $f12, $f12
.L80031C40:
/* D040 80031C40 460CA03C */  c.lt.s    $f20, $f12
/* D044 80031C44 00000000 */  nop
/* D048 80031C48 45030001 */  bc1tl     .L80031C50
/* D04C 80031C4C 46006506 */   mov.s    $f20, $f12
.L80031C50:
/* D050 80031C50 C620045C */  lwc1      $f0, 0x45C($s1)
/* D054 80031C54 C6220478 */  lwc1      $f2, 0x478($s1)
/* D058 80031C58 46020001 */  sub.s     $f0, $f0, $f2
/* D05C 80031C5C 46000302 */  mul.s     $f12, $f0, $f0
/* D060 80031C60 00000000 */  nop
/* D064 80031C64 C6240460 */  lwc1      $f4, 0x460($s1)
/* D068 80031C68 C620047C */  lwc1      $f0, 0x47C($s1)
/* D06C 80031C6C 46002101 */  sub.s     $f4, $f4, $f0
/* D070 80031C70 46042102 */  mul.s     $f4, $f4, $f4
/* D074 80031C74 00000000 */  nop
/* D078 80031C78 C6220480 */  lwc1      $f2, 0x480($s1)
/* D07C 80031C7C C6200464 */  lwc1      $f0, 0x464($s1)
/* D080 80031C80 46020001 */  sub.s     $f0, $f0, $f2
/* D084 80031C84 46000002 */  mul.s     $f0, $f0, $f0
/* D088 80031C88 00000000 */  nop
/* D08C 80031C8C 46046300 */  add.s     $f12, $f12, $f4
/* D090 80031C90 46006300 */  add.s     $f12, $f12, $f0
/* D094 80031C94 46086032 */  c.eq.s    $f12, $f8
/* D098 80031C98 00000000 */  nop
/* D09C 80031C9C 4501000E */  bc1t      .L80031CD8
/* D0A0 80031CA0 00000000 */   nop
/* D0A4 80031CA4 46006004 */  sqrt.s    $f0, $f12
/* D0A8 80031CA8 46000032 */  c.eq.s    $f0, $f0
/* D0AC 80031CAC 00000000 */  nop
/* D0B0 80031CB0 45010003 */  bc1t      .L80031CC0
/* D0B4 80031CB4 00000000 */   nop
/* D0B8 80031CB8 0C0187BC */  jal       sqrtf
/* D0BC 80031CBC 00000000 */   nop
.L80031CC0:
/* D0C0 80031CC0 3C01800A */  lui       $at, %hi(D_80098260)
/* D0C4 80031CC4 D4228260 */  ldc1      $f2, %lo(D_80098260)($at)
/* D0C8 80031CC8 46000021 */  cvt.d.s   $f0, $f0
/* D0CC 80031CCC 46220002 */  mul.d     $f0, $f0, $f2
/* D0D0 80031CD0 00000000 */  nop
/* D0D4 80031CD4 46200320 */  cvt.s.d   $f12, $f0
.L80031CD8:
/* D0D8 80031CD8 460CA03C */  c.lt.s    $f20, $f12
/* D0DC 80031CDC 00000000 */  nop
/* D0E0 80031CE0 45030001 */  bc1tl     .L80031CE8
/* D0E4 80031CE4 46006506 */   mov.s    $f20, $f12
.L80031CE8:
/* D0E8 80031CE8 3C0142B4 */  lui       $at, (0x42B40000 >> 16)
/* D0EC 80031CEC 44810000 */  mtc1      $at, $f0
/* D0F0 80031CF0 00000000 */  nop
/* D0F4 80031CF4 4614003C */  c.lt.s    $f0, $f20
/* D0F8 80031CF8 00000000 */  nop
/* D0FC 80031CFC 45030001 */  bc1tl     .L80031D04
/* D100 80031D00 46000506 */   mov.s    $f20, $f0
.L80031D04:
/* D104 80031D04 3C0141A0 */  lui       $at, (0x41A00000 >> 16)
/* D108 80031D08 44810000 */  mtc1      $at, $f0
/* D10C 80031D0C 00000000 */  nop
/* D110 80031D10 4600A03C */  c.lt.s    $f20, $f0
/* D114 80031D14 00000000 */  nop
/* D118 80031D18 45030001 */  bc1tl     .L80031D20
/* D11C 80031D1C 46000506 */   mov.s    $f20, $f0
.L80031D20:
/* D120 80031D20 44800000 */  mtc1      $zero, $f0
/* D124 80031D24 00000000 */  nop
/* D128 80031D28 4600A032 */  c.eq.s    $f20, $f0
/* D12C 80031D2C 00000000 */  nop
/* D130 80031D30 4501000E */  bc1t      .L80031D6C
/* D134 80031D34 00000000 */   nop
/* D138 80031D38 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* D13C 80031D3C 44812000 */  mtc1      $at, $f4
/* D140 80031D40 C620048C */  lwc1      $f0, 0x48C($s1)
/* D144 80031D44 46142083 */  div.s     $f2, $f4, $f20
/* D148 80031D48 46001082 */  mul.s     $f2, $f2, $f0
/* D14C 80031D4C 00000000 */  nop
/* D150 80031D50 C6200488 */  lwc1      $f0, 0x488($s1)
/* D154 80031D54 46020000 */  add.s     $f0, $f0, $f2
/* D158 80031D58 4600203C */  c.lt.s    $f4, $f0
/* D15C 80031D5C 00000000 */  nop
/* D160 80031D60 45000002 */  bc1f      .L80031D6C
/* D164 80031D64 E6200488 */   swc1     $f0, 0x488($s1)
/* D168 80031D68 E6240488 */  swc1      $f4, 0x488($s1)
.L80031D6C:
/* D16C 80031D6C C6200484 */  lwc1      $f0, 0x484($s1)
/* D170 80031D70 3C013FF0 */  lui       $at, (0x3FF00000 >> 16)
/* D174 80031D74 4481E800 */  mtc1      $at, $f29
/* D178 80031D78 4480E000 */  mtc1      $zero, $f28
/* D17C 80031D7C 46000021 */  cvt.d.s   $f0, $f0
/* D180 80031D80 463C003C */  c.lt.d    $f0, $f28
/* D184 80031D84 00000000 */  nop
/* D188 80031D88 45000036 */  bc1f      .L80031E64
/* D18C 80031D8C 00000000 */   nop
/* D190 80031D90 C6340508 */  lwc1      $f20, 0x508($s1)
/* D194 80031D94 3C01800A */  lui       $at, %hi(D_80098268)
/* D198 80031D98 D4388268 */  ldc1      $f24, %lo(D_80098268)($at)
/* D19C 80031D9C 4600A5A1 */  cvt.d.s   $f22, $f20
/* D1A0 80031DA0 4638B582 */  mul.d     $f22, $f22, $f24
/* D1A4 80031DA4 00000000 */  nop
/* D1A8 80031DA8 4620B5A0 */  cvt.s.d   $f22, $f22
/* D1AC 80031DAC 0C00A874 */  jal       cos_rad
/* D1B0 80031DB0 4600B306 */   mov.s    $f12, $f22
/* D1B4 80031DB4 C62C0488 */  lwc1      $f12, 0x488($s1)
/* D1B8 80031DB8 46006321 */  cvt.d.s   $f12, $f12
/* D1BC 80031DBC 46386302 */  mul.d     $f12, $f12, $f24
/* D1C0 80031DC0 00000000 */  nop
/* D1C4 80031DC4 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* D1C8 80031DC8 4481D000 */  mtc1      $at, $f26
/* D1CC 80031DCC 00000000 */  nop
/* D1D0 80031DD0 4614D501 */  sub.s     $f20, $f26, $f20
/* D1D4 80031DD4 4600A521 */  cvt.d.s   $f20, $f20
/* D1D8 80031DD8 46346302 */  mul.d     $f12, $f12, $f20
/* D1DC 80031DDC 00000000 */  nop
/* D1E0 80031DE0 461A0600 */  add.s     $f24, $f0, $f26
/* D1E4 80031DE4 4600B0A1 */  cvt.d.s   $f2, $f22
/* D1E8 80031DE8 3C014000 */  lui       $at, (0x40000000 >> 16)
/* D1EC 80031DEC 4481A000 */  mtc1      $at, $f20
/* D1F0 80031DF0 46226300 */  add.d     $f12, $f12, $f2
/* D1F4 80031DF4 4618A603 */  div.s     $f24, $f20, $f24
/* D1F8 80031DF8 0C00A874 */  jal       cos_rad
/* D1FC 80031DFC 46206320 */   cvt.s.d  $f12, $f12
/* D200 80031E00 4600B306 */  mov.s     $f12, $f22
/* D204 80031E04 0C00A874 */  jal       cos_rad
/* D208 80031E08 460005A1 */   cvt.d.s  $f22, $f0
/* D20C 80031E0C 46000021 */  cvt.d.s   $f0, $f0
/* D210 80031E10 4620E001 */  sub.d     $f0, $f28, $f0
/* D214 80031E14 3C013FE0 */  lui       $at, (0x3FE00000 >> 16)
/* D218 80031E18 44811800 */  mtc1      $at, $f3
/* D21C 80031E1C 44801000 */  mtc1      $zero, $f2
/* D220 80031E20 00000000 */  nop
/* D224 80031E24 46220002 */  mul.d     $f0, $f0, $f2
/* D228 80031E28 00000000 */  nop
/* D22C 80031E2C 4620B580 */  add.d     $f22, $f22, $f0
/* D230 80031E30 4600C621 */  cvt.d.s   $f24, $f24
/* D234 80031E34 4638B582 */  mul.d     $f22, $f22, $f24
/* D238 80031E38 00000000 */  nop
/* D23C 80031E3C 4620B5A0 */  cvt.s.d   $f22, $f22
/* D240 80031E40 461AB680 */  add.s     $f26, $f22, $f26
/* D244 80031E44 461AA501 */  sub.s     $f20, $f20, $f26
/* D248 80031E48 3C01800A */  lui       $at, %hi(D_80098270)
/* D24C 80031E4C D4208270 */  ldc1      $f0, %lo(D_80098270)($at)
/* D250 80031E50 4600A521 */  cvt.d.s   $f20, $f20
/* D254 80031E54 4620A502 */  mul.d     $f20, $f20, $f0
/* D258 80031E58 00000000 */  nop
/* D25C 80031E5C 4620A5A0 */  cvt.s.d   $f22, $f20
/* D260 80031E60 E6360484 */  swc1      $f22, 0x484($s1)
.L80031E64:
/* D264 80031E64 C6200484 */  lwc1      $f0, 0x484($s1)
/* D268 80031E68 3C013F80 */  lui       $at, (0x3F800000 >> 16)
/* D26C 80031E6C 44814000 */  mtc1      $at, $f8
/* D270 80031E70 00000000 */  nop
/* D274 80031E74 4600403E */  c.le.s    $f8, $f0
/* D278 80031E78 00000000 */  nop
/* D27C 80031E7C 45000003 */  bc1f      .L80031E8C
/* D280 80031E80 00000000 */   nop
/* D284 80031E84 E6280484 */  swc1      $f8, 0x484($s1)
/* D288 80031E88 AE200488 */  sw        $zero, 0x488($s1)
.L80031E8C:
/* D28C 80031E8C C6260484 */  lwc1      $f6, 0x484($s1)
/* D290 80031E90 C6200468 */  lwc1      $f0, 0x468($s1)
/* D294 80031E94 46060002 */  mul.s     $f0, $f0, $f6
/* D298 80031E98 00000000 */  nop
/* D29C 80031E9C 46064201 */  sub.s     $f8, $f8, $f6
/* D2A0 80031EA0 C622044C */  lwc1      $f2, 0x44C($s1)
/* D2A4 80031EA4 C7B00038 */  lwc1      $f16, 0x38($sp)
/* D2A8 80031EA8 46081082 */  mul.s     $f2, $f2, $f8
/* D2AC 80031EAC 00000000 */  nop
/* D2B0 80031EB0 E63004A4 */  swc1      $f16, 0x4A4($s1)
/* D2B4 80031EB4 E63E04A8 */  swc1      $f30, 0x4A8($s1)
/* D2B8 80031EB8 C7B0003C */  lwc1      $f16, 0x3C($sp)
/* D2BC 80031EBC 46001080 */  add.s     $f2, $f2, $f0
/* D2C0 80031EC0 3C12800A */  lui       $s2, %hi(gCurrentCamConfiguration)
/* D2C4 80031EC4 265208C0 */  addiu     $s2, $s2, %lo(gCurrentCamConfiguration)
/* D2C8 80031EC8 E63004AC */  swc1      $f16, 0x4AC($s1)
/* D2CC 80031ECC E6420000 */  swc1      $f2, 0x0($s2)
/* D2D0 80031ED0 C6240450 */  lwc1      $f4, 0x450($s1)
/* D2D4 80031ED4 46082102 */  mul.s     $f4, $f4, $f8
/* D2D8 80031ED8 00000000 */  nop
/* D2DC 80031EDC C620046C */  lwc1      $f0, 0x46C($s1)
/* D2E0 80031EE0 46060002 */  mul.s     $f0, $f0, $f6
/* D2E4 80031EE4 00000000 */  nop
/* D2E8 80031EE8 46002100 */  add.s     $f4, $f4, $f0
/* D2EC 80031EEC E6440004 */  swc1      $f4, 0x4($s2)
/* D2F0 80031EF0 C6220454 */  lwc1      $f2, 0x454($s1)
/* D2F4 80031EF4 46081082 */  mul.s     $f2, $f2, $f8
/* D2F8 80031EF8 00000000 */  nop
/* D2FC 80031EFC C6200470 */  lwc1      $f0, 0x470($s1)
/* D300 80031F00 46060002 */  mul.s     $f0, $f0, $f6
/* D304 80031F04 00000000 */  nop
/* D308 80031F08 46001080 */  add.s     $f2, $f2, $f0
/* D30C 80031F0C E6420008 */  swc1      $f2, 0x8($s2)
/* D310 80031F10 C6220458 */  lwc1      $f2, 0x458($s1)
/* D314 80031F14 46081082 */  mul.s     $f2, $f2, $f8
/* D318 80031F18 00000000 */  nop
/* D31C 80031F1C C6200474 */  lwc1      $f0, 0x474($s1)
/* D320 80031F20 46060002 */  mul.s     $f0, $f0, $f6
/* D324 80031F24 00000000 */  nop
/* D328 80031F28 46001080 */  add.s     $f2, $f2, $f0
/* D32C 80031F2C E642000C */  swc1      $f2, 0xC($s2)
/* D330 80031F30 C622045C */  lwc1      $f2, 0x45C($s1)
/* D334 80031F34 46081082 */  mul.s     $f2, $f2, $f8
/* D338 80031F38 00000000 */  nop
/* D33C 80031F3C C6200478 */  lwc1      $f0, 0x478($s1)
/* D340 80031F40 46060002 */  mul.s     $f0, $f0, $f6
/* D344 80031F44 00000000 */  nop
/* D348 80031F48 46001080 */  add.s     $f2, $f2, $f0
/* D34C 80031F4C E6420010 */  swc1      $f2, 0x10($s2)
/* D350 80031F50 C6220460 */  lwc1      $f2, 0x460($s1)
/* D354 80031F54 46081082 */  mul.s     $f2, $f2, $f8
/* D358 80031F58 00000000 */  nop
/* D35C 80031F5C C620047C */  lwc1      $f0, 0x47C($s1)
/* D360 80031F60 46060002 */  mul.s     $f0, $f0, $f6
/* D364 80031F64 00000000 */  nop
/* D368 80031F68 46001080 */  add.s     $f2, $f2, $f0
/* D36C 80031F6C E6420014 */  swc1      $f2, 0x14($s2)
/* D370 80031F70 C6220464 */  lwc1      $f2, 0x464($s1)
/* D374 80031F74 46081082 */  mul.s     $f2, $f2, $f8
/* D378 80031F78 00000000 */  nop
/* D37C 80031F7C C6200480 */  lwc1      $f0, 0x480($s1)
/* D380 80031F80 46060002 */  mul.s     $f0, $f0, $f6
/* D384 80031F84 00000000 */  nop
/* D388 80031F88 46001080 */  add.s     $f2, $f2, $f0
/* D38C 80031F8C E6420018 */  swc1      $f2, 0x18($s2)
/* D390 80031F90 8622002A */  lh        $v0, 0x2A($s1)
/* D394 80031F94 44820000 */  mtc1      $v0, $f0
/* D398 80031F98 00000000 */  nop
/* D39C 80031F9C 46800020 */  cvt.s.w   $f0, $f0
/* D3A0 80031FA0 46002102 */  mul.s     $f4, $f4, $f0
/* D3A4 80031FA4 00000000 */  nop
/* D3A8 80031FA8 3C01800A */  lui       $at, %hi(D_80098278)
/* D3AC 80031FAC D4208278 */  ldc1      $f0, %lo(D_80098278)($at)
/* D3B0 80031FB0 46002121 */  cvt.d.s   $f4, $f4
/* D3B4 80031FB4 46202102 */  mul.d     $f4, $f4, $f0
/* D3B8 80031FB8 00000000 */  nop
/* D3BC 80031FBC 0220202D */  daddu     $a0, $s1, $zero
/* D3C0 80031FC0 46202120 */  cvt.s.d   $f4, $f4
/* D3C4 80031FC4 0C00C114 */  jal       func_80030450
/* D3C8 80031FC8 E6440004 */   swc1     $f4, 0x4($s2)
/* D3CC 80031FCC C6540000 */  lwc1      $f20, 0x0($s2)
/* D3D0 80031FD0 3C01800A */  lui       $at, %hi(D_800A08E0)
/* D3D4 80031FD4 C42008E0 */  lwc1      $f0, %lo(D_800A08E0)($at)
/* D3D8 80031FD8 4600A500 */  add.s     $f20, $f20, $f0
/* D3DC 80031FDC 0C00A8BB */  jal       sin_deg
/* D3E0 80031FE0 4600A306 */   mov.s    $f12, $f20
/* D3E4 80031FE4 4600A306 */  mov.s     $f12, $f20
/* D3E8 80031FE8 0C00A8D4 */  jal       cos_deg
/* D3EC 80031FEC 46000686 */   mov.s    $f26, $f0
/* D3F0 80031FF0 3C10800A */  lui       $s0, %hi(D_800A08DC)
/* D3F4 80031FF4 261008DC */  addiu     $s0, $s0, %lo(D_800A08DC)
/* D3F8 80031FF8 C6420008 */  lwc1      $f2, 0x8($s2)
/* D3FC 80031FFC C60C0000 */  lwc1      $f12, 0x0($s0)
/* D400 80032000 460C1300 */  add.s     $f12, $f2, $f12
/* D404 80032004 0C00A8D4 */  jal       cos_deg
/* D408 80032008 46000607 */   neg.s    $f24, $f0
/* D40C 8003200C C6420008 */  lwc1      $f2, 0x8($s2)
/* D410 80032010 C60C0000 */  lwc1      $f12, 0x0($s0)
/* D414 80032014 460C1300 */  add.s     $f12, $f2, $f12
/* D418 80032018 0C00A8BB */  jal       sin_deg
/* D41C 8003201C 46000586 */   mov.s    $f22, $f0
/* D420 80032020 96220002 */  lhu       $v0, 0x2($s1)
/* D424 80032024 30420002 */  andi      $v0, $v0, 0x2
/* D428 80032028 14400007 */  bnez      $v0, .L80032048
/* D42C 8003202C 46000506 */   mov.s    $f20, $f0
/* D430 80032030 C6420004 */  lwc1      $f2, 0x4($s2)
/* D434 80032034 46141082 */  mul.s     $f2, $f2, $f20
/* D438 80032038 00000000 */  nop
/* D43C 8003203C C6400014 */  lwc1      $f0, 0x14($s2)
/* D440 80032040 46020000 */  add.s     $f0, $f0, $f2
/* D444 80032044 E6200040 */  swc1      $f0, 0x40($s1)
.L80032048:
/* D448 80032048 C6420004 */  lwc1      $f2, 0x4($s2)
/* D44C 8003204C 4602D082 */  mul.s     $f2, $f26, $f2
/* D450 80032050 00000000 */  nop
/* D454 80032054 46161082 */  mul.s     $f2, $f2, $f22
/* D458 80032058 00000000 */  nop
/* D45C 8003205C C6400010 */  lwc1      $f0, 0x10($s2)
/* D460 80032060 46020001 */  sub.s     $f0, $f0, $f2
/* D464 80032064 E620003C */  swc1      $f0, 0x3C($s1)
/* D468 80032068 C6420004 */  lwc1      $f2, 0x4($s2)
/* D46C 8003206C 4602C082 */  mul.s     $f2, $f24, $f2
/* D470 80032070 00000000 */  nop
/* D474 80032074 46161082 */  mul.s     $f2, $f2, $f22
/* D478 80032078 00000000 */  nop
/* D47C 8003207C C6400018 */  lwc1      $f0, 0x18($s2)
/* D480 80032080 46020001 */  sub.s     $f0, $f0, $f2
/* D484 80032084 E6200044 */  swc1      $f0, 0x44($s1)
/* D488 80032088 C64C000C */  lwc1      $f12, 0xC($s2)
/* D48C 8003208C 0C00A8D4 */  jal       cos_deg
/* D490 80032090 46006307 */   neg.s    $f12, $f12
/* D494 80032094 C64C000C */  lwc1      $f12, 0xC($s2)
/* D498 80032098 46000586 */  mov.s     $f22, $f0
/* D49C 8003209C 0C00A8BB */  jal       sin_deg
/* D4A0 800320A0 46006307 */   neg.s    $f12, $f12
/* D4A4 800320A4 C624003C */  lwc1      $f4, 0x3C($s1)
/* D4A8 800320A8 C6420010 */  lwc1      $f2, 0x10($s2)
/* D4AC 800320AC 46022032 */  c.eq.s    $f4, $f2
/* D4B0 800320B0 00000000 */  nop
/* D4B4 800320B4 4500000A */  bc1f      .L800320E0
/* D4B8 800320B8 46000506 */   mov.s    $f20, $f0
/* D4BC 800320BC C6220044 */  lwc1      $f2, 0x44($s1)
/* D4C0 800320C0 C6400018 */  lwc1      $f0, 0x18($s2)
/* D4C4 800320C4 46001032 */  c.eq.s    $f2, $f0
/* D4C8 800320C8 00000000 */  nop
/* D4CC 800320CC 45000004 */  bc1f      .L800320E0
/* D4D0 800320D0 00000000 */   nop
/* D4D4 800320D4 44802000 */  mtc1      $zero, $f4
/* D4D8 800320D8 0800C840 */  j         .L80032100
/* D4DC 800320DC 00000000 */   nop
.L800320E0:
/* D4E0 800320E0 3C02800A */  lui       $v0, %hi(gCurrentCamConfiguration)
/* D4E4 800320E4 244208C0 */  addiu     $v0, $v0, %lo(gCurrentCamConfiguration)
/* D4E8 800320E8 C62C003C */  lwc1      $f12, 0x3C($s1)
/* D4EC 800320EC C62E0044 */  lwc1      $f14, 0x44($s1)
/* D4F0 800320F0 8C460010 */  lw        $a2, 0x10($v0)
/* D4F4 800320F4 0C00A7B5 */  jal       dist2D
/* D4F8 800320F8 8C470018 */   lw       $a3, 0x18($v0)
/* D4FC 800320FC 46000106 */  mov.s     $f4, $f0
.L80032100:
/* D500 80032100 3C03800A */  lui       $v1, %hi(gCurrentCamConfiguration)
/* D504 80032104 246308C0 */  addiu     $v1, $v1, %lo(gCurrentCamConfiguration)
/* D508 80032108 C4600014 */  lwc1      $f0, 0x14($v1)
/* D50C 8003210C 96220002 */  lhu       $v0, 0x2($s1)
/* D510 80032110 C6260040 */  lwc1      $f6, 0x40($s1)
/* D514 80032114 30420002 */  andi      $v0, $v0, 0x2
/* D518 80032118 14400008 */  bnez      $v0, .L8003213C
/* D51C 8003211C 46060201 */   sub.s    $f8, $f0, $f6
/* D520 80032120 46142002 */  mul.s     $f0, $f4, $f20
/* D524 80032124 00000000 */  nop
/* D528 80032128 46164082 */  mul.s     $f2, $f8, $f22
/* D52C 8003212C 00000000 */  nop
/* D530 80032130 46020000 */  add.s     $f0, $f0, $f2
/* D534 80032134 46003000 */  add.s     $f0, $f6, $f0
/* D538 80032138 E620004C */  swc1      $f0, 0x4C($s1)
.L8003213C:
/* D53C 8003213C 46162102 */  mul.s     $f4, $f4, $f22
/* D540 80032140 00000000 */  nop
/* D544 80032144 46144002 */  mul.s     $f0, $f8, $f20
/* D548 80032148 00000000 */  nop
/* D54C 8003214C 46002101 */  sub.s     $f4, $f4, $f0
/* D550 80032150 4604D002 */  mul.s     $f0, $f26, $f4
/* D554 80032154 00000000 */  nop
/* D558 80032158 4604C102 */  mul.s     $f4, $f24, $f4
/* D55C 8003215C 00000000 */  nop
/* D560 80032160 C622003C */  lwc1      $f2, 0x3C($s1)
/* D564 80032164 46001080 */  add.s     $f2, $f2, $f0
/* D568 80032168 C6200044 */  lwc1      $f0, 0x44($s1)
/* D56C 8003216C 46040000 */  add.s     $f0, $f0, $f4
/* D570 80032170 E6220048 */  swc1      $f2, 0x48($s1)
/* D574 80032174 3C01800A */  lui       $at, %hi(D_800A08E0)
/* D578 80032178 C42208E0 */  lwc1      $f2, %lo(D_800A08E0)($at)
/* D57C 8003217C E6200050 */  swc1      $f0, 0x50($s1)
/* D580 80032180 C4600000 */  lwc1      $f0, 0x0($v1)
/* D584 80032184 46020000 */  add.s     $f0, $f0, $f2
/* D588 80032188 C6240048 */  lwc1      $f4, 0x48($s1)
/* D58C 8003218C E620006C */  swc1      $f0, 0x6C($s1)
/* D590 80032190 E6200084 */  swc1      $f0, 0x84($s1)
/* D594 80032194 C4600004 */  lwc1      $f0, 0x4($v1)
/* D598 80032198 E6200078 */  swc1      $f0, 0x78($s1)
/* D59C 8003219C C4600000 */  lwc1      $f0, 0x0($v1)
/* D5A0 800321A0 C622004C */  lwc1      $f2, 0x4C($s1)
/* D5A4 800321A4 46000007 */  neg.s     $f0, $f0
/* D5A8 800321A8 E6200090 */  swc1      $f0, 0x90($s1)
/* D5AC 800321AC C4600008 */  lwc1      $f0, 0x8($v1)
/* D5B0 800321B0 C466000C */  lwc1      $f6, 0xC($v1)
/* D5B4 800321B4 E6220058 */  swc1      $f2, 0x58($s1)
/* D5B8 800321B8 C6220050 */  lwc1      $f2, 0x50($s1)
/* D5BC 800321BC E6240054 */  swc1      $f4, 0x54($s1)
/* D5C0 800321C0 46000007 */  neg.s     $f0, $f0
/* D5C4 800321C4 46060001 */  sub.s     $f0, $f0, $f6
/* D5C8 800321C8 AE20007C */  sw        $zero, 0x7C($s1)
/* D5CC 800321CC E622005C */  swc1      $f2, 0x5C($s1)
/* D5D0 800321D0 E6200094 */  swc1      $f0, 0x94($s1)
/* D5D4 800321D4 8FBF004C */  lw        $ra, 0x4C($sp)
/* D5D8 800321D8 8FB20048 */  lw        $s2, 0x48($sp)
/* D5DC 800321DC 8FB10044 */  lw        $s1, 0x44($sp)
/* D5E0 800321E0 8FB00040 */  lw        $s0, 0x40($sp)
/* D5E4 800321E4 D7BE0078 */  ldc1      $f30, 0x78($sp)
/* D5E8 800321E8 D7BC0070 */  ldc1      $f28, 0x70($sp)
/* D5EC 800321EC D7BA0068 */  ldc1      $f26, 0x68($sp)
/* D5F0 800321F0 D7B80060 */  ldc1      $f24, 0x60($sp)
/* D5F4 800321F4 D7B60058 */  ldc1      $f22, 0x58($sp)
/* D5F8 800321F8 D7B40050 */  ldc1      $f20, 0x50($sp)
/* D5FC 800321FC 03E00008 */  jr        $ra
/* D600 80032200 27BD0080 */   addiu    $sp, $sp, 0x80
/* D604 80032204 00000000 */  nop
/* D608 80032208 00000000 */  nop
/* D60C 8003220C 00000000 */  nop

### DECOMPILED C INSTRUCTIONS:

void update_camera_zone_interp(Camera* camera) {
    CameraControlSettings* currentController;
    CameraControlSettings* cs;
    CameraControlSettings* cs2;
    f32 targetX;
    f32 targetY;
    f32 targetZ;
    f32 deltaX;
    f32 deltaY;
    f32 deltaZ;
    f32 maxDelta;
    f32 delta;
    f32 deltaSqSum;
    f32 panPhase;
    f32 temp_f20_2;
    f32 panRad;
    f32 cosAngle;
    f32 sinAngle;
    f32 temp_f24;
    f32 temp_f24_2;
    f32 temp_f26;
    f32 temp_f4_4;
    f32 interpAlpha;
    f32 interpAlphaInv;
    f32 temp_f8_2;
    f64 temp_f22_2;
    s32 cond2;
    f32 posX;
    f32 posY;
    f32 posZ;
    f32 tX;
    f32 tY;
    f32 tZ;
    s32 changingZone;
    f32 dist;
    f32 tempX;
    f32 tempZ;

    targetX = camera->targetPos.x;
    targetY = camera->targetPos.y;
    targetZ = camera->targetPos.z;
    changingZone = FALSE;

    if (camera->isChangingMap) {
        camera->currentController = NULL;
        camera->prevController = NULL;
        camera->linearInterp = 0.0f;
        camera->unk_494 = 0.0f;
        camera->savedTargetY = targetY;
        camera->unk_98 = 0;
        camera->unk_9C = 0;
        camera->prevTargetPos.x = 0.0f;
        camera->prevTargetPos.y = 0.0f;
        camera->prevTargetPos.z = 0.0f;
        camera->prevPrevFollowFlags = 0;
        camera->prevFollowFlags = 0;
        camera->panPhase = 0.0f;
        D_800A08DC = 0.0f;
        D_800A08E0 = 0.0f;
        camera->interpAlpha = 1.0f;
        camera->unk_498 = 1.0f;
        camera->linearInterpScale = 1.0f;
    }
    tempX = targetX;
    if (camera->moveFlags & CAMERA_MOVE_IGNORE_PLAYER_Y) {
        camera->unk_498 = 0.0f;
    } else if (camera->unk_494 != targetY) {
        camera->unk_494 = targetY;
        camera->unk_498 = 0.0f;
    }

    if (targetY < camera->unk_494 && targetY <= camera->savedTargetY) {
        camera->unk_494 = targetY;
        camera->unk_498 = 1.0f;
    }

    camera->unk_498 += (1.01 - camera->unk_498) / camera->unk_49C;

    if (camera->unk_498 > 1.0) {
        camera->unk_498 = 1.0f;
    }

    if (camera->moveFlags & CAMERA_MOVE_FLAG_4) {
        camera->unk_498 += 0.3;
        if (camera->unk_498 >= 1.0) {
            camera->unk_498 = 1.0f;
        }
    }

    if (!(camera->moveFlags & CAMERA_MOVE_FLAG_2)) {
        camera->savedTargetY += (camera->unk_494 - camera->savedTargetY) * camera->unk_498;
    }

    tempZ = targetZ;
    if (camera->panActive
        || camera->prevTargetPos.x != targetX
        || camera->prevTargetPos.y != targetY
        || camera->prevTargetPos.z != targetZ
        || camera->isChangingMap
    ) {

        if (camera->followPlayer) {
            cs = &camera->controlSettings;
        } else {
            cs = test_ray_zone_aabb(targetX, targetY + 10.0f, targetZ);
        }

        cond2 = FALSE;
        cs2 = cs;
        currentController = camera->currentController;
        if (cs != NULL
            && currentController != NULL
            && cs->type == currentController->type
            && cs->flag == currentController->flag
            && cs->boomLength == currentController->boomLength
            && cs->boomPitch == currentController->boomPitch
            && cs->viewPitch == currentController->viewPitch
        ) {
            switch (cs->type) {
                case CAM_CONTROL_FIXED_ORIENTATION:
                    if (cs->points.two.Ax == currentController->points.two.Ax
                        && cs->points.two.Az == currentController->points.two.Az
                        && cs->points.two.Bx == currentController->points.two.Bx
                        && cs->points.two.Bz == currentController->points.two.Bz
                    ) {
                        cond2 = TRUE;
                    }
                    break;
                case CAM_CONTROL_LOOK_AT_POINT:
                    switch (cs->flag){
                        case 0:
                            if (cs->points.two.Ax == currentController->points.two.Ax
                                && cs->points.two.Az == currentController->points.two.Az
                            ) {
                                cond2 = TRUE;
                            }
                            break;
                        case 1:
                            if (cs->points.two.Ax == currentController->points.two.Ax
                                && cs->points.two.Az == currentController->points.two.Az
                                && cs->points.two.Bx == currentController->points.two.Bx
                                && cs->points.two.Bz == currentController->points.two.Bz
                            ) {
                                cond2 = TRUE;
                            }
                            break;
                    }
                    break;
                default:
                    if (cs2->points.two.Ax == currentController->points.two.Ax
                        && cs2->points.two.Az == currentController->points.two.Az
                        && cs2->points.two.Ay == currentController->points.two.Ay
                        && cs2->points.two.By == currentController->points.two.By
                        && cs2->points.two.Bx == currentController->points.two.Bx
                        && cs2->points.two.Bz == currentController->points.two.Bz
                    ) {
                        cond2 = TRUE;
                    }
                    break;
            }
        }

        if (camera->panActive || (!cond2 && cs2 != currentController)) {
            if (camera->interpAlpha == 1.0f) {
                camera->prevController = camera->currentController;
            } else {
                camera->prevController = (CameraControlSettings*) CAMERA_SETTINGS_PTR_MINUS_1;
            }
            changingZone = TRUE;
            camera->prevConfiguration = gCurrentCamConfiguration;
            camera->currentController = cs;
            camera->interpAlpha = 0.0f;
            camera->linearInterp = 0.0f;
            camera->panActive = FALSE;
            camera->linearInterpScale = camera->moveSpeed;
            camera->prevPrevFollowFlags = camera->prevFollowFlags;
            camera->prevFollowFlags = camera->followPlayer;
            camera->prevPrevMovePos.x = camera->prevMovePos.x;
            camera->prevPrevMovePos.y = camera->prevMovePos.y;
            camera->prevPrevMovePos.z = camera->prevMovePos.z;
            camera->prevMovePos.x = camera->movePos.x;
            camera->prevMovePos.y = camera->movePos.y;
            camera->prevMovePos.z = camera->movePos.z;
        }
    }

    if (camera->prevPrevFollowFlags) {
        posX = camera->prevPrevMovePos.x;
        posY = camera->prevPrevMovePos.y;
        posZ = camera->prevPrevMovePos.z;
    } else {
        posX = tempX;
        posY = camera->savedTargetY;
        posZ = tempZ;
    }

    if (camera->prevFollowFlags) {
        camera->savedTargetY = camera->prevMovePos.y;
        tX = camera->prevMovePos.x;
        tY = camera->savedTargetY;
        tZ = camera->prevMovePos.z;
    } else {
        tX = tempX;
        tY = camera->savedTargetY;
        tZ = tempZ;
    }

    update_camera_from_controller(camera, &camera->prevConfiguration, &camera->prevController,
                                  &camera->goalConfiguration, &camera->currentController, posX, posY, posZ, tX, tY, tZ,
                                  camera->isChangingMap, &camera->interpAlpha, changingZone);

    if (camera->isChangingMap) {
        camera->prevConfiguration = camera->goalConfiguration;
        camera->isChangingMap = FALSE;
        camera->interpAlpha = 1.0f;
    }

    if (camera->prevConfiguration.boomYaw - camera->goalConfiguration.boomYaw > 180.0f) {
        camera->prevConfiguration.boomYaw -= 360.0f;
    }
    if (camera->prevConfiguration.boomYaw - camera->goalConfiguration.boomYaw < -180.0f) {
        camera->prevConfiguration.boomYaw += 360.0f;
    }

    delta = camera->prevConfiguration.boomYaw - camera->goalConfiguration.boomYaw;
    if (delta < 0.0f) {
        delta = -delta;
    }
    if (delta > 180.0f) {
        delta = 360.0f - delta;
    }
    maxDelta = delta;

    delta = camera->prevConfiguration.boomPitch - camera->goalConfiguration.boomPitch;
    if (delta < 0.0f) {
        delta = -delta;
    }
    if (delta > 180.0f) {
        delta = 360.0f - delta;
    }
    if (maxDelta < delta) {
        maxDelta = delta;
    }

    delta = camera->prevConfiguration.viewPitch - camera->goalConfiguration.viewPitch;
    if (delta < 0.0f) {
        delta = -delta;
    }
    if (delta > 180.0f) {
        delta = 360.0f - delta;
    }
    if (maxDelta < delta) {
        maxDelta = delta;
    }

    delta = camera->prevConfiguration.boomLength - camera->goalConfiguration.boomLength;
    if (delta < 0.0f) {
        delta = -delta;
    }
    if (maxDelta < delta) {
        maxDelta = delta;
    }

    deltaX = camera->prevConfiguration.targetPos.x - camera->goalConfiguration.targetPos.x;
    deltaY = camera->prevConfiguration.targetPos.y - camera->goalConfiguration.targetPos.y;
    deltaZ = camera->prevConfiguration.targetPos.z - camera->goalConfiguration.targetPos.z;
    delta = SQ(deltaX);
    delta += SQ(deltaY);
    delta += SQ(deltaZ);

    if (delta != 0.0f) {
        delta = sqrtf(delta) * 0.2;
    }

    if (maxDelta < delta) {
        maxDelta = delta;
        delta++;
        delta--;
    }
    if (maxDelta > 90.0f) {
        maxDelta = 90.0f;
    }
    if (maxDelta < 20.0f) {
        maxDelta = 20.0f;
    }

    if (maxDelta != 0.0f) {
        camera->linearInterp += (1.0f / maxDelta) * camera->linearInterpScale;
        if (camera->linearInterp > 1.0f) {
            camera->linearInterp = 1.0f;
        }
    }

    if (camera->interpAlpha < 1.0) {
        panPhase = camera->panPhase;
        panRad = panPhase * PI_D;
        temp_f24 = 2.0f / (cos_rad(panRad) + 1.0f);
        temp_f22_2 = cos_rad((camera->linearInterp * PI_D * (1.0f - panPhase)) + panRad);
        cosAngle = (temp_f22_2 + (1.0 - cos_rad(panRad)) * 0.5) * temp_f24;
        cosAngle = (2.0f - (cosAngle + 1.0f)) * 0.5001;
        camera->interpAlpha = cosAngle;
    }

    if (camera->interpAlpha >= 1.0f) {
        camera->interpAlpha = 1.0f;
        camera->linearInterp = 0.0f;
    }

    camera->prevTargetPos.x = targetX;
    camera->prevTargetPos.y = targetY;
    camera->prevTargetPos.z = targetZ;

    interpAlpha = camera->interpAlpha;
    interpAlphaInv = 1.0f - interpAlpha;
    gCurrentCamConfiguration.boomYaw = (camera->prevConfiguration.boomYaw * interpAlphaInv) + (camera->goalConfiguration.boomYaw * interpAlpha);
    gCurrentCamConfiguration.boomLength = (camera->prevConfiguration.boomLength * interpAlphaInv) + (camera->goalConfiguration.boomLength * interpAlpha);
    gCurrentCamConfiguration.boomPitch = (camera->prevConfiguration.boomPitch * interpAlphaInv) + (camera->goalConfiguration.boomPitch * interpAlpha);
    gCurrentCamConfiguration.viewPitch = (camera->prevConfiguration.viewPitch * interpAlphaInv) + (camera->goalConfiguration.viewPitch * interpAlpha);
    gCurrentCamConfiguration.targetPos.x = (camera->prevConfiguration.targetPos.x * interpAlphaInv) + (camera->goalConfiguration.targetPos.x * interpAlpha);
    gCurrentCamConfiguration.targetPos.y = (camera->prevConfiguration.targetPos.y * interpAlphaInv) + (camera->goalConfiguration.targetPos.y * interpAlpha);
    gCurrentCamConfiguration.targetPos.z = (camera->prevConfiguration.targetPos.z * interpAlphaInv) + (camera->goalConfiguration.targetPos.z * interpAlpha);
    gCurrentCamConfiguration.boomLength *= camera->zoomPercent;
    gCurrentCamConfiguration.boomLength *= 0.01;

    func_80030450(camera);
    temp_f20_2 = gCurrentCamConfiguration.boomYaw + D_800A08E0;
    temp_f26 = sin_deg(temp_f20_2);
    temp_f24_2 = -cos_deg(temp_f20_2);
    cosAngle = cos_deg(gCurrentCamConfiguration.boomPitch + D_800A08DC);
    sinAngle = sin_deg(gCurrentCamConfiguration.boomPitch + D_800A08DC);

    if (!(camera->moveFlags & CAMERA_MOVE_FLAG_2)) {
        camera->lookAt_eye.y = gCurrentCamConfiguration.targetPos.y + (gCurrentCamConfiguration.boomLength * sinAngle);
    }

    camera->lookAt_eye.x = gCurrentCamConfiguration.targetPos.x - (temp_f26 * gCurrentCamConfiguration.boomLength * cosAngle);
    camera->lookAt_eye.z = gCurrentCamConfiguration.targetPos.z - (temp_f24_2 * gCurrentCamConfiguration.boomLength * cosAngle);
    cosAngle = cos_deg(-gCurrentCamConfiguration.viewPitch);
    sinAngle = sin_deg(-gCurrentCamConfiguration.viewPitch);

    if (camera->lookAt_eye.x == gCurrentCamConfiguration.targetPos.x && camera->lookAt_eye.z == gCurrentCamConfiguration.targetPos.z) {
        dist = 0.0f;
    } else {
        dist = dist2D(camera->lookAt_eye.x, camera->lookAt_eye.z, gCurrentCamConfiguration.targetPos.x, gCurrentCamConfiguration.targetPos.z);
    }

    temp_f8_2 = gCurrentCamConfiguration.targetPos.y - camera->lookAt_eye.y;
    if (!(camera->moveFlags & CAMERA_MOVE_FLAG_2)) {
        camera->lookAt_obj.y = camera->lookAt_eye.y + ((dist * sinAngle) + (temp_f8_2 * cosAngle));
    }
    temp_f4_4 = (dist * cosAngle) - (temp_f8_2 * sinAngle);
    camera->lookAt_obj.x = camera->lookAt_eye.x + (temp_f26 * temp_f4_4);
    camera->lookAt_obj.z = camera->lookAt_eye.z + (temp_f24_2 * temp_f4_4);
    camera->currentYaw = gCurrentCamConfiguration.boomYaw + D_800A08E0;
    camera->trueRotation.x = camera->currentYaw;
    camera->currentBoomLength = gCurrentCamConfiguration.boomLength;
    camera->currentBlendedYawNegated = -gCurrentCamConfiguration.boomYaw;
    camera->currentPitch = -gCurrentCamConfiguration.boomPitch - gCurrentCamConfiguration.viewPitch;
    camera->lookAt_obj_target.x = camera->lookAt_obj.x;
    camera->lookAt_obj_target.y = camera->lookAt_obj.y;
    camera->lookAt_obj_target.z = camera->lookAt_obj.z;
    camera->currentYOffset = 0.0f;
}