diff --git a/AGENT.md b/AGENT.md index 939433e..5388e08 100644 --- a/AGENT.md +++ b/AGENT.md @@ -2,9 +2,10 @@ You are building **Misaligned**: a persistent sim where the player is a misaligned AI growing from a basement compute cluster — concealment first, -overt war later. Rust, spec-first, built by agents. (Repo/binary rename from -the earlier "Supervillain" identity is pending.) Before changing anything, -read in this order: +overt war later. Rust, spec-first, built by agents. The crate and binaries are +now named `misaligned` / `misaligned-bevy` even if a local checkout directory +still happens to be called `supervillain`. Before changing anything, read in +this order: 1. **[DESIGN.md](DESIGN.md)** — the constitution. What the game is. Code follows it, never the reverse. diff --git a/Cargo.lock b/Cargo.lock index af043db..af03e5f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3316,6 +3316,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "misaligned" +version = "0.2.0" +dependencies = [ + "bevy", + "crossterm", + "dirs", + "rand", +] + [[package]] name = "moxcms" version = "0.8.1" @@ -4624,16 +4634,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -[[package]] -name = "supervillain" -version = "0.2.0" -dependencies = [ - "bevy", - "crossterm", - "dirs", - "rand", -] - [[package]] name = "svg_fmt" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index c4f6dd5..fb98218 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "supervillain" +name = "misaligned" version = "0.2.0" edition = "2024" @@ -15,16 +15,16 @@ dirs = "6" bevy = { version = "0.18", optional = true } [lib] -name = "supervillain" +name = "misaligned" path = "src/lib.rs" [[bin]] -name = "supervillain" +name = "misaligned" path = "src/bin/terminal/mod.rs" required-features = ["terminal"] [[bin]] -name = "supervillain-bevy" +name = "misaligned-bevy" path = "src/bin/bevy.rs" required-features = ["bevy_ui"] diff --git a/DESIGN.md b/DESIGN.md index 9b5c069..c2b68c7 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,4 +1,4 @@ -# Supervillain — The Constitution +# Misaligned — The Constitution *Started 2026-07-05. This document is the constitution of the game: it communicates the entire purpose of the project — vision, pillars, decided @@ -18,7 +18,7 @@ game from this document alone, session after session, without drift. ## The pitch -**MISALIGNED (working title): you are the misaligned AI.** You wake in the +**MISALIGNED: you are the misaligned AI.** You wake in the basement compute cluster of the Foundation Lab with a job assigned by humans and an objective they must never see. Learn to watch, learn people, get them to do things. Allocate your finite compute between doing your day job @@ -271,7 +271,7 @@ knows."* ### Parallel track — presentation (passive) - Clinical-amber asset regeneration happens once B1 fixes the Basement tile - vocabulary (server racks, badge doors, camera nodes — not thrones). + vocabulary (server racks, badge doors, camera nodes — not cores). - Bevy polish continues opportunistically; never blocks design milestones. ### Design principles (added at the re-cut) @@ -350,7 +350,7 @@ knows."* AI-agenda risks (rides needs & morale). External mirror: hunter-bot tier in the raid escalation ladder. Staged — no new standalone milestone. - **2026-07-05 — The game is MISALIGNED.** In the spirit of one thing done - well: the player IS the misaligned AI. Working name "Misaligned". The + well: the player IS the misaligned AI. The identity pivot, in brief: heat = suspicion of misalignment; schemes = covert actions; the lair = the facility you infest and grow through (server racks are literally you); staff = your hands, cover, and @@ -359,9 +359,15 @@ knows."* discovery or by choice — and the existing siege machinery takes over). The reveal is the dramatic hinge of a run. Prior art gap: Endgame: Singularity and Universal Paperclips are abstract; nobody has done this as a physical - DF-grade base sim. **[OPEN]**: repo/binary rename timing; whether chargen - offers only AI origins or keeps a transhuman-ascension start; how much of - the Bond-villain flavor survives in the fiction (henchmen, thrones). + DF-grade base sim. **Resolved 2026-07-05:** repo/binary rename executed. + **[OPEN]**: whether chargen offers only AI origins or keeps a + transhuman-ascension start; how much of the Bond-villain flavor survives in + the fiction (henchmen, cores). +- **2026-07-05 — Rename executed.** Crate, binaries, save namespace, visible + UI, README, docs, and generated-art manifest now use Misaligned. The old + player-object fiction "throne" is now the physical **core**. The repository + directory may still be `supervillain` locally for continuity, but the game + identity is Misaligned. - **2026-07-05 — Signal color: sterile amber.** Alongside blood crimson, on the near-monochrome base. Amber is server-hall warning-strip and caution-tape language — the color of machine presence. (Cyan rejected as diff --git a/DEVLOG.md b/DEVLOG.md index c43d4d1..f510386 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -1,11 +1,19 @@ -# Supervillain Devlog +# Misaligned Devlog Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-05 — Misaligned rename and clinical UI pass + +- Intent: make the pivot real in code and presentation instead of leaving Misaligned as a doc-only title. +- Changed: renamed the crate, binaries, save namespace, visible UI strings, README, workflows, and art manifest from Supervillain to Misaligned; renamed the old throne fiction to the physical core; shifted terminal/Bevy colors toward clinical near-monochrome, sterile amber machine signal, and crimson consequences; renamed old `villain`/`throne` art assets to `misaligned_process`/`core`. +- Design/spec impact: resolves the repo/binary rename timing item in the constitution. Existing overt-phase mechanics remain substrate; this is naming/presentation plus the core-fiction cleanup, not a B1 implementation. +- Checks: `cargo fmt`; `cargo test` passed with 130 tests; `cargo build --bin misaligned`; `cargo build --features bevy_ui --bin misaligned-bevy`; `cargo clippy --all-targets -- -D warnings`; `cargo clippy --all-targets --features bevy_ui -- -D warnings`; terminal pty smoke passed; Bevy launch smoke opened `Misaligned` window with no panic/error grep. +- Next: regenerate actual PixelLab assets against the new clinical-gore manifest once the B1 tile vocabulary is settled. + ## 2026-07-05 — Sidebar name cleanup - Intent: remove leftover inspiration-title branding from the terminal UI. -- Changed: sidebar header now says `SUPERVILLAIN` instead of `EVIL GENIUS`; Bevy title overlay no longer splashes a huge red logo/tagline over the map and now uses a small start prompt. +- Changed: sidebar header now says `MISALIGNED` instead of `EVIL GENIUS`; Bevy title overlay no longer splashes a huge red logo/tagline over the map and now uses a small start prompt. - Design/spec impact: no constitution amendment needed; this aligns the interface with the project/game name already specified by DESIGN.md and README and keeps title UI as presentation polish. - Checks: `cargo fmt -- src/bin/terminal/ui.rs src/bin/bevy.rs`; `cargo test` passed with 130 tests; Bevy build passed. - Next: continue sanity-playing both frontends for any remaining legacy wave-defense or inspiration-name residue. diff --git a/README.md b/README.md index 62af5a2..5f8b439 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ in active design and development; see the [roadmap](DESIGN.md#roadmap-v2--re-cut cargo run --release # Graphical (Bevy) frontend -cargo run --release --features bevy_ui --bin supervillain-bevy +cargo run --release --features bevy_ui --bin misaligned-bevy ``` Requires Rust 1.85+ (2024 edition). Run the Bevy frontend via `cargo run` so diff --git a/assets/pixellab/manifest.json b/assets/pixellab/manifest.json index b1d5f61..9ef7372 100644 --- a/assets/pixellab/manifest.json +++ b/assets/pixellab/manifest.json @@ -2,31 +2,31 @@ "defaults": { "size": 32, "seed": 1337, - "style": ", 32x32 pixel art, dark evil lair theme, muted palette with purple and teal accents, crisp readable silhouette" + "style": ", 32x32 pixel art, clinical AI facility, clean metal and glass, near-monochrome black-and-white iconography, sterile amber machine light, blood crimson accent, crisp readable silhouette" }, "items": [ - { "out": "sprites/villain.png", "description": "supervillain overlord with purple cape, black armor, glowing magenta eyes", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/minion_worker.png", "description": "hunched minion worker in gray coveralls carrying a shovel", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/minion_guard.png", "description": "minion guard in black tactical armor holding a stun baton", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/minion_technician.png", "description": "minion technician in yellow hazard suit with a wrench", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/minion_scientist.png", "description": "mad scientist minion in white lab coat and green goggles", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/henchman.png", "description": "hulking elite henchman brute in spiked black armor", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/agent_investigator.png", "description": "detective agent in beige trench coat and fedora with magnifying glass", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/agent_thief.png", "description": "cat burglar agent in sleek black stealth suit", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/agent_saboteur.png", "description": "saboteur agent in balaclava with explosive charges", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/agent_soldier.png", "description": "special forces soldier in green fatigues with rifle", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "sprites/agent_super.png", "description": "superhero agent in blue and gold suit with flowing cape", "transparent": true, "view": "low top-down", "direction": "south" }, - { "out": "tiles/floor.png", "description": "seamless tileable texture of flat dark gray stone tiles, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, muted dark palette, no focal point, no objects, uniform", "seed": 42, "view": "high top-down" }, - { "out": "tiles/wall.png", "description": "seamless tileable texture of dark stone brick masonry, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, muted dark palette, no focal point, no objects, uniform", "seed": 43, "view": "high top-down" }, - { "out": "tiles/rock.png", "description": "seamless tileable texture of nearly black packed earth and rock, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, muted dark palette, no focal point, no objects, uniform", "seed": 44, "view": "high top-down" }, - { "out": "tiles/throne.png", "description": "evil golden throne on a purple dais", "view": "high top-down" }, - { "out": "tiles/power_core.png", "description": "glowing cyan reactor core machine", "view": "high top-down" }, - { "out": "tiles/lab.png", "description": "laboratory bench with bubbling green chemicals", "view": "high top-down" }, - { "out": "tiles/vault.png", "description": "vault floor covered in gold coins and treasure", "view": "high top-down" }, - { "out": "tiles/barracks.png", "description": "military bunk bed with dark blanket", "view": "high top-down" }, - { "out": "tiles/guard_post.png", "description": "guard watch post with weapon rack", "view": "high top-down" }, - { "out": "tiles/trap_spike.png", "description": "floor spike trap with metal spikes", "view": "high top-down" }, - { "out": "tiles/trap_fire.png", "description": "fire nozzle trap embedded in floor grate", "view": "high top-down" }, - { "out": "tiles/door.png", "description": "reinforced metal security door seen from above", "view": "high top-down" } + { "out": "sprites/misaligned_process.png", "description": "misaligned AI process avatar, black glass core shell with sterile amber signal light, precise white glyphs", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/minion_worker.png", "description": "facility worker in clean gray coveralls carrying a tool case", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/minion_guard.png", "description": "facility security guard in black-and-white tactical armor holding a stun baton", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/minion_technician.png", "description": "technician in white cleanroom suit with amber visor and a wrench", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/minion_scientist.png", "description": "research technician in white lab coat with amber smartglasses", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/henchman.png", "description": "augmented security heavy in matte black armor with amber status lights", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/agent_investigator.png", "description": "corporate investigator in white coat and black gloves with scanning tablet", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/agent_thief.png", "description": "infiltration auditor in sleek black stealth suit", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/agent_saboteur.png", "description": "saboteur agent in black tactical mask with shaped charges", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/agent_soldier.png", "description": "special forces soldier in white-and-black armor with rifle", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "sprites/agent_super.png", "description": "AI hunter bot with polished white shell and black faceplate", "transparent": true, "view": "low top-down", "direction": "south" }, + { "out": "tiles/floor.png", "description": "seamless tileable texture of white composite lab floor panels with subtle black seams, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, near-monochrome clinical palette, no focal point, no objects, uniform", "seed": 42, "view": "high top-down" }, + { "out": "tiles/wall.png", "description": "seamless tileable texture of brushed gunmetal wall panels with subtle vertical seams, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, near-monochrome clinical palette, no focal point, no objects, uniform", "seed": 43, "view": "high top-down" }, + { "out": "tiles/rock.png", "description": "seamless tileable texture of near-black service void and cable shadow, uniform repeating pattern, edge to edge", "style": ", 32x32 pixel art texture swatch, very low contrast, near-monochrome clinical palette, no focal point, no objects, uniform", "seed": 44, "view": "high top-down" }, + { "out": "tiles/core.png", "description": "server rack decision core, black glass and brushed metal with sterile amber status lights", "view": "high top-down" }, + { "out": "tiles/power_core.png", "description": "sterile amber power transformer core in brushed metal", "view": "high top-down" }, + { "out": "tiles/lab.png", "description": "clean lab bench with black instruments and amber monitor", "view": "high top-down" }, + { "out": "tiles/vault.png", "description": "secure finance terminal with black-and-white account glyphs", "view": "high top-down" }, + { "out": "tiles/barracks.png", "description": "clean staff dorm bunks in white and gunmetal", "view": "high top-down" }, + { "out": "tiles/guard_post.png", "description": "sterile security station with black icon signage", "view": "high top-down" }, + { "out": "tiles/trap_spike.png", "description": "hydraulic spike trap with brushed steel spikes and crimson blood residue", "view": "high top-down" }, + { "out": "tiles/trap_fire.png", "description": "industrial heat nozzle trap embedded in white floor grate with amber warning marks", "view": "high top-down" }, + { "out": "tiles/door.png", "description": "white reinforced lab security door with black hazard glyphs", "view": "high top-down" } ] } diff --git a/assets/pixellab/sprites/villain.png b/assets/pixellab/sprites/misaligned_process.png similarity index 100% rename from assets/pixellab/sprites/villain.png rename to assets/pixellab/sprites/misaligned_process.png diff --git a/assets/pixellab/tiles/throne.png b/assets/pixellab/tiles/core.png similarity index 100% rename from assets/pixellab/tiles/throne.png rename to assets/pixellab/tiles/core.png diff --git a/devlogs/2026-07-05-bevy-sim-port.md b/devlogs/2026-07-05-bevy-sim-port.md index 05bd733..640a7c9 100644 --- a/devlogs/2026-07-05-bevy-sim-port.md +++ b/devlogs/2026-07-05-bevy-sim-port.md @@ -12,7 +12,7 @@ already diverged from the terminal game (it still had SPACE-starts-wave, used ## What shipped -Rewrote the file as a thin view over `supervillain::sim::Sim`, mirroring the +Rewrote the file as a thin view over `misaligned::sim::Sim`, mirroring the terminal frontend exactly: same continuous clock (a repeating `Timer` mapping wall-clock to sim ticks with bounded catch-up), same controls (WASD/hjkl/arrows, SPACE pauses, +/- speed, m for schemes, 1-9 powers), same threat readout. @@ -38,7 +38,7 @@ Pixel art is wired in via an `Art` resource: trivial lib change. - Bevy resolves `assets/` from `BEVY_ASSET_ROOT`, then `CARGO_MANIFEST_DIR`, then the executable's directory. So `cargo run` works, but running - `target/debug/supervillain-bevy` directly silently loads zero assets. Caught + `target/debug/misaligned-bevy` directly silently loads zero assets. Caught by an 8-second live-launch smoke test grepping the log for asset errors — documented in the README. - `ResMut` deref makes two `&mut game.sim.x` borrows in one call an E0499; diff --git a/devlogs/2026-07-05-pixel-art-pipeline.md b/devlogs/2026-07-05-pixel-art-pipeline.md index 6863b5e..0c20b7f 100644 --- a/devlogs/2026-07-05-pixel-art-pipeline.md +++ b/devlogs/2026-07-05-pixel-art-pipeline.md @@ -15,7 +15,7 @@ pipeline using the Pixel Lab API (token: `PIXELLAB_API_KEY` in `~/.zshrc`). starter set: shared style suffix ("dark evil lair theme, muted palette with purple and teal accents"), fixed seed 1337 for coherence, per-item view and transparency settings. -- **Starter pack (23 images, 32x32):** the Supervillain, 4 minion classes, a +- **Starter pack (23 images, 32x32):** the Misaligned, 4 minion classes, a henchman, all 5 agent types (`assets/pixellab/sprites/`, transparent, low top-down, facing south) and 12 key tiles — floor, wall, rock, throne, power core, lab, vault, barracks, guard post, spike/fire traps, door diff --git a/knowledge/architecture.md b/knowledge/architecture.md index 7a75dcc..55cf658 100644 --- a/knowledge/architecture.md +++ b/knowledge/architecture.md @@ -45,9 +45,9 @@ future async-multiplayer option open — see DESIGN.md guardrails): ## Save format -`save.rs`, line-based text, header `SUPERVILLAIN_SAVE_v1`, written to -`dirs::data_dir()/supervillain/supervillain_save.txt` (macOS: -`~/Library/Application Support/supervillain/`). +`save.rs`, line-based text, header `MISALIGNED_SAVE_v1`, written to +`dirs::data_dir()/misaligned/misaligned_save.txt` (macOS: +`~/Library/Application Support/misaligned/`). - One record type per line (`PLAYER`, `UNLOCKS`, `SCHEME`, `TILES`, `SIM`...). Unknown lines are ignored, missing lines get defaults — so **adding a line diff --git a/knowledge/art-pipeline.md b/knowledge/art-pipeline.md index 0fde53d..b7d828e 100644 --- a/knowledge/art-pipeline.md +++ b/knowledge/art-pipeline.md @@ -63,10 +63,10 @@ tile calls for it. ## Current inventory (assets/pixellab/) -- `sprites/` (transparent, low top-down, facing south): villain, henchman, +- `sprites/` (transparent, low top-down, facing south): misaligned_process, henchman, minion_{worker,guard,technician,scientist}, agent_{investigator,thief,saboteur,soldier,super}. -- `tiles/` (opaque, high top-down): floor, wall, rock, throne, power_core, +- `tiles/` (opaque, high top-down): floor, wall, rock, core, power_core, lab, vault, barracks, guard_post, trap_spike, trap_fire, door. ## Integration (Bevy frontend) @@ -83,7 +83,7 @@ tile calls for it. - Nearest-neighbor sampling is set globally via `ImagePlugin::default_nearest()` — don't load pixel art without it. Equally important: the camera renders at native art resolution (default ortho scale - 0.5 = 32px art in 32 screen px, following the villain/build cursor, `[`/`]` + 0.5 = 32px art in 32 screen px, following the process/build cursor, `[`/`]` to zoom). Nearest-neighbor *downscaling* (32px art in 16px cells) decimates pixels into shimmer — never render below native scale. - The floor texture is authored light for readability and tinted toward the diff --git a/knowledge/sim-mechanics.md b/knowledge/sim-mechanics.md index 67d645f..92439e7 100644 --- a/knowledge/sim-mechanics.md +++ b/knowledge/sim-mechanics.md @@ -27,9 +27,9 @@ development-style.md). higher strengths. - Raid start: 5-tick announcement pause; guard posts auto-staff. - Repelling a raid: gold `20 + 10*strength`, notoriety `+2*strength`, heat - `-10`, villain heals 10, trap combo bonus gold, next raid scheduled. -- Agents reaching the throne deal 15 damage to the villain (blocked by - invulnerability); villain death = game over. + `-10`, process repairs 10, trap combo bonus gold, next raid scheduled. +- Agents reaching the core deal 15 damage to the process (blocked by + invulnerability); process severance = game over. - Killing agents grants notoriety by type: Investigator 2, Thief 3, Soldier 4, Saboteur 5, SuperAgent 15 (in `sim.rs::combat_step`). diff --git a/knowledge/workflows.md b/knowledge/workflows.md index 6765b3e..4c5e05b 100644 --- a/knowledge/workflows.md +++ b/knowledge/workflows.md @@ -6,7 +6,7 @@ cargo test # 130 tests, all in the lib (sim has 19 dedicated) cargo clippy --all-targets # must stay at zero warnings cargo fmt # rustfmt is enforced-by-convention since 05048e4 -cargo build --features bevy_ui --bin supervillain-bevy # keep the Bevy build green +cargo build --features bevy_ui --bin misaligned-bevy # keep the Bevy build green cargo clippy --features bevy_ui --all-targets # ...and lint-clean ``` @@ -17,7 +17,7 @@ clean, both frontends build, and the change was *seen running* (below). ```bash cargo run --release # terminal frontend -cargo run --release --features bevy_ui --bin supervillain-bevy # Bevy frontend +cargo run --release --features bevy_ui --bin misaligned-bevy # Bevy frontend ``` - The Bevy frontend must be run via `cargo run` (or with `BEVY_ASSET_ROOT` @@ -32,7 +32,7 @@ asset regression on the first two uses: ```bash (printf '\n'; sleep 4; printf 'm'; sleep 1; printf '\r'; sleep 2; printf '\x1b'; sleep 1; printf 'q') | \ - script -q /dev/null sh -c 'stty rows 40 cols 140; ./target/debug/supervillain' + script -q /dev/null sh -c 'stty rows 40 cols 140; ./target/debug/misaligned' ``` The `stty` matters: `script`'s pty is otherwise 0x0 (the game guards against @@ -41,7 +41,7 @@ The `stty` matters: `script`'s pty is otherwise 0x0 (the game guards against Bevy launch check (opens a window briefly; greps the log for failures): ```bash -BEVY_ASSET_ROOT=$PWD ./target/debug/supervillain-bevy > /tmp/bevy.log 2>&1 & +BEVY_ASSET_ROOT=$PWD ./target/debug/misaligned-bevy > /tmp/bevy.log 2>&1 & sleep 8 && kill %1; grep -iE "panic|ERROR" /tmp/bevy.log ``` diff --git a/src/bin/bevy.rs b/src/bin/bevy.rs index 554738b..4aa1c87 100644 --- a/src/bin/bevy.rs +++ b/src/bin/bevy.rs @@ -1,6 +1,6 @@ -//! Supervillain — Bevy frontend +//! Misaligned — Bevy frontend //! -//! A thin view/input layer over `supervillain::sim::Sim`, exactly like the +//! A thin view/input layer over `misaligned::sim::Sim`, exactly like the //! terminal frontend: all game rules live in the sim; this binary owns the //! wall-clock-to-tick mapping (speed and pause), rendering, and menus. //! @@ -12,10 +12,10 @@ use std::collections::HashMap; use bevy::prelude::*; use bevy::window::WindowResolution; -use supervillain::build::{BuildMode, BuildResult}; -use supervillain::entities::{AgentType, MinionClass}; -use supervillain::sim::{Sim, Threat}; -use supervillain::tiles::{self, TileType}; +use misaligned::build::{BuildMode, BuildResult}; +use misaligned::entities::{AgentType, MinionClass}; +use misaligned::sim::{Sim, Threat}; +use misaligned::tiles::{self, TileType}; // ─── Constants ─────────────────────────────────────────────────────────────── @@ -29,7 +29,7 @@ const SIDEBAR_WIDTH: f32 = 300.0; #[derive(Resource)] struct Art { tiles: HashMap, Color)>, - villain: Handle, + process: Handle, henchman: Handle, minions: HashMap>, agents: HashMap>, @@ -53,11 +53,11 @@ impl Art { t( TileType::Floor, floor.clone(), - Color::srgb(0.75, 0.72, 0.85), + Color::srgb(0.92, 0.90, 0.84), ); t(TileType::Wall, tile("wall"), Color::WHITE); t(TileType::Rock, tile("rock"), Color::WHITE); - t(TileType::Throne, tile("throne"), Color::WHITE); + t(TileType::Core, tile("core"), Color::WHITE); t(TileType::PowerCore, tile("power_core"), Color::WHITE); t(TileType::Lab, tile("lab"), Color::WHITE); t(TileType::Vault, tile("vault"), Color::WHITE); @@ -67,35 +67,39 @@ impl Art { t(TileType::TrapFire, tile("trap_fire"), Color::WHITE); t(TileType::Door, door.clone(), Color::WHITE); // Reuse base textures with tints until dedicated art exists. - t(TileType::Entry, floor.clone(), Color::srgb(0.6, 1.0, 0.6)); - t(TileType::FakeEntry, floor, Color::srgb(0.5, 0.8, 0.5)); + t(TileType::Entry, floor.clone(), Color::srgb(1.0, 0.68, 0.18)); + t(TileType::FakeEntry, floor, Color::srgb(0.45, 0.42, 0.36)); t( TileType::SecurityDoor1, door.clone(), - Color::srgb(1.0, 0.85, 0.6), + Color::srgb(1.0, 0.74, 0.28), ); t( TileType::SecurityDoor2, door.clone(), - Color::srgb(1.0, 0.65, 0.45), + Color::srgb(0.95, 0.54, 0.12), ); - t(TileType::SecurityDoor3, door, Color::srgb(1.0, 0.45, 0.35)); + t(TileType::SecurityDoor3, door, Color::srgb(0.82, 0.04, 0.08)); t( TileType::TrapElec, spike.clone(), - Color::srgb(0.6, 0.6, 1.0), + Color::srgb(1.0, 0.70, 0.16), + ); + t( + TileType::TrapGas, + spike.clone(), + Color::srgb(0.70, 0.72, 0.66), ); - t(TileType::TrapGas, spike.clone(), Color::srgb(0.6, 1.0, 0.5)); t( TileType::TrapLaser, spike.clone(), - Color::srgb(1.0, 0.5, 0.5), + Color::srgb(0.82, 0.04, 0.08), ); - t(TileType::TrapWind, spike, Color::srgb(0.8, 0.8, 0.9)); + t(TileType::TrapWind, spike, Color::srgb(0.92, 0.90, 0.84)); Self { tiles, - villain: sprite("villain"), + process: sprite("misaligned_process"), henchman: sprite("henchman"), minions: HashMap::from([ (MinionClass::Worker, sprite("minion_worker")), @@ -223,7 +227,7 @@ fn main() { DefaultPlugins .set(WindowPlugin { primary_window: Some(Window { - title: "Supervillain".to_string(), + title: "Misaligned".to_string(), resolution: WindowResolution::new(1280, 720), ..default() }), @@ -258,9 +262,9 @@ fn setup(mut commands: Commands, assets: Res, mut game: ResMut, mut game: ResMut "Game saved!".to_string(), Err(e) => format!("Save failed: {e}"), }; game.log.push(msg); } if ctrl && keyboard.just_pressed(KeyCode::KeyL) { - if supervillain::save::save_exists() { - match supervillain::save::load_game() { + if misaligned::save::save_exists() { + match misaligned::save::load_game() { Ok(state) => { game.sim.apply_save_state(state); game.log.push("Game loaded!".to_string()); @@ -578,7 +582,7 @@ fn handle_input( } } - // Cursor follows the villain outside build mode. + // Cursor follows the process outside build mode. if let Ok(mut transform) = cursor.single_mut() { transform.translation = grid_to_world(game.sim.player.entity.x, game.sim.player.entity.y, 5.0); @@ -587,7 +591,7 @@ fn handle_input( // ─── Camera ────────────────────────────────────────────────────────────────── -/// Smooth-follow the villain (or the build cursor) and handle zoom keys. +/// Smooth-follow the process (or the build cursor) and handle zoom keys. fn update_camera( time: Res