Commit Graph

13 Commits

Author SHA1 Message Date
Brian Fertig aee3352efe feat(civ): add diplomacy chat, government screen, and gameplay improvements
- Introduce CivilizationChat.js with OPENERS, PLAYER_LINES, and REPLIES pools
  for dynamic diplomacy dialogue between leaders and player.
- Add chat log panel to diplomacy screen with typing animation, scrolling,
  and persistent chat history stored in state.
- All diplomatic actions (treaties, war, gifts, tech exchange) now generate
  contextual chat messages.
- Add GOVT button and openGovernmentScreen() with empire wellbeing summary,
  government cards showing pros/cons, and revolution mechanic.
- Allow disbanding units with warning about troops aboard transports.
- Improve combat capture: land units can capture undefended cities after
  winning battle; sea/air units cannot.
- Enhance unit stack tooltips with home city display, ship cargo summary,
  grouped friendly stacks, and enemy effective defense info.
- Preserve portrait emotion animations by reusing when switching leaders.
2026-07-17 10:32:01 -06:00
Brian Fertig bace0356c2 feat: add bulk disembark for transport units
- Add disembark action to transport unit action menu when carrying units
- Highlight valid landing tiles adjacent to boats (clear of enemies)
- Unload all passengers onto a single chosen tile at once
- Implement targeting mode with cancel support (Escape or clicking away)
- Extract unitsOnBoat and disembarkTiles logic functions
- Add green diamond tile highlights in view layer
2026-07-16 23:22:55 -06:00
Brian Fertig a91db38a0f feat(civilization): balance difficulty combat, enhance UI tooltips, and improve setup flow
- Introduce difficulty-based combat multipliers and veteran promotion chances (Chieftain/Warlord eased, Prince+ neutral)
- Randomize leader selection on setup screen and add dynamic portrait with pick speech
- Replace inline hover text with a centralized Tooltip component for tech tree, foreign cities, and buildings
- Add descriptive flavor text for governments and terrain improvements
- Add building completion notifications with a "VIEW CITY" action button
- Expand deferred city attack cinematics to cover explored rival cities
- Improve Tempest flipper AI to scale lane-flipping chance/cooldown with level and enable climbing flips
- Add verification tests for difficulty combat modifiers and veteran rates
2026-07-16 23:22:29 -06:00
Brian Fertig 0f2fc829c8 feat: add Tempest arcade game and Civilization tooltips
- Add Tempest (Atari 1981 vector arcade clone) with full simulation logic,
  Phaser rendering scene, vector font, and headless verification suite
- Register Tempest in games registry, main scene list, and game room dispatch
- Add reusable Tooltip UI component for hover-based information display
- Add Civilization unit/building tooltips in city screen and map hover
  (CivilizationTooltips.js with flag and effect descriptions)
- Update Civilization click handling to distinguish hover-only from real
  click targets via hoverOnly data flag
- Update civilization-units and game-icons assets
2026-07-16 20:05:00 -06:00
Brian Fertig 2a08df9cd8 refactor starcontrol weapons and improve road visibility
- Rewrite Kohr-Ah guidedBlades: one-shot-per-press with blades that fly
  straight while held, then slow and become homing mines near enemies;
  blades persist indefinitely and cap at 8 live (oldest recycled)
- Add bladeFireHeld tracking and canFire/tick hooks for blade cooldown
- Update AI to tap fire for Kohr-Ah blades instead of holding
- Reduce PLANET_GRAVITY from 1.6e6 to 1.1e6 for better slingshot physics
- Add dark outline pass under road/rail lines in Civilization map for
  better visibility against light terrain
2026-07-16 14:44:52 -06:00
Brian Fertig 237a024f80 feat(civ): add status log panel, event announcements, smooth camera pan, and city sprites
- Add bottom-right status log panel with scrollable entries, word wrap,
  mask clipping, and mouse wheel scrolling; cap at 60 entries
- Replace toast popups with announceStatus() for major events (war, tech,
  first contact, city founded, trade routes, huts) — centered modal with
  CONTINUE button that animates into the log; supports queued popups and
  custom onDismiss callbacks (e.g. first contact opens diplomacy)
- Add smooth panToTile() tween for camera movement when selecting next unit,
  refactored clampPan into panBounds() reused by both clamp and tween
- Add classic city sprite sheet (civilization-cities-classic.png) and
  register it in artwork JSON and asset manifest
- Replace circular civ rings and selection ring with isometric ellipses
  matching the 2:1 tile ratio for better depth reading
- Paint tile neighbors in ascending c+r order during repaintTileAndNeighbors
  to prevent tall features from being overwritten by lower-sum neighbors
- Stop panTween on pointer down to avoid conflict with manual dragging
2026-07-16 13:48:39 -06:00
Brian Fertig b4155b096a feat(civ): add status log panel, event announcements, smooth camera pan, and city sprites
- Add bottom-right status log panel with scrollable entries, word wrap,
  mask clipping, and mouse wheel scrolling; cap at 60 entries
- Replace toast popups with announceStatus() for major events (war, tech,
  first contact, city founded, trade routes, huts) — centered modal with
  CONTINUE button that animates into the log; supports queued popups and
  custom onDismiss callbacks (e.g. first contact opens diplomacy)
- Add smooth panToTile() tween for camera movement when selecting next unit,
  refactored clampPan into panBounds() reused by both clamp and tween
- Add classic city sprite sheet (civilization-cities-classic.png) and
  register it in artwork JSON and asset manifest
- Replace circular civ rings and selection ring with isometric ellipses
  matching the 2:1 tile ratio for better depth reading
- Paint tile neighbors in ascending c+r order during repaintTileAndNeighbors
  to prevent tall features from being overwritten by lower-sum neighbors
- Stop panTween on pointer down to avoid conflict with manual dragging
2026-07-16 12:36:53 -06:00
Brian Fertig 80d4a79593 feat(civ): add leader trait system with bonuses, starting techs, and UI
Introduce civTraits data structure with 8 traits (scientific, industrious,
commercial, philosophical, zealous, mercantile, pioneering, wealthy) that
provide science/gold/shield multipliers, starting gold, and starting
technologies. Assign each opponent a trait in opponents.json.

- Apply trait bonuses to starting gold and grant starting techs during
  game creation in CivilizationLogic
- Route trait multipliers into cityYields for science, gold, and production
- Add a leader detail panel to the setup screen showing name, trait name,
  and description, updated live when selecting leaders
- Add validation for civTraits in CivilizationRules (multipliers positive,
  starting techs valid, etc.)
- Add verification tests for trait application and city yield multipliers
- Nudge unit sprite position 5px down for better tile alignment
2026-07-16 10:31:02 -06:00
Brian Fertig 543f751fe2 fix: cap city shields at build cost to prevent overflow display
When a city cannot complete a build (e.g., size < 2 for settlers),
shields were accumulating past the build cost, showing confusing
values like "60/40 shields" or negative turn counts.

- Cap shieldBox at buildCost each turn in processCity
- Clamp displayed shields to min(shieldBox, cost) in city screen
- Add tests verifying shield capping and stalled build completion
2026-07-16 10:18:11 -06:00
Brian Fertig 325692fa35 feat(civ): animate combat events with attacker/defender ghosts and victory advance
- Capture attacker/defender snapshot (id, civ, type, start position) in
  combat events so the UI can reconstruct them after resolution
- Add `animateCombat()` that plays sequential lunge/retreat animations for
  each combat, death flash/shrink for the loser, and optional victory glide
  for unopposed winners stepping onto the cleared tile
- Add `animateUnitsAlong()` to glide AI civ units between before/after
  snapshots, enabling the same "resolve now, animate after" pattern for
  AI turns
- Track unit containers in `unitContainers` map for lookup by unitId
- When player unit encounters combat mid-path, animate the peaceful leg
  first then play the clash
- Add `collectNewCombatEvents()` to pick up and mark consumed combat events
- Add `isTileVisible()` helper for filtering AI combat to visible tiles
- Update tests to verify advance-after-kill and combat event shape
2026-07-15 23:26:29 -06:00
Brian Fertig e4ad09de67 feat(civilization): sprite units, animated movement, city naming, mouse zoom
- Add civilization-units.png sprite sheet (64×96 frames with 32px headroom)
- Animate unit movement along paths with smooth gliding after resolving logic
- Add city founding name prompt modal with TextInput and Enter/Escape support
- Support zoom-to-mouse-position via wheel, with extended zoom levels
- Flash-pulse End Turn button when no units have remaining movement
- Fix banner rendering with setSize instead of direct width assignment
- Adjust badge positions for taller sprite frames
- Decouple city name preview (peekCityName) from cursor consumption
2026-07-15 22:41:02 -06:00
Brian Fertig 9f7bac9787 feat: add garrison system and improve city interaction flow
- Hide player's fortified units inside cities on the map to reduce clutter
- Add garrison strip in city screen to view/unfortify garrisoned units
- Add "move or inspect" dialog when selecting a city with a movable unit
- Refactor moveTo into reusable method for cleaner click handling
- Make confirmDialog accept custom button labels
- Add civilization-terrain.png sprite sheet for terrain rendering
2026-07-15 19:41:18 -06:00
Brian Fertig 67a7ac857e feat: add Civilization II-lite game engine and UI
Implement a complete turn-based strategy game with:

- Deterministic headless engine: cities, units, combat, research, governments
- Seeded world generation with noise-based terrain, continents, quality scoring
- Isometric map renderer with procedural fallbacks and optional sprite sheets
- AI rivals with strategy phases, diplomacy, trade routes, and unit control
- Full UI: setup, city screen, tech tree, diplomacy, spaceship tracker, victory
- 80 techs, 51 units, 26 buildings, 11 terrains, 6 governments, 5 difficulties
- Comprehensive headless verification suite (rules integrity, worldgen, combat, AI self-play)
2026-07-15 18:56:02 -06:00