Back to City Breaker
SOURCE / PINNED RELEASE

Made of little things.

City Breaker

Release
94d2b8664b10…
Author-recorded commit
df23103cbcc1…
License
LICENSE
Author’s source reference
nostr://npub1sj2vketepqw9v6fmge5fdzuj7atj9sv6qv2jss05n2z6rl64lcfqumdsnt/wss%3A%2F%2Fgit.napplet.soy%2F/n-cf8b858653e

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

scripts/dur.ts
import { newCampaign } from '../src/game/state';
import { makeFlight, readyAt, type MissionPlan } from '../src/game/campaign';
import { createWorld, step } from '../src/game/sim';
const s = newCampaign(3);
const take = (t: any, n: number) => readyAt(s, t, s.hour).slice(0, n).map((a) => a.id);
const flights = [makeFlight(0, 'Tu-16', 'strike', take('Tu-16', 6), 'FAB-500', 'yards'), makeFlight(2, 'MiG-21', 'escort', take('MiG-21', 4), null, 'yards'), makeFlight(3, 'Yak-28', 'weasel', take('Yak-28', 2), 'KSR-11', 'yards', -24)];
const plan: MissionPlan = { flights, primary: 'yards', alternates: [], route: (process.argv[2] ?? 'center') as any, ingressAlt: 'med', attackAlt: 'med', launchHour: s.hour, chaffCorridor: false, drones: 0, tanker: true, playerFlight: flights[0].id, ignoreROE: false };
const w = createWorld(s, plan);
for (let i = 0; i < 9000 && !w.ended; i++) {
  step(w, 0.1); w.events.length = 0;
  if (i % 1000 === 0) console.log(Math.round(w.t), w.planes.filter((p) => p.side === 'red' && p.alive && !p.done).map((p) => `${p.callsign}:${p.state}:wp${p.wp}/${p.path.length}@${p.x.toFixed(0)},${p.y.toFixed(0)} spawn${p.spawnAt.toFixed(0)}`).join(' '));
}
console.log('end', w.t);