156 lines
4.2 KiB
Go
156 lines
4.2 KiB
Go
package inc
|
|
|
|
// Themes — the game's two colour themes and its colour tokens.
|
|
//
|
|
// In canon the machines of this world are matte black with a green or amber
|
|
// character display, and in the Real World finale "the Nokia-punk texture
|
|
// breaks in" — with inkwell's runtime theme switching that beat is a single
|
|
// line (see UseTheme and scriptAwakeningFinale).
|
|
//
|
|
// The colour rule: tapes speak in amber (green in Nokia-punk), the world and
|
|
// Paul speak in bone white. If something is amber, a tape said it.
|
|
|
|
import (
|
|
"image/color"
|
|
|
|
inkwell "git.teletypegames.org/engines/inkwell"
|
|
)
|
|
|
|
// The two theme names. Runtime switching (inkwell UseTheme) refers to these.
|
|
const (
|
|
RealWorld = "realworld-93"
|
|
NokiaPunk = "nokia-punk"
|
|
)
|
|
|
|
// RGB builds an opaque colour from a hex literal.
|
|
func RGB(hex uint32) color.Color {
|
|
return color.RGBA{R: uint8(hex >> 16), G: uint8(hex >> 8), B: uint8(hex), A: 0xff}
|
|
}
|
|
|
|
// RGBA builds a colour with the given alpha from a hex literal.
|
|
func RGBA(hex uint32, a uint8) color.Color {
|
|
return color.RGBA{R: uint8(hex >> 16), G: uint8(hex >> 8), B: uint8(hex), A: a}
|
|
}
|
|
|
|
// realworld-93 — 95% of the game. Muted earth tones, black HUD, amber tape
|
|
// channel. The Neumatronic layer is not visible yet.
|
|
// The realworld-93 palette. Ink and Amber are the two sides of the two-channel
|
|
// colour rule: the world speaks in bone white, tapes speak in amber.
|
|
var (
|
|
Ink = RGB(0xDCD5C4) // bone white — the voice of the world and of Paul
|
|
InkDim = RGB(0x8A806B)
|
|
Amber = RGB(0xE0A33E) // tape voice
|
|
AmberLo = RGB(0xA8701A)
|
|
black = RGB(0x14120E)
|
|
panel = RGB(0x0D0B08)
|
|
sceneBG = RGB(0x241F18)
|
|
)
|
|
|
|
func realWorldTheme() inkwell.Theme {
|
|
return inkwell.Theme{
|
|
Name: RealWorld,
|
|
PanelBG: black,
|
|
StatusText: Ink,
|
|
FlashText: Amber,
|
|
|
|
VerbButtonBG: RGB(0x1E1A14),
|
|
VerbButtonSelectedBG: AmberLo,
|
|
VerbButtonText: Ink,
|
|
|
|
InventorySlotBG: RGB(0x1E1A14),
|
|
InventorySlotSelectedBG: AmberLo,
|
|
|
|
SpeechBubbleBG: RGBA(0x14120E, 0xDC),
|
|
SpeechDefaultText: Ink,
|
|
|
|
DialogBG: RGBA(0x0D0B08, 0xF0),
|
|
DialogBorder: AmberLo,
|
|
DialogChoiceBG: RGB(0x1E1A14),
|
|
DialogChoiceHover: Amber,
|
|
DialogSpeaker: Amber,
|
|
DialogText: Ink,
|
|
|
|
EndCardBG: RGBA(0x000000, 0xFA),
|
|
EndCardText: Ink,
|
|
|
|
CursorColor: Amber,
|
|
HotspotOutline: RGB(0x7A6A44),
|
|
SceneBackdrop: sceneBG,
|
|
|
|
TopBarBG: panel,
|
|
TopBarText: InkDim,
|
|
TopBarAccent: Amber,
|
|
|
|
ChatLogBG: panel,
|
|
ChatLogPrompt: InkDim, // your own actions — quiet
|
|
ChatLogResponse: Amber, // tape voice
|
|
ChatLogSystem: RGB(0x6B6353),
|
|
|
|
CharacterPanelBG: panel,
|
|
CharacterPanelBorder: AmberLo,
|
|
CharacterPanelTitle: Amber,
|
|
}
|
|
}
|
|
|
|
// nokia-punk — at peak decay, on BBS/ECHO terminals, and in the finale.
|
|
// Matte black and phosphor green: a tuned variant of the engine's
|
|
// terminal-green preset.
|
|
// The nokia-punk palette — phosphor green on black glass.
|
|
var (
|
|
Green = RGB(0x3BE86B)
|
|
GreenLo = RGB(0x1F7A39)
|
|
npBlack = RGB(0x030603)
|
|
)
|
|
|
|
func nokiaPunkTheme() inkwell.Theme {
|
|
return inkwell.Theme{
|
|
Name: NokiaPunk,
|
|
PanelBG: npBlack,
|
|
StatusText: Green,
|
|
FlashText: RGB(0xD8F06A),
|
|
|
|
VerbButtonBG: RGB(0x08140A),
|
|
VerbButtonSelectedBG: GreenLo,
|
|
VerbButtonText: Green,
|
|
|
|
InventorySlotBG: RGB(0x08140A),
|
|
InventorySlotSelectedBG: GreenLo,
|
|
|
|
SpeechBubbleBG: RGBA(0x030603, 0xDC),
|
|
SpeechDefaultText: Green,
|
|
|
|
DialogBG: RGBA(0x030603, 0xF0),
|
|
DialogBorder: Green,
|
|
DialogChoiceBG: RGB(0x08140A),
|
|
DialogChoiceHover: RGB(0xB4FFC8),
|
|
DialogSpeaker: RGB(0xB4FFC8),
|
|
DialogText: Green,
|
|
|
|
EndCardBG: RGBA(0x000000, 0xFA),
|
|
EndCardText: Green,
|
|
|
|
CursorColor: Green,
|
|
HotspotOutline: GreenLo,
|
|
SceneBackdrop: npBlack,
|
|
|
|
TopBarBG: RGB(0x061006),
|
|
TopBarText: GreenLo,
|
|
TopBarAccent: Green,
|
|
|
|
ChatLogBG: RGB(0x040A04),
|
|
ChatLogPrompt: GreenLo,
|
|
ChatLogResponse: Green,
|
|
ChatLogSystem: RGB(0x156030),
|
|
|
|
CharacterPanelBG: RGB(0x040A04),
|
|
CharacterPanelBorder: Green,
|
|
CharacterPanelTitle: RGB(0xB4FFC8),
|
|
}
|
|
}
|
|
|
|
// registerTheme adds both themes to the game.
|
|
func registerTheme(g *inkwell.Game) {
|
|
g.ThemeManager.Register(realWorldTheme())
|
|
g.ThemeManager.Register(nokiaPunkTheme())
|
|
}
|