Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@
# Windows checkout (core.autocrlf): a CRLF shebang line does not start.
*.sh text eol=lf
port/android/gradlew text eol=lf

# Preserve the pinned upstream decoder byte-for-byte, including its whitespace.
port/third_party/bcdec/bcdec.h -text -whitespace
81 changes: 81 additions & 0 deletions .github/workflows/mcc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: MCC map validation

# Asset-free checks only. Real map files remain outside the repository and
# require explicit MCC_TEST_MAP/HALO_CUSTOM_EDITION_MAPS locally.
on:
push:
paths:
- "port/linux/game/**"
- "port/linux/src/**"
- "port/tools/**"
- "port/third_party/bcdec/**"
- "source/**"
- "tools/test_mcc_*.py"
- "tools/mcc_native_smoke.py"
- "tools/test_cache_file_formats.py"
- "tools/harness/**"
- ".github/workflows/mcc.yml"
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: mcc-validation-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
reader-and-validator:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Install native test dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang lld gcc-multilib python3-pytest
- name: Check MCC parsing, validation, codecs and existing CE parsing
run: >-
python3 -m pytest -q
tools/test_mcc_cache_format.py
tools/test_mcc_tag_validation.py
tools/test_mcc_media.py
tools/test_mcc_resources.py
tools/test_mcc_bitmap_flags.py
tools/test_mcc_shader_channels.py
tools/test_mcc_hud.py
tools/test_mcc_vorbis.py
tools/test_mcc_texture_bridge.py
tools/test_mcc_maps.py
tools/test_mcc_menu.py
tools/test_mcc_pause.py
tools/test_mcc_pause_runtime.py
tools/test_mcc_ui.py
tools/test_mcc_ui_teams.py
tools/test_mcc_ui_network.py
tools/test_mcc_lifecycle.py
tools/test_mcc_native_smoke.py
tools/test_mcc_recordings.py
tools/test_mcc_saved_games.py
tools/test_mcc_network.py
tools/test_mcc_checkpoint.py
tools/test_mcc_grenades.py
tools/test_cache_file_formats.py

windows-adapters:
runs-on: windows-2025
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Install Python test runner
run: python -m pip install pytest
- name: Check native x86 MCC adapters and legacy isolation
shell: cmd
run: |
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set "MCC_VS_INSTALL=%%i"
if not defined MCC_VS_INSTALL exit /b 1
call "%MCC_VS_INSTALL%\Common7\Tools\VsDevCmd.bat" -host_arch=x64 -arch=x86
if errorlevel 1 exit /b 1
clang --version
python -m pytest -q tools/test_mcc_recordings.py tools/test_mcc_native_smoke.py tools/test_mcc_cache_format.py tools/test_mcc_tag_validation.py tools/test_mcc_media.py tools/test_mcc_resources.py tools/test_mcc_bitmap_flags.py tools/test_mcc_shader_channels.py tools/test_mcc_hud.py tools/test_mcc_vorbis.py tools/test_mcc_texture_bridge.py tools/test_mcc_geometry.py tools/test_mcc_scripts.py tools/test_mcc_campaign.py tools/test_mcc_parameters.py tools/test_mcc_syntax.py tools/test_mcc_maps.py tools/test_mcc_menu.py tools/test_mcc_pause.py tools/test_mcc_pause_runtime.py tools/test_mcc_ui.py tools/test_mcc_ui_network.py tools/test_mcc_ui_teams.py tools/test_mcc_lifecycle.py tools/test_mcc_saved_games.py tools/test_mcc_network.py tools/test_mcc_checkpoint.py tools/test_mcc_grenades.py tools/test_cache_file_formats.py
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,6 @@ original/

# CI build outputs (tools/ci_build.py)
dist/

# User-supplied Halo 1 MCC maps and resources
mcc_maps/
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ so players of the two versions can play together.
2. At the first start, the game asks for the disc image. Select it.
3. The game extracts the `maps/` folder. Then the game starts.

Halo 1 MCC custom maps use a separate `mcc_maps/` directory and the
**MCC SINGLEPLAYER** and **MCC MULTIPLAYER** map categories. The experimental
adapter supports modern version-13 maps with embedded resources or matching
MCC `sounds.map` and `bitmaps.map` files in `mcc_maps`. It does not use
Custom Edition's resource files. See [MCC map support](docs/mcc_maps.md)
for supported features, installation and compatibility limits.

On Linux and Windows, the game puts `maps/` next to the executable. On
Android, copy the disc image to the phone first. The app puts `maps/` in its
data folder. Refer to [port/android/README.md](port/android/README.md).
Expand Down
Loading