mirror of
https://github.com/mangosone/server
synced 2026-08-18 22:26:15 -04:00
The remainder of the `alignment` branch, after the vessel/visibility work and the tick split were taken as their own commits. Grouped here because it is what is left, not because it is one change: terrain and extractor hardening, the config parser, taxi splines, and a networking fix. Terrain: liquid interpolation moved into WmoModel::GroupLiquidAt; the tile-crossing walk in FusedTerrain now traverses the grid instead of sampling the segment at fixed steps, which used to miss any tile a segment only clipped the corner of -- sight straight through a building, or a fall through a bridge. Extractor: MLIQ, WMO and DBC parsing reject malformed input rather than baking it. Config gains a test suite (ConfigTest.cpp). Networking: Nagle is disabled on the IOCP path, so a small packet is no longer held back waiting for a peer that is waiting for it. Taxi: continuous multipoint spline flight, and the fall tracker is reset on flight so landing does not read as a fall. THREE CONFLICTS IN THIS AREA WERE RESOLVED BY COMBINING, NOT BY CHOOSING -- see the merge notes below; each is a case where this branch and the ported mangos_two work had fixed different halves of the same function. Terrain.hpp TileIndex: two defects at opposite ends of the same axis. The port floors so a coordinate in (-1, 0) stops answering as tile 0; this branch folds the exact far edge so 8192 stops answering as tile 64. Both are kept -- flooring leaves an exact 8192 exactly 8192, and the fold's guard is false for every negative index. WmoModel: this branch extracted the per-group liquid lookup into GroupLiquidAt and lost all three of the port's guards in the move -- the heights/tiles size check that H() indexes on, the positively-stated range test that lets a NaN fall out, and the ordering that ranges in float BEFORE converting to int. The extraction is kept and the guards are back inside it. GridMap: both trees implemented the collision disables. The cached read is kept and the direct DisableMgr::IsVMAPDisabledFor calls are not: that function reaches its container through operator[], which INSERTS when the type is absent, so asking it from a map-update thread is a write racing `.reload disables` on the world thread. Line of sight now routes through NearestHitFraction so the disable is applied in one place and the sight test cannot disagree with the hit position, and `ignore` travels with it. Also: FusedTerrain's pin counter is uint32_t in this tree, not the int16_t the ported comment claimed, so the saturation ceiling and that comment were both corrected. Accelerators carried two identical Bvh::Adopt definitions after the merge -- a duplicate symbol git reported no conflict for -- and TileSerializer carried the same index check twice under two names; one of each was removed. The Eluna submodule pointer is deliberately NOT moved by this commit. NOT COMPILED -- no build was run, per the standing rule that none is invoked without an explicit request. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| message.txt | ||