Repository navigation
Releases: havaianasdestruido/FNF-Phoenix-Engine
Release list
v0.0.1-pre1
What's Changed
- docs: link TODO.md backlog items to their tracking issues (#63-#96) by @havaianasdestruido in #98
- docs: add Codename Engine parity backlog to TODO.md by @havaianasdestruido in #99
- fix(ci): compile hxcpp tools in mobile workflow by @havaianasdestruido in #100
- fix: remove noisy traces and guard Discord callback by @havaianasdestruido in #101
- docs: add Windows window API inventory by @havaianasdestruido in #102
- Bug Fix: docs admonitions rendered as plain text by @havaianasdestruido in #106
- Fix BF Clicker mod gameplay by @havaianasdestruido in #105
- Move android/, source-haxelib-patches/, templates/ under source/ by @havaianasdestruido in #107
- feat: add low-level native system utilities by @havaianasdestruido in #103
- Add Android DocumentsProvider for crash logs and mods by @havaianasdestruido in #104
- Make Windows phoenix:// registration check-before-write and auto-register on startup by @havaianasdestruido in #108
- feat(android): add Media3 media session bridge by @havaianasdestruido in #109
- Add Android respect-cutout / real fullscreen setting by @havaianasdestruido in #111
- feat(debug): add Haxe + C/C++ Frame Profiler with debug/log export by @havaianasdestruido in #110
- feat: implement Wowza mod badge by @havaianasdestruido in #112
- Add Get a Job playtime achievement by @havaianasdestruido in #113
- Add Mr. Robot profiler achievement by @havaianasdestruido in #114
- fix(python): wire PythonScript callbacks, text objects, and bf-clicker mod by @havaianasdestruido in #115
- fix: restore mobile hitbox note input by @havaianasdestruido in #116
Full Changelog: v0.0.1-beta...v0.0.1-pre1
v0.0.1-beta
What's Changed
Summary
One cohesive batch fixing all 18 open Arena AI audit issues (#42–#55, #57–#60; #56 does not exist). Root causes were: dependency manifests that disagreed and tracked moving branch heads, CI automation wired to workflows/labels/sites that do not exist, hard-coded/inherited upstream version + update-check data, dead timing wiring, script-hook signatures that drifted from their documentation, an unreachable 'link' option type, library patches vendored in the wrong classpath folder, duplicate backend.Mods type paths, dead build hooks, a missing Python sentinel global, and a NO_PRELOAD_ALL code path that could not compile.
Issue coverage
| Issue | Title | Fix implemented | Relevant commits/files | Tests | Status |
|---|---|---|---|---|---|
| #42 | hmm.json and setup scripts install two different hxcpp forks | hmm.json now uses the MSVC-required FunkinCrew/hxcpp fork; tools/check_dependencies.py fails when hmm/setup disagree; windows-msvc-fix.ps1 verifies the checkout remote is FunkinCrew |
05fe9c1 — hmm.json, setup/unix.sh, setup/windows.bat, setup/windows-msvc-fix.ps1, tools/check_dependencies.py |
test_manifests_agree_and_pinned, test_hxcpp_is_the_funkincrew_fork_everywhere |
✅ Fixed |
| #43 | Conductor.recalculateTimings() never called / Safe Frames no-op |
Safe Frames option gets onChange = () -> Conductor.recalculateTimings(); InitState calls it after loadPrefs(); docs corrected (hit windows come from ClientPrefs.*Window, timeScale only scales accuracy) |
7cdc13e — GameplaySettingsSubState.hx, InitState.hx, conductor-and-timing.md |
test_safe_frames_wires_recalculate_timings |
✅ Fixed |
| #44 | Script hook argument lists don't match script-hooks.md |
Engine now passes documented 5th strumTime to onSpawnNote; onEvent/eventEarlyTrigger documented + templated in their real 4-arg form (Lua and Python, which rejects surplus args) |
1ecbf7a — PlayStateNotes.hx, script-hooks.md, docs/TemplateScript.lua/.py |
test_hook_argument_lists_match_docs_and_templates |
✅ Fixed |
| #45 | Options with type 'link' silently coerced to 'bool' |
Option.get_type() round-trips 'link'; link options no longer read/write non-existent ClientPrefs fields; ACCEPT on a link runs its onChange with the confirm sound in BaseOptionsMenu |
f1508fb — Option.hx, BaseOptionsMenu.hx |
test_link_options_round_trip |
✅ Fixed |
| #46 | Library patches vendored under source/ instead of source-haxelib-patches/ |
Five files git mv'd to source-haxelib-patches/flixel/… (100% renames, no content change), added to the patch table, stale doc references updated, guard test added |
4f3053d — source-haxelib-patches/flixel/**, haxelib-patches.md, README.md, overview.md, editors.md |
test_no_vendored_library_files_under_source |
✅ Fixed |
| #47 | Bug report template points to upstream JS Engine tracker | All issue templates point at this repo's tracker, fictional "automatically be rejected" wording removed, version question now asks for the Phoenix version line; crash-report links in CrashHandler also point here |
35aab05, 5066179 — .github/ISSUE_TEMPLATE/*.yml, CrashHandler.hx |
test_bug_templates_point_at_this_repo |
✅ Fixed |
| #48 | 'status: pending triage' and 'stale' labels used by workflows don't exist |
Verified both labels now exist on the live repo (gh label list); workflows are now self-healing (create the label + core.warning if missing) so the failure can never be silent again |
35aab05 — autotriage.yml, autolock.yml |
test_triage_labels_are_self_healing + live gh label list |
✅ Fixed (labels pre-existed server-side; code hardened) |
| #49 | jekyll-gh-pages.yml can overwrite the Docusaurus site |
Deleted the stock Jekyll sample workflow; docs.yml is the only Pages publisher |
35aab05 — deleted .github/workflows/jekyll-gh-pages.yml |
test_no_jekyll_workflow_can_overwrite_pages |
✅ Fixed |
| #50 | project.hxp references non-existent Prebuild.hx/Postbuild.hx |
Removed the dead constants, the commented-out invocations, and the docs row (recommended smaller option) | 16aa28b — project.hxp, project-configuration.md |
test_no_dead_prebuild_hooks |
✅ Fixed |
| #51 | python-scripting.md documents Function_StopLua for Python |
Python host now also publishes Function_StopLua (same sentinel as Function_StopAll, so the PlayState dispatcher matches it); docs state both names |
4a030d9 — PythonScript.hx, python-scripting.md, script-hooks.md |
test_python_exposes_function_stoplua |
✅ Fixed |
| #52 | backend.Mods and backend.ModsStub declare the same type paths |
Stub class renamed to backend.ModsStub and aliased as Mods in import.hx only for non-MODS builds; shared ModsList typedef moved to its own backend/ModsList.hx; dead identical #if/#else removed; hard import backend.Mods lines removed so the conditional selection is authoritative |
32c8d6e — Mods.hx, ModsStub.hx, ModsList.hx, import.hx, 6 call-site files |
test_mods_and_stub_have_distinct_type_paths |
✅ Fixed |
| #53 | Update checker fetches upstream JS Engine changelog | Checker (and the debug-menu test screen) poll this repo's THECHANGELOG.md and compare against the Phoenix version; OutdatedState shows Phoenix version and links to this repo's releases |
5066179 — TitleState.hx, OutdatedState.hx, SuperSecretDebugMenu.hx |
test_update_checker_uses_this_repo_and_phoenix_version |
✅ Fixed |
| #54 | Engine version strings hard-coded, contradict project.hxp/THECHANGELOG.md |
phoenixEngineVersion is now derived from app metadata (project.hxp VERSION, also exposed as ENGINE_VERSION define); 'pre-alpha' gone; THECHANGELOG.md top entry is 0.3.2;; JSE string documented as an upstream compatibility marker only; AGENTS.md versionName/versionCode claim corrected |
5066179, 6bc657b — MainMenuState.hx, project.hxp, THECHANGELOG.md, AGENTS.md, project-configuration.md |
test_version_comes_from_project_metadata |
✅ Fixed |
| #55 | -DNO_PRELOAD_ALL build fails (no LoadingState constructor, no hasSound) |
Added the expected LoadingState(target, stopMusic, directory) constructor + create() hand-off under NO_PRELOAD_ALL; sound/library checks now use OpenFlAssets (which has hasSound); flag documented |
5f4645d — LoadingState.hx, project-configuration.md |
test_no_preload_all_branch_compiles_statically |
✅ Fixed (statically; see Limitations) |
| #57 | CI cache key doesn't pin resolved revisions, invalidated by unused files | Key is now per-job (matrix.setup) and hashes only hmm.json, which after #58 records every git revision as a commit SHA; resolved revisions are printed in CI logs |
ecd756b — .github/workflows/main.yml |
test_cache_key_pins_dependency_set_per_job |
✅ Fixed |
| #58 | Git dependencies installed from moving branch heads | Every git dependency in hmm.json, setup/unix.sh and setup/windows.bat pinned to a full 40-char commit (current heads verified via the GitHub API); drift guard in tools/check_dependencies.py |
05fe9c1 — hmm.json, setup/unix.sh, setup/windows.bat, tools/check_dependencies.py |
test_manifests_agree_and_pinned |
✅ Fixed |
| #59 | 'Comment on pull request' workflow triggers on a non-existent workflow | Trigger changed to workflows: ['Build'] (the real main.yml name); guard test asserts every workflow_run trigger names an existing workflow |
35aab05 — .github/workflows/nightly.yml |
test_nightly_trigger_names_a_real_workflow |
✅ Fixed |
| #60 | mobile.yml builds with Haxe 4.3.6 vs required 4.3.7 |
Both workflows use HAXE_VERSION: "4.3.7" via ${{ env.HAXE_VERSION }}; mobile now installs deps via setup/unix.sh (same path as desktop, no ` |
trueswallowing); leftoverUPDATE HAXE TO 4.3.7.txt` deleted |
ecd756b — main.yml, mobile.yml, deleted txt file |
Closes #42, Closes #43, Closes #44, Closes #45, Closes #46, Closes #47, Closes #48, Closes #49, Closes #50, Closes #51, Closes #52, Closes #53, Closes #54, Closes #55, Closes #57, Closes #58, Closes #59, Closes #60
Technical details
- Dependencies (#42/#58): one pin set, three manifests. SHAs are the current branch heads of each fork (verified with
api.github.comon 2026-10-16); bumping a dependency is now a deliberate edit to all three files, enforced bytools/check_dependencies.py(the historicalhscriptvshscript-improvednaming for the same CodenameCrew URL is normalised there). - CI (#57/#59/#60): compiler version is a workflow-level
HAXE_VERSIONenv referenced bysetup-haxeand the cache key in both build workflows; the haxelib cache key identifies the pinned dependency set per job setup instead of install scripts most jobs never read. - Versions (#53/#54): no new hard-coded release strings in game code — the only literal left is a fallback in
MainMenuStatethat the test suite asserts equalsproject.hxpVERSIONand the firstTHECHANGELOG.mdentry. Upstream-facing "donate"/credits links to JS Engine were intentionally left alone; only user-facing bug-report/update links moved. - Engine (#43/#44/#45/#51/#52/#55): all changes are additive or behaviour-restoring (new
onChangecall, new documented argument scripts already expected, new Python global alias, distinct stub type path, new constructor that only exists underNO_PRELOAD_ALL), so existing Psych/JSE mods and normal builds keep their current behaviour.
Full Changelog: v0.0.1-alpha...v0.0.1-beta
v0.0.1-alpha
What's Changed
- Bug Fix: Android APK missing libc++_shared.so (dlopen failure at launch) by @arena-ai-coding-agent[bot] in #20
- docs: document how the source-haxelib-patches work by @arena-ai-coding-agent[bot] in #23
- Fix mobile buttons not appearing + font copy failures on install by @arena-ai-coding-agent[bot] in #21
- Bug Fix: mobile hitboxes/buttons followed the gameplay camera (unplayable on mobile) by @arena-ai-coding-agent[bot] in #22
- Android platform layer + mobile editor support (TODO.md mobile P1/P2 tasks) by @arena-ai-coding-agent[bot] in #24
- Enhancement: expand every TBD section in CODESTYLE.md by @arena-ai-coding-agent[bot] in #26
- feat: add Phoenix URI deep links for Android, iOS and Windows by @arena-ai-coding-agent[bot] in #25
- Add MP3 and OGG compression tools by @arena-ai-coding-agent[bot] in #27
- tools: fix audio compressor root default and the File.Replace() failure by @arena-ai-coding-agent[bot] in #28
- build: add NO_BUILTIN_CONTENT content-stripped (copyright-safe) build flag by @arena-ai-coding-agent[bot] in #29
- Compress all images (~19% smaller) + image compression scripts in tools/ by @arena-ai-coding-agent[bot] in #30
- docs: full codebase documentation site (Docusaurus) by @havaianasdestruido in #31
- ⚡ Bolt: Optimize loop in PlayStateRating.updateNps by @havaianasdestruido in #32
- ⚡ Bolt: record performance findings in journal (no runtime change) by @havaianasdestruido in #33
- ⚡ Bolt: Avoid O(n) indexOf when no scripts are active by @havaianasdestruido in #34
- ⚡ Bolt: Avoid O(n) indexOf when no scripts are active by @havaianasdestruido in #35
Full Changelog: fix-ci...v0.0.1-alpha
Fixed CI now (mobile, windows) + fixes
Fixed FULLY CI now (mobile, windows)
What's Changed
- refactor: rename inappropriate identifiers by @havaianasdestruido in #15
- fix(ci): stabilize Windows builds by @havaianasdestruido in #16
- fix(ci): disable hxcpp LTO for Android by @havaianasdestruido in #18
- fix: point Android artifact uploads at the debug APK flavor by @arena-ai-coding-agent[bot] in #19
New Contributors
- @arena-ai-coding-agent[bot] made their first contribution in #19
Full Changelog: pre-pre-pre-alpha...fix-ci
First release hell yeah
What's Changed
- Nightly link by @havaianasdestruido in #1
- Minify json by @havaianasdestruido in #2
- upd by @havaianasdestruido in #3
- The fearsome python experiment is now fully completed by @havaianasdestruido in #5
- Bottlenecks by @havaianasdestruido in #6
- Speed up native build workflows and port parallel build flags to local scripts by @havaianasdestruido in #8
- Ship bf-clicker mod in build outputs by @havaianasdestruido in #7
- Fix failing workflows and optimize cache system by @havaianasdestruido in #9
- Add Mobile and Android Target Support by @havaianasdestruido in #10
- Rebranding by @havaianasdestruido in #11
- Fix UTF-8 BOM in hmm.json causing hmm install failure by @havaianasdestruido in #12
- workflow: default builds to Windows and Android with toggle by @havaianasdestruido in #13
New Contributors
- @havaianasdestruido made their first contribution in #1
Full Changelog: https://github.com/havaianasdestruido/FNF-Phoenix-Engine/commits/pre-pre-pre-alpha