@@ -750,11 +750,242 @@ INCLUDE_ASM("asm/maps/map5_s01/nonmatchings/map5_s01", func_800EC2D8);
750750
751751#include "maps/shared/SysWork_StateStepIncrementAfterTime.h" // 0x800EC394
752752
753- INCLUDE_RODATA ("asm/maps/map5_s01/nonmatchings/map5_s01" , D_800CC938 );
753+ void func_800EC42C (void )
754+ {
755+ s32 mulZ ;
756+ s32 mulX ;
757+ s32 pitch ;
758+ s32 tmp0 ;
759+ s32 tmp1 ;
760+ s32 sin0 ;
761+ s32 sin1 ;
762+
763+
764+ tmp0 = D_800F0360 ;
765+ sin0 = Math_Sin (tmp0 >> 2 );
766+ sin1 = Math_Sin (tmp0 >> 3 );
767+ tmp1 = (sin0 * 2 ) + sin1 + Math_Sin (Math_Cos (tmp0 >> 4 ));
768+ pitch = tmp1 >> 8 ;
769+ D_800F0360 += g_DeltaTime0 ;
770+
771+ if (g_SysWork .sysStateStep_C [0 ] >= 10 )
772+ {
773+ D_800F035E -= FP_MULTIPLY_PRECISE (g_DeltaTime0 , Q12 (0.5f ), Q12_SHIFT );
774+ if (D_800F035E < 0 )
775+ {
776+ D_800F035E = 0 ;
777+ }
754778
755- INCLUDE_RODATA ("asm/maps/map5_s01/nonmatchings/map5_s01" , D_800CC940 );
779+ func_800463C0 (Sfx_Unk1467 , 0 , ~(D_800F035E >> 4 ), pitch );
780+ }
781+ else if (g_SysWork .sysStateStep_C [0 ] > 0 )
782+ {
783+ D_800F035E += FP_MULTIPLY_PRECISE (g_DeltaTime0 , Q12 (0.25f ), Q12_SHIFT );
784+ if (D_800F035E > Q12 (0.9961f ))
785+ {
786+ D_800F035E = Q12 (0.9961f );
787+ }
756788
757- INCLUDE_ASM ("asm/maps/map5_s01/nonmatchings/map5_s01" , func_800EC42C );
789+ func_800463C0 (Sfx_Unk1467 , 0 , ~(D_800F035E >> 4 ), pitch );
790+ }
791+
792+ switch (g_SysWork .sysStateStep_C [0 ])
793+ {
794+ case 0 :
795+ Player_ControlFreeze ();
796+ Fs_QueueStartReadTim (FILE_TIM_ENBAN_TIM , FS_BUFFER_1 , & D_800F0178 );
797+ Fs_QueueStartRead (FILE_ANIM_UFO3_DMS , FS_BUFFER_13 );
798+ D_800F3E0C = NO_VALUE ;
799+ ScreenFade_ResetTimestep ();
800+ Sd_EngineCmd (Sfx_Unk1467 );
801+ func_800463C0 (Sfx_Unk1467 , 0 , Q8_CLAMPED (1.0f ), 0 );
802+ D_800F035E = 0 ;
803+ D_800F0360 = 0 ;
804+ D_800F035D = 0 ;
805+ SysWork_StateStepIncrement (0 );
806+ /* fallthrough */
807+ case 1 :
808+ func_80085DF0 ();
809+ break ;
810+ case 2 :
811+ if (Fs_QueueDoThingWhenEmpty () != false)
812+ {
813+ SysWork_StateStepIncrement (0 );
814+ }
815+ break ;
816+ case 3 :
817+ D_800F3E0C = 0 ;
818+ SysWork_StateStepIncrementAfterFade (0 , true, 3 , 0 , false);
819+ DmsHeader_FixOffsets ((s_DmsHeader * )FS_BUFFER_13 );
820+ func_8003D03C ();
821+ sharedFunc_800D2EB4_0_s00 ();
822+ Game_TurnFlashlightOn ();
823+ D_800F035C = 0 ;
824+ SysWork_StateStepIncrement (0 );
825+ /* fallthrough */
826+ case 4 :
827+ SysWork_StateStepIncrementAfterFade (2 , false, 0 , 0 , false);
828+ break ;
829+ case 5 :
830+ Map_MessageWithAudio (18 , & D_800F035C , & D_800F0174 );
831+ break ;
832+ case 6 :
833+ SysWork_StateStepIncrementAfterTime (& D_800F3E0C , Q12 (40.0f ), Q12 (0.0f ), Q12 (30.0f ), true, true);
834+ block_18 :
835+ sharedFunc_800CE5D4_1_s03 (& D_800F0180 , Q12 (0.5f ), Q12 (0.05f ), 0 );
836+ break ;
837+ case 7 :
838+ MapMsg_DisplayAndHandleSelection (false, 19 , 0 , 0 , 0 , false);
839+ sharedFunc_800CE5D4_1_s03 (& D_800F0180 , Q12 (0.5f ), Q12 (0.05f ), 0 );
840+ break ;
841+ case 8 :
842+ func_80080B58 (& g_SysWork .playerBoneCoords_890 [2 ], & (SVECTOR3 ){}, & QVECTOR3 (-196.53f , -14.25f , -9.73f ));
843+ sharedFunc_800CE5D4_1_s03 (& D_800F0180 , Q12 (1.0f ), Q12 (0.1f ), 1 );
844+ SysWork_StateStepIncrementDelayed (Q12 (2.5f ), false);
845+ break ;
846+ case 9 :
847+ g_SysWork .field_28 += g_DeltaTime0 ;
848+ switch (g_SysWork .field_28 / Q12 (0.1f ))
849+ {
850+ case 0x0 :
851+ case 0x1 :
852+ case 0x2 :
853+ case 0x3 :
854+ mulZ = Q12 (0.0f );
855+ mulX = Q12 (0.0f );
856+ break ;
857+ case 0x4 :
858+ case 0x5 :
859+ case 0x6 :
860+ case 0xB :
861+ case 0xC :
862+ case 0xD :
863+ case 0x12 :
864+ case 0x13 :
865+ case 0x14 :
866+ mulX = Q12 (-0.9f );
867+ mulZ = Q12 (1.0f );
868+ break ;
869+ case 0x7 :
870+ case 0x8 :
871+ case 0x9 :
872+ case 0xA :
873+ case 0xE :
874+ case 0xF :
875+ case 0x10 :
876+ case 0x11 :
877+ case 0x15 :
878+ case 0x16 :
879+ case 0x17 :
880+ case 0x18 :
881+ mulX = Q12 (1.2f );
882+ mulZ = Q12 (1.0f );
883+ break ;
884+ case 0x19 :
885+ if (D_800F035D == 0 )
886+ {
887+ D_800F0180 .vy = Q12 (-13.0f );
888+ D_800F0180 .vz = Q12 (2.5f );
889+ D_800F035D ++ ;
890+ }
891+ /* fallthrough */
892+ case 0x1A :
893+ case 0x1B :
894+ case 0x1F :
895+ case 0x20 :
896+ case 0x21 :
897+ case 0x25 :
898+ case 0x26 :
899+ case 0x27 :
900+ case 0x2B :
901+ case 0x2C :
902+ case 0x2D :
903+ mulX = Q12 (-1.2f );
904+ mulZ = Q12 (-1.2f );
905+ break ;
906+ case 0x1C :
907+ case 0x1D :
908+ case 0x1E :
909+ case 0x22 :
910+ case 0x23 :
911+ case 0x24 :
912+ case 0x28 :
913+ case 0x29 :
914+ case 0x2A :
915+ mulX = Q12 (1.2f );
916+ mulZ = Q12 (-1.2f );
917+ break ;
918+ case 0x2E :
919+ if (D_800F035D == 1 )
920+ {
921+ D_800F0180 .vy = Q12 (-15.75f );
922+ D_800F0180 .vz = Q12 (-12.25f );
923+ D_800F035D ++ ;
924+ }
925+ /* fallthrough */
926+ case 0x3B :
927+ mulX = Q12 (0.0f );
928+ mulZ = Q12 (-1.6f );
929+ break ;
930+ case 0x2F :
931+ case 0x30 :
932+ case 0x31 :
933+ case 0x38 :
934+ case 0x39 :
935+ case 0x3A :
936+ mulX = Q12 (0.6f );
937+ mulZ = Q12 (-1.6f );
938+ break ;
939+ case 0x32 :
940+ case 0x33 :
941+ case 0x34 :
942+ case 0x35 :
943+ case 0x36 :
944+ case 0x37 :
945+ mulX = Q12 (-0.6f );
946+ mulZ = Q12 (-1.6f );
947+ break ;
948+ default :
949+ mulZ = Q12 (0.0f );
950+ mulX = Q12 (0.0f );
951+ SysWork_StateStepIncrement (0 );
952+ break ;
953+ }
954+
955+ D_800F0180 .vy += FP_MULTIPLY_PRECISE (g_DeltaTime0 , (mulX * 4 ), Q12_SHIFT );
956+ D_800F0180 .vz += FP_MULTIPLY_PRECISE (g_DeltaTime0 , (mulZ * 4 ), Q12_SHIFT );
957+
958+
959+ sharedFunc_800CE5D4_1_s03 (& D_800F0180 , Q12 (0.5f ), Q12 (0.05f ), 0 );
960+ break ;
961+ case 10 : /* switch 1 */
962+ SysWork_StateStepIncrementDelayed (Q12 (2.5f ), false);
963+ break ;
964+ default : /* switch 1 */
965+ Player_ControlUnfreeze (false);
966+ SysWork_StateSetNext (SysState_Gameplay );
967+ SysWork_StateStepIncrementAfterFade (0 , false, 2 , 0 , false);
968+ vcReturnPreAutoCamWork (true);
969+ Savegame_EventFlagSet (EventFlag_458 );
970+ func_80086470 (3 , InventoryItemId_ChannelingStone , 1 , false);
971+ func_8003D01C ();
972+ sharedFunc_800D2EF4_0_s00 ();
973+ D_800F3E0C = -1 ;
974+ func_8004690C (Sfx_Unk1467 );
975+ break ;
976+ }
977+
978+ if (D_800F3E0C >= 0 )
979+ {
980+ Dms_CharacterGetPosRot (& g_SysWork .player_4C .chara_0 .position_18 , & g_SysWork .player_4C .chara_0 .rotation_24 , "HERO" , D_800F3E0C , (s_DmsHeader * )FS_BUFFER_13 );
981+ g_SysWork .player_4C .chara_0 .position_18 .vx -= Q12 (20.0f );
982+ vcChangeProjectionValue (Dms_CameraGetTargetPos (& D_800F3DF0 , & D_800F3E00 , NULL , D_800F3E0C , (s_DmsHeader * )FS_BUFFER_13 ));
983+ D_800F3DF0 .vx -= Q12 (20.0f );
984+ D_800F3E00 .vx -= Q12 (20.0f );
985+ vcUserCamTarget (& D_800F3DF0 , NULL , true);
986+ vcUserWatchTarget (& D_800F3E00 , NULL , true);
987+ }
988+ }
758989
759990void func_800ECB58 (void )
760991{
@@ -791,7 +1022,7 @@ void func_800ECC8C(void)
7911022 {
7921023 if (!Savegame_EventFlagGet (EventFlag_M5S01_PickupMap ))
7931024 {
794- g_WorldGfx_ObjectAdd (& g_WorldObject0 .object_0 , & g_WorldObject0 .position_1C , & D_800CC938 );
1025+ g_WorldGfx_ObjectAdd (& g_WorldObject0 .object_0 , & g_WorldObject0 .position_1C , & ( SVECTOR3 ){} );
7951026 }
7961027 }
7971028
0 commit comments