Back to Sickman Survival
SOURCE / PINNED RELEASE

Made of little things.

Sickman Survival

Release
7335c9fdf0a8…
Author-recorded commit
cbd2eeafa70d…
License
LICENSE
Author’s source reference
nostr://npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr/wss%3A%2F%2Fgit.napplet.soy%2F/n-8804151df7f

Archive hash verified: 591bab4addcbe5fc…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

src/palette.ts
import {
  BEDROCK,
  BG_BEAM,
  BG_GLOW,
  BG_SHELF,
  BG_STEM,
  BG_TRUNK,
  BG_WALL,
  BG_WALL_ALT,
  BG_WINDOW,
  BG_WINDOW_DARK,
  BRICK,
  CAP,
  CRATE,
  DIRT,
  GRASS,
  LEAF,
  PLANK,
  ROOF,
  STONE,
} from './terrain.ts';

/**
 * "Dusk before impact": a warm, saturated sunset world with an ink-black hero.
 * Scene colors are app-owned and never follow the host theme.
 */
export const FG_COLORS: Record<number, number> = {
  [DIRT]: 0x7a4a2e,
  [GRASS]: 0x8fae3c,
  [STONE]: 0x6a5e78,
  [BEDROCK]: 0x2b2234,
  [BRICK]: 0xa8513e,
  [PLANK]: 0xc28a4f,
  [LEAF]: 0x3f7a46,
  [CAP]: 0xd8433a,
  [ROOF]: 0x4f3a68,
  [CRATE]: 0xb07a3c,
};

export const BG_COLORS: Record<number, number> = {
  [BG_WALL]: 0x4a3236,
  [BG_TRUNK]: 0x5a3a26,
  [BG_STEM]: 0xd9cbb0,
  [BG_WINDOW]: 0xffc865,
  [BG_WINDOW_DARK]: 0x2e2840,
  [BG_GLOW]: 0x9af5d6,
  [BG_BEAM]: 0x2e1c1c,
  [BG_WALL_ALT]: 0x3f3044,
  [BG_SHELF]: 0x6b3d3a,
};

/** Book spines on shelves, picked per cell from texture noise. */
export const BOOK_COLORS = [0x8a3b3b, 0x3f5a6e, 0x7a6a3a, 0x5e3f6e];

/** Earth back wall behind open cave cells, and the dark that closes in underground. */
export const CAVE_WALL = 0x3a2531;
export const CAVE_DARK = '12, 6, 16';
/** Cave fungus light: the one cool color in the world, so it reads as "underground". */
export const FUNGUS_GLOW = '120, 240, 205';

export const MOLE_FUR = '#5e4256';
export const MOLE_BELLY = '#9a7480';
export const MOLE_NOSE = '#ff8fa8';
export const MOLE_CLAW = '#f3dcc2';
export const MOLE_FLASH = '#fff1d6';
export const MOLE_EYE = '255, 92, 60';

export const CAP_SPOT = 0xf6ead2;
export const SCORCH = 0x1c1216;
export const INK = '#140e1a';
export const INK_RIM = 'rgba(255, 236, 210, 0.9)';
export const METEOR_CORE = '#fff4cf';
export const METEOR_GLOW = '255, 122, 47';
export const WARNING = '#ff4a3d';

export const SPARK_COLORS = [0xffe08a, 0xffa24a, 0xff6a2f, 0xfff4cf];
export const SMOKE_COLOR = 0x3a2a33;
export const DUST_COLOR = 0xd9b98a;

/** Sky gradient stops at calm (0) and at full storm (1). */
export const SKY_CALM = [0x2c1b45, 0x8a3b5c, 0xf08a4b, 0xffd28a];
export const SKY_STORM = [0x1a0d22, 0x6e1d2e, 0xd2482a, 0xff9a4a];
export const HILLS_FAR = 0x6e3a5e;
export const HILLS_NEAR = 0x4a2748;

export function mixColor(a: number, b: number, t: number): number {
  const r = ((a >> 16) & 255) + (((b >> 16) & 255) - ((a >> 16) & 255)) * t;
  const g = ((a >> 8) & 255) + (((b >> 8) & 255) - ((a >> 8) & 255)) * t;
  const bl = (a & 255) + ((b & 255) - (a & 255)) * t;
  return (Math.round(r) << 16) | (Math.round(g) << 8) | Math.round(bl);
}

export function css(color: number, alpha = 1): string {
  return `rgba(${(color >> 16) & 255}, ${(color >> 8) & 255}, ${color & 255}, ${alpha})`;
}

/** Split-screen player colours, by slot: bright against the dusk sky and the cave dark alike. */
export const PLAYER_COLORS = ['#ffd23f', '#4cc9f0', '#ff6b9a', '#7ae582'] as const;