fix: restore rooftop ground on Intel and fill canal frontage

Tessellate terrain and light-map surfaces for vertex-fog drivers, render animated water from the tiled mesh, request accurate fog and extend renderer diagnostics. Add canal-front buildings, raised quays, trees and benches while preserving the terrace and native runtime.

Update native regression coverage and shipping executables. Exclude laptop screenshots and local runtime data.
This commit is contained in:
Artvasil09 2026-10-27 19:24:00 +03:00
parent 41ba8f46ed
commit 1006ba444b
19 changed files with 3005 additions and 32 deletions

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@
"format": "RGM1: count/bytes + material/3*(position,normal,uv)", "format": "RGM1: count/bytes + material/3*(position,normal,uv)",
"gl_axes": "X/Z/Y; normals explicitly outward; no runtime model engine", "gl_axes": "X/Z/Y; normals explicitly outward; no runtime model engine",
"triangles": { "triangles": {
"scene": 35386, "scene": 44400,
"car": 360, "car": 360,
"boat": 170 "boat": 170
}, },
@ -6660,6 +6660,6 @@
true true
] ]
], ],
"removed_invisible_triangles": 18309, "removed_invisible_triangles": 20717,
"front_face": "CCW" "front_face": "CCW"
} }

Binary file not shown.

View file

@ -8,7 +8,7 @@ namespace AssemblerCasinoLauncher
{ {
static class Program static class Program
{ {
const string ExpectedPokerSha256 = "63C04B59D74772621A7563EA70DFA6764C60684459EE7D046AF30B555A01FF15"; const string ExpectedPokerSha256 = "CF04525CD5C9C87412001FF4F4CBBCA1C7019F71A53FEBA3BB8051323B0EB634";
[STAThread] [STAThread]
static void Main() static void Main()

Binary file not shown.

Binary file not shown.

View file

@ -83,7 +83,13 @@ readback synchronisation, without a redundant preceding glFinish.
and gameplay do not change with the render profile; other rooms are unaffected. and gameplay do not change with the render profile; other rooms are unaffected.
- The offline mesh packer discards only triangles that face away from every - The offline mesh packer discards only triangles that face away from every
possible rooftop eye position. Runtime back-face culling handles head turns. possible rooftop eye position. Runtime back-face culling handles head turns.
The static mesh now contains 35,386 triangles instead of 53,695. The static mesh, including driver-safe ground and canal frontage, stays under 48,000
triangles. Never-visible faces are pruned before shipping.
- Terrain and light-map triangles crossing the near district are at most 64 m
wide, with finer cells near the terrace. This avoids relying on per-fragment
fog for multi-kilometre polygons on integrated OpenGL drivers. Water animation
uses its own display list from the same tessellated mesh, not two giant quads.
GL_NICEST requests accurate fog, but the geometry remains safe if ignored.
- CPU foreground surfaces use projected screen bounds and camera-facing box - CPU foreground surfaces use projected screen bounds and camera-facing box
sides. The final frame avoids an extra GDI scaling/alpha-blending pass. sides. The final frame avoids an extra GDI scaling/alpha-blending pass.
- Mipmap generation is optional on older OpenGL drivers. If hardware rendering - Mipmap generation is optional on older OpenGL drivers. If hardware rendering
@ -97,6 +103,12 @@ Integrated Intel graphics use shared system memory; the small dedicated-memory
figure alone is not a useful rendering budget. Actual laptop performance must be figure alone is not a useful rendering budget. Actual laptop performance must be
checked on that machine, not inferred from the desktop benchmark. checked on that machine, not inferred from the desktop benchmark.
The western canal has two rows of varied waterfront facades, raised stone quays,
bridge openings, trees and benches. These replace the empty cleared block rows;
they use the same world records in the GL and software renderers. The offline
`pack_rooftop.py --district-only` option rebuilds layout and lighting without
repacking unchanged sky, hand-animation or material assets.
The art direction takes atmospheric inspiration from the rooftop reference: The art direction takes atmospheric inspiration from the rooftop reference:
https://www.loftprojectetagi.ru/visitors/krysha/ . It is an original game backdrop, https://www.loftprojectetagi.ru/visitors/krysha/ . It is an original game backdrop,
not an exact survey or reproduction of that venue. Generated source images are not an exact survey or reproduction of that venue. Generated source images are
@ -121,3 +133,6 @@ written under `build/hall-expansion/roof-*.png`. `--parity` verifies tested
procedures against the full shipping object before publishing. procedures against the full shipping object before publishing.
The native harness also checks all three resolution profiles, automatic downgrade, The native harness also checks all three resolution profiles, automatic downgrade,
F8 switching, and software roads/water with both present and missing city textures. F8 switching, and software roads/water with both present and missing city textures.
It also captures GL_FASTEST fog, checks ground-cell bounds and water tessellation.
These are compatibility checks on the test machine, not a substitute for confirming
the result on the laptop's actual Intel driver.

BIN
poker.exe

Binary file not shown.

View file

@ -1,10 +1,16 @@
; Generated city block footprints and rooftop-relative heights. ; Generated city block footprints and rooftop-relative heights.
ROOF_BUILDING_COUNT equ 518 ROOF_BUILDING_COUNT equ 578
.data .data
roofDistrict3D LABEL DWORD roofDistrict3D LABEL DWORD
dd 1209139,2162688,2555904,3473408,-2949120,187,5
dd 458752,1150157,2555904,3473408,-3145728,186,5
dd 917504,1638400,-1966080,-1310720,-3538944,203,0 dd 917504,1638400,-1966080,-1310720,-3538944,203,0
dd 2818048,3771597,2359296,3473408,-2621440,187,5
dd -1019085,-196608,2555904,3473408,-2883584,186,5
dd 3276800,3997696,-1966080,-1310720,-3211264,203,0 dd 3276800,3997696,-1966080,-1310720,-3211264,203,0
dd -1441792,-720896,-1966080,-1310720,-3407872,203,0 dd -1441792,-720896,-1966080,-1310720,-3407872,203,0
dd 3830579,4521984,2359296,3473408,-3145728,188,5
dd -1900544,-1078067,2555904,3473408,-3080192,193,5
dd 393216,2228224,-3538944,-3080192,-2339635,192,1 dd 393216,2228224,-3538944,-3080192,-2339635,192,1
dd 5111808,5570560,262144,1179648,-3014656,192,2 dd 5111808,5570560,262144,1179648,-3014656,192,2
dd -1966080,-131072,-3538944,-3080192,-3126067,189,1 dd -1966080,-131072,-3538944,-3080192,-3126067,189,1
@ -15,17 +21,25 @@ roofDistrict3D LABEL DWORD
dd -4325376,-2490368,1179648,1638400,-2929459,188,1 dd -4325376,-2490368,1179648,1638400,-2929459,188,1
dd 5111808,6946816,-196608,262144,-3014656,192,0 dd 5111808,6946816,-196608,262144,-3014656,192,0
dd 5111808,6946816,1179648,1638400,-2994995,192,1 dd 5111808,6946816,1179648,1638400,-2994995,192,1
dd -3247309,-2555904,2555904,3473408,-2818048,193,5
dd -589824,-131072,-4456448,-3538944,-3126067,189,3 dd -589824,-131072,-4456448,-3538944,-3126067,189,3
dd 2752512,3211264,-4456448,-3538944,-2293760,187,2 dd 2752512,3211264,-4456448,-3538944,-2293760,187,2
dd -4325376,-2490368,-1179648,-720896,-2536243,187,1 dd -4325376,-2490368,-1179648,-720896,-2536243,187,1
dd 5111808,6946816,-1179648,-720896,-2929459,191,1 dd 5111808,6946816,-1179648,-720896,-2929459,191,1
dd 458752,1281229,5373952,6225920,-2686976,189,5
dd 1340211,2162688,5373952,6225920,-2490368,190,5
dd -888013,-196608,5373952,6225920,-3145728,189,5
dd 393216,2228224,-4915200,-4456448,-2359296,192,0 dd 393216,2228224,-4915200,-4456448,-2359296,192,0
dd -4325376,-3866624,262144,1179648,-2949120,188,2 dd -4325376,-3866624,262144,1179648,-2949120,188,2
dd 6488064,6946816,262144,1179648,-2994995,192,3 dd 6488064,6946816,262144,1179648,-2994995,192,3
dd 2818048,3574989,5373952,6291456,-2883584,190,5
dd -4259840,-3306291,2555904,3473408,-3014656,192,5
dd -1966080,-1507328,-4456448,-3538944,-3145728,189,2 dd -1966080,-1507328,-4456448,-3538944,-3145728,189,2
dd 4128768,4587520,-4456448,-3538944,-2274099,187,3 dd 4128768,4587520,-4456448,-3538944,-2274099,187,3
dd -4325376,-2490368,-2555904,-2097152,-2555904,187,0 dd -4325376,-2490368,-2555904,-2097152,-2555904,187,0
dd 5111808,6946816,-2555904,-2097152,-2949120,191,0 dd 5111808,6946816,-2555904,-2097152,-2949120,191,0
dd -1900544,-946995,5373952,6225920,-2621440,188,5
dd 3633971,4521984,5373952,6291456,-2686976,191,5
dd -1966080,-131072,-4915200,-4456448,-3145728,189,0 dd -1966080,-131072,-4915200,-4456448,-3145728,189,0
dd 2752512,4587520,-4915200,-4456448,-2293760,187,0 dd 2752512,4587520,-4915200,-4456448,-2293760,187,0
dd -4325376,-3866624,-2097152,-1179648,-2555904,187,2 dd -4325376,-3866624,-2097152,-1179648,-2555904,187,2
@ -34,11 +48,13 @@ roofDistrict3D LABEL DWORD
dd 5111808,5570560,-4456448,-3538944,-2555904,190,2 dd 5111808,5570560,-4456448,-3538944,-2555904,190,2
dd 393216,2228224,-5898240,-5439488,-2994995,191,1 dd 393216,2228224,-5898240,-5439488,-2994995,191,1
dd -5308416,-4849664,262144,1179648,-2667315,193,3 dd -5308416,-4849664,262144,1179648,-2667315,193,3
dd -3509453,-2555904,5373952,6160384,-2949120,188,5
dd -1966080,-131072,-5898240,-5439488,-3060531,188,1 dd -1966080,-131072,-5898240,-5439488,-3060531,188,1
dd -5308416,-4849664,-2097152,-1179648,-2274099,192,3 dd -5308416,-4849664,-2097152,-1179648,-2274099,192,3
dd 7471104,7929856,-2097152,-1179648,-2863923,186,1 dd 7471104,7929856,-2097152,-1179648,-2863923,186,1
dd -1966080,-131072,6881280,7340032,-3014656,186,0 dd -1966080,-131072,6881280,7340032,-3014656,186,0
dd 2752512,4587520,6881280,7340032,-2883584,192,0 dd 2752512,4587520,6881280,7340032,-2883584,192,0
dd -5868749,-4915200,2490368,3473408,-2621440,192,5
dd 7864320,8912896,65536,1376256,-1441792,199,0 dd 7864320,8912896,65536,1376256,-1441792,199,0
dd 393216,851968,-6815744,-5898240,-3014656,191,2 dd 393216,851968,-6815744,-5898240,-3014656,191,2
dd -6684672,-4849664,-196608,262144,-2686976,193,0 dd -6684672,-4849664,-196608,262144,-2686976,193,0
@ -46,6 +62,7 @@ roofDistrict3D LABEL DWORD
dd -4325376,-2490368,-4915200,-4456448,-2162688,186,0 dd -4325376,-2490368,-4915200,-4456448,-2162688,186,0
dd -4325376,-3866624,-4456448,-3538944,-2162688,186,2 dd -4325376,-3866624,-4456448,-3538944,-2162688,186,2
dd 5111808,6946816,-4915200,-4456448,-2555904,190,0 dd 5111808,6946816,-4915200,-4456448,-2555904,190,0
dd -4259840,-3568435,5373952,6160384,-3145728,187,5
dd -589824,-131072,-6815744,-5898240,-3060531,188,3 dd -589824,-131072,-6815744,-5898240,-3060531,188,3
dd -6684672,-4849664,-1179648,-720896,-2274099,192,1 dd -6684672,-4849664,-1179648,-720896,-2274099,192,1
dd 7471104,9306112,-1179648,-720896,-2883584,186,0 dd 7471104,9306112,-1179648,-720896,-2883584,186,0
@ -57,6 +74,7 @@ roofDistrict3D LABEL DWORD
dd -1966080,-1507328,7340032,8257536,-3014656,186,2 dd -1966080,-1507328,7340032,8257536,-3014656,186,2
dd 393216,2228224,-7274496,-6815744,-3014656,191,0 dd 393216,2228224,-7274496,-6815744,-3014656,191,0
dd -6684672,-6225920,262144,1179648,-2686976,193,2 dd -6684672,-6225920,262144,1179648,-2686976,193,2
dd -6619136,-5927731,2490368,3473408,-2818048,191,5
dd 5111808,6946816,-5898240,-5439488,-2143027,189,1 dd 5111808,6946816,-5898240,-5439488,-2143027,189,1
dd 7471104,7929856,-4456448,-3538944,-2490368,193,2 dd 7471104,7929856,-4456448,-3538944,-2490368,193,2
dd 5111808,6946816,6881280,7340032,-3145728,187,0 dd 5111808,6946816,6881280,7340032,-3145728,187,0
@ -67,17 +85,20 @@ roofDistrict3D LABEL DWORD
dd 5111808,5570560,-6815744,-5898240,-2162688,189,2 dd 5111808,5570560,-6815744,-5898240,-2162688,189,2
dd 7471104,9306112,-3538944,-3080192,-2470707,193,1 dd 7471104,9306112,-3538944,-3080192,-2470707,193,1
dd 5111808,5570560,7340032,8257536,-3145728,187,2 dd 5111808,5570560,7340032,8257536,-3145728,187,2
dd -5737677,-4915200,5373952,6160384,-2883584,187,5
dd -3932160,-2883584,-7012352,-5701632,-2097152,204,0 dd -3932160,-2883584,-7012352,-5701632,-2097152,204,0
dd -6291456,-5242880,-4653056,-3342336,-2293760,204,0 dd -6291456,-5242880,-4653056,-3342336,-2293760,204,0
dd 393216,2228224,-8257536,-7798784,-2601779,190,1 dd 393216,2228224,-8257536,-7798784,-2601779,190,1
dd 393216,2228224,9240576,9699328,-2293760,190,0 dd 393216,2228224,9240576,9699328,-2293760,190,0
dd 7471104,9306112,-4915200,-4456448,-2490368,193,0 dd 7471104,9306112,-4915200,-4456448,-2490368,193,0
dd 6488064,6946816,7340032,8257536,-3126067,187,3 dd 6488064,6946816,7340032,8257536,-3126067,187,3
dd -6619136,-5796659,5373952,6160384,-3080192,186,5
dd 2752512,4587520,-8257536,-7798784,-2863923,193,1 dd 2752512,4587520,-8257536,-7798784,-2863923,193,1
dd 2752512,4587520,9240576,9699328,-2228224,193,0 dd 2752512,4587520,9240576,9699328,-2228224,193,0
dd 5111808,6946816,-7274496,-6815744,-2162688,189,0 dd 5111808,6946816,-7274496,-6815744,-2162688,189,0
dd 8847360,9306112,-4456448,-3538944,-2470707,193,3 dd 8847360,9306112,-4456448,-3538944,-2470707,193,3
dd 5111808,6946816,8257536,8716288,-3126067,187,1 dd 5111808,6946816,8257536,8716288,-3126067,187,1
dd -8096973,-7274496,2490368,3473408,-2555904,191,5
dd 393216,851968,-9175040,-8257536,-2621440,190,2 dd 393216,851968,-9175040,-8257536,-2621440,190,2
dd -9043968,-7208960,-196608,262144,-2752512,190,0 dd -9043968,-7208960,-196608,262144,-2752512,190,0
dd -9043968,-7208960,1179648,1638400,-2732851,190,1 dd -9043968,-7208960,1179648,1638400,-2732851,190,1
@ -99,6 +120,8 @@ roofDistrict3D LABEL DWORD
dd 393216,2228224,-9633792,-9175040,-2621440,190,0 dd 393216,2228224,-9633792,-9175040,-2621440,190,0
dd -9043968,-8585216,262144,1179648,-2752512,190,2 dd -9043968,-8585216,262144,1179648,-2752512,190,2
dd 393216,2228224,10616832,11075584,-2274099,190,1 dd 393216,2228224,10616832,11075584,-2274099,190,1
dd -8978432,-8155955,2490368,3473408,-2752512,190,5
dd -7965901,-7274496,5373952,6160384,-2818048,186,5
dd -9043968,-7208960,-3538944,-3080192,-2994995,188,1 dd -9043968,-7208960,-3538944,-3080192,-2994995,188,1
dd 9830400,11665408,-3538944,-3080192,-2732851,188,1 dd 9830400,11665408,-3538944,-3080192,-2732851,188,1
dd -2949120,-2490368,9699328,10616832,-3126067,192,3 dd -2949120,-2490368,9699328,10616832,-3126067,192,3
@ -117,6 +140,7 @@ roofDistrict3D LABEL DWORD
dd -9043968,-7208960,-4915200,-4456448,-3014656,188,0 dd -9043968,-7208960,-4915200,-4456448,-3014656,188,0
dd 9830400,11665408,-4915200,-4456448,-2752512,188,0 dd 9830400,11665408,-4915200,-4456448,-2752512,188,0
dd -4325376,-3866624,9699328,10616832,-3145728,192,2 dd -4325376,-3866624,9699328,10616832,-3145728,192,2
dd -8978432,-8024883,5373952,6160384,-3014656,193,5
dd 393216,2228224,-10616832,-10158080,-2208563,189,1 dd 393216,2228224,-10616832,-10158080,-2208563,189,1
dd -10027008,-9568256,262144,1179648,-2470707,187,3 dd -10027008,-9568256,262144,1179648,-2470707,187,3
dd -4325376,-2490368,-9633792,-9175040,-2424832,192,0 dd -4325376,-2490368,-9633792,-9175040,-2424832,192,0
@ -140,6 +164,7 @@ roofDistrict3D LABEL DWORD
dd 9830400,11665408,-5898240,-5439488,-2339635,187,1 dd 9830400,11665408,-5898240,-5439488,-2339635,187,1
dd 9830400,11665408,6881280,7340032,-2293760,193,0 dd 9830400,11665408,6881280,7340032,-2293760,193,0
dd 7471104,7929856,9699328,10616832,-2424832,191,2 dd 7471104,7929856,9699328,10616832,-2424832,191,2
dd -10325197,-9633792,2490368,3473408,-2490368,190,5
dd 786432,1835008,11862016,13172736,-1900544,204,0 dd 786432,1835008,11862016,13172736,-1900544,204,0
dd 393216,851968,-11534336,-10616832,-2228224,189,2 dd 393216,851968,-11534336,-10616832,-2228224,189,2
dd -11403264,-9568256,-196608,262144,-2490368,187,0 dd -11403264,-9568256,-196608,262144,-2490368,187,0
@ -170,12 +195,14 @@ roofDistrict3D LABEL DWORD
dd 11206656,11665408,7340032,8257536,-2274099,193,3 dd 11206656,11665408,7340032,8257536,-2274099,193,3
dd -6684672,-4849664,10616832,11075584,-2863923,189,1 dd -6684672,-4849664,10616832,11075584,-2863923,189,1
dd 7471104,9306112,10616832,11075584,-2405171,191,1 dd 7471104,9306112,10616832,11075584,-2405171,191,1
dd -11337728,-10384179,2490368,3473408,-2686976,189,5
dd 5111808,5570560,-11534336,-10616832,-2424832,187,2 dd 5111808,5570560,-11534336,-10616832,-2424832,187,2
dd -11403264,-9568256,-3538944,-3080192,-3060531,193,1 dd -11403264,-9568256,-3538944,-3080192,-3060531,193,1
dd 12189696,14024704,-3538944,-3080192,-2667315,191,1 dd 12189696,14024704,-3538944,-3080192,-2667315,191,1
dd 5111808,5570560,12058624,12976128,-2883584,189,2 dd 5111808,5570560,12058624,12976128,-2883584,189,2
dd 393216,2228224,-11993088,-11534336,-2228224,189,0 dd 393216,2228224,-11993088,-11534336,-2228224,189,0
dd -11403264,-10944512,262144,1179648,-2490368,187,2 dd -11403264,-10944512,262144,1179648,-2490368,187,2
dd -10587341,-9633792,5373952,6291456,-2621440,193,5
dd -1966080,-131072,-11993088,-11534336,-2293760,186,0 dd -1966080,-131072,-11993088,-11534336,-2293760,186,0
dd -11403264,-10944512,-2097152,-1179648,-3145728,186,2 dd -11403264,-10944512,-2097152,-1179648,-3145728,186,2
dd 13565952,14024704,-2097152,-1179648,-3060531,192,3 dd 13565952,14024704,-2097152,-1179648,-3060531,192,3
@ -195,6 +222,7 @@ roofDistrict3D LABEL DWORD
dd -10027008,-9568256,7340032,8257536,-2601779,190,3 dd -10027008,-9568256,7340032,8257536,-2601779,190,3
dd 12189696,12648448,7340032,8257536,-2228224,188,2 dd 12189696,12648448,7340032,8257536,-2228224,188,2
dd -6684672,-4849664,11599872,12058624,-2228224,190,0 dd -6684672,-4849664,11599872,12058624,-2228224,190,0
dd -11337728,-10646323,5373952,6291456,-2818048,192,5
dd 10223616,11272192,9502720,10813440,-1900544,204,0 dd 10223616,11272192,9502720,10813440,-1900544,204,0
dd 5111808,6946816,-11993088,-11534336,-2424832,187,0 dd 5111808,6946816,-11993088,-11534336,-2424832,187,0
dd -11403264,-10944512,-4456448,-3538944,-3080192,193,2 dd -11403264,-10944512,-4456448,-3538944,-3080192,193,2
@ -213,6 +241,7 @@ roofDistrict3D LABEL DWORD
dd 9830400,11665408,-9633792,-9175040,-3014656,186,0 dd 9830400,11665408,-9633792,-9175040,-3014656,186,0
dd -9043968,-7208960,10616832,11075584,-2929459,186,1 dd -9043968,-7208960,10616832,11075584,-2929459,186,1
dd -9043968,-8585216,9699328,10616832,-2949120,186,2 dd -9043968,-8585216,9699328,10616832,-2949120,186,2
dd -12946637,-11993088,2424832,3473408,-3014656,189,5
dd -6684672,-6225920,-11534336,-10616832,-3145728,188,2 dd -6684672,-6225920,-11534336,-10616832,-3145728,188,2
dd 12189696,14024704,-7274496,-6815744,-2293760,190,0 dd 12189696,14024704,-7274496,-6815744,-2293760,190,0
dd -11403264,-9568256,8257536,8716288,-2601779,190,1 dd -11403264,-9568256,8257536,8716288,-2601779,190,1
@ -229,13 +258,16 @@ roofDistrict3D LABEL DWORD
dd 12189696,12648448,9699328,10616832,-2621440,189,2 dd 12189696,12648448,9699328,10616832,-2621440,189,2
dd -9043968,-7208960,11599872,12058624,-2293760,187,0 dd -9043968,-7208960,11599872,12058624,-2293760,187,0
dd 9830400,11665408,11599872,12058624,-3080192,187,0 dd 9830400,11665408,11599872,12058624,-3080192,187,0
dd -12815565,-11993088,5373952,6291456,-2555904,192,5
dd 9830400,10289152,-11534336,-10616832,-2621440,193,2 dd 9830400,10289152,-11534336,-10616832,-2621440,193,2
dd -11403264,-9568256,-8257536,-7798784,-2274099,191,1 dd -11403264,-9568256,-8257536,-7798784,-2274099,191,1
dd -11403264,-9568256,9240576,9699328,-3014656,191,0 dd -11403264,-9568256,9240576,9699328,-3014656,191,0
dd 12189696,14024704,9240576,9699328,-2621440,189,0 dd 12189696,14024704,9240576,9699328,-2621440,189,0
dd -7667712,-7208960,12058624,12976128,-2274099,187,3 dd -7667712,-7208960,12058624,12976128,-2274099,187,3
dd 9830400,10289152,12058624,12976128,-3080192,187,2 dd 9830400,10289152,12058624,12976128,-3080192,187,2
dd -13697024,-13005619,2424832,3473408,-2490368,188,5
dd 12582912,13631488,-9371648,-8060928,-2293760,204,0 dd 12582912,13631488,-9371648,-8060928,-2293760,204,0
dd -13697024,-12874547,5373952,6291456,-2752512,191,5
dd -9043968,-8585216,-11534336,-10616832,-2883584,193,2 dd -9043968,-8585216,-11534336,-10616832,-2883584,193,2
dd -11403264,-9568256,-9633792,-9175040,-2293760,191,0 dd -11403264,-9568256,-9633792,-9175040,-2293760,191,0
dd -11403264,-9568256,10616832,11075584,-2994995,191,1 dd -11403264,-9568256,10616832,11075584,-2994995,191,1
@ -254,9 +286,12 @@ roofDistrict3D LABEL DWORD
dd 12189696,12648448,-11534336,-10616832,-2883584,188,2 dd 12189696,12648448,-11534336,-10616832,-2883584,188,2
dd 12189696,14024704,11599872,12058624,-3014656,190,0 dd 12189696,14024704,11599872,12058624,-3014656,190,0
dd 12189696,12648448,12058624,12976128,-3014656,190,2 dd 12189696,12648448,12058624,12976128,-3014656,190,2
dd -15174861,-14352384,2424832,3473408,-2949120,188,5
dd -65536,2686976,-17629184,-14483456,-2359296,190,4 dd -65536,2686976,-17629184,-14483456,-2359296,190,4
dd -17170432,-13762560,-851968,2293760,-2686976,190,4 dd -17170432,-13762560,-851968,2293760,-2686976,190,4
dd -131072,2752512,15925248,19070976,-2293760,190,4 dd -131072,2752512,15925248,19070976,-2293760,190,4
dd -15043789,-14352384,5373952,6291456,-2490368,191,5
dd -16056320,-15233843,2424832,3473408,-3145728,187,5
dd -11403264,-9568256,-11993088,-11534336,-2949120,190,0 dd -11403264,-9568256,-11993088,-11534336,-2949120,190,0
dd -11403264,-10944512,-11534336,-10616832,-2949120,190,2 dd -11403264,-10944512,-11534336,-10616832,-2949120,190,2
dd 12189696,14024704,-11993088,-11534336,-2883584,188,0 dd 12189696,14024704,-11993088,-11534336,-2883584,188,0
@ -268,6 +303,8 @@ roofDistrict3D LABEL DWORD
dd 16384000,19791872,-5046272,-1900544,-2686976,189,4 dd 16384000,19791872,-5046272,-1900544,-2686976,189,4
dd -3997696,-1769472,15925248,19070976,-2621440,189,4 dd -3997696,-1769472,15925248,19070976,-2621440,189,4
dd 4390912,6619136,15925248,19070976,-1966080,191,4 dd 4390912,6619136,15925248,19070976,-1966080,191,4
dd -16056320,-15102771,5373952,6291456,-2686976,190,5
dd -17468621,-16711680,2359296,3473408,-2752512,187,5
dd -8454144,-5701632,-17629184,-14483456,-3014656,188,4 dd -8454144,-5701632,-17629184,-14483456,-3014656,188,4
dd 8323072,11075584,-17629184,-14483456,-1703936,192,4 dd 8323072,11075584,-17629184,-14483456,-1703936,192,4
dd -16973824,-13959168,-9240576,-6094848,-2228224,188,4 dd -16973824,-13959168,-9240576,-6094848,-2228224,188,4
@ -276,6 +313,9 @@ roofDistrict3D LABEL DWORD
dd 16777216,19398656,7536640,10682368,-2424832,192,4 dd 16777216,19398656,7536640,10682368,-2424832,192,4
dd -8519680,-5636096,15925248,19070976,-2949120,188,4 dd -8519680,-5636096,15925248,19070976,-2949120,188,4
dd 8257536,11141120,15925248,19070976,-1638400,192,4 dd 8257536,11141120,15925248,19070976,-1638400,192,4
dd -17665229,-16711680,5373952,6225920,-3014656,190,5
dd -18415616,-17527603,2359296,3473408,-2949120,186,5
dd -18415616,-17724211,5373952,6225920,-2490368,189,5
dd 0,2621440,-21823488,-18677760,-3080192,189,4 dd 0,2621440,-21823488,-18677760,-3080192,189,4
dd -12910592,-9633792,-17629184,-14483456,-1441792,187,4 dd -12910592,-9633792,-17629184,-14483456,-1441792,187,4
dd 12779520,15007744,-17629184,-14483456,-3276800,193,4 dd 12779520,15007744,-17629184,-14483456,-3276800,193,4
@ -287,14 +327,18 @@ roofDistrict3D LABEL DWORD
dd -12386304,-10158080,15925248,19070976,-3276800,187,4 dd -12386304,-10158080,15925248,19070976,-3276800,187,4
dd 12713984,15073280,15925248,19070976,-3211264,193,4 dd 12713984,15073280,15925248,19070976,-3211264,193,4
dd -196608,2818048,20119552,23265280,-1572864,191,4 dd -196608,2818048,20119552,23265280,-1572864,191,4
dd -20024525,-19070976,2359296,3473408,-2686976,186,5
dd -4456448,-1310720,-21823488,-18677760,-1507328,188,4 dd -4456448,-1310720,-21823488,-18677760,-1507328,188,4
dd 3866624,7143424,-21823488,-18677760,-2752512,190,4 dd 3866624,7143424,-21823488,-18677760,-2752512,190,4
dd -20905984,-18415616,-5046272,-1900544,-1835008,188,4 dd -20905984,-18415616,-5046272,-1900544,-1835008,188,4
dd 20905984,23658496,-5046272,-1900544,-2359296,190,4 dd 20905984,23658496,-5046272,-1900544,-2359296,190,4
dd -4063232,-1703936,20119552,23265280,-1900544,190,4 dd -4063232,-1703936,20119552,23265280,-1900544,190,4
dd 4259840,6750208,20119552,23265280,-3145728,192,4 dd 4259840,6750208,20119552,23265280,-3145728,192,4
dd -19893453,-19070976,5373952,6225920,-2949120,189,5
dd 20447232,21495808,-9175040,-7864320,1966080,200,2 dd 20447232,21495808,-9175040,-7864320,1966080,200,2
dd 20643840,21299200,-8978432,-8060928,2424832,200,2 dd 20643840,21299200,-8978432,-8060928,2424832,200,2
dd -20774912,-20083507,2359296,3473408,-2883584,193,5
dd -20774912,-19952435,5373952,6225920,-3145728,188,5
dd -8323072,-5832704,-21823488,-18677760,-1835008,187,4 dd -8323072,-5832704,-21823488,-18677760,-1835008,187,4
dd 8388608,11010048,-21823488,-18677760,-2424832,191,4 dd 8388608,11010048,-21823488,-18677760,-2424832,191,4
dd -20840448,-18481152,-9240576,-6094848,-2555904,187,4 dd -20840448,-18481152,-9240576,-6094848,-2555904,187,4
@ -303,10 +347,13 @@ roofDistrict3D LABEL DWORD
dd 20643840,23920640,7536640,10682368,-2097152,193,4 dd 20643840,23920640,7536640,10682368,-2097152,193,4
dd -8585216,-5570560,20119552,23265280,-2228224,189,4 dd -8585216,-5570560,20119552,23265280,-2228224,189,4
dd 8126464,11272192,20119552,23265280,-2818048,193,4 dd 8126464,11272192,20119552,23265280,-2818048,193,4
dd -22252749,-21430272,2359296,3473408,-2621440,193,5
dd -22187213,-21430272,5373952,6160384,-2752512,188,5
dd -16777216,-14155776,-17629184,-14483456,-1769472,186,4 dd -16777216,-14155776,-17629184,-14483456,-1769472,186,4
dd 16646144,19529728,-17629184,-14483456,-2949120,186,4 dd 16646144,19529728,-17629184,-14483456,-2949120,186,4
dd -16842752,-14090240,15925248,19070976,-1703936,186,4 dd -16842752,-14090240,15925248,19070976,-1703936,186,4
dd 16580608,19595264,15925248,19070976,-2883584,186,4 dd 16580608,19595264,15925248,19070976,-2883584,186,4
dd -23134208,-22311731,2359296,3473408,-2818048,192,5
dd -12845056,-9699328,-21823488,-18677760,-2162688,186,4 dd -12845056,-9699328,-21823488,-18677760,-2162688,186,4
dd 12255232,15532032,-21823488,-18677760,-2097152,192,4 dd 12255232,15532032,-21823488,-18677760,-2097152,192,4
dd -20774912,-18546688,-13434880,-10289152,-3276800,186,4 dd -20774912,-18546688,-13434880,-10289152,-3276800,186,4
@ -315,6 +362,7 @@ roofDistrict3D LABEL DWORD
dd 21168128,23396352,11730944,14876672,-3276800,186,4 dd 21168128,23396352,11730944,14876672,-3276800,186,4
dd -12451840,-10092544,20119552,23265280,-2555904,188,4 dd -12451840,-10092544,20119552,23265280,-2555904,188,4
dd 12648448,15138816,20119552,23265280,-2490368,186,4 dd 12648448,15138816,20119552,23265280,-2490368,186,4
dd -23134208,-22246195,5373952,6160384,-2949120,187,5
dd 22740992,23789568,-11468800,-10158080,4325376,201,2 dd 22740992,23789568,-11468800,-10158080,4325376,201,2
dd 22937600,23592960,-11272192,-10354688,4784128,201,2 dd 22937600,23592960,-11272192,-10354688,4784128,201,2
dd 131072,2490368,-26017792,-22872064,-1900544,188,4 dd 131072,2490368,-26017792,-22872064,-1900544,188,4
@ -326,10 +374,13 @@ roofDistrict3D LABEL DWORD
dd 24772608,28180480,-5046272,-1900544,-2031616,191,4 dd 24772608,28180480,-5046272,-1900544,-2031616,191,4
dd -4194304,-1572864,24313856,27459584,-3080192,191,4 dd -4194304,-1572864,24313856,27459584,-3080192,191,4
dd 4194304,6815744,24313856,27459584,-2424832,193,4 dd 4194304,6815744,24313856,27459584,-2424832,193,4
dd -24546509,-23789568,2555904,3473408,-3145728,192,5
dd 25034752,26083328,-8847360,-7536640,3145728,202,2 dd 25034752,26083328,-8847360,-7536640,3145728,202,2
dd 25231360,25886720,-8650752,-7733248,3604480,202,2 dd 25231360,25886720,-8650752,-7733248,3604480,202,2
dd -24743117,-23789568,5373952,6160384,-2686976,187,5
dd 22085632,23134208,-15400960,-14090240,3604480,202,2 dd 22085632,23134208,-15400960,-14090240,3604480,202,2
dd 22282240,22937600,-15204352,-14286848,4063232,202,2 dd 22282240,22937600,-15204352,-14286848,4063232,202,2
dd -25493504,-24605491,2555904,3473408,-2621440,191,5
dd -8257536,-5898240,-26017792,-22872064,-2555904,186,4 dd -8257536,-5898240,-26017792,-22872064,-2555904,186,4
dd 8454144,10944512,-26017792,-22872064,-3145728,190,4 dd 8454144,10944512,-26017792,-22872064,-3145728,190,4
dd -25362432,-22347776,-9240576,-6094848,-2883584,186,4 dd -25362432,-22347776,-9240576,-6094848,-2883584,186,4
@ -346,6 +397,8 @@ roofDistrict3D LABEL DWORD
dd 21102592,23461888,15925248,19070976,-2555904,187,4 dd 21102592,23461888,15925248,19070976,-2555904,187,4
dd -16973824,-13959168,20119552,23265280,-2883584,187,4 dd -16973824,-13959168,20119552,23265280,-2883584,187,4
dd 16515072,19660800,20119552,23265280,-2162688,187,4 dd 16515072,19660800,20119552,23265280,-2162688,187,4
dd -25493504,-24802099,5373952,6160384,-2883584,186,5
dd -27102413,-26148864,2555904,3473408,-3080192,191,5
dd -12779520,-9764864,-26017792,-22872064,-2883584,193,4 dd -12779520,-9764864,-26017792,-22872064,-2883584,193,4
dd 12320768,15466496,-26017792,-22872064,-2818048,191,4 dd 12320768,15466496,-26017792,-22872064,-2818048,191,4
dd -25231360,-22478848,-13434880,-10289152,-1703936,193,4 dd -25231360,-22478848,-13434880,-10289152,-1703936,193,4
@ -354,6 +407,9 @@ roofDistrict3D LABEL DWORD
dd 25034752,27918336,11730944,14876672,-2949120,187,4 dd 25034752,27918336,11730944,14876672,-2949120,187,4
dd -12517376,-10027008,24313856,27459584,-1835008,189,4 dd -12517376,-10027008,24313856,27459584,-1835008,189,4
dd 12582912,15204352,24313856,27459584,-1769472,187,4 dd 12582912,15204352,24313856,27459584,-1769472,187,4
dd -26971341,-26148864,5373952,6160384,-2621440,186,5
dd -27852800,-27161395,2555904,3473408,-2555904,190,5
dd -27852800,-27030323,5373952,6160384,-2818048,193,5
dd 196608,2424832,-30212096,-27066368,-2621440,187,4 dd 196608,2424832,-30212096,-27066368,-2621440,187,4
dd -29360128,-26738688,-851968,2293760,-1769472,187,4 dd -29360128,-26738688,-851968,2293760,-1769472,187,4
dd -393216,3014656,28508160,31653888,-2031616,193,4 dd -393216,3014656,28508160,31653888,-2031616,193,4
@ -377,6 +433,7 @@ roofDistrict3D LABEL DWORD
dd 24969216,27983872,15925248,19070976,-2228224,188,4 dd 24969216,27983872,15925248,19070976,-2228224,188,4
dd -17039360,-13893632,24313856,27459584,-2162688,188,4 dd -17039360,-13893632,24313856,27459584,-2162688,188,4
dd 16449536,19726336,24313856,27459584,-1441792,188,4 dd 16449536,19726336,24313856,27459584,-1441792,188,4
dd -29396173,-28508160,2490368,3473408,-2883584,190,5
dd -8192000,-5963776,-30212096,-27066368,-3276800,193,4 dd -8192000,-5963776,-30212096,-27066368,-3276800,193,4
dd 8585216,10813440,-30212096,-27066368,-1966080,189,4 dd 8585216,10813440,-30212096,-27066368,-1966080,189,4
dd -29229056,-26869760,-9240576,-6094848,-3211264,193,4 dd -29229056,-26869760,-9240576,-6094848,-3211264,193,4
@ -387,8 +444,11 @@ roofDistrict3D LABEL DWORD
dd 8585216,10813440,28508160,31653888,-3276800,187,4 dd 8585216,10813440,28508160,31653888,-3276800,187,4
dd 29622272,30670848,-10158080,-8847360,2752512,201,2 dd 29622272,30670848,-10158080,-8847360,2752512,201,2
dd 29818880,30474240,-9961472,-9043968,3211264,201,2 dd 29818880,30474240,-9961472,-9043968,3211264,201,2
dd -29265101,-28508160,5373952,6291456,-3145728,193,5
dd 26017792,27066368,-17694720,-16384000,4718592,200,2 dd 26017792,27066368,-17694720,-16384000,4718592,200,2
dd 26214400,26869760,-17498112,-16580608,5177344,200,2 dd 26214400,26869760,-17498112,-16580608,5177344,200,2
dd -30212096,-29455155,2490368,3473408,-3080192,189,5
dd -30212096,-29324083,5373952,6291456,-2621440,192,5
dd -12648448,-9895936,-30212096,-27066368,-1703936,192,4 dd -12648448,-9895936,-30212096,-27066368,-1703936,192,4
dd 12451840,15335424,-30212096,-27066368,-1638400,190,4 dd 12451840,15335424,-30212096,-27066368,-1638400,190,4
dd -29753344,-26345472,-13434880,-10289152,-2031616,192,4 dd -29753344,-26345472,-13434880,-10289152,-2031616,192,4
@ -760,7 +820,7 @@ roofCityLamps3D LABEL DWORD
dd 41025536,5111808 dd 41025536,5111808
dd 42205184,1769472 dd 42205184,1769472
dd 42205184,5111808 dd 42205184,5111808
ROOF_LANDMARK_PARTS equ 26 ROOF_LANDMARK_PARTS equ 180
roofLandmarkParts3D LABEL DWORD roofLandmarkParts3D LABEL DWORD
dd 0,131072,2490368,6619136,8978432,-3932160,-1441792,193 dd 0,131072,2490368,6619136,8978432,-3932160,-1441792,193
dd 0,524288,2097152,7012352,8585216,-1441792,-1048576,168 dd 0,524288,2097152,7012352,8585216,-1441792,-1048576,168
@ -788,6 +848,160 @@ roofLandmarkParts3D LABEL DWORD
dd 0,10354688,11141120,327680,1114112,-1703936,-524288,206 dd 0,10354688,11141120,327680,1114112,-1703936,-524288,206
dd 0,10485760,11010048,458752,983040,-524288,262144,191 dd 0,10485760,11010048,458752,983040,-524288,262144,191
dd 2,10747904,720896,262144,235930,235930,2621440,166 dd 2,10747904,720896,262144,235930,235930,2621440,166
dd 0,-34078720,4587520,3604480,3932160,-4063232,-3915776,162
dd 0,-34078720,-2464154,3909222,3932160,-3915776,-3856794,162
dd 0,-34078720,-2464154,3906601,3934781,-3856794,-3846963,168
dd 0,-1992294,2254438,3909222,3932160,-3915776,-3856794,162
dd 0,-1992294,2254438,3906601,3934781,-3856794,-3846963,168
dd 0,2726298,4587520,3909222,3932160,-3915776,-3856794,162
dd 0,2726298,4587520,3906601,3934781,-3856794,-3846963,168
dd 0,-34078720,4587520,4980736,5308416,-4063232,-3915776,162
dd 0,-34078720,-2464154,4980736,5003674,-3915776,-3856794,162
dd 0,-34078720,-2464154,4978115,5006295,-3856794,-3846963,168
dd 0,-1992294,2254438,4980736,5003674,-3915776,-3856794,162
dd 0,-1992294,2254438,4978115,5006295,-3856794,-3846963,168
dd 0,2726298,4587520,4980736,5003674,-3915776,-3856794,162
dd 0,2726298,4587520,4978115,5006295,-3856794,-3846963,168
dd 0,-12066488,-12050760,3708027,3723756,-3915776,-3722445,162
dd 1,-12058624,3715891,-3722445,98304,98304,137626,207
dd 0,-11862016,-11730944,3699507,3732275,-3889562,-3876454,196
dd 0,-11848909,-11837112,3702784,3728998,-3915776,-3889562,165
dd 0,-11757158,-11745362,3702784,3728998,-3915776,-3889562,165
dd 0,-12066488,-12050760,5189140,5204869,-3915776,-3722445,162
dd 1,-12058624,5197005,-3722445,98304,98304,137626,207
dd 0,-11862016,-11730944,5180621,5213389,-3889562,-3876454,196
dd 0,-11848909,-11837112,5183898,5210112,-3915776,-3889562,165
dd 0,-11757158,-11745362,5183898,5210112,-3915776,-3889562,165
dd 0,-10886840,-10871112,3708027,3723756,-3915776,-3722445,162
dd 1,-10878976,3715891,-3722445,98304,98304,137626,207
dd 0,-10682368,-10551296,3699507,3732275,-3889562,-3876454,196
dd 0,-10669261,-10657464,3702784,3728998,-3915776,-3889562,165
dd 0,-10577510,-10565714,3702784,3728998,-3915776,-3889562,165
dd 0,-10886840,-10871112,5189140,5204869,-3915776,-3722445,162
dd 1,-10878976,5197005,-3722445,98304,98304,137626,207
dd 0,-10682368,-10551296,5180621,5213389,-3889562,-3876454,196
dd 0,-10669261,-10657464,5183898,5210112,-3915776,-3889562,165
dd 0,-10577510,-10565714,5183898,5210112,-3915776,-3889562,165
dd 0,-9707192,-9691464,3708027,3723756,-3915776,-3722445,162
dd 1,-9699328,3715891,-3722445,98304,98304,137626,207
dd 0,-9502720,-9371648,3699507,3732275,-3889562,-3876454,196
dd 0,-9489613,-9477816,3702784,3728998,-3915776,-3889562,165
dd 0,-9397862,-9386066,3702784,3728998,-3915776,-3889562,165
dd 0,-9707192,-9691464,5189140,5204869,-3915776,-3722445,162
dd 1,-9699328,5197005,-3722445,98304,98304,137626,207
dd 0,-9502720,-9371648,5180621,5213389,-3889562,-3876454,196
dd 0,-9489613,-9477816,5183898,5210112,-3915776,-3889562,165
dd 0,-9397862,-9386066,5183898,5210112,-3915776,-3889562,165
dd 0,-8527544,-8511816,3708027,3723756,-3915776,-3722445,162
dd 1,-8519680,3715891,-3722445,98304,98304,137626,207
dd 0,-8323072,-8192000,3699507,3732275,-3889562,-3876454,196
dd 0,-8309965,-8298168,3702784,3728998,-3915776,-3889562,165
dd 0,-8218214,-8206418,3702784,3728998,-3915776,-3889562,165
dd 0,-8527544,-8511816,5189140,5204869,-3915776,-3722445,162
dd 1,-8519680,5197005,-3722445,98304,98304,137626,207
dd 0,-8323072,-8192000,5180621,5213389,-3889562,-3876454,196
dd 0,-8309965,-8298168,5183898,5210112,-3915776,-3889562,165
dd 0,-8218214,-8206418,5183898,5210112,-3915776,-3889562,165
dd 0,-7347896,-7332168,3708027,3723756,-3915776,-3722445,162
dd 1,-7340032,3715891,-3722445,98304,98304,137626,207
dd 0,-7143424,-7012352,3699507,3732275,-3889562,-3876454,196
dd 0,-7130317,-7118520,3702784,3728998,-3915776,-3889562,165
dd 0,-7038566,-7026770,3702784,3728998,-3915776,-3889562,165
dd 0,-7347896,-7332168,5189140,5204869,-3915776,-3722445,162
dd 1,-7340032,5197005,-3722445,98304,98304,137626,207
dd 0,-7143424,-7012352,5180621,5213389,-3889562,-3876454,196
dd 0,-7130317,-7118520,5183898,5210112,-3915776,-3889562,165
dd 0,-7038566,-7026770,5183898,5210112,-3915776,-3889562,165
dd 0,-6168248,-6152520,3708027,3723756,-3915776,-3722445,162
dd 1,-6160384,3715891,-3722445,98304,98304,137626,207
dd 0,-5963776,-5832704,3699507,3732275,-3889562,-3876454,196
dd 0,-5950669,-5938872,3702784,3728998,-3915776,-3889562,165
dd 0,-5858918,-5847122,3702784,3728998,-3915776,-3889562,165
dd 0,-6168248,-6152520,5189140,5204869,-3915776,-3722445,162
dd 1,-6160384,5197005,-3722445,98304,98304,137626,207
dd 0,-5963776,-5832704,5180621,5213389,-3889562,-3876454,196
dd 0,-5950669,-5938872,5183898,5210112,-3915776,-3889562,165
dd 0,-5858918,-5847122,5183898,5210112,-3915776,-3889562,165
dd 0,-4988600,-4972872,3708027,3723756,-3915776,-3722445,162
dd 1,-4980736,3715891,-3722445,98304,98304,137626,207
dd 0,-4784128,-4653056,3699507,3732275,-3889562,-3876454,196
dd 0,-4771021,-4759224,3702784,3728998,-3915776,-3889562,165
dd 0,-4679270,-4667474,3702784,3728998,-3915776,-3889562,165
dd 0,-4988600,-4972872,5189140,5204869,-3915776,-3722445,162
dd 1,-4980736,5197005,-3722445,98304,98304,137626,207
dd 0,-4784128,-4653056,5180621,5213389,-3889562,-3876454,196
dd 0,-4771021,-4759224,5183898,5210112,-3915776,-3889562,165
dd 0,-4679270,-4667474,5183898,5210112,-3915776,-3889562,165
dd 0,-3808952,-3793224,3708027,3723756,-3915776,-3722445,162
dd 1,-3801088,3715891,-3722445,98304,98304,137626,207
dd 0,-3604480,-3473408,3699507,3732275,-3889562,-3876454,196
dd 0,-3591373,-3579576,3702784,3728998,-3915776,-3889562,165
dd 0,-3499622,-3487826,3702784,3728998,-3915776,-3889562,165
dd 0,-3808952,-3793224,5189140,5204869,-3915776,-3722445,162
dd 1,-3801088,5197005,-3722445,98304,98304,137626,207
dd 0,-3604480,-3473408,5180621,5213389,-3889562,-3876454,196
dd 0,-3591373,-3579576,5183898,5210112,-3915776,-3889562,165
dd 0,-3499622,-3487826,5183898,5210112,-3915776,-3889562,165
dd 0,-2629304,-2613576,3708027,3723756,-3915776,-3722445,162
dd 1,-2621440,3715891,-3722445,98304,98304,137626,207
dd 0,-2424832,-2293760,3699507,3732275,-3889562,-3876454,196
dd 0,-2411725,-2399928,3702784,3728998,-3915776,-3889562,165
dd 0,-2319974,-2308178,3702784,3728998,-3915776,-3889562,165
dd 0,-2629304,-2613576,5189140,5204869,-3915776,-3722445,162
dd 1,-2621440,5197005,-3722445,98304,98304,137626,207
dd 0,-2424832,-2293760,5180621,5213389,-3889562,-3876454,196
dd 0,-2411725,-2399928,5183898,5210112,-3915776,-3889562,165
dd 0,-2319974,-2308178,5183898,5210112,-3915776,-3889562,165
dd 0,-1449656,-1433928,3708027,3723756,-3915776,-3722445,162
dd 1,-1441792,3715891,-3722445,98304,98304,137626,207
dd 0,-1245184,-1114112,3699507,3732275,-3889562,-3876454,196
dd 0,-1232077,-1220280,3702784,3728998,-3915776,-3889562,165
dd 0,-1140326,-1128530,3702784,3728998,-3915776,-3889562,165
dd 0,-1449656,-1433928,5189140,5204869,-3915776,-3722445,162
dd 1,-1441792,5197005,-3722445,98304,98304,137626,207
dd 0,-1245184,-1114112,5180621,5213389,-3889562,-3876454,196
dd 0,-1232077,-1220280,5183898,5210112,-3915776,-3889562,165
dd 0,-1140326,-1128530,5183898,5210112,-3915776,-3889562,165
dd 0,-270008,-254280,3708027,3723756,-3915776,-3722445,162
dd 1,-262144,3715891,-3722445,98304,98304,137626,207
dd 0,-65536,65536,3699507,3732275,-3889562,-3876454,196
dd 0,-52429,-40632,3702784,3728998,-3915776,-3889562,165
dd 0,39322,51118,3702784,3728998,-3915776,-3889562,165
dd 0,-270008,-254280,5189140,5204869,-3915776,-3722445,162
dd 1,-262144,5197005,-3722445,98304,98304,137626,207
dd 0,-65536,65536,5180621,5213389,-3889562,-3876454,196
dd 0,-52429,-40632,5183898,5210112,-3915776,-3889562,165
dd 0,39322,51118,5183898,5210112,-3915776,-3889562,165
dd 0,909640,925368,3708027,3723756,-3915776,-3722445,162
dd 1,917504,3715891,-3722445,98304,98304,137626,207
dd 0,1114112,1245184,3699507,3732275,-3889562,-3876454,196
dd 0,1127219,1139016,3702784,3728998,-3915776,-3889562,165
dd 0,1218970,1230766,3702784,3728998,-3915776,-3889562,165
dd 0,909640,925368,5189140,5204869,-3915776,-3722445,162
dd 1,917504,5197005,-3722445,98304,98304,137626,207
dd 0,1114112,1245184,5180621,5213389,-3889562,-3876454,196
dd 0,1127219,1139016,5183898,5210112,-3915776,-3889562,165
dd 0,1218970,1230766,5183898,5210112,-3915776,-3889562,165
dd 0,2089288,2105016,3708027,3723756,-3915776,-3722445,162
dd 1,2097152,3715891,-3722445,98304,98304,137626,207
dd 0,2293760,2424832,3699507,3732275,-3889562,-3876454,196
dd 0,2306867,2318664,3702784,3728998,-3915776,-3889562,165
dd 0,2398618,2410414,3702784,3728998,-3915776,-3889562,165
dd 0,2089288,2105016,5189140,5204869,-3915776,-3722445,162
dd 1,2097152,5197005,-3722445,98304,98304,137626,207
dd 0,2293760,2424832,5180621,5213389,-3889562,-3876454,196
dd 0,2306867,2318664,5183898,5210112,-3915776,-3889562,165
dd 0,2398618,2410414,5183898,5210112,-3915776,-3889562,165
dd 0,3268936,3284664,3708027,3723756,-3915776,-3722445,162
dd 1,3276800,3715891,-3722445,98304,98304,137626,207
dd 0,3473408,3604480,3699507,3732275,-3889562,-3876454,196
dd 0,3486515,3498312,3702784,3728998,-3915776,-3889562,165
dd 0,3578266,3590062,3702784,3728998,-3915776,-3889562,165
dd 0,3268936,3284664,5189140,5204869,-3915776,-3722445,162
dd 1,3276800,5197005,-3722445,98304,98304,137626,207
dd 0,3473408,3604480,5180621,5213389,-3889562,-3876454,196
dd 0,3486515,3498312,5183898,5210112,-3915776,-3889562,165
dd 0,3578266,3590062,5183898,5210112,-3915776,-3889562,165
roofFog3D db 0,1,1,2,3,4,4,5,6,6,7,8,8,9,10,10,11,11,12,13,13,14,15,15,16,16,17,18,18,19,19,20 roofFog3D db 0,1,1,2,3,4,4,5,6,6,7,8,8,9,10,10,11,11,12,13,13,14,15,15,16,16,17,18,18,19,19,20
db 20,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36 db 20,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36
db 37,37,38,38,38,39,39,40,40,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,48,49,49,50 db 37,37,38,38,38,39,39,40,40,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,48,49,49,50

View file

@ -173,6 +173,13 @@ roof_gl_list_triangle:
mov inside,0 mov inside,0
@@: @@:
mov currentMat,ebx mov currentMat,ebx
; Mode 2 compiles only tessellated water, with texture state set at playback.
cmp emission,2
jne roof_gl_list_material
cmp ebx,ROOF_CITY_WATER
jne roof_gl_list_skip
jmp roof_gl_list_begin
roof_gl_list_material:
sub ebx,ROOF_DECK sub ebx,ROOF_DECK
mov eax,roofHDDayTextures3D[ebx*4] mov eax,roofHDDayTextures3D[ebx*4]
cmp theme,0 cmp theme,0
@ -512,7 +519,7 @@ roof_hd_emission_next:
invoke UploadRoofGLSky3D,OFFSET roofNightArt3D,roofHDSkyTextures3D[4] invoke UploadRoofGLSky3D,OFFSET roofNightArt3D,roofHDSkyTextures3D[4]
test eax,eax test eax,eax
jz roof_hd_init_failed jz roof_hd_init_failed
invoke glGenLists,9 invoke glGenLists,ROOF_GL_LIST_COUNT
test eax,eax test eax,eax
jz roof_hd_init_failed jz roof_hd_init_failed
mov roofHDLists3D,eax mov roofHDLists3D,eax
@ -530,6 +537,9 @@ roof_hd_compile_model:
inc model inc model
cmp model,3 cmp model,3
jb roof_hd_compile_model jb roof_hd_compile_model
mov eax,roofHDLists3D
add eax,ROOF_GL_WATER_LIST
invoke BuildRoofGLList3D,OFFSET roofHDMeshScene3D,0,2,eax
invoke FreeRoofMesh3D,OFFSET roofHDMeshScene3D invoke FreeRoofMesh3D,OFFSET roofHDMeshScene3D
invoke FreeRoofMesh3D,OFFSET roofHDMeshCar3D invoke FreeRoofMesh3D,OFFSET roofHDMeshCar3D
invoke FreeRoofMesh3D,OFFSET roofHDMeshBoat3D invoke FreeRoofMesh3D,OFFSET roofHDMeshBoat3D
@ -816,16 +826,9 @@ DrawRoofGLWater3D PROC uses ebx esi
@@: @@:
invoke glBindTexture,0DE1h,eax invoke glBindTexture,0DE1h,eax
invoke glNormal3f,0,3F800000h,0 invoke glNormal3f,0,3F800000h,0
invoke glBegin,7 mov eax,roofHDLists3D
mov esi,OFFSET roofGLWaterVertices3D add eax,ROOF_GL_WATER_LIST
mov ebx,8 invoke glCallList,eax
roof_gl_water_vertex:
invoke glTexCoord2f,[esi+12],[esi+16]
invoke glVertex3f,[esi],[esi+4],[esi+8]
add esi,20
dec ebx
jnz roof_gl_water_vertex
invoke glEnd
invoke glMatrixMode,1702h invoke glMatrixMode,1702h
invoke glLoadIdentity invoke glLoadIdentity
invoke glMatrixMode,1700h invoke glMatrixMode,1700h
@ -925,6 +928,7 @@ roof_hd_render_refresh:
invoke glShadeModel,1D01h invoke glShadeModel,1D01h
invoke glEnable,0B60h invoke glEnable,0B60h
invoke glFogi,0B65h,801h invoke glFogi,0B65h,801h
invoke glHint,0C54h,roofGLFogHint3D
invoke glFogf,0B62h,3B2A64C3h invoke glFogf,0B62h,3B2A64C3h
mov eax,OFFSET roofGLFogCurrent3D mov eax,OFFSET roofGLFogCurrent3D
mov ebx,OFFSET roofGLAmbientDay3D mov ebx,OFFSET roofGLAmbientDay3D
@ -1041,7 +1045,7 @@ FreeRoofHD3D PROC uses ebx esi edi
invoke wglMakeCurrent,roofHDDC3D,roofHDRC3D invoke wglMakeCurrent,roofHDDC3D,roofHDRC3D
cmp roofHDLists3D,0 cmp roofHDLists3D,0
je @F je @F
invoke glDeleteLists,roofHDLists3D,9 invoke glDeleteLists,roofHDLists3D,ROOF_GL_LIST_COUNT
mov roofHDLists3D,0 mov roofHDLists3D,0
@@: @@:
invoke glDeleteTextures,ROOF_GL_TEXTURES,OFFSET roofHDDayTextures3D invoke glDeleteTextures,ROOF_GL_TEXTURES,OFFSET roofHDDayTextures3D

View file

@ -37,6 +37,7 @@ glColorMaterial PROTO STDCALL :DWORD,:DWORD
glFogfv PROTO STDCALL :DWORD,:DWORD glFogfv PROTO STDCALL :DWORD,:DWORD
glFogf PROTO STDCALL :DWORD,:DWORD glFogf PROTO STDCALL :DWORD,:DWORD
glFogi PROTO STDCALL :DWORD,:DWORD glFogi PROTO STDCALL :DWORD,:DWORD
glHint PROTO STDCALL :DWORD,:DWORD
glShadeModel PROTO STDCALL :DWORD glShadeModel PROTO STDCALL :DWORD
glBlendFunc PROTO STDCALL :DWORD,:DWORD glBlendFunc PROTO STDCALL :DWORD,:DWORD
glDepthMask PROTO STDCALL :DWORD glDepthMask PROTO STDCALL :DWORD

View file

@ -2,6 +2,8 @@ include src_graphics\rooftop_gl_api.inc
ROOF_HD_W equ 1280 ROOF_HD_W equ 1280
ROOF_HD_H equ 960 ROOF_HD_H equ 960
ROOF_GL_TEXTURES equ 49 ROOF_GL_TEXTURES equ 49
ROOF_GL_LIST_COUNT equ 10
ROOF_GL_WATER_LIST equ 9
InitRoofHD3D PROTO InitRoofHD3D PROTO
FreeRoofHD3D PROTO FreeRoofHD3D PROTO
RenderRoofHD3D PROTO RenderRoofHD3D PROTO
@ -33,6 +35,7 @@ roofHDFBO3D dd 0
roofHDColorTex3D dd 0 roofHDColorTex3D dd 0
roofHDDepth3D dd 0 roofHDDepth3D dd 0
roofHDLists3D dd 0 roofHDLists3D dd 0
roofGLFogHint3D dd 1102h
roofHDSkyTextures3D dd 2 dup(0) roofHDSkyTextures3D dd 2 dup(0)
roofHDDayTextures3D dd ROOF_GL_TEXTURES dup(0) roofHDDayTextures3D dd ROOF_GL_TEXTURES dup(0)
roofHDNightTextures3D dd ROOF_GL_TEXTURES dup(0) roofHDNightTextures3D dd ROOF_GL_TEXTURES dup(0)
@ -117,14 +120,6 @@ roofGLFogBlack3D REAL4 0.0,0.0,0.0,1.0
roofGLColorScale3D REAL4 255.0 roofGLColorScale3D REAL4 255.0
roofGLWaveDiv3D REAL4 100000.0 roofGLWaveDiv3D REAL4 100000.0
roofGLHalf3D REAL4 0.5 roofGLHalf3D REAL4 0.5
roofGLWaterVertices3D REAL4 -2000.0,-62.0,76.0,-166.666667,6.333333
REAL4 2000.0,-62.0,76.0,166.666667,6.333333
REAL4 2000.0,-62.0,60.0,166.666667,5.0
REAL4 -2000.0,-62.0,60.0,-166.666667,5.0
REAL4 70.0,-62.0,60.0,5.833333,5.0
REAL4 2000.0,-62.0,60.0,166.666667,5.0
REAL4 2000.0,-62.0,29.0,166.666667,2.416667
REAL4 70.0,-62.0,29.0,5.833333,2.416667
roofGLAmbientDay3D REAL4 0.43,0.43,0.48,1.0 roofGLAmbientDay3D REAL4 0.43,0.43,0.48,1.0
roofGLAmbientNight3D REAL4 0.20,0.23,0.32,1.0 roofGLAmbientNight3D REAL4 0.20,0.23,0.32,1.0
roofGLSunColorDay3D REAL4 0.75,0.57,0.39,1.0 roofGLSunColorDay3D REAL4 0.75,0.57,0.39,1.0
@ -167,6 +162,8 @@ roofQualityEcoText3D db 202,208,219,216,192,58,32,221,202,206,0
roofQualityHighText3D db 202,208,219,216,192,58,32,196,197,210,192,203,200,0 roofQualityHighText3D db 202,208,219,216,192,58,32,196,197,210,192,203,200,0
roofLogPath3D db "runtime\roof-renderer.txt",0 roofLogPath3D db "runtime\roof-renderer.txt",0
roofLogHeader3D db "Native MASM rooftop renderer",13,10,0 roofLogHeader3D db "Native MASM rooftop renderer",13,10,0
roofLogTerrain3D db "Terrain path: tiled ground and animated mesh water v2",13,10,0
roofLogTriangles3D db "City mesh triangles: ",0
roofLogVendor3D db "Vendor: ",0 roofLogVendor3D db "Vendor: ",0
roofLogRenderer3D db "Renderer: ",0 roofLogRenderer3D db "Renderer: ",0
roofLogVersion3D db "OpenGL: ",0 roofLogVersion3D db "OpenGL: ",0

View file

@ -214,12 +214,18 @@ roof_log_write:
WriteRoofLogString3D ENDP WriteRoofLogString3D ENDP
WriteRoofRendererInfo3D PROC uses ebx esi WriteRoofRendererInfo3D PROC uses ebx esi
local number[16]:BYTE
invoke CreateDirectoryA,OFFSET runtime3D,0 invoke CreateDirectoryA,OFFSET runtime3D,0
invoke CreateFileA,OFFSET roofLogPath3D,40000000h,1,0,2,80h,0 invoke CreateFileA,OFFSET roofLogPath3D,40000000h,1,0,2,80h,0
cmp eax,-1 cmp eax,-1
je roof_log_done je roof_log_done
mov ebx,eax mov ebx,eax
invoke WriteRoofLogString3D,ebx,OFFSET roofLogHeader3D invoke WriteRoofLogString3D,ebx,OFFSET roofLogHeader3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogTerrain3D
invoke WriteRoofLogString3D,ebx,OFFSET roofLogTriangles3D
invoke FormatNumber,roofHDMeshScene3D[4],ADDR number
invoke WriteRoofLogString3D,ebx,ADDR number
invoke WriteRoofLogString3D,ebx,OFFSET roofLogNL3D
mov esi,0 mov esi,0
roof_log_gl_string: roof_log_gl_string:
mov eax,OFFSET roofLogVendor3D mov eax,OFFSET roofLogVendor3D

View file

@ -183,6 +183,12 @@ def main():
lit_windows += count lit_windows += count
night_city.append(frame) night_city.append(frame)
pack("city-night-v1.bin",night_city) pack("city-night-v1.bin",night_city)
count = pack_city_district()
pack_roof_map()
print(f"Packed roof: sunset/night, {lit_windows} distinct lit window apertures, 32 hand frames, {count} buildings.")
def pack_city_district():
# A connected street/courtyard district, not a ring of independent props. # A connected street/courtyard district, not a ring of independent props.
blocks = [] blocks = []
lots,parks = [],[] lots,parks = [],[]
@ -248,6 +254,19 @@ def main():
y = 6-(i%3)*8 if side < 0 else 106+(i%4)*9 y = 6-(i%3)*8 if side < 0 else 106+(i%4)*9
h = 16+(i*7)%24 h = 16+(i*7)%24
blocks.append((x-11,x+11,y-10,y+10,-60+h,186+i%8,4)) blocks.append((x-11,x+11,y-10,y+10,-60+h,186+i%8,4))
# Canal clearance removes water footprints, not entire empty city blocks.
waterfront = []
for gx in range(-13,2):
x = 20+gx*36
for bank in (0,1):
key = (gx*19+bank*7)%31
front,back = (53,39-key%4) if bank == 0 else (82,94+key%3)
y0,y1 = sorted((front,back))
mid = x-2+key%5
for index,(x0,x1) in enumerate(((x-13,mid-.45),(mid+.45,x+13))):
top = -60+12+(key+index*3)%11
waterfront.append((x0,x1,y0,y1,top,186+(gx+bank*3+index)%8,5))
blocks.extend(waterfront)
blocks.sort(key=lambda b:(((b[0]+b[1])/2-20)**2+((b[2]+b[3])/2-11)**2)) blocks.sort(key=lambda b:(((b[0]+b[1])/2-20)**2+((b[2]+b[3])/2-11)**2))
# Ground-only baked illumination follows the same real building footprints. # Ground-only baked illumination follows the same real building footprints.
elevation = np.zeros((512,512),dtype=np.float32) elevation = np.zeros((512,512),dtype=np.float32)
@ -328,6 +347,27 @@ def main():
spire(0,(-19,-13,-64,-58,0,9),206) spire(0,(-19,-13,-64,-58,0,9),206)
spire(0,(-18,-14,-63,-59,9,15),191) spire(0,(-18,-14,-63,-59,9,15),191)
spire(2,(-16,-61,15,1.8,1.8,20),166) spire(2,(-16,-61,15,1.8,1.8,20),166)
# The same modest quay geometry is consumed by both native renderers.
quays = []
def quay_piece(kind,coords,mat):
piece = (kind,*[round(v*65536) for v in coords],mat)
pieces.append(piece)
quays.append((kind,*coords,mat))
for y0,y1 in ((55,60),(76,81)):
quay_piece(0,(-520,70,y0,y1,-62,-59.75),162)
edge = 59.65 if y0 < 60 else 76
for a,b in ((-520,-37.6),(-30.4,34.4),(41.6,70)):
quay_piece(0,(a,b,edge,edge+.35,-59.75,-58.85),162)
quay_piece(0,(a,b,edge-.04,edge+.39,-58.85,-58.7),168)
for x in range(-184,68,18):
if min(abs(x-b) for b in (-34,38)) < 6:
continue
for y in (56.7,79.3):
quay_piece(0,(x-.12,x+.12,y-.12,y+.12,-59.75,-56.8),162)
quay_piece(1,(x,y,-56.8,1.5,1.5,2.1),207)
quay_piece(0,(x+3,x+5,y-.25,y+.25,-59.35,-59.15),196)
for leg in (x+3.2,x+4.6):
quay_piece(0,(leg,leg+.18,y-.2,y+.2,-59.75,-59.35),165)
district += [f"ROOF_LANDMARK_PARTS equ {len(pieces)}","roofLandmarkParts3D LABEL DWORD"] district += [f"ROOF_LANDMARK_PARTS equ {len(pieces)}","roofLandmarkParts3D LABEL DWORD"]
district += [" dd "+",".join(map(str,piece)) for piece in pieces] district += [" dd "+",".join(map(str,piece)) for piece in pieces]
fog = [min(190,round(d*180/(d+250))) for d in range(1024)] fog = [min(190,round(d*180/(d+250))) for d in range(1024)]
@ -340,8 +380,13 @@ def main():
"casino":[10.9,29.1,.9,21.1],"street_spacing":36,"street_width":8, "casino":[10.9,29.1,.9,21.1],"street_spacing":36,"street_width":8,
"street_level":-60,"canal":[-190,230,60,76],"bridges":[-34,38,110], "street_level":-60,"canal":[-190,230,60,76],"bridges":[-34,38,110],
"east_river":[70,1800,29,76],"river_bridges":[110,254,398], "east_river":[70,1800,29,76],"river_bridges":[110,254,398],
"waterfront_buildings":waterfront,"canal_quay_parts":quays,
"lots":lots,"parks":parks,"lamps":lamps,"towers":towers,"buildings":blocks, "lots":lots,"parks":parks,"lamps":lamps,"towers":towers,"buildings":blocks,
"landmarks":{"dome":[20,119],"spire":[164,11]}},indent=2)+"\n",encoding="ascii") "landmarks":{"dome":[20,119],"spire":[164,11]}},indent=2)+"\n",encoding="ascii")
return len(blocks)
def pack_roof_map():
# Collision-only enclosure uses a valid legacy prepass material; the final # Collision-only enclosure uses a valid legacy prepass material; the final
# rooftop pass replaces its tall walls with low world-space railings. # rooftop pass replaces its tall walls with low world-space railings.
roof = [[102]*32 for _ in range(32)] roof = [[102]*32 for _ in range(32)]
@ -362,8 +407,13 @@ def main():
"lighting":[512,512,3],"city_renderer":"world-space MASM geometry; sky only is raster", "lighting":[512,512,3],"city_renderer":"world-space MASM geometry; sky only is raster",
"source":"Built-in image generation; runtime geometry and interaction are assembly-only", "source":"Built-in image generation; runtime geometry and interaction are assembly-only",
"reference":"https://www.loftprojectetagi.ru/visitors/krysha/"},indent=2)+"\n",encoding="ascii") "reference":"https://www.loftprojectetagi.ru/visitors/krysha/"},indent=2)+"\n",encoding="ascii")
print(f"Packed roof: sunset/night, {lit_windows} distinct lit window apertures, 32 hand frames, {len(blocks)} buildings.")
if __name__ == "__main__": if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--district-only",action="store_true")
if parser.parse_args().district_only:
print(f"Packed city district: {pack_city_district()} building parts")
else:
main() main()

View file

@ -48,9 +48,23 @@ class Mesh:
self.horizontal(x0,x1,y0,y1,z1,roof or material) self.horizontal(x0,x1,y0,y1,z1,roof or material)
def horizontal(self,x0,x1,y0,y1,z,material,uv=None): def horizontal(self,x0,x1,y0,y1,z,material,uv=None):
points = [(x0,y1,z),(x1,y1,z),(x1,y0,z),(x0,y0,z)]
uv = uv or [(0,0),(1,0),(1,1),(0,1)] uv = uv or [(0,0),(1,0),(1,1),(0,1)]
self.quad(material,list(reversed(points)),list(reversed(uv))) # Vertex-fog drivers must not interpolate a whole city from distant corners.
def cuts(lo,hi):
if hi-lo <= 64:
return [lo,hi]
candidates = list(range(-512,513,64))+[-96,-32,32,96,-1536,-1024,-768,768,1024,1536]
return [lo,*sorted(v for v in candidates if lo < v < hi),hi]
def texcoord(x,y):
s,t = (x-x0)/(x1-x0),(y1-y)/(y1-y0)
return tuple((1-t)*((1-s)*uv[0][i]+s*uv[1][i])+
t*((1-s)*uv[3][i]+s*uv[2][i]) for i in range(2))
xs,ys = cuts(x0,x1),cuts(y0,y1)
for a,b in zip(xs,xs[1:]):
for c,d in zip(ys,ys[1:]):
points = [(a,d,z),(b,d,z),(b,c,z),(a,c,z)]
coords = [texcoord(x,y) for x,y,_ in points]
self.quad(material,list(reversed(points)),list(reversed(coords)))
def ellipsoid(self,x,y,z,rx,ry,rz,material,upper=False,rings=10,sides=24): def ellipsoid(self,x,y,z,rx,ry,rz,material,upper=False,rings=10,sides=24):
end = math.pi/2 if upper else math.pi end = math.pi/2 if upper else math.pi
@ -231,7 +245,9 @@ def main():
else: else:
scene.box(*coords,mat) scene.box(*coords,mat)
elif kind == 1: elif kind == 1:
scene.ellipsoid(*coords,mat,upper=True,rings=14,sides=48) foliage = mat == 207
scene.ellipsoid(*coords,mat,upper=not foliage,
rings=4 if foliage else 14,sides=8 if foliage else 48)
elif kind == 2: elif kind == 2:
x,y,z,rx,ry,h = coords x,y,z,rx,ry,h = coords
h *= .65 h *= .65

View file

@ -185,6 +185,14 @@ def check_rooftop_navigation():
assert city["street_level"] == -60 assert city["street_level"] == -60
assert len(city["parks"]) >= 6 and len(city["towers"]) >= 8 assert len(city["parks"]) >= 6 and len(city["towers"]) >= 8
assert len(city["buildings"]) > 400 assert len(city["buildings"]) > 400
waterfront = city["waterfront_buildings"]
assert len(waterfront) == 60
assert all(b in city["buildings"] for b in waterfront)
assert all(b[3] <= 54 or b[2] >= 82 for b in waterfront), "canal must stay open"
for bank in (0,1):
row = [b for b in waterfront if (b[3] < 60) == (bank == 0)]
assert len(row) == 30 and min(b[0] for b in row) < -450 and max(b[1] for b in row) >= 68
assert len(city["canal_quay_parts"]) > 100
heights = {round(b[4]+60,1) for b in city["buildings"]} heights = {round(b[4]+60,1) for b in city["buildings"]}
assert len(heights) >= 35 and min(heights) <= 6 and max(heights) >= 150 assert len(heights) >= 35 and min(heights) <= 6 and max(heights) >= 150
assert len({(round(b[1]-b[0],1),round(b[3]-b[2],1)) for b in city["buildings"]}) >= 15 assert len({(round(b[1]-b[0],1),round(b[3]-b[2],1)) for b in city["buildings"]}) >= 15
@ -393,7 +401,26 @@ def main():
right = Image.open(OUT/"roof-hd-look-right.bmp").convert("RGB") right = Image.open(OUT/"roof-hd-look-right.bmp").convert("RGB")
assert left.tobytes() != east.tobytes() != right.tobytes(), "leaning must allow actual head turns" assert left.tobytes() != east.tobytes() != right.tobytes(), "leaning must allow actual head turns"
mesh = json.loads((ROOT/"assets/sprites/rooftop/mesh-v1.json").read_text()) mesh = json.loads((ROOT/"assets/sprites/rooftop/mesh-v1.json").read_text())
assert mesh["triangles"]["scene"] < 36000, "never-visible static faces must be pruned" assert mesh["triangles"]["scene"] < 48000, "driver-safe ground must stay within the optimised mesh budget"
assert mesh["removed_invisible_triangles"] > 18000
packed_mesh = (ROOT/"assets/animations/rooftop/mesh-city-v1.bin").read_bytes()
water_tiles = 0
for at in range(12,len(packed_mesh),100):
mat,*values = struct.unpack_from("<I24f",packed_mesh,at)
if mat == 198:
water_tiles += 1
if mat not in (162,197,198,208,209):
continue
vertices = [values[i:i+8] for i in (0,8,16)]
if not all(-62.1 <= v[1] <= -59.7 and v[4] > .99 for v in vertices):
continue
xs,zs = [v[0] for v in vertices],[v[2] for v in vertices]
if max(xs) > -480 and min(xs) < 480 and max(zs) > -480 and min(zs) < 480:
assert max(xs)-min(xs) <= 64.01 and max(zs)-min(zs) <= 64.01, "giant vertex-fog ground polygon"
assert water_tiles >= 80, "animated water must reuse the tessellated scene mesh"
fast_fog = Image.open(OUT/"roof-hd-vertex-fog.bmp").convert("RGB")
nice_fog = Image.open(OUT/"roof-hd-canal-quays.bmp").convert("RGB")
assert max(ImageStat.Stat(ImageChops.difference(fast_fog,nice_fog)).mean) < 20
for profile in ("eco", "auto"): for profile in ("eco", "auto"):
low = Image.open(OUT/f"roof-hd-{profile}.bmp").convert("RGB") low = Image.open(OUT/f"roof-hd-{profile}.bmp").convert("RGB")
difference = ImageStat.Stat(ImageChops.difference(low, east)).mean difference = ImageStat.Stat(ImageChops.difference(low, east)).mean

View file

@ -24,6 +24,10 @@ roofTestHDComposite db "build\hall-expansion\roof-hd-terrace.bmp",0
roofTestHDMotion db "build\hall-expansion\roof-hd-traffic.bmp",0 roofTestHDMotion db "build\hall-expansion\roof-hd-traffic.bmp",0
roofTestHDLeft db "build\hall-expansion\roof-hd-look-left.bmp",0 roofTestHDLeft db "build\hall-expansion\roof-hd-look-left.bmp",0
roofTestHDRight db "build\hall-expansion\roof-hd-look-right.bmp",0 roofTestHDRight db "build\hall-expansion\roof-hd-look-right.bmp",0
roofTestHDQuay db "build\hall-expansion\roof-hd-canal-quays.bmp",0
roofTestHDQuayNight db "build\hall-expansion\roof-hd-canal-night.bmp",0
roofTestHDFastFog db "build\hall-expansion\roof-hd-vertex-fog.bmp",0
roofTestHDWest db "build\hall-expansion\roof-hd-west.bmp",0
roofTestHDEco db "build\hall-expansion\roof-hd-eco.bmp",0 roofTestHDEco db "build\hall-expansion\roof-hd-eco.bmp",0
roofTestHDAuto db "build\hall-expansion\roof-hd-auto.bmp",0 roofTestHDAuto db "build\hall-expansion\roof-hd-auto.bmp",0
roofTestSoftware db "build\hall-expansion\roof-software-ground.bmp",0 roofTestSoftware db "build\hall-expansion\roof-software-ground.bmp",0
@ -172,8 +176,23 @@ roof_test_driver_write:
mov roofNight3D,1 mov roofNight3D,1
invoke RoofTestHDSnapshot,OFFSET roofTestHDNight invoke RoofTestHDSnapshot,OFFSET roofTestHDNight
mov roofNight3D,0 mov roofNight3D,0
mov playerX,12*FP_1
mov playerY,10*FP_1
mov playerAngle,224
invoke RoofTestHDSnapshot,OFFSET roofTestHDQuay
mov roofGLFogHint3D,1101h
mov roofHDRenderClock3D,-1
invoke RoofTestHDSnapshot,OFFSET roofTestHDFastFog
mov roofGLFogHint3D,1102h
mov roofHDRenderClock3D,-1
mov roofNight3D,1
invoke RoofTestHDSnapshot,OFFSET roofTestHDQuayNight
mov roofNight3D,0
mov playerAngle,256
invoke RoofTestHDSnapshot,OFFSET roofTestHDWest
mov playerX,20*FP_1 mov playerX,20*FP_1
mov playerY,7*FP_1 mov playerY,7*FP_1
mov playerAngle,128
invoke RoofTestHDSnapshot,OFFSET roofTestHDComposite invoke RoofTestHDSnapshot,OFFSET roofTestHDComposite
invoke GetTickCount invoke GetTickCount
mov started,eax mov started,eax