The stick moves the player through the game's input state (keyboard_controls_update), as the keys do, so it moves with a southpaw or legacy stick layout too, where it was the left stick. The buttons are named by the profile's button layout, which the game sends the overlay as it changes (host_touch_bindings): with Swap triggers the right trigger's button says Grenade.
No control is smaller than a finger (48 dp across). The overlay's opacity can be set; a floating move stick (off by default) goes where the thumb lands in the lower left. Hide is remembered, and Hide and Options act as the finger lifts on them, so a swipe that starts on them aims rather than opens the options mid-fight. A label too long for its button is drawn smaller.
TouchControls, TouchLayout, GyroscopeAim and HaloActivity's touch layout files in the repository's style; the layout file is version 3 (opacity, floating stick), and versions 1 and 2 still load. CI runs the layout tests.
The touch controls' swipe was added after the aim assist, through the mouse's hook: no friction over a target and no adhesion to a moving one, which a controller has. It is now a turn made the stick's rate before the magnetism (halo_linux_touch_look, one port: hook in player_control.c), so the zoom, the stun and the magnetism act on it as on the stick's, and it counts as aiming for them; it follows the profile's invert look as the stick does (input_abstraction_port_look_inverted). input.touch_aim_assist (default true) turns the aim assist off. The mouse's hook is as before the touch controls.
The Xbox debug keyboard's End and Escape stop the movie and restart the map; this keyboard reaches the game only through the console and the menus' text boxes, so they only ever did so by accident (End in a text box too). They are left out, and with them the keys the console consumed on closing and the test and CI steps that extracted them; Escape still closes the console, and the held-key guard still keeps it from pausing.
Fix Escape restarting the level from the console
Conflict with #222's typing guard resolved: the held keys are kept over a switch of the menus, typing or the console.
0.97 is safely below player_control.c's 0.98 cutoff, diagonals too, with no one-float-step margin to guard; the test that extracted the gate by its braces, and the harness flags only it used, are dropped.
Fixed: Weapons whose trigger had flag "analog rate of fire" now read how far the trigger is pulled: fully for mouse/keyboard, the actual pressure for a controller trigger. Before they never fired.
source/input/input_abstraction.c
source/input/input_abstraction.h
source/game/player_control.c
Fixed: Weapon spawn orientation on Custom Edition maps. Multiplayer weapons and items now spawn facing the way the map places them, as in Halo PC.
source/game/game_engine.c
Added: PC vehicle set. There's a new PC option in the vehicle set list, between Gun Turrets and Custom. A team set to PC gets every vehicle the map places, as in Halo PC. On Custom Edition maps that means every placement whose spawn flags name the gametype.
port/assets/menus/ce/strings.xml
port/linux/game/menu_functions.c
source/game/game_engine.h
source/game/game_engine.c
Added: Start LAN, internet and split screen games alone. A game with one machine and one player can now start. Pressing start alone begins the countdown, others can join while the game is in progress, and the lobby no longer says it's waiting for another machine or player.
source/networking/network_server_manager.c
source/interface/ui_widget_game_data_input_functions.c
- input.h: struct key_stroke ascii_code is a char (January stores NONE as
-1; XINPUT_DEBUG_KEYSTROKE.Ascii is CHAR); edit_text.c drops its (byte)
cast on the NONE test and stays 5/5. Measured board-wide over all 24
includers: 0 regressions.
- input_xbox (27/27): _input_get_device_states with indexed gamepad and
button loops and a MIN tick clamp (park reopen);
_input_update_keyboard_devices with a short key-code loop and uncast
ascii ternary (park reopen)
- _structure_test_pill2d (624 B, previously unwritten): left/right offset
line tests via point_from_line2d and the nearer collision
- _find_turning_point: normalize2d/point_from_line2d/set_real_vector2d
replace hand-expanded helper math
- _structure_visibility_build_surfaces_traverse_leaf: the static
bounding_rectangles_intersect returns short through one result (park
reopen)
Rejected: _first_person_weapon_update (removed NULL guards, UB hold).
Follow-up: _path_test_pill_endpoint_near_wall_ok_bit is file-local in both
path_smoothing.c and path_structure_bsp.c; its owner is path_structure_bsp.h.
Stable diff: 0 regressions; parks 226 -> 223.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w3d batch 1 (the structural retarget: census the frame, the [ebp+/-N] slots
and the relocations before proposing any shape).
- action_vehicle _action_vehicle_evaluate_seat (+976): the unit called
vehicle_specific_definition_get through a C4013 implicit declaration; including
its genuine owner units/vehicle_definitions.h fixes the call, and January's
single-exit shape puts the three seat points in the taken branch's own block
instead of behind an early return.
- input_xbox _input_update_analog_button_state (+48): park reopened and removed.
- effects _effect_allowed_by_environment and _effect_generate_particles: coupled
A8 callee/caller re-baseline, ZERO credit. Both are now January-exact in padded
size (and relocation count for the caller) and stay parked and fuzzy; the
remeasures carry dated evidence in config/parked.json.
Full ninja, parks 277 active / 0 stale / 0 invalid, stable diff vs
scratch/claude250k-start.json: gained 3 / 1,824 bytes, regressions 0; fake scan
0 leads.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w2 landing, adversarially verified. park reopens: _input_abstraction_update. Full ninja build and per-function stable_verdicts sweep: 0 regressions. 1 park(s) removed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* misc changes and additions
formatting changes and add structs/constants for terminal work
* match write_to_error_file and add error_global_data
* console work
* requested changes
* terminal work
100% match all terminal functions
* Formatting
---------
Co-authored-by: punpckhdq <121350336+punpckhdq@users.noreply.github.com>