REM-Client 3a1dfd26: Sol Skies' open world in the client - world map, moving frame, jump drives of a class, a system's cruise

REM-Client main now carries the Sol Skies engine work (merged with REM-Client 08eb3573): the open
world (systems placed on a world map, crossings without loading, the frame moving with the ship),
the jump drives of a class (Sol's and Sirius', the list of systems to jump to), a system's own
cruise (universe.ini cruise_max_speed), the interstellar star sphere and music
(DATA\UNIVERSE\interstellar.ini, optional), the HUD's speed in km/s at high speeds and the system
chart for large systems. Without a world map on the server everything works as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 14:57:07 +01:00
co-authored by Claude Opus 5.5
parent 4efe36d6d7
commit a05f4ce461
30 changed files with 60 additions and 9 deletions
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -221,7 +221,7 @@
<span class="pw"><span class="cap">POWER</span>{{ power_t }}%</span>
</div>
<div class="side r">
<span class="big">{{ speed }}<span class="u">m/s</span></span><span class="cap">SPEED</span>
<span class="big">{{ speed }}<span class="u">{{ speed_u }}</span></span><span class="cap">SPEED</span>
</div>
</div>
</div>
@@ -235,7 +235,7 @@
<div class="brow hull"><span class="l">HULL</span><div class="bar"><div class="chips"><div class="sg" data-class-lit="hull_n &gt; 0"></div><div class="sg" data-class-lit="hull_n &gt; 1"></div><div class="sg" data-class-lit="hull_n &gt; 2"></div><div class="sg" data-class-lit="hull_n &gt; 3"></div><div class="sg" data-class-lit="hull_n &gt; 4"></div><div class="sg" data-class-lit="hull_n &gt; 5"></div><div class="sg" data-class-lit="hull_n &gt; 6"></div><div class="sg" data-class-lit="hull_n &gt; 7"></div><div class="sg" data-class-lit="hull_n &gt; 8"></div><div class="sg" data-class-lit="hull_n &gt; 9"></div><div class="sg" data-class-lit="hull_n &gt; 10"></div><div class="sg" data-class-lit="hull_n &gt; 11"></div><div class="sg" data-class-lit="hull_n &gt; 12"></div><div class="sg" data-class-lit="hull_n &gt; 13"></div><div class="sg" data-class-lit="hull_n &gt; 14"></div><div class="sg" data-class-lit="hull_n &gt; 15"></div></div></div></div>
</div>
<div class="sep"></div>
<div class="val speed"><span class="cap">SPEED</span>{{ speed }}<span class="u">m/s</span></div>
<div class="val speed"><span class="cap">SPEED</span>{{ speed }}<span class="u">{{ speed_u }}</span></div>
</div>
</div>
+52 -1
View File
@@ -111,6 +111,50 @@
.ln { display: none; }
.mi .s { opacity: 0; }
.bookmark .s { opacity: 1; }
/* LARGE SKIES: a system view is drawn by this window alone (#map.own, set by the window): a dark
chart with a grid that follows the zoom, the lanes as lines, and markers of a fixed size on
the screen, shaded to look like bodies -- lit from the upper left */
/* the box is cleared and the real objects are drawn under it (rem_navmap_models): see-through
once the window stands */
#map.own { background-color: #03070d; }
#map.own.revealed { background-color: #03070d00; }
#map.own .real .s { opacity: 0; }
/* LARGE SKIES: the system chart is round -- the corners are masked with the frame's colour, an
edge ring drawn over it */
.roundmask { display: none; position: absolute; left: 0; top: 0; right: 0; bottom: 0;
decorator: radial-gradient(circle closest-side, #0d162200 99.2%, #0d1622ff 99.8%); }
.roundedge { display: none; position: absolute; left: 0; top: 0; right: 0; bottom: 0; border: 1dp #3d7fa8; border-radius: 380dp; }
#map.own .roundmask, #map.own .roundedge { display: block; }
#map.own .gcol, #map.own .gnum { display: none; }
#map.own .ln { display: block; }
#map.own .mi .s { opacity: 1; }
#map.own .ln.lane { border-top: 2dp #2a8fc2c0; }
.gl { position: absolute; }
.gl.v { width: 0; }
.gl.h { height: 0; }
.gl.v.fine { border-left: 1dp #5cc8f014; }
.gl.h.fine { border-top: 1dp #5cc8f014; }
.gl.v.sect { border-left: 1dp #5cc8f040; }
.gl.h.sect { border-top: 1dp #5cc8f040; }
#map.own .planet .s { left: -9dp; top: -9dp; width: 18dp; height: 18dp; border-radius: 9dp; border-width: 0; background-color: #3d79b8;
decorator: radial-gradient(circle at 34% 30%, #e4f2ff 0%, #6fb0ea 22%, #2f67a6 55%, #102744 85%, #050c16 100%); }
#map.own .sun .s { left: -17dp; top: -17dp; width: 34dp; height: 34dp; border-radius: 17dp; border-width: 0; background-color: #00000000;
decorator: radial-gradient(circle at 50% 50%, #ffffff 0%, #fff3b8 18%, #f2c94cd0 34%, #f2a93c50 60%, #f2a93c00 100%); }
#map.own .station .s { left: -6dp; top: -6dp; width: 12dp; height: 12dp; background-color: #3f9fd0;
border-width: 2dp; border-top-color: #e6f7ff; border-left-color: #b9e6fb; border-right-color: #1f5f86; border-bottom-color: #0e3550;
decorator: linear-gradient(135deg, #8fd6f5 0%, #3f9fd0 50%, #1d6a94 100%); }
#map.own .gate .s { border-top-color: #e3ceff; border-left-color: #c9a8f5; border-right-color: #6a45a0; border-bottom-color: #432a6b; }
#map.own .hole .s { border-top-color: #ffc1b8; border-left-color: #f58e80; border-right-color: #9b3528; border-bottom-color: #5f1c14; }
#map.own .platform .s { left: -4dp; top: -4dp; width: 8dp; height: 8dp; background-color: #d9584a;
border-width: 1dp; border-top-color: #ffc9c2; border-left-color: #f59a8f; border-right-color: #8f2c21; border-bottom-color: #591710; }
#map.own .object .s { left: -4dp; top: -4dp; width: 8dp; height: 8dp; border-radius: 4dp; background-color: #8197ad;
decorator: radial-gradient(circle at 34% 30%, #f1f6fb 0%, #9db1c6 40%, #47586b 100%); }
#map.own .ring .s { left: -3dp; top: -3dp; width: 6dp; height: 6dp; border-radius: 3dp; background-color: #2a8fc2;
decorator: radial-gradient(circle at 34% 30%, #d6f1ff 0%, #2a8fc2 55%, #0f3f5c 100%); }
#map.own .player .s { border-bottom-color: #7cf27c; }
#map.own .mi .lbl { color: #c9d9ea; font-size: 12dp; }
#map.own .planet .lbl, #map.own .sun .lbl { left: 14dp; top: -9dp; font-size: 13dp; color: #e6f0fa; }
</style>
</head>
<body class="window" data-model="navmap">
@@ -126,16 +170,21 @@
<div class="split">
<div class="mapframe"><div id="map" data-class-blank="universe &amp;&amp; uncharted">
<div class="region" data-for="r : regions" data-style-left="r.left" data-style-top="r.top">{{ r.name }}</div>
<div class="gl v fine" data-for="g : grid_fv" data-style-left="g.left" data-style-top="g.top" data-style-height="g.name"></div>
<div class="gl h fine" data-for="g : grid_fh" data-style-top="g.top" data-style-left="g.left" data-style-width="g.name"></div>
<div class="gl v sect" data-for="g : grid_sv" data-style-left="g.left" data-style-top="g.top" data-style-height="g.name"></div>
<div class="gl h sect" data-for="g : grid_sh" data-style-top="g.top" data-style-left="g.left" data-style-width="g.name"></div>
<div class="gcol" data-for="g : grid_cols" data-style-left="g.left">{{ g.name }}</div>
<div class="gnum" data-for="g : grid_rows" data-style-top="g.top">{{ g.name }}</div>
<div class="uncharted-note" data-if="universe && uncharted && items.size == 0">No uncharted system visited yet.</div>
<div class="ln" data-for="l : lines" data-class-jump="l.cls == 'jump'" data-class-lane="l.cls == 'lane'" data-class-route="l.cls == 'route'" data-class-waypath="l.cls == 'waypath'" data-style-left="l.left" data-style-top="l.top" data-style-width="l.width" data-style-transform="l.transform"></div>
<div class="mi" data-for="i : items" data-attr-class="'mi ' + i.cls + (i.selected ? ' sel' : '')" data-style-left="i.left" data-style-top="i.top">
<div class="mi" data-for="i : items" data-attr-class="'mi ' + i.cls + (i.selected ? ' sel' : '') + (i.real ? ' real' : '')" data-style-left="i.left" data-style-top="i.top">
<div class="ring2" data-if="i.selected"></div>
<div class="s" data-style-transform="i.rot"></div>
<div class="bc" data-if="i.color != ''" data-style-background-color="i.color"></div>
<div class="lbl" data-if="i.label != ''" data-style-left="i.lleft" data-style-top="i.ltop">{{ i.label }}</div>
</div>
<div class="roundedge"></div>
<div class="pop" data-if="popup" data-style-left="pop_left" data-style-top="pop_top">
<div class="pt">{{ pick_name }}</div>
<div class="pb" data-if="can_open" data-action="tool" data-arg="open">Open system</div>
@@ -150,6 +199,8 @@
</div>
<div class="zoom">
<span class="v">{{ zoom }}</span>
<div class="btn" data-action="zoomall">All</div>
<div class="btn" data-action="zoomship">Ship</div>
<div class="btn" data-action="zoomout">-</div>
<div class="btn" data-action="zoomin">+</div>
</div>
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.