Extend MP mission time limit to 240 min (LYLT)

Time-limit pick lists go from 9 entries (max 30 min) to 23:
1-15, 20, 25, 30, 45, 60, 120, 180, 240. Default stays 7 min.

Content + console only, no MW4.exe rebuild: nothing between the
dropdown and the mission timer clamps the value, and m_gameLength is
8 bits on the wire (MWApplication.cpp:790), so 255 min was always the
real ceiling.

- ConLobbyMission.script (venue console) + HostLobbyMission.script
  (PC host lobby): new list, max_displayed = 10 on the time dropdown,
  drop_list_size[5] 9 -> 23, and the hardcoded 9 loop bounds plus the
  nselected = 3 fallbacks updated.
- TIME_LIST_DEFAULT is now the literal 6 (index of 7 min) instead of
  the C++ global g_nTimeList_Index = 3: index 3 is 4 min in the new
  list, and changing the global would have forced an exe rebuild. The
  reset-to-defaults path matches by VALUE (g_nTimeList_Value = 7) and
  needed no change.
- MISSION-TIME-LIMITS.md: value flow, display formats, why 0 (no time
  limit) black-screens the networked HUD as shipped, and the Plan B
  outline for going past 255.

Sources only: the repacked resource\*.mw4 packages, their .dep files,
the deployed MW4\resource copies and the staged MW4pro.exe are build
output and are NOT tracked here - rebuild them from main after this
merges (build-env\build-resources.ps1).

Verified locally against the built packages: FSConsole self-test green
against vpod_ctcl.py; the console launched windowed on the dev box with
the list scrolling 1 -> 240 and 240 selectable. Not yet run against a
real bay.

FSConsole's own changes (23-entry catalog, NmpBuilder 1-255 guard,
SelfTest.CheckTimeLimits) live in the still-untracked venue/ tree, so
they are NOT in this commit either.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-06 10:47:14 -05:00
co-authored by Claude Opus 5
parent 9aa317ea09
commit 3514acf6d9
3 changed files with 230 additions and 33 deletions
@@ -39,8 +39,8 @@
#define TIME_LIST_DEFAULT $$g_nTimeList_Index$$ // 5 // 7 minutes
#define TIME_VALUE_DEFAULT $$g_nTimeList_Value$$ // 7 // 7 minutes
#else // !DEMO_CODE
#define TIME_LIST_COUNT 9 // MSL
#define TIME_LIST_DEFAULT $$g_nTimeList_Index$$ // 3 // 7 minutes
#define TIME_LIST_COUNT 23 // [LYLT] extended: 1-15,20,25,30,45,60,120,180,240
#define TIME_LIST_DEFAULT 6 // [LYLT] index of "7" (was $$g_nTimeList_Index$$ = 3, the OLD list's "7")
#define TIME_VALUE_DEFAULT $$g_nTimeList_Value$$ // 7 // 7 minutes
#endif // DEMO_CODE
@@ -283,14 +283,19 @@ main
o_game_options[i].offsetLabel = drop_name_loc[i]
o_game_options[i].arrowHeight = 15
if i == 6
if i == 5 // [LYLT] extended time list -> scroll instead of overflowing the panel
{
o_game_options[i].max_displayed = 4
o_game_options[i].max_displayed = 10
}
else
{
o_game_options[i].max_displayed = 16
}
if i == 6
{
o_game_options[i].max_displayed = 4
}
else
{
o_game_options[i].max_displayed = 16
}
}
else
{
@@ -460,13 +465,27 @@ main
o_game_options[i].nselected = TIME_LIST_DEFAULT
#else // !DEMO_CODE
o_game_options[i].list_item[2] = "5"
o_game_options[i].list_item[3] = "7"
o_game_options[i].list_item[4] = "9"
o_game_options[i].list_item[5] = "10"
o_game_options[i].list_item[6] = "12"
o_game_options[i].list_item[7] = "15"
o_game_options[i].list_item[8] = "30"
o_game_options[i].list_item[2] = "3"
o_game_options[i].list_item[3] = "4"
o_game_options[i].list_item[4] = "5"
o_game_options[i].list_item[5] = "6"
o_game_options[i].list_item[6] = "7"
o_game_options[i].list_item[7] = "8"
o_game_options[i].list_item[8] = "9"
o_game_options[i].list_item[9] = "10"
o_game_options[i].list_item[10] = "11"
o_game_options[i].list_item[11] = "12"
o_game_options[i].list_item[12] = "13"
o_game_options[i].list_item[13] = "14"
o_game_options[i].list_item[14] = "15"
o_game_options[i].list_item[15] = "20"
o_game_options[i].list_item[16] = "25"
o_game_options[i].list_item[17] = "30"
o_game_options[i].list_item[18] = "45"
o_game_options[i].list_item[19] = "60"
o_game_options[i].list_item[20] = "120"
o_game_options[i].list_item[21] = "180"
o_game_options[i].list_item[22] = "240"
if callback($$GetLocalNetworkMissionParamater$$, time_limit) == 0
o_game_options[i].nselected = TIME_LIST_DEFAULT
@@ -110,7 +110,7 @@ main
drop_list_size[2] = 2
drop_list_size[3] = 5
drop_list_size[4] = 2
drop_list_size[5] = 9
drop_list_size[5] = 23 // [LYLT] extended time list
drop_list_size[6] = 10
drop_list_size[7] = 10
drop_list_size[8] = 2
@@ -202,14 +202,19 @@ main
o_game_options[i].offsetLabel = drop_name_loc[i]
o_game_options[i].arrowHeight = 15
if i == 11
if i == 5 // [LYLT] extended time list -> scroll instead of overflowing the panel
{
o_game_options[i].max_displayed = 4
o_game_options[i].max_displayed = 10
}
else
{
o_game_options[i].max_displayed = 16
}
if i == 11
{
o_game_options[i].max_displayed = 4
}
else
{
o_game_options[i].max_displayed = 16
}
}
else
{
@@ -545,24 +550,38 @@ main
{
o_game_options[i].list_item[0] = "1"
o_game_options[i].list_item[1] = "2"
o_game_options[i].list_item[2] = "5"
o_game_options[i].list_item[3] = "10"
o_game_options[i].list_item[4] = "15"
o_game_options[i].list_item[5] = "30"
o_game_options[i].list_item[6] = "60"
o_game_options[i].list_item[7] = "90"
o_game_options[i].list_item[8] = "120"
o_game_options[i].list_item[2] = "3"
o_game_options[i].list_item[3] = "4"
o_game_options[i].list_item[4] = "5"
o_game_options[i].list_item[5] = "6"
o_game_options[i].list_item[6] = "7"
o_game_options[i].list_item[7] = "8"
o_game_options[i].list_item[8] = "9"
o_game_options[i].list_item[9] = "10"
o_game_options[i].list_item[10] = "11"
o_game_options[i].list_item[11] = "12"
o_game_options[i].list_item[12] = "13"
o_game_options[i].list_item[13] = "14"
o_game_options[i].list_item[14] = "15"
o_game_options[i].list_item[15] = "20"
o_game_options[i].list_item[16] = "25"
o_game_options[i].list_item[17] = "30"
o_game_options[i].list_item[18] = "45"
o_game_options[i].list_item[19] = "60"
o_game_options[i].list_item[20] = "120"
o_game_options[i].list_item[21] = "180"
o_game_options[i].list_item[22] = "240"
if callback($$GetLocalNetworkMissionParamater$$, time_limit) == 0
o_game_options[i].nselected = 3
o_game_options[i].nselected = 6 // [LYLT] index of "7"
else
{
for int doh = 0; doh< 9; doh++
for int doh = 0; doh< 23; doh++
{
if makeint(o_game_options[i].list_item[doh]) >= callback($$GetLocalNetworkMissionParamater$$, time_limit)
{
o_game_options[i].nselected = doh
doh = 9
doh = 23
}
}
}
@@ -784,15 +803,15 @@ main
//------------------------------------------------------------------------
i = 5
if callback($$GetLocalNetworkMissionParamater$$, time_limit) == 0
o_game_options[i].nselected = 3
o_game_options[i].nselected = 6 // [LYLT] index of "7"
else
{
for int doh = 0; doh< 9; doh++
for int doh = 0; doh< 23; doh++
{
if makeint(o_game_options[i].list_item[doh]) >= callback($$GetLocalNetworkMissionParamater$$, time_limit)
{
o_game_options[i].nselected = doh
doh = 9
doh = 23
}
}
}