Author SHA1 Message Date
NekuraMew 656df75632 New REM client: REM materials (MATERIALS: normal / roughness / metal / height maps, environment cube); 32-bit leftovers removed (callsign.dll, content - server.dll) 2026-10-25 15:37:52 +01:00
NekuraMew e94ee1d451 New REM client: REM-Client 6573004, 64-bit (RemGfx with TAA / FSR 3.1 / DLSS, ray tracing, volumetric nebulae; x64 runtime, FSR and DLSS libraries) 2026-10-25 15:36:33 +01:00
NekuraMew 6e0b143d89 New REM client: REM-Client 37b48a8 (new samples as of their arrival - no jerk ahead at updates; missing collision group no crash) 2026-10-23 01:14:05 +02:00
NekuraMew fb776d781b New REM client: REM-Client f1d56c2 (moving objects drawn as of each frame - no fine stutter at high fps) 2026-10-23 00:40:07 +02:00
NekuraMew bf3aed258a New REM client: REM-Client 8bf9f62 (remote ships take each sample at its own time - no more stutter) 2026-10-22 23:19:32 +02:00
NekuraMew 48eb3e7c6f New REM client: REM-Client b3bdd1a (contact list: players and bots within 10 km) 2026-10-22 23:19:32 +02:00
NekuraMew 8ebbf6a119 New REM client: REM-Client 275afe9 (no box around billboards in front of planets) 2026-10-22 23:19:31 +02:00
NekuraMew fe6b065013 New REM client: REM-Client 31b1318 (two-sided billboards draw their back faces) 2026-10-22 23:19:31 +02:00
NekuraMew 042dd2e3b8 New REM client: REM-Client 7a719ee (planets keep their spin) 2026-10-22 23:19:31 +02:00
NekuraMew 94a774698c New REM client: REM-Client e3a57e5 (REM text fields give the keyboard back - input block after the depot window) 2026-10-22 23:19:31 +02:00
NekuraMew 5c7683465c New REM client: REM-Client 82094cb (collision shapes with shared ownership - physics crash fix) 2026-10-22 23:19:30 +02:00
NekuraMew 032d58ff3d New REM client: REM-Client 59716de, the rest of the build (relinked DLLs) 2026-10-22 23:19:30 +02:00
NekuraMew 25cefdf46f New REM client: REM-Client 59716de (physics crash diagnosis in the crash report, IVP change back in) 2026-10-22 23:19:30 +02:00
NekuraMew e6ad212536 New REM client: REM-Client c5c382f (upstream IVP change taken back - physics crashes) 2026-10-22 23:19:30 +02:00
NekuraMew 87bd03d0f8 New REM client: REM-Client ae47e59 (hardpoint names always terminated - crash fix, shorter REM normals row) 2026-10-22 23:19:29 +02:00
NekuraMew 5e8f8e7a03 New REM client: REM-Client 744db8d (REM normals V2: parallax occlusion, switchable against V1) 2026-10-22 23:19:29 +02:00
NekuraMew e0570749f6 New REM client: REM-Client 27d95a4 (RemGfx R2: objects, material classes, debug views) 2026-10-22 23:19:29 +02:00
NekuraMew 03b686630f New REM client: REM-Client 2223100 (text input in REM filters works in space) 2026-10-22 23:19:29 +02:00
NekuraMew 41cb20f23d New REM client: REM-Client 400a6fe (Freelancer-Decomp upstream fixes: Gcs chatter, IVP signed byte, HUD labels) 2026-10-22 23:19:29 +02:00
NekuraMew a8083d4ce2 New REM client: REM-Client 5e8d25c (planet atmosphere in the planet's hue and sun colour, far-to-near order; black screen after settings, bots out of the contact list, turret view) 2026-10-22 23:19:28 +02:00
NekuraMew f949dcc757 New REM client: REM-Client 1ec4669 (thinner planet atmosphere, AtmosphereDensity 0.5) 2026-10-22 23:19:28 +02:00
NekuraMew e62aba03e5 New REM client: REM-Client d44bf26 (FL tables in the base window, bots hidden in contacts and chat, atmosphere from the planet texture, no shadows on planets) 2026-10-22 23:19:28 +02:00
NekuraMew 78cf201f0a New REM client: REM-Client b0fb73d (atmosphere colour per planet, data check without dynamic archetypes) 2026-10-22 23:19:28 +02:00
NekuraMew 3d37d85ebb New REM client: REM-Client f09ed28 build (shorter data log list) 2026-10-22 23:19:27 +02:00
NekuraMew 136ef30d0b New REM client: REM-Client f09ed28 (base window tables, data check, undock crash guard) 2026-10-22 23:19:27 +02:00
NekuraMew f2d8b5a569 New REM client: REM-Client 61933d8 (internet servers reachable, hide NPC bots option) 2026-10-22 23:19:27 +02:00
NekuraMew 148d6b6c0e New REM client: the native client in EXE (REM-Client 47231ba)
freelancer.exe and the engine DLLs of the native REM client with RemGfx,
rem.ini / remgfx.ini, DACOM.INI with the REM effect pools; content.dll in
DLLS/BIN. The REM text and resource DLLs and the new-character files stay
the mod's. Removed: REM-Client.dll, FLAR, ReShade, dinput8 and the remaining
HUD / gameplay plugins (native now), ServerFramework.dll and CheatMessage.txt
(server). Material data: FLARDATA (RemGfx reads it). Updated with
REM-Client tools/rem/update_mod.py.
2026-10-22 23:19:27 +02:00
NekuraMew 0e6b3fab55 New REM client: drop the old plugins and hook leftovers, art sources to ART/UI
The native REM client replaces the dacom plugins (rem-essentials, jflp, numeric,
moors, ranks, shipclass, engclass, storyfactions, ...), the FLAR / ReShade /
DLSS renderer hooks and the Lua event scripts of the ClientHook (all empty or
unused); dacom.ini and dacomsrv.ini no longer load them. flserver.exe and
mysqlcppconn.dll belong to the server. The first-person camera zones are
deferred. The ClientHook's pictures move to ART/UI as the sources of the
generators in tools. REM/Audio and REM/Avatars stay.
2026-10-22 23:19:26 +02:00
366 changed files with 8682 additions and 6252 deletions
+1 -3
View File
@@ -22,9 +22,7 @@ EXE/rem-server*
EXE/flserver_rebuilt.* EXE/flserver_rebuilt.*
EXE/flbot.exe EXE/flbot.exe
EXE/LargeID.dat EXE/LargeID.dat
# ServerModule: the missions are the mod's (tracked); the server's run log and the local test missions are not EXE/REM/ServerModule/
EXE/REM/ServerModule/trade_log.txt
EXE/REM/ServerModule/missions/rem_demo*.ini
EXE/REM/npc_profiles.ini EXE/REM/npc_profiles.ini
EXE/REM/rem-server-*.txt EXE/REM/rem-server-*.txt
flserver-reconstruction/ flserver-reconstruction/
+2 -2
View File
@@ -4916,8 +4916,8 @@ phantom_physics = true
; Sublight-Modul ; Sublight-Modul
[ShieldGenerator]
;[JumpEngine] [JumpEngine]
nickname = jump_drive nickname = jump_drive
ids_name = 265001 ids_name = 265001
ids_info = 265002 ids_info = 265002
-13
View File
@@ -1863,17 +1863,4 @@ combinable = false
ids_name = 263960 ids_name = 263960
ids_info = 263960 ids_info = 263960
shop_archetype = equipment\models\st\ku_thruster.3db shop_archetype = equipment\models\st\ku_thruster.3db
material_library = equipment\models\ku_equip.mat
; Sublight-Modul
[Good]
nickname = jump_drive
equipment = jump_drive
category = equipment
price = 75000
item_icon = equipment\models\commodities\nn_icons\EQUIPICON_thruster.3db
combinable = false
ids_name = 265001
ids_info = 265002
shop_archetype = equipment\models\st\ku_thruster.3db
material_library = equipment\models\ku_equip.mat material_library = equipment\models\ku_equip.mat
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+9 -15
View File
@@ -549,17 +549,16 @@ effect_crc = 116864929
[VisEffect] [VisEffect]
nickname = gf_tradeinnerring nickname = gf_tradeinnerring
alchemy = fx\misc\gf_tradeinnerring.tale alchemy = fx\misc\gf_tradeinnerring.ale
effect_crc = -141786875 effect_crc = -141786875
textures = fx\sarma.txm textures = fx\sarma.txm
textures = fx\beam.txm textures = fx\beam.txm
textures = fx\newglows.txm
[VisEffect] [VisEffect]
nickname = gf_tradelaneendsplash nickname = gf_tradelaneendsplash
alchemy = fx\misc\gf_tradelaneendsplash.tale alchemy = fx\misc\gf_tradelaneendsplash.ale
effect_crc = 272986435 effect_crc = 272986435
textures = fx\newglows.txm textures = fx\planetflare.txm
[VisEffect] [VisEffect]
nickname = gf_tradelaneflash nickname = gf_tradelaneflash
@@ -569,13 +568,11 @@ textures = fx\sarma.txm
[VisEffect] [VisEffect]
nickname = tradelaneinship01 nickname = tradelaneinship01
alchemy = fx\misc\gf_tradelaneinship01.tale alchemy = fx\misc\gf_tradelaneinship01.ale
effect_crc = -422626017 effect_crc = -422626017
textures = fx\sarma.txm textures = fx\sarma.txm
textures = fx\flwt.txm textures = fx\planetflare.txm
textures = fx\efx.txm textures = fx\kioncannon.txm
textures = FX\smoke.txm
textures = fx\newglows.txm
[VisEffect] [VisEffect]
nickname = tradelaneship01donut nickname = tradelaneship01donut
@@ -608,13 +605,10 @@ textures = fx\planetflare.txm
[VisEffect] [VisEffect]
nickname = tradelaneshipdebris01 nickname = tradelaneshipdebris01
alchemy = fx\misc\gf_tradelaneship01.tale alchemy = fx\misc\gf_tradelaneship01.ale
effect_crc = 383368615 effect_crc = 383368615
textures = fx\sarma.txm textures = fx\beam.txm
textures = fx\flwt.txm textures = fx\planetflare.txm
textures = fx\efx.txm
textures = FX\smoke.txm
textures = fx\newglows.txm
[VisEffect] [VisEffect]
nickname = tradelaneshipdebris03 nickname = tradelaneshipdebris03
BIN
View File
Binary file not shown.
-3
View File
@@ -331,9 +331,6 @@ id = USER_REM_WAYPOINT_BOT
[key] [key]
id = USER_REM_SECTOR_SCANNER id = USER_REM_SECTOR_SCANNER
[key]
id = USER_REM_HUDLESS
[key] [key]
id = USER_REM_WAYPOINTS id = USER_REM_WAYPOINTS
-7
View File
@@ -1073,12 +1073,6 @@ ids_name = 524526
ids_info = 524527 ids_info = 524527
state = keydown state = keydown
[KeyCmd]
nickname = USER_REM_HUDLESS
ids_name = 524528
ids_info = 524529
state = keydown
[KeyMap] [KeyMap]
nickname = IDR_ALWAYS_PRESENT nickname = IDR_ALWAYS_PRESENT
key = USER_REM_WAYPOINTS key = USER_REM_WAYPOINTS
@@ -1086,7 +1080,6 @@ key = USER_REM_BASE
key = USER_REM_MISSIONS key = USER_REM_MISSIONS
key = USER_REM_CONTRACTS key = USER_REM_CONTRACTS
key = USER_REM_PLAYER key = USER_REM_PLAYER
key = USER_REM_HUDLESS
key = USER_YES key = USER_YES
key = USER_NO key = USER_NO
key = USER_CANCEL key = USER_CANCEL
@@ -1,10 +0,0 @@
[CharacterEncounter]
Location = Li01_01_base, Cityscape
start_room = Cityscape
action = scripts\rem_arcs\manhattan_story_arc01_start.thn
autoplay
[Char]
npc = Trent
actor = trent
fidget = scripts\extras\fidget_stand_male_NULL.thn
+4 -4
View File
@@ -5020,7 +5020,7 @@ hp_type = hp_fighter_engine_special_10, HpDrive01
hp_type = hp_elite_power_special_10, HpPower01 hp_type = hp_elite_power_special_10, HpPower01
hp_type = hp_fighter_power_special_1, HpPower02 hp_type = hp_fighter_power_special_1, HpPower02
hp_type = hp_rem_module01, HpVelocity hp_type = hp_rem_module01, HpVelocity
hp_type = hp_rem_module02, HpJump hp_type = hp_rem_module01, HpJump
[CollisionGroup] [CollisionGroup]
obj = wing_port_lod1 obj = wing_port_lod1
@@ -5658,7 +5658,7 @@ hp_type = hp_fighter_engine_special_10, HpDrive01
hp_type = hp_elite_power_special_10, HpPower01 hp_type = hp_elite_power_special_10, HpPower01
hp_type = hp_fighter_power_special_1, HpPower02 hp_type = hp_fighter_power_special_1, HpPower02
hp_type = hp_rem_module01, HpVelocity hp_type = hp_rem_module01, HpVelocity
hp_type = hp_rem_module02, HpJump hp_type = hp_rem_module01, HpJump
hp_type = hp_elite_shield_special_2, HpCloak01 hp_type = hp_elite_shield_special_2, HpCloak01
[CollisionGroup] [CollisionGroup]
@@ -6397,7 +6397,7 @@ hp_type = hp_fighter_engine_special_10, HpDrive01
hp_type = hp_elite_power_special_10, HpPower01 hp_type = hp_elite_power_special_10, HpPower01
hp_type = hp_fighter_power_special_1, HpPower02 hp_type = hp_fighter_power_special_1, HpPower02
hp_type = hp_rem_module01, HpVelocity hp_type = hp_rem_module01, HpVelocity
hp_type = hp_rem_module02, HpJump hp_type = hp_rem_module01, HpJump
[CollisionGroup] [CollisionGroup]
obj = bw_port_wing01_lod1 obj = bw_port_wing01_lod1
@@ -10242,7 +10242,7 @@ hp_type = hp_fighter_engine_special_10, HpDrive01
hp_type = hp_elite_power_special_10, HpPower01 hp_type = hp_elite_power_special_10, HpPower01
hp_type = hp_fighter_power_special_1, HpPower02 hp_type = hp_fighter_power_special_1, HpPower02
hp_type = hp_rem_module01, HpVelocity hp_type = hp_rem_module01, HpVelocity
hp_type = hp_rem_module02, HpJump hp_type = hp_rem_module01, HpJump
[CollisionGroup] [CollisionGroup]
obj = cv02_port_wing_lod1 obj = cv02_port_wing_lod1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+4 -9
View File
@@ -41,8 +41,6 @@ rem.AddInfoCard(524524, "MODULE SLOT 9")
rem.AddInfoCard(524525, "MODULE SLOT 10") rem.AddInfoCard(524525, "MODULE SLOT 10")
rem.AddInfoCard(524526, "SECTOR SCANNER") rem.AddInfoCard(524526, "SECTOR SCANNER")
rem.AddInfoCard(524527, "Shows / hides the 3D sector scanner (contacts within 7.5 km).") rem.AddInfoCard(524527, "Shows / hides the 3D sector scanner (contacts within 7.5 km).")
rem.AddInfoCard(524528, "HUDLESS")
rem.AddInfoCard(524529, "Hides the HUD, then also the mouse cursor, then shows both again (screenshots).")
-- RACE INFOCARDS -- RACE INFOCARDS
rem.AddInfoCard(9001, "1") rem.AddInfoCard(9001, "1")
@@ -86,21 +84,18 @@ rem.AddInfoCard(455100, "Cygnus-Cluster")
-- Mission Infocards -- Mission Infocards
rem.AddInfoCard(458700, "Launch your Ship")
-- Story Arc I - Liberty | Zero Point (Planet Manhattan - Li01_01_Base) -- Story Arc I - Liberty | Zero Point (Planet Manhattan - Li01_01_Base)
rem.AddInfoCard(458751, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Zero Point</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Today, there was another disturbing unconsciousness and daydreaming. Something strange, like seeing the past and the future at the same time. It felt like a warning — a vision of a threat and artifacts. But there was something more... something that remained difficult to understand.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>By contacting Jun'ko Zane talking about ancient alien artifacts, she sent some information that Sean Ashcroft has been spotted near the Pittsburgh Debris Field. Ashcroft would be a good lead, as he has the best insight into the smuggling ring in Sirius, and after his former interrogation, he is still working for the Liberty Rogues on criminal activites.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Finding Sean Ashcroft and talk to him on planet Pittsburgh will be a good start.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Objectives:</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Destroy Ashcroft's Ship</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Tractor in Ashcroft's Lifepod</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Land on Planet Pittsburgh</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]]) rem.AddInfoCard(458751, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Zero Point</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Today, there was another disturbing unconsciousness and daydreaming. Something strange, like seeing the past and the future at the same time. It felt like a warning — a vision of a threat and artifacts. But there was something more... something that remained difficult to understand.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>By contacting Jun'ko Zane talking about ancient alien artifacts, she sent some information that Sean Ashcroft has been spotted near the Pittsburgh Debris Field. Ashcroft would be a good lead, as he has the best insight into the smuggling ring in Sirius, and after his former interrogation, he is still working for the Liberty Rogues on criminal activites.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Finding Sean Ashcroft and talk to him on planet Pittsburgh will be a good start.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Objectives:</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Destroy Ashcroft's Ship</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Tractor in Ashcroft's Lifepod</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Land on Planet Pittsburgh</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
rem.AddInfoCard(458752, "Find Ashcroft in the Pittsburgh Debris Field") rem.AddInfoCard(458752, "Find Ashcroft in the Pittsburgh Debris Field")
rem.AddInfoCard(458753, "Destroy Ashcroft's Ship") rem.AddInfoCard(458753, "Destroy Ashcroft's Ship")
rem.AddInfoCard(458754, "Tractor in Ashcroft's Lifepod") rem.AddInfoCard(458754, "Tractor in Ashcroft's Lifepod")
rem.AddInfoCard(458755, "Land on Planet Pittsburgh") rem.AddInfoCard(458755, "Land on Planet Pittsburgh")
rem.AddInfoCard(458756, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Zero Point</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Status: Mission accomplished</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Excellent! Through his smuggling connections, Ashcroft had obtained an ancient artifact: the Athena Orb.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>This could be the beginning to a journey finding more Daam-K'vosh artifacts by its ability to locate other artifacts, potentially makes it a tracking device for the entire collection. Meanwhile there's another mission on Planet Manhattan.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Launch your ship to continue for the mission interlude. Diplomat Harrison will contact you in space.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]]) rem.AddInfoCard(458756, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 02: Zero Point</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Status: Mission accomplished</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Excellent! Through his smuggling connections, Ashcroft had obtained an ancient artifact: the Athena Orb.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>This could be the beginning to a journey finding more Daam-K'vosh artifacts by its ability to locate other artifacts, potentially makes it a tracking device for the entire collection. Meanwhile there's another mission on Planet Manhattan.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Launch your ship to continue the next mission. Diplomat Harrison will contact you in space.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
rem.AddInfoCard(458757, "Launch your Ship")
rem.AddInfoCard(458757, "Fly to Planet Manhattan") rem.AddInfoCard(458758, "Fly to Planet Manhattan")
rem.AddInfoCard(458758, "Land on Planet Manhattan")
-- Mission Text Introducing Story Arc I - Tour of Duty -- Mission Text Introducing Story Arc I - Tour of Duty
rem.AddInfoCard(458759, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission Interlude</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Harrison contacted through an open channel, requesting a meeting on Planet Manhattan. Deeply concerned about Liberty's inner politics, the common afairs and the growing instability reaching to an unpreventable turmoil. Nevertheless he also has his duties and need some assistance.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Harrison's the first choice by President Jacobi to blot out the Nomad corruption. Starting the next mission on the job-board will lead to the meeting on the Manhattan Landing Pads.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]]) rem.AddInfoCard(458759, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Juni introduced Harrison to me in the Manhattan Bar. We talked a lot of Liberty's inner politics and its common afairs. Harrison's the first choice by the President of Liberty to blot out the Nomad corruption.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>I should come later to get more informations about the current politic situation.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
-- Story Arc I - Liberty | Tour of Duty (Planet Manhattan - Li01_01_Base) -- Story Arc I - Liberty | Tour of Duty (Planet Manhattan - Li01_01_Base)
rem.AddInfoCard(458760, "Story Arc I - Liberty") rem.AddInfoCard(458760, "Story Arc I - Liberty")
@@ -1,236 +0,0 @@
; >>> MISSION SECTION <<<
[Mission]
nickname = li_story_arc_chapter_1
story_name = li_arc_chapter_1_m01 ; progress key, lowercase
offer_type = CapturePrisoner
offer_target_system = Li01
offer_faction = li_n_grp
offer_title_id = 458760
offer_description_id = 458751
offer_bases = Li01_01_Base
; reoffer defaults to OnFail for story missions
; >>> NPC SECTION <<<
[NpcShipArch]
nickname = MSN14_Ashcroft
archetype = pi_elite ; shiparch nickname from your mod data
loadout = MSN02_Ashcroft ; loadout nickname from your mod data
state_graph = fighter
pilot = MSN02_Ashcroft ; pilot nickname from pilots.ini
level = 5
[MsnNpc]
nickname = Ashcroft
npc_ship = MSN14_Ashcroft
string_id = 216206
faction = fc_lr_grp
system = Li01
position = 32234, 0, -82297
label = lr_ashcroft
[NpcShipArch]
nickname = MSN14_Ashcroft_Escort
archetype = pi_fighter ; shiparch nickname from your mod data
loadout = MSN02_Ashcroft_Escort ; loadout nickname from your mod data
state_graph = fighter
pilot = MSN02_Ashcroft_Escort ; pilot nickname from pilots.ini
level = 5
[MsnNpc]
nickname = Ashcroft_Escort_1
npc_ship = MSN14_Ashcroft_Escort
string_id = 196888
faction = fc_lr_grp
system = Li01
position = 32254, 0, -82297
label = lr_pirates
[MsnNpc]
nickname = Ashcroft_Escort_2
npc_ship = MSN14_Ashcroft_Escort
string_id = 196888
faction = fc_lr_grp
system = Li01
position = 32234, 0, -82297
label = lr_pirates
[MsnNpc]
nickname = Ashcroft_Escort_3
npc_ship = MSN14_Ashcroft_Escort
string_id = 196888
faction = fc_lr_grp
system = Li01
position = 32224, 0, -82297
label = lr_pirates
[MsnNpc]
nickname = Ashcroft_Escort_4
npc_ship = MSN14_Ashcroft_Escort
string_id = 196888
faction = fc_lr_grp
system = Li01
position = 32264, 0, -82297
label = lr_pirates
; >>> LOOT SECTION <<<
[MsnLoot]
nickname = ashcroft_pod
archetype = escape_lifeboat
string_id = 216206
rel_pos_obj = Ashcroft
rel_pos_offset = 50, 0, 0
velocity = 0, 0, 0
equip_amount = 1
health = 1
Can_Jettison = false
; >>> TRIGGER SECTION <<<
[Trigger]
nickname = arc01_m01_c01_scene
InitState = Active
Act_SetTHNConfig = players, manhattan_gen, li_arc01_m01_c01
Act_PlayTHN = players, 48, 458760, 458751
[Trigger]
nickname = arc01_m01_scene
InitState = Active
Cnd_THNComplete = players
Act_DisplayMsg = players, 458700
[Trigger]
nickname = t_ashcroft_spawn_destination
InitState = Active
Cnd_LaunchComplete = players, Li01_01_Base
Act_NNPath = players, 458752, Li01, 32234, 0, -82297, true
Act_Mark = players, lr_pirates, true
Act_ActTrig = t_ashcroft_ship_spawn
[Trigger]
nickname = t_ashcroft_ship_spawn
Cnd_DistVec = Player, 32234, 0, -82297, 7500, Li01, inside
Act_SpawnShip = Ashcroft, no_ol
Act_SpawnShip = Ashcroft_Escort_1, no_ol
Act_SpawnShip = Ashcroft_Escort_2, no_ol
Act_SpawnShip = Ashcroft_Escort_3, no_ol
Act_SpawnShip = Ashcroft_Escort_4, no_ol
Act_Mark = players, lr_pirates, true
Act_ActTrig = t_ashcroft_ship_hostile
[Trigger]
nickname = t_ashcroft_ship_hostile
Cnd_DistVec = Player, 32234, 0, -82297, 6000, Li01, inside
Act_SetVibe = Ashcroft, players, REP_HOSTILE_MAX
Act_SetVibe = Ashcroft_Escort_1, players, REP_HOSTILE_MAX
Act_SetVibe = Ashcroft_Escort_2, players, REP_HOSTILE_MAX
Act_SetVibe = Ashcroft_Escort_3, players, REP_HOSTILE_MAX
Act_SetVibe = Ashcroft_Escort_4, players, REP_HOSTILE_MAX
Act_ActTrig = t_ashcroft_ship_comm
[Trigger]
nickname = t_ashcroft_ship_comm
Cnd_DistVec = Player, 32234, 0, -82297, 2500, Li01, inside
Act_EtherComm = ashcroft_m2_0880, players, ashcroft_voice_m02, DX_M02_0880_ASHCROFT, 0.5, false, 600019, pi_pirate4_head, pi_pirate8_body
[Trigger]
nickname = t_ashcroft_ship_destroyed
InitState = Active
Cnd_Destroyed = lr_ashcroft, 1, EXPLODE ; explicit count = wait for ALL
Act_DisplayMsg = players, 458754
Act_SpawnLoot = ashcroft_pod
Act_ActTrig = t_ashcroft_cargopod_loot
[Trigger]
nickname = t_ashcroft_health_50
InitState = Active
;system = Li01
Cnd_HealthDec = Ashcroft, 0.5
Act_EtherComm = ashcroft_m2_0900, players, ashcroft_voice_m02, DX_M02_0900_ASHCROFT, 0.5, false, 600019, pi_pirate4_head, pi_pirate8_body
Act_ActTrig = t_ashcroft_health_25
[Trigger]
nickname = t_ashcroft_health_25
Cnd_HealthDec = Ashcroft, 0.25
[Trigger]
nickname = t_ashcroft_cargopod_loot
Cnd_LootAcquired = ashcroft_pod, Player
Act_NNPath = players, 458755, Li01, 50655, 0, -77595, true, Li01_02_dock_ring
Act_SetTHNConfig = players, pittsburgh_gen, li_arc01_m01_c02
Act_ActTrig = t_ashcroft_cargopod_landed
Act_ActTrig = t_pittsburgh_marked
Act_ActTrig = pod_dies
[Trigger]
nickname = pod_dies
system = ANY
Cnd_Destroyed = ashcroft_pod, 1, EXPLODE
Act_ChangeState = FAIL, 22355
[Trigger]
nickname = t_pittsburgh_marked
Cnd_Timer = 1
Act_Mark = players, Li01_02, true
[Trigger]
nickname = t_ashcroft_cargopod_landed
Cnd_BaseEnter = players, Li01_02_Base
;Act_PlayTHN = players, 30, 458760, 458756
Act_ActTrig = t_mission_ending
[Trigger]
nickname = t_mission_ending
Cnd_Timer = 33
Act_PopUpDialog = players, 458760, 458756
Act_ActTrig = t_ashcroft_pittsburgh_close
[Trigger]
nickname = t_ashcroft_pittsburgh_close
Cnd_PopUpDialog = CLOSE
Act_RemoveCargo = players, ashcroft_pod, 1
Act_ActTrig = t_ashcroft_mission_completed3
[Trigger]
nickname = t_ashcroft_mission_completed3
Cnd_PopUpDialog = CLOSE
Act_SetMsnResult = Success ; won - the mission goes on (interlude)
Act_AdjAcct = players, 250000 ; the actual payout
Act_DisplayMsg = players, 479000 ; Mission Success NEURAL-NET MESSAGE
Act_Destroy = Ashcroft, SILENT ; Ashcroft goes (Act_TerminateMsn would end the whole mission)
Act_ActTrig = t_ashcroft_pittsburgh_launched
Act_ActTrig = t_ashcroft_pittsburgh_success
; >>> INTERLUDE SECTION <<<
[Trigger]
nickname = t_ashcroft_pittsburgh_success
Cnd_Timer = 2
Act_DisplayMsg = players, 458700
[Trigger]
nickname = t_ashcroft_pittsburgh_launched
Cnd_LaunchComplete = players, Li01_02_Base
Act_ActTrig = t_ashcroft_mission_outro
[Trigger]
nickname = t_ashcroft_mission_outro
Cnd_Timer = 1
Act_EtherComm = harrison_intro, players, harrison_voice_m14, dx_m14_0000_HARRISON, 0.5, false, 227159, rh_captain_head, li_rockford_body
Act_NNPath = players, 458757, Li01, -33267, 0, -28810, true, Dock_Ring_Li01_01
Act_ActTrig = t_ashcroft_mission_completed
[Trigger]
nickname = t_ashcroft_mission_completed
Cnd_DistVec = Player, -33267, 0, -28810, 3500, Li01, inside
Act_DisplayMsg = players, 458758
Act_ActTrig = t_ashcroft_mission_completed2
[Trigger]
nickname = t_ashcroft_mission_completed2
Cnd_BaseEnter = players, Li01_01_Base
Act_PopUpDialog = players, 458760, 458759
Act_LeaveMsn = players, Success ; the interlude is over: records li_arc_chapter_1_m01
Act_TerminateMsn
-36
View File
@@ -59,39 +59,3 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
## The modern interface (docs/rem/ui-modern.md)
The modern windows are drawn with these libraries and fonts, shipped unchanged:
- RmlUi 6.3, https://github.com/mikke89/RmlUi -- src/RmlUi/vendor, license below.
- FreeType 2.14.3, https://freetype.org -- src/freetype/vendor. Portions of this software are
copyright (c) 2026 The FreeType Project (www.freetype.org). All rights reserved. Used under the
FreeType License (src/freetype/vendor/FTL.TXT).
- Saira Semi Condensed, Barlow and IBM Plex Mono (Google Fonts) -- assets/remui/fonts, each under
the SIL Open Font License 1.1 (the OFL-*.txt files beside the fonts).
RmlUi:
MIT License
Copyright (c) 2008-2014 CodePoint Ltd, Shift Technology Ltd, and contributors
Copyright (c) 2019-2026 The RmlUi Team, and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
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.
+2 -29
View File
@@ -16,23 +16,17 @@
[REM] [REM]
; ---- Display ---- ; ---- Display ----
better_resolutions = true ; default mode = main monitor size better_resolutions = false ; default mode = main monitor size
png_screenshots = false ; screenshots as PNG (WIC) instead of BMP png_screenshots = false ; screenshots as PNG (WIC) instead of BMP
run_in_background = true ; keep running and drawing without focus (Alt+Tab) run_in_background = true ; keep running and drawing without focus (Alt+Tab)
alt_enter_toggle = true ; Alt+Enter: borderless fullscreen <-> window filling the desktop alt_enter_toggle = true ; Alt+Enter: borderless fullscreen <-> window filling the desktop
dpi_aware = true ; per monitor DPI aware: Windows display scaling (125 %) does not shrink the modes
; ---- Physics ----
draw_time_extrapolation = true ; multiplayer: moving objects drawn as of the frame's time (false: as of the last physics step, retail)
; ---- Cursor and mouse ---- ; ---- Cursor and mouse ----
cursor_color = 0 ; cursor colour: 0 game default, 1 red, 2 green, 3 blue, 4 yellow, 5 pink cursor_color_custom = false ; draw every cursor in the colour below
cursor_color_custom = false ; older switch (no preset chosen): every cursor in the colour below
cursor_color_r = 255 cursor_color_r = 255
cursor_color_g = 255 cursor_color_g = 255
cursor_color_b = 255 cursor_color_b = 255
more_cursor_colors = false ; target cursor in group / trade-request colour more_cursor_colors = false ; target cursor in group / trade-request colour
lead_marker_color = 0 ; crosshair (lead cross) colour: 0 game default, 1 red, 2 green, 3 blue, 4 yellow, 5 pink
lead_marker_color_custom = false ; the lead cross (aim point) in the colour below (ClientHook "crosshair colour") lead_marker_color_custom = false ; the lead cross (aim point) in the colour below (ClientHook "crosshair colour")
lead_marker_color_r = 191 lead_marker_color_r = 191
lead_marker_color_g = 29 lead_marker_color_g = 29
@@ -49,28 +43,7 @@ particle_linger_seconds = 20 ; particles of a stopped emitter fade over th
; ---- Interface ---- ; ---- Interface ----
hide_npc_players = false ; leave the server's player bots ("[NPC] " names) out of the player lists (chat window, chat target) hide_npc_players = false ; leave the server's player bots ("[NPC] " names) out of the player lists (chat window, chat target)
numeric_damage = true ; target hull (with armour) and shield as numbers beside the bars (adoxa Numeric Damage) numeric_damage = true ; target hull (with armour) and shield as numbers beside the bars (adoxa Numeric Damage)
delay_display = true ; refire time left beside the ammo count of slow launchers, "20--1.5" (M0tah DelayDisplay)
zone_messages = true ; "Entered <zone>." / "Left <zone>." in the arrival text, coloured for dangerous zones (adoxa Zone)
join_server_button = true ; JOIN SERVER in the main menu: straight to the first rem_servers entry
chat_widescreen_shift = true ; the chat window at the left screen edge on wide screens (adoxa HudShift, chat groups)
rem_bar = true ; REM bar top left (NeuroNet bar twin with the REM windows) * rem_bar = true ; REM bar top left (NeuroNet bar twin with the REM windows) *
modern_ui = true ; the modern windows (new design, docs/rem/ui-modern.md) where there are some; off: all classic
modern_ui_scale = 1.0 ; size of the modern windows (1 = 1 dp per pixel at 1080 lines)
hud_scale = 1.0 ; size of the modern flight HUD (the parts keep their own size from the HUD editor)
hud_opacity = 1.0 ; opacity of the modern flight HUD
ui_theme = 0 ; colours of the modern windows: 0 REM, 1 neon blue, 2 red, 3 green, 4 purple, 5 high contrast
colorblind_mode = 0 ; friend / foe colours: 0 FL red / green, 1 orange / blue (red-green), 2 red / cyan (blue-yellow)
; chat colours per channel (the chat settings, gear in the chat line): rrggbb, empty = FL's own
chat_color_universe =
chat_color_system =
chat_color_local =
chat_color_group =
chat_color_private =
chat_color_server =
chat_color_console =
chat_timestamps = true ; times in the modern chat history
chat_ignore = ; ignored players (the chat menu on a name), names joined by |
modern_ui_debugger = false ; F8 shows the RmlUi debugger over the modern windows *
rem_protocol_log = true ; every REM server message in LOGS\rem_protocol.log * rem_protocol_log = true ; every REM server message in LOGS\rem_protocol.log *
rem_servers = srv.rem-freelancer.moe:2302 ; servers always in the multiplayer list (host:port, comma separated) * rem_servers = srv.rem-freelancer.moe:2302 ; servers always in the multiplayer list (host:port, comma separated) *
copy_paste_feature = false ; Ctrl+C / Ctrl+V in text boxes copy_paste_feature = false ; Ctrl+C / Ctrl+V in text boxes
+7 -25
View File
@@ -14,9 +14,6 @@ VSync = -1
; full-screen (non-windowed) modes: 1 = borderless window over the monitor, the back buffer is ; full-screen (non-windowed) modes: 1 = borderless window over the monitor, the back buffer is
; scaled to it (no exclusive mode switch); 0 = leave the window alone ; scaled to it (no exclusive mode switch); 0 = leave the window alone
Fullscreen = 1 Fullscreen = 1
; ... and the back buffer takes the monitor's size: a mode smaller than the monitor is not scaled
; up with black bars (16:9 on an ultrawide), the picture is simply wider; 0 = scale the mode up
FullscreenNative = 1
; anti-aliasing: 0/1 off, 2, 4 or 8 = MSAA samples (the back buffer is resolved before present) ; anti-aliasing: 0/1 off, 2, 4 or 8 = MSAA samples (the back buffer is resolved before present)
Msaa = 0 Msaa = 0
; texture filtering: 0 = as the game sets it, 2..16 = force anisotropic filtering ; texture filtering: 0 = as the game sets it, 2..16 = force anisotropic filtering
@@ -37,6 +34,10 @@ NormalFlipY = 0
NormalStrength = 0.6 NormalStrength = 0.6
; depth of the height-map parallax (0 = off, 0.25 = default, 2 = strong) ; depth of the height-map parallax (0 = off, 0.25 = default, 2 = strong)
ParallaxStrength = 0.25 ParallaxStrength = 0.25
; REM normals: how the height maps give relief. 1 = V1 offset parallax (one sample, cheap; swims at
; grazing angles), 2 = V2 parallax occlusion (the view ray walks through the height field: edges hide
; what lies behind them, stable at grazing angles; more GPU time close up)
RemNormals = 2
; relief of planets, worked out from the brightness of their own texture (0 = flat as the original) ; relief of planets, worked out from the brightness of their own texture (0 = flat as the original)
PlanetRelief = 1.0 PlanetRelief = 1.0
; R3b REM lighting: 1 = physically based per-pixel light (GGX) on ships, stations, planets and ; R3b REM lighting: 1 = physically based per-pixel light (GGX) on ships, stations, planets and
@@ -85,10 +86,6 @@ Overlay = 1
; R4 sun shadows in space and space cutscenes (cascaded shadow maps): ShadowMapSize is the atlas ; R4 sun shadows in space and space cutscenes (cascaded shadow maps): ShadowMapSize is the atlas
; of the four cascades (2048 / 4096 / 8192), ShadowDistance how far from the camera (metres). ; of the four cascades (2048 / 4096 / 8192), ShadowDistance how far from the camera (metres).
Shadows = 1 Shadows = 1
; R32 soft shadow-map shadows (PCSS): the sun's angular size in degrees -- sharp where a shadow touches
; its caster, softer farther away (0 = the fixed 3x3 filter). The ray-traced shadows (RtShadows) are
; not affected.
ShadowSoftness = 1.5
ShadowMapSize = 4096 ShadowMapSize = 4096
ShadowDistance = 3000 ShadowDistance = 3000
; PlanetShadows = 1: planets also receive the shadows of ships, docking rings and stations ; PlanetShadows = 1: planets also receive the shadows of ships, docking rings and stations
@@ -102,37 +99,22 @@ ShadowCullMargin = 400
DynamicLights = 1 DynamicLights = 1
; R17 weapon lights: laser beams light their surroundings along their length, muzzle flashes, ; R17 weapon lights: laser beams light their surroundings along their length, muzzle flashes,
; projectiles, impacts and explosions as points in the colour of their particles (needs ; projectiles, impacts and explosions as points in the colour of their particles (needs
; DynamicLights = 1). WeaponGlow draws weapon effects brighter for the bloom (1 = original, below 1 ; DynamicLights = 1). WeaponGlow draws weapon effects brighter for the bloom (1 = original).
; dimmer); BeamGlow the lasers' glowing volumes (R24, 0 = off).
WeaponLights = 1 WeaponLights = 1
WeaponLightIntensity = 1.0 WeaponLightIntensity = 1.0
WeaponLightRange = 1.0 WeaponLightRange = 1.0
WeaponGlow = 1.0 WeaponGlow = 1.6
BeamGlow = 0.4
; R23: the jump holes as faint gravitational lenses, growing and rippling while activated (0 = off:
; Freelancer's own effect; also off with MSAA).
JumpHoles = 1
; R2 debug view (diagnosis from screenshots): 0 off, 1 normals, 2 depth (1 m black .. 130 km ; R2 debug view (diagnosis from screenshots): 0 off, 1 normals, 2 depth (1 m black .. 130 km
; white), 3 motion vectors (grey = still, magenta = unknown), 4 material class (glass, nomad, ; white), 3 motion vectors (grey = still, magenta = unknown), 4 material class (glass, nomad,
; planet water, engine glow ... one colour each), 5 game object (one colour per object), 6 phase ; planet water, engine glow ... one colour each), 5 game object (one colour per object), 6 phase
DebugView = 0 DebugView = 0
; motion diagnostics in remgfx.log after each statistics line (planet surfaces, own ship, camera): 1 on
MotionLog = 0
; slow frames: a line in remgfx.log for each frame far slower than the running average (new pipelines,
; ray-tracing meshes, textures / buffers created, presenting and Reflex / Anti-Lag wait); 10 per 600 frames at most
HitchLog = 1
; where RemGfx spends its CPU time per frame (draws, constants, motion, pipelines, ray tracing, post, present): 1 on
CpuLog = 0
; ray tracing: new meshes (their acceleration structures) built per frame at most, and their triangles;
; the rest waits for the next frames (a group of ships coming into view built everything in one frame)
RtBuildPerFrame = 16
RtBuildTriangles = 400000
; R16 distortion: heat haze behind engines and around explosions, refraction at shield hits and ; R16 distortion: heat haze behind engines and around explosions, refraction at shield hits and
; cloaks, a swirl in the jump tunnel; Distortion switches all of it, the others scale each kind ; cloaks, a swirl in the jump tunnel; Distortion switches all of it, the others scale each kind
; (0 = off). Needs Taa = 1 (it shares the scene's extra targets with the motion vectors). ; (0 = off). Needs Taa = 1 (it shares the scene's extra targets with the motion vectors).
Distortion = 1 Distortion = 1
HeatHaze = 1.0 HeatHaze = 1.0
ShieldRefraction = 1.0 ShieldRefraction = 1.0
CloakRefraction = 1.0
TunnelDistortion = 1.0 TunnelDistortion = 1.0
; R15 planet atmospheres: light scattering like Earth's (blue rim on the day side, red at the ; R15 planet atmospheres: light scattering like Earth's (blue rim on the day side, red at the
; terminator, glow against the sun); AtmosphereReplace = 1 hides the planets' original atmosphere ; terminator, glow against the sun); AtmosphereReplace = 1 hides the planets' original atmosphere
Binary file not shown.
Binary file not shown.
Binary file not shown.
-28
View File
@@ -1,28 +0,0 @@
<rml>
<head>
<title>Account</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.explain { white-space: pre-line; line-height: 1.5; font-size: 15dp; padding: 12dp; margin-bottom: 14dp; background-color: #5cc8f008; }
.label { margin-bottom: 6dp; }
</style>
</head>
<body class="window small" data-model="account">
<div class="win-head">
<span class="title">MULTIPLAYER ACCOUNT</span><span class="sl">\\\</span>
</div>
<div class="win-main">
<div class="content">
<div class="explain">{{ explain }}</div>
<div class="label">Account key</div>
<input class="text" type="text" data-value="key" maxlength="40"/>
<div class="actions" style="margin-top: 14dp;">
<div class="btn primary" data-class-disabled="key == ''" data-action="go">Continue<div class="tip">Checks the key and goes on to the server list.</div></div>
</div>
</div>
</div>
<div class="win-foot">
<div class="btn" data-action="back">Back</div>
</div>
</body>
</rml>
-77
View File
@@ -1,77 +0,0 @@
<rml>
<head>
<title>Admin</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.split { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.side { flex: 0 0 38%; display: flex; flex-direction: column; min-height: 0; margin-right: 18dp; }
.list { flex: 1 1 0; min-height: 0; overflow-y: auto; }
.row { padding: 6dp 10dp; border-bottom: 1dp #ffffff08; border-left: 2dp #00000000; font-family: "IBM Plex Mono"; font-size: 14dp; }
.row:hover { background-color: #122033; }
.row.selected { background-color: #f2b13c24; border-left-color: #f2b13c; }
.detail { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.help { padding: 12dp 14dp; line-height: 1.5; margin-bottom: 14dp; background-color: #5cc8f008; }
.cmd { font-family: "IBM Plex Mono"; font-size: 18dp; color: #f2b13c; margin-bottom: 8dp; }
.runline { display: flex; flex-direction: row; align-items: center; }
.runline input { flex: 1; margin-right: 10dp; }
.search { margin-bottom: 8dp; }
.recent { margin-top: 14dp; }
.recent .row { font-size: 13dp; color: #8197ad; }
.slots { display: flex; flex-direction: row; flex-wrap: wrap; margin-bottom: 8dp; }
.slot { padding: 5dp 10dp; margin: 0 6dp 6dp 0; border-bottom: 2dp #ffffff14; font-family: "IBM Plex Mono"; font-size: 14dp; }
.slot:hover { background-color: #122033; }
.slot.active { background-color: #f2b13c24; border-bottom-color: #f2b13c; }
.slot .k { color: #8197ad; margin-right: 6dp; }
.slot .v { color: #dbe6f0; }
.options { flex: 1 1 0; min-height: 0; overflow-y: auto; margin-top: 8dp; }
.options .row { font-size: 13dp; }
.options .row .n { color: #8197ad; margin-left: 8dp; }
</style>
</head>
<body class="window medium" data-model="admin">
<div class="win-head">
<img class="head-ico" src="3db:INTERFACE/NEURONET/ICONS/rem_player.3db"/>
<span class="title">ADMIN</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">{{ commands.size }} commands</span>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="content">
<div class="split">
<div class="side">
<input class="text search" type="text" data-value="filter" maxlength="40"/>
<div class="list">
<div class="hint" style="padding: 10dp;" data-if="commands.size == 0">{{ received ? 'No command matches.' : 'Asking the server...' }}</div>
<div class="row" data-for="c : commands" data-class-selected="c.selected" data-action="pick" data-attr-data-arg="c.name">{{ c.name }}</div>
</div>
</div>
<div class="detail">
<div class="help">
<div class="cmd">{{ has_pick ? pick_name : 'Pick a command' }}</div>
<div>{{ has_pick ? pick_help : 'Every admin command of the server, run from here - its answer comes in the chat.' }}</div>
</div>
<div class="label">Arguments</div>
<div class="slots" data-if="slots.size &gt; 0">
<div class="slot" data-for="s, i : slots" data-class-active="s.active" data-action="slot" data-attr-data-arg="i"><span class="k">{{ s.label }}</span><span class="v">{{ s.value }}</span></div>
</div>
<div class="runline">
<input class="text" type="text" data-value="args" maxlength="200"/>
<div class="btn primary" data-class-disabled="!has_pick" data-action="run">Run<div class="tip">Runs the command on the server as you typed it; the answer comes as a system message in the chat.</div></div>
</div>
<div class="options" data-if="options.size &gt; 0">
<div class="row" data-for="o : options" data-action="option" data-attr-data-arg="o.value">{{ o.label }}<span class="n" data-if="o.label != o.value">{{ o.value }}</span></div>
</div>
<div class="recent" data-if="recent.size &gt; 0">
<div class="label">Run here</div>
<div class="row" data-for="r : recent" data-action="again" data-attr-data-arg="r">{{ r }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="win-foot">
<span class="key">Esc</span><span class="hint">close</span>
</div>
</body>
</rml>
-1003
View File
File diff suppressed because it is too large Load Diff
-88
View File
@@ -1,88 +0,0 @@
<rml>
<head>
<title>New pilot</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.split { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.colm { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.colm.list { flex: 1; }
.colm.side { flex: 0 0 32%; margin-left: 18dp; }
.colm.fig { flex: 0 0 24%; margin-left: 18dp; }
#figure { flex: 1; decorator: vertical-gradient(#0a1424 #05080d); cursor: move; }
.fig .hint { text-align: center; margin-top: 6dp; }
.starts { flex: 1; overflow-y: auto; }
.region { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 14dp; letter-spacing: 1.5dp; text-transform: uppercase; color: #f2b13c; margin: 10dp 0 6dp 0; }
.start { display: flex; flex-direction: row; align-items: center; padding: 8dp 12dp; margin-bottom: 6dp; border-left: 3dp #3d6d96; background-color: #5cc8f010; }
.start:hover { border-left-color: #5cc8f0; }
.start.selected { background-color: #f2b13c1a; border-left-color: #f2b13c; }
.start img { width: 38dp; height: 38dp; margin-right: 12dp; }
.start .txt { flex: 1; min-width: 0; }
.start .n { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 17dp; }
.start.selected .n { color: #f2b13c; }
.start .k { font-size: 13dp; color: #8197ad; margin-top: 2dp; }
.start .m { font-family: "IBM Plex Mono"; color: #f2b13c; }
.namebox { margin-bottom: 14dp; }
.namebox .label { margin-bottom: 6dp; }
.detail { padding: 12dp; flex: 1; display: flex; flex-direction: column; min-height: 0; background-color: #5cc8f008; }
.detail .n { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 22dp; }
.detail .k { font-size: 14dp; color: #8197ad; margin-top: 2dp; }
.detail .facts { display: flex; flex-direction: row; margin: 10dp 0; }
.detail .facts div { margin-right: 24dp; }
.detail .facts .v { font-family: "IBM Plex Mono"; color: #f2b13c; font-size: 16dp; }
.detail .d { flex: 1; overflow-y: auto; white-space: pre-line; line-height: 1.45; font-size: 14dp; }
</style>
</head>
<body class="window" data-model="charcreate">
<div class="win-head">
<span class="title">NEW PILOT</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Starts <span class="v">{{ count }}</span></span>
</div>
<div class="win-main">
<div class="content">
<div class="split">
<div class="colm list">
<h3 style="margin-bottom: 4dp;">Where do you start?</h3>
<div class="hint" data-if="count == 0">The server offers no start.</div>
<div class="starts">
<div data-for="r : regions">
<div class="region">{{ r.name }}</div>
<div class="start" data-for="s : r.starts" data-class-selected="s.selected" data-action="pick" data-attr-data-arg="s.key">
<img data-if="s.icon != ''" data-attr-src="s.icon"/>
<div class="txt"><div class="n">{{ s.base }}</div><div class="k">{{ s.ship }}</div></div>
<span class="m">{{ s.money }}</span>
</div>
</div>
</div>
</div>
<div class="colm fig">
<h3 style="margin-bottom: 8dp;">Your pilot</h3>
<div id="figure"></div>
<div class="hint">drag to turn</div>
</div>
<div class="colm side">
<div class="namebox">
<div class="label">Pilot name</div>
<input class="text" type="text" data-value="name" maxlength="23" placeholder="Your name in Sirius"/>
</div>
<div class="detail" data-if="has_pick">
<div class="n">{{ pick.base }}</div>
<div class="k">{{ pick_region }}</div>
<div class="facts">
<div><div class="label">Ship</div><div class="v">{{ pick.ship }}</div></div>
<div><div class="label">Credits</div><div class="v">{{ pick.money }}</div></div>
</div>
<div class="d">{{ pick_desc }}</div>
</div>
<div class="actions" style="margin-top: 12dp;">
<div class="btn primary" data-class-disabled="name == '' || !has_pick || !ready" data-action="create">Create pilot<div class="tip">Creates the pilot at the picked start; the server may refuse a name that is taken.</div></div>
</div>
</div>
</div>
</div>
</div>
<div class="win-foot">
<div class="btn" data-action="back">Back</div>
</div>
</body>
</rml>
-84
View File
@@ -1,84 +0,0 @@
<rml>
<head>
<title>Characters</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.split { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.colm { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.colm.list { flex: 1; }
.colm.side { flex: 0 0 32%; margin-left: 18dp; }
.colm.fig { flex: 0 0 22%; margin-left: 18dp; }
#figure { flex: 1; decorator: vertical-gradient(#0a1424 #05080d); cursor: move; }
.fig .hint { text-align: center; margin-top: 6dp; }
.roster { flex: 1; overflow-y: auto; }
.pilot { display: flex; flex-direction: row; align-items: center; padding: 10dp 12dp; margin-bottom: 8dp; border-left: 3dp #3d6d96; background-color: #5cc8f010; }
.pilot:hover { border-left-color: #5cc8f0; }
.pilot.selected { background-color: #f2b13c1a; border-left-color: #f2b13c; }
.pilot img { width: 44dp; height: 44dp; margin-right: 14dp; }
.pilot .txt { flex: 1; min-width: 0; }
.pilot .n { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 19dp; }
.pilot.selected .n { color: #f2b13c; }
.pilot .k { font-size: 13dp; color: #8197ad; margin-top: 2dp; }
.pilot .r { text-align: right; }
.pilot .m { font-family: "IBM Plex Mono"; color: #f2b13c; }
.pilot .lv { font-family: "IBM Plex Mono"; font-size: 12dp; color: #5cc8f0; margin-top: 2dp; }
.detail { padding: 12dp; margin-bottom: 12dp; background-color: #5cc8f008; }
.detail .n { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 22dp; margin-bottom: 4dp; }
.detail .k { font-size: 14dp; color: #8197ad; }
.detail .s { white-space: pre-line; font-family: "IBM Plex Mono"; font-size: 13dp; line-height: 1.5; margin-top: 8dp; }
.motd { flex: 1; overflow-y: auto; white-space: pre-line; line-height: 1.45; font-size: 14dp; padding: 12dp; background-color: #5cc8f008; }
.empty-roster { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; }
</style>
</head>
<body class="window" data-model="charselect">
<div class="win-head">
<span class="title">{{ server }}</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Characters <span class="v">{{ chars.size }}</span> / <span class="v">5</span></span>
</div>
<div class="win-main">
<div class="content">
<div class="split">
<div class="colm list">
<h3 style="margin-bottom: 8dp;">Your pilots</h3>
<div class="empty-roster" data-if="chars.size == 0">
<div class="hint">No pilot on this server yet. Create one to begin.</div>
</div>
<div class="roster" data-if="chars.size &gt; 0">
<div class="pilot" data-for="c : chars" data-class-selected="c.selected" data-action="pick" data-attr-data-arg="c.key">
<img data-if="c.icon != ''" data-attr-src="c.icon"/>
<div class="txt"><div class="n">{{ c.name }}</div><div class="k">{{ c.ship }} - {{ c.place }}</div></div>
<div class="r"><div class="m">{{ c.money }}</div><div class="lv">{{ c.level }}</div></div>
</div>
</div>
<div class="actions" style="margin-top: 10dp;">
<div class="btn primary" data-class-disabled="!has_pick || !ready" data-action="load">Launch<div class="tip">Plays the picked pilot. A double click on a pilot does the same.</div></div>
<div class="btn" data-class-disabled="!can_new || !ready" data-action="new">New pilot<div class="tip">Creates a new pilot (at most five per account).</div></div>
<div class="btn" data-class-disabled="!has_pick || !ready" data-action="delete">Delete<div class="tip">Deletes the picked pilot for good (you are asked first).</div></div>
</div>
</div>
<div class="colm fig">
<h3 style="margin-bottom: 8dp;">Pilot</h3>
<div id="figure"></div>
<div class="hint">drag to turn</div>
</div>
<div class="colm side">
<div class="detail" data-if="has_pick">
<div class="n">{{ pick.name }}</div>
<div class="k">{{ pick.level }} - {{ pick.money }}</div>
<div class="k">{{ pick.ship }}, {{ pick.place }}</div>
<div class="s">{{ pick_stats }}</div>
</div>
<div class="detail" data-if="!has_pick"><div class="k">Pick a pilot.</div></div>
<h3 style="margin-bottom: 8dp;">Message of the day</h3>
<div class="motd">{{ motd }}</div>
</div>
</div>
</div>
</div>
<div class="win-foot">
<div class="btn" data-action="back">Back to servers</div>
<div class="btn" data-action="menu">Main menu</div>
</div>
</body>
</rml>
-32
View File
@@ -1,32 +0,0 @@
<rml>
<head>
<title>Chat</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
/* the running chat as FL shows it: lines at the left edge without a frame, the newest at
the bottom; the chat line below while one is typed. Its foot 420dp up (the HUD's contacts and
target panel below reaches 341dp): at 67 % of the height it ran into that panel */
body.feed { position: absolute; left: 16dp; bottom: 420dp; width: 46%; height: 40%; background-color: transparent; display: flex; flex-direction: column; justify-content: flex-end; font-family: "Saira SemiCondensed"; font-size: 19dp; color: #dbe6f0; }
.lines { pointer-events: none; overflow: hidden; line-height: 1.25; font-effect: shadow(1dp 1dp #000000d0); }
.line { margin-top: 8dp; padding: 5dp 10dp; display: flex; flex-direction: row; decorator: ninepatch(fw, fw-i); }
.line .p { white-space: nowrap; margin-right: 6dp; }
.line .t { flex: 1; white-space: pre-wrap; word-break: break-word; }
/* the chat line under the running chat: a long one wraps and grows downwards (the lines above stay) */
.line.typing { position: absolute; left: 0; right: 0; top: 100%; align-items: flex-start; }
.gear { width: 22dp; height: 22dp; margin-left: 8dp; image-color: #8fb8d8; }
.gear:hover { image-color: #f2b13c; }
.caret { color: #f2d23c; animation: 1s steps(1) infinite blink; }
@keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }
.edit-grip { display: none; position: absolute; left: 0; top: 0; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
.hud-editing .edit-grip { display: block; }
</style>
</head>
<body class="feed movable" data-model="chatfeed">
<div class="win-head edit-grip">Chat &#10021;</div>
<div class="lines" data-if="feed_shown" data-rml="feed"></div>
<div class="line typing" data-if="typing">
<span class="p" data-rml="prefix"></span><span class="t">{{ text }}<span class="caret">|</span></span>
<img class="gear" src="img/gear.png" data-action="settings"/>
</div>
</body>
</rml>
-64
View File
@@ -1,64 +0,0 @@
<rml>
<head>
<title>Chat history</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.cols { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.histcol { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.ctabs { display: flex; flex-direction: row; margin-bottom: 8dp; }
.ct { padding: 4dp 12dp; margin-right: 4dp; font-size: 13dp; color: #8197ad; border-bottom: 2dp #00000000; }
.ct:hover { color: #dbe6f0; border-bottom-color: #3d6d96; }
.ct.on { color: #f2b13c; background-color: #f2b13c1a; border-bottom-color: #f2b13c; }
.hl { padding: 1dp 4dp; border-radius: 2dp; }
.hl.mention { background-color: #f2b13c26; border-left: 2dp #f2b13c; }
.hl .tm { font-family: "IBM Plex Mono"; font-size: 12dp; color: #8197ad; margin-right: 8dp; }
#hist { flex: 1; overflow-y: auto; padding: 12dp; font-size: 16dp; line-height: 1.35; background-color: #5cc8f008; }
.gear { width: 22dp; height: 22dp; margin: 0 10dp; image-color: #8fb8d8; }
.gear:hover { image-color: #f2b13c; }
.targets { width: 260dp; margin-left: 14dp; display: flex; flex-direction: column; min-height: 0; }
.tl { flex: 1; overflow-y: auto; background-color: #5cc8f008; }
.tg { padding: 6dp 10dp; border-bottom: 1dp #ffffff08; border-left: 2dp #00000000; white-space: nowrap; overflow: hidden; }
.tg:hover { background-color: #122033; }
.tg.cur { border-left-color: #f2b13c; background-color: #f2b13c1a; }
.tg.ch { font-family: "Saira SemiCondensed"; font-weight: 600; letter-spacing: 0.6dp; }
.tg .tn, .tg .loc { pointer-events: none; overflow: hidden; } /* the row takes the click, not its lines */
/* a player's system under the name */
.tg .loc { margin-top: 1dp; font-size: 12dp; color: #8197ad; }
</style>
</head>
<body class="window medium" data-model="chathistory">
<div class="win-head">
<img class="head-ico" src="3db:INTERFACE/NEURONET/ICONS/NN_Chat.3db"/>
<span class="title">CHAT</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Targets <span class="v">{{ count }}</span></span>
<img class="gear" src="img/gear.png" data-action="settings"/>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="content" style="display: flex; flex-direction: column;">
<div class="cols">
<div class="histcol">
<div class="ctabs">
<div class="ct" data-for="t : tabs" data-class-on="t.on" data-action="tab" data-attr-data-arg="t.key">{{ t.label }}</div>
</div>
<div id="hist">
<div class="hint" data-if="lines.size == 0">No messages yet.</div>
<div class="hl" data-for="l : lines" data-class-mention="l.mention"><span class="tm" data-if="stamps">{{ l.time }}</span><span data-rml="l.rml"></span></div>
</div>
</div>
<div class="targets">
<h3>Write to</h3>
<div class="tl">
<div class="tg" data-for="t : targets" data-class-cur="t.current" data-class-ch="t.channel" data-action="target" data-ctx="target" data-attr-data-arg="t.key">
<div class="tn" data-rml="t.name"></div>
<div class="loc" data-if="t.location != ''">{{ t.location }}</div>
</div>
</div>
</div>
</div>
<div class="hint" style="margin-top: 10dp;">Pick whom to write to, then press Enter in flight or on a base to type.</div>
</div>
</div>
</body>
</rml>
-60
View File
@@ -1,60 +0,0 @@
<rml>
<head>
<title>Chat settings</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
body.window.chatset { left: 50%; margin-left: -330dp; top: 12%; width: 660dp; height: 640dp; }
.sec { margin-bottom: 16dp; }
.tgl { display: flex; flex-direction: row; align-items: center; padding: 10dp 12dp; background-color: #5cc8f008; }
.tgl:hover { background-color: #122033; }
.tgl .box { width: 18dp; height: 18dp; border: 2dp #3d6d96; border-radius: 3dp; margin-right: 12dp; }
.tgl .box.on { border-color: #f2b13c; background-color: #f2b13c; }
.tgl .l { flex: 1; font-size: 16dp; }
.info { margin-top: 6dp; font-size: 13dp; color: #8197ad; }
.row { display: flex; flex-direction: row; align-items: center; padding: 7dp 0; border-bottom: 1dp #ffffff08; }
.row .l { width: 130dp; font-size: 15dp; }
.row .sample { width: 170dp; font-family: "Saira SemiCondensed"; font-size: 16dp; white-space: nowrap; overflow: hidden; }
.sw { width: 22dp; height: 22dp; margin-right: 6dp; border: 2dp #00000000; border-radius: 4dp; }
.sw .c { width: 100%; height: 100%; border-radius: 2dp; }
.sw:hover { border-color: #5cc8f0; }
.sw.on { border-color: #f2b13c; }
.sw.fl { margin-right: 12dp; }
.foot2 { display: flex; flex-direction: row; align-items: center; margin-top: 16dp; }
.foot2 .hint { flex: 1; }
.foot2 .btn { margin: 0 0 0 8dp; }
</style>
</head>
<body class="window chatset" data-model="chatsettings">
<div class="win-head">
<img class="head-ico" src="img/gear.png"/>
<span class="title">CHAT SETTINGS</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="close" data-action="cancel">&#215;</span>
</div>
<div class="win-main">
<div class="content">
<div class="sec">
<h3>Players</h3>
<div class="tgl" data-action="npc"><div class="box" data-class-on="hide_npc"></div><span class="l">Hide NPC pilots</span></div>
<div class="info">Hides the server's NPC pilots ([NPC] names) from the chat, the player list of the chat window, the chat targets and the contact list.</div>
<div class="tgl" style="margin-top: 8dp;" data-action="stamps"><div class="box" data-class-on="stamps"></div><span class="l">Show times in the chat history</span></div>
</div>
<div class="sec">
<h3>Colours</h3>
<div class="row" data-for="r : rows">
<span class="l">{{ r.label }}</span>
<span class="sample" data-style-color="r.colour">Pilot: Hello Sirius!</span>
<div class="sw" data-for="w : r.swatches" data-class-on="w.on" data-class-fl="w.key == 0" data-action="pick" data-attr-data-arg="w.arg"><div class="c" data-style-background-color="w.colour"></div></div>
</div>
<div class="info">The first colour of a row is FL's own. Server messages (new players, server notices) run as Admin / Server.</div>
</div>
<div class="foot2">
<span class="hint">{{ dirty ? 'Unsaved changes' : '' }}</span>
<div class="btn" data-action="reset">FL colours</div>
<div class="btn" data-action="cancel">Cancel</div>
<div class="btn primary" data-action="save">Save settings</div>
</div>
</div>
</div>
</body>
</rml>
-58
View File
@@ -1,58 +0,0 @@
<rml>
<head>
<title>Contracts</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.split { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.colm { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.colm.gap { margin-right: 18dp; }
.colm.side { flex: 0 0 360dp; }
.banner { height: 120dp; margin-bottom: 14dp; decorator: image(3db:INTERFACE/REM/IMAGES/contracts_banner.3db cover); }
.target { display: flex; flex-direction: row; align-items: center; margin-bottom: 14dp; }
.target img { width: 34dp; height: 34dp; margin-right: 12dp; }
.target.off img { opacity: 0.3; }
.namefield { display: flex; flex-direction: row; align-items: center; margin-bottom: 10dp; }
.namefield .label { margin-right: 10dp; }
.namefield input.text { flex: 1; }
.row .c1 img { width: 16dp; height: 16dp; margin-right: 8dp; }
</style>
</head>
<body class="window medium" data-model="contracts">
<div class="win-head">
<img class="head-ico" src="3db:INTERFACE/NEURONET/ICONS/rem_contracts.3db"/>
<span class="title">CONTRACT NETWORK</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Bounties <span class="v">{{ bounties.size }}</span></span>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="content">
<div class="banner"></div>
<div class="split">
<div class="colm gap">
<div class="col-h" style="display: flex; flex-direction: row; margin-bottom: 8dp;"><h3>Bounty contracts</h3></div>
<div class="table" style="flex: 1;">
<div class="head"><span class="c1">Pilot</span><span class="c4">Reward</span></div>
<div class="body">
<div class="empty" data-if="bounties.size == 0">{{ has_list ? 'No bounties open.' : 'Waiting for the server...' }}</div>
<div class="row" data-for="r : bounties"><span class="c1"><img src="3db:INTERFACE/REM/IMAGES/icon_bounty.3db"/>{{ r.a }}</span><span class="c4">{{ r.b }}</span></div>
</div>
</div>
<div class="actions" style="margin-top: 10dp;"><div class="btn" data-action="refresh">Refresh list</div></div>
</div>
<div class="colm side">
<h3 style="margin-bottom: 10dp;">Place a bounty</h3>
<div class="target" data-class-off="target != 1"><img src="3db:INTERFACE/REM/IMAGES/icon_skull.3db"/><span>{{ target_text }}</span></div>
<div class="namefield"><span class="label">Credits</span><input class="text" type="text" data-value="credits" maxlength="13"/></div>
<div class="actions"><div class="btn primary" data-action="place">On my target<div class="tip">Puts a bounty of these credits on the player you have targeted. Paid from your credits.</div></div></div>
<div class="hint">Whoever destroys the pilot gets the reward.</div>
</div>
</div>
</div>
</div>
<div class="win-foot">
<span class="key">Esc</span><span class="hint">close</span>
<span class="status">{{ status }}</span>
</div>
</body>
</rml>
-22
View File
@@ -1,22 +0,0 @@
<rml>
<head>
<title>Menu</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
/* the whole screen: a click beside the menu closes it */
body.ctx { position: absolute; left: 0; top: 0; right: 0; bottom: 0; background-color: transparent; }
.menu { position: absolute; width: 220dp; padding: 4dp; decorator: ninepatch(fw, fw-i); }
.menu .t { font-size: 12dp; color: #f2b13c; padding: 4dp 8dp 6dp 8dp; white-space: nowrap; overflow: hidden; border-bottom: 1dp #24405c; margin-bottom: 3dp; }
.menu .r { padding: 6dp 10dp; font-size: 15dp; border-radius: 3dp; }
.menu .r:hover { background-color: #122033; color: #5cc8f0; }
.menu .r.disabled { color: #5d6e80; }
.menu .r.disabled:hover { background-color: transparent; color: #5d6e80; }
</style>
</head>
<body class="ctx" data-model="ctxmenu" data-action="dismiss">
<div class="menu" data-style-left="left" data-style-top="top">
<div class="t" data-if="title != ''">{{ title }}</div>
<div class="r" data-for="r : rows" data-class-disabled="r.disabled" data-action="pick" data-attr-data-arg="r.key">{{ r.label }}</div>
</div>
</body>
</rml>
-42
View File
@@ -1,42 +0,0 @@
<rml>
<head>
<title>Message</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
body.box
{
position: absolute;
left: 50%;
top: 50%;
width: 520dp;
margin-left: -260dp;
margin-top: -140dp;
display: block;
decorator: ninepatch(fw, fw-i);
}
/* the windows' head (rem.rcss .win-head): clear of the cut corner, the title with its three slashes */
.box-head { display: flex; flex-direction: row; align-items: center; padding: 12dp 18dp 12dp 28dp; border-bottom: 1dp #2b6f9e; }
.box-head .title { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 20dp; letter-spacing: 2dp; text-transform: uppercase; color: #e8f4ff; }
.box-head .sl { flex: 1; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 20dp; letter-spacing: -1dp; color: #5cc8f0; margin-left: 10dp; }
.box-body { padding: 16dp 18dp 16dp 28dp; }
.box-body .text { white-space: pre-line; line-height: 1.5; font-size: 15dp; max-height: 320dp; overflow-y: auto; }
.box-body input.text { margin-top: 12dp; }
.box-foot { display: flex; flex-direction: row; justify-content: flex-end; padding: 0 18dp 14dp 18dp; }
.box-foot .btn { margin: 0 0 0 8dp; min-width: 90dp; text-align: center; }
</style>
</head>
<body class="box" data-model="dialog">
<div class="box-head">
<span class="title">{{ title }}</span><span class="sl">\\\</span>
<span class="close" data-action="button" data-arg="-1">&#215;</span>
</div>
<div class="box-body">
<div class="text">{{ text }}</div>
<input class="text" type="text" data-if="has_edit &amp;&amp; !secret" data-value="edit" maxlength="64"/>
<input class="text" type="password" data-if="has_edit &amp;&amp; secret" data-value="edit" maxlength="64"/>
</div>
<div class="box-foot">
<div class="btn" data-for="b, i : buttons" data-class-primary="i == 0" data-action="button" data-attr-data-arg="i">{{ b }}</div>
</div>
</body>
</rml>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-93
View File
@@ -1,93 +0,0 @@
Copyright 2017 The Barlow Project Authors (https://github.com/jpt/barlow)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
-93
View File
@@ -1,93 +0,0 @@
Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -1,93 +0,0 @@
Copyright 2016 The Saira Project Authors (omnibus.type@gmail.com), with reserved font name "Saira".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-19
View File
@@ -1,19 +0,0 @@
<rml>
<head>
<title>FPS</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
/* the FPS display (rem_ui_fps.cpp): a small plate under the REM bar; no click target but its grip in the editor */
body.fps { position: absolute; left: 16dp; top: 64dp; width: 160dp; height: 30dp; background-color: transparent; pointer-events: none; }
.plate { display: flex; flex-direction: row; align-items: center; height: 30dp; padding: 0 10dp; decorator: ninepatch(fw, fw-i); font-family: "IBM Plex Mono"; font-size: 14dp; color: #dbe6f0; }
.plate .v { color: #f2b13c; }
.plate .k { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 11dp; letter-spacing: 1.5dp; color: #8197ad; margin: 0 10dp 0 5dp; }
.edit-grip { display: none; position: absolute; left: 0; top: -26dp; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
.hud-editing .edit-grip { display: block; }
</style>
</head>
<body class="fps movable" data-model="fps">
<div class="win-head edit-grip">FPS &#10021;</div>
<div class="plate"><span class="v">{{ fps }}</span><span class="k">FPS</span><span>{{ ms }} ms</span></div>
</body>
</rml>
-46
View File
@@ -1,46 +0,0 @@
<rml>
<head>
<title>Group</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.members { margin-bottom: 14dp; }
.member { display: flex; flex-direction: row; align-items: center; padding: 8dp 12dp; margin-bottom: 6dp; font-size: 15dp; border-left: 3dp #5cc8f0; background-color: #5cc8f010; }
.request { padding: 12dp; margin-bottom: 10dp; border-left: 3dp #f2b13c; background-color: #5cc8f008; }
.request .t { white-space: pre-line; line-height: 1.5; font-size: 15dp; }
.request .w { font-size: 12dp; color: #8197ad; margin-top: 6dp; }
</style>
</head>
<body class="window small" data-model="group">
<div class="win-head">
<span class="title">GROUP</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Members <span class="v">{{ members.size }}</span></span>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="content">
<h3 style="margin-bottom: 8dp;">Requests</h3>
<div class="hint" data-if="!has_request" style="margin-bottom: 14dp;">No invitation or trade request is waiting.</div>
<div class="request" data-if="has_request">
<div class="t">{{ request }}</div>
<div class="w" data-if="waiting != ''">{{ waiting }}</div>
<div class="actions" style="margin-top: 10dp;">
<div class="btn primary" data-action="accept">{{ is_trade ? 'Accept trade' : 'Join group' }}</div>
<div class="btn" data-action="decline">Decline</div>
</div>
</div>
<h3 style="margin-bottom: 8dp;">Your group</h3>
<div class="hint" data-if="members.size == 0">You are not in a group. Invite a pilot from the chat (/invite name).</div>
<div class="members">
<div class="member" data-for="m : members">{{ m }}</div>
</div>
<div class="actions" data-if="can_leave">
<div class="btn" data-action="leave">Leave group</div>
</div>
</div>
</div>
<div class="win-foot">
<span class="key">Esc</span><span class="hint">close</span>
</div>
</body>
</rml>
-25
View File
@@ -1,25 +0,0 @@
<rml>
<head>
<title>Information</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.card { flex: 1; overflow-y: auto; white-space: pre-line; line-height: 1.5; font-size: 15dp; padding: 14dp 16dp; background-color: #5cc8f008; }
</style>
</head>
<body class="window small" data-model="help">
<div class="win-head">
<img class="head-ico" src="3db:INTERFACE/NEURONET/ICONS/rem_missions.3db"/>
<span class="title">{{ title }}</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="content">
<div class="card">{{ text }}</div>
</div>
</div>
<div class="win-foot">
<span class="key">Esc</span><span class="hint">close</span>
</div>
</body>
</rml>
-330
View File
@@ -1,330 +0,0 @@
<rml>
<head>
<title>HUD</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
/* the flight HUD in the shape of FL's own (bottom left / centre / right, the maneuver bar):
panels with cut corners (the hudframes sprites, rem.rcss), FL's icons,
labelled bars, drawn by RmlUi */
body.hud { position: absolute; left: 0; top: 0; right: 0; bottom: 0; background-color: transparent; pointer-events: none; font-family: "Saira SemiCondensed"; font-size: 15dp; color: #dbe6f0; }
.fp { position: absolute; box-sizing: border-box; decorator: ninepatch(fa, fa-i); }
.fp.all { decorator: ninepatch(fb, fb-i); }
.fp.small { decorator: ninepatch(fs, fs-i); }
.ico { width: 40dp; height: 40dp; margin: 0 3dp; }
.ib { display: inline-block; padding: 1dp; border-radius: 4dp; }
.ib:hover { background-color: #f2b13c14; }
.ib:hover .ico, .ib.on .ico { image-color: #f2b13c; }
.ib.on { background-color: #f2b13c1f; }
.ib.off { opacity: 0.35; }
/* a panel's title: caps, spaced, three slashes after it */
.ttl { font-weight: 600; font-size: 16dp; letter-spacing: 2dp; color: #e8f4ff; white-space: nowrap; }
.ttl .sl { margin-left: 10dp; color: #5cc8f0; letter-spacing: -1dp; }
.sp { flex: 1; }
/* --- the maneuver bar, top centre: icon over its name, the active one amber ----------- */
.mans { left: 50%; margin-left: -300dp; top: 8dp; width: 600dp; height: 76dp; padding: 0 18dp; display: flex; flex-direction: row; justify-content: center; align-items: center; }
.mans .ib { flex: 1; display: flex; flex-direction: column; align-items: center; height: 62dp; padding: 6dp 4dp 0 4dp; border-left: 1dp #2b6f9e; border-radius: 0; }
.mans .ib:first-child { border-left-width: 0; }
.mans .ib.on { border-left-width: 0; }
.mans .ico { width: 34dp; height: 34dp; margin: 0; }
.mans .lb { margin-top: 2dp; font-weight: 600; font-size: 12dp; letter-spacing: 1dp; color: #b9d4ea; white-space: nowrap; text-transform: uppercase; }
.mans .ib.on .lb { color: #f2b13c; }
/* a tab hanging from the bar (fts: no top edge, its sides start on the bar's bottom edge), clear of its cut */
.cruise { left: 50%; margin-left: -286dp; top: 84dp; width: 64dp; height: 52dp; display: flex; justify-content: center; align-items: center; }
.fp.cruise { decorator: ninepatch(fts, fts-i); }
.cruise .ico { width: 40dp; height: 40dp; }
/* --- bottom centre: the ship in its shield ring (the hull the red ring inside); power and thrust as a
wing on the left, the speed as one on the right -- arcs of a large circle under the panel rising to the
ring; the rings and wings are lit segments, each turned about its circle's centre (seg16 / seg32) */
.fp.core { left: 50%; margin-left: -310dp; bottom: 8dp; width: 620dp; height: 170dp; decorator: none; font-effect: shadow(1dp 1dp #000000cc); }
.core .disc { position: absolute; left: 242dp; top: 24dp; width: 134dp; height: 134dp; border: 1dp #2b6f9e; border-radius: 68dp; }
.core .ship { display: block; position: absolute; left: 280dp; top: 58dp; width: 60dp; height: 56dp; }
.core .pc { position: absolute; left: 242dp; top: 114dp; width: 136dp; text-align: center; font-weight: 600; font-size: 11dp; letter-spacing: 1dp; }
.core .pc .s { color: #4fc6ee; margin-right: 8dp; }
.core .pc .h { color: #e0484e; }
/* the segments as soft-edged geometry (<segarc>: centre, radius and size in dp from the panel's corner) */
.core segarc { display: block; position: absolute; left: 0; top: 0; width: 1dp; height: 1dp; }
.core .side { position: absolute; top: 106dp; width: 180dp; }
.core .side.l { left: 50dp; text-align: right; }
.core .side.r { left: 390dp; text-align: left; }
.core .cap { font-weight: 600; font-size: 10dp; letter-spacing: 1.5dp; color: #8fb3d0; margin: 0 6dp; }
.core .big { font-weight: 600; font-size: 26dp; color: #e8f4ff; }
.core .big.low { color: #ef6a5b; }
.core .big .u { font-weight: 400; font-size: 12dp; color: #8fb3d0; margin-left: 4dp; }
.core .pw { display: block; font-weight: 600; font-size: 13dp; color: #f0943c; }
.core .pw .cap { color: #f0943c; }
/* the other ship status (REM settings: Ship status "bars"): thrust | shield / hull / power | speed, one panel */
.fp.coreb { left: 50%; margin-left: -240dp; bottom: 8dp; width: 480dp; height: 66dp; padding: 0 16dp; display: flex; flex-direction: row; align-items: center; }
.coreb .val { width: 76dp; text-align: center; font-weight: 600; font-size: 22dp; color: #e8f4ff; }
.coreb .val .u { font-weight: 400; font-size: 11dp; color: #8fb3d0; margin-left: 4dp; }
.coreb .cap { display: block; font-weight: 600; font-size: 9dp; letter-spacing: 1.5dp; color: #8fb3d0; }
.coreb .thrust.low { color: #ef6a5b; }
.coreb .sep { width: 1dp; height: 42dp; background-color: #2b6f9e; margin: 0 10dp; }
.bars { flex: 1; display: flex; flex-direction: column; justify-content: center; }
.brow { display: flex; flex-direction: row; align-items: center; height: 15dp; }
.brow .l { width: 52dp; font-weight: 600; font-size: 10dp; letter-spacing: 1.5dp; color: #b9d4ea; }
.bar { position: relative; flex: 1; height: 8dp; }
.chips { position: absolute; left: 0; top: 0; right: 0; height: 8dp; display: flex; flex-direction: row; }
.sg { flex: 1; height: 8dp; margin-right: 2dp; }
.sg:last-child { margin-right: 0; }
/* each segment lit by the value (no clipped fill row: the HUD's scaled parts are not clipped) */
.power .sg { background-color: #f0943c26; }
.power .sg.lit { background-color: #f0943c; }
.shield .sg { background-color: #4fc6ee26; }
.shield .sg.lit { background-color: #4fc6ee; }
.hull .sg { background-color: #e0484e26; }
.hull .sg.lit { background-color: #e0484e; }
/* --- bottom left: target / contacts --------------------------------------------------- */
/* the head a tab on the body: its sides run on into the body's (fht / fbl, rem.rcss) */
.lhead { left: 8dp; bottom: 342dp; width: 310dp; height: 42dp; decorator: ninepatch(fht, fht-i); display: flex; flex-direction: row; align-items: center; padding: 0 8dp 0 22dp; }
.lhead .ico { width: 30dp; height: 30dp; }
/* as high as the weapons panel (symmetric): FL's eight contact rows a little taller */
.lbody { left: 8dp; bottom: 8dp; width: 367dp; height: 334dp; decorator: ninepatch(fbl, fbl-i); padding: 12dp 16dp; }
.filters { display: flex; flex-direction: row; justify-content: center; margin-bottom: 6dp; padding-bottom: 6dp; border-bottom: 1dp #2b6f9e; }
.filters .ico { width: 32dp; height: 32dp; margin: 0 4dp; }
.rows { height: 246dp; margin-right: 22dp; }
.c { display: flex; flex-direction: row; align-items: center; height: 30dp; padding: 0 2dp; border-bottom: 1dp #24405c66; }
.c:hover { background-color: #3a8fc822; }
.c img { width: 20dp; height: 20dp; margin-right: 8dp; }
.c .n { flex: 1; white-space: nowrap; overflow: hidden; font-weight: 500; font-size: 16dp; letter-spacing: 1dp; text-transform: uppercase; }
.c .r { width: 64dp; text-align: right; margin-left: 8dp; font-size: 16dp; }
/* a scroll bar at the right of the rows: the arrows and a click on the track above / below
the middle step a row (the classic list's own scroll); the thumb's place and size come from
the list (thumb_top / thumb_size), dragged it scrolls the list (rem_ui_hud.cpp) */
.sbar { position: absolute; right: 6dp; top: 66dp; bottom: 12dp; width: 20dp; display: flex; flex-direction: column; align-items: center; }
.sbar .ar { width: 20dp; height: 20dp; line-height: 20dp; text-align: center; font-size: 11dp; color: #5cc8f0; }
.sbar .ar:hover { color: #f2b13c; background-color: #f2b13c1f; }
.sbar .ar.off { color: #2b6f9e; }
.sbar .ar.off:hover { color: #2b6f9e; background-color: transparent; }
.sbar .track { position: relative; flex: 1; width: 20dp; margin: 2dp 0; }
.sbar .rail { position: absolute; left: 8dp; top: 0; bottom: 0; width: 4dp; background-color: #24405c; }
.sbar .thumb { position: absolute; left: 7dp; width: 6dp; background-color: #5cc8f0; drag: drag; }
.sbar .zu, .sbar .zd { position: absolute; left: 0; right: 0; height: 50%; }
.sbar .zu { top: 0; }
.sbar .zd { top: 50%; }
.sbar .track:hover .thumb { background-color: #f2b13c; }
.tname { font-weight: 600; font-size: 22dp; letter-spacing: 1dp; color: #e8f1fa; text-transform: uppercase; }
.tsub { font-size: 15dp; letter-spacing: 1dp; color: #8fb3d0; margin-bottom: 10dp; }
.tbar { display: flex; flex-direction: row; align-items: center; height: 20dp; margin: 3dp 0; }
.tbar .l { width: 74dp; font-weight: 600; font-size: 13dp; letter-spacing: 2dp; color: #b9d4ea; }
.tbtns { display: flex; flex-direction: row; flex-wrap: wrap; margin-top: 10dp; }
.tbtns .ico { width: 40dp; height: 40dp; }
/* --- bottom right: status ------------------------------------------------------------- */
.rhead { right: 8dp; bottom: 342dp; width: 310dp; height: 42dp; decorator: ninepatch(fht, fht-i); display: flex; flex-direction: row; align-items: center; padding: 0 12dp 0 22dp; }
.rhead .ico { width: 26dp; height: 26dp; margin: 0 4dp 0 10dp; }
.rhead .cnt { font-weight: 600; font-size: 18dp; }
/* 10 weapons fit (a ship may carry more: the list scrolls; it drew the 9th and on outside the frame) */
.rbody { right: 8dp; bottom: 8dp; width: 367dp; height: 334dp; decorator: ninepatch(fbrt, fbrt-i); padding: 12dp 16dp; }
.rbody .wl { height: 100%; overflow-y: auto; }
.w { display: flex; flex-direction: row; align-items: center; height: 28dp; padding: 0 6dp 0 8dp; border-left: 3dp #00000000; border-bottom: 1dp #24405c66; font-weight: 500; font-size: 16dp; letter-spacing: 1dp; color: #8197ad; text-transform: uppercase; }
.w:hover { background-color: #3a8fc822; }
.w.on { color: #e8f4ff; border-left-color: #5cc8f0; background-color: #5cc8f014; }
.w .k { width: 30dp; font-size: 14dp; color: #5cc8f0; }
.w .n { flex: 1; white-space: nowrap; overflow: hidden; }
.w .a { margin-left: 8dp; color: #b9d4ea; }
.w.cloak { margin-top: 4dp; color: #8fb8d8; }
.w.cloak.on { color: #b98cf2; border-left-color: #b98cf2; }
.special { color: #f2d23c; font-size: 16dp; letter-spacing: 1dp; margin-top: 8dp; }
/* --- the cruise engine's countdown / charge (HUD_CruiseProgress). With the ring: an arc of 16 segments (-55 to +55 degrees) around
the top of the ring that fills from left to right, a glow riding its tip, caption and number above it;
the countdown shows the arc empty and the seconds pulsing; a full charge flashes the arc. With the bars:
a band of chevrons with a light running along it. It moves and sizes with the ship status but shows when
that is hidden (its own layer, the ship status' transform) */
.fp.cruisearc { left: 50%; margin-left: -310dp; bottom: 8dp; width: 620dp; height: 170dp; decorator: none; font-effect: shadow(1dp 1dp #000000cc); }
.grp .fp.cruisearc, .grp .fp.cruiseband { pointer-events: none; }
.cruisearc segarc { display: block; position: absolute; left: 0; top: 0; width: 1dp; height: 1dp; }
.cruisearc .glow { position: absolute; width: 44dp; height: 44dp; decorator: radial-gradient(circle, #ffe2a0e6 0%, #f2b13c80 30%, #f2b13c00 70%); animation: 0.9s sine-in-out infinite cr-glow; }
@keyframes cr-glow { 0% { opacity: 0.65; } 50% { opacity: 1; } 100% { opacity: 0.65; } }
.cruisearc .head { position: absolute; left: 160dp; width: 300dp; top: -58dp; text-align: center; }
.cruisearc .cv { display: block; font-family: "IBM Plex Mono"; font-size: 26dp; line-height: 30dp; color: #e8f4ff; }
.cruisearc .cc { display: block; margin-top: 2dp; font-weight: 600; font-size: 11dp; letter-spacing: 2.5dp; color: #f2b13c; text-transform: uppercase; white-space: nowrap; }
.cruisearc.count .cv { color: #f2b13c; font-size: 32dp; animation: 1s sine-in-out infinite cr-beat; }
@keyframes cr-beat { 0% { opacity: 1; } 50% { opacity: 0.35; } 100% { opacity: 1; } }
.cruisearc.count .glow { display: none; }
.cruisearc.done { animation: 0.35s sine-in-out 2 cr-flash; }
.cruisearc.done .cv, .cruisearc.done .cc { color: #5cc8f0; }
@keyframes cr-flash { 0% { opacity: 1; } 50% { opacity: 0.25; } 100% { opacity: 1; } }
.fp.cruiseband { left: 50%; margin-left: -200dp; bottom: 86dp; width: 400dp; height: 62dp; decorator: none; font-effect: shadow(1dp 1dp #000000cc); }
.cruiseband .cc { position: absolute; left: 0; right: 0; top: 0; text-align: center; font-weight: 600; font-size: 11dp; letter-spacing: 2.5dp; color: #f2b13c; text-transform: uppercase; white-space: nowrap; }
.cruiseband .row { position: absolute; left: 20dp; right: 90dp; top: 22dp; height: 18dp; display: flex; flex-direction: row; overflow: hidden; }
.cruiseband .ch { flex: 1; height: 18dp; margin-right: 5dp; transform: skewX(-30deg); background-color: #f2b13c2a; }
.cruiseband .ch.lit { background-color: #f2b13c; }
.cruiseband .run { position: absolute; top: 0; width: 22%; height: 18dp; left: -22%; decorator: horizontal-gradient(#dcf6ff00 #dcf6ffcc); animation: 1.1s linear infinite cr-run; }
@keyframes cr-run { 0% { left: -22%; } 100% { left: 100%; } }
.cruiseband .cv { position: absolute; right: 0; top: 14dp; width: 80dp; text-align: right; font-family: "IBM Plex Mono"; font-size: 24dp; color: #e8f4ff; }
.cruiseband.count .cv { color: #f2b13c; animation: 1s sine-in-out infinite cr-beat; }
.cruiseband.count .run { display: none; }
.cruiseband.done { animation: 0.35s sine-in-out 2 cr-flash; }
/* the HUD editor: four layers over the whole screen, each moved / sized as one */
.grp { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; }
.grp .fp, .grp .tag { pointer-events: auto; }
.g0 { transform-origin: 50% 0%; }
.g1 { transform-origin: 50% 100%; }
.g2 { transform-origin: 0% 100%; }
.g3 { transform-origin: 100% 100%; }
.grp.gone { display: none; }
.grp.faded { opacity: 0.35; }
.editing .fp { decorator: ninepatch(fed, fed-i); drag: drag; cursor: move; }
.editing .tag { drag: drag; cursor: move; }
.editing .fp * { pointer-events: none; }
.tag { position: absolute; padding: 3dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 14dp; border-radius: 3dp; white-space: nowrap; }
.tag .eye { margin-right: 8dp; padding: 0 6dp; background-color: #05080d; color: #f2b13c; border-radius: 2dp; }
.tag .eye:hover { color: #ffffff; }
.edbar { position: absolute; left: 50%; margin-left: -300dp; top: 190dp; width: 600dp; padding: 14dp 18dp; background-color: #070b12f2; border: 2dp #f2b13c; border-radius: 6dp; text-align: center; pointer-events: auto; }
.edbar .et { font-family: "Saira SemiCondensed"; font-weight: 700; font-size: 20dp; letter-spacing: 2dp; color: #f2b13c; }
.edbar .eh { margin: 6dp 0 12dp 0; font-size: 14dp; color: #b9cbe0; }
.edbar .eb { display: flex; flex-direction: row; justify-content: center; }
.edbar .btn { margin: 0 4dp; }
</style>
</head>
<body class="hud" data-model="hud" data-class-editing="editing" data-style-opacity="opacity">
<!-- maneuvers -->
<div class="grp g0" data-grp="0" data-style-transform="grp[0].tf" data-class-gone="!grp[0].shown && !editing" data-class-faded="!grp[0].shown && editing">
<div class="tag" data-if="editing" style="left: 50%; margin-left: 310dp; top: 40dp;"><span class="eye" data-action="eye" data-arg="0">{{ grp[0].shown ? 'Hide' : 'Show' }}</span>Maneuvers</div>
<div class="fp all mans" data-if="maneuvers_shown || editing">
<div class="ib" data-for="m : maneuvers" data-class-on="m.active" data-class-off="m.disabled" data-action="maneuver" data-attr-data-arg="m.key"><img class="ico" data-attr-src="m.icon"/><span class="lb">{{ m.label }}</span></div>
</div>
<div class="fp small cruise" data-if="(maneuvers_shown && has_cruise) || editing" data-action="maneuver" data-arg="4">
<div class="ib" data-class-on="cruise_on"><img class="ico" src="3db:interface/HUD/hud_mnvrwarp.3db"/></div>
</div>
</div>
<!-- bottom centre -->
<div class="grp g1" data-grp="1" data-style-transform="grp[1].tf" data-class-gone="!grp[1].shown && !editing" data-class-faded="!grp[1].shown && editing">
<div class="tag" data-if="editing &amp;&amp; core_ring" style="left: 50%; margin-left: -310dp; bottom: 184dp;"><span class="eye" data-action="eye" data-arg="1">{{ grp[1].shown ? 'Hide' : 'Show' }}</span>Ship status</div>
<div class="tag" data-if="editing &amp;&amp; !core_ring" style="left: 50%; margin-left: -240dp; bottom: 82dp;"><span class="eye" data-action="eye" data-arg="1">{{ grp[1].shown ? 'Hide' : 'Show' }}</span>Ship status</div>
<div data-if="(core || editing) &amp;&amp; core_ring">
<div class="fp all core">
<div class="disc"></div>
<shipwire class="ship"/>
<segarc cx="310" cy="92" r="60" w="10.5" h="7" n="32" a0="5.6" da="11.25" data-attr-lit="shield_n * 2" on="#4fc6ee" off="#4fc6ee26"/>
<segarc cx="310" cy="92" r="48" w="8" h="3" n="32" a0="5.6" da="11.25" data-attr-lit="hull_n * 2" on="#e0484e" off="#e0484e33"/>
<segarc cx="310" cy="420" r="370" w="10" h="8" n="16" a0="-42" da="2" data-attr-lit="power_n" on="#f0943c" off="#f0943c26"/>
<segarc cx="310" cy="420" r="384" w="10" h="4" n="16" a0="-42" da="2" data-attr-lit="thrust_n" data-attr-on="thrust_low ? '#ef6a5b' : '#dbe6f0'" off="#dbe6f026"/>
<segarc cx="310" cy="420" r="372" w="10" h="12" n="16" a0="42" da="-2" data-attr-lit="speed_n" on="#5cc8f0" off="#5cc8f026"/>
<div class="pc"><span class="s">{{ shield_t }}%</span><span class="h">{{ hull_t }}%</span></div>
<div class="side l">
<span class="cap">THRUST</span><span class="big" data-class-low="thrust_low">{{ thrust }}</span>
<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>
</div>
</div>
</div>
<div data-if="(core || editing) &amp;&amp; !core_ring">
<div class="fp all coreb">
<div class="val thrust" data-class-low="thrust_low"><span class="cap">THRUST</span>{{ thrust }}</div>
<div class="sep"></div>
<div class="bars">
<div class="brow power"><span class="l">POWER</span><div class="bar"><div class="chips"><div class="sg" data-class-lit="power_n &gt; 0"></div><div class="sg" data-class-lit="power_n &gt; 1"></div><div class="sg" data-class-lit="power_n &gt; 2"></div><div class="sg" data-class-lit="power_n &gt; 3"></div><div class="sg" data-class-lit="power_n &gt; 4"></div><div class="sg" data-class-lit="power_n &gt; 5"></div><div class="sg" data-class-lit="power_n &gt; 6"></div><div class="sg" data-class-lit="power_n &gt; 7"></div><div class="sg" data-class-lit="power_n &gt; 8"></div><div class="sg" data-class-lit="power_n &gt; 9"></div><div class="sg" data-class-lit="power_n &gt; 10"></div><div class="sg" data-class-lit="power_n &gt; 11"></div><div class="sg" data-class-lit="power_n &gt; 12"></div><div class="sg" data-class-lit="power_n &gt; 13"></div><div class="sg" data-class-lit="power_n &gt; 14"></div><div class="sg" data-class-lit="power_n &gt; 15"></div></div></div></div>
<div class="brow shield"><span class="l">SHIELD</span><div class="bar"><div class="chips"><div class="sg" data-class-lit="shield_n &gt; 0"></div><div class="sg" data-class-lit="shield_n &gt; 1"></div><div class="sg" data-class-lit="shield_n &gt; 2"></div><div class="sg" data-class-lit="shield_n &gt; 3"></div><div class="sg" data-class-lit="shield_n &gt; 4"></div><div class="sg" data-class-lit="shield_n &gt; 5"></div><div class="sg" data-class-lit="shield_n &gt; 6"></div><div class="sg" data-class-lit="shield_n &gt; 7"></div><div class="sg" data-class-lit="shield_n &gt; 8"></div><div class="sg" data-class-lit="shield_n &gt; 9"></div><div class="sg" data-class-lit="shield_n &gt; 10"></div><div class="sg" data-class-lit="shield_n &gt; 11"></div><div class="sg" data-class-lit="shield_n &gt; 12"></div><div class="sg" data-class-lit="shield_n &gt; 13"></div><div class="sg" data-class-lit="shield_n &gt; 14"></div><div class="sg" data-class-lit="shield_n &gt; 15"></div></div></div></div>
<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>
</div>
</div>
<!-- the cruise engine's countdown / charge (HUD_CruiseProgress): around the ship status' ring (or above its bars),
with the ship status' move and size, also while that is hidden -->
<div class="grp g1" data-style-transform="grp[1].tf">
<div class="fp cruisearc" data-if="cruise_bar &amp;&amp; core_ring" data-class-count="cruise_count" data-class-done="cruise_done">
<segarc cx="310" cy="92" r="84" w="9" h="7" n="16" a0="-55" da="7.3333" data-attr-lit="cruise_n" on="#f2b13c" off="#f2b13c30"/>
<segarc cx="310" cy="92" r="94" w="9" h="2" n="16" a0="-55" da="7.3333" data-attr-lit="cruise_n" on="#ffd27a99" off="#5cc8f026"/>
<segarc cx="310" cy="92" r="84" w="10" h="9" n="1" data-attr-a0="cruise_tip_a" da="0" data-attr-lit="cruise_n &gt; 0 ? 1 : 0" on="#fff1c8" off="#00000000"/>
<div class="glow" data-if="cruise_n &gt; 0" data-style-left="cruise_tip_l" data-style-top="cruise_tip_t"></div>
<div class="head"><span class="cv">{{ cruise_val }}</span><span class="cc">{{ cruise_cap }}</span></div>
</div>
<div class="fp cruiseband" data-if="cruise_bar &amp;&amp; !core_ring" data-class-count="cruise_count" data-class-done="cruise_done">
<span class="cc">&#187; {{ cruise_cap }} &#171;</span>
<div class="row"><div class="ch" data-class-lit="cruise_n &gt; 0"></div><div class="ch" data-class-lit="cruise_n &gt; 1"></div><div class="ch" data-class-lit="cruise_n &gt; 2"></div><div class="ch" data-class-lit="cruise_n &gt; 3"></div><div class="ch" data-class-lit="cruise_n &gt; 4"></div><div class="ch" data-class-lit="cruise_n &gt; 5"></div><div class="ch" data-class-lit="cruise_n &gt; 6"></div><div class="ch" data-class-lit="cruise_n &gt; 7"></div><div class="ch" data-class-lit="cruise_n &gt; 8"></div><div class="ch" data-class-lit="cruise_n &gt; 9"></div><div class="ch" data-class-lit="cruise_n &gt; 10"></div><div class="ch" data-class-lit="cruise_n &gt; 11"></div><div class="ch" data-class-lit="cruise_n &gt; 12"></div><div class="ch" data-class-lit="cruise_n &gt; 13"></div><div class="ch" data-class-lit="cruise_n &gt; 14"></div><div class="ch" data-class-lit="cruise_n &gt; 15"></div><div class="run"></div></div>
<span class="cv">{{ cruise_val }}</span>
</div>
</div>
<!-- bottom left: contacts / target -->
<div class="grp g2" data-grp="2" data-style-transform="grp[2].tf" data-class-gone="!grp[2].shown && !editing" data-class-faded="!grp[2].shown && editing">
<div class="tag" data-if="editing" style="left: 8dp; bottom: 390dp;"><span class="eye" data-action="eye" data-arg="2">{{ grp[2].shown ? 'Hide' : 'Show' }}</span>Contacts &amp; target</div>
<div data-if="panel || editing">
<div class="fp lhead">
<span class="ttl">{{ mode == 1 ? 'TARGET' : 'CONTACTS' }}<span class="sl">\\\</span></span>
<span class="sp"></span>
<div class="ib" data-for="t : tabs" data-class-on="t.active" data-action="tab" data-attr-data-arg="t.key"><img class="ico" data-attr-src="t.icon"/></div>
</div>
<div class="fp lbody">
<div data-if="mode == 1">
<div class="tsub" data-if="!has_target">No target</div>
<div data-if="has_target">
<div class="tname">{{ target_name }}</div>
<div class="tsub">{{ target_sub }} {{ target_rank }} {{ target_range }}</div>
<div class="tbar hull"><span class="l">HULL</span><div class="bar"><div class="chips"><div class="sg" data-class-lit="target_hull_n > 0"></div><div class="sg" data-class-lit="target_hull_n > 1"></div><div class="sg" data-class-lit="target_hull_n > 2"></div><div class="sg" data-class-lit="target_hull_n > 3"></div><div class="sg" data-class-lit="target_hull_n > 4"></div><div class="sg" data-class-lit="target_hull_n > 5"></div><div class="sg" data-class-lit="target_hull_n > 6"></div><div class="sg" data-class-lit="target_hull_n > 7"></div><div class="sg" data-class-lit="target_hull_n > 8"></div><div class="sg" data-class-lit="target_hull_n > 9"></div><div class="sg" data-class-lit="target_hull_n > 10"></div><div class="sg" data-class-lit="target_hull_n > 11"></div><div class="sg" data-class-lit="target_hull_n > 12"></div><div class="sg" data-class-lit="target_hull_n > 13"></div><div class="sg" data-class-lit="target_hull_n > 14"></div><div class="sg" data-class-lit="target_hull_n > 15"></div></div></div></div>
<div class="tbar shield" data-if="target_has_shield"><span class="l">SHIELD</span><div class="bar"><div class="chips"><div class="sg" data-class-lit="target_shield_n > 0"></div><div class="sg" data-class-lit="target_shield_n > 1"></div><div class="sg" data-class-lit="target_shield_n > 2"></div><div class="sg" data-class-lit="target_shield_n > 3"></div><div class="sg" data-class-lit="target_shield_n > 4"></div><div class="sg" data-class-lit="target_shield_n > 5"></div><div class="sg" data-class-lit="target_shield_n > 6"></div><div class="sg" data-class-lit="target_shield_n > 7"></div><div class="sg" data-class-lit="target_shield_n > 8"></div><div class="sg" data-class-lit="target_shield_n > 9"></div><div class="sg" data-class-lit="target_shield_n > 10"></div><div class="sg" data-class-lit="target_shield_n > 11"></div><div class="sg" data-class-lit="target_shield_n > 12"></div><div class="sg" data-class-lit="target_shield_n > 13"></div><div class="sg" data-class-lit="target_shield_n > 14"></div><div class="sg" data-class-lit="target_shield_n > 15"></div></div></div></div>
<div class="tbtns">
<div class="ib" data-for="b : target_buttons" data-action="tbutton" data-attr-data-arg="b.key"><img class="ico" data-attr-src="b.icon"/></div>
</div>
</div>
</div>
<div data-if="mode != 1 && contacts_shown">
<div class="filters">
<div class="ib" data-for="f : filters" data-class-on="f.active" data-action="filter" data-attr-data-arg="f.key"><img class="ico" data-attr-src="f.icon"/></div>
</div>
<div class="rows">
<div class="c" data-for="c : contacts" data-style-color="c.colour" data-action="row" data-ctx="contact" data-attr-data-arg="c.key">
<img data-attr-src="c.icon" data-style-image-color="c.colour"/><span class="n">{{ c.name }}</span><span class="r">{{ c.range }}</span>
</div>
</div>
<div class="sbar" data-if="more_up || more_down">
<div class="ar" data-class-off="!more_up" data-action="up">&#9650;</div>
<div class="track">
<div class="rail"></div>
<div class="zu" data-action="up"></div><div class="zd" data-action="down"></div>
<div class="thumb" data-style-top="thumb_top" data-style-height="thumb_size"></div>
</div>
<div class="ar" data-class-off="!more_down" data-action="down">&#9660;</div>
</div>
</div>
</div>
</div>
</div>
<!-- bottom right: the player's ship -->
<div class="grp g3" data-grp="3" data-style-transform="grp[3].tf" data-class-gone="!grp[3].shown && !editing" data-class-faded="!grp[3].shown && editing">
<div class="tag" data-if="editing" style="right: 8dp; bottom: 390dp;"><span class="eye" data-action="eye" data-arg="3">{{ grp[3].shown ? 'Hide' : 'Show' }}</span>Weapons &amp; equipment</div>
<div data-if="status || editing">
<div class="fp rhead">
<span class="ttl">WEAPONS<span class="sl">\\\</span></span>
<span class="sp"></span>
<div class="ib" data-if="has_repair" data-action="repair"><img class="ico" src="3db:interface/hud/HUD_repairactivate.3db"/></div><span class="cnt" data-if="has_repair">{{ repair }}</span>
<div class="ib" data-if="has_battery" data-action="battery"><img class="ico" src="3db:interface/hud/HUD_shieldgaugeicon.3db"/></div><span class="cnt" data-if="has_battery">{{ battery }}</span>
<div class="ib" data-if="loot" data-action="loot"><img class="ico" src="3db:interface/HUD/HUD_loot_bw.3db"/></div>
</div>
<div class="fp rbody"><div class="wl">
<div class="w" data-for="w : weapons" data-class-on="w.active" data-action="weapon" data-attr-data-arg="w.key">
<span class="k">{{ w.key + 1 }}</span><span class="n">{{ w.name }}</span><span class="a">{{ w.ammo }}</span>
</div>
<div class="w cloak" data-if="has_cloak" data-class-on="cloak_on" data-action="cloak"><span class="k"></span><span class="n">{{ cloak_name }}</span><span class="a">{{ cloak_on ? 'ON' : 'OFF' }}</span></div>
<div class="special" data-if="special != ''">{{ special }}</div>
</div></div>
</div>
</div>
<!-- the HUD editor's bar -->
<div class="edbar" data-if="editing">
<div class="et">CUSTOMIZE HUD</div>
<div class="eh">Drag a part or its label to move it &#183; mouse wheel over it to size it &#183; Hide / Show on its label &#183; the REM bars, the radar and the chat by their tags &#183; Widgets: switch every part on or off. Parts snap to their home place.</div>
<div class="eb">
<div class="btn" data-action="ed_widgets">Widgets</div>
<div class="btn" data-action="ed_reset">Reset all</div>
<div class="btn" data-action="ed_cancel">Cancel</div>
<div class="btn primary" data-action="ed_save">Save</div>
</div>
</div>
</body>
</rml>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

-122
View File
@@ -1,122 +0,0 @@
<rml>
<head>
<title>Inventory</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
.split { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.colm { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.colm.list-col { flex: 0 0 38%; margin-right: 18dp; }
.list { flex: 1 1 0; min-height: 0; overflow-y: auto; }
.inv { display: flex; flex-direction: row; align-items: center; padding: 6dp 10dp; border-bottom: 1dp #ffffff08; border-left: 2dp #00000000; }
.inv:hover { background-color: #122033; }
.inv.selected { background-color: #f2b13c24; border-left-color: #f2b13c; }
.inv img { width: 30dp; height: 30dp; margin-right: 10dp; }
.inv .txt { flex: 1; min-width: 0; }
.inv .n { font-size: 14dp; }
.inv .note { font-size: 12dp; color: #8197ad; }
.inv .c { font-family: "IBM Plex Mono"; color: #8197ad; margin-left: 8dp; }
#ship { flex: 1; min-height: 140dp; decorator: vertical-gradient(#0a1424 #05080d); margin-bottom: 12dp; }
.card { height: 110dp; overflow-y: auto; white-space: pre-line; line-height: 1.45; padding: 12dp; background-color: #5cc8f008; }
.pick-head { display: flex; flex-direction: row; align-items: center; margin-bottom: 8dp; }
.pick-head img { width: 40dp; height: 40dp; margin-right: 12dp; }
.pick-head .t { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 18dp; }
.jet { display: flex; flex-direction: row; align-items: center; margin-top: 10dp; }
.jet .abar { margin-right: 10dp; }
/* as the equipment dealer's list: the ship's hardpoints (what sits on each, the empty ones dim), what is mounted
without one, the hold -- not mounted, an amber edge; the hold's bar over the list (rem.rcss .dstat) */
.sec { display: flex; flex-direction: row; align-items: center; margin: 12dp 0 4dp 0; padding-bottom: 3dp; border-bottom: 1dp #2b6f9e; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 12dp; letter-spacing: 2dp; color: #5cc8f0; }
.sec:first-child { margin-top: 0; }
.sec .cnt { margin-left: auto; font-family: "IBM Plex Mono"; font-weight: 400; letter-spacing: 0; color: #8197ad; }
.sec.held { color: #f2b13c; border-bottom-color: #f2b13c66; }
.inv .slot { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 10dp; letter-spacing: 1dp; text-transform: uppercase; white-space: nowrap; color: #8fb3d0; }
.inv.empty .n { color: #5c7a94; }
.inv.empty .txt { margin-left: 40dp; }
.inv.held { border-left-color: #f2b13c66; }
.inv.held.selected { border-left-color: #f2b13c; }
/* the credits over the list (one line whatever the sum), the hold's bar over the ship model: each has its
column's width instead of sharing the list's */
.holdrow { display: flex; flex-direction: row; margin-bottom: 8dp; }
.holdrow .dstat { margin-left: 0; }
.holdrow .sv { font-size: 17dp; white-space: nowrap; }
.holdtop { display: flex; flex-direction: row; margin-bottom: 8dp; }
.holdtop .dstat { margin-left: 0; flex: 1 1 0; min-width: 0; }
.holdtop .hbar { flex: 1 1 0; width: auto; min-width: 0; max-width: 460dp; }
.holdtop .ht { white-space: nowrap; }
.jet .btn { margin: 0; }
/* the picked piece's figures (rem_ui_stats), two to a row */
.figs { display: flex; flex-direction: row; flex-wrap: wrap; margin-bottom: 8dp; padding: 6dp 10dp; background-color: #5cc8f008; }
.figs .fg { width: 50%; display: flex; flex-direction: row; padding: 2dp 8dp 2dp 0; box-sizing: border-box; }
.figs .fl { flex: 1; white-space: nowrap; overflow: hidden; color: #8fb3d0; font-size: 13dp; }
.figs .fv { font-family: "IBM Plex Mono"; font-size: 13dp; color: #e8f4ff; }
</style>
</head>
<body class="window medium" data-model="inventory">
<div class="win-head">
<img class="head-ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/>
<span class="title">INVENTORY</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="close" data-action="close">&#215;</span>
</div>
<div class="win-main">
<div class="nav">
<div class="item" data-class-active="filter == 5" data-action="filter" data-arg="5"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_ships.3db"/><span>Everything</span></div>
<div class="item" data-class-active="filter == 0" data-action="filter" data-arg="0"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_bounty.3db"/><span>Weapons</span></div>
<div class="item" data-class-active="filter == 1" data-action="filter" data-arg="1"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_arrow.3db"/><span>Ammunition</span></div>
<div class="item" data-class-active="filter == 2" data-action="filter" data-arg="2"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_construction.3db"/><span>Equipment</span></div>
<div class="item" data-class-active="filter == 3" data-action="filter" data-arg="3"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/><span>Cargo</span></div>
</div>
<div class="content">
<div class="split">
<div class="colm list-col">
<div class="holdrow"><div class="dstat"><span class="sk">CREDITS</span><span class="sv">{{ credits }}</span></div></div>
<input class="text search" type="text" data-value="search" maxlength="40" style="margin-bottom: 8dp;"/>
<div class="list">
<div class="sec" data-if="hps.size &gt; 0">HARDPOINTS<span class="cnt">{{ hp_used }} / {{ hps.size }}</span></div>
<div class="inv" data-for="r : hps" data-class-empty="r.key == ''" data-class-selected="r.selected" data-action="pick" data-attr-data-arg="r.key">
<img data-if="r.icon != ''" data-attr-src="r.icon"/>
<div class="txt"><div class="n">{{ r.key == '' ? 'empty' : r.name }}</div><div class="slot">{{ r.slot }}</div></div>
<span class="c">{{ r.note }}</span>
</div>
<div class="sec" data-if="inside.size &gt; 0">MOUNTED, NO HARDPOINT</div>
<div class="inv" data-for="r : inside" data-class-selected="r.selected" data-action="pick" data-attr-data-arg="r.key">
<img data-if="r.icon != ''" data-attr-src="r.icon"/>
<div class="txt"><div class="n">{{ r.name }}</div><div class="note" data-if="r.note != ''">{{ r.note }}</div></div>
<span class="c">{{ r.count }}</span>
</div>
<div class="sec held">CARGO HOLD &#183; NOT MOUNTED<span class="cnt">{{ items.size }}</span></div>
<div class="hint" style="padding: 10dp;" data-if="items.size == 0">Nothing in the hold.</div>
<div class="inv held" data-for="r : items" data-class-selected="r.selected" data-action="pick" data-attr-data-arg="r.key">
<img data-if="r.icon != ''" data-attr-src="r.icon"/>
<div class="txt"><div class="n">{{ r.name }}</div><div class="note" data-if="r.note != ''">{{ r.note }}</div></div>
<span class="c">{{ r.count }}</span>
</div>
</div>
</div>
<div class="colm">
<div class="holdtop"><div class="dstat"><span class="sk">HOLD</span><div class="hbar"><div class="hf" data-class-warn="hold_pct &gt;= 75" data-class-bad="hold_pct &gt;= 100" data-style-width="hold_pct + '%'"></div><span class="ht">{{ hold }}</span></div></div></div>
<div id="ship"></div>
<div data-if="has_pick">
<div class="pick-head"><img data-if="pick.icon != ''" data-attr-src="pick.icon"/><div><div class="t">{{ pick.name }}</div><div class="hint">{{ pick.note }}</div></div></div>
<div class="figs" data-if="stats.size &gt; 0"><div class="fg" data-for="f : stats"><span class="fl">{{ f.label }}</span><span class="fv">{{ f.value }}</span></div></div>
<div class="card">{{ info }}</div>
<div class="jet" data-if="mount_label != ''"><div class="btn primary" data-action="mount">{{ mount_label }}<div class="tip">{{ mount_tip }}</div></div></div>
<div class="jet" data-if="can_jettison">
<div class="abar" data-scrub="amount-at" data-class-off="amount_max &lt;= 1">
<div class="arail"><div class="afill" data-style-width="amount_max &gt; 1 ? (amount - 1) * 100 / (amount_max - 1) + '%' : '100%'"></div><div class="tk" style="left: 25%;"></div><div class="tk" style="left: 50%;"></div><div class="tk" style="left: 75%;"></div><div class="aknob" data-style-left="amount_max &gt; 1 ? (amount - 1) * 100 / (amount_max - 1) + '%' : '100%'"></div></div>
<div class="aticks" data-if="amount_max &gt; 1"><span class="lo" style="left: 0;">1</span><span style="left: 25%;" data-if="amount_max &gt;= 5">{{ 1 + (amount_max - 1) / 4 | format(0) }}</span><span style="left: 50%;" data-if="amount_max &gt;= 3">{{ 1 + (amount_max - 1) / 2 | format(0) }}</span><span style="left: 75%;" data-if="amount_max &gt;= 5">{{ 1 + (amount_max - 1) * 3 / 4 | format(0) }}</span><span class="hi">{{ amount_max }}</span></div>
</div>
<span class="num" style="width: 60dp; text-align: right; margin-right: 12dp;">{{ amount }}</span>
<div class="btn danger" data-action="jettison">Jettison<div class="tip">Throws the amount overboard. It floats in space as loot.</div></div>
</div>
</div>
<div class="hint" data-if="!has_pick">Pick an item to see what it is.</div>
</div>
</div>
</div>
</div>
<div class="win-foot">
<span class="key">Esc</span><span class="hint">close</span>
<span class="status">{{ status }}</span>
</div>
</body>
</rml>
-56
View File
@@ -1,56 +0,0 @@
<rml>
<head>
<title>Load game</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
body.window.lg { left: 50%; margin-left: -460dp; top: 12%; width: 920dp; height: 600dp; }
.cols { flex: 1; display: flex; flex-direction: row; min-height: 0; }
.savelist { flex: 1; overflow-y: auto; background-color: #5cc8f008; }
.sv { display: flex; flex-direction: row; align-items: center; padding: 9dp 12dp; border-bottom: 1dp #ffffff08; border-left: 3dp #00000000; }
.sv:hover { background-color: #122033; }
.sv.sel { border-left-color: #f2b13c; background-color: #f2b13c1a; }
.sv .n { flex: 1; font-size: 16dp; white-space: nowrap; overflow: hidden; }
.sv .t { font-family: "IBM Plex Mono"; font-size: 12dp; color: #8197ad; margin-left: 12dp; }
.det { width: 300dp; margin-left: 16dp; padding: 14dp; background-color: #5cc8f008; }
.det .row { display: flex; flex-direction: row; padding: 7dp 0; border-bottom: 1dp #ffffff08; }
.det .row .k { width: 90dp; color: #8197ad; font-size: 13dp; text-transform: uppercase; letter-spacing: 1dp; }
.det .row .v { flex: 1; font-size: 15dp; }
.acts { display: flex; flex-direction: row; justify-content: flex-end; margin-top: 14dp; }
.acts .btn { margin-left: 8dp; }
</style>
</head>
<body class="window lg" data-model="loadgame">
<div class="win-head">
<span class="title">LOAD GAME</span><span class="sl">\\\</span>
<span class="spacer"></span>
<span class="chip">Saves <span class="v">{{ saves.size }}</span></span>
</div>
<div class="win-main">
<div class="content" style="display: flex; flex-direction: column;">
<div class="cols">
<div class="savelist">
<div class="hint" style="padding: 12dp;" data-if="saves.size == 0">No saved games.</div>
<div class="sv" data-for="s : saves" data-class-sel="s.selected" data-action="pick" data-dbl="open" data-attr-data-arg="s.key">
<span class="n">{{ s.name }}</span><span class="t">{{ s.time }}</span>
</div>
</div>
<div class="det">
<h3>Saved game</h3>
<div class="hint" data-if="!has_pick">Pick a saved game.</div>
<div data-if="has_pick">
<div class="row"><span class="k">Credits</span><span class="v">{{ money }}</span></div>
<div class="row"><span class="k">Rank</span><span class="v">{{ rank }}</span></div>
<div class="row"><span class="k">Place</span><span class="v">{{ place }}</span></div>
<div class="row"><span class="k">Ship</span><span class="v">{{ ship }}</span></div>
</div>
</div>
</div>
<div class="acts">
<div class="btn" data-class-disabled="busy" data-action="menu">Main menu</div>
<div class="btn" data-class-disabled="!has_pick || busy" data-action="delete">Delete</div>
<div class="btn primary" data-class-disabled="!has_pick || busy" data-action="load">Load game</div>
</div>
</div>
</div>
</body>
</rml>
-23
View File
@@ -1,23 +0,0 @@
<rml>
<head>
<title>Loading</title>
<link type="text/rcss" href="rem.rcss"/>
<style>
body.loaddoc { position: absolute; left: 0; top: 0; right: 0; bottom: 0; display: block; background-color: transparent; pointer-events: none; }
/* a small HUD panel (cut corners): the title with its three slashes, a segmented rail as the HUD's
bars with the amber sweep running over it (the loading screen's own phase: no real progress) */
.load { position: absolute; left: 50%; bottom: 60dp; transform: translateX(-50%); width: 460dp; padding: 12dp 22dp 16dp 26dp; decorator: ninepatch(fw, fw-i); }
.load .t { font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 18dp; letter-spacing: 3dp; color: #e8f4ff; margin-bottom: 10dp; }
.load .t .sl { margin-left: 10dp; letter-spacing: -1dp; color: #5cc8f0; }
.load .track { position: relative; height: 8dp; display: flex; flex-direction: row; }
.load .sg { flex: 1; height: 8dp; margin-right: 2dp; background-color: #f2b13c26; }
.load .sweep { position: absolute; top: 0; width: 25%; height: 8dp; background-color: #f2b13ccc; }
</style>
</head>
<body class="loaddoc" data-model="loading">
<div class="load" data-if="shown">
<div class="t">LOADING<span class="sl">\\\</span></div>
<div class="track"><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sg"></div><div class="sweep" data-style-left="sweep"></div></div>
</div>
</body>
</rml>

Some files were not shown because too many files have changed in this diff Show More