@@ -84,7 +84,7 @@ bool MidairSnowboardControl()
8484// Add missing SetupModuleDebug to table.
8585void PlayerDebugMode_RegisterLuaSetup (PPCRegister& str, PPCRegister& index)
8686{
87- if (!Config::PlayerDebugMode )
87+ if (!Config::EnableDebugMode )
8888 return ;
8989
9090 auto pString = (stdx::string*)g_memory.Translate (str.u32 );
@@ -116,7 +116,7 @@ bool PlayerDebugMode_RemapDebugExitButton(PPCRegister& r_PadState, PPCRegister&
116116PPC_FUNC_IMPL (__imp__sub_82195500);
117117PPC_FUNC (sub_82195500)
118118{
119- if (!Config::PlayerDebugMode )
119+ if (!( Config::EnableDebugMode || Config::RestoreDemoCameraMode) )
120120 {
121121 __imp__sub_82195500 (ctx, base);
122122 return ;
@@ -131,26 +131,32 @@ PPC_FUNC(sub_82195500)
131131 if (pPlayer->m_IsPlayer )
132132 {
133133 auto playerIndex = pGameMode->m_pGameImp ->PlayerActorIDToIndex (pPlayer->m_ActorID );
134- auto & spManager = pDoc->m_vspInputManager [pDoc->m_PlayerControllerID [playerIndex]];
134+ auto padID = pDoc->m_PlayerControllerID [playerIndex];
135+ auto & spManager = pDoc->m_vspInputManager [padID];
136+ auto pGameImp = App::s_pApp->m_pDoc ->GetDocMode <Sonicteam::GameMode>()->m_pGameImp .get ();
135137
136- // Disable camera volume collision on B press.
137- if (pPlayer->m_SetupModuleIndexPostfix == 2 && spManager->m_PadState .IsPressed (Sonicteam::SoX::Input::KeyState_B))
138+ // Disable collision on B press.
139+ if (pPlayer->m_SetupModuleIndexPostfix == 2 && spManager->m_PadState .IsPressed (Sonicteam::SoX::Input::KeyState_B) && Config::EnableDebugMode )
138140 {
139141 auto value = pZock->m_spPhantomA ->m_pRigidBody ->m_collidable .m_broadPhaseHandle .m_collisionFilterInfo == 6 ? 0x383 : 6 ;
142+ pZock->m_spPhantomA ->m_pRigidBody ->m_collidable .m_broadPhaseHandle .m_collisionFilterInfo = value;
143+ pGameImp->GetPhysicsWorld <Sonicteam::SoX::Physics::Havok::WorldHavok>()->m_pWorld ->updateCollisionFilterOnWorld (1 ,1 );
144+ }
140145
141- pZock->m_spPhantomA .reset ();
142- pZock->m_spPhantomB .reset ();
143-
144- GuestToHostFunction<void >(sub_821E3628, &pZock->m_spPhantomA , &pPlayer->m_spRootFrame , static_cast <Sonicteam::SoX::MessageReceiver*>(pPlayer), value, 50.0 );
145-
146- pZock->m_spPhantomB = pZock->m_spPhantomA ;
147- pZock->m_spPhantomA ->InitializeToWorld (pGameMode->m_pGameImp ->m_spPhysicsWorld );
148- pZock->m_spPhantomA ->SetPhantomListener (pZock->m_spPhantomListener );
146+ // Switch to Camera <-> DemoGMCamera
147+ if ((pPlayer->m_SetupModuleIndexPostfix == 2 || Config::RestoreDemoCameraMode) && spManager->m_PadState .IsPressed (Sonicteam::SoX::Input::KeyState_DpadUp))
148+ {
149+ auto pCamera = static_cast <Sonicteam::Camera::Cameraman*>(pPlayer->m_pCameraman .get ());
150+ guest_stack_var<Sonicteam::Message::MsgCameramanCameraInitialize> m_initMessage;
151+ m_initMessage->IsDemoCam = pCamera->m_spCameraModeManager ->m_spCameraMode ->m_pVftable .ptr .get () != 0x82002004 ;
152+ m_initMessage->m_TargetActorID = pPlayer->m_ActorID ;
153+ m_initMessage->m_PadID = spManager->m_ControllerID ;
154+ pCamera->OnMessageReceived (m_initMessage.get ());
149155 }
150156
151157 // Enter debug posture on Select press.
152158 if (pPlayer->m_SetupModuleIndexPostfix != 2 &&
153- !(pPlayer->m_SetupModuleIndexPrefix == 2 && pPlayer->m_SetupModuleIndexPostfix == 1 ) &&
159+ !(pPlayer->m_SetupModuleIndexPrefix == 2 && pPlayer->m_SetupModuleIndexPostfix == 1 ) && Config::EnableDebugMode &&
154160 spManager->m_PadState .IsPressed (Sonicteam::SoX::Input::KeyState_Select))
155161 {
156162 pPlayer->m_SetupModuleIndexPostfix = 2 ;
0 commit comments