Repository navigation
Conversation
- Set mainprefix = "x" so HEMTT accepts the x\tmf\addons\* pboprefixes - Make VERSION a number (MAJOR.MINOR) and add VERSION_STR, fixing the L-C01M "macro's result could not be parsed" errors from VERSION_CONFIG - Fix calls to functions that don't exist: - adminmenu: printLogToRPT -> messageLog_printAll (log-to-RPT setting was a no-op) - adminmenu: drop call to removed utilityClose - adminmenu: respawnGroupMarkerUpdate lives in the respawn component - common: testGroupsSlottingScreen called tmf_autotest_fnc_checkTMFVersion - chat: CMND macro ignored its argument - Fix forEach/select precedence in briefing unitPage - Fix params type array in randPosArea and "case default" in spectator keyhandler - Add include guards to script_component.hpp (macro redefinition warnings) - Use standard config class casing, list ai modules in CfgPatches units[] - Use backslash include paths in modules - Add missing final newlines (hemtt utils fnl) - Ignore HEMTT/BI private keys, bump actions/checkout to v4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
These belong to the ACRE BF-888S work on claude/project-thread-m9t6zv. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Matches the BI wiki casing for commands (HEMTT L-S04) and UI/object event names (L-S02UE), including safeZoneX/Y/W/H in UI defines. Case-only changes; Arma treats these case-insensitively. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- adminmenu: _isParadropped was only defined inside the PFH, breaking the teleport log entry - assigngear testGear: sidearm check read _weaponMags before defining it - assigngear initAIGear: fallback type code was stored under a nil key instead of "code" - spectator drawMap: draw2D event passed undefined _campos; now passes camera position and map control Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Make loop and UI-script locals private (L-S16) - Drop dead "_list = " assignments in front of params - Use isEqualTypeAny, configOf, isEqualTo/isNotEqualTo [] and select instead of if/else assignment Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugs: - ACRE2 radio modal ran the language assign function instead of the radio one - ACRE2 radio assign used an undefined _radio, so no radio was ever added - Quick respawn built a log entry but never called the logger Cleanup: - Replace BIS_fnc_MP with remoteExec - Modal utilities get _display from ctrlParent instead of the caller's scope - Private locals, isEqualTo/isNotEqualTo instead of count and !(), configOf, objectParent, joinString, macro argument padding Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Private locals in rearm, spawnWave, waveInit, rearmInit - isEqualTo/isNotEqualTo [] instead of count comparisons - Local marker commands for debug/error markers, one global sync at the end - configOf, macro argument padding, != instead of !(==) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
spawnWave created every object, vehicle and unit (with full loadout) in a single frame, freezing the machine on big waves. Spawning now runs in a per-frame handler with a small cost budget per frame. Wave handlers, the next-wave timer and the admin log run once the wave is fully spawned. The next-wave condition (time + dead count) is now checked once a second instead of every frame. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Aircraft spawned in the air were left without a pilot for a few frames. Each vehicle step now also spawns its crew (from any group). Groups are created with their first unit and get their original leader back before waypoints are applied. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- isNotEqualTo instead of !(isEqualTo) and count comparisons - Private locals in saveRole and replaceSidearmWeapon - Drop push to an undefined _mags in the radio fit check - Loadout attribute DLC logo no longer relies on a nil if-result - #undef GETGEAR before redefining it in testGear - Macro argument padding Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Print each test's own output to RPT; the old check used the accumulated output, so the first test was never printed - Use QUOTE(ADDON) for the config lookup - isNotEqualTo, configOf, private locals, macro padding Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Build unit/vehicle page text with arrays and joinString; vehicle cargo sections share one loop - isNotEqualTo, isEqualTypeAny, configOf, pushBack, private locals - Drop dead _list assignments and a stray _ before a comment Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
QEGVAR(assigngear, faction) had a space in the macro argument, so #loadout read the variable "tmf_assigngear_ faction" and never found the player's faction. Also removes padding from other macro arguments, uses objectParent and isNotEqualTo. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
endMission broadcast messages to tac1_admin_fnc_messageAdmin, which no longer exists. They now go to the admin menu log. The mission end uses remoteExec instead of BIS_fnc_MP. Also: isNotEqualTo/!= instead of !(), isEqualTo [] instead of count, private locals, and drop unused external config classes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Also puts the multi-line QUOTE() blocks in the ambient vehicle init and wave spawner attribute on one line. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- respawn: replace BIS_fnc_MP with remoteExec for the wave server and local client calls - Private locals, objectParent, configOf, isNotEqualTo [] - lints: allow ACRE_* globals in all caps (ACRE's own variables) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Private locals, isNotEqualTo [] - Build action text with joinString - Use QGVAR(mapEvent) for the stacked map click handler id Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugs: - Deleting an ORBAT entry compared against an undefined _val, so units and groups kept pointing at the deleted parent - Switching the ORBAT bin never cleared the parent attributes (same _val) - Editing a group's marker read undefined _fName and _entity - Primary weapon launcher check used rhsdisposable instead of rhs_disposable - Briefing parent scan pushed an undefined _added into the raw ORBAT data Cleanup: configOf, select -1, isEqualTo [], isEqualTypeAny, countSide on units, joinString, private locals. Allow the shared UI IDC arrays in caps. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Group/unit marker and cache functions used the caller's _x instead of their own _grp/_unit parameter - Private locals, configOf, objectParent, isNotEqualTo, select -1, macro argument padding Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- BIS_fnc_inString -> case-insensitive `toLower a in toLower b` - teleport: BIS_fnc_addStackedEventHandler -> MapSingleClick mission EH - Raise REQUIRED_VERSION to 2.18 (negative select indexes and other modern commands are already in use) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
tools/launch.ps1 builds TMF and starts Arma 3 with CBA_A3, ACRE2 and the fresh build. .hemtt/launch.toml lets `hemtt launch` do the same from the workshop IDs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
CBA 3.19 renamed fnc_isDebugConsoleAllowed.sqf to fnc_isDebugConsoleAllowed.inc.sqf, so TMF's wrapper pointed at a missing file and Arma showed "Script ... not found" on start. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The TMF Spectator Settings menu item still opened the TMF_Spectator_Settings mission attribute section, which was removed when the settings moved to CBA (#403). Opening a missing section closed Arma. It now opens the CBA addon options, where the spectator settings live. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Matches d0e9880 on feature/add-bf888s so both branches merge cleanly. Spectator settings are CBA settings (Addon Options > TMF > Spectator). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
That branch simplified the test (d6e2ea6); using the same file here keeps the two branches merging cleanly. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Autotest results now say what is wrong and how to fix it (loadout names, where to assign ACRE2 networks/languages, how to clear DLC notices, ...). CBA setting titles and tooltips describe what each option does and what the choices mean. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The modal reused the admin menu's IDD (56100), so findDisplay could return the modal instead of the menu while both were open. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- New TMF_UI_W/TMF_UI_X canvas: full width up to 16:9, capped and centered on wider screens - Respawn menu is laid out on that canvas instead of raw safeZoneW, so it no longer stretches on 21:9/32:9 (unchanged on 16:9) - Spectator HUD and name tags keep their screen edge but cap their widths; tag centering offset follows the new tag width - Remove an unused tag background control placed outside its group - Admin respawn and Admin Eye map handlers use call instead of spawn - Close displays with closeDisplay instead of closeDialog <idd> (closeDialog takes an exit code, not a display ID) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The file is truncated (HEMTT: failed to fill whole buffer while generating texture headers) and nothing references it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- tags.hpp: remove a stray `};` left behind when the unused background control was deleted; it closed the controls class early and broke the config - Respawn and spectator dialogs are packed unrapified, so the canvas expressions are written out as plain strings instead of QUOTE(TMF_UI_*) macros, and the now unused macros are removed Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Rapify was turned off for 10 addons, so HEMTT never parsed their configs and broken syntax only showed up in game. Configs are now rapifiable: - Unquoted expressions (x/y/w/h, sizeEx, defaultValue, ...) wrapped in QUOTE(), which matches how the engine read them (as strings) - Unquoted class names and stringtable keys in arrays quoted - BI INIT_DISPLAY/INIT_CONTROL macros written out with QUOTE - Module booleans as 1/0 - Add two missing semicolons in assigngear Cfg3DEN - Fix parent class name casing - Quote the default font in the vendored defineCommon.inc - Remove the addon.toml files that disabled rapify Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Guard macros that redefine identical BI/CBA defines with #ifndef - Remove padding from macro arguments; put multi-line QUOTE() values on one line - Remove 66 external class declarations that were never used - Class name casing (ctrlToolbox, CfgScriptPaths, RscListBox) - Add the missing .paa extension on the ORBAT menu icon - List the spectator module in CfgPatches units[] Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The SAFESTART ACTIVE banner and the dry-fire X used a box measured in safeZone fractions with a font measured in GUI grid units, so the text was taller than its box and clipped at the top of the screen. Heights now use the same grid unit as the font, and the X sits at 82.5% of the safe zone instead of a fixed 0.825 offset that moved with the interface size. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ACEX was merged into ACE3, so include ACE's killtracker.inc when available instead of the old acex_killTracker section. (From #431) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Drop the TMF lobby group name handler in favour of CBA's Role@Group naming, and make the 3DEN test always check for CBA-style role descriptions. (From #426) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Sebastian
Updates the build to HEMTT 1.23, works through every HEMTT finding addon by addon, and fixes the bugs that came up along the way.
hemtt checkpasses with 3 style-only warnings (down from about 1,270 findings), andhemtt buildpasses.Build and tooling
mainprefix = "x",VERSION/VERSION_STRsplit (fixes theVERSION_CONFIGerrors), final newlines, include guards on everyscript_component.hppQUOTE(), the BIINIT_DISPLAY/INIT_CONTROLmacros written out, module booleans as1/0, and theaddon.tomlfiles removedREQUIRED_VERSIONraised to 2.18 (the code already usesselect -1and other newer commands).hemtt/launch.tomlforhemtt launch(CBA_A3 and ACRE2, openstmf_template.vrin Eden), plustools/launch.ps1Bug fixes
_radio); the quick respawn log entry was never written; the teleport log entry errored; "print log to RPT" called a missing function; the utility modal shared the menu's IDDfnc_isDebugConsoleAllowed.sqf(fixes the "script not found" box at startup)_val); editing a group marker read undefined_fName/_entity;rhsdisposabletypo; undefined value pushed into the ORBAT data#loadoutread"tmf_assigngear_ faction"(macro padding), so it never found the player's faction; theCMNDmacro ignored its argument_xinstead of their own parameters;case defaultfixedendMissionmessaged a non-existent TAC1 function; the autotest RPT output skipped the first test;testGearread_weaponMagsbefore defining it; 2 missing;in AssignGearCfg3DEN; a corrupt, unusedsquare_ca.paaremovedWave spawner
UI
closeDialog <idd>misuse replaced withcloseDisplay; admin map handlers usecallinstead ofspawnCleanup
isNotEqualTo/isEqualTo [],configOf,objectParent,remoteExecinstead ofBIS_fnc_MP,joinStringinstead of string building in loops, deprecatedBIS_fnc_inStringand stacked event handlers replaced, unused config declarations removedAlso included from the BF-888S work
description.extThese were pushed to
feature/add-bf888safter #444 was merged, so they never reacheddev.Testing
hemtt checkandhemtt buildpass🤖 Generated with Claude Code