From 42e1c9393619da66f0999ae285812a3c59c64009 Mon Sep 17 00:00:00 2001 From: jhh8 Date: Sat, 11 May 2024 15:51:16 +0300 Subject: [PATCH 1/5] add speedrun time and outstanding execution status to summary panel in briefing --- .../client/swarm/vgui/nb_mission_summary.cpp | 22 ++++++++++++++ .../client/swarm/vgui/nb_mission_summary.h | 2 ++ src/game/shared/swarm/asw_gamerules.cpp | 30 +++++++++++++++++++ src/game/shared/swarm/asw_gamerules.h | 10 +++++-- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/game/client/swarm/vgui/nb_mission_summary.cpp b/src/game/client/swarm/vgui/nb_mission_summary.cpp index eab2df516..2fd75bb6e 100644 --- a/src/game/client/swarm/vgui/nb_mission_summary.cpp +++ b/src/game/client/swarm/vgui/nb_mission_summary.cpp @@ -28,6 +28,8 @@ CNB_Mission_Summary::CNB_Mission_Summary( vgui::Panel *parent, const char *name m_pChallengeLabel = new vgui::Label(this, "ChallengeLabel", ""); m_pMissionTitle = new vgui::Label( this, "MissionTitle", "" ); m_pMissionLabel = new vgui::Label( this, "MissionLabel", "" ); + m_pSpeedrunTimeLabel = new vgui::Label( this, "SpeedrunTimeLabel", "" ); + m_pOutstandingExecutionLabel = new vgui::Label( this, "OutstandingExecutionLabel", "" ); m_pObjectivesTitle = new vgui::Label( this, "ObjectivesTitle", "" ); m_pObjectivesLabel = new vgui::Label( this, "ObjectivesLabel", "" ); // == MANAGED_MEMBER_CREATION_END == @@ -139,6 +141,26 @@ void CNB_Mission_Summary::OnThink() m_pMissionLabel->SetText(pMap->m_szMissionTitle); } + int nSpeedrunTime = CAlienSwarm::GetSpeedrunTime(); + wchar_t wszSRTime[ 128 ]; + + if ( nSpeedrunTime <= 0 ) + V_snwprintf( wszSRTime, ARRAYSIZE( wszSRTime ), L"-" ); + else + V_snwprintf( wszSRTime, ARRAYSIZE( wszSRTime ), g_pVGuiLocalize->FindSafe( "#nb_speedruntime_format" ), nSpeedrunTime / 60, nSpeedrunTime % 60 / 10, nSpeedrunTime % 10 ); + + m_pSpeedrunTimeLabel->SetText( wszSRTime ); + + int nOEStatus = CAlienSwarm::GetOutstandingExecutionStatus(); + wchar_t wszOEStatus[ 128 ]; + + if ( nOEStatus < 0 ) + V_snwprintf( wszOEStatus, ARRAYSIZE( wszOEStatus ), L"-" ); + else + V_snwprintf( wszOEStatus, ARRAYSIZE( wszOEStatus ), L"%s", nOEStatus ? g_pVGuiLocalize->FindSafe( "#nb_oe_status_active" ) : g_pVGuiLocalize->FindSafe( "#nb_oe_status_failed" ) ); + + m_pOutstandingExecutionLabel->SetText( wszOEStatus ); + // compose objectives list wchar_t wszObjectivesBuffer[ 1024 ]; wchar_t wszBuffer[ 1024 ]; diff --git a/src/game/client/swarm/vgui/nb_mission_summary.h b/src/game/client/swarm/vgui/nb_mission_summary.h index dd2675104..1c4f8fe38 100644 --- a/src/game/client/swarm/vgui/nb_mission_summary.h +++ b/src/game/client/swarm/vgui/nb_mission_summary.h @@ -37,6 +37,8 @@ class CNB_Mission_Summary : public vgui::EditablePanel vgui::Label *m_pChallengeLabel; vgui::Label *m_pMissionTitle; vgui::Label *m_pMissionLabel; + vgui::Label *m_pSpeedrunTimeLabel; + vgui::Label *m_pOutstandingExecutionLabel; vgui::Label *m_pObjectivesTitle; vgui::Label *m_pObjectivesLabel; // == MANAGED_MEMBER_POINTERS_END == diff --git a/src/game/shared/swarm/asw_gamerules.cpp b/src/game/shared/swarm/asw_gamerules.cpp index 8eb9ce2b7..a9c55d3d6 100644 --- a/src/game/shared/swarm/asw_gamerules.cpp +++ b/src/game/shared/swarm/asw_gamerules.cpp @@ -864,6 +864,7 @@ BEGIN_NETWORK_TABLE_NOBASE( CAlienSwarm, DT_ASWGameRules ) RecvPropInt(RECVINFO(m_nFailAdvice)), RecvPropInt(RECVINFO(m_iMissionDifficulty) ), RecvPropInt(RECVINFO(m_iSkillLevel) ), + RecvPropBool(RECVINFO(m_iOutstandingExecutionStatus)), RecvPropBool(RECVINFO(m_bVoteStartedIngame) ), RecvPropInt(RECVINFO(m_iCurrentVoteYes) ), RecvPropInt(RECVINFO(m_iCurrentVoteNo) ), @@ -909,6 +910,7 @@ BEGIN_NETWORK_TABLE_NOBASE( CAlienSwarm, DT_ASWGameRules ) SendPropInt(SENDINFO(m_nFailAdvice)), SendPropInt(SENDINFO(m_iMissionDifficulty) ), SendPropInt(SENDINFO(m_iSkillLevel) ), + SendPropInt(SENDINFO(m_iOutstandingExecutionStatus) ), SendPropInt(SENDINFO(m_bVoteStartedIngame) ), SendPropInt(SENDINFO(m_iCurrentVoteYes) ), SendPropInt(SENDINFO(m_iCurrentVoteNo) ), @@ -1014,6 +1016,7 @@ CAlienSwarmProxy::~CAlienSwarmProxy() BEGIN_RECV_TABLE( CAlienSwarmProxy, DT_AlienSwarmProxy ) RecvPropDataTable( "asw_gamerules_data", 0, 0, &REFERENCE_RECV_TABLE( DT_ASWGameRules ), RecvProxy_ASWGameRules ), + RecvPropInt( RECVINFO( m_iSpeedrunTime ) ), RecvPropBool( RECVINFO( m_bDisallowCameraRotation ) ), END_RECV_TABLE() #else @@ -1027,6 +1030,7 @@ CAlienSwarmProxy::~CAlienSwarmProxy() BEGIN_SEND_TABLE( CAlienSwarmProxy, DT_AlienSwarmProxy ) SendPropDataTable( "asw_gamerules_data", 0, &REFERENCE_SEND_TABLE( DT_ASWGameRules ), SendProxy_ASWGameRules ), + SendPropInt( SENDINFO( m_iSpeedrunTime ) ), SendPropBool( SENDINFO( m_bDisallowCameraRotation ) ), END_SEND_TABLE() @@ -1663,6 +1667,7 @@ void CAlienSwarm::FullReset() m_bMissionSuccess = false; m_bMissionFailed = false; m_fReserveMarinesEndTime = 0; + m_iOutstandingExecutionStatus = -1; m_nFailAdvice = ASW_FAIL_ADVICE_DEFAULT; @@ -8562,6 +8567,8 @@ void CAlienSwarm::OnSVCheatsChanged() } //ConCommand asw_notify_ch( "asw_notify_ch", StartedCheating_f, "Internal use", 0 ); +#endif // GAME_DLL + int CAlienSwarm::GetSpeedrunTime( void ) { Assert( g_pSwarmProxy ); @@ -8569,6 +8576,27 @@ int CAlienSwarm::GetSpeedrunTime( void ) return g_pSwarmProxy->m_iSpeedrunTime; } +int CAlienSwarm::GetOutstandingExecutionStatus(void) +{ +#ifdef CLIENT_DLL + return ASWGameRules()->m_iOutstandingExecutionStatus; +#else + if ( !GetCampaignInfo() ) + return -1; + + if ( GetCampaignInfo()->Missions.Count() > 1 && !V_strcmp( GetCampaignInfo()->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) + return 1; + + int iSkill = ASWGameRules()->GetLowestSkillLevelPlayed(); + if ( iSkill >= 2 && ASWGameRules()->GetCampaignSave() && ASWGameRules()->GetCampaignSave()->m_iNumDeaths <= 0 && ASWGameRules()->GetCampaignSave()->m_iInitialNumMissionsComplete == 0 && !ASWGameRules()->m_bChallengeActiveThisCampaign ) + return 1; + + return 0; +#endif +} + +#ifdef GAME_DLL + int CAlienSwarm::GetJumpJetType(void) { Assert( g_pSwarmProxy ); @@ -9414,6 +9442,8 @@ void CAlienSwarm::LevelInitPostEntity() } // todo: if we fail to load the campaign save file above, then gracefully fall into single mission mode? + m_iOutstandingExecutionStatus = GetOutstandingExecutionStatus(); + // make sure we're on easy mode for the tutorial if ( IsTutorialMap() ) { diff --git a/src/game/shared/swarm/asw_gamerules.h b/src/game/shared/swarm/asw_gamerules.h index ba46ead36..d792fad92 100644 --- a/src/game/shared/swarm/asw_gamerules.h +++ b/src/game/shared/swarm/asw_gamerules.h @@ -56,8 +56,8 @@ class CAlienSwarmProxy : public CGameRulesProxy DECLARE_NETWORKCLASS(); DECLARE_DATADESC(); - int m_iSpeedrunTime; int m_iJumpJetType; + CNetworkVar( int, m_iSpeedrunTime ); CNetworkVar( bool, m_bDisallowCameraRotation ); string_t m_szStatsMusicSuccess; string_t m_szStatsMusicFailure; @@ -292,7 +292,6 @@ class CAlienSwarm : public CSingleplayRules CASW_Medals m_Medals; int m_iNumGrubs; CHandle m_hDebriefStats; - int GetSpeedrunTime( void ); int GetJumpJetType( void ); // voting @@ -486,11 +485,15 @@ class CAlienSwarm : public CSingleplayRules virtual void OnDataChanged( DataUpdateType_t updateType ); unsigned char m_iPreviousGameState; + + CNetworkVar( int, m_iOutstandingExecutionStatus ); + static int GetOutstandingExecutionStatus( void ); #endif void FinishDeathmatchRound( CASW_Marine_Resource *winner ); CNetworkString( m_szStatsMusicOverride, 128 ); // misc + static int GetSpeedrunTime( void ); virtual void CreateStandardEntities( void ); virtual bool IsMultiplayer(); bool IsOfflineGame(); @@ -503,6 +506,9 @@ class CAlienSwarm : public CSingleplayRules #ifdef GAME_DLL void RunScriptFunctionInListenerScopes( const char *szFunctionName, ScriptVariant_t *pReturn, int nArgs, ScriptVariant_t *pArgs ); CUtlMap m_ActorSpeakingUntil; + + CNetworkVar( int, m_iOutstandingExecutionStatus ); + int GetOutstandingExecutionStatus( void ); #endif // mission From 7f50d0935e56beb7d4ade9989797f65e26d26c0c Mon Sep 17 00:00:00 2001 From: jhh8 Date: Sat, 11 May 2024 15:53:18 +0300 Subject: [PATCH 2/5] fix outstanding execution fails when restarting the first mission --- src/game/shared/swarm/asw_gamerules.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/game/shared/swarm/asw_gamerules.cpp b/src/game/shared/swarm/asw_gamerules.cpp index a9c55d3d6..663b6e33c 100644 --- a/src/game/shared/swarm/asw_gamerules.cpp +++ b/src/game/shared/swarm/asw_gamerules.cpp @@ -9442,6 +9442,10 @@ void CAlienSwarm::LevelInitPostEntity() } // todo: if we fail to load the campaign save file above, then gracefully fall into single mission mode? + // restarting on the first mission of the campaign will not fail outstanding execution + if ( GetCampaignSave() && GetCampaignInfo() && GetCampaignInfo()->Missions.Count() > 1 && !V_strcmp( GetCampaignInfo()->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) + GetCampaignSave()->m_iNumDeaths = 0; + m_iOutstandingExecutionStatus = GetOutstandingExecutionStatus(); // make sure we're on easy mode for the tutorial From 7c15c37176427d1a9eed3a68a91df581e2a7734d Mon Sep 17 00:00:00 2001 From: jhh8 Date: Sat, 11 May 2024 16:01:34 +0300 Subject: [PATCH 3/5] unneccessary wrapping --- src/game/shared/swarm/asw_gamerules.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/shared/swarm/asw_gamerules.cpp b/src/game/shared/swarm/asw_gamerules.cpp index 663b6e33c..43b7f95bb 100644 --- a/src/game/shared/swarm/asw_gamerules.cpp +++ b/src/game/shared/swarm/asw_gamerules.cpp @@ -8587,8 +8587,8 @@ int CAlienSwarm::GetOutstandingExecutionStatus(void) if ( GetCampaignInfo()->Missions.Count() > 1 && !V_strcmp( GetCampaignInfo()->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) return 1; - int iSkill = ASWGameRules()->GetLowestSkillLevelPlayed(); - if ( iSkill >= 2 && ASWGameRules()->GetCampaignSave() && ASWGameRules()->GetCampaignSave()->m_iNumDeaths <= 0 && ASWGameRules()->GetCampaignSave()->m_iInitialNumMissionsComplete == 0 && !ASWGameRules()->m_bChallengeActiveThisCampaign ) + int iSkill = GetLowestSkillLevelPlayed(); + if ( iSkill >= 2 && GetCampaignSave() && GetCampaignSave()->m_iNumDeaths <= 0 && GetCampaignSave()->m_iInitialNumMissionsComplete == 0 && !m_bChallengeActiveThisCampaign ) return 1; return 0; From eac50585bc198302887a9782cd919b226fbfe881 Mon Sep 17 00:00:00 2001 From: jhh8 Date: Sat, 11 May 2024 22:30:59 +0300 Subject: [PATCH 4/5] mission summary code tweaks --- .../client/swarm/vgui/nb_mission_summary.cpp | 15 ++------------- src/game/client/swarm/vgui/nb_mission_summary.h | 1 - src/game/shared/swarm/asw_gamerules.cpp | 17 +++++++++-------- src/game/shared/swarm/asw_gamerules.h | 8 +++----- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/game/client/swarm/vgui/nb_mission_summary.cpp b/src/game/client/swarm/vgui/nb_mission_summary.cpp index 2fd75bb6e..70b94ebaa 100644 --- a/src/game/client/swarm/vgui/nb_mission_summary.cpp +++ b/src/game/client/swarm/vgui/nb_mission_summary.cpp @@ -29,7 +29,6 @@ CNB_Mission_Summary::CNB_Mission_Summary( vgui::Panel *parent, const char *name m_pMissionTitle = new vgui::Label( this, "MissionTitle", "" ); m_pMissionLabel = new vgui::Label( this, "MissionLabel", "" ); m_pSpeedrunTimeLabel = new vgui::Label( this, "SpeedrunTimeLabel", "" ); - m_pOutstandingExecutionLabel = new vgui::Label( this, "OutstandingExecutionLabel", "" ); m_pObjectivesTitle = new vgui::Label( this, "ObjectivesTitle", "" ); m_pObjectivesLabel = new vgui::Label( this, "ObjectivesLabel", "" ); // == MANAGED_MEMBER_CREATION_END == @@ -141,26 +140,16 @@ void CNB_Mission_Summary::OnThink() m_pMissionLabel->SetText(pMap->m_szMissionTitle); } - int nSpeedrunTime = CAlienSwarm::GetSpeedrunTime(); + int nSpeedrunTime = ASWGameRules()->GetSpeedrunTime(); wchar_t wszSRTime[ 128 ]; if ( nSpeedrunTime <= 0 ) V_snwprintf( wszSRTime, ARRAYSIZE( wszSRTime ), L"-" ); else - V_snwprintf( wszSRTime, ARRAYSIZE( wszSRTime ), g_pVGuiLocalize->FindSafe( "#nb_speedruntime_format" ), nSpeedrunTime / 60, nSpeedrunTime % 60 / 10, nSpeedrunTime % 10 ); + V_snwprintf( wszSRTime, ARRAYSIZE( wszSRTime ), g_pVGuiLocalize->FindSafe( "#nb_speedruntime_format" ), nSpeedrunTime / 60, nSpeedrunTime % 60 ); m_pSpeedrunTimeLabel->SetText( wszSRTime ); - int nOEStatus = CAlienSwarm::GetOutstandingExecutionStatus(); - wchar_t wszOEStatus[ 128 ]; - - if ( nOEStatus < 0 ) - V_snwprintf( wszOEStatus, ARRAYSIZE( wszOEStatus ), L"-" ); - else - V_snwprintf( wszOEStatus, ARRAYSIZE( wszOEStatus ), L"%s", nOEStatus ? g_pVGuiLocalize->FindSafe( "#nb_oe_status_active" ) : g_pVGuiLocalize->FindSafe( "#nb_oe_status_failed" ) ); - - m_pOutstandingExecutionLabel->SetText( wszOEStatus ); - // compose objectives list wchar_t wszObjectivesBuffer[ 1024 ]; wchar_t wszBuffer[ 1024 ]; diff --git a/src/game/client/swarm/vgui/nb_mission_summary.h b/src/game/client/swarm/vgui/nb_mission_summary.h index 1c4f8fe38..e048b2540 100644 --- a/src/game/client/swarm/vgui/nb_mission_summary.h +++ b/src/game/client/swarm/vgui/nb_mission_summary.h @@ -38,7 +38,6 @@ class CNB_Mission_Summary : public vgui::EditablePanel vgui::Label *m_pMissionTitle; vgui::Label *m_pMissionLabel; vgui::Label *m_pSpeedrunTimeLabel; - vgui::Label *m_pOutstandingExecutionLabel; vgui::Label *m_pObjectivesTitle; vgui::Label *m_pObjectivesLabel; // == MANAGED_MEMBER_POINTERS_END == diff --git a/src/game/shared/swarm/asw_gamerules.cpp b/src/game/shared/swarm/asw_gamerules.cpp index 43b7f95bb..5fa912b46 100644 --- a/src/game/shared/swarm/asw_gamerules.cpp +++ b/src/game/shared/swarm/asw_gamerules.cpp @@ -864,7 +864,7 @@ BEGIN_NETWORK_TABLE_NOBASE( CAlienSwarm, DT_ASWGameRules ) RecvPropInt(RECVINFO(m_nFailAdvice)), RecvPropInt(RECVINFO(m_iMissionDifficulty) ), RecvPropInt(RECVINFO(m_iSkillLevel) ), - RecvPropBool(RECVINFO(m_iOutstandingExecutionStatus)), + RecvPropInt(RECVINFO(m_iOutstandingExecutionStatus)), RecvPropBool(RECVINFO(m_bVoteStartedIngame) ), RecvPropInt(RECVINFO(m_iCurrentVoteYes) ), RecvPropInt(RECVINFO(m_iCurrentVoteNo) ), @@ -8581,14 +8581,13 @@ int CAlienSwarm::GetOutstandingExecutionStatus(void) #ifdef CLIENT_DLL return ASWGameRules()->m_iOutstandingExecutionStatus; #else - if ( !GetCampaignInfo() ) - return -1; - if ( GetCampaignInfo()->Missions.Count() > 1 && !V_strcmp( GetCampaignInfo()->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) - return 1; + CASW_Campaign_Save *pCampaignSave = GetCampaignSave(); + if ( !pCampaignSave ) + return -1; int iSkill = GetLowestSkillLevelPlayed(); - if ( iSkill >= 2 && GetCampaignSave() && GetCampaignSave()->m_iNumDeaths <= 0 && GetCampaignSave()->m_iInitialNumMissionsComplete == 0 && !m_bChallengeActiveThisCampaign ) + if ( iSkill >= 2 && pCampaignSave && pCampaignSave->m_iNumDeaths <= 0 && pCampaignSave->m_iInitialNumMissionsComplete == 0 && !m_bChallengeActiveThisCampaign ) return 1; return 0; @@ -9443,8 +9442,10 @@ void CAlienSwarm::LevelInitPostEntity() // todo: if we fail to load the campaign save file above, then gracefully fall into single mission mode? // restarting on the first mission of the campaign will not fail outstanding execution - if ( GetCampaignSave() && GetCampaignInfo() && GetCampaignInfo()->Missions.Count() > 1 && !V_strcmp( GetCampaignInfo()->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) - GetCampaignSave()->m_iNumDeaths = 0; + CASW_Campaign_Save *pCampaignSave = GetCampaignSave(); + const RD_Campaign_t *pCampaignInfo = GetCampaignInfo(); + if ( pCampaignSave && pCampaignInfo && pCampaignInfo->Missions.Count() > 1 && !V_strcmp( pCampaignInfo->Missions[1].MapName, STRING( gpGlobals->mapname ) ) ) + pCampaignSave->m_iNumDeaths = 0; m_iOutstandingExecutionStatus = GetOutstandingExecutionStatus(); diff --git a/src/game/shared/swarm/asw_gamerules.h b/src/game/shared/swarm/asw_gamerules.h index d792fad92..08742a8d7 100644 --- a/src/game/shared/swarm/asw_gamerules.h +++ b/src/game/shared/swarm/asw_gamerules.h @@ -486,14 +486,14 @@ class CAlienSwarm : public CSingleplayRules virtual void OnDataChanged( DataUpdateType_t updateType ); unsigned char m_iPreviousGameState; - CNetworkVar( int, m_iOutstandingExecutionStatus ); - static int GetOutstandingExecutionStatus( void ); #endif void FinishDeathmatchRound( CASW_Marine_Resource *winner ); CNetworkString( m_szStatsMusicOverride, 128 ); // misc - static int GetSpeedrunTime( void ); + int GetSpeedrunTime( void ); + CNetworkVar( int, m_iOutstandingExecutionStatus ); + int GetOutstandingExecutionStatus( void ); virtual void CreateStandardEntities( void ); virtual bool IsMultiplayer(); bool IsOfflineGame(); @@ -507,8 +507,6 @@ class CAlienSwarm : public CSingleplayRules void RunScriptFunctionInListenerScopes( const char *szFunctionName, ScriptVariant_t *pReturn, int nArgs, ScriptVariant_t *pArgs ); CUtlMap m_ActorSpeakingUntil; - CNetworkVar( int, m_iOutstandingExecutionStatus ); - int GetOutstandingExecutionStatus( void ); #endif // mission From 6f11fc2d4829eb8fc949e203a3d6266509125878 Mon Sep 17 00:00:00 2001 From: jhh8 Date: Sat, 11 May 2024 22:52:13 +0300 Subject: [PATCH 5/5] Create nb_mission_summary.res --- .../resource/ui/nb_mission_summary.res | 222 ++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 reactivedrop/resource/ui/nb_mission_summary.res diff --git a/reactivedrop/resource/ui/nb_mission_summary.res b/reactivedrop/resource/ui/nb_mission_summary.res new file mode 100644 index 000000000..9b552d829 --- /dev/null +++ b/reactivedrop/resource/ui/nb_mission_summary.res @@ -0,0 +1,222 @@ +"Resource/UI/NB_Mission_Summary.res" +{ + "Background" + { + "fieldName" "Background" + "xpos" "0" + "ypos" "0" + "wide" "194" + "ControlName" "Panel" + "bgcolor_override" "12 23 37 64" + "PaintBackgroundType" "2" + } + "BackgroundInner" + { + "fieldName" "BackgroundInner" + "xpos" "2" + "ypos" "2" + "wide" "190" + "ControlName" "Panel" + "PaintBackgroundType" "2" + "bgcolor_override" "16 39 63 200" + //"bgcolor_override" "33 63 93 64" + } + "TitleBG" + { + "fieldName" "TitleBG" + "xpos" "3" + "ypos" "3" + "wide" "188" + "tall" "24" + "ControlName" "Panel" + "PaintBackgroundType" "2" + "bgcolor_override" "27 51 73 255" + } + "TitleBGBottom" + { + "fieldName" "TitleBGBottom" + "xpos" "3" + "ypos" "15" + "wide" "188" + "tall" "12" + "ControlName" "Panel" + "PaintBackgroundType" "0" + "bgcolor_override" "27 51 73 255" + } + "Title" + { + "fieldName" "Title" + "xpos" "3" + "ypos" "3" + "wide" "188" + "tall" "24" + "font" "DefaultLarge" + "labelText" "#nb_mission_brief" + "textAlignment" "center" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + } + "DifficultyTitle" + { + "fieldName" "DifficultyTitle" + "xpos" "18" + "ypos" "32" + "wide" "50" + "tall" "13" + "font" "Default" + "labelText" "#nb_difficulty_title" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + } + "DifficultyLabel" + { + "fieldName" "DifficultyLabel" + "xpos" "5" + "ypos" "0" + "wide" "120" + "tall" "13" + "font" "Default" + "labelText" "DifficultyLabel" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "83 148 192 255" + "pin_to_sibling" "DifficultyTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "1" + } + // reactivedrop + "ChallengeTitle" + { + "fieldName" "ChallengeTitle" + "xpos" "0" + "ypos" "4" + "wide" "50" + "tall" "13" + "font" "Default" + "labelText" "#rd_ui_select_challenge" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + "pin_to_sibling" "DifficultyTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "2" + } + "ChallengeLabel" + { + "fieldName" "ChallengeLabel" + "xpos" "5" + "ypos" "0" + "wide" "120" + "tall" "13" + "font" "Default" + "labelText" "ChallengeLabel" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "83 148 192 255" + "pin_to_sibling" "ChallengeTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "1" + } + // + "MissionTitle" + { + "fieldName" "MissionTitle" + "xpos" "0" + "ypos" "4" + "wide" "50" + "tall" "13" + "font" "Default" + "labelText" "#nb_mission_title" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + "pin_to_sibling" "ChallengeTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "2" + } + "MissionLabel" + { + "fieldName" "MissionLabel" + "xpos" "5" + "ypos" "0" + "wide" "120" + "tall" "13" + "font" "Default" + "labelText" "MissionLabel" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "83 148 192 255" + "pin_to_sibling" "MissionTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "1" + } + "SpeedrunTimeTitle" + { + "fieldName" "SpeedrunTimeTitle" + "xpos" "0" + "ypos" "4" + "wide" "50" + "tall" "13" + "font" "Default" + "labelText" "#nb_speedruntime_title" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + "pin_to_sibling" "MissionTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "2" + } + "SpeedrunTimeLabel" + { + "fieldName" "SpeedrunTimeLabel" + "xpos" "5" + "ypos" "0" + "wide" "120" + "tall" "13" + "font" "Default" + "labelText" "SpeedrunTimeLabel" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "83 148 192 255" + "pin_to_sibling" "SpeedrunTimeTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "1" + } + "ObjectivesTitle" + { + "fieldName" "ObjectivesTitle" + "xpos" "0" + "ypos" "4" + "wide" "100" + "tall" "13" + "font" "Default" + "labelText" "#nb_objectives" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "169 213 255 255" + "pin_to_sibling" "SpeedrunTimeTitle" + "pin_corner_to_sibling" "0" + "pin_to_sibling_corner" "2" + } + "ObjectivesLabel" + { + "fieldName" "ObjectivesLabel" + "xpos" "18" + "ypos" "112" + "font" "Default" + "textAlignment" "north-west" + "ControlName" "Label" + "fgcolor_override" "83 148 192 255" + "wrap" "1" + } + "DetailsButton" + { + "fieldName" "DetailsButton" + "xpos" "146" + "wide" "22" + "tall" "22" + "zpos" "2" + "ControlName" "CBitmapButton" + } +}