Repository navigation
Full fifteen-ball pool rack and centered side-view cameras - #148
Merged
Merged
Conversation
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.
Replace the three-ball prototype with a white cue ball and fifteen distinct object balls in a five-row triangle. Render the object balls with the game's vanilla ball_c..ball_q meshes; existing configuration receives the complete set automatically, with an optional fifteen-entry MODELS.objects override. Practice reracks only after all fifteen pockets, solo challenges require a full clear, and the existing points duel scores all object balls equally. Tournament eight-ball group/black-ball rules are outside this change.
Center the aiming camera directly on the cue ball and shot axis. Follow shots from the long side of the table instead of overhead, fitting the entire cloth from the configured dimensions. Middle mouse and spectator viewing use the same side framing; OVERVIEW_HEIGHT remains compatible as the side-view elevation.
Keep 120 Hz authoritative swept physics, with a bounded 128-contact ceiling per tick for dense break contacts. Publish two endpoint frames every 50 ms to bound full-rack transport and client validation costs, retain interpolation, and cache model resolution instead of rebuilding fifteen paths per render frame.
Validation: all 68 Lua audits pass. Pool physics/authority/playback checks include fifteen dense breaks at several angles/powers, all sixteen starting balls within each supported table size, no overlaps, energy conservation and final settling. Tests cover full-rack mode completion, partial clear staying active, sixteen distinct rendered models, real menu entry, transport node limits and camera frustum coverage for nine size/orientation combinations at 4:3. Maximum measured enabled-client callback including two full frames, match metadata and twelve sound events: 3,800 instructions. Lua syntax, sandbox scan, pool UI lifecycle and diff checks pass. Full suite: 6,722 checks, zero failures. GitHub CI must pass before merging.
Not yet verified in game: vanilla mesh rendering/materials, cue-ball centering and side-view comfort need a live reconnect test on the deployed client. No preload or ArchiveXL change is required. Table placement remains unchanged.
Closes #147. MANUAL updated; documentation site follow-up: opx77-framework/opx77_doc#19.