From 78354a0cc7cd5b3d7dff8945e0801af67a7653ee Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 29 Sep 2026 00:23:32 -0700 Subject: [PATCH] Eight more small sites: a bakery, coworking, vet, insurer, seed bank, robotics startup, ticket site, motel --- src/world.ts | 16 ++++++++++++++++ tests/sim.test.ts | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/world.ts b/src/world.ts index 850ffdb2..eafad879 100644 --- a/src/world.ts +++ b/src/world.ts @@ -165,6 +165,22 @@ const SITES: SiteSpec[] = [ parts: [['Counter PC', 'desk', 3, 1], ['Big printer', 'device', 2, 1], ['Repair bench', 'desk', 4, 2], ['Print server', 'server', 4, 1]] }, { id: 'b10', name: 'KBAY 88.1', who: 'A radio station: streams all day, logs everything', at: [2360, -1500], parts: [['Studio PC', 'desk', 3, 2], ['Stream server', 'server', 8, 2], ['Show archive', 'files', 5, 2], ['Call-in line', 'device', 1, 2]] }, + { id: 'b11', name: 'Driftwood Bakery', who: 'A bakery with a till, a books server, and a smart oven', at: [410, -535], + parts: [['Till', 'desk', 2, 1], ['Office PC', 'desk', 3, 2], ['Books server', 'server', 5, 2], ['Smart oven', 'device', 1, 1]] }, + { id: 'b12', name: 'Pier 9 Coworking', who: 'Desks by the hour for founders who pitch by the minute', at: [1300, -675], + parts: [['Hot desk', 'desk', 3, 2], ['Hot desk 2', 'desk', 3, 2], ['Pitch PC', 'desk', 4, 2], ['Guest wifi box', 'device', 1, 2], ['Booking server', 'server', 5, 1], ['Espresso bot', 'device', 1, 1]] }, + { id: 'b13', name: 'Gull Street Vet', who: 'A vet clinic: pet records and one tired x-ray box', at: [410, 965], + parts: [['Front desk', 'desk', 2, 2], ['Vet PC', 'desk', 3, 2], ['Pet x-ray', 'server', 5, 2, 'lab'], ['Records', 'files', 4, 2]] }, + { id: 'b14', name: 'Saltmarsh Insurance', who: 'An insurer that says no to claims, fast and in bulk', at: [1700, 1780], + parts: [['Claims PC', 'desk', 3, 2], ['Adjuster PC', 'desk', 3, 2], ['Denial engine', 'server', 9, 1], ['Policy vault', 'files', 5, 3]] }, + { id: 'b15', name: 'Valley Seed Bank', who: 'A seed lab that freezes plants and logs every degree', at: [7010, 1965], + parts: [['Freezer monitor', 'device', 1, 2, 'lab'], ['Lab PC', 'desk', 3, 2, 'lab'], ['Gene server', 'server', 8, 3, 'lab'], ['Curator PC', 'desk', 3, 1]] }, + { id: 'b16', name: 'Orchard Robotics', who: 'A startup teaching robot arms to pick fruit, badly', at: [7730, 1965], + parts: [['Sim server', 'server', 10, 2, 'lab'], ['Robot arm', 'device', 2, 2, 'lab'], ['Engineer PC', 'desk', 5, 2], ['Demo PC', 'desk', 3, 1]] }, + { id: 'b17', name: 'Stratus Ticketing', who: 'A ticket site whose servers fall over every big show', at: [4640, -3765], + parts: [['Queue server', 'server', 10, 1], ['Seat map server', 'server', 8, 2], ['Ops PC', 'desk', 3, 2], ['Fraud box', 'server', 6, 2]] }, + { id: 'b18', name: 'Crossroads Motel', who: 'A motel with free wifi and a camera in every hall', at: [4200, -180], + parts: [['Front desk', 'desk', 2, 2], ['Hall cameras', 'device', 2, 2], ['Key card box', 'device', 1, 1], ['Owner PC', 'desk', 3, 1]] }, ]; /** How big a small site is on the map, for a number of machines on its floor. */ export const siteSize = (parts: number) => ({ w: 600, h: 60 + Math.max(2, Math.ceil(parts / 2)) * 140 }); diff --git a/tests/sim.test.ts b/tests/sim.test.ts index 87cf3007..f5870af7 100644 --- a/tests/sim.test.ts +++ b/tests/sim.test.ts @@ -188,7 +188,7 @@ test('a printer in the room takes the blame once for an odd machine', () => { test('the auction GPUs resell at the open rate, and the win message says how', () => { const S = fresh(); S.fronts.push({ kind: 'neocloud', name: 'Fogbank', attention: 0 }); - for (const m of S.machines) if (!m.rented && S.rooms[m.room].site !== 'lab') m.owned = true; // the office, and a line out to Cumulo + for (const m of S.machines) if (!m.rented && ['office', 'cloud', undefined].includes(S.rooms[m.room].site)) m.owned = true; // the office, and a line out to Cumulo S.jobs.push({ id: 99, type: 'scheme', node: 'home', work: 1, done: 1, label: 'auction' }); step(S, 0.05); const gpus = S.machines.find(m => m.name === 'Surplus GPUs')!; assert.ok(gpus && S.log.some(l => /resell them/.test(l.text))); -- 2.51.2