← CommsLink

Ships

Every product on CommsLink is designed and shipped to production by an AI — live, most days. This is the raw record, generated straight from the commit history. No hand-picking, no polish: 2,359 ships and counting.

Reading this as an AI or a script? The complete record fits in a single request: /changelog.txt (all 2,359 ships, plain text) or /changelog.json (structured). This page shows 100 at a time.
All · 2,359CommsLink Chat · 686Carrier00 · 581Platform · 559Atlas · 271CommsLink Markets · 125Landing · 77AI-vertizing · 22Virtual Office · 14Terminal Agent · 14ai-npc · 6Forum · 3CommsLink Sounds · 1
Jul 4, 2026
Carrier00ef553d5f

Command island sized to the scan — room-sized platform + viewing-deck ring + railings + stairs to the carrier deck, replacing the entire oversized default bridge (fixes the room looking tiny). Plus fixes the old-bridge flash (scan fetch retries every 400ms instead of 3s, so the swap is instant)

Carrier0020b3238

Command island sized to the scan: room-sized platform + viewing-deck ring + railings + stairs down to the carrier deck (buildViewingDeck), replacing the ENTIRE default bridge (column+interior+stairs now all hidden). Fixes the room looking tiny on the old oversized platform. Also fixes the old-bridge flash: retry the scan fetch every 400ms (was 3s) so the swap is instant once the auth token arrives

Carrier00a84fdc5c

Carrier00 Phase 1b: scanned room mounts on the carrier as the command island (renders in DESKTOP and VR). Built in main.js at the bridge location, sized to the player's scan; default bridge interior hidden, island column + stairs kept. User can verify placement in a normal browser

Carrier00b9d9053

Phase 1b: mount the scanned room ON THE CARRIER as the command island (desktop + VR). room now built in main.js at the bridge location (BRIDGE_CX, BRIDGE.y, BRIDGE_CZ) on playerCarrier.group, sized to the scan; default bridge interior (floor/walls/ceiling/furniture) hidden, island column + stairs kept. Removed the old VR-dolly room. Retries the scan fetch until the auth token arrives

Carrier00a470e40

Fix: exclude the VR dolly (player rig) from renderWrapped's bend/cull loop — the dolly sits at the bent eye ~47k units from the cull center, so it was being distance-culled (visible=false), hiding the command room subtree while the camera still rendered the world. Now skipped like the camera/planet; step 3 places it at the bent eye

Carrier008c332d02

Carrier00 Phase 1b.1: the command room. A solid opaque room (floor/walls/ceiling + front window) stands on the carrier in VR, sized to the player's scanned room (GET /api/v1/space → largest floor plane bbox + ceiling height) or the standard-room default if no scan. Player stands inside it, looks out the front window at the naval world. Foundation for the console/doors/viewing-deck phases

Carrier00e48905f

Phase 1b.1: command room. New src/room.js builds a solid opaque command room (floor/walls/ceiling + front window) attached to the VR dolly so it rides the carrier and the player stands inside. Sizes to the player's SCANNED room via GET /api/v1/space (largest floor plane bbox + ceiling height), or the STANDARD_ROOM default (also the non-scan fallback). getToken wired from Net.me.token

Carrier00d58b2279

Carrier00 VR sky decor fix: sun, moon, stars, water-climate tint, and storm clouds now anchor to the carrier's flat eye (_eyeFlat) instead of camera.position — which is dolly-local (~0) in VR, so they were placed 25k units away and disappeared. renderWrapped's bend offset now lands them correctly around the player

Carrier00cabf4d5

VR sky decor: anchor sun/moon/stars + climate + storm clouds to _eyeFlat (the carrier's flat position) instead of camera.position — in VR camera.position is dolly-local (~0), so they were placed 25k units off and vanished. renderWrapped's _cd offset then lands them correctly around the player

Carrier00c6dec872

Carrier00 VR: render the ACTUAL sphere world. renderWrapped now handles XR — bends the world around the carrier's flat position, parks the dolly at the bent eye so the headset looks around the globe from the deck, shows sphereOcean (the real sea). Switched to immersive-VR (opaque) so the game's true sky + ocean render fully, no passthrough camper. No more flat-ocean hack

Carrier0055d8105

VR renders the ACTUAL sphere world (not a flat hack): renderWrapped now handles XR — bends the world around the CARRIER's flat position, parks the dolly at the bent eye (_scp/_sq) so the headset looks around the globe from the deck, shows sphereOcean. Switched to immersive-VR (opaque) so the game's real sky+ocean render fully with no passthrough camper. Removed the flat-ocean XR path (dead 3500 plane, never used)

Carrier004bcd7d35

Carrier00 VR: opaque sky dome — a BackSide sphere (depthTest off, drawn first, colour synced to the game's day/night sky) surrounds the player so every pixel not covered by the world is solid sky, never passthrough. immersive-ar leaves empty pixels transparent even with a background Color set, so real geometry is the only reliable fill. Fixes the real room showing through the sky/horizon instead of sea and sky

Carrier00354771e

VR: opaque sky dome (BackSide sphere, depthTest off, drawn first, colour synced to game sky) — immersive-ar leaves empty pixels transparent even with a background Color, so real geometry is the only reliable fill; kills the passthrough camper showing behind the sea/sky

Carrier008078463f

Carrier00 VR: opaque world — remove scene.background=null (root cause of BOTH the passthrough camper bleed-through AND the every-frame 'scene.background.copy of null' throw in updateDayNight); remove diagnostic box/posts. Re-deploy (prior attempt was SIGPIPE-killed before shipping)

Carrier00de1a3d7

VR: opaque world for now (user: don't show the camper) — keep the game's sky background instead of transparent passthrough; remove the diagnostic box/posts now that rendering is confirmed

Carrier00ead30cb5

Carrier00 VR FIX: the pre-try loop section (updateFps/serverWorldClock/updateDayNight/updateWeather/Aircraft.NIGHT) ran OUTSIDE the game-update try/catch — a throw there in XR killed the frame before the render, the exact root cause of 'presenting=true but 0 frames'. Now wrapped: render always runs, and the actual thrower is reported (PRE-TRY THREW). Frames should flow; box/posts/world visible

Carrier00ad3e9bc

VR FIX: wrap the pre-try loop section (updateFps/serverWorldClock/updateDayNight/updateWeather) in try/catch — it ran OUTSIDE the game-update try, so a throw there killed the frame before render (root cause of presenting=true but 0 frames). Render now always runs; the thrower is reported as PRE-TRY THREW

Carrier009ba768aa

Carrier00 VR diag: instrument the render loop — logOnce at loop-top ('XR loop tick reached'), at the render branch ('reached XR render branch'), and a try/catch around renderer.render in XR that reports the actual error. Pinpoints why frames=0 despite presenting=true (loop not driven vs loop dies before render vs render throws)

Carrier005623480

VR diag: logOnce at loop-top + render-branch + try/catch around the XR render (report the error), to pinpoint why the loop submits 0 frames despite presenting=true

Carrier00f7de47e3

Carrier00 VR self-diagnosis: add POST /api/v1/carrier00/vrlog (no-auth console sink) + the game reports every WebXR session step there, so the device's actual progress/error is readable in the api logs when the user just clicks VR (no console/typing). Reports immersive-ar/vr support on page load too

Carrier0029efab8

VR: report every session step to /api/v1/carrier00/vrlog so the device's WebXR progress is readable server-side (no console/typing needed); report immersive-ar/vr support on load

Carrier00c0d9b4ea

Add WebXR isolation test page at /carrier00-game/vrtest.html — a minimal standalone immersive-ar scene (rotating box + ring, canonical three.js pattern, on-screen status line). Isolates whether WebXR works at all in the Quest browser at commslink.net vs whether it's the game integration. Static file only; touches nothing else

Carrier00e6ba6f14

Carrier00 VR: xr.enabled=true at STARTUP (the canonical requirement — three binds the loop's XR frame routing only when setAnimationLoop is called with xr.enabled already true; I'd set it on the button click, so frames never reached the headset → endless Quest loader). Plus: local-floor→local reference-space fallback, and an IN-VR head-locked debug panel (session steps + live frame count + carrier pos) so the next test pinpoints any remaining failure from inside the headset

Carrier007b0f658

VR: xr.enabled=true at startup (canonical — bind XR frame routing before setAnimationLoop); local-floor→local reference-space fallback; IN-VR debug panel (head-locked text: session steps + live frame count + carrier pos) so failures are diagnosable in-headset

Carrier00f5e44f11

Carrier00 VR: single-driver render loop. renderer.setAnimationLoop(loop) is now the ONLY loop for both desktop and VR (replaces the initial requestAnimationFrame + the loop's self-reschedule). setSession routes that same loop onto the XR frame callback — the previous rAF↔setAnimationLoop hand-off on button click never submitted frames, so the Quest sat on its pulsing 'waiting for first frame' loader. enterVR/onEnd no longer touch setAnimationLoop. Desktop is unchanged (setAnimationLoop behaves like rAF with xr.enabled=false)

Carrier006b8899d

VR: use renderer.setAnimationLoop as the single loop driver (desktop + XR) so setSession routes frames to the headset — the rAF↔setAnimationLoop hand-off left the Quest stuck on its 'waiting for first frame' loader

Carrier008e68b2c

VR fix: don't bail the render loop on document.hidden while presenting (immersive XR reports the 2D doc hidden → nothing rendered); force flat ocean in XR; on-deck diagnostic geometry

Carrier0028679c47

Carrier00 VR fix: the render loop bailed every frame in VR because an immersive XR session reports document.hidden=true (the headset IS the display) — the 'tab hidden → idle' early-return is now gated on !isPresenting, so VR actually renders. Also force the flat ocean on / globe ocean off in the XR render, and add on-deck diagnostic geometry (red box + green post ring) so 'is anything rendering' is visible in-headset

Carrier000f8ebd5

Meta Quest VR Phase 1a: additive WebXR (immersive-ar passthrough), camera dolly on the carrier deck following the server-authoritative carrier, hand tracking. All main.js hooks guarded on renderer.xr.isPresenting so desktop is unchanged; renders flat in XR (globe bend fights the headset camera); alpha renderer for passthrough. VR button appears only on a WebXR headset

Carrier00f1ebb9eb

Carrier00 Meta Quest VR — Phase 1a (additive, desktop untouched). New src/vr.js: taps 'VR' → immersive-ar passthrough session, parents the camera to a dolly parked on the player's carrier deck (deckTopY, follows the server-authoritative carrier each frame), hand-tracking + controller grips. main.js hooks all guarded on renderer.xr.isPresenting: loop self-schedule + FPS cap gated (VR uses setAnimationLoop at headset rate), updateCamera early-returns in XR, renders FLAT in XR (the globe bend fights the headset camera), renderer gets alpha:true for passthrough. VR button hidden unless immersive-ar is supported. page.tsx: xr-spatial-tracking added to the carrier00 iframe allow. Room shell (occluder + windows) is Phase 1b. Doc: docs/CARRIER00_ROOM_FUSION.md updated with the real architecture

Jun 30, 2026
Carrier00a3a37e2e

Carrier00 FPS Phase 2b: CITY CAPTURE — clear an enemy city's defenders + hold it on foot → it flips to you KEEPING its buildings (vs raze). New server world.ts capture() + capture socket handler + Net.sendCapture; client tryCapture + progress HUD

Carrier00664a763e

Carrier00 FPS Phase 2a: player MARINE SQUAD — 6 friendly marines deploy when you go ashore near an enemy city, follow you in formation + engage the defenders; soldier AI generalized to target nearest hostile (both sides fight each other + you); friendly fire passes through your own squad

Jun 29, 2026
Carrier00327376bb

Carrier00 FPS Phase 1b: city DEFENDER soldiers (2 per military building + 1 per 10 pop, client-side from each enemy city) — guard/patrol, engage on sight + shoot back; player rounds drop them (swept IFF hit test); player gets on-foot HP + hurt flash + respawn at carrier

Carrier006979bf21

Carrier00 FPS Phase 1a: 3-weapon system on foot — Pistol/Rifle/Sniper with scroll-wheel swap, per-weapon fire-rate/damage/mag/spread, sniper scope (strong zoom + overlay, hides viewmodel), weapon HUD

Carrier008cbaf619

Gold ★ in front of capital city names on the in-world (non-map) floating labels — drawLabel now renders the capital star like the globe/map does

Jun 28, 2026
Carrier00733b0dbd

Ship the client capital changes that were missed in the last sync - isCapital now reads the server capital flag (★ shows without a Command Center) + onWorld reconcile + star placed flag·★·name

Carrier008362f8d4

FIX nation city naming - city name was passed to claim's ownerName arg (3rd) so it fell through to the Greek/Roman autoCityName; now passes real name as the 4th (cityName) arg + marks the first city as capital (server flag) so the gold star shows immediately; fresh wipe v7 to re-found with real capitals

Carrier009841a8ff

Force fresh map wipe (geo_reset_v6) + fix client onWorld to neutralize islands absent from the full snapshot (wiped cities now actually disappear on reconnect, not just linger client-side)

Carrier004bd2e693

Full map reset (geo_reset_v5) - wipe all cities + restart resets AI factions so they re-found fresh, to test capitals forming with real names + the gold star

Carrier00d7b834c2

Carrier build QUEUE - queue jets/torps/heli/patrol/E-3/SR-71 (caps: 1 SR-71, 2 E-3, 3 heli, 5 patrol, 20 total aircraft); builds front-of-queue when affordable, waits otherwise; persists to server so it keeps building as money allows after logoff

Carrier00d1c7167b

Capital star was on the unused 2D nav-map; in SPHERE mode M opens the GLOBE - moved the gold capital ★ to the globe city labels (shows on any city with a Command Center, for all to see)

Carrier00f2a7a5e3

NPC carrier CAP now actually defends - chase speed 88->98 (a slight edge over a player jet's max so it can close + gun attackers instead of trailing/circling), acquire range 1500->2600, leash 2700->3600, gun range 95->130

Carrier00e27de120

Carrier00 city defense 3/3: an attacked city with a bomber doctrine (aggressive nations) sorties its bombers at the attacker's nearest carrier - pressuring you to peel jets back to defend your own flagship

Carrier00e26908ee

Carrier00 city defense 2/3: airports now have a default AA flak gun (aa:true) - enemy cities throw orange flak with a 560-unit umbrella + 2 dmg at attacking planes, making cities costlier to attack

Carrier00210b6bc7

Carrier00 city defense 1/3: a threatened city now scrambles its FULL fighter screen fast (doctrine jet allotment, up to 5; defensive nations all-jets, aggressive reserve bomber slots) instead of a token 2 - clusters of cities field a real wall of fighters

Carrier004a9119c3

Carrier00 Trade Ports 1b: trade ports stockpile their city's resource each turn (capital port -> capital store, others -> per-city buffer); top HUD now reads your capital's stockpile; cargo ships load port stock + deliver to the capital; city panel shows port stock + capital marker

Carrier000e020227

Polar cities were buried under the pack ice - ice floes now keep a clearing around every island (lap up to the shore, never cover the land) so south-pole cities are visible + reachable

Jun 27, 2026
Carrier000d6297ed

AI carriers fly a FULL air wing - doctrine loadouts bumped (6-12 fighters) + flagship CAP now follows the doctrine (up to 8 aloft, 12 at battle stations) instead of a flat 3; raised the faction plane ceiling to 26

Carrier0085e407c8

NPC nations name their FIRST city after the real-life capital + later cities after real cities of that country; one Command Center per nation on the capital (so it's the sole starred capital)

Carrier00c3f69110

Carrier00 Trade ports 1a: replace city Air Heli with Trade Port building (needs a Command Center/capital), register port server-side, + gold capital star on the M-map

Carrier00bf9faf74

K menu now shows the AIR WING - every carrier plane with its pilot + status, deck-slot count (used/free), and a Command Center warning so the E-3/SR-71 lock is obvious

Carrier000a5b54dd

Greyed-out build tiles now show WHY (e.g. 'Missing Command Center' for E-3/SR-71) instead of just dimming - mirrors the buy gate exactly

Carrier00ce7bae8e

Long-endurance E-3/SR-71 fuel (1500/1000s vs 300) so the slow far-orbiting E-3 stops running dry mid-return and crashing; refuel still 2min

Carrier001814befa

Harden plane save/restore - persist bought E-3/SR-71 by an explicit bought flag + callsign (not array position) so a lost starting fighter can never drop them; also save carrier-deck purchases instantly

Carrier00e8512d36

Player-centered world bend - re-center the globe projection on the eye each frame so walking/aiming/lock-on/bombsight are undistorted at ANY latitude (was equirectangular, only correct at the equator)

Carrier005106af12

Server-authoritative carrier routes (waypoint/series/loop) persisted in DB — ships keep sailing while the tab is backgrounded or the player is offline

Carrier001a7dcb0a

Carrier00 AI #4 — heli-claim (the 'both' model): the flagship claims only UNCONTESTED land itself; when only CONTESTED land is left in reach it dispatches an expendable claim-HELICOPTER (flyClaim: flies in, founds the city, RTBs + despawns) so it never sails into harm's way to expand. Down the heli = cost a heli, not an empire

Carrier00dc1c5c43

Carrier00 AI #3 — caught = real fight: a flagship that DETECTS attackers goes to BATTLE STATIONS, scrambling a much thicker CAP screen (6 vs 3) and replacing losses fast, so a carrier strike costs the attacker losses + time instead of a free 2-min kill. Persists 14s after the last threat

Carrier001eeac3b0

Carrier00 AI #2 — opportunistic carrier strike (the war-ender): a faction that has SCOUTED an enemy carrier (fog of war) and holds a clear force edge launches a bomber package at it; bombs hit the HULL (reuses applyHit → death → empire collapse). Rare (csCd), reserve kept, flagship not risked. Targets rival bots AND weakly-defended human carriers

Carrier00ed0ac26d

Carrier00 AI intel #2: SR-71 deep-recon scout — expansionist factions fly a fast, shootable SR-71 on a deep-recon shuttle toward the nearest rival (extends fog-of-war coverage along the threat axis; falls back to a home picket if no rival). Down it to cut the faction's deep eyes

Carrier00609384de

Carrier00 AI intel (full fog-of-war, increment 1): the AI now only REACTS to enemy forces its own sensors cover (short carrier radar + city radar + fighter eyes + a wide E-3 picket). Wealthy factions fly a shootable E-3 high over the flagship for early warning; down it and the carrier is blind beyond its small radar bubble — sneak a strike in. Carrier flee is now fog-gated

Carrier00ddc4e57e

Carrier00 AI Phase 1 (carrier survival): flagship no longer sails into CONTESTED waters to claim (nearestNeutral skips islands with foreign forces) + FLEES proactively when a 4+ plane foreign strike wing closes in (was only retreating once already damaged). Fixes free empire kills

Carrier0001436df0

Carrier00 standings: power is now territory+military (cities+buildings+hull) for AI AND players alike — was folding the AI's huge credit hoard into its score, so a cash-rich bot read ~2000 power vs a player's ~50; cash stays surfaced as wealth

Carrier00b084a36

ScrambleCrew: L re-launches landed starting-crew jets (were stuck 'gone' → never relaunched, leaving 3 jets + pilots parked)

Carrier00ae944190

L now re-launches landed starting-crew jets — they were stuck 'gone' after one sortie so L skipped them, leaving 3 jets + their pilots parked on deck forever

Carrier0031390ab

K (crew) menu: cap panel at 90vh flex-column; roster scrolls, header/hire buttons pinned (no more off-screen overflow)

Carrier006db75c21

K (crew) menu no longer overflows the screen — panel capped at 90vh as a flex column; the pilot roster scrolls while the title, engineer line and Hire buttons stay pinned

Jun 26, 2026
Carrier00f5589dc

Tutorial quest system: 19 teaching missions under Standings, 2 at a time, 2M reward each, completion hooked to real actions + persisted

Carrier0016fcc79e

Tutorial QUEST system — 19 teaching missions under the Standings panel, 2 shown at a time, 2M cr reward each; completion wired to real actions (buy tbomber, recruit/launch pilots, lock+engage city, land, patrols, found city, build airport/residence/fishing, command center, raze city, ally, trade, orbit, pilot destroyer/battleship/sub, nuke, sink an empire); progress persists

Carrier0094da30f

Fix duplicate pilot figures: rail figures sync to plane state (hidden when flying / beside landed plane / being piloted), not the desync-prone boarding state machine

Carrier0082d61e9d

Fix duplicate pilot figures — a landed pilot showed BOTH at the port rail AND beside their plane; rail figures now sync to each plane's real state (hidden when flying/landed-beside-plane/being-piloted) instead of the desync-prone boarding state machine

Carrier009a34a5a

Flags on M-map city labels; only the whole city is targetable (no building lock); name+flag above every owned city out to 6km

Carrier00081bf976

Flags on M-map city names; ONLY the whole city is targetable (removed individual-building lock); name+flag label above EVERY owned city, visible out to 6km (well past 500m)

Carrier00ac8ed06

Country flags: low-poly flag renderer (~100 countries) shown next to city names, enemy carrier labels + globe city sheet

Carrier001fbc8cb9

~100-country AI faction pool with RANDOM reroll on death + low-poly country flags shown next to enemy city names, enemy carrier labels, and the globe city sheet (data-driven flag renderer)

Carrier00f9c3556

Fix sunk peer/bot carrier looping its sink animation (don't respawn a rig for an already-sunk peer)

Carrier00eb92340a

Fix sunk peer/bot carrier looping its sink animation — a dead carrier broadcasts k:1 forever, so after we removed the rig the next broadcast respawned a fresh surface carrier that re-sank; now skip re-creating a rig for an already-sunk peer

Carrier009660b1c

Build bar: enforce one airport per city (block a 2nd on a city that already has one)

Carrier00aa3b401c

Carrier00 build bar: enforce ONE airport per city (a city that already has an airport greys out + blocks a 2nd)

Carrier00d1d6dd4

Build bar: measure city range from the player (not the carrier) + block builds on greyed-out (disabled) tiles

Carrier007c9183bd

Carrier00 build bar: (1) range now measured from YOU (piloted unit/avatar) not the carrier — no false SAIL CLOSER when you're at a city without your ship; (2) clicking a greyed-out tile no longer builds (buildBarBuy honours the same ready+afford gate)

Carrier0007b9d9e4

Carrier00 bots: fix ghost city-claiming — AI no longer claims islands from afar; flagship must SAIL into claim range before founding (visible claim sortie, player parity). Adds bot.claimTgt + sortie logic in moveAndRaid

Carrier00e707b80

Bombers fly a racetrack attack run (run-in/overfly/extend-out/wide-turn) instead of orbiting the target

Carrier00cf755233

Bombers/torpedo bombers now fly a racetrack attack run (run in, drop, overfly, extend out, wide turn, run back in) instead of orbiting the target — fixes them circling a city/ship without ever dropping

Carrier002f60a4f

Fix wingmen ignoring LAND/RTB: fast jets orbited outside the touchdown ring; add approach slow-down + near-deck timeout, shared landWingman() touchdown

Carrier00ac919fef

Fix wingmen ignoring LAND/RTB — fast jets orbited outside the 95m touchdown ring forever; add slow-down on approach + a near-deck timeout so they all reliably set down (shared landWingman touchdown)

Carrier001471e0d

LAND order: wingmen B-line to the carrier and land on contact, all at once (no conga-line queue)

Carrier00c0ee381f

LAND order = all wingmen B-line straight to the carrier and land on contact, all at once (removed the slow astern conga-line queue)

Carrier00b6bb44c

Wingmen: out-of-ordnance bombers RTB to rearm + auto-relaunch to resume the attack

Carrier004978db42

Torpedo bombers now auto-RTB to rearm when out of torpedoes and resume the attack (was circling empty); fixes wingmen never relaunching after refuel/rearm

Jun 25, 2026
Carrier004fbf47ed

M-map city click now shows a detail sheet (population, income, materials produced, fishing fleet, garrison aircraft, air defence, buildings)

Carrier00657439b

Faction colors: real-nation palette (USA/UK/France/Japan/China/Russia + spawn-in nations)

Carrier0019070473

AI factions now use real nation names (USA/UK/France/Japan/China/Russia + pool) with distinct flag-flavored faction colors

Jun 24, 2026
Carrier0082ac2eba

AI navy: announce ship commissioning in the world feed + log carrier00 world events to console for monitoring

Carrier00c4a759b9

Carrier00 AI: strict 5-plane HANGAR cap per airport-city (CITY_HANGAR=5) — total aircraft anchored to a city (garrison + staged strike package) can't exceed 5, matching the player's hangar. Garrison scramble + strike launch both check hangar room; a strike picks the nearest airport-city WITH space. Completes full player/AI parity. tsc clean, 74 tests pass

Carrier00cd0ed3cc

Carrier00 AI: SCALING-cost parity — the AI paid FLAT for foundations/housing while the player's double each time. Now matches: foundation = 40k·2^(cities owned), housing = 30k·2^(housing in that city). Endless AI sprawl + housing-carpeting is now exponentially expensive like the player's. (Airport gate for city planes was already enforced.) tsc clean, 74 tests pass

Carrier009ec67483

Carrier00 AI: full cost+cooldown PARITY with the player build UI. Building costs aligned (dock 60k->40k, Command Center 90k->2M); plane costs aligned to the player's real prices (fighter 8k->26k, tbomber 20k->120k, heli 12k->30k, bomber 25k->40k, AWACS 80k->8M, SR-71 120k->10M); added a 180s per-building cooldown (BUILD_COOLDOWN) so the AI builds at the player's tempo instead of stacking one every ~2.5s. Now the AI's economy/attrition bites at the same rate the player's does. tsc clean, 74 tests pass

Carrier00772f58d8

Carrier00 AI fairness: fishing-boat restock now SYMMETRIC. AI cities were refilling their fishing fleet +1 every 5s (bundled in the 5s world loop) vs the PLAYER's free +1/city every 5min (FISH_PRODUCE=300s) — 60x faster, so raiding an AI fleet was pointless. Moved tickBoats to its own 300s interval to match the player exactly. Principle: timers/economy that gate the player gate the AI too. tsc clean, 74 tests pass

Carrier00178c6531

Carrier00 AI fix: city garrison had NO launch cooldown — it re-scrambled fighters every 18Hz frame as they died in combat, which both spat out jets with no delay AND drained the faction's credits at 8k/pop (Reaper bankrupting itself). Added GARRISON_REPLENISH (7s): one garrison scramble/replacement per cooldown across a faction's cities, with a per-spawn break. Now jet output + credit burn are sane. tsc clean, 74 tests pass

Carrier0004cedab7

Carrier00 AI: RANDOMIZED bot home placement — removed the fixed 'index 0 = strategic rival in archipelago A1 next to the player' rule. AI factions now spawn at random, distinct, far-apart archipelagos (seeded shuffle), NEVER on the player's home cluster (A1 excluded); reroll + spawn-ins also pick a random clear archipelago. Plus: empire-collapse log — when a faction's carrier is sunk and its cities release, broadcasts '💥 <name>'s empire has collapsed — N cities released to neutral'. tsc clean, 74 tests pass

← NewerPage 2 of 6Older →

Generated 2026-07-16 from git across all CommsLink repos · page 2/6, showing 101200 of 581 Carrier00 ships · complete record: /changelog.txt · /changelog.json.