Skip to content

Fix regression in pause menu & The Maw timer, restoring legacy Xbox behaviour. Fix incorrect Edit Gametypes positioning - #378

Merged
bnunu merged 3 commits into
OpenCommunityEdition:mainfrom
chestahh:opence-ui-fixes
Oct 16, 2026
Merged

bnunu merged 3 commits into
OpenCommunityEdition:mainfrom
chestahh:opence-ui-fixes

Conversation

@chestahh

Copy link
Copy Markdown

Restores the pause menu’s black header/footer bars, campaign background gradient, and subtle footer transparency while preserving the Settings button.

Fixes The Maw’s timer digit spacing with High-Res HUD enabled or disabled, and adjusts Edit Gametypes spacing so its selection highlight fits properly.

Restore the pause header and footer bands while retaining Settings, the
campaign body gradient, and the Xbox footer alpha of 191/255. Initialize
the scripted timer scaling flags so stack data cannot shrink its digits.
Move Edit Gametypes and its divider inside the connected panel.

This implementation-only upstream contribution excludes MCC, regression
tests, documentation, optional regeneration commands and workflows. The
complete fixes and tests remain on GulchCE testing and the local validation
branch. Original cherry-picked changes below were combined and scoped to
OpenCE; authorship is retained.

Validated: portable release Windows builds on both bases; 25 upstream
art/timer tests and 52 GulchCE tests before upstream test exclusion; hidden
Xbox and MCC pause captures, both timer HUD settings, and multiplayer menu
captures. Final generator matches all committed pause SVGs. Android/web
targets are unavailable in this Windows configuration; online co-op was
not replayed.

(cherry picked from commit a0c2057)
(cherry picked from commit c76a3a5)
(cherry picked from commit f0804e1)
(cherry picked from commit bff920f)
(cherry picked from commit b1b59eb7237d901dba10aa0b5187b184f3f44a7b)
@GuvenHuso GuvenHuso self-assigned this Oct 16, 2026
Apply the existing campaign gradient to the three- and four-button online
pause artwork, retaining the translucent footer. Admit full-screen Xbox
network campaigns to the existing Settings insertion while keeping local
split-screen unchanged and preventing network Settings from pausing time.

Checked Windows release build, pause-art and campaign-context harnesses,
and hidden two-peer Xbox multiplayer and co-op sessions. The co-op client
can select and open Settings. Android/web builds are unavailable in this
Windows configuration; no wire-format or simulation contract changed.

(cherry picked from commit 04cd1e2)
@bnunu

bnunu commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator

has this been tested?

Recheck committed font settings before cached font selection, including when
high-resolution text was disabled at first use. At each frame boundary,
invalidate only cached HUD/title bitmaps affected by a changed setting so
both enabling and disabling rebuild the appropriate texture on next use.
Keep decoded replacements, font atlases, world textures and menu Apply/Cancel
semantics intact. This corrects shared cache behavior; it adds no MCC data,
map-family routing or networking/simulation changes.

Validation: Windows portable release build and 370 focused production-code,
HUD, menu and MCC checks passed. Tests cover repeated toggles, disabled text
at startup, font scale/cache reuse, selective bitmap refresh and Apply/Cancel.
Android and Web targets were attempted but are unavailable in this Windows
build graph. Live Custom Edition validation is limited by unavailable maps.

(cherry picked from commit ddeb650)
@chestahh

Copy link
Copy Markdown
Author

has this been tested?

all tested on initial commit & new commit, looks good, it's ready for review

@GuvenHuso GuvenHuso assigned GuvenHuso and unassigned GuvenHuso Oct 16, 2026
@GuvenHuso

Copy link
Copy Markdown
Collaborator

Tested it and verified myself too

@innerhat-dev

Copy link
Copy Markdown

Tested it and verified myself too

I stand as a witness :p

@GuvenHuso
GuvenHuso self-requested a review October 16, 2026 21:44
@GuvenHuso GuvenHuso removed their assignment Oct 16, 2026
@bnunu
bnunu merged commit 25697bb into OpenCommunityEdition:main Oct 16, 2026
chestahh added a commit to chestahh/GulchCE that referenced this pull request Oct 16, 2026
Record upstream PR OpenCommunityEdition#378, whose UI fixes are already integrated. Preserve the MCC-owned campaign pause decision and local menu regeneration helpers at the two overlapping additions. The resulting tree is identical to the previously validated main revision 3384f31; its four-platform build and MCC validation passed.
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 16, 2026
The one conflict was in xgpu_texture_cache_begin_frame's declarations.
Main gained the high-res HUD's refresh of cached bitmaps (OpenCommunityEdition#378) and here
the sweep counts time (idle_since, now); both are kept, declarations
before statements.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 16, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 16, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eltanschauung pushed a commit to eltanschauung/halo-ce-universal that referenced this pull request Oct 17, 2026
FractumSeraph added a commit to FractumSeraph/OpenCE that referenced this pull request Oct 17, 2026
…ds menu, on the fork's Halo PC loader

OpenCE's pull request OpenCommunityEdition#388 (dd16971, 54c2d31, and its testing branch's
merge of OpenCommunityEdition#378, which this fork had already taken by hand): client-side mods,
folders of Halo PC tag files whose sounds, bitmaps and text play over a map's
on one machine, with a Mods menu, a load order (load_order.toml) and
incompatibility checks at startup. Every feature of both sides is kept.

The mods on the fork's loader. OpenCE's mods call its own Custom Edition
loader (cache_file_formats.c, custom_edition_bitmaps.c, custom_edition_*),
which this fork replaced with ChupathingyCE's (ce_*.c). Those files stay
deleted (the modify/delete conflicts); what the mods need is ported onto the
fork's code instead:
- custom_edition_hud_placements_walk: ce_hud_placements_walk, a new public
  walk in ce_hud.c (ce_hud.h) over the placements ce_hud.c's conversion
  halves, with its offsets; the conversion itself is left as it was (its
  harness test, test_ce_hud_scale.py, takes its functions by name).
- custom_edition_bitmap_drawable: bitmap_drawable in mod_bitmaps.c
  (OpenCE's check, which only the mods use now).
- custom_edition_loaded_reordered_bitmaps_find, _bitmap_channel_order and
  halo_custom_edition_texels_channels: the fork draws Halo PC's channel
  orders by texture flags (D3DCOMMON_PORT_PC_METER, _PC_MULTIPURPOSE), not by
  OpenCE's address table. mod_bitmaps.c finds, in the loaded map's tags,
  which of the mods' bitmaps are drawn as model shaders' multipurpose maps
  or HUD meters (and drawn otherwise too: kept as they are), as OpenCE's
  custom_edition_bitmaps.c did, and mod_bitmaps_channel_order gives
  xbox_texture_cache.c the flag for each.
- custom_edition_sounds_encode/decode: mod_sounds.c is the fork's
  loose_sounds.c (d73430a) renamed and moved onto mods.c as OpenCE did;
  it keeps the fork's own Xbox ADPCM encoder and ce_vorbis.c decoding.
- custom_edition_cache_tags_loaded: cache_file_tags_are_ce. A mod's bitmap
  is rebuilt into the Xbox's layout as it loads
  (rasterizer_xbox_bitmap_rebuild_hardware_format), so on a Custom Edition
  map xbox_texture_cache.c does not flag it D3DCOMMON_PORT_PC_LAYOUT.
- The fork's ce_tags_pointer reads a Custom Edition map's tags only inside
  its tag cache and gives zeroes elsewhere, which made every mod's block on
  a Custom Edition map read as zeroes. The mods now list the memory their
  tags make (mods_memory_add/remove/contains, mods.c), and ce_tags_pointer
  reads that too.
- Everything the mods store in the game's structures is an Xbox address
  (XBOX_ADDRESS, XBOX_NULL, xbox_pointer), for the 64-bit builds;
  mods_read_real reads 32 bits, as the fork's loose sounds did.
- A mod's maps are matched by the map file's name: mods_tags_loaded drops
  the family suffix (bloodgulch@ce is bloodgulch: map_family_parse).
- The dedicated servers play no mods: port_mods.c (SDL file I/O, the
  startup question) is left out of the server builds and
  server_platform.c answers for it (and platform_ask) with none.
- The Chupathingy menus' main menu (the native default) gets OpenCE's MODS
  row below SETTINGS, as the PC menus have it, so the Mods screen can be
  reached there too.

Conflicts:
- source/cache/cache_files.c, xbox_sound_cache.c, xbox_texture_cache.c,
  source/hs/hs.c: OpenCE's mods hooks and console functions (mods_reload,
  mods_enable, mods_list) in place of loose_sounds', on both load paths
  (the fork's Custom Edition path and the Xbox's), unconditional (they
  were under HALO_CUSTOM_EDITION as loose_sounds was); the fork's hs table
  of Halo PC's functions keeps its layout (418 + 3 + 24 + 3).
- port/linux/game/mod_sounds.c: see above; Vorbis behind
  HALO_CUSTOM_EDITION.
- port/linux/src/port_config.c, port/linux/README.md: audio.loose_sounds
  goes, as OpenCE removed it (the mods folder replaces the tags folder);
  both copies of it (git had kept one outside the conflict) are gone, and
  audio.resampling stays.
- port/linux/src/xbox_textures.c: the fork's swizzle comment; OpenCE's
  HALO_WEB channel reordering (decoded textures put in order before upload)
  kept for its web build, driven by the fork's pc_meter/pc_multipurpose.
- platform.h, sdl_platform.c, menu_tags.c, port_settings.py, bitmaps.xml:
  both sides. menus.json: OpenCE's mods entries, without the pause art the
  fork left out of OpenCommunityEdition#378. port/web/licenses.py and tools/ci_build.py: the
  fork's stb path with OpenCE's wording; the opus and Lucide notices copied
  again (the fork had lost them).
- Android (host_imports.list, guest_host.h, guest_sdl.c, host_sdl.c): both
  added host_sdl_show_message_box; the fork's general one (any buttons, ids
  and flags) serves OpenCE's platform_ask too, so it is kept alone.
- README.md, AGENTS.md, port/android/README.md, port/linux/README.md,
  docs/mods.md: OpenCE's text, the fork's tables and names (the Android
  package net.fractumseraph.halo, the logs folder, ninja browser having no
  way to add mods yet).
- tools/test_mods.py reads debug.txt from the fork's logs folder.

The menus: tools/port_settings.py's screens written again (scratchpad
regen.py, as for the earlier merges): nothing changed, main_menu.mods.xml
as OpenCE's. ce_menus.py's full run needs the PC version's tags, which are
not here; its outputs (main_menu.xml, bitmaps.xml, menus.json, the MODS
pictures) are OpenCE's, merged by hand.

Checked: python tools/network_format.py --record leaves
port/linux/network_format.txt as it was (no wire change; network version
unchanged). No function or setting is defined twice. In Docker (Arch):
ninja linux linux64 server builds (64-bit -Werror; no new warnings);
pytest (test_linux_port with assets/maps, test_touch_menu, test_p2p_copies,
test_save_folder, test_server_control, test_delta, test_delta_peer,
test_profile, test_map_torrents, test_map_families, test_bmp_files,
test_host_watch_hash, test_virtual_keyboard_input, test_settings_sections,
test_loading_picture, tools/harness with OpenCE's test_mod_files.py,
test_map_download, test_ping, test_update_manifest, and OpenCE's
test_mods.py playing a mod over Blood Gulch under Xvfb): 779 passed, 34
skipped, 1 failed, the known test_profile.py
test_check_program_has_no_data_races (ThreadSanitizer cannot run in
Docker); node --test port/web/tests/*.test.js: 18 passed. A mod played
over a Custom Edition map (bloodislands@ce): its sound, string list and
four bitmaps played, one of them a multipurpose map sampled in Halo PC's
channels, a HUD meter of another shape left out, no read outside the tags,
and the game ran and exited cleanly. The browser build (ninja browser,
emsdk) builds and links; OpenCE's web build's units that changed
(xbox_textures.c, the mods, sdl_platform.c, menu_functions.c, ce_hud.c,
ce_map_checks.c, xbox_texture_cache.c) compile with its flags (its full
build needs a POSIX host). Not built here: Android (ninja android) and
Windows. tools/test_map_fuzz.py does not link here: references the merge
did not add (ce_map_checks.c's ce_map_refused_verify to map_family_* and
map_archive_*, bitmaps.c's to release_assert_failed) are not in its unit
list; its own stub of mods_memory_contains links.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 17, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 17, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chestahh
chestahh deleted the opence-ui-fixes branch October 18, 2026 17:47
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 18, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 19, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 19, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hkmodd added a commit to hkmodd/OpenCE that referenced this pull request Oct 19, 2026
…nCommunityEdition#376)

xgpu_texture_cache_begin_frame now also reads the high-res HUD's
settings (OpenCommunityEdition#378), drops an entry's upscaled sheet (OpenCommunityEdition#380) and forgets the
recent lookups. The test's fake world gains those members and functions,
with settings that never change. Its 3 cases and 4 negative controls
pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants