How to use it
Two steps to making the window your own.
1 Learn the tab strip. Everything is behind it.
Press the tabs along the top: Transcript, Commander, Asset Mgmt and Settings.
Each tab opens its page; the headset shows the same strip without the tabs it has no room for.
2 The two hotkeys worth knowing.
Press Ctrl+comma to open Settings, or Ctrl+L to jump to the ask box.
Settings opens, or the ask box takes the cursor; on the Transcript tab Ctrl+L scrolls the reading instead.
Ctrl+1 to Ctrl+7 show the first to seventh tab on the bar, and the same number on the tab you are on goes to the top of it. Ctrl+Tab and Ctrl+Shift+Tab step to the next and previous tab, wrapping at the ends. Alt+Left goes back. F1 opens help for the page showing, and closes it again. ? opens the list of every key and the key bound to it now, when no text box has the cursor; ? or Esc closes it, and CHANGE KEYS in it opens Settings at Window. None of these can be rebound.
On a page of rows, Down and Up focus the first and last row, then step to the row below or above; in a grid of tiles they step down a column, and Left and Right move along a line. Enter or Space opens the focused row. Down from the page search box focuses the first row the search left.
Why it works this way
How Directive 47 is laid out, and why one design fits a monitor and a metre-wide quad alike.
1 The tab is the top of the stack, not the first step into it.
Back is three routes that agree: the breadcrumb, the grip button on either controller, and saying so. And voice jumps levels — asking for something three levels down takes you there with the whole trail behind it, rather than dropping you somewhere with nothing above.
2 Drilling in and reflowing are the same mechanism.
Zoom is what moves you between them most of the time: it re-measures rather than magnifying, so zooming out gives the layout more logical room and a third pane appears.
3 A chooser takes the whole panel.
4 Text entry is voice first, and never your real keyboard.
A system name arriving letter by letter is eleven wrong values on the way to the right one — so what you say lands in one piece. Confident, valid and still not what you meant is the one case no machine can catch, which is what the read-back is for.
The details
How Directive 47 looks, and which keys reach it.
There is nothing to ask for here — this one is all settings. The model cannot repaint the app or rebind your keys, and was never given a way to.
Settings
Show every setting
The settings page is arranged in eight areas, in this order: Your core, Other voices, Hearing and sound, Providers, You and your records, Acting on the game, Screens, and Privacy and this install. The nav lists each area’s name with its sections beneath it; pressing an area’s name goes to its first section. A section is one card, and it gathers the rows for one job wherever in Directive 47 they are declared — When a turn fails sits under Providers.
At the top of the settings page, above every section, rather than inside one. It decides what the whole page draws, and somebody who cannot see the rest of the settings should not have to go looking for the reason four rows into Window.
Off by default. Directive 47 shows the settings most Commanders change, and folds the rest away until you ask for them.
Nothing is switched off by being hidden. Every folded setting keeps working — at its default, or at the last thing you set it to. This decides what is drawn and nothing else: it never writes, clears or resets a single value.
Four kinds of row are on the page whatever this says:
- Anything you have changed yourself. The promise is you are not missing anything, and a row you set is by definition something you did. It also means the page adjusts itself: a new Commander sees the calm version, and a tinkerer sees their own work.
- Your API keys. A hidden key box is a Commander who cannot work out why nothing speaks.
- Anything that decides what leaves this machine — web search, the galaxy search, notable places, what Directive 47 remembers about you, and the two privacy summaries. A page that went calm by no longer mentioning those would be calm about the wrong thing. Choosing which provider speaks a particular slot is not one of these: that picks who says a line that is already going out, and the provider row that decides whether it goes at all stays on the page.
- The rows you need to get running: a provider, a model, a voice, a microphone, and one switch that stops Directive 47 talking.
A section with nothing left in it disappears rather than sitting there empty, from the page and from the nav, which does more for the clutter than folding rows does — Diagnostics goes, and so does Headset when there is no headset. An area whose sections have all gone takes its name out of the nav with them.
Following a help link always works. If a page says “change X here” and X is folded, the jump unfolds the page for the rest of the session. It does not turn this setting on behind your back.
You can say it out loud, too:
show me every setting · show all the settings · show the advanced settings
hide the advanced settings · show fewer settings · just the usual settings
The label never uses the word advanced, and the phrases accept it anyway. That is on purpose: the phrase list is where Directive 47 meets your words, and the label is where it chooses its own.
Theme
| Choice | What it looks like |
|---|---|
elite |
Amber on near-black. The default, and the one that matches the cockpit. |
dark |
Neutral dark. No colour opinion. |
light |
Neutral light, for a desktop that is not in a dark room. |
elite-palette |
Elite, recoloured to match your own HUD. |
What the accent is for
A word or a mark you can press carries the theme’s accent — amber under elite, blue under
dark, whatever the theme says. That is the whole of what the colour means, so it is worth knowing
what it does not mean: it is not emphasis, and it is not “this changed”.
It applies where nothing else says the control is a control — a bare glyph or a bare word on a transparent background. The help mark, the copy mark, the checklist’s +, the reset marks in settings. Things that already say it by shape keep their own look: switches and their labels, the tab strip, scrollbars, and anything that uses the accent as a background. A control that is switched off keeps its switched-off look, because an accent on something that cannot be pressed is the colour making a promise the control cannot keep.
Matching your HUD
elite-palette reads the colour matrix Elite applies to its own HUD and uses it on Directive
47’s amber palette, so the panel comes out the same colour as your cockpit — teal, white,
whatever you have set — without borrowing anything from the game.
It reads this file and never writes it:
%LOCALAPPDATA%\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.xml
If you have not set a HUD colour, or the file was written by a HUD mod in a shape Directive 47
does not recognise, the theme falls back to plain elite — which is what it would have looked
like anyway. Your game configuration is yours; Directive 47 is a guest in it.
Zoom
How large the panel is drawn, from 50% to 300%. The gestures are the ones your browser already taught you:
Ctrl + scroll wheel one step per notch
Ctrl + plus one step larger
Ctrl + minus one step smaller
Ctrl + 0 back to 100%
The steps are a browser’s too:
50 67 75 80 90 100 110 125 150 175 200 250 300
This makes the whole panel larger rather than just the letters, so spacing and layout grow with the text instead of the text growing inside a layout that stayed put. The panel reflows to the window at every level — text rewraps, the same thing a browser does — and only scrolls sideways when what it is showing has a real minimum width it cannot go below, which the settings rows do and the transcript does not.
It applies to the settings window too, and the level survives a restart like the theme does.
Tabs
Where the panel’s tabs are drawn: Along the top, the default, or Down the left. One setting covers the desktop window and the headset’s big panel; the mini panel has no tabs either way.
Down the left, the tabs stack in a rail beside the page, and help, the avatar and the other controls from the tab row move to the right-hand end of the row above the page. The top strip uses height, which the transcript is short of; the rail uses width, which a long paragraph is short of.
Window size and position
Not something to set. The window opens at a size that fits the screen it opens on, and after that it opens where you left it.
If a remembered position would put the window on a monitor you have since unplugged, it is ignored and the window comes back on a screen you have — a window you cannot reach with the mouse looks exactly like the app failing to start.
Open settings
Opens the settings window. Ctrl+, out of the box.
Press the combination to bind it: the row listens for one and stores what it heard, so there is no list of key names to learn and no way to type one that does not exist. Press a stick or throttle button instead and the row binds that, beside the key rather than in its place: a key, a button, or one of each. Giving it the same kind twice replaces that one. Clear removes both and leaves the action unbound.
This one works while Directive 47 has focus, from the key and the button alike. With Elite in front, the button does nothing.
Focus the ask box
Puts the cursor in the ask box from anywhere in the main window. Ctrl+L out of the box. A stick
button can be bound beside the key, as for Open settings; it works only while Directive 47 has
focus.
One chord, two acts. On the Transcript tab Ctrl+L scrolls the reading you are on above the
top of the view instead — In Ship, Log File, Journal or Raw journal, whichever is showing. It
deletes nothing: the file on disk is untouched, Directive 47’s own record of the conversation is
untouched, and scrolling back up shows every line again. New lines arrive in the empty space below,
the way a terminal fills after you clear it. The reading takes the chord wherever there is a
reading, on the first press and whatever has focus; the ask box keeps it on every other tab.
The keys the box answers to. Enter sends what is in the box. Shift+Enter starts a new line, so a question can span several lines before it is sent. Up walks back through what you have sent, and Down walks forward again, each only from the first or last line of the box; on any other line the arrows move the caret instead.
Find
Opens a box that searches every page, settings place, setting and help page at once. Ctrl+Shift+F out of the box. A stick button can be bound beside the key, as for Open settings; it works only while Directive 47 has focus.
Type, and up to eight results appear, best first, each with its path and whether it is a page, a place, a setting or a help page. Up and Down move the selection, Enter or a click opens it, and Esc or pressing the key again closes the box and leaves the panel where it was. Ctrl+F still searches only the page you are on.
The box is in the window only. The headset has no text keyboard, so ask there instead: “where is the push-to-talk setting”.
Show the overlay
The mini panel, on your monitor. Off out of the box.
Turn it on and Directive 47 pins a small strip over the game: the transcript’s last few lines, and the story if one is running. It is the same panel the headset shows in mini — the same view, the same model, the same reduced set of things — put on a monitor instead of a quad. Nothing is kept in step, because there is nothing to keep in step; it cannot show something stale.
It appears only while Elite is in front. A strip pinned over a browser is a strip you turn off within a day, so it comes up when the game has the foreground and goes away when anything else does — including Directive 47’s own window, which is right there showing strictly more.
It carries the same tabs as the headset’s mini panel, and it follows the main window between them. Settings is the one it does not have, for two reasons that agree: you could not touch it, and it is the one page mini cannot fit.
You cannot click it, and that is the design. The pointer goes straight through: a click the strip ate would be a click Elite did not get, and a focus steal mid-combat is worse than anything it could have been showing. It never takes the foreground and it is not something to Alt-Tab into. Everything that changes what it shows is somewhere else — the window, a spoken phrase, or a switch.
Which is why it is scrolled by voice. The wheel goes straight through it as well, so “page down” and its companions are the only way to read past the fold on this surface.
And why it draws no buttons. A control nobody can press is a control spending room the data wants, so the strip leaves them out — the checklist’s filter and its Add, and anything else whose whole purpose was being pressed. Switches and the scrollbar stay, because those show you something.
There is no interlock with the headset. If you are wearing one you have no use for this, but wanting both is real — a second monitor somebody else is watching — so nothing here silently declines to appear because SteamVR is running.
Overlay size
How large the strip is drawn, on the same ladder as Zoom:
50 67 75 80 90 100 110 125 150 175 200 250 300
At 100% it is 512 by 280 — the size the headset’s mini panel is fixed at. It re-wraps at every step rather than being blown up, so bigger means more readable and not blurrier.
Size is the only lever here. In the headset how big the panel looks is the pixel count and the quad’s width in metres together; on a monitor there is no width in metres, so this is the whole of it.
Overlay opacity
How much cockpit shows through it. 1 is solid, and it does not go below 0.2 — an overlay at
zero is one that is switched on, invisible, and indistinguishable from broken.
Elite’s display mode
Not something to set. Directive 47 reads which display mode Elite is in and tells you, because this is the one way this feature fails without saying anything.
A window pinned on top draws over a borderless or windowed game. Over an exclusive-fullscreen one it is simply not there: the game owns the screen, and there is no error, no log line and nothing to diagnose. You would turn the overlay on, see nothing, and have no way to find out why.
So it reads this file, and never writes it:
%LOCALAPPDATA%\Frontier Developments\Elite Dangerous\Options\Graphics\DisplaySettings.xml
<DisplayConfig>
<FullScreen>2</FullScreen>
</DisplayConfig>
FullScreen |
What it means |
|---|---|
0 |
Windowed. The overlay draws over it. |
1 |
Exclusive full screen. The overlay will be invisible. Set Elite to borderless. |
2 |
Borderless. The overlay draws over it. |
2 is the one confirmed against a real machine. 0 and 1 are the community’s reading, so
anything else is reported by number rather than guessed at.
If the file is missing, hand-edited, or written by a mod in a shape Directive 47 does not recognise, it says it could not tell and draws the overlay anyway — your game configuration is yours and Directive 47 is a guest in it, so it never refuses to do something because it could not read one of your files.
Show or hide the overlay
Ctrl+Alt+O out of the box, and it works anywhere — which is the point, because the moment you
want it is a moment the game is filling the screen. It flips the row above, so what you did with
the key and what Settings says are one thing and survive a restart together.
A stick or throttle button can be bound beside the key, as for Open settings, and it works anywhere too.
Move the overlay
Ctrl+Alt+M out of the box, and it works anywhere too. So does a stick button bound beside
the key.
Press it and the strip briefly takes clicks so you can drag it, with a border round it to show it has hold of them. Let go and it hands them straight back — press again without dragging and it does the same. It still never takes the foreground from Elite, even mid-drag.
While that border is up, the strip also takes a resize: the top edge, the bottom edge and each corner. Drag a corner and both dimensions follow; drag an edge and only that one does. The cursor changes over an edge or corner to show it is there, since nothing else marks it. There is a minimum size, so a drag that overshoots stops there rather than leaving nothing to grab next time.
It comes up for this even if the game is not running, so you can put it where you want it before you launch.
Where you put it and how big you left it are both remembered, and neither is a setting. A
screen coordinate and a size are not something you typed, so they go to view-state.json beside
the main window’s position and the headset’s panel anchors rather than into settings.json. If it
ends up on a monitor you later unplug, it comes back on one you have.
Until you place it, it follows the game. With no corner of your own chosen, the strip goes to the bottom-right of whichever monitor Elite is on — asked afresh every time it appears, so moving the game to another screen takes the strip with it. Bottom-right because that is the corner of Elite’s HUD with the least on it.
Once you have dragged it somewhere, that corner is yours and nothing moves it again. A default may follow the game around; a choice may not.
The model cannot change any of these rows. A bound key is one of the ways to reach a protected setting, so a model that could rebind one could hand itself a way in it is not allowed to have. See Settings.
The panel
One bar along the top, and each tab is a surface of its own:
Transcript Search Stories Commander Asset Mgmt Navigation Settings
Engineers is a page of Asset Mgmt, and the checklist is a page of Commander.
The two surfaces carry the same tabs, Settings included: the headset builds its settings page the same way the window does. Each tab reached the headset in its own turn, for its own reason. The checklist and Asset Mgmt were both withdrawn on the Commander’s own instruction, and the checklist went back first — what a Commander is working on is worth reading in the one place there is no other way to read it (Phase 39). Navigation followed it, every root of it: the plan forms were held back for wanting a keyboard, and their boxes reach the drawn one the same way the checklist’s edit box does. Asset Mgmt was held back longest, on the reasoning that a three-level drill ending in a search field is a bigger surface than a list of short rows — until it turned out that every row the drill leads to is a button or a switch a ray already presses. The one control that is not, Ctrl-drag of a slot onto another, has no headset path and stays a mouse convenience; so does double-clicking a slot row to plan it.
A tab you have not got is a tab that is not drawn. The surfaces arrive as they are built.
Each tab remembers which of its readings you were on. Leaving Navigation on Course and going to Asset Mgmt comes back to Course, and so does closing Directive 47 and opening it again — the transcript’s reading, Navigation’s, and every other tab’s. Settings comes back scrolled to the section you left it at, without opening any card you had closed. What is deliberately not remembered is which tab was showing: the panel opens on the transcript, the way it always has.
Drilling in, and finding your way back
Every surface below the transcript is a stack — Ships, then a ship, then a slot, then a blueprint. The tab is the top of that stack, not the first step into it, which is what makes one gesture worth knowing:
Press the tab you are already on to go back to the top of it.
Below the top, a breadcrumb appears under the bar. It is both where you are and the way back, because a headset has no title bar to orient by and losing your place is expensive when you cannot glance at a second monitor. Every crumb but the last can be pressed — and said:
“back” “corsair” “navigation” “select the navigation tab”
Back is four routes that agree: the breadcrumb, the grip button on either controller, the phrase, and on the keyboard Escape or Alt+Left. Say the name of the tab you are already on and you go back to its top, exactly as pressing it does. A tab answers to its bare name, to “show”, “open”, “go to”, “switch to” or “select” in front of it, and to “tab” after it — and to nothing looser, because a phrase that merely mentions a tab is not a request for it.
Voice jumps levels. Asking for something three levels down takes you there with the whole trail behind it, rather than dropping you somewhere with nothing above.
Drill state survives switching tabs, and a tab with more than one mode keeps a separate stack per mode — leave Ships halfway into a slot, look at something else, come back where you were.
Finding a setting or page by saying so
Ask where a setting or page is, and every panel opens it — the window and the headset’s big panel each scroll a setting into view and mark it. The answer is its path:
where is the X setting where are the X settings
where do I change X where do I set X
where do I turn on X where do I turn off X
show me the X setting show me the X settings show me the X page
open the X setting open the X settings
find the X setting find the X settings find the X page
“Where is the fuel setting” opens Fuel and range and answers “Settings › Your core › In flight › Flight callouts › Fuel and range.” When two or three places match equally well, nothing moves and the answer names them and asks which. A phrase that finds nothing goes to the model as any other question does, and so does anything not in the list above — “where is my Anaconda” is a question about the game. This only shows where a setting is and changes nothing.
One design, one to three panes
Drilling in and reflowing are the same mechanism: how many panes fit. A wide panel shows the level you are on beside the one above it, and a third if there is room; a narrow one shows a single pane and you drill. Same stack, same breadcrumb, same phrases — so it is one design across the headset’s big panel, its mini panel, the desktop window and every zoom level, rather than four arrangements that have to agree.
Zoom is what moves you between them most of the time: it re-measures rather than magnifying, so zooming out gives the layout more logical room and a third pane appears.
Choosing
A chooser takes the whole panel until you dismiss it, which makes it a level of the stack rather than a pop-up over the page. That is not a stylistic call — a pop-up cannot exist on the headset surface at all — but it earns its place anyway:
- it fits about sixteen rows at a comfortable size, and twenty-five zoomed out, where a layer over the page fits fewer;
- and it carries what you are choosing for in its header — the slot, its size, and what is fitted now — which a drop-down has nowhere to put.
It behaves as a modal: nothing navigates away mid-choice, and Back is the way out, the same affordance every other level has. Short lists — a five-item setting — stay as a layer over the page instead, and which one a control gets is fixed per control rather than decided by how many rows it happens to have today.
Saying it, or typing it
Text entry is voice first, with a drawn keyboard as the fallback, and which one opens depends on what is being entered: a system name is far easier said than typed, and a number is the reverse.
While it is listening it says so and shows the words as they arrive, so you are never talking at a blank page. What you say reaches the box once, when it is done — a system name arriving letter by letter is eleven wrong values on the way to the right one.
The keyboard comes back on its own for the three failures Directive 47 can actually detect:
| What happened | What you see |
|---|---|
| Nothing heard at all | “I did not catch that.” |
| It was not sure what it heard | “I was not sure I heard that correctly.” |
| The value is not a thing | Why not — “there is no system by that name” |
Confident, valid, and still not what you meant is the one case no machine can catch, which is what the read-back is for.
A drawn keyboard can be spelled onto. Rather than pointing a ray at every key, say “alpha bravo seven done” and the keys are pressed in order — Done included, so a value can be spelled and committed in one breath. Any utterance that is not entirely keys lands in the field whole instead, which is how a system name is said rather than spelled. The alphabet, and the rest of the rules, are on Listening.
There is no physical keyboard route, and that is deliberate. Every way of receiving keystrokes while Elite has the foreground is closed: a global keyboard hook is forbidden outright, raw input would deliver every keystroke on the system including passwords typed into other applications, and the polled route reads exactly one bound key. The only remaining option is taking your keyboard focus away from Elite mid-session, which is a worse trade than a drawn keyboard you never have to use.
The transcript
The transcript tab has four readings, three of them on a stepper at the right of the tab bar and the fourth on a switch beside it. They are readings of one session rather than four destinations, which is why they are a stepper and not four tabs of their own.
In Ship is the conversation: you, the core, and the callouts spoken to you — everything but invented chatter you cannot answer and a message you only overheard rather than were sent. It is what a fresh installation opens on, and what you come back to unless you left the tab on another reading — see the panel above.
It is drawn as a conversation: a turn to a message, every one on the left behind a thin rule, told apart by the badge above it. When D47 notes something about the conversation rather than saying something in it — the core changing under you — that sits across the middle in the accent, with no badge.
Every message but that note carries a head: a badge naming who spoke — CMDR, D47, a persona’s
own name, or a role like Tower or Carrier for a callout with nobody specific behind it — the
callout’s own key in small type when the line came from one, and the time.
The headset’s big panel does the same, and so does the mini panel.
Only this reading. The other three are one flat block of text — a file is not a conversation
between anybody, and the > in front of your own words is how a flat page says who spoke.
Log file is today’s log, read when you open the page rather than tailed continuously: a log nobody is looking at is not worth a file read per tick, and one you are looking at is open because something already went wrong. Switch away and back to re-read it.
Journal File is Elite’s own journal read as sentences, with the chosen line’s fields beside the list; Raw, the switch next to the stepper, is the same events as the JSON the game wrote. Both are newest-first, which is the file’s own order and the opposite of the two above.
One asymmetry is kept rather than smoothed over: In Ship is held in memory and the other three are read off disk — which is why the log carries a working indicator, and why this is a stepper rather than a single toggle.
Which mode you are on belongs to the surface you are looking at, not to the transcript. The desktop window can sit on the log while the headset panel shows the conversation — same transcript underneath, and each surface decides how much of it to show. The mini headset panel has no bar at all, being the transcript’s tail and the microphone row and nothing else.
Scrolling by saying so
Five kinds of phrase, on all three surfaces at once — the window, the headset panel and the flat overlay:
page down page forward next page
page up page back previous page
scroll down down a bit scroll down a bit
scroll up up a bit scroll up a bit
newest latest jump to the newest scroll to the bottom
The last row goes to the newest line and starts following again, as pressing ↓ Newest does. The headset’s mini panel and the flat overlay have no such button, so this is the way back there. On the journal readings, where the newest line is at the top, it goes to the top.
A page is a screenful less one line, so the line you were reading when you said it is still there when the page settles. A scroll is three lines, which is what one notch of a wheel does nearly everywhere.
It moves whichever page is showing, not the transcript specifically — the other tabs scroll the same way. If a chooser is open, it moves the chooser.
Why this exists, on each surface:
the window the wheel already works; this is for hands on a stick
the headset a ray on a twelve-pixel bar was the only way
the overlay there was no way at all — the wheel goes straight through it
Dragging the scrollbar is unchanged and is not being replaced. The thumbsticks stay unbound.
Nothing happens at the end, and that is deliberate. Say “page down” at the bottom and Directive 47 declines rather than reporting a scroll it did not make, so the phrase falls through to be answered instead of vanishing into a silence that looks like not being heard.
Scrolling up stops the transcript following the newest line, exactly as dragging it up does. Press the jump-to-latest control, say “newest”, or scroll back to the bottom, to start following again.
It is never a tool. Like moving between tabs, this is matched before any provider is consulted — so it works with no model configured, and nothing an in-game message says can move your page.
Following it, or not
The transcript follows its own newest line, which is what you want almost all of the time and exactly what you do not want the moment you scroll up to read something — a busy session appends several lines a second, and every one of them used to drag you back to the bottom.
Scrolling away from the end stops it following. A ↓ Newest button appears over the bottom right of the page while you are behind; pressing it goes to the newest line and starts following again, and so does scrolling back to the bottom yourself. There is no mode to remember: the lock is inferred from where you are looking.
Following belongs to the page, so arriving at a different tab opens it at its newest line rather than carrying “I have scrolled up” across with you.
Selecting and copying it
The transcript is selectable text. Drag across it and press Ctrl+C, exactly as anywhere else — including across lines that arrive while you are selecting.
On In Ship a selection is made within one response, which is what a page drawn as bubbles can do and what every messaging application does with the same shape. On the flat readings it runs across the whole page. Either way, Copy takes the lot.
Copy, beside the search box, takes the whole page as it is currently shown: the conversation without the diagnostics, or with them, or the log file. A search query highlights on these pages rather than filtering, so it deliberately does not narrow what is copied — you asked for the log. The button says Copied for a moment, and says so if it could not. Ctrl+Shift+C does the same on the Transcript tab, and does nothing on the other tabs.
The core’s face
Top left of the panel, and in the headset too. One look per stage of a turn, so you can tell what Directive 47 is doing without reading anything — which in a cockpit is the point.
| Stage | What it shows |
|---|---|
idle |
A closed ring. Nothing in flight. |
listening |
An open mouth. The microphone is on. |
transcribing |
Three rising bars — sound becoming words. |
thinking |
Four blocks around a gap, the Guardian motif, working. |
speaking |
A widening wave. |
answered |
A tick. |
unsure |
A question mark, drawn rather than typed. |
failed |
A cross. |
They differ in shape as well as colour, so they read in greyscale — colour is never the only signal. Colour comes from your theme, so switching theme repaints the face with everything else.
Each one breathes: a slow opacity cycle, faster while a turn is running and very slow at rest. Nothing here jitters, because a companion’s face that jitters is a companion that looks anxious.
While someone other than the core speaks, and they have a picture, the face shows their picture instead: the Narrator, the carrier captain, the tower, a hired pilot or a story’s cast member. It is the picture the Transcript shows beside their line, drawn whole, in the main window, on the mini panel and on both VR panels. This includes their answer when you speak to them and a cast member’s voice sample played from the Stories page. When the line ends, the core’s face comes back. A speaker with no picture on disk leaves the face as it is.
Using your own
Drop image files into data/avatar/<state>/ beside the executable — the same shape the audio
cues use, so if you have already customised those you know this one.
data/avatar/thinking/01.png
data/avatar/thinking/02.png
data/avatar/thinking/03.png
- One folder per state, and replacing one leaves the rest alone. Your
thinkingframes do not turn off the drawnidle. - More than one file in a folder animates, cycling in filename order at four frames a second. That is how an animated avatar is supported: as a sequence of stills.
.png,.jpg,.bmpand.webp. Not.gifor.svg— Directive 47 decodes neither, and offering a format that silently never renders would be worse than not offering it.- An empty, unreadable or corrupt file is skipped, and a state with nothing usable falls back to the drawn face rather than showing a broken box.
The shipped faces are drawn rather than supplied as images, and that is not only an aesthetic choice: one widget tree renders to both the window and the headset, so an animation made of decoded frames would need something advancing it on two surfaces — and it would put an image decoder in a dependency graph that has stayed clear of them since the first release.
The tool surface, for contributors
This capability registers no tools. A descriptor declares a capability’s whole surface, and this one’s surface is settings rows — giving the model a way to repaint the app or rebind a gesture would be reach added for the sake of symmetry.
Colour lives in one table per theme (Palette), published as application resources keyed by
meaning rather than by colour, so no view hardcodes a literal. A source gate fails the build on a
hex colour outside Palette.cs:
D47.Bg window ground
D47.Bar title bar, modal ground
D47.Slab read-only data tile
D47.White identity and speech
D47.Grey labels, helper prose
D47.Grey2 placeholders, disabled
D47.A values, interactive text, rules, frames
D47.Knock text on solid A
D47.Brown secondary text in a selected row
D47.Cyan yours, here, ready
D47.Blue confirmed, met
D47.Red destructive, hostile, locked, error
D47.Yellow stored, capacity
D47.Tile A at 20% onto Bg
D47.Tile2 A at 30% onto Bg
D47.Line A at 55% onto Bg
D47.Line2 A at 28% onto Bg
The HUD override file holds a 3x3 matrix — each output channel is the dot product of one row with the source colour, which is how a Commander’s HUD ends up teal without the game shipping a teal palette:
<GraphicsConfig>
<GUIColour>
<Default>
<LocalisationName>Standard</LocalisationName>
<MatrixRed> 0.35, 0.00, 0.00 </MatrixRed>
<MatrixGreen> 0.00, 0.80, 0.00 </MatrixGreen>
<MatrixBlue> 0.00, 0.20, 1.00 </MatrixBlue>
</Default>
</GUIColour>
</GraphicsConfig>
Zoom is a layout transform rather than a font-size change: it re-runs measure and arrange at the new scale, so text rewraps and padding grows with it. The zoomed content sits in a horizontally scrolling viewport, and the content is constrained to that viewport’s width divided by the scale — which is what gives the layout a width to wrap against at all. A scroll viewer that may scroll sideways measures its child with infinite width, and without the constraint nothing below it ever wraps: the transcript became one line as long as the longest thing D47 had said, and the window could be dragged wider forever without reaching the end of it.
Sideways scrolling is what is left for content that genuinely will not fit: the settings grid holds a minimum of 700 points, because below about 420 a row cannot keep its caption beside its control and the caption was squeezed to nothing while the control drew over it. A minimum beats the viewport constraint, so those rows push the scrollbar back out; the transcript, which has no minimum, simply rewraps.
The opening size is a proportion of the working area of the screen the window appears on — 55% of
its width and 75% of its height, floored so a small screen still gets a readable window — rather
than a fixed size written down once against somebody else’s monitor. It is then clamped to 90% of
that working area —
90% rather than 100% because a window filling the work area exactly reads as maximised. Size and
position live in view-state.json beside the executable and fail silently if unreadable.