@@ -450,7 +450,107 @@ INCLUDE_ASM("asm/maps/map0_s00/nonmatchings/map0_s00", func_800DBF08);
450450
451451INCLUDE_ASM ("asm/maps/map0_s00/nonmatchings/map0_s00" , func_800DC1E8 );
452452
453- INCLUDE_ASM ("asm/maps/map0_s00/nonmatchings/map0_s00" , func_800DC33C );
453+ void func_800DC33C (s32 eventFlags0 )
454+ {
455+ VECTOR3 sp18 ;
456+ s16 temp_a0 ;
457+ s16 var_s1 ;
458+ s32 var_v1 ;
459+ s32 temp_a0_2 ;
460+ s32 temp_v0 ;
461+ s32 temp_v0_2 ;
462+ s32 temp_v1 ;
463+ s32 var_a0 ;
464+ s32 var_a2 ;
465+ s32 var_v1_2 ;
466+ s_Savegame * temp_s0 ;
467+
468+ temp_s0 = g_SavegamePtr ;
469+ if (!(temp_s0 -> eventFlags_168 [0 ] & 0x20 ))
470+ {
471+ func_800865FC (1 , 1 , 0 , 0x800 , -0x3E000 , 0x6C000 );
472+ sharedFunc_800D88AC_0_s00 (g_SysWork .npcs_1A0 );
473+ temp_s0 -> eventFlags_168 [0 ] |= 0x20 ;
474+ }
475+
476+ vwGetViewPosition (& sp18 );
477+ temp_v0 = (g_SysWork .npcs_1A0 [0 ].position_18 .vx - sp18 .vx ) >> 6 ;
478+ temp_v0_2 = (g_SysWork .npcs_1A0 [0 ].position_18 .vz - sp18 .vz ) >> 6 ;
479+
480+ if (((SquareRoot0 ((temp_v0 * temp_v0 ) + (temp_v0_2 * temp_v0_2 )) << 6 ) <= 0x10800 ) &&
481+ (g_SysWork .npcs_1A0 [0 ].position_18 .vx >= FP_METER (-58.0f )))
482+ {
483+
484+ if (!(g_SysWork .flags_22A4 & 0x80 ))
485+ {
486+ if (!Vw_AabbVisibleInScreenCheck (
487+ g_SysWork .npcs_1A0 [0 ].position_18 .vx - Q12 (1.0f ),
488+ g_SysWork .npcs_1A0 [0 ].position_18 .vx + Q12 (1.0f ),
489+ g_SysWork .npcs_1A0 [0 ].position_18 .vy - Q12 (1.5f ),
490+ g_SysWork .npcs_1A0 [0 ].position_18 .vy ,
491+ g_SysWork .npcs_1A0 [0 ].position_18 .vz - Q12 (1.0f ),
492+ g_SysWork .npcs_1A0 [0 ].position_18 .vz + Q12 (1.0f )))
493+ {
494+ block7 :
495+ g_SysWork .npcs_1A0 [0 ].position_18 .vz = 1 ;
496+ g_SysWork .npcs_1A0 [0 ].position_18 .vx = 1 ;
497+ g_SysWork .npcs_1A0 [0 ].properties_E4 .player .headingAngle_124 = 0 ;
498+ sharedFunc_800D88C0_0_s00 (g_SysWork .npcs_1A0 , 0 );
499+ g_SavegamePtr -> eventFlags_168 [0 ] |= 0x40 ;
500+ return ;
501+ }
502+ }
503+
504+ var_s1 = func_8005BF38 (
505+ (ratan2 (g_SysWork .npcs_1A0 [0 ].position_18 .vx - g_SysWork .player_4C .chara_0 .position_18 .vx ,
506+ g_SysWork .npcs_1A0 [0 ].position_18 .vz - g_SysWork .player_4C .chara_0 .position_18 .vz ) - g_SysWork .player_4C .chara_0 .headingAngle_3C ));
507+
508+ temp_a0 = func_8005BF38 ((
509+ ratan2 (FP_METER (-62.0f ) - g_SysWork .player_4C .chara_0 .position_18 .vx ,
510+ Q12 (106.0f ) - g_SysWork .player_4C .chara_0 .position_18 .vz ) -
511+ g_SysWork .player_4C .chara_0 .headingAngle_3C ));
512+
513+
514+ if (ABS (var_s1 ) > ABS (temp_a0 ))
515+ {
516+ var_s1 = temp_a0 ;
517+ }
518+ var_a0 = var_s1 << 16 ;
519+
520+ temp_a0_2 = (g_SysWork .player_4C .chara_0 .moveSpeed_38 * Math_Cos (var_a0 >> 0x10 ) * 0x10 ) >> 0x10 ;
521+
522+ if (temp_a0_2 > FP_METER (1.8 ))
523+ {
524+ D_800DFAD0 = temp_a0_2 + Q12 (0.9f );
525+ }
526+ else if (D_800DFAD0 > FP_METER (1.8 ))
527+ {
528+ var_a2 = FP_METER (1.8 );
529+ temp_v1 = D_800DFAD0 - FP_MULTIPLY_FLOAT_PRECISE (g_DeltaTime0 , 0.5f , 12 );
530+ if (temp_v1 >= FP_METER (1.8 ))
531+ {
532+ var_a2 = temp_v1 ;
533+ }
534+ D_800DFAD0 = var_a2 ;
535+ }
536+ else
537+ {
538+ var_v1_2 = D_800DFAD0 + FP_MULTIPLY_FLOAT_PRECISE (g_DeltaTime0 , 0.5f , 12 );
539+
540+ if (var_v1_2 > FP_METER (1.8 ))
541+ {
542+ var_v1_2 = FP_METER (1.8 );
543+ }
544+ D_800DFAD0 = var_v1_2 ;
545+ }
546+
547+ g_SysWork .npcs_1A0 [0 ].properties_E4 .player .headingAngle_124 = D_800DFAD0 ;
548+ func_8008677C (g_SysWork .npcs_1A0 , 2 , 1 );
549+ return ;
550+ }
551+
552+ goto block7 ;
553+ }
454554
455555INCLUDE_ASM ("asm/maps/map0_s00/nonmatchings/map0_s00" , func_800DC694 );
456556
0 commit comments