From 3d98fc7a60594798d3f174754f9e3587075929b3 Mon Sep 17 00:00:00 2001 From: Kyzentun Keeslala Date: Mon, 29 Aug 2016 12:43:04 -0600 Subject: [PATCH] Add oitg_zoom_mode_actor. Turn off minimaid lights when exiting. --- Themes/_fallback/Scripts/03 Gameplay.lua | 14 ++++++++++++++ src/Player.cpp | 19 ++++++++++++++++--- src/Player.h | 6 ++++++ .../Lights/LightsDriver_LinuxMinimaid.cpp | 4 ++++ .../Lights/LightsDriver_Win32Minimaid.cpp | 1 + 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/Themes/_fallback/Scripts/03 Gameplay.lua b/Themes/_fallback/Scripts/03 Gameplay.lua index 4c5fcaacb1..fb284cb076 100644 --- a/Themes/_fallback/Scripts/03 Gameplay.lua +++ b/Themes/_fallback/Scripts/03 Gameplay.lua @@ -460,3 +460,17 @@ function GetCodeForGame(codeName) local inputCode = CodeDetectorCodes[codeName] return inputCode[gameName] or inputCode["default"] end + +function oitg_zoom_mode_actor() + return Def.Actor{ + OnCommand= function(self) + local screen= SCREENMAN:GetTopScreen() + for i, pn in ipairs(GAMESTATE:GetEnabledPlayers()) do + local player= screen:GetChild("Player"..ToEnumShortString(pn)) + if player and player.set_oitg_zoom_mode then + player:set_oitg_zoom_mode(true) + end + end + end, + } +end diff --git a/src/Player.cpp b/src/Player.cpp index c0d3519f9a..ec15031700 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -236,6 +236,7 @@ Player::Player( NoteData &nd, bool bVisibleParts ) : m_NoteData(nd) m_drawing_notefield_board= false; m_bLoaded = false; m_inside_lua_set_life= false; + m_oitg_zoom_mode= false; m_pPlayerState = NULL; m_pPlayerStageStats = NULL; @@ -922,9 +923,19 @@ void Player::Update( float fDeltaTime ) Actor::TweenState::MakeWeightedAverage( m_pActorWithComboPosition->DestTweenState(), ts1, ts2, fPercentCentered ); } - float fNoteFieldZoom = 1 - fMiniPercent*0.5f; - if( m_pNoteField ) - m_pNoteField->SetZoom( fNoteFieldZoom ); + float field_zoom = 1 - fMiniPercent*0.5f; + if(m_pNoteField) + { + if(m_oitg_zoom_mode) + { + m_pNoteField->SetZoomX(field_zoom); + m_pNoteField->SetZoomY(field_zoom); + } + else + { + m_pNoteField->SetZoom(field_zoom); + } + } if( m_pActorWithJudgmentPosition != NULL ) m_pActorWithJudgmentPosition->SetZoom( m_pActorWithJudgmentPosition->GetZoom() * fJudgmentZoom ); if( m_pActorWithComboPosition != NULL ) @@ -3324,6 +3335,7 @@ public: p->GetPlayerTimingData().PushSelf(L); return 1; } + GET_SET_BOOL_METHOD(oitg_zoom_mode, m_oitg_zoom_mode); LunaPlayer() { @@ -3332,6 +3344,7 @@ public: ADD_METHOD( SetActorWithJudgmentPosition ); ADD_METHOD( SetActorWithComboPosition ); ADD_METHOD( GetPlayerTimingData ); + ADD_GET_SET_METHODS(oitg_zoom_mode); } }; diff --git a/src/Player.h b/src/Player.h index 955f257e7d..04459beaa4 100644 --- a/src/Player.h +++ b/src/Player.h @@ -124,6 +124,12 @@ public: void SetSendJudgmentAndComboMessages( bool b ) { m_bSendJudgmentAndComboMessages = b; } + // OITG bug: Actor::SetZoom only sets X and Y. When mini is applied to + // the notefield with SetZoom, it does not affect the range of bumpy. + // m_oitg_zoom_mode provides compatibility with that bug. Only used in + // defective mode. -Kyz + bool m_oitg_zoom_mode; + // Lua virtual void PushSelf( lua_State *L ); diff --git a/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp index 63f4496d1f..5262ac6183 100644 --- a/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp +++ b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp @@ -21,6 +21,10 @@ LightsDriver_LinuxMinimaid::LightsDriver_LinuxMinimaid() LightsDriver_LinuxMinimaid::~LightsDriver_LinuxMinimaid() { + if(_mmmagic_loaded) + { + mm_setDDRAllOff(); + } // libmmmagic is actually statically linked in, so there's no wrapper // destruction to do. -Kyz } diff --git a/src/arch/Lights/LightsDriver_Win32Minimaid.cpp b/src/arch/Lights/LightsDriver_Win32Minimaid.cpp index d7c5163d47..d8a2e9ff7e 100644 --- a/src/arch/Lights/LightsDriver_Win32Minimaid.cpp +++ b/src/arch/Lights/LightsDriver_Win32Minimaid.cpp @@ -63,6 +63,7 @@ LightsDriver_Win32Minimaid::~LightsDriver_Win32Minimaid() { if (_mmmagic_loaded) { + mm_setDDRAllOff(); FreeLibrary(hMMMAGICDLL); } }