From 490f96a55c3492ae503c95e86f0a068571afeee5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Apr 2026 20:34:55 +0000 Subject: [PATCH 01/11] Add interactive difficulty curve explorer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Single-file HTML tool at tools/difficulty-curve.html for visualising and tuning the difficulty inputs (per-player-count speed/shoot multipliers, grid sizes, lives, barriers) plus a hypothetical wave ramp. Loads Chart.js from a CDN — no build step. Surfaces the asymmetry players have been reporting: at wave 1 the 4p difficulty score is several multiples of solo, and there is no across-wave ramp in the shipped game (only barriers degrade because they persist between waves). Includes presets for the current shipped values, an "easier multi" tuning, a flat (no scaling) tuning, and a classic-Invaders-style per-wave ramp. --- tools/difficulty-curve.html | 586 ++++++++++++++++++++++++++++++++++++ 1 file changed, 586 insertions(+) create mode 100644 tools/difficulty-curve.html diff --git a/tools/difficulty-curve.html b/tools/difficulty-curve.html new file mode 100644 index 0000000..08c3fa6 --- /dev/null +++ b/tools/difficulty-curve.html @@ -0,0 +1,586 @@ + + + + +Vaders Difficulty Curve Explorer + + + + + +

Vaders Difficulty Curve Explorer

+

Tune scaling parameters and see how difficulty changes by player count and wave

+ +
+
+
+

Base config

+
+ + + 0.016 +
+
+ + + 18 +
+
Tick rate is 30Hz. Lower interval = faster aliens.
+
+ +
+

Per-player-count scaling

+
+ + +
+
+
+
1p
+
2p
+
3p
+
4p
+
+ +
speed×
+
+
+
+
+
+ +
shoot×
+
+
+
+
+
+ +
cols
+
+
+
+
+
+ +
rows
+
+
+
+
+
+ +
lives
+
+
+
+
+
+ +
barriers
+
+
+
+
+
+
+
Current values match worker/src/game/scaling.ts and GameRoom.createBarriers.
+
+ +
+

Hypothetical wave ramp

+
+ + + 0% +
+
+ + + 0% +
+
+ + + 30% +
+
+ Currently zero ramp ships in the game. Speed and shoot rate are constant from wave 1 onwards. + Only barriers degrade across waves (they persist with their accumulated damage). + Use the bottom two sliders to model a hypothetical ramp. +
+
+ +
+

Presets

+
+ + + + +
+
+
+ +
+
+
+
+
+
+
+ +
+

Difficulty score across waves (1–10)

+ +
+ Difficulty score = (threat-per-sec ÷ effective-lives-per-player) × pace ÷ barrier-protection. + Higher = harder. The dashed line is the "fun zone" — solo at wave 1. + If 4p starts already above the dashed line, multiplayer is harder than solo from the first second. +
+
+ +
+

Wave-1 snapshot

+
+
+ Show full table + + + + + + + + + + + + + + + +
Player countAliensAlien shots/sMove steps/sLives totalLives/playerBarriersDifficultyvs solo
+
+
+
+
+ + + + From 2cb367f48fe3c134f58f5570f3c6fb273b54443b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 08:46:37 +0000 Subject: [PATCH 02/11] Add difficulty tuning spec: config extraction, bot sim, telemetry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Specifies the three-part tuning loop discussed for fixing multiplayer difficulty: (1) extract the hardcoded scaling table into a DifficultyConfig document loadable via env override, (2) a deterministic bot simulation harness over the pure reducer to screen candidate configs, (3) wide-event telemetry additions and an analysis script to measure the real difficulty curve. Section 6 defines the judging gates: refactor produces bit-identical behavior (golden tests + seed-identical sim runs), candidate configs must bring 2-4p median final wave within ±1 wave of solo without breaking solo or making the game unlosable, and production telemetry must show the wave-2 bounce-rate gap closing to ≤1.5x solo. --- specs/difficulty-tuning-spec.md | 406 ++++++++++++++++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 specs/difficulty-tuning-spec.md diff --git a/specs/difficulty-tuning-spec.md b/specs/difficulty-tuning-spec.md new file mode 100644 index 0000000..27563d0 --- /dev/null +++ b/specs/difficulty-tuning-spec.md @@ -0,0 +1,406 @@ +# Difficulty Tuning — Technical Spec +## Data-Driven Config • Bot Simulation Harness • Telemetry Analysis + +--- + +## Overview + +Players report that Vaders is fun in solo mode but not in multiplayer: difficulty +ramps too steeply with player count, and games with 3–4 players feel unfair from +the first wave. Separately, waves never get harder — `nextWave()` respawns the +same grid at the same speed and shoot rate, so the only across-wave pressure is +barrier decay (barriers persist between waves with accumulated damage). + +A static model of the current scaling (see `tools/difficulty-curve.html`) +estimates wave-1 difficulty per player at roughly **1.8× solo for 2p, 4.2× for +3p, and 7.5× for 4p**, driven by two compounding factors: the shared lives pool +divides by player count while the alien shoot rate multiplies by up to 2.5×. + +This spec covers three deliverables that together give us a repeatable tuning +loop: + +1. **Data-driven difficulty config** — extract the hardcoded scaling table so + alternative configs can be loaded without code changes. +2. **Bot simulation harness** — drive the pure game reducer with scripted + players to measure difficulty objectively across thousands of simulated + games per config. +3. **Telemetry analysis** — aggregate the wide-event logs we already emit to + measure the real difficulty curve from production play. + +The visualizer proposes configs; the simulator screens them; telemetry +validates the winner. Section 6 defines how we judge results at each stage. + +--- + +## Table of Contents + +1. [Current State Assessment](#1-current-state-assessment) +2. [Part 1: Data-Driven Difficulty Config](#2-part-1-data-driven-difficulty-config) +3. [Part 2: Bot Simulation Harness](#3-part-2-bot-simulation-harness) +4. [Part 3: Telemetry Analysis](#4-part-3-telemetry-analysis) +5. [Constraints](#5-constraints) +6. [Judging Results](#6-judging-results) +7. [Delivery Plan](#7-delivery-plan) + +--- + +## 1. Current State Assessment + +### Where difficulty lives today + +| Concern | Location | Notes | +|---------|----------|-------| +| Scaling table (speed/shoot/grid/lives) | `worker/src/game/scaling.ts` `getScaledConfig()` | Hardcoded object literal | +| Base rates | `shared/types.ts` `DEFAULT_CONFIG` | `baseAlienShootRate: 0.016`, `baseAlienMoveIntervalTicks: 18` | +| Barrier count | `worker/src/GameRoom.ts` `createBarriers()` | `min(4, playerCount + 2)` | +| Barrier persistence across waves | `worker/src/GameRoom.ts` `nextWave()` | Keeps barriers, discards everything else | +| Wave progression | `worker/src/GameRoom.ts` `nextWave()` | Increments counter only — **no difficulty change** | +| Lives | `getScaledConfig()` | 3 solo / 5 shared co-op, hardcoded | + +### Properties that make simulation cheap + +- The entire game loop is a pure reducer: `gameReducer(state, action) → { state, events }` + (`worker/src/game/reducer.ts`). No I/O, no timers. +- Randomness goes through `seededRandom(state)` — runs are **deterministic given + a starting seed**, so every simulated game is replayable. +- `full-game-loop.test.ts` already demonstrates driving full games (spawn → + shoot → wave clear → game over) through the reducer with a `runTicks` helper. + +### What telemetry already exists + +`GameRoom` emits wide events through `this.log()`: + +- `wave_complete` — `{ wave, nextWave, survivors }` +- `game_over` — `{ outcome, finalScore, finalWave, playerKills }` +- `game_start` / `countdown_start` — includes player count +- All events carry `roomCode`, `requestId`, version/deploy metadata + +Missing fields needed for difficulty analysis are listed in §4.1. + +--- + +## 2. Part 1: Data-Driven Difficulty Config + +### 2.1 Goal + +Any difficulty configuration can be expressed as one JSON document, loaded at +game start, with zero code changes. The shipped defaults are just one such +document. + +### 2.2 Schema + +New type in `shared/types.ts`: + +```ts +/** Complete difficulty tuning surface. One document = one named config. */ +export interface DifficultyConfig { + name: string // e.g. "ship-v1", "flatter-multi-A" + base: { + alienShootRate: number // probability per tick + alienMoveIntervalTicks: number // ticks between alien moves + } + perPlayerCount: Record<1 | 2 | 3 | 4, { + speedMult: number + shootMult: number + cols: number + rows: number + lives: number // total pool (shared) — see livesMode + barriers: number + }> + livesMode: 'shared' | 'per-player' // per-player multiplies lives by count + waveRamp: { + speedPctPerWave: number // 0 = current behavior + shootPctPerWave: number // 0 = current behavior + maxWaveForRamp: number // ramp caps here (classic SI capped at wave 8) + } +} +``` + +`DEFAULT_DIFFICULTY: DifficultyConfig` reproduces today's exact values +(including `waveRamp` of all zeros and `livesMode: 'shared'`) so behavior is +unchanged until we deliberately change it. + +### 2.3 Code changes + +1. **`getScaledConfig(playerCount, baseConfig)` → `getScaledConfig(playerCount, wave, difficulty)`** + — reads from the `DifficultyConfig` instead of the inline table and applies + the wave ramp: + ``` + speedMult(wave) = speedMult * (1 + speedPctPerWave * (min(wave, maxWaveForRamp) - 1)) + shootMult(wave) = shootMult * (1 + shootPctPerWave * (min(wave, maxWaveForRamp) - 1)) + ``` +2. **`createBarriers()`** reads barrier count from the config instead of + `min(MAX_BARRIER_COUNT, playerCount + BARRIER_PLAYER_OFFSET)`. +3. **Wave ramp takes effect in the reducer tick** — `getScaledConfig` is + already called per tick with current state, so passing `state.wave` is a + one-line change at each call site. +4. **Override loading** in `GameRoom`: on game start, check + `env.DIFFICULTY_CONFIG` (a JSON string var in `wrangler.jsonc` / `.dev.vars`). + If present and valid, use it; otherwise `DEFAULT_DIFFICULTY`. Log the + resolved config `name` in the `game_start` wide event. + - Local playtest loop becomes: edit `.dev.vars`, restart `wrangler dev`. + - Invalid JSON → log `difficulty_config_invalid` and fall back to defaults + (never crash a room on a bad config). +5. **Snapshot the config into `GameState`** (`state.difficulty: DifficultyConfig`) + so a running game is self-describing, sims can vary it per run, and the + client could later display the config name. + +### 2.4 Tests + +- `scaling.test.ts`: existing assertions move to "DEFAULT_DIFFICULTY reproduces + shipped values" golden tests; new tests for wave ramp math and `livesMode`. +- Round-trip test: serialize → parse → identical behavior. +- Fallback test: malformed `DIFFICULTY_CONFIG` env → defaults used, event logged. + +--- + +## 3. Part 2: Bot Simulation Harness + +### 3.1 Goal + +Answer "how hard is config X for N players?" in seconds, not playtest-hours. +Run thousands of full games headlessly through `gameReducer` with scripted +players, and emit distribution statistics per (config, playerCount) cell. + +### 3.2 Location and shape + +New package directory: `worker/src/sim/` (worker-side so it can import the +reducer directly without crossing the client-core import boundary). + +``` +worker/src/sim/ + bot.ts // bot policies (pure functions: GameState → intent) + runner.ts // drives gameReducer for one full game, returns GameResult + experiment.ts // runs a grid of (config × playerCount × seeds), aggregates + report.ts // formats aggregate stats as markdown table + JSON + cli.ts // `bun run sim -- --configs a.json,b.json --games 500` +``` + +No new dependencies. Runs under `bun` like existing worker tests. + +### 3.3 Bot design + +Bots act through the same actions real clients send (`INPUT` with held keys, +shoot intent) — they go through the reducer's normal input path, not a side +door. + +Three fixed policies, in increasing skill: + +| Policy | Movement | Shooting | Purpose | +|--------|----------|----------|---------| +| `random` | random direction changes | random | Floor — worst realistic player | +| `novice` | dodge nearest bullet if within 3 cells, else drift toward nearest alien column | shoot when any alien is within ±2 columns, 50% of cooldown opportunities | Approximates a casual player | +| `competent` | dodge bullets, position under alien formation edge, retreat behind barriers under fire | shoot every cooldown when aligned | Approximates a player who has played a few games | + +Bot skill is a **fixed instrument, not a tuning variable**: we compare configs +against the same bots, so absolute survival times don't need to match human +times — only the *relative* ordering across player counts matters (see §6.2). + +Determinism: bot decisions use a seeded RNG derived from the game seed + slot +index. Same seed → identical game, so anomalous runs are replayable for +debugging. + +### 3.4 Runner + +One simulated game: + +1. Build initial `GameState` for N players with the candidate `DifficultyConfig` + (reusing `createTestPlayingState`-style helpers from `worker/src/test-utils`). +2. Loop: each tick, ask each living bot for its input, apply input actions, + then dispatch `TICK`. Skip wipe phases by fast-forwarding (configurable). +3. Stop at `game_over` or at a tick cap (e.g. 30 sim-minutes = 54,000 ticks — + counts as "survived cap"). +4. Record a `GameResult`: + +```ts +interface GameResult { + configName: string + playerCount: number + botPolicy: string + seed: number + outcome: 'defeat' | 'cap' + finalWave: number + survivalTicks: number + livesLostByWave: number[] // index = wave + waveClearTicks: number[] // ticks each wave took to clear + barrierHpAtWaveStart: number[] // measures the implicit barrier-decay ramp + totalAlienShots: number + totalPlayerDeaths: number +} +``` + +### 3.5 Experiment runner & report + +`experiment.ts` runs the full grid — typically: + +``` +configs × playerCounts(1..4) × policies(novice, competent) × 500 seeds +``` + +At ~54k ticks max per game and a pure-function reducer, 500 games per cell is +expected to run in well under a minute per config on a laptop; if it's slower +we lower the tick cap before lowering the sample count. + +Output per cell: median / p25 / p75 of `finalWave` and `survivalTicks`, defeat +rate before wave 2, mean lives lost in wave 1. Report as a markdown table +(human review) plus JSON (regression tracking in CI later). + +### 3.6 Validation of the harness itself + +Before trusting it for tuning: + +- **Sanity ordering**: `competent` must outlast `novice` must outlast `random` + on every config. If not, bots are broken. +- **Determinism test**: same seed twice → identical `GameResult`. +- **Calibration against telemetry** (after Part 3 ships): pick the bot policy + whose median `finalWave` on the *current shipped config* is closest to the + real-player median from telemetry, per player count. That policy becomes the + reference instrument. + +--- + +## 4. Part 3: Telemetry Analysis + +### 4.1 Logging additions + +The wide events are close to sufficient. Additions: + +1. `game_start`: add `difficultyConfigName`, `playerCount`, `mode` (some + already present — make all three guaranteed). +2. `wave_complete`: add `waveDurationTicks`, `livesRemaining`, + `barrierSegmentsRemaining`. +3. `game_over`: add `playerCount`, `gameDurationTicks`, `livesRemaining` + (victory case), `difficultyConfigName`. +4. New event `life_lost`: `{ wave, tick, playerCount, livesRemaining }` — one + per death, cheap, and gives us the within-wave pressure curve. + +All additions are fields on existing log calls plus one new call in the +death-handling path; no schema migration needed. + +### 4.2 Analysis path + +Logs flow to Cloudflare Logpush / Workers Logs as JSON lines. Analysis is a +script, not infrastructure: + +``` +scripts/difficulty-report.ts // input: NDJSON log export; output: markdown report +``` + +Report contents, grouped by `playerCount` × `difficultyConfigName`: + +- Number of games, median/p25/p75 `finalWave` +- % of games ending before wave 2 ("bounce rate" — the headline frustration metric) +- Median game duration +- Lives lost in wave 1 vs later waves +- Defeat/victory(cap)/abandon breakdown (abandon = `room_leave` during `playing` + with no `game_over`) + +Minimum sample: treat cells with < 30 games as directional only; don't make +tuning decisions on them. + +### 4.3 Privacy + +Aggregates only. No player names in the report; `playerKills` keys are already +opaque ids. + +--- + +## 5. Constraints + +- `client-core/` must not be touched by any of this (no `@opentui/*`, `bun:*`, + `node:*` rules unaffected — all work is in `worker/`, `shared/`, `scripts/`). +- `DEFAULT_DIFFICULTY` must reproduce current shipped behavior bit-for-bit; + golden tests enforce this. Tuning changes ship as deliberate config changes, + never as side effects of the refactor. +- Sim code must not leak into the production worker bundle: `sim/` is excluded + from the wrangler entry graph (verify with `wrangler deploy --dry-run --outdir` + and assert no `sim/` modules in the bundle). +- The reducer stays pure. Bots live outside it. + +--- + +## 6. Judging Results + +Three gates, in order. Each produces a number we can argue about, replacing +"feels too hard." + +### 6.1 Gate 1 — Refactor correctness (Part 1) + +**Question**: did extracting the config change anything? + +**Judge by**: golden tests pass (`DEFAULT_DIFFICULTY` ≡ shipped values); the +sim harness (Part 2) run on old code vs refactored code with identical seeds +produces identical `GameResult`s. This is binary: any drift fails. + +### 6.2 Gate 2 — Candidate config screening (Part 2) + +**Question**: which candidate config best achieves "multiplayer as fun as solo, +and waves that ramp"? + +We operationalize the player complaints as three measurable targets, judged on +simulator output with the `competent` bot policy: + +| # | Target | Metric | Pass band | +|---|--------|--------|-----------| +| T1 | **Parity across player counts** | median `finalWave` at 2p/3p/4p vs solo | within **±1 wave** of solo median | +| T2 | **No first-minute wipeouts** | defeat rate before wave 2, any player count | ≤ **1.5× solo's** rate | +| T3 | **Later waves get harder** | per-wave clear time and lives-lost slope | wave 5 clear takes ≥ 1.3× wave-1 time *or* lives-lost/wave strictly increases through wave 5 | + +Additional guardrails so we don't overshoot into boring: + +- **G1 — solo unchanged**: solo metrics for the winning config within ±10% of + the shipped config (players say solo is fun; don't break it). +- **G2 — still losable**: with the `novice` policy, ≥ 60% of games at every + player count end in defeat by wave 8. A game nobody can lose isn't fun either. +- **G3 — monotone difficulty**: median survival must not *increase* with player + count (4p shouldn't become easier than solo — co-op should feel like more + firepower against proportionally more threat, not a cheat code). + +Because bot skill ≠ human skill, all bands are **relative to solo on the same +bot**, never absolute times. The bots are the measuring stick; solo is the +anchor. + +**Deliverable**: a one-page report ranking candidates against T1–T3/G1–G3, with +the recommended config and its full simulated distribution table. + +### 6.3 Gate 3 — Production validation (Part 3) + +**Question**: did the shipped tuning actually fix what players complained about? + +Compare ≥ 2 weeks (or ≥ 30 games per player-count cell, whichever is later) of +telemetry before vs after the config change: + +| Metric | Today's hypothesis (to be measured) | Success after tuning | +|--------|--------------------------------------|----------------------| +| Median `finalWave` by player count | drops steeply: 3–4p well below solo | 2–4p within ±1 wave of solo | +| Bounce rate (defeat before wave 2) | much higher at 3–4p | ≤ 1.5× solo rate | +| Abandon rate mid-game | elevated in multiplayer | falls toward solo's rate | +| Median waves in long games | flat difficulty → long games stall at high waves with no losses | wave-ramp configs show games ending by defeat at higher waves, not by boredom/abandon | +| Repeat play (same roomCode players returning) | unknown | directionally up for multiplayer | + +The **primary success metric is the bounce-rate gap**: the complaint "too hard +too quickly with lots of players" is precisely "defeat before wave 2 at 3–4p." +If that gap closes to within 1.5× of solo while solo metrics stay flat, the +project succeeded. Everything else is secondary evidence. + +If simulation predictions (Gate 2) and telemetry (Gate 3) disagree +significantly, the calibration step in §3.6 is rerun and the bands in §6.2 are +recalibrated — the sim is a screening tool, telemetry is the truth. + +--- + +## 7. Delivery Plan + +| Phase | Scope | Depends on | Est. size | +|-------|-------|-----------|-----------| +| 1 | `DifficultyConfig` type + extraction + golden tests + env override | — | S | +| 2 | Bot policies + runner + determinism tests | Phase 1 | M | +| 3 | Experiment grid + report + sanity/ordering validation | Phase 2 | S | +| 4 | Logging field additions + `life_lost` event | — (parallel) | S | +| 5 | `scripts/difficulty-report.ts` telemetry analysis | Phase 4 + log data | S | +| 6 | Candidate configs from visualizer → Gate 2 screening → pick winner | Phases 3, 5 | S | +| 7 | Ship winner via config change; Gate 3 validation after 2 weeks | Phase 6 | XS + wait | + +Phases 1–3 and 4–5 are independent tracks. The visualizer +(`tools/difficulty-curve.html`) gains an "export DifficultyConfig JSON" button +in Phase 6 so candidates flow directly into the sim CLI. From 17eee20f921b1efc9d6c385af0612e364f0e1c5d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 08:51:55 +0000 Subject: [PATCH 03/11] Spec: reducer must absorb GameRoom game logic before simulation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit for the deterministic-simulation prerequisite (per the TigerBeetle VOPR and Jane Street library-level-simulation patterns in adewale/testing-best-practices): the reducer is already free of wall-clock, unseeded randomness, timers, and network, but three pieces of game-progression logic live in GameRoom orchestration — wave-2+ alien spawning at the wipe_hold→wipe_reveal transition, nextWave() (barrier persistence), and nextEntityId instance state. Spec now requires moving these into the reducer rather than duplicating them in the sim runner, making gameReducer the complete state machine and the sim a single-process for-loop with zero network. --- specs/difficulty-tuning-spec.md | 50 ++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/specs/difficulty-tuning-spec.md b/specs/difficulty-tuning-spec.md index 27563d0..c5fe495 100644 --- a/specs/difficulty-tuning-spec.md +++ b/specs/difficulty-tuning-spec.md @@ -200,7 +200,49 @@ Determinism: bot decisions use a seeded RNG derived from the game seed + slot index. Same seed → identical game, so anomalous runs are replayable for debugging. -### 3.4 Runner +### 3.4 Prerequisite: make the reducer the complete state machine + +The reducer is almost — but not quite — a complete single-machine simulation +target. An audit (June 2026) found no wall-clock, unseeded randomness, timers, +or network use anywhere in `reducer.ts` or `shared/types.ts`. Time is already +logical (tick counters), and randomness already flows through +`seededRandom(state)`. This matches the two patterns from the testing +research we are following: TigerBeetle's VOPR (whole system on one machine, +seed = perfect reproduction) and Jane Street's library-level simulation +(nondeterminism as explicit parameters, so the real code runs unmodified in +tests). + +However, three pieces of game-progression logic live in `GameRoom.tick()` +orchestration rather than the reducer, and a reducer-only simulation would +silently skip them: + +1. **Wave-2+ alien spawning** — aliens for a new wave are created by + `GameRoom` at the `wipe_hold → wipe_reveal` transition + (`GameRoom.ts:1059-1069`), not by the reducer (which explicitly comments + "Aliens are created by GameRoom"). A reducer-only sim would clear wave 1 + and then face an empty screen forever. +2. **`nextWave()`** — wave increment and barrier persistence (the only + across-wave difficulty ramp we have) run in `GameRoom` when it observes the + reducer's `wave_complete` event (`GameRoom.ts:1053-1055`). +3. **Entity ID generation** — `this.nextEntityId` is Durable Object instance + state, outside `GameState`. + +**Decision: move all three into the reducer** (the reducer handles +`wave_complete` internally; `nextEntityId` becomes a `GameState` field) rather +than re-implementing them in the sim runner. Re-implementation would create a +second copy of game-progression logic that drifts from production — the exact +failure mode the Jane Street notes warn about with per-component mocks +("duplicating protocol details in every test"). After this move, +`GameRoom.tick()` shrinks to: dispatch `TICK`, broadcast, persist — pure +transport/persistence shell around a complete state machine. This is also a +correctness win independent of simulation: wave progression becomes unit-testable +and is covered by the same golden tests as the config extraction (Gate 1). + +With that prerequisite met, **nothing stops the simulation from running on one +machine with zero network traffic**: one process, a for-loop over +`gameReducer`, no wrangler, no Durable Objects, no WebSockets, no miniflare. + +### 3.5 Runner One simulated game: @@ -229,7 +271,7 @@ interface GameResult { } ``` -### 3.5 Experiment runner & report +### 3.6 Experiment runner & report `experiment.ts` runs the full grid — typically: @@ -245,7 +287,7 @@ Output per cell: median / p25 / p75 of `finalWave` and `survivalTicks`, defeat rate before wave 2, mean lives lost in wave 1. Report as a markdown table (human review) plus JSON (regression tracking in CI later). -### 3.6 Validation of the harness itself +### 3.7 Validation of the harness itself Before trusting it for tuning: @@ -384,7 +426,7 @@ If that gap closes to within 1.5× of solo while solo metrics stay flat, the project succeeded. Everything else is secondary evidence. If simulation predictions (Gate 2) and telemetry (Gate 3) disagree -significantly, the calibration step in §3.6 is rerun and the bands in §6.2 are +significantly, the calibration step in §3.7 is rerun and the bands in §6.2 are recalibrated — the sim is a screening tool, telemetry is the truth. --- From f4ed446b36aaf6701af1122d6d8fd90cf32bc724 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 09:17:03 +0000 Subject: [PATCH 04/11] =?UTF-8?q?Make=20gameReducer=20the=20complete=20sta?= =?UTF-8?q?te=20machine=20(spec=20=C2=A73.4=20prerequisite)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the three pieces of game-progression logic that lived in GameRoom orchestration into the pure reducer, so reducer-only simulation can run complete multi-wave games with zero Durable Object involvement: 1. Entity id generation: nextEntityId is now a GameState field (was DO instance state). migrateGameState derives a non-colliding default from existing e_ ids for old persisted states; GameRoom adopts the legacy SQLite column value on rehydration and keeps writing it for backward compat, but state is the source of truth. 2. Wave-2+ alien spawning: the wipe_hold → wipe_reveal transition in the reducer now spawns the scaled formation (entering=true) itself, using createAlienFormation with ids from state.nextEntityId. 3. nextWave(): wave increment, barrier-only entity prune, alienDirection reset, and wipe_exit start now happen in the same reducer TICK that emits wave_complete (which also returns persist=true). GameRoom's nextWave() shrinks to side effects only: persistState() and the wave_complete wide event with unchanged fields (wave, nextWave, survivors). GameRoom.tick() is now a transport/persistence shell: dispatch actions, broadcast, persist. Tests that encoded the old split (barrier PBT states with zero aliens, GameRoom-simulated spawning) were updated to the new behavior; new reducer tests cover a pure full wave transition and 2000-tick determinism. Web change is the contract-test allowlist entry classifying nextEntityId as server-only. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- shared/state-defaults.test.ts | 29 ++++++- shared/state-defaults.ts | 18 +++- shared/types.ts | 5 ++ .../gamestate-field-surface.contract.test.ts | 4 + worker/src/GameRoom.ts | 67 +++++---------- worker/src/game/alien-shooting-proof.test.ts | 13 +-- worker/src/game/full-game-loop.test.ts | 83 +++++++++++++++++++ worker/src/game/reducer.test.ts | 38 +++++++-- worker/src/game/reducer.ts | 29 ++++++- 9 files changed, 217 insertions(+), 69 deletions(-) diff --git a/shared/state-defaults.test.ts b/shared/state-defaults.test.ts index 2a8dee1..214ad0d 100644 --- a/shared/state-defaults.test.ts +++ b/shared/state-defaults.test.ts @@ -29,6 +29,7 @@ describe('GAME_STATE_DEFAULTS', () => { 'wipeTicksRemaining', 'wipeWaveNumber', 'alienShootingDisabled', + 'nextEntityId', 'config', ] @@ -142,6 +143,28 @@ describe('migrateGameState', () => { expect(issues).toEqual([]) }) + it('derives nextEntityId from existing e_ entity ids when missing', () => { + // Simulate old persisted state from before nextEntityId moved into GameState + const oldState = { + roomCode: 'OLD02', + entities: [ + { kind: 'barrier', id: 'e_3', x: 10, segments: [] }, + { kind: 'alien', id: 'e_42', x: 20, y: 5, type: 'octopus', alive: true, row: 0, col: 0, points: 10 }, + { kind: 'bullet', id: 'b_100_p1', x: 30, y: 10, ownerId: 'p1', dy: -1 }, // Non-e_ id ignored + ], + // NOTE: nextEntityId is MISSING + } + + const migrated = migrateGameState(oldState as any) + + expect(migrated.nextEntityId).toBe(43) // max e_ + 1, never collides + }) + + it('preserves persisted nextEntityId when present', () => { + const migrated = migrateGameState({ roomCode: 'NEW01', nextEntityId: 77 } as any) + expect(migrated.nextEntityId).toBe(77) + }) + it('merges config with defaults', () => { const partialConfig = { roomCode: 'CONF', @@ -188,10 +211,10 @@ describe('validateGameState', () => { expect(validateGameState(123)).toEqual(['State is not an object']) }) - it('checks all 18 required fields', () => { + it('checks all 19 required fields', () => { const issues = validateGameState({}) - // Should have 18 missing field errors (including roomCode and maxLives) - expect(issues.filter((i) => i.includes('Missing field')).length).toBe(18) + // Should have 19 missing field errors (including roomCode and maxLives) + expect(issues.filter((i) => i.includes('Missing field')).length).toBe(19) }) }) diff --git a/shared/state-defaults.ts b/shared/state-defaults.ts index 1c79837..b11155f 100644 --- a/shared/state-defaults.ts +++ b/shared/state-defaults.ts @@ -79,6 +79,7 @@ export const GAME_STATE_DEFAULTS: Omit = { wipeTicksRemaining: null, wipeWaveNumber: null, alienShootingDisabled: false, // Set to true to disable alien shooting for debugging + nextEntityId: 1, config: DEFAULT_CONFIG, } @@ -113,7 +114,7 @@ export function createDefaultGameState(roomCode: string): GameState { * Existing values in persistedState are preserved. */ export function migrateGameState(persistedState: Partial & { roomCode: string }): GameState { - return { + const migrated: GameState = { ...GAME_STATE_DEFAULTS, ...persistedState, // Ensure config doesn't lose new fields @@ -122,6 +123,20 @@ export function migrateGameState(persistedState: Partial & { roomCode ...(persistedState.config ?? {}), }, } + + // nextEntityId used to live in Durable Object instance state, so older + // persisted states don't carry it. Derive a non-colliding default from any + // existing `e_` entity ids so rehydrated rooms never reuse an id. + if (persistedState.nextEntityId === undefined) { + let maxEntityId = 0 + for (const entity of persistedState.entities ?? []) { + const match = /^e_(\d+)$/.exec(entity.id) + if (match) maxEntityId = Math.max(maxEntityId, Number(match[1])) + } + migrated.nextEntityId = maxEntityId + 1 + } + + return migrated } /** @@ -157,6 +172,7 @@ export function validateGameState(state: unknown): string[] { 'wipeTicksRemaining', 'wipeWaveNumber', 'alienShootingDisabled', + 'nextEntityId', 'config', ] diff --git a/shared/types.ts b/shared/types.ts index 2c1e568..0703fab 100644 --- a/shared/types.ts +++ b/shared/types.ts @@ -390,6 +390,11 @@ export interface GameState { // Debug flag: completely disable alien shooting alienShootingDisabled: boolean + // Monotonic counter for `e_` entity IDs. Lives in GameState (not Durable + // Object instance state) so the reducer alone can spawn entities — required + // for reducer-only simulation. See specs/difficulty-tuning-spec.md §3.4. + nextEntityId: number + config: GameConfig } diff --git a/web/src/gamestate-field-surface.contract.test.ts b/web/src/gamestate-field-surface.contract.test.ts index e28c4d8..57546e6 100644 --- a/web/src/gamestate-field-surface.contract.test.ts +++ b/web/src/gamestate-field-surface.contract.test.ts @@ -114,6 +114,10 @@ const GAMESTATE_SERVER_ONLY_FIELDS: Record = { // Debug flag that disables alien shooting for playtesting; the client // doesn't need it because the absence of bullets IS the effect. alienShootingDisabled: 'server-only: debug flag; client infers from bullet absence', + // Entity-id counter used by the server-side reducer when spawning new + // entities (wave formations). The client only consumes the resulting ids + // on entities themselves. + nextEntityId: 'server-only: reducer entity-id counter; client sees entity ids on entities', // Config is exposed through a component-local helper (`state.config.maxPlayers` // in LobbyScreen), accessed via `(state as any).config`. That `as any` // access is invisible to the plain `state.config` scraper, so we diff --git a/worker/src/GameRoom.ts b/worker/src/GameRoom.ts index 426f1e1..e4883dd 100644 --- a/worker/src/GameRoom.ts +++ b/worker/src/GameRoom.ts @@ -20,8 +20,6 @@ import { BARRIER_PLAYER_OFFSET, BARRIER_SHAPE_COLS, COUNTDOWN_SECONDS, - getBarriers, - createAlienFormation, createBarrierSegments, } from '../../shared/types' import { getScaledConfig, getPlayerSpawnX } from './game/scaling' @@ -146,7 +144,6 @@ function isValidMoveDirection(direction: unknown): direction is 'left' | 'right' */ export class GameRoom extends DurableObject { private game: GameState | null = null - private nextEntityId = 1 private inputQueue: GameAction[] = [] private rateLimits: Map = new Map() // Current request's correlation id — set by each entry point (fetch, ws @@ -194,8 +191,14 @@ export class GameRoom extends DurableObject { if (rows.length > 0) { // Migrate persisted state to fill any missing fields with defaults - this.game = migrateGameState(JSON.parse(rows[0].data)) - this.nextEntityId = rows[0].next_entity_id + const persisted = JSON.parse(rows[0].data) as Partial & { roomCode: string } + // Backward compat: older persisted states kept the entity-id counter + // in the SQLite column rather than in GameState. Adopt the column + // value so rehydrated rooms keep generating non-colliding ids. + if (persisted.nextEntityId === undefined) { + persisted.nextEntityId = rows[0].next_entity_id + } + this.game = migrateGameState(persisted) // --- Phantom-player reconciliation (Option A) --- // After a DO eviction or hibernation wake, state.players is @@ -236,15 +239,20 @@ export class GameRoom extends DurableObject { } private generateEntityId(): string { - return `e_${this.nextEntityId++}` + // Counter lives in GameState (not instance state) so the reducer can + // also generate ids — see specs/difficulty-tuning-spec.md §3.4. + if (!this.game) throw new Error('generateEntityId called before game state initialized') + return `e_${this.game.nextEntityId++}` } private persistState() { if (!this.game) return + // The next_entity_id column is retained for backward compat (older rows + // are read in the constructor); state.nextEntityId is the source of truth. this.ctx.storage.sql.exec( `INSERT OR REPLACE INTO game_state (id, data, next_entity_id) VALUES (1, ?, ?)`, JSON.stringify(this.game), - this.nextEntityId, + this.game.nextEntityId, ) } @@ -985,8 +993,6 @@ export class GameRoom extends DurableObject { const activeStatuses = ['playing', 'wipe_exit', 'wipe_hold', 'wipe_reveal'] if (!activeStatuses.includes(this.game.status)) return - const prevStatus = this.game.status - // 0. Heartbeat reap (Option B): any player whose lastActiveTick is // > IDLE_STALE_TICKS behind the current tick is presumed phantom // (their WS is dead but Cloudflare's close event hasn't fired). Only @@ -1056,25 +1062,13 @@ export class GameRoom extends DurableObject { } if (tickResult.persist) this.persistState() - // 3. Handle wipe phase transitions - create aliens when entering wipe_reveal - if (prevStatus === 'wipe_hold' && this.game.status === 'wipe_reveal') { - const playerCount = Object.keys(this.game.players).length - const scaled = getScaledConfig(playerCount, this.game.config) - const aliens = this.createAlienFormationWithIds(scaled.alienCols, scaled.alienRows) - // Mark all aliens as entering - for (const alien of aliens) { - alien.entering = true - } - this.game.entities.push(...aliens) - } - - // 4. Handle game_over status + // 3. Handle game_over status if (this.game.status === 'game_over') { this.endGame(this.game.lives <= 0 ? 'defeat' : 'victory') return } - // 5. Heartbeat: update registry every ~60s (1800 ticks at 30Hz) + // 4. Heartbeat: update registry every ~60s (1800 ticks at 30Hz) if (this.game.tick % 1800 === 0) { this.fireAndForget('update_room_registry', this.updateRoomRegistry()) } @@ -1118,20 +1112,11 @@ export class GameRoom extends DurableObject { private nextWave() { if (!this.game) return - const completedWave = this.game.wave - this.game.wave++ - - // Remove bullets, keep barriers, remove old aliens (new ones created during wipe_reveal) - const barriers = getBarriers(this.game.entities) - - this.game.entities = [...barriers] - this.game.alienDirection = 1 - - // Start wave transition wipe (exit → hold → reveal) - this.game.status = 'wipe_exit' - this.game.wipeTicksRemaining = WIPE_TIMING.EXIT_TICKS - this.game.wipeWaveNumber = this.game.wave - + // The wave transition itself (wave increment, barrier-only entity prune, + // wipe_exit start) happens in the reducer in the same TICK that emits + // wave_complete — this method is only the side effects: persistence and + // the wide event. By the time we observe the event, this.game already + // holds the post-transition state. this.persistState() // Wide event: a wave was cleared and the next one is starting. Emitted @@ -1139,7 +1124,7 @@ export class GameRoom extends DurableObject { // wave_complete reducer event). const survivors = Object.values(this.game.players).filter((p) => p.alive).length this.log('wave_complete', { - wave: completedWave, + wave: this.game.wave - 1, nextWave: this.game.wave, survivors, }) @@ -1172,12 +1157,6 @@ export class GameRoom extends DurableObject { this.fireAndForget('schedule_cleanup_alarm', this.ctx.storage.setAlarm(Date.now() + 5 * 60 * 1000)) } - private createAlienFormationWithIds(cols: number, rows: number) { - if (!this.game) return [] - // Use shared createAlienFormation with custom ID generator - return createAlienFormation(cols, rows, this.game.config.width, () => this.generateEntityId()) - } - private createBarriers(playerCount: number): BarrierEntity[] { if (!this.game) return [] const width = this.game.config.width diff --git a/worker/src/game/alien-shooting-proof.test.ts b/worker/src/game/alien-shooting-proof.test.ts index ab9041d..d3577f8 100644 --- a/worker/src/game/alien-shooting-proof.test.ts +++ b/worker/src/game/alien-shooting-proof.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from 'vitest' import { gameReducer } from './reducer' import { createDefaultGameState } from '../../../shared/state-defaults' -import { DEFAULT_CONFIG, WIPE_TIMING, getAliens, getBullets, createAlienFormation } from '../../../shared/types' +import { DEFAULT_CONFIG, WIPE_TIMING, getAliens, getBullets } from '../../../shared/types' import { getScaledConfig } from './scaling' describe('PROOF: Alien shooting works end-to-end', () => { @@ -46,18 +46,11 @@ describe('PROOF: Alien shooting works end-to-end', () => { } expect(state.status).toBe('wipe_reveal') - // 5. SIMULATE GameRoom: Create aliens when entering wipe_reveal + // 5. The reducer spawns the alien formation itself when entering wipe_reveal const playerCount = Object.keys(state.players).length const scaled = getScaledConfig(playerCount, state.config) - const aliens = createAlienFormation(scaled.alienCols, scaled.alienRows) - // Mark all aliens as entering (like GameRoom does) - for (const alien of aliens) { - alien.entering = true - } - state.entities.push(...aliens) - - expect(getAliens(state.entities).length).toBeGreaterThan(0) + expect(getAliens(state.entities).length).toBe(scaled.alienCols * scaled.alienRows) expect(getAliens(state.entities).every((a) => a.entering)).toBe(true) // 6. Tick through wipe_reveal until we transition to playing diff --git a/worker/src/game/full-game-loop.test.ts b/worker/src/game/full-game-loop.test.ts index 89d8522..cb82867 100644 --- a/worker/src/game/full-game-loop.test.ts +++ b/worker/src/game/full-game-loop.test.ts @@ -5,11 +5,13 @@ import { describe, it, expect } from 'vitest' import { gameReducer } from './reducer' import type { GameState } from '../../../shared/types' import { LAYOUT, DEFAULT_CONFIG, WIPE_TIMING, COUNTDOWN_SECONDS, getAliens, getBullets } from '../../../shared/types' +import { getScaledConfig } from './scaling' import { createTestGameState, createTestPlayer, createTestAlien, createTestBullet, + createTestBarrier, createTestPlayingState, createTestGameStateWithPlayer, createTestGameStateWithPlayers, @@ -380,6 +382,55 @@ describe('Wave Progression', () => { expect(waveCompleted).toBe(true) }) + it('completes a full wave transition purely in the reducer (no shell involvement)', () => { + // Clearing the last alien must advance the wave, prune everything but + // barriers, and run the whole wipe cycle — including spawning the next + // formation — through gameReducer alone. + const { state } = createTestPlayingState(1, { + aliens: [createTestAlien('last-alien', 50, 10, { alive: false })], + bullets: [createTestBullet('stray-bullet', 30, 15, 'player-1', -1)], + barriers: [createTestBarrier('barrier-1', 40)], + }) + state.alienShootingDisabled = true + state.alienDirection = -1 // Verify reset to 1 on wave transition + state.nextEntityId = 100 + + // Same tick as wave_complete: wave incremented, only barriers remain, wipe starts + const r = gameReducer(state, { type: 'TICK' }) + expect(hasEvent(r.events, 'wave_complete')).toBe(true) + expect(getEventData<{ wave: number }>(r.events, 'wave_complete')?.wave).toBe(1) + expect(r.state.wave).toBe(2) + expect(r.state.status).toBe('wipe_exit') + expect(r.state.wipeTicksRemaining).toBe(WIPE_TIMING.EXIT_TICKS) + expect(r.state.wipeWaveNumber).toBe(2) + expect(r.state.alienDirection).toBe(1) + expect(r.state.entities).toHaveLength(1) // Bullets and dead aliens dropped + expect(r.state.entities[0]).toMatchObject({ kind: 'barrier', id: 'barrier-1' }) + + // Exit phase → hold (still no aliens) + const { state: afterExit } = runTicks(r.state, WIPE_TIMING.EXIT_TICKS) + expect(afterExit.status).toBe('wipe_hold') + expect(getAliens(afterExit.entities)).toHaveLength(0) + + // Hold → reveal: a fresh formation exists, entering, with fresh entity ids + const { state: afterHold } = runTicks(afterExit, WIPE_TIMING.HOLD_TICKS) + expect(afterHold.status).toBe('wipe_reveal') + const aliens = getAliens(afterHold.entities) + const scaled = getScaledConfig(1, afterHold.config) + expect(aliens).toHaveLength(scaled.alienCols * scaled.alienRows) + expect(aliens.every((a) => a.entering)).toBe(true) + expect(aliens.every((a) => a.alive)).toBe(true) + expect(aliens.every((a) => /^e_\d+$/.test(a.id))).toBe(true) + expect(new Set(aliens.map((a) => a.id)).size).toBe(aliens.length) // All ids unique + expect(afterHold.nextEntityId).toBe(100 + aliens.length) // Counter advanced in state + + // Reveal → playing for wave 2 + const { state: afterReveal } = runTicks(afterHold, WIPE_TIMING.REVEAL_TICKS) + expect(afterReveal.status).toBe('playing') + expect(afterReveal.wave).toBe(2) + expect(getAliens(afterReveal.entities).every((a) => a.entering === false)).toBe(true) + }) + it('score accumulates across multiple kills', () => { const { state, players } = createShootReadyState(1) const player = players[0] @@ -570,6 +621,38 @@ describe('Wipe Phase Transitions', () => { }) }) +// ============================================================================ +// Determinism +// ============================================================================ + +describe('Reducer determinism', () => { + it('two identical initial states produce deep-equal states after 2000 ticks', () => { + // The reducer is the complete state machine (wave transitions, spawning, + // entity ids all in-state), so same seed → same game, tick for tick. + const makeStartedState = (): GameState => { + const { state } = createTestGameStateWithPlayer( + { id: 'p1', name: 'Determinist', x: 60 }, + { rngSeed: 424242 }, + ) + return gameReducer(state, { type: 'START_SOLO' }).state + } + + let a = makeStartedState() + let b = makeStartedState() + expect(a).toEqual(b) + + for (let i = 0; i < 2000; i++) { + a = gameReducer(a, { type: 'TICK' }).state + b = gameReducer(b, { type: 'TICK' }).state + } + + // The idle player deterministically loses (TICK is a no-op after + // game_over), so just require that the sim actually progressed. + expect(a.tick).toBeGreaterThan(100) + expect(a).toEqual(b) + }) +}) + // ============================================================================ // Forfeit / Player Leave During Game // ============================================================================ diff --git a/worker/src/game/reducer.test.ts b/worker/src/game/reducer.test.ts index d7961d8..496209c 100644 --- a/worker/src/game/reducer.test.ts +++ b/worker/src/game/reducer.test.ts @@ -1588,7 +1588,8 @@ describe('barrier segment damage progression', () => { const barrier = createTestBarrier('barrier1', 50) barrier.segments[0].health = 0 const bullet = createTestBullet('b1', 50, LAYOUT.BARRIER_Y + 1, players[0].id, -1) - state.entities = [barrier, bullet] + // Keep a live alien far away so the wave doesn't complete (which would prune bullets) + state.entities = [barrier, bullet, createTestAlien('keepalive', 5, 2)] const result = gameReducer(state, { type: 'TICK' }) @@ -2003,7 +2004,10 @@ describe('bottom-row-only alien shooting', () => { let currentState = state let bulletsCreated = 0 - for (let i = 0; i < 500; i++) { + // An all-dead formation completes the wave on the first tick (the reducer + // now runs wave transitions itself), so stop at the transition — only + // 'playing' ticks could produce alien shots. + for (let i = 0; i < 500 && currentState.status === 'playing'; i++) { const result = gameReducer(currentState, { type: 'TICK' }) const newBullets = getBullets(result.state.entities).filter((b) => b.ownerId === null) bulletsCreated += newBullets.length @@ -2012,6 +2016,9 @@ describe('bottom-row-only alien shooting', () => { // Dead aliens should not shoot expect(bulletsCreated).toBe(0) + // And a formation with no live aliens counts as a cleared wave + expect(currentState.status).toBe('wipe_exit') + expect(currentState.wave).toBe(2) }) it('when bottom alien is killed, surviving aliens can still shoot', () => { @@ -3226,7 +3233,9 @@ describe('collision edge cases', () => { const bullet1 = createTestBullet('b1', 51, 10, player1.id, -1) // Second bullet also in range but alien will be dead when it's checked const bullet2 = createTestBullet('b2', 52, 11, player2.id, -1) - state.entities = [alien, bullet1, bullet2] + // Second live alien far away so killing alien1 doesn't complete the wave + // (wave completion prunes bullets, which is not what this test is about) + state.entities = [alien, bullet1, bullet2, createTestAlien('faraway', 10, 5, { row: 0, col: 5 })] const result = gameReducer(state, { type: 'TICK' }) @@ -3540,7 +3549,9 @@ describe('collision edge cases', () => { // Bullet that could hit either const bullet = createTestBullet('b1', 52, 2, players[0].id, -1) - state.entities = [alien, ufo, bullet] + // Second live alien far away so killing alien1 doesn't complete the wave + // (wave completion prunes the UFO, which is not what this test is about) + state.entities = [alien, ufo, bullet, createTestAlien('faraway', 10, 10, { row: 1, col: 5 })] state.score = 0 const result = gameReducer(state, { type: 'TICK' }) @@ -4115,7 +4126,11 @@ describe('Bullet-Barrier Property-Based Tests', () => { bulletOwnerId: string | null = 'player-1', ) { const { state, players } = createTestPlayingState(1, { - aliens: [], // No aliens to avoid alien-related logic interfering + // One live sentinel alien far from the action: the reducer now runs the + // wave transition itself, so an alien-free state would wave-complete on + // the first tick and prune all bullets. The sentinel keeps the game in + // 'playing' without interfering (it never moves or shoots). + aliens: [createTestAlien('sentinel-alien', 0, 0)], barriers: [ { kind: 'barrier', @@ -4128,6 +4143,9 @@ describe('Bullet-Barrier Property-Based Tests', () => { }) // Disable alien shooting to prevent random alien bullets state.alienShootingDisabled = true + // Freeze alien movement so the sentinel stays put (copy config first — + // GAME_STATE_DEFAULTS shares the DEFAULT_CONFIG reference) + state.config = { ...state.config, baseAlienMoveIntervalTicks: 999999 } return { state, players } } @@ -4477,7 +4495,8 @@ describe('Bullet-Barrier Property-Based Tests', () => { const startY = LAYOUT.BARRIER_Y + SEG_H * 2 + 5 const { state, players } = createTestPlayingState(1, { - aliens: [], + // Sentinel alien keeps the wave from completing (see createBarrierTestState) + aliens: [createTestAlien('sentinel-alien', 0, 0)], barriers: [ { kind: 'barrier', id: 'barrier-1', x: barrier1X, segments: structuredClone(segments1) }, { kind: 'barrier', id: 'barrier-2', x: barrier2X, segments: structuredClone(segments2) }, @@ -4488,6 +4507,7 @@ describe('Bullet-Barrier Property-Based Tests', () => { ], }) state.alienShootingDisabled = true + state.config = { ...state.config, baseAlienMoveIntervalTicks: 999999 } const finalState = advanceTicks(state, startY + 10) const barriers = getBarriers(finalState.entities) @@ -4963,7 +4983,11 @@ describe('Collision Detection Property-Based Tests', () => { const bullet = createTestBullet('b1', targetX + 3, 9, player.id, -1) // After move: y=8, checks against alien at y=8 -> hit - state.entities = [alien, ufo, barrier, bullet] + // Second live alien far away so killing a1 doesn't complete the wave + // (wave completion prunes the UFO, which is not what this test is about) + const farAlien = createTestAlien('a2', 10, 8, { row: 0, col: 5 }) + + state.entities = [alien, ufo, barrier, bullet, farAlien] state.alienShootingDisabled = true const result = gameReducer(state, { type: 'TICK' }) diff --git a/worker/src/game/reducer.ts b/worker/src/game/reducer.ts index 722bc49..f00b483 100644 --- a/worker/src/game/reducer.ts +++ b/worker/src/game/reducer.ts @@ -24,6 +24,7 @@ import { getBullets, getBarriers, getUFOs, + createAlienFormation, seededRandom, constrainPlayerX, applyPlayerInput, @@ -392,11 +393,20 @@ function wipeTickReducer(state: GameState): ReducerResult { next.wipeTicksRemaining = WIPE_TIMING.HOLD_TICKS break - case 'wipe_hold': + case 'wipe_hold': { // Hold complete → reveal (create aliens with entering=true) next.status = 'wipe_reveal' next.wipeTicksRemaining = WIPE_TIMING.REVEAL_TICKS - // Aliens are created by GameRoom when entering wipe_reveal + // Spawn the wave's alien formation when entering wipe_reveal + const playerCount = Object.keys(next.players).length + const scaled = getScaledConfig(playerCount, next.config) + const aliens = createAlienFormation( + scaled.alienCols, + scaled.alienRows, + next.config.width, + () => `e_${next.nextEntityId++}`, + ) + next.entities.push(...aliens) // Mark all aliens as entering for (const entity of next.entities) { if (entity.kind === 'alien') { @@ -404,6 +414,7 @@ function wipeTickReducer(state: GameState): ReducerResult { } } break + } case 'wipe_reveal': // Reveal complete → playing (set entering=false) @@ -758,9 +769,19 @@ function tickReducer(state: GameState): ReducerResult { // Game over when all players are dead AND have no lives remaining const allPlayersOutOfLives = Object.values(next.players).every((p) => !p.alive && p.lives <= 0) + let waveCompleted = false if (allAliensKilled) { events.push({ type: 'event', name: 'wave_complete', data: { wave: next.wave } }) - // Wave transition handled by shell + // Advance to the next wave in the same tick. Keep only barriers (drop + // bullets and dead aliens) and start the wave transition wipe + // (exit → hold → reveal); the new formation spawns at wipe_reveal. + waveCompleted = true + next.wave++ + next.entities = [...getBarriers(next.entities)] + next.alienDirection = 1 + next.status = 'wipe_exit' + next.wipeTicksRemaining = WIPE_TIMING.EXIT_TICKS + next.wipeWaveNumber = next.wave } else if (aliensReachedBottom || allPlayersOutOfLives) { next.status = 'game_over' // B6: Ensure lives reflects actual state at game_over @@ -771,6 +792,6 @@ function tickReducer(state: GameState): ReducerResult { return { state: next, events, - persist: false, // Only persist on key transitions + persist: waveCompleted, // Only persist on key transitions } } From 7a6bcda7956b91a38fa76a52d3069bec6337fbe1 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 09:33:33 +0000 Subject: [PATCH 05/11] =?UTF-8?q?Extract=20difficulty=20surface=20into=20a?= =?UTF-8?q?=20data-driven=20DifficultyConfig=20(spec=20=C2=A72)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Any difficulty configuration is now one JSON document loaded at game start; the shipped values are just the default document. Behavior with DEFAULT_DIFFICULTY is bit-identical to before — golden tests enforce it. - shared/types.ts: new DifficultyConfig interface + DEFAULT_DIFFICULTY ("ship-v1": base 0.016/18, the old scaleTable per player count, lives 3/5/5/5, barriers 3/4/4/4, livesMode 'shared', zero waveRamp capped at wave 8) and validateDifficultyConfig (structural issues list). ScaledConfig gains a `barriers` field. GameState gains a `difficulty` snapshot so running games are self-describing and reducer-only sims can vary the config per run. - getScaledConfig(playerCount, baseConfig) → (playerCount, wave, difficulty): reads the document and applies the wave ramp speedMult(w) = speedMult * (1 + speedPctPerWave * (min(w, cap) - 1)) (same for shoot), floors the move interval with a ≥1 clamp, and sizes the lives pool (per-player mode multiplies by player count). Out-of-range player counts fall back to the 1-player entry wholesale (previously cols/rows fell back but lives were hardcoded to 5; the divergence only affected impossible counts like 0/5/-1). - Reducer reads state.difficulty (tick, wipe spawn, START_SOLO lives) — never a module constant. GameRoom.startGame() resolves the document: env.DIFFICULTY_CONFIG (JSON string) if present and valid, else DEFAULT_DIFFICULTY; bad configs log difficulty_config_invalid and fall back, never crash a room. game_start now logs difficultyConfigName. createBarriers() takes the count from the scaled config instead of min(4, playerCount + 2); the now-dead MAX_BARRIER_COUNT / BARRIER_PLAYER_OFFSET constants are removed. - wrangler.jsonc documents the var with a commented-out example; Env.DIFFICULTY_CONFIG added to worker/src/env.ts. Old persisted states migrate via GAME_STATE_DEFAULTS / migrateGameState. Tests: golden per-player-count values (18/14/12/10 ticks, 0.016–0.040 shoot, 11×5→13×6 grids, 3/5 lives, 3/4 barriers), wave-ramp math + cap, livesMode pool sizing, JSON round-trip, validateDifficultyConfig units, and GameRoom env-override/fallback integration (valid, malformed JSON, structurally invalid). Web contract allowlist classifies `difficulty` as server-only. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- shared/state-defaults.test.ts | 24 +- shared/state-defaults.ts | 8 +- shared/types.test.ts | 104 +++++++ shared/types.ts | 139 ++++++++- .../gamestate-field-surface.contract.test.ts | 5 + worker/src/GameRoom.test.ts | 105 ++++++- worker/src/GameRoom.ts | 45 ++- worker/src/env.ts | 7 + worker/src/game/alien-shooting-proof.test.ts | 6 +- worker/src/game/full-game-loop.test.ts | 5 +- worker/src/game/reducer.test.ts | 14 +- worker/src/game/reducer.ts | 10 +- worker/src/game/scaling.test.ts | 287 +++++++++--------- worker/src/game/scaling.ts | 47 +-- worker/wrangler.jsonc | 10 + 15 files changed, 617 insertions(+), 199 deletions(-) diff --git a/shared/state-defaults.test.ts b/shared/state-defaults.test.ts index 214ad0d..89ae6bd 100644 --- a/shared/state-defaults.test.ts +++ b/shared/state-defaults.test.ts @@ -3,7 +3,7 @@ import { describe, it, expect } from 'bun:test' import { GAME_STATE_DEFAULTS, createDefaultGameState, migrateGameState, validateGameState } from './state-defaults' -import { DEFAULT_CONFIG } from './types' +import { DEFAULT_CONFIG, DEFAULT_DIFFICULTY } from './types' describe('GAME_STATE_DEFAULTS', () => { it('has no undefined values', () => { @@ -30,6 +30,7 @@ describe('GAME_STATE_DEFAULTS', () => { 'wipeWaveNumber', 'alienShootingDisabled', 'nextEntityId', + 'difficulty', 'config', ] @@ -165,6 +166,21 @@ describe('migrateGameState', () => { expect(migrated.nextEntityId).toBe(77) }) + it('defaults difficulty to DEFAULT_DIFFICULTY for old persisted states', () => { + // Old persisted states predate the difficulty snapshot + const migrated = migrateGameState({ roomCode: 'OLD03' } as any) + expect(migrated.difficulty).toEqual(DEFAULT_DIFFICULTY) + expect(migrated.difficulty).not.toBe(DEFAULT_DIFFICULTY) // cloned, not shared + }) + + it('preserves a persisted difficulty snapshot', () => { + const custom = structuredClone(DEFAULT_DIFFICULTY) + custom.name = 'flatter-multi-A' + custom.waveRamp.speedPctPerWave = 0.05 + const migrated = migrateGameState({ roomCode: 'NEW02', difficulty: custom } as any) + expect(migrated.difficulty).toBe(custom) + }) + it('merges config with defaults', () => { const partialConfig = { roomCode: 'CONF', @@ -211,10 +227,10 @@ describe('validateGameState', () => { expect(validateGameState(123)).toEqual(['State is not an object']) }) - it('checks all 19 required fields', () => { + it('checks all 20 required fields', () => { const issues = validateGameState({}) - // Should have 19 missing field errors (including roomCode and maxLives) - expect(issues.filter((i) => i.includes('Missing field')).length).toBe(19) + // Should have 20 missing field errors (including roomCode and maxLives) + expect(issues.filter((i) => i.includes('Missing field')).length).toBe(20) }) }) diff --git a/shared/state-defaults.ts b/shared/state-defaults.ts index b11155f..49f2d7f 100644 --- a/shared/state-defaults.ts +++ b/shared/state-defaults.ts @@ -7,7 +7,7 @@ // 3. Run tests - the type-level check will fail if coverage is incomplete // 4. Never add field initialization to startGame(), nextWave(), or other methods -import { DEFAULT_CONFIG, type GameState, type GameStatus } from './types' +import { DEFAULT_CONFIG, DEFAULT_DIFFICULTY, type GameState, type GameStatus } from './types' // ─── Status Registry ───────────────────────────────────────────────────────── // Single source of truth for all GameStatus values. @@ -80,6 +80,7 @@ export const GAME_STATE_DEFAULTS: Omit = { wipeWaveNumber: null, alienShootingDisabled: false, // Set to true to disable alien shooting for debugging nextEntityId: 1, + difficulty: DEFAULT_DIFFICULTY, config: DEFAULT_CONFIG, } @@ -104,6 +105,7 @@ export function createDefaultGameState(roomCode: string): GameState { players: {}, readyPlayerIds: [], entities: [], + difficulty: structuredClone(DEFAULT_DIFFICULTY), config: { ...DEFAULT_CONFIG }, } } @@ -117,6 +119,9 @@ export function migrateGameState(persistedState: Partial & { roomCode const migrated: GameState = { ...GAME_STATE_DEFAULTS, ...persistedState, + // Old persisted states predate the difficulty snapshot — default them to + // the shipped config (clone so no room shares the module constant). + difficulty: persistedState.difficulty ?? structuredClone(DEFAULT_DIFFICULTY), // Ensure config doesn't lose new fields config: { ...DEFAULT_CONFIG, @@ -173,6 +178,7 @@ export function validateGameState(state: unknown): string[] { 'wipeWaveNumber', 'alienShootingDisabled', 'nextEntityId', + 'difficulty', 'config', ] diff --git a/shared/types.test.ts b/shared/types.test.ts index 71fdca3..c7adc4f 100644 --- a/shared/types.test.ts +++ b/shared/types.test.ts @@ -16,6 +16,8 @@ import { seededRandom, createBarrierSegments, createAlienFormation, + validateDifficultyConfig, + DEFAULT_DIFFICULTY, type Entity, type AlienEntity, type BulletEntity, @@ -655,3 +657,105 @@ describe('applyPlayerInput properties', () => { ) }) }) + +// ─── validateDifficultyConfig Tests ────────────────────────────────────────── + +describe('validateDifficultyConfig', () => { + test('DEFAULT_DIFFICULTY is valid', () => { + expect(validateDifficultyConfig(DEFAULT_DIFFICULTY)).toEqual([]) + }) + + test('DEFAULT_DIFFICULTY survives a JSON round-trip and stays valid', () => { + expect(validateDifficultyConfig(JSON.parse(JSON.stringify(DEFAULT_DIFFICULTY)))).toEqual([]) + }) + + test('rejects non-object input', () => { + expect(validateDifficultyConfig(null)).toEqual(['Config is not an object']) + expect(validateDifficultyConfig(undefined)).toEqual(['Config is not an object']) + expect(validateDifficultyConfig('ship-v1')).toEqual(['Config is not an object']) + expect(validateDifficultyConfig(42)).toEqual(['Config is not an object']) + expect(validateDifficultyConfig([])).toEqual(['Config is not an object']) + }) + + test('rejects missing or empty name', () => { + const config = structuredClone(DEFAULT_DIFFICULTY) as Record + config.name = '' + expect(validateDifficultyConfig(config)).toContain('name must be a non-empty string') + delete config.name + expect(validateDifficultyConfig(config)).toContain('name must be a non-empty string') + }) + + test('rejects missing base block and bad base numbers', () => { + const noBase = structuredClone(DEFAULT_DIFFICULTY) as Record + delete noBase.base + expect(validateDifficultyConfig(noBase)).toContain('base must be an object') + + const badRate = structuredClone(DEFAULT_DIFFICULTY) + badRate.base.alienShootRate = Number.NaN + expect(validateDifficultyConfig(badRate)).toContain('base.alienShootRate must be a finite number >= 0') + + const zeroInterval = structuredClone(DEFAULT_DIFFICULTY) + zeroInterval.base.alienMoveIntervalTicks = 0 + expect(validateDifficultyConfig(zeroInterval)).toContain('base.alienMoveIntervalTicks must be a finite number > 0') + }) + + test('rejects when any of the four player counts is missing', () => { + for (const count of [1, 2, 3, 4] as const) { + const config = structuredClone(DEFAULT_DIFFICULTY) + delete (config.perPlayerCount as Record)[count] + expect(validateDifficultyConfig(config)).toContain(`perPlayerCount.${count} is missing`) + } + }) + + test('rejects non-finite and non-positive per-player-count numbers', () => { + const negSpeed = structuredClone(DEFAULT_DIFFICULTY) + negSpeed.perPlayerCount[2].speedMult = -1 + expect(validateDifficultyConfig(negSpeed)).toContain('perPlayerCount.2.speedMult must be a finite number > 0') + + const infCols = structuredClone(DEFAULT_DIFFICULTY) + infCols.perPlayerCount[3].cols = Number.POSITIVE_INFINITY + expect(validateDifficultyConfig(infCols)).toContain('perPlayerCount.3.cols must be a finite number > 0') + + const zeroLives = structuredClone(DEFAULT_DIFFICULTY) + zeroLives.perPlayerCount[4].lives = 0 + expect(validateDifficultyConfig(zeroLives)).toContain('perPlayerCount.4.lives must be a finite number > 0') + + const negBarriers = structuredClone(DEFAULT_DIFFICULTY) + negBarriers.perPlayerCount[1].barriers = -1 + expect(validateDifficultyConfig(negBarriers)).toContain('perPlayerCount.1.barriers must be a finite number >= 0') + }) + + test('allows zero barriers (a legal, if brutal, config)', () => { + const config = structuredClone(DEFAULT_DIFFICULTY) + config.perPlayerCount[1].barriers = 0 + expect(validateDifficultyConfig(config)).toEqual([]) + }) + + test('rejects invalid livesMode', () => { + const config = structuredClone(DEFAULT_DIFFICULTY) as Record + config.livesMode = 'infinite' + expect(validateDifficultyConfig(config)).toContain("livesMode must be 'shared' or 'per-player'") + }) + + test('rejects missing waveRamp block and bad ramp numbers', () => { + const noRamp = structuredClone(DEFAULT_DIFFICULTY) as Record + delete noRamp.waveRamp + expect(validateDifficultyConfig(noRamp)).toContain('waveRamp must be an object') + + const negPct = structuredClone(DEFAULT_DIFFICULTY) + negPct.waveRamp.shootPctPerWave = -0.1 + expect(validateDifficultyConfig(negPct)).toContain('waveRamp.shootPctPerWave must be a finite number >= 0') + + const zeroCap = structuredClone(DEFAULT_DIFFICULTY) + zeroCap.waveRamp.maxWaveForRamp = 0 + expect(validateDifficultyConfig(zeroCap)).toContain('waveRamp.maxWaveForRamp must be a finite number > 0') + }) + + test('accumulates multiple issues for a thoroughly broken config', () => { + const issues = validateDifficultyConfig({ name: 'broken' }) + expect(issues.length).toBeGreaterThanOrEqual(3) + expect(issues).toContain('base must be an object') + expect(issues).toContain('perPlayerCount must be an object') + expect(issues).toContain('waveRamp must be an object') + }) +}) diff --git a/shared/types.ts b/shared/types.ts index 0703fab..992013b 100644 --- a/shared/types.ts +++ b/shared/types.ts @@ -277,12 +277,6 @@ export const UFO_SPAWN_PROBABILITY = 0.005 /** Alien bullet speed ratio: alien bullets skip 1 out of every N ticks */ export const ALIEN_BULLET_SKIP_INTERVAL = 5 -/** Maximum number of barriers placed in the game */ -export const MAX_BARRIER_COUNT = 4 - -/** Minimum number of barriers added per player (barriers = min(MAX_BARRIER_COUNT, playerCount + BARRIER_PLAYER_OFFSET)) */ -export const BARRIER_PLAYER_OFFSET = 2 - /** Number of segments per row in barrier shape */ export const BARRIER_SHAPE_COLS = 5 @@ -298,9 +292,13 @@ export interface GameConfig { tickIntervalMs: number // Default: 33 (~30Hz tick rate) // Tick-based timing (game loop) + // NOTE: alien speed/shoot scaling now reads DifficultyConfig.base (snapshotted + // into GameState.difficulty at game start), not these two fields. They are + // kept for backward compat of persisted configs and as documentation of the + // shipped base rates (DEFAULT_DIFFICULTY.base mirrors them). baseAlienMoveIntervalTicks: number // Ticks between alien moves baseBulletSpeed: number // Cells per tick - baseAlienShootRate: number // Probability per tick (use getScaledConfig) + baseAlienShootRate: number // Probability per tick (see DifficultyConfig) playerCooldownTicks: number // Ticks between shots playerMoveSpeed: number // Cells per tick when holding move key respawnDelayTicks: number // Ticks until respawn (30 = 1s at 30Hz) @@ -329,7 +327,126 @@ export interface ScaledConfig { alienShootProbability: number // Probability per tick (~0.017 to 0.042) alienCols: number // Grid columns (11-15 based on player count) alienRows: number // Grid rows (5-6 based on player count) - lives: number // Shared lives (3 solo, 5 coop) + lives: number // Shared lives pool (3 solo, 5 coop with DEFAULT_DIFFICULTY) + barriers: number // Number of barriers placed at game start +} + +// ─── Difficulty Config ──────────────────────────────────────────────────────── + +/** Complete difficulty tuning surface. One document = one named config. */ +export interface DifficultyConfig { + name: string // e.g. "ship-v1", "flatter-multi-A" + base: { + alienShootRate: number // probability per tick + alienMoveIntervalTicks: number // ticks between alien moves + } + perPlayerCount: Record< + 1 | 2 | 3 | 4, + { + speedMult: number + shootMult: number + cols: number + rows: number + lives: number // total pool (shared) — see livesMode + barriers: number + } + > + livesMode: 'shared' | 'per-player' // per-player multiplies lives by count + waveRamp: { + speedPctPerWave: number // 0 = current behavior + shootPctPerWave: number // 0 = current behavior + maxWaveForRamp: number // ramp caps here (classic SI capped at wave 8) + } +} + +/** + * The shipped difficulty document. Reproduces the pre-extraction hardcoded + * values bit-for-bit (scaling table, 3/5 lives, min(4, playerCount + 2) + * barriers, no wave ramp) — golden tests in worker/src/game/scaling.test.ts + * enforce this. Tuning changes ship as deliberate new configs, never as + * silent edits here. + */ +export const DEFAULT_DIFFICULTY: DifficultyConfig = { + name: 'ship-v1', + base: { + alienShootRate: 0.016, // matches DEFAULT_CONFIG.baseAlienShootRate + alienMoveIntervalTicks: 18, // matches DEFAULT_CONFIG.baseAlienMoveIntervalTicks + }, + perPlayerCount: { + 1: { speedMult: 1.0, shootMult: 1.0, cols: 11, rows: 5, lives: 3, barriers: 3 }, // base rate + 2: { speedMult: 1.25, shootMult: 1.5, cols: 11, rows: 5, lives: 5, barriers: 4 }, // 50% more shooting + 3: { speedMult: 1.5, shootMult: 2.0, cols: 13, rows: 5, lives: 5, barriers: 4 }, // 2x shooting + 4: { speedMult: 1.75, shootMult: 2.5, cols: 13, rows: 6, lives: 5, barriers: 4 }, // 2.5x shooting + }, + livesMode: 'shared', + waveRamp: { + speedPctPerWave: 0, + shootPctPerWave: 0, + maxWaveForRamp: 8, + }, +} + +/** + * Structurally validate an untrusted value (e.g. JSON.parse of the + * DIFFICULTY_CONFIG env var) as a DifficultyConfig. Returns a list of + * issues; empty array means valid. Mirrors validateGameState's shape. + */ +export function validateDifficultyConfig(value: unknown): string[] { + const issues: string[] = [] + + if (typeof value !== 'object' || value === null || Array.isArray(value)) { + return ['Config is not an object'] + } + const c = value as Record + + if (typeof c.name !== 'string' || c.name.length === 0) { + issues.push('name must be a non-empty string') + } + + const isFinitePositive = (n: unknown): n is number => typeof n === 'number' && Number.isFinite(n) && n > 0 + const isFiniteNonNegative = (n: unknown): n is number => typeof n === 'number' && Number.isFinite(n) && n >= 0 + + const base = c.base as Record | undefined + if (typeof base !== 'object' || base === null) { + issues.push('base must be an object') + } else { + if (!isFiniteNonNegative(base.alienShootRate)) issues.push('base.alienShootRate must be a finite number >= 0') + if (!isFinitePositive(base.alienMoveIntervalTicks)) issues.push('base.alienMoveIntervalTicks must be a finite number > 0') + } + + const perPlayerCount = c.perPlayerCount as Record | undefined + if (typeof perPlayerCount !== 'object' || perPlayerCount === null) { + issues.push('perPlayerCount must be an object') + } else { + for (const count of [1, 2, 3, 4] as const) { + const entry = perPlayerCount[count] as Record | undefined + if (typeof entry !== 'object' || entry === null) { + issues.push(`perPlayerCount.${count} is missing`) + continue + } + if (!isFinitePositive(entry.speedMult)) issues.push(`perPlayerCount.${count}.speedMult must be a finite number > 0`) + if (!isFinitePositive(entry.shootMult)) issues.push(`perPlayerCount.${count}.shootMult must be a finite number > 0`) + if (!isFinitePositive(entry.cols)) issues.push(`perPlayerCount.${count}.cols must be a finite number > 0`) + if (!isFinitePositive(entry.rows)) issues.push(`perPlayerCount.${count}.rows must be a finite number > 0`) + if (!isFinitePositive(entry.lives)) issues.push(`perPlayerCount.${count}.lives must be a finite number > 0`) + if (!isFiniteNonNegative(entry.barriers)) issues.push(`perPlayerCount.${count}.barriers must be a finite number >= 0`) + } + } + + if (c.livesMode !== 'shared' && c.livesMode !== 'per-player') { + issues.push("livesMode must be 'shared' or 'per-player'") + } + + const waveRamp = c.waveRamp as Record | undefined + if (typeof waveRamp !== 'object' || waveRamp === null) { + issues.push('waveRamp must be an object') + } else { + if (!isFiniteNonNegative(waveRamp.speedPctPerWave)) issues.push('waveRamp.speedPctPerWave must be a finite number >= 0') + if (!isFiniteNonNegative(waveRamp.shootPctPerWave)) issues.push('waveRamp.shootPctPerWave must be a finite number >= 0') + if (!isFinitePositive(waveRamp.maxWaveForRamp)) issues.push('waveRamp.maxWaveForRamp must be a finite number > 0') + } + + return issues } /** Event names that can be emitted during gameplay (matches ServerEvent.name) */ @@ -395,6 +512,12 @@ export interface GameState { // for reducer-only simulation. See specs/difficulty-tuning-spec.md §3.4. nextEntityId: number + // Difficulty document snapshot, set at game start (env override or + // DEFAULT_DIFFICULTY). The reducer reads THIS — never a module constant — + // so a running game is self-describing and simulations can vary the + // config per run. See specs/difficulty-tuning-spec.md §2.3. + difficulty: DifficultyConfig + config: GameConfig } diff --git a/web/src/gamestate-field-surface.contract.test.ts b/web/src/gamestate-field-surface.contract.test.ts index 57546e6..ab33191 100644 --- a/web/src/gamestate-field-surface.contract.test.ts +++ b/web/src/gamestate-field-surface.contract.test.ts @@ -118,6 +118,11 @@ const GAMESTATE_SERVER_ONLY_FIELDS: Record = { // entities (wave formations). The client only consumes the resulting ids // on entities themselves. nextEntityId: 'server-only: reducer entity-id counter; client sees entity ids on entities', + // Difficulty document snapshot driving the reducer's per-tick scaling + // (speed/shoot/grid/lives/barriers + wave ramp). The client experiences it + // entirely through the synced positions/entities; a future UI could surface + // `difficulty.name`, at which point this entry gets deleted. + difficulty: 'server-only: difficulty config snapshot consumed by the reducer', // Config is exposed through a component-local helper (`state.config.maxPlayers` // in LobbyScreen), accessed via `(state as any).config`. That `as any` // access is invisible to the plain `state.config` scraper, so we diff --git a/worker/src/GameRoom.test.ts b/worker/src/GameRoom.test.ts index 4410d86..7eaa0cf 100644 --- a/worker/src/GameRoom.test.ts +++ b/worker/src/GameRoom.test.ts @@ -3,8 +3,8 @@ import { describe, it, expect, vi, type Mock } from 'vitest' import { GameRoom, type Env } from './GameRoom' -import { COUNTDOWN_SECONDS, WIPE_TIMING } from '../../shared/types' -import type { GameState } from '../../shared/types' +import { COUNTDOWN_SECONDS, DEFAULT_DIFFICULTY, WIPE_TIMING } from '../../shared/types' +import type { DifficultyConfig, GameState } from '../../shared/types' // Response type helpers interface RoomInfoResponse { @@ -586,6 +586,107 @@ describe('WebSocket Message Handling', () => { }) }) + describe('difficulty config resolution (DIFFICULTY_CONFIG env override)', () => { + /** A recognizably non-default config: 2 barriers and 7 lives for solo. */ + function customDifficulty(): DifficultyConfig { + const config = structuredClone(DEFAULT_DIFFICULTY) + config.name = 'custom-test' + config.perPlayerCount[1] = { ...config.perPlayerCount[1], lives: 7, barriers: 2 } + return config + } + + /** Boot a room with the given env extras, join one player, start solo. */ + async function startSoloWithEnv(envOverrides: Partial) { + const ctx = createMockDurableObjectContext() + const env = { ...createMockEnv(), ...envOverrides } + const gameRoom = new GameRoom(ctx as any, env) + await new Promise((resolve) => setTimeout(resolve, 0)) + await gameRoom.fetch( + new Request('https://internal/init', { method: 'POST', body: JSON.stringify({ roomCode: 'DIFF01' }) }), + ) + const ws = createMockWebSocket() + ctx._webSockets.push(ws) + await joinPlayer(gameRoom, ws, 'SoloPlayer') + await gameRoom.webSocketMessage(ws as any, JSON.stringify({ type: 'start_solo' })) + const state = await getRoomState(gameRoom) + return { gameRoom, ctx, state } + } + + /** Parse spied console.log JSON lines and return the first with this event name. */ + function findLoggedEvent(spy: ReturnType, eventName: string): Record | undefined { + return spy.mock.calls + .map((call: unknown[]) => { + try { + return JSON.parse(call[0] as string) as Record + } catch { + return null + } + }) + .find((line): line is Record => line?.event === eventName) + } + + it('uses DEFAULT_DIFFICULTY when DIFFICULTY_CONFIG is unset', async () => { + const { state } = await startSoloWithEnv({}) + expect(state?.difficulty).toEqual(DEFAULT_DIFFICULTY) + expect(state?.entities.filter((e) => e.kind === 'barrier')).toHaveLength(3) // solo default + expect(state?.lives).toBe(3) + expect(state?.maxLives).toBe(3) + }) + + it('uses a valid DIFFICULTY_CONFIG override (snapshot, barriers, lives)', async () => { + const { state } = await startSoloWithEnv({ DIFFICULTY_CONFIG: JSON.stringify(customDifficulty()) }) + expect(state?.difficulty.name).toBe('custom-test') + expect(state?.entities.filter((e) => e.kind === 'barrier')).toHaveLength(2) + expect(state?.lives).toBe(7) + expect(state?.maxLives).toBe(7) + }) + + it('logs the resolved config name in the game_start wide event', async () => { + const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {}) + try { + await startSoloWithEnv({ DIFFICULTY_CONFIG: JSON.stringify(customDifficulty()) }) + const gameStart = findLoggedEvent(consoleLogSpy, 'game_start') + expect(gameStart).toBeDefined() + expect(gameStart?.difficultyConfigName).toBe('custom-test') + } finally { + consoleLogSpy.mockRestore() + } + }) + + it('malformed JSON: falls back to defaults and logs difficulty_config_invalid', async () => { + const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {}) + try { + const { state } = await startSoloWithEnv({ DIFFICULTY_CONFIG: '{not json' }) + expect(state?.difficulty).toEqual(DEFAULT_DIFFICULTY) + expect(state?.lives).toBe(3) + expect(state?.entities.filter((e) => e.kind === 'barrier')).toHaveLength(3) + const invalid = findLoggedEvent(consoleLogSpy, 'difficulty_config_invalid') + expect(invalid).toBeDefined() + expect(invalid?.reason).toBe('json_parse_failed') + // The game still started normally on defaults + expect(findLoggedEvent(consoleLogSpy, 'game_start')?.difficultyConfigName).toBe('ship-v1') + } finally { + consoleLogSpy.mockRestore() + } + }) + + it('structurally invalid config: falls back to defaults and logs the issues', async () => { + const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {}) + try { + const broken = customDifficulty() as unknown as { perPlayerCount: Record } + delete broken.perPlayerCount[3] + const { state } = await startSoloWithEnv({ DIFFICULTY_CONFIG: JSON.stringify(broken) }) + expect(state?.difficulty).toEqual(DEFAULT_DIFFICULTY) + const invalid = findLoggedEvent(consoleLogSpy, 'difficulty_config_invalid') + expect(invalid).toBeDefined() + expect(invalid?.reason).toBe('validation_failed') + expect(invalid?.issues).toContain('perPlayerCount.3 is missing') + } finally { + consoleLogSpy.mockRestore() + } + }) + }) + describe('input message', () => { it('queues PLAYER_INPUT action', async () => { const { gameRoom, ctx } = await createInitializedGameRoom() diff --git a/worker/src/GameRoom.ts b/worker/src/GameRoom.ts index e4883dd..cfab2bc 100644 --- a/worker/src/GameRoom.ts +++ b/worker/src/GameRoom.ts @@ -6,6 +6,7 @@ import type { GameState, Player, BarrierEntity, + DifficultyConfig, ServerMessage, ClientMessage, PlayerSlot, @@ -16,11 +17,11 @@ import { HITBOX, WIPE_TIMING, PLAYER_COLORS, - MAX_BARRIER_COUNT, - BARRIER_PLAYER_OFFSET, BARRIER_SHAPE_COLS, COUNTDOWN_SECONDS, + DEFAULT_DIFFICULTY, createBarrierSegments, + validateDifficultyConfig, } from '../../shared/types' import { getScaledConfig, getPlayerSpawnX } from './game/scaling' import { gameReducer, type GameAction } from './game/reducer' @@ -862,10 +863,42 @@ export class GameRoom extends DurableObject { }) } + /** + * Resolve the difficulty document for a new game: the DIFFICULTY_CONFIG + * env var (JSON string) if present and valid, otherwise DEFAULT_DIFFICULTY. + * A bad config must never crash a room — log `difficulty_config_invalid` + * and fall back to the shipped defaults. + */ + private resolveDifficultyConfig(): DifficultyConfig { + const raw = this.env.DIFFICULTY_CONFIG + if (!raw) return structuredClone(DEFAULT_DIFFICULTY) + + let parsed: unknown + try { + parsed = JSON.parse(raw) + } catch (err) { + this.log('difficulty_config_invalid', { + reason: 'json_parse_failed', + message: err instanceof Error ? err.message : String(err), + }) + return structuredClone(DEFAULT_DIFFICULTY) + } + + const issues = validateDifficultyConfig(parsed) + if (issues.length > 0) { + this.log('difficulty_config_invalid', { reason: 'validation_failed', issues }) + return structuredClone(DEFAULT_DIFFICULTY) + } + return parsed as DifficultyConfig + } + private async startGame() { if (!this.game) return const playerCount = Object.keys(this.game.players).length - const scaled = getScaledConfig(playerCount, this.game.config) + // Snapshot the resolved difficulty document into state so the running + // game is self-describing and the reducer reads it per tick. + this.game.difficulty = this.resolveDifficultyConfig() + const scaled = getScaledConfig(playerCount, 1, this.game.difficulty) debugLog('[GAME_START]', { players: Object.entries(this.game.players).map(([id, p]) => ({ id, name: p.name, slot: p.slot })), @@ -903,7 +936,7 @@ export class GameRoom extends DurableObject { // Note: alienShootingDisabled is set via GAME_STATE_DEFAULTS in state-defaults.ts // Initialize barriers only - aliens created at wipe_hold→wipe_reveal transition - this.game.entities = [...this.createBarriers(playerCount)] + this.game.entities = [...this.createBarriers(scaled.barriers)] this.broadcast({ type: 'event', name: 'game_start', data: undefined }) this.broadcastFullState() @@ -915,6 +948,7 @@ export class GameRoom extends DurableObject { mode: this.game.mode, playerCount, wave: this.game.wave, + difficultyConfigName: this.game.difficulty.name, }) // Use alarm for game tick (hibernation-compatible) @@ -1157,10 +1191,9 @@ export class GameRoom extends DurableObject { this.fireAndForget('schedule_cleanup_alarm', this.ctx.storage.setAlarm(Date.now() + 5 * 60 * 1000)) } - private createBarriers(playerCount: number): BarrierEntity[] { + private createBarriers(barrierCount: number): BarrierEntity[] { if (!this.game) return [] const width = this.game.config.width - const barrierCount = Math.min(MAX_BARRIER_COUNT, playerCount + BARRIER_PLAYER_OFFSET) const barriers: BarrierEntity[] = [] const spacing = width / (barrierCount + 1) diff --git a/worker/src/env.ts b/worker/src/env.ts index 48259f7..4484ebc 100644 --- a/worker/src/env.ts +++ b/worker/src/env.ts @@ -5,4 +5,11 @@ export interface Env { GAME_ROOM: DurableObjectNamespace MATCHMAKER: DurableObjectNamespace ASSETS: Fetcher + /** + * Optional JSON-serialized DifficultyConfig (shared/types.ts) overriding + * DEFAULT_DIFFICULTY at game start. Invalid JSON or shape logs a + * `difficulty_config_invalid` wide event and falls back to defaults. + * Set via `vars` in wrangler.jsonc or `.dev.vars` for local playtests. + */ + DIFFICULTY_CONFIG?: string } diff --git a/worker/src/game/alien-shooting-proof.test.ts b/worker/src/game/alien-shooting-proof.test.ts index d3577f8..f39a2c8 100644 --- a/worker/src/game/alien-shooting-proof.test.ts +++ b/worker/src/game/alien-shooting-proof.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from 'vitest' import { gameReducer } from './reducer' import { createDefaultGameState } from '../../../shared/state-defaults' -import { DEFAULT_CONFIG, WIPE_TIMING, getAliens, getBullets } from '../../../shared/types' +import { DEFAULT_DIFFICULTY, WIPE_TIMING, getAliens, getBullets } from '../../../shared/types' import { getScaledConfig } from './scaling' describe('PROOF: Alien shooting works end-to-end', () => { @@ -48,7 +48,7 @@ describe('PROOF: Alien shooting works end-to-end', () => { // 5. The reducer spawns the alien formation itself when entering wipe_reveal const playerCount = Object.keys(state.players).length - const scaled = getScaledConfig(playerCount, state.config) + const scaled = getScaledConfig(playerCount, state.wave, state.difficulty) expect(getAliens(state.entities).length).toBe(scaled.alienCols * scaled.alienRows) expect(getAliens(state.entities).every((a) => a.entering)).toBe(true) @@ -90,7 +90,7 @@ describe('PROOF: Alien shooting works end-to-end', () => { }) test('Alien shoot probability is non-zero', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) + const scaled = getScaledConfig(1, 1, DEFAULT_DIFFICULTY) expect(scaled.alienShootProbability).toBeGreaterThan(0) expect(scaled.alienShootProbability).toBeLessThan(1) diff --git a/worker/src/game/full-game-loop.test.ts b/worker/src/game/full-game-loop.test.ts index cb82867..20ee60a 100644 --- a/worker/src/game/full-game-loop.test.ts +++ b/worker/src/game/full-game-loop.test.ts @@ -416,7 +416,7 @@ describe('Wave Progression', () => { const { state: afterHold } = runTicks(afterExit, WIPE_TIMING.HOLD_TICKS) expect(afterHold.status).toBe('wipe_reveal') const aliens = getAliens(afterHold.entities) - const scaled = getScaledConfig(1, afterHold.config) + const scaled = getScaledConfig(1, afterHold.wave, afterHold.difficulty) expect(aliens).toHaveLength(scaled.alienCols * scaled.alienRows) expect(aliens.every((a) => a.entering)).toBe(true) expect(aliens.every((a) => a.alive)).toBe(true) @@ -490,8 +490,9 @@ describe('Wave Progression', () => { // Tick until second kill - also disable alien movement by setting a high move interval // so the alien doesn't drift away from the bullet during travel + // (the reducer reads this from the difficulty snapshot, not GameConfig) current = structuredClone(current) - current.config.baseAlienMoveIntervalTicks = 99999 + current.difficulty.base.alienMoveIntervalTicks = 99999 let secondKilled = false for (let i = 0; i < 30; i++) { diff --git a/worker/src/game/reducer.test.ts b/worker/src/game/reducer.test.ts index 496209c..a1ccf24 100644 --- a/worker/src/game/reducer.test.ts +++ b/worker/src/game/reducer.test.ts @@ -4625,7 +4625,7 @@ describe('Collision Detection Property-Based Tests', () => { it('A2: alien visual overlap without collision — tick ordering bug', () => { const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) // Set tick so that aliens will move on THIS tick (tick % alienMoveIntervalTicks === 0) // After increment in reducer: (tick+1) % interval === 0 => tick+1 must be divisible @@ -5017,7 +5017,7 @@ describe('Collision Detection Property-Based Tests', () => { // on the same tick — no 1-frame delay where bullet visually overlaps alien. const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) // Set tick so aliens move this tick: (tick+1) % alienMoveIntervalTicks === 0 state.tick = scaled.alienMoveIntervalTicks - 1 @@ -5280,7 +5280,7 @@ describe('Tick ordering: aliens move before collision checks', () => { // inside alien hitbox [52,57) AFTER alien moves from x=50 to x=52. const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) state.tick = scaled.alienMoveIntervalTicks - 1 @@ -5306,7 +5306,7 @@ describe('Tick ordering: aliens move before collision checks', () => { // Alien drops down and collision registers on the same tick const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) state.tick = scaled.alienMoveIntervalTicks - 1 @@ -5333,7 +5333,7 @@ describe('Tick ordering: aliens move before collision checks', () => { // On ticks where aliens don't move, collision works as before const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) // Ensure tick is NOT an alien move tick state.tick = scaled.alienMoveIntervalTicks @@ -5353,7 +5353,7 @@ describe('Tick ordering: aliens move before collision checks', () => { it('alien-barrier collision uses post-move positions', () => { // Verify aliens destroy barriers at their new positions after dropping const { state } = createTestPlayingState(1) - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) state.tick = scaled.alienMoveIntervalTicks - 1 @@ -5385,7 +5385,7 @@ describe('Tick ordering: aliens move before collision checks', () => { for (let seed = 0; seed < 100; seed++) { const { state, players } = createTestPlayingState(1) const playerId = players[0].id - const scaled = getScaledConfig(1, state.config) + const scaled = getScaledConfig(1, state.wave, state.difficulty) state.tick = scaled.alienMoveIntervalTicks - 1 state.rngSeed = seed * 7 + 1 diff --git a/worker/src/game/reducer.ts b/worker/src/game/reducer.ts index f00b483..129d04f 100644 --- a/worker/src/game/reducer.ts +++ b/worker/src/game/reducer.ts @@ -298,8 +298,10 @@ function startSoloReducer(state: GameState): ReducerResult { const next = structuredClone(state) next.status = 'wipe_hold' // Skip exit, go straight to hold for game start next.mode = 'solo' - next.maxLives = 3 - next.lives = 3 + // Lives come from the difficulty snapshot (3 with DEFAULT_DIFFICULTY) + const scaled = getScaledConfig(1, 1, next.difficulty) + next.maxLives = scaled.lives + next.lives = scaled.lives // Patch all players' lives to match solo config for (const player of Object.values(next.players)) { player.lives = next.lives @@ -399,7 +401,7 @@ function wipeTickReducer(state: GameState): ReducerResult { next.wipeTicksRemaining = WIPE_TIMING.REVEAL_TICKS // Spawn the wave's alien formation when entering wipe_reveal const playerCount = Object.keys(next.players).length - const scaled = getScaledConfig(playerCount, next.config) + const scaled = getScaledConfig(playerCount, next.wave, next.difficulty) const aliens = createAlienFormation( scaled.alienCols, scaled.alienRows, @@ -455,7 +457,7 @@ function tickReducer(state: GameState): ReducerResult { const events: ServerEvent[] = [] const playerCount = Object.keys(next.players).length - const scaled = getScaledConfig(playerCount, next.config) + const scaled = getScaledConfig(playerCount, next.wave, next.difficulty) // 1. Apply player movement from held input for (const player of Object.values(next.players)) { diff --git a/worker/src/game/scaling.test.ts b/worker/src/game/scaling.test.ts index 87a986c..e2d449a 100644 --- a/worker/src/game/scaling.test.ts +++ b/worker/src/game/scaling.test.ts @@ -3,191 +3,192 @@ import { describe, it, expect } from 'vitest' import { getScaledConfig, getPlayerSpawnX } from './scaling' -import { DEFAULT_CONFIG, STANDARD_WIDTH } from '../../../shared/types' +import { DEFAULT_CONFIG, DEFAULT_DIFFICULTY, STANDARD_WIDTH, type DifficultyConfig } from '../../../shared/types' // ============================================================================ // getScaledConfig Tests // ============================================================================ describe('getScaledConfig', () => { - describe('1 player (solo) configuration', () => { - it('returns lives = 3', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) - expect(scaled.lives).toBe(3) - }) - - it('returns speedMult = 1.0 (base alien move interval)', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) - // alienMoveIntervalTicks = floor(baseAlienMoveIntervalTicks / 1.0) - expect(scaled.alienMoveIntervalTicks).toBe(DEFAULT_CONFIG.baseAlienMoveIntervalTicks) + // GOLDEN TESTS (spec §2.4 / Gate 1): DEFAULT_DIFFICULTY must reproduce the + // pre-extraction hardcoded values bit-for-bit. Any drift here means the + // config refactor changed shipped behavior — that is a failure, not a tune. + describe('DEFAULT_DIFFICULTY reproduces shipped values (golden)', () => { + const golden = { + 1: { alienMoveIntervalTicks: 18, shootMult: 1.0, alienCols: 11, alienRows: 5, lives: 3, barriers: 3 }, + 2: { alienMoveIntervalTicks: 14, shootMult: 1.5, alienCols: 11, alienRows: 5, lives: 5, barriers: 4 }, + 3: { alienMoveIntervalTicks: 12, shootMult: 2.0, alienCols: 13, alienRows: 5, lives: 5, barriers: 4 }, + 4: { alienMoveIntervalTicks: 10, shootMult: 2.5, alienCols: 13, alienRows: 6, lives: 5, barriers: 4 }, + } as const + + for (const playerCount of [1, 2, 3, 4] as const) { + it(`${playerCount} player(s): exact pre-refactor values`, () => { + const expected = golden[playerCount] + const scaled = getScaledConfig(playerCount, 1, DEFAULT_DIFFICULTY) + + expect(scaled.alienMoveIntervalTicks).toBe(expected.alienMoveIntervalTicks) + // Exact equality: same floats, same multiplication as the old code + // (0.016 * shootMult), so this must be bit-identical — not toBeCloseTo. + expect(scaled.alienShootProbability).toBe(DEFAULT_CONFIG.baseAlienShootRate * expected.shootMult) + expect(scaled.alienCols).toBe(expected.alienCols) + expect(scaled.alienRows).toBe(expected.alienRows) + expect(scaled.lives).toBe(expected.lives) + expect(scaled.barriers).toBe(expected.barriers) + }) + } + + it('shoot probabilities are the documented 0.016 / 0.024 / 0.032 / 0.040 per tick', () => { + expect(getScaledConfig(1, 1, DEFAULT_DIFFICULTY).alienShootProbability).toBeCloseTo(0.016, 10) + expect(getScaledConfig(2, 1, DEFAULT_DIFFICULTY).alienShootProbability).toBeCloseTo(0.024, 10) + expect(getScaledConfig(3, 1, DEFAULT_DIFFICULTY).alienShootProbability).toBeCloseTo(0.032, 10) + expect(getScaledConfig(4, 1, DEFAULT_DIFFICULTY).alienShootProbability).toBeCloseTo(0.04, 10) + }) + + it('DEFAULT_DIFFICULTY base rates match DEFAULT_CONFIG base rates', () => { + expect(DEFAULT_DIFFICULTY.base.alienShootRate).toBe(DEFAULT_CONFIG.baseAlienShootRate) + expect(DEFAULT_DIFFICULTY.base.alienMoveIntervalTicks).toBe(DEFAULT_CONFIG.baseAlienMoveIntervalTicks) + }) + + it('is named ship-v1 with shared lives and a zero wave ramp', () => { + expect(DEFAULT_DIFFICULTY.name).toBe('ship-v1') + expect(DEFAULT_DIFFICULTY.livesMode).toBe('shared') + expect(DEFAULT_DIFFICULTY.waveRamp).toEqual({ speedPctPerWave: 0, shootPctPerWave: 0, maxWaveForRamp: 8 }) }) + }) - it('returns alienCols = 11', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) + describe('edge cases', () => { + it('falls back to the 1-player entry for 0 players', () => { + const scaled = getScaledConfig(0, 1, DEFAULT_DIFFICULTY) + // Out-of-range counts use perPlayerCount[1] wholesale (the old code's + // `?? scaleTable[1]` fallback, now including lives from that entry). + expect(scaled.lives).toBe(3) expect(scaled.alienCols).toBe(11) - }) - - it('returns alienRows = 5', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) expect(scaled.alienRows).toBe(5) + expect(scaled.alienMoveIntervalTicks).toBe(18) }) - it('calculates alienShootProbability from baseAlienShootRate * 1.0 (solo)', () => { - const scaled = getScaledConfig(1, DEFAULT_CONFIG) - const expectedProbability = DEFAULT_CONFIG.baseAlienShootRate * 1.0 - expect(scaled.alienShootProbability).toBeCloseTo(expectedProbability, 5) - }) - }) - - describe('2 player configuration', () => { - it('returns lives = 5 (shared)', () => { - const scaled = getScaledConfig(2, DEFAULT_CONFIG) - expect(scaled.lives).toBe(5) - }) - - it('returns speedMult = 1.25 (faster alien move interval)', () => { - const scaled = getScaledConfig(2, DEFAULT_CONFIG) - // alienMoveIntervalTicks = floor(18 / 1.25) = floor(14.4) = 14 - const expectedInterval = Math.floor(DEFAULT_CONFIG.baseAlienMoveIntervalTicks / 1.25) - expect(scaled.alienMoveIntervalTicks).toBe(expectedInterval) - }) - - it('returns alienCols = 11', () => { - const scaled = getScaledConfig(2, DEFAULT_CONFIG) + it('falls back to the 1-player entry for invalid player count', () => { + const scaled = getScaledConfig(5, 1, DEFAULT_DIFFICULTY) + expect(scaled.lives).toBe(3) expect(scaled.alienCols).toBe(11) - }) - - it('returns alienRows = 5', () => { - const scaled = getScaledConfig(2, DEFAULT_CONFIG) expect(scaled.alienRows).toBe(5) }) - it('calculates alienShootProbability from baseAlienShootRate * 1.5 (2 players)', () => { - const scaled = getScaledConfig(2, DEFAULT_CONFIG) - const expectedProbability = DEFAULT_CONFIG.baseAlienShootRate * 1.5 - expect(scaled.alienShootProbability).toBeCloseTo(expectedProbability, 5) + it('falls back to the 1-player entry for negative player count', () => { + const scaled = getScaledConfig(-1, 1, DEFAULT_DIFFICULTY) + expect(scaled.lives).toBe(3) + expect(scaled.alienCols).toBe(11) + expect(scaled.alienRows).toBe(5) }) }) - describe('3 player configuration', () => { - it('returns lives = 5 (shared)', () => { - const scaled = getScaledConfig(3, DEFAULT_CONFIG) - expect(scaled.lives).toBe(5) - }) - - it('returns speedMult = 1.5 (faster alien move interval)', () => { - const scaled = getScaledConfig(3, DEFAULT_CONFIG) - // alienMoveIntervalTicks = floor(18 / 1.5) = floor(12) = 12 - const expectedInterval = Math.floor(DEFAULT_CONFIG.baseAlienMoveIntervalTicks / 1.5) - expect(scaled.alienMoveIntervalTicks).toBe(expectedInterval) - }) - - it('returns alienCols = 13', () => { - const scaled = getScaledConfig(3, DEFAULT_CONFIG) - expect(scaled.alienCols).toBe(13) - }) + describe('alienShootProbability scaling', () => { + it('increases monotonically with player count', () => { + const prob1 = getScaledConfig(1, 1, DEFAULT_DIFFICULTY).alienShootProbability + const prob2 = getScaledConfig(2, 1, DEFAULT_DIFFICULTY).alienShootProbability + const prob3 = getScaledConfig(3, 1, DEFAULT_DIFFICULTY).alienShootProbability + const prob4 = getScaledConfig(4, 1, DEFAULT_DIFFICULTY).alienShootProbability - it('returns alienRows = 5', () => { - const scaled = getScaledConfig(3, DEFAULT_CONFIG) - expect(scaled.alienRows).toBe(5) + expect(prob2).toBeGreaterThan(prob1) + expect(prob3).toBeGreaterThan(prob2) + expect(prob4).toBeGreaterThan(prob3) }) - it('calculates alienShootProbability from baseAlienShootRate * 2.0 (3 players)', () => { - const scaled = getScaledConfig(3, DEFAULT_CONFIG) - const expectedProbability = DEFAULT_CONFIG.baseAlienShootRate * 2.0 - expect(scaled.alienShootProbability).toBeCloseTo(expectedProbability, 5) + it('stays within reasonable bounds (< 0.05 per tick)', () => { + for (let i = 1; i <= 4; i++) { + const scaled = getScaledConfig(i, 1, DEFAULT_DIFFICULTY) + expect(scaled.alienShootProbability).toBeLessThan(0.05) + expect(scaled.alienShootProbability).toBeGreaterThan(0) + } }) }) - describe('4 player configuration', () => { - it('returns lives = 5 (shared)', () => { - const scaled = getScaledConfig(4, DEFAULT_CONFIG) - expect(scaled.lives).toBe(5) - }) - - it('returns speedMult = 1.75 (fastest alien move interval)', () => { - const scaled = getScaledConfig(4, DEFAULT_CONFIG) - // alienMoveIntervalTicks = floor(18 / 1.75) = floor(10.28) = 10 - const expectedInterval = Math.floor(DEFAULT_CONFIG.baseAlienMoveIntervalTicks / 1.75) - expect(scaled.alienMoveIntervalTicks).toBe(expectedInterval) + describe('wave ramp', () => { + /** A copy of DEFAULT_DIFFICULTY with a non-zero ramp for the math tests. */ + function rampedConfig(speedPctPerWave: number, shootPctPerWave: number, maxWaveForRamp: number): DifficultyConfig { + const config = structuredClone(DEFAULT_DIFFICULTY) + config.name = 'ramp-test' + config.waveRamp = { speedPctPerWave, shootPctPerWave, maxWaveForRamp } + return config + } + + it('zero ramp (DEFAULT_DIFFICULTY): wave 5 is identical to wave 1', () => { + for (const playerCount of [1, 2, 3, 4]) { + expect(getScaledConfig(playerCount, 5, DEFAULT_DIFFICULTY)).toEqual( + getScaledConfig(playerCount, 1, DEFAULT_DIFFICULTY), + ) + } }) - it('returns alienCols = 13', () => { - const scaled = getScaledConfig(4, DEFAULT_CONFIG) - expect(scaled.alienCols).toBe(13) + it('non-zero ramp: wave 1 applies no ramp (min(wave, cap) - 1 = 0)', () => { + const config = rampedConfig(0.1, 0.2, 8) + const scaled = getScaledConfig(1, 1, config) + expect(scaled.alienMoveIntervalTicks).toBe(18) + expect(scaled.alienShootProbability).toBeCloseTo(0.016, 10) }) - it('returns alienRows = 6', () => { - const scaled = getScaledConfig(4, DEFAULT_CONFIG) - expect(scaled.alienRows).toBe(6) + it('non-zero ramp: applies the documented formulas at wave 3', () => { + const config = rampedConfig(0.1, 0.2, 8) + const scaled = getScaledConfig(1, 3, config) + // speedMult(3) = 1.0 * (1 + 0.1 * 2) = 1.2 → floor(18 / 1.2) = 15 + expect(scaled.alienMoveIntervalTicks).toBe(15) + // shootMult(3) = 1.0 * (1 + 0.2 * 2) = 1.4 → 0.016 * 1.4 = 0.0224 + expect(scaled.alienShootProbability).toBeCloseTo(0.0224, 10) }) - it('calculates alienShootProbability from baseAlienShootRate * 2.5 (4 players)', () => { - const scaled = getScaledConfig(4, DEFAULT_CONFIG) - const expectedProbability = DEFAULT_CONFIG.baseAlienShootRate * 2.5 - expect(scaled.alienShootProbability).toBeCloseTo(expectedProbability, 5) + it('non-zero ramp: compounds with the player-count multiplier', () => { + const config = rampedConfig(0.1, 0.2, 8) + const scaled = getScaledConfig(2, 3, config) + // speedMult(3) = 1.25 * 1.2 = 1.5 → floor(18 / 1.5) = 12 + expect(scaled.alienMoveIntervalTicks).toBe(12) + // shootMult(3) = 1.5 * 1.4 = 2.1 → 0.016 * 2.1 = 0.0336 + expect(scaled.alienShootProbability).toBeCloseTo(0.0336, 10) }) - }) - describe('edge cases', () => { - it('defaults to 1 player scale config for 0 players', () => { - const scaled = getScaledConfig(0, DEFAULT_CONFIG) - // Uses scaleTable[1] for cols/rows, but lives formula uses actual playerCount - // lives = playerCount === 1 ? 3 : 5 -> 0 !== 1 -> 5 - expect(scaled.lives).toBe(5) - expect(scaled.alienCols).toBe(11) - expect(scaled.alienRows).toBe(5) + it('ramp caps at maxWaveForRamp', () => { + const config = rampedConfig(0.1, 0.2, 4) + const atCap = getScaledConfig(1, 4, config) + expect(getScaledConfig(1, 5, config)).toEqual(atCap) + expect(getScaledConfig(1, 50, config)).toEqual(atCap) + // And the cap is genuinely harder than wave 1 + expect(atCap.alienMoveIntervalTicks).toBeLessThan(getScaledConfig(1, 1, config).alienMoveIntervalTicks) + expect(atCap.alienShootProbability).toBeGreaterThan(getScaledConfig(1, 1, config).alienShootProbability) }) - it('defaults to 1 player scale config for invalid player count', () => { - const scaled = getScaledConfig(5, DEFAULT_CONFIG) - // Uses scaleTable[1] for cols/rows, but lives formula uses actual playerCount - expect(scaled.lives).toBe(5) - expect(scaled.alienCols).toBe(11) - expect(scaled.alienRows).toBe(5) - }) - - it('defaults to 1 player scale config for negative player count', () => { - const scaled = getScaledConfig(-1, DEFAULT_CONFIG) - // Uses scaleTable[1] for cols/rows, but lives formula uses actual playerCount - expect(scaled.lives).toBe(5) - expect(scaled.alienCols).toBe(11) - expect(scaled.alienRows).toBe(5) + it('alienMoveIntervalTicks never drops below 1, even with an extreme ramp', () => { + const config = rampedConfig(10, 0, 8) + const scaled = getScaledConfig(4, 8, config) + expect(scaled.alienMoveIntervalTicks).toBe(1) }) }) - describe('alienMoveIntervalTicks calculation', () => { - it('correctly floors the result of division', () => { - // With baseAlienMoveIntervalTicks = 18: - // 1 player: 18 / 1.0 = 18 - // 2 players: 18 / 1.25 = 14.4 -> 14 - // 3 players: 18 / 1.5 = 12 - // 4 players: 18 / 1.75 = 10.28 -> 10 - - expect(getScaledConfig(1, DEFAULT_CONFIG).alienMoveIntervalTicks).toBe(18) - expect(getScaledConfig(2, DEFAULT_CONFIG).alienMoveIntervalTicks).toBe(14) - expect(getScaledConfig(3, DEFAULT_CONFIG).alienMoveIntervalTicks).toBe(12) - expect(getScaledConfig(4, DEFAULT_CONFIG).alienMoveIntervalTicks).toBe(10) + describe('livesMode', () => { + it("'shared' uses the configured pool as-is", () => { + expect(getScaledConfig(1, 1, DEFAULT_DIFFICULTY).lives).toBe(3) + expect(getScaledConfig(2, 1, DEFAULT_DIFFICULTY).lives).toBe(5) + expect(getScaledConfig(3, 1, DEFAULT_DIFFICULTY).lives).toBe(5) + expect(getScaledConfig(4, 1, DEFAULT_DIFFICULTY).lives).toBe(5) }) - }) - describe('alienShootProbability scaling', () => { - it('increases monotonically with player count', () => { - const prob1 = getScaledConfig(1, DEFAULT_CONFIG).alienShootProbability - const prob2 = getScaledConfig(2, DEFAULT_CONFIG).alienShootProbability - const prob3 = getScaledConfig(3, DEFAULT_CONFIG).alienShootProbability - const prob4 = getScaledConfig(4, DEFAULT_CONFIG).alienShootProbability - - expect(prob2).toBeGreaterThan(prob1) - expect(prob3).toBeGreaterThan(prob2) - expect(prob4).toBeGreaterThan(prob3) + it("'per-player' sizes the pool as lives × playerCount", () => { + const config = structuredClone(DEFAULT_DIFFICULTY) + config.livesMode = 'per-player' + expect(getScaledConfig(1, 1, config).lives).toBe(3) // 3 × 1 + expect(getScaledConfig(2, 1, config).lives).toBe(10) // 5 × 2 + expect(getScaledConfig(3, 1, config).lives).toBe(15) // 5 × 3 + expect(getScaledConfig(4, 1, config).lives).toBe(20) // 5 × 4 }) + }) - it('stays within reasonable bounds (< 0.05 per tick)', () => { - for (let i = 1; i <= 4; i++) { - const scaled = getScaledConfig(i, DEFAULT_CONFIG) - expect(scaled.alienShootProbability).toBeLessThan(0.05) - expect(scaled.alienShootProbability).toBeGreaterThan(0) + describe('JSON round-trip', () => { + it('serialize → parse drives identical output (config is one JSON document)', () => { + const roundTripped = JSON.parse(JSON.stringify(DEFAULT_DIFFICULTY)) as DifficultyConfig + for (const playerCount of [1, 2, 3, 4]) { + for (const wave of [1, 2, 5, 10]) { + expect(getScaledConfig(playerCount, wave, roundTripped)).toEqual( + getScaledConfig(playerCount, wave, DEFAULT_DIFFICULTY), + ) + } } }) }) diff --git a/worker/src/game/scaling.ts b/worker/src/game/scaling.ts index b024feb..059139f 100644 --- a/worker/src/game/scaling.ts +++ b/worker/src/game/scaling.ts @@ -1,7 +1,7 @@ // worker/src/game/scaling.ts // Player count scaling logic -import type { GameConfig, ScaledConfig, GameState } from '../../../shared/types' +import type { DifficultyConfig, GameConfig, ScaledConfig, GameState } from '../../../shared/types' import { LAYOUT, ALIEN_MOVE_STEP, @@ -11,26 +11,35 @@ import { applyPlayerInput, } from '../../../shared/types' -export function getScaledConfig(playerCount: number, baseConfig: GameConfig): ScaledConfig { - // Scaling table per player count. shootMult is applied to baseAlienShootRate - // from GameConfig so the base probability is configurable rather than hardcoded. - const scaleTable = { - 1: { speedMult: 1.0, shootMult: 1.0, cols: 11, rows: 5 }, // base rate - 2: { speedMult: 1.25, shootMult: 1.5, cols: 11, rows: 5 }, // 50% more shooting - 3: { speedMult: 1.5, shootMult: 2.0, cols: 13, rows: 5 }, // 2x shooting - 4: { speedMult: 1.75, shootMult: 2.5, cols: 13, rows: 6 }, // 2.5x shooting - } - const scale = scaleTable[playerCount as keyof typeof scaleTable] ?? scaleTable[1] +/** + * Resolve the effective game parameters for a player count and wave from a + * DifficultyConfig document (see specs/difficulty-tuning-spec.md §2.3). + * + * Wave ramp (no-op with DEFAULT_DIFFICULTY's all-zero waveRamp): + * speedMult(wave) = speedMult * (1 + speedPctPerWave * (min(wave, maxWaveForRamp) - 1)) + * shootMult(wave) = shootMult * (1 + shootPctPerWave * (min(wave, maxWaveForRamp) - 1)) + */ +export function getScaledConfig(playerCount: number, wave: number, difficulty: DifficultyConfig): ScaledConfig { + // Out-of-range player counts (0, 5, …) fall back to the 1-player entry, + // matching the old hardcoded table's `?? scaleTable[1]` behavior. + const entry = difficulty.perPlayerCount[playerCount as 1 | 2 | 3 | 4] ?? difficulty.perPlayerCount[1] + + const { speedPctPerWave, shootPctPerWave, maxWaveForRamp } = difficulty.waveRamp + const rampWaves = Math.min(wave, maxWaveForRamp) - 1 + const speedMult = entry.speedMult * (1 + speedPctPerWave * rampWaves) + const shootMult = entry.shootMult * (1 + shootPctPerWave * rampWaves) - // Use baseAlienShootRate from config as the base, scaled by player count - const shootProbability = baseConfig.baseAlienShootRate * scale.shootMult + // The game's lives mechanics are a shared pool; 'per-player' mode just + // sizes the pool proportionally to player count. + const lives = difficulty.livesMode === 'per-player' ? entry.lives * playerCount : entry.lives return { - alienMoveIntervalTicks: Math.floor(baseConfig.baseAlienMoveIntervalTicks / scale.speedMult), - alienShootProbability: shootProbability, // ~0.016 to 0.040 per tick - alienCols: scale.cols, - alienRows: scale.rows, - lives: playerCount === 1 ? 3 : 5, + alienMoveIntervalTicks: Math.max(1, Math.floor(difficulty.base.alienMoveIntervalTicks / speedMult)), + alienShootProbability: difficulty.base.alienShootRate * shootMult, // ~0.016 to 0.040 per tick (default) + alienCols: entry.cols, + alienRows: entry.rows, + lives, + barriers: entry.barriers, } } @@ -53,7 +62,7 @@ export function getPlayerSpawnX(slot: number, playerCount: number, screenWidth: // Does NOT validate full game loop - only tests basic movement physics export function tickMovementOnly(state: GameState, config: GameConfig): GameState { const playerCount = Object.keys(state.players).length - const scaled = getScaledConfig(playerCount, config) + const scaled = getScaledConfig(playerCount, state.wave, state.difficulty) // Clone state to avoid mutation const next = structuredClone(state) diff --git a/worker/wrangler.jsonc b/worker/wrangler.jsonc index 4454d64..c4c54fd 100644 --- a/worker/wrangler.jsonc +++ b/worker/wrangler.jsonc @@ -15,6 +15,16 @@ "binding": "ASSETS", "not_found_handling": "single-page-application" }, + // Difficulty override: DIFFICULTY_CONFIG is a JSON-serialized + // DifficultyConfig document (see shared/types.ts). When unset, games use + // DEFAULT_DIFFICULTY ("ship-v1") — no var needed for shipped behavior. + // Invalid values log `difficulty_config_invalid` and fall back to defaults. + // For the local playtest loop, prefer `.dev.vars`: + // DIFFICULTY_CONFIG={"name":"flatter-multi-A","base":{...},"perPlayerCount":{...},"livesMode":"shared","waveRamp":{...}} + // then restart `wrangler dev`. Example production override: + // "vars": { + // "DIFFICULTY_CONFIG": "{\"name\":\"flatter-multi-A\",\"base\":{\"alienShootRate\":0.016,\"alienMoveIntervalTicks\":18},\"perPlayerCount\":{\"1\":{\"speedMult\":1,\"shootMult\":1,\"cols\":11,\"rows\":5,\"lives\":3,\"barriers\":3},\"2\":{\"speedMult\":1.1,\"shootMult\":1.2,\"cols\":11,\"rows\":5,\"lives\":6,\"barriers\":4},\"3\":{\"speedMult\":1.2,\"shootMult\":1.4,\"cols\":13,\"rows\":5,\"lives\":9,\"barriers\":4},\"4\":{\"speedMult\":1.3,\"shootMult\":1.6,\"cols\":13,\"rows\":6,\"lives\":12,\"barriers\":4}},\"livesMode\":\"shared\",\"waveRamp\":{\"speedPctPerWave\":0.05,\"shootPctPerWave\":0.05,\"maxWaveForRamp\":8}}" + // }, "durable_objects": { "bindings": [ { "name": "GAME_ROOM", "class_name": "GameRoom" }, From 72b35dc32c5a55f7cdd19eb8beac5b652c315dcc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 09:56:36 +0000 Subject: [PATCH 06/11] =?UTF-8?q?Add=20bot=20simulation=20harness=20for=20?= =?UTF-8?q?difficulty=20tuning=20(spec=20Part=202,=20=C2=A73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Headless simulation of full games through the pure gameReducer: - worker/src/sim/bot.ts: three fixed bot policies (random, novice, competent) as pure functions of (GameState, slot, gameSeed). Bots act through the same reducer actions real clients use (PLAYER_INPUT held keys + PLAYER_SHOOT); randomness is a pure hash of (gameSeed, slot, tick) — no Math.random anywhere. - worker/src/sim/runner.ts: runSimGame() builds a startGame()-equivalent initial state (wipe_hold, barriers per difficulty config, seeded RNG) and loops bot intents + TICK to game_over or tick cap, returning a GameResult per spec §3.5. Default cap is 18,000 ticks (10 sim-min): the reducer's per-tick structuredClone limits throughput to ~5k ticks/s, so the spec's 54,000 default would make 500-game cells take ~30 min (§3.6 says lower the cap before the sample count). - worker/src/sim/experiment.ts: (config × playerCount × policy × seed) grid with per-cell median/p25/p75, defeat-before-wave-2 rate, mean wave-1 lives lost, outcome breakdown. - worker/src/sim/report.ts: markdown table grouped by config + JSON. - worker/src/sim/cli.ts: `bun run sim -- --configs ... --games N`; built-in configs resolve from worker/src/sim/configs/. - worker/src/sim/configs/: ship-v1 (= DEFAULT_DIFFICULTY), easier-multi, flat, classic-ramp — the four visualizer presets. - worker/src/sim/sim.test.ts: §3.7 validation — determinism (same seed → deep-equal GameResult), skill ordering over 20 seeds (median survival competent > novice > random: ~13k > ~1k > ~0.6k ticks solo), wave progression (competent clears wave 1), config validation. Not wired into the worker entry graph — src/index.ts does not import sim/, so nothing here ships in the production bundle. First measurement (ship-v1, competent, 20 seeds): solo median final wave 16.5 with 0% defeat before wave 2; 4-player games end by invasion at tick 190 with 100% defeat before wave 2 — the 13-column formation is wider than the alien movement range, so it drops every move interval. This is the quantified version of the "multiplayer is unfair" report. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- worker/package.json | 3 +- worker/src/sim/bot.ts | 321 +++++++++++++++++++++++ worker/src/sim/cli.ts | 167 ++++++++++++ worker/src/sim/configs/classic-ramp.json | 19 ++ worker/src/sim/configs/easier-multi.json | 19 ++ worker/src/sim/configs/flat.json | 19 ++ worker/src/sim/configs/ship-v1.json | 19 ++ worker/src/sim/experiment.ts | 121 +++++++++ worker/src/sim/report.ts | 53 ++++ worker/src/sim/runner.ts | 238 +++++++++++++++++ worker/src/sim/sim.test.ts | 119 +++++++++ 11 files changed, 1097 insertions(+), 1 deletion(-) create mode 100644 worker/src/sim/bot.ts create mode 100644 worker/src/sim/cli.ts create mode 100644 worker/src/sim/configs/classic-ramp.json create mode 100644 worker/src/sim/configs/easier-multi.json create mode 100644 worker/src/sim/configs/flat.json create mode 100644 worker/src/sim/configs/ship-v1.json create mode 100644 worker/src/sim/experiment.ts create mode 100644 worker/src/sim/report.ts create mode 100644 worker/src/sim/runner.ts create mode 100644 worker/src/sim/sim.test.ts diff --git a/worker/package.json b/worker/package.json index e5dbf5f..4c4d5ea 100644 --- a/worker/package.json +++ b/worker/package.json @@ -11,7 +11,8 @@ "typecheck": "tsc --noEmit", "pretest": "node ../scripts/write-build-info.mjs", "test": "vitest run", - "test:watch": "vitest" + "test:watch": "vitest", + "sim": "bun src/sim/cli.ts" }, "devDependencies": { "@cloudflare/workers-types": "^4.20250124.0", diff --git a/worker/src/sim/bot.ts b/worker/src/sim/bot.ts new file mode 100644 index 0000000..f5ddd3e --- /dev/null +++ b/worker/src/sim/bot.ts @@ -0,0 +1,321 @@ +// worker/src/sim/bot.ts +// Bot policies for the simulation harness (specs/difficulty-tuning-spec.md §3.3). +// +// Each policy is a PURE function of (GameState, slot, gameSeed) → BotIntent. +// Bots act through the same input surface real clients use: the runner turns +// BotIntent into PLAYER_INPUT (held keys) and PLAYER_SHOOT reducer actions — +// exactly what GameRoom queues when it receives `input` / `shoot` WS messages. +// +// Determinism: bot randomness comes from a pure hash of +// (gameSeed, slot, tick, salt) — never Math.random, never state.rngSeed +// (which the reducer mutates). Same seed → identical game. + +import type { GameState, Player, AlienEntity, BulletEntity, BarrierEntity, InputState } from '../../../shared/types' +import { LAYOUT, HITBOX, getAliens, getBullets, getBarriers } from '../../../shared/types' + +// ─── Intent ─────────────────────────────────────────────────────────────────── + +export interface BotIntent { + input: InputState // held movement keys (PLAYER_INPUT) + shoot: boolean // discrete shoot intent (PLAYER_SHOOT) +} + +export type BotPolicyName = 'random' | 'novice' | 'competent' + +export type BotPolicy = (state: GameState, slot: number, gameSeed: number) => BotIntent + +const IDLE: BotIntent = { input: { left: false, right: false }, shoot: false } + +// ─── Deterministic bot RNG ─────────────────────────────────────────────────── + +/** + * Pure hash → [0, 1). Mulberry32-style finalizer over a mix of + * (gameSeed, slot, tick, salt). No internal state, no Math.random. + */ +export function botRand(gameSeed: number, slot: number, tick: number, salt: number): number { + let h = (gameSeed | 0) ^ Math.imul(slot + 1, 0x85ebca6b) ^ Math.imul(tick + 1, 0xc2b2ae35) ^ Math.imul(salt + 1, 0x27d4eb2f) + h = Math.imul(h ^ (h >>> 15), h | 1) + h ^= h + Math.imul(h ^ (h >>> 7), h | 61) + return ((h ^ (h >>> 14)) >>> 0) / 4294967296 +} + +// ─── Shared perception helpers ─────────────────────────────────────────────── + +function findPlayer(state: GameState, slot: number): Player | undefined { + for (const p of Object.values(state.players)) { + if (p.slot === slot) return p + } + return undefined +} + +function liveAliens(state: GameState): AlienEntity[] { + return getAliens(state.entities).filter((a) => a.alive) +} + +/** Alien bullets (dy === 1) currently in flight. */ +function alienBullets(state: GameState): BulletEntity[] { + return getBullets(state.entities).filter((b) => b.dy === 1) +} + +function cooldownReady(state: GameState, player: Player): boolean { + return state.tick - player.lastShotTick >= state.config.playerCooldownTicks +} + +function alienCenterX(a: AlienEntity): number { + return a.x + Math.floor(LAYOUT.ALIEN_WIDTH / 2) +} + +/** + * Is some live alien "aligned" with x? A player bullet at x hits an alien when + * x ∈ [alien.x, alien.x + ALIEN_WIDTH); `slack` widens that band to tolerate + * formation drift during bullet flight. + */ +function alignedWithAlien(aliens: AlienEntity[], x: number, slack: number): boolean { + for (const a of aliens) { + if (x >= a.x - slack && x < a.x + HITBOX.ALIEN_WIDTH + slack) return true + } + return false +} + +/** + * Would a bullet fired from x be absorbed by one of our own barriers? + * A barrier segment spans [segX, segX + 3) horizontally; intact segments + * (health > 0) at any row block the shot before it reaches the aliens. + */ +function blockedByBarrier(barriers: BarrierEntity[], x: number): boolean { + for (const barrier of barriers) { + for (const seg of barrier.segments) { + if (seg.health <= 0) continue + const segX = barrier.x + seg.offsetX * HITBOX.BARRIER_SEGMENT_WIDTH + if (x >= segX && x < segX + HITBOX.BARRIER_SEGMENT_WIDTH) return true + } + } + return false +} + +/** + * Nearest incoming alien bullet within `hWindow` cells horizontally of px and + * at/below minY (i.e. close enough to matter). Returns the lowest (closest) one. + */ +function nearestThreat(bullets: BulletEntity[], px: number, hWindow: number, minY: number): BulletEntity | null { + let best: BulletEntity | null = null + for (const b of bullets) { + if (Math.abs(b.x - px) > hWindow) continue + if (b.y < minY || b.y > LAYOUT.PLAYER_Y) continue + if (!best || b.y > best.y) best = b + } + return best +} + +function moveToward(px: number, targetX: number, deadZone: number): InputState { + if (targetX < px - deadZone) return { left: true, right: false } + if (targetX > px + deadZone) return { left: false, right: true } + return { left: false, right: false } +} + +function dodgeAway(px: number, bulletX: number): InputState { + // Move away from the bullet; ties break toward the side with more room. + if (bulletX > px) return { left: true, right: false } + if (bulletX < px) return { left: false, right: true } + return px > (LAYOUT.PLAYER_MIN_X + LAYOUT.PLAYER_MAX_X) / 2 + ? { left: true, right: false } + : { left: false, right: true } +} + +// ─── Policy: random ────────────────────────────────────────────────────────── +// Floor — worst realistic player. Random direction changes, random shooting. + +const randomPolicy: BotPolicy = (state, slot, gameSeed) => { + const me = findPlayer(state, slot) + if (!me?.alive) return IDLE + + // Re-roll held direction every ~20 ticks (random direction changes). + const epoch = Math.floor(state.tick / 20) + const r = botRand(gameSeed, slot, epoch, 1) + const input: InputState = + r < 1 / 3 ? { left: true, right: false } : r < 2 / 3 ? { left: false, right: true } : { left: false, right: false } + + // Random shooting, unrelated to aim. + const shoot = cooldownReady(state, me) && botRand(gameSeed, slot, state.tick, 2) < 0.3 + + return { input, shoot } +} + +// ─── Policy: novice ────────────────────────────────────────────────────────── +// Approximates a casual player: dodges the nearest alien bullet if within +// 3 cells horizontally, else drifts toward the nearest alien column. Shoots +// when any alien is within ±2 columns, but only acts on ~50% of cooldown +// opportunities (one decision per cooldown window, not per tick). + +const novicePolicy: BotPolicy = (state, slot, gameSeed) => { + const me = findPlayer(state, slot) + if (!me?.alive) return IDLE + + const aliens = liveAliens(state) + let input: InputState = { left: false, right: false } + + // Dodge the nearest alien bullet within 3 cells horizontally — but only + // once it is visibly approaching (lower half of the screen), like a casual + // player reacting rather than tracking every spawn. + const threat = nearestThreat(alienBullets(state), me.x, 3, 10) + if (threat) { + input = dodgeAway(me.x, threat.x) + } else if (aliens.length > 0) { + // Drift toward the nearest alien column, hovering near it rather than + // parking exactly in its firing lane. + let nearest = aliens[0] + let bestDx = Math.abs(alienCenterX(nearest) - me.x) + for (const a of aliens) { + const dx = Math.abs(alienCenterX(a) - me.x) + if (dx < bestDx) { + bestDx = dx + nearest = a + } + } + input = moveToward(me.x, alienCenterX(nearest), 4) + } + + // Shoot when any alien is within ±2 cells of the hit band — but only take + // ~50% of cooldown opportunities. The roll is per cooldown window so a + // failed roll skips the whole window instead of re-rolling next tick. + let shoot = false + if (cooldownReady(state, me) && alignedWithAlien(aliens, me.x, 2)) { + const window = Math.floor(state.tick / state.config.playerCooldownTicks) + shoot = botRand(gameSeed, slot, window, 3) < 0.5 + } + + return { input, shoot } +} + +// ─── Policy: competent ─────────────────────────────────────────────────────── +// Approximates a player who has played a few games: predicts bullet impacts +// and dodges, camps under the alien formation edge (dodging OUTWARD past the +// edge where no alien can shoot), retreats behind the nearest barrier when +// several bullets are close, and shoots every cooldown when roughly aligned — +// never wasting shots into its own barriers. + +/** Alien bullets move 1 cell/tick but skip every 5th tick → 0.8 cells/tick. */ +const ALIEN_BULLET_SPEED = 0.8 + +function ticksToImpact(bulletY: number): number { + return (LAYOUT.PLAYER_Y - bulletY) / ALIEN_BULLET_SPEED +} + +const competentPolicy: BotPolicy = (state, slot, _gameSeed) => { + const me = findPlayer(state, slot) + if (!me?.alive) return IDLE + + const aliens = liveAliens(state) + const bullets = alienBullets(state) + const barriers = getBarriers(state.entities) + + let input: InputState = { left: false, right: false } + + // Threat model: a bullet is dangerous if it lands soon and within the + // player kill zone (±3) plus a safety margin of 1. + let threat: BulletEntity | null = null + let pressure = 0 + for (const b of bullets) { + const dt = ticksToImpact(b.y) + if (dt > 22) continue + if (Math.abs(b.x - me.x) <= 4 && (!threat || b.y > threat.y)) threat = b + if (Math.abs(b.x - me.x) <= 9) pressure++ + } + + // Where is the formation edge we want to camp under? Clamp the camping + // spot away from the screen walls so we never get pinned in a corner when + // the formation hugs a wall. + const campMin = LAYOUT.PLAYER_MIN_X + 9 + const campMax = LAYOUT.PLAYER_MAX_X - 9 + let leftmost: AlienEntity | null = null + let rightmost: AlienEntity | null = null + for (const a of aliens) { + if (!leftmost || a.x < leftmost.x) leftmost = a + if (!rightmost || a.x > rightmost.x) rightmost = a + } + const edge = + leftmost && rightmost + ? Math.abs(alienCenterX(leftmost) - me.x) <= Math.abs(alienCenterX(rightmost) - me.x) + ? { x: Math.max(campMin, alienCenterX(leftmost)), outwardDir: -1 } + : { x: Math.min(campMax, alienCenterX(rightmost)), outwardDir: 1 } + : null + + if (threat) { + let handled = false + if (pressure >= 3) { + // Several bullets incoming: retreat behind the nearest barrier with + // intact segments (barriers absorb alien bullets). + let bestX: number | null = null + let bestDx = Infinity + for (const barrier of barriers) { + if (!barrier.segments.some((s) => s.health > 0)) continue + const center = barrier.x + Math.floor((HITBOX.BARRIER_SEGMENT_WIDTH * BARRIER_COLS) / 2) + const dx = Math.abs(center - me.x) + if (dx < bestDx) { + bestDx = dx + bestX = center + } + } + if (bestX !== null && bestDx <= 14) { + input = moveToward(me.x, bestX, 1) + handled = true + } + } + if (!handled) { + // Dodge outward past the formation edge when camping there — no alien + // is beyond the edge, so that lane is bullet-free. Only when outward + // means crossing the bullet's lane or running out of screen, step away + // from the predicted impact point instead. Never dodge into a wall. + let dir: -1 | 1 + const outwardRoom = edge && edge.outwardDir === -1 ? me.x - LAYOUT.PLAYER_MIN_X : LAYOUT.PLAYER_MAX_X - me.x + const outwardSafe = edge !== null && (threat.x - me.x) * edge.outwardDir <= 0 && outwardRoom >= 8 + if (outwardSafe && edge) { + dir = edge.outwardDir as -1 | 1 + } else { + dir = threat.x >= me.x ? -1 : 1 + } + if (dir === -1 && me.x <= LAYOUT.PLAYER_MIN_X + 3) dir = 1 + if (dir === 1 && me.x >= LAYOUT.PLAYER_MAX_X - 3) dir = -1 + input = dir === -1 ? { left: true, right: false } : { left: false, right: true } + } + } else if (edge) { + // Camp under the formation edge, nudged off any spot where our own + // barrier would eat the shot. + let targetX = edge.x + if (blockedByBarrier(barriers, targetX)) { + for (let d = 1; d <= 10; d++) { + if (!blockedByBarrier(barriers, targetX - d)) { + targetX -= d + break + } + if (!blockedByBarrier(barriers, targetX + d)) { + targetX += d + break + } + } + } + input = moveToward(me.x, targetX, 0) + } + + // Shoot every cooldown when roughly aligned and not firing into a barrier. + const shoot = cooldownReady(state, me) && alignedWithAlien(aliens, me.x, 1) && !blockedByBarrier(barriers, me.x) + + return { input, shoot } +} + +/** Columns per barrier (BARRIER_SHAPE is 5 segments wide). */ +const BARRIER_COLS = 5 + +// ─── Registry ───────────────────────────────────────────────────────────────── + +export const BOT_POLICIES: Record = { + random: randomPolicy, + novice: novicePolicy, + competent: competentPolicy, +} + +export const BOT_POLICY_NAMES: BotPolicyName[] = ['random', 'novice', 'competent'] + +export function isBotPolicyName(value: string): value is BotPolicyName { + return (BOT_POLICY_NAMES as string[]).includes(value) +} diff --git a/worker/src/sim/cli.ts b/worker/src/sim/cli.ts new file mode 100644 index 0000000..a5f0f93 --- /dev/null +++ b/worker/src/sim/cli.ts @@ -0,0 +1,167 @@ +// worker/src/sim/cli.ts +// CLI entry point for the bot simulation harness. Runs under bun only: +// +// bun worker/src/sim/cli.ts --configs ship-v1,easier-multi --games 500 \ +// --policies novice,competent --players 1,2,3,4 --cap 54000 --out sim-out +// +// Built-in config names resolve from worker/src/sim/configs/; anything else +// is treated as a path to a DifficultyConfig JSON file. +// +// NOT part of the production worker bundle: nothing under src/sim/ is +// imported from src/index.ts (the wrangler entry graph). +// +// Note on determinism: the simulation itself (bot.ts / runner.ts / +// experiment.ts) uses no Math.random or Date.now. Date.now appears below +// for throughput display only. + +import { validateDifficultyConfig, type DifficultyConfig } from '../../../shared/types' +import { runExperiment } from './experiment' +import { formatMarkdownReport, formatJsonReport } from './report' +import { DEFAULT_TICK_CAP } from './runner' +import { isBotPolicyName, type BotPolicyName } from './bot' +import shipV1 from './configs/ship-v1.json' +import easierMulti from './configs/easier-multi.json' +import flat from './configs/flat.json' +import classicRamp from './configs/classic-ramp.json' + +// Bun-only globals (the CLI never runs in the Workers runtime, so these are +// not in @cloudflare/workers-types). +declare const Bun: { + file(path: string): { text(): Promise } + write(path: string, data: string): Promise +} +declare const process: { argv: string[]; exit(code?: number): never } + +// ─── Built-in configs ───────────────────────────────────────────────────────── + +export const BUILTIN_CONFIGS: Record = { + 'ship-v1': shipV1, + 'easier-multi': easierMulti, + flat, + 'classic-ramp': classicRamp, +} + +async function resolveConfig(token: string): Promise { + let raw: unknown + if (token in BUILTIN_CONFIGS) { + raw = BUILTIN_CONFIGS[token] + } else { + raw = JSON.parse(await Bun.file(token).text()) + } + const issues = validateDifficultyConfig(raw) + if (issues.length > 0) { + throw new Error(`Invalid difficulty config "${token}":\n - ${issues.join('\n - ')}`) + } + return raw as DifficultyConfig +} + +// ─── Arg parsing ────────────────────────────────────────────────────────────── + +interface CliOptions { + configs: string[] + games: number + policies: BotPolicyName[] + players: number[] + cap: number + out: string | null +} + +export function parseArgs(argv: string[]): CliOptions { + const opts: CliOptions = { + configs: ['ship-v1'], + games: 100, + policies: ['novice', 'competent'], + players: [1, 2, 3, 4], + cap: DEFAULT_TICK_CAP, + out: null, + } + + for (let i = 0; i < argv.length; i++) { + const flag = argv[i] + if (!flag.startsWith('--')) continue + const value = argv[++i] + if (value === undefined) throw new Error(`Missing value for ${flag}`) + + switch (flag) { + case '--configs': + opts.configs = value.split(',').filter(Boolean) + break + case '--games': + opts.games = Number(value) + if (!Number.isInteger(opts.games) || opts.games < 1) throw new Error(`--games must be a positive integer`) + break + case '--policies': + opts.policies = value.split(',').filter(Boolean).map((p) => { + if (!isBotPolicyName(p)) throw new Error(`Unknown policy "${p}" (random | novice | competent)`) + return p + }) + break + case '--players': + opts.players = value.split(',').filter(Boolean).map((p) => { + const n = Number(p) + if (![1, 2, 3, 4].includes(n)) throw new Error(`--players entries must be 1-4, got "${p}"`) + return n + }) + break + case '--cap': + opts.cap = Number(value) + if (!Number.isInteger(opts.cap) || opts.cap < 1) throw new Error(`--cap must be a positive integer`) + break + case '--out': + opts.out = value + break + default: + throw new Error(`Unknown flag: ${flag}`) + } + } + return opts +} + +// ─── Main ───────────────────────────────────────────────────────────────────── + +async function main(): Promise { + const opts = parseArgs(process.argv.slice(2)) + const configs = await Promise.all(opts.configs.map(resolveConfig)) + + const total = configs.length * opts.players.length * opts.policies.length * opts.games + console.error( + `Running ${total} games: configs=[${configs.map((c) => c.name).join(', ')}] ` + + `players=[${opts.players.join(',')}] policies=[${opts.policies.join(',')}] ` + + `seeds=1..${opts.games} cap=${opts.cap}`, + ) + + const startedAt = Date.now() // timing display only — sim logic is wall-clock-free + let simulatedTicks = 0 + const progressEvery = Math.max(1, Math.floor(total / 20)) + + const experiment = runExperiment(configs, opts.players, opts.policies, opts.games, opts.cap, (done, all, last) => { + simulatedTicks += last.survivalTicks + if (done % progressEvery === 0 || done === all) { + console.error(` ${done}/${all} games done`) + } + }) + + const elapsedMs = Date.now() - startedAt + const markdown = formatMarkdownReport(experiment.aggregates) + console.log(markdown) + console.error( + `Done in ${(elapsedMs / 1000).toFixed(1)}s — ` + + `${(total / (elapsedMs / 1000)).toFixed(1)} games/s, ` + + `${Math.round(simulatedTicks / (elapsedMs / 1000)).toLocaleString()} ticks/s`, + ) + + if (opts.out) { + await Bun.write(`${opts.out}/report.md`, markdown) + await Bun.write(`${opts.out}/results.json`, formatJsonReport(experiment)) + console.error(`Wrote ${opts.out}/report.md and ${opts.out}/results.json`) + } +} + +// Only run when executed directly under bun (`bun worker/src/sim/cli.ts`), +// never when imported by tests (vitest leaves import.meta.main undefined). +if ((import.meta as { main?: boolean }).main) { + main().catch((err) => { + console.error(err instanceof Error ? err.message : err) + process.exit(1) + }) +} diff --git a/worker/src/sim/configs/classic-ramp.json b/worker/src/sim/configs/classic-ramp.json new file mode 100644 index 0000000..553d337 --- /dev/null +++ b/worker/src/sim/configs/classic-ramp.json @@ -0,0 +1,19 @@ +{ + "name": "classic-ramp", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 20 + }, + "perPlayerCount": { + "1": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 3 }, + "2": { "speedMult": 1.1, "shootMult": 1.2, "cols": 11, "rows": 5, "lives": 3, "barriers": 4 }, + "3": { "speedMult": 1.2, "shootMult": 1.4, "cols": 12, "rows": 5, "lives": 3, "barriers": 4 }, + "4": { "speedMult": 1.3, "shootMult": 1.6, "cols": 13, "rows": 5, "lives": 3, "barriers": 4 } + }, + "livesMode": "per-player", + "waveRamp": { + "speedPctPerWave": 0.08, + "shootPctPerWave": 0.1, + "maxWaveForRamp": 8 + } +} diff --git a/worker/src/sim/configs/easier-multi.json b/worker/src/sim/configs/easier-multi.json new file mode 100644 index 0000000..02b5725 --- /dev/null +++ b/worker/src/sim/configs/easier-multi.json @@ -0,0 +1,19 @@ +{ + "name": "easier-multi", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 3 }, + "2": { "speedMult": 1.1, "shootMult": 1.2, "cols": 11, "rows": 5, "lives": 6, "barriers": 4 }, + "3": { "speedMult": 1.2, "shootMult": 1.4, "cols": 12, "rows": 5, "lives": 8, "barriers": 4 }, + "4": { "speedMult": 1.3, "shootMult": 1.6, "cols": 13, "rows": 5, "lives": 10, "barriers": 4 } + }, + "livesMode": "shared", + "waveRamp": { + "speedPctPerWave": 0, + "shootPctPerWave": 0, + "maxWaveForRamp": 8 + } +} diff --git a/worker/src/sim/configs/flat.json b/worker/src/sim/configs/flat.json new file mode 100644 index 0000000..c1d26f3 --- /dev/null +++ b/worker/src/sim/configs/flat.json @@ -0,0 +1,19 @@ +{ + "name": "flat", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 3 }, + "2": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 4 }, + "3": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 4 }, + "4": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 4 } + }, + "livesMode": "per-player", + "waveRamp": { + "speedPctPerWave": 0, + "shootPctPerWave": 0, + "maxWaveForRamp": 8 + } +} diff --git a/worker/src/sim/configs/ship-v1.json b/worker/src/sim/configs/ship-v1.json new file mode 100644 index 0000000..6307dc1 --- /dev/null +++ b/worker/src/sim/configs/ship-v1.json @@ -0,0 +1,19 @@ +{ + "name": "ship-v1", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 3 }, + "2": { "speedMult": 1.25, "shootMult": 1.5, "cols": 11, "rows": 5, "lives": 5, "barriers": 4 }, + "3": { "speedMult": 1.5, "shootMult": 2.0, "cols": 13, "rows": 5, "lives": 5, "barriers": 4 }, + "4": { "speedMult": 1.75, "shootMult": 2.5, "cols": 13, "rows": 6, "lives": 5, "barriers": 4 } + }, + "livesMode": "shared", + "waveRamp": { + "speedPctPerWave": 0, + "shootPctPerWave": 0, + "maxWaveForRamp": 8 + } +} diff --git a/worker/src/sim/experiment.ts b/worker/src/sim/experiment.ts new file mode 100644 index 0000000..917a495 --- /dev/null +++ b/worker/src/sim/experiment.ts @@ -0,0 +1,121 @@ +// worker/src/sim/experiment.ts +// Runs a grid of (config × playerCount × policy × seed) simulated games and +// aggregates distribution statistics per cell. (spec §3.6) + +import type { DifficultyConfig } from '../../../shared/types' +import type { BotPolicyName } from './bot' +import { runSimGame, DEFAULT_TICK_CAP, type GameResult } from './runner' + +// ─── Aggregates ─────────────────────────────────────────────────────────────── + +export interface QuantileStats { + p25: number + median: number + p75: number +} + +export interface CellAggregate { + configName: string + playerCount: number + botPolicy: string + games: number + finalWave: QuantileStats + survivalTicks: QuantileStats + /** Fraction of games that ended in defeat before reaching wave 2. */ + defeatBeforeWave2Rate: number + /** Mean lives lost during wave 1 (per game). */ + meanLivesLostWave1: number + outcomes: { defeat: number; cap: number } +} + +export interface ExperimentResult { + aggregates: CellAggregate[] + results: GameResult[] +} + +// ─── Stats helpers ──────────────────────────────────────────────────────────── + +/** Linear-interpolation quantile of a sorted array. */ +function quantileSorted(sorted: number[], q: number): number { + if (sorted.length === 0) return 0 + const pos = (sorted.length - 1) * q + const lo = Math.floor(pos) + const hi = Math.ceil(pos) + if (lo === hi) return sorted[lo] + return sorted[lo] + (sorted[hi] - sorted[lo]) * (pos - lo) +} + +export function quantiles(values: number[]): QuantileStats { + const sorted = [...values].sort((a, b) => a - b) + return { + p25: quantileSorted(sorted, 0.25), + median: quantileSorted(sorted, 0.5), + p75: quantileSorted(sorted, 0.75), + } +} + +export function aggregateCell(results: GameResult[]): CellAggregate { + const first = results[0] + let defeatBeforeWave2 = 0 + let livesLostWave1 = 0 + let defeats = 0 + let caps = 0 + + for (const r of results) { + if (r.outcome === 'defeat') defeats++ + else caps++ + if (r.outcome === 'defeat' && r.finalWave < 2) defeatBeforeWave2++ + livesLostWave1 += r.livesLostByWave[1] ?? 0 + } + + return { + configName: first.configName, + playerCount: first.playerCount, + botPolicy: first.botPolicy, + games: results.length, + finalWave: quantiles(results.map((r) => r.finalWave)), + survivalTicks: quantiles(results.map((r) => r.survivalTicks)), + defeatBeforeWave2Rate: defeatBeforeWave2 / results.length, + meanLivesLostWave1: livesLostWave1 / results.length, + outcomes: { defeat: defeats, cap: caps }, + } +} + +// ─── Experiment grid ────────────────────────────────────────────────────────── + +/** + * Run the full (config × playerCount × policy × seed) grid. Seeds are 1..N — + * deterministic, so the whole experiment is replayable. `onGameDone` is an + * optional progress callback (used by the CLI). + */ +export function runExperiment( + configs: DifficultyConfig[], + playerCounts: number[], + policies: BotPolicyName[], + numSeeds: number, + tickCap: number = DEFAULT_TICK_CAP, + onGameDone?: (done: number, total: number, last: GameResult) => void, +): ExperimentResult { + const total = configs.length * playerCounts.length * policies.length * numSeeds + const results: GameResult[] = [] + const aggregates: CellAggregate[] = [] + let done = 0 + + for (const difficulty of configs) { + for (const playerCount of playerCounts) { + for (const policy of policies) { + const cellResults: GameResult[] = [] + for (let seed = 1; seed <= numSeeds; seed++) { + const result = runSimGame({ difficulty, playerCount, policy, seed, tickCap }) + cellResults.push(result) + results.push(result) + done++ + onGameDone?.(done, total, result) + } + aggregates.push(aggregateCell(cellResults)) + } + } + } + + return { aggregates, results } +} diff --git a/worker/src/sim/report.ts b/worker/src/sim/report.ts new file mode 100644 index 0000000..e2fad45 --- /dev/null +++ b/worker/src/sim/report.ts @@ -0,0 +1,53 @@ +// worker/src/sim/report.ts +// Formats experiment aggregates as a markdown table (human review) and JSON +// (regression tracking). (spec §3.6) + +import type { CellAggregate, ExperimentResult } from './experiment' + +function fmtQ(q: { p25: number; median: number; p75: number }, digits = 0): string { + const f = (n: number) => n.toFixed(digits) + return `${f(q.p25)} / ${f(q.median)} / ${f(q.p75)}` +} + +function fmtPct(n: number): string { + return `${(n * 100).toFixed(1)}%` +} + +/** + * Markdown report grouped by config: one table per config with a row per + * (playerCount, policy) cell. + */ +export function formatMarkdownReport(aggregates: CellAggregate[]): string { + const byConfig = new Map() + for (const cell of aggregates) { + const list = byConfig.get(cell.configName) ?? [] + list.push(cell) + byConfig.set(cell.configName, list) + } + + const lines: string[] = ['# Difficulty simulation report', ''] + for (const [configName, cells] of byConfig) { + lines.push(`## Config: ${configName}`, '') + lines.push( + '| players | policy | games | finalWave (p25/med/p75) | survivalTicks (p25/med/p75) | defeat a.playerCount - b.playerCount || a.botPolicy.localeCompare(b.botPolicy), + ) + for (const c of sorted) { + lines.push( + `| ${c.playerCount} | ${c.botPolicy} | ${c.games} | ${fmtQ(c.finalWave, 1)} | ${fmtQ(c.survivalTicks)} | ${fmtPct( + c.defeatBeforeWave2Rate, + )} | ${c.meanLivesLostWave1.toFixed(2)} | ${c.outcomes.defeat} | ${c.outcomes.cap} |`, + ) + } + lines.push('') + } + return lines.join('\n') +} + +/** JSON report: aggregates plus the full per-game results for replay/debug. */ +export function formatJsonReport(experiment: ExperimentResult): string { + return JSON.stringify({ aggregates: experiment.aggregates, results: experiment.results }, null, 2) +} diff --git a/worker/src/sim/runner.ts b/worker/src/sim/runner.ts new file mode 100644 index 0000000..6f5f2b9 --- /dev/null +++ b/worker/src/sim/runner.ts @@ -0,0 +1,238 @@ +// worker/src/sim/runner.ts +// Drives gameReducer for one full headless game and returns a GameResult. +// (specs/difficulty-tuning-spec.md §3.5) +// +// One process, a for-loop over gameReducer — no Durable Objects, no +// WebSockets, no timers. The initial state mirrors GameRoom.startGame(): +// status starts at wipe_hold with barriers placed, and the reducer itself +// spawns each wave's formation at the wipe_hold → wipe_reveal transition. + +import type { BarrierEntity, DifficultyConfig, GameState, Player, PlayerSlot } from '../../../shared/types' +import { + BARRIER_SHAPE_COLS, + DEFAULT_CONFIG, + HITBOX, + PLAYER_COLORS, + WIPE_TIMING, + createBarrierSegments, + getBarriers, +} from '../../../shared/types' +import { GAME_STATE_DEFAULTS } from '../../../shared/state-defaults' +import { gameReducer } from '../game/reducer' +import { getScaledConfig, getPlayerSpawnX } from '../game/scaling' +import { BOT_POLICIES, type BotIntent, type BotPolicyName } from './bot' + +// Default tick cap: 10 sim-minutes at 30Hz. Games that reach the cap count +// as outcome 'cap'. The spec (§3.5) suggests 30 sim-minutes (54,000 ticks), +// but the reducer's per-tick structuredClone limits throughput to ~5k +// ticks/s under bun, which would make 500-game cells take ~30 minutes when +// a good bot keeps surviving. Per the spec's own §3.6 escape hatch ("we +// lower the tick cap before lowering the sample count") the default is +// 18,000; pass --cap 54000 to the CLI for full-length games. +export const DEFAULT_TICK_CAP = 18000 + +// ─── Result (spec §3.5) ─────────────────────────────────────────────────────── + +export interface GameResult { + configName: string + playerCount: number + botPolicy: string + seed: number + outcome: 'defeat' | 'cap' + finalWave: number + survivalTicks: number + livesLostByWave: number[] // index = wave (index 0 unused) + waveClearTicks: number[] // index = wave; ticks of 'playing' the wave took to clear + barrierHpAtWaveStart: number[] // index = wave; sum of segment HP when the wave starts playing + totalAlienShots: number + totalPlayerDeaths: number +} + +export interface SimGameOptions { + difficulty: DifficultyConfig + playerCount: number + policy: BotPolicyName + seed: number + tickCap?: number // default DEFAULT_TICK_CAP +} + +// ─── Initial state ──────────────────────────────────────────────────────────── + +/** + * Barrier placement, replicating GameRoom.createBarriers() exactly: + * evenly spaced, each centered on width / (count + 1) multiples. + */ +function createSimBarriers(barrierCount: number, width: number, nextId: () => string): BarrierEntity[] { + const barriers: BarrierEntity[] = [] + const spacing = width / (barrierCount + 1) + const barrierTotalWidth = BARRIER_SHAPE_COLS * HITBOX.BARRIER_SEGMENT_WIDTH + + for (let i = 0; i < barrierCount; i++) { + const x = Math.floor(spacing * (i + 1)) - Math.floor(barrierTotalWidth / 2) + barriers.push({ kind: 'barrier', id: nextId(), x, segments: createBarrierSegments() }) + } + return barriers +} + +/** + * Build a playing-ready initial GameState for N bots, mirroring + * GameRoom.startGame(): wipe_hold status (countdown skipped), barriers from + * the difficulty config, lives from getScaledConfig, rngSeed = seed. + * The reducer takes it from here (wipe_hold → wipe_reveal spawns wave 1). + */ +export function buildInitialSimState(difficulty: DifficultyConfig, playerCount: number, seed: number): GameState { + const scaled = getScaledConfig(playerCount, 1, difficulty) + const width = DEFAULT_CONFIG.width + + let nextEntityId = 1 + const barriers = createSimBarriers(scaled.barriers, width, () => `e_${nextEntityId++}`) + + const players: Record = {} + for (let i = 0; i < playerCount; i++) { + const slot = (i + 1) as PlayerSlot + const id = `bot-${slot}` + players[id] = { + id, + name: `Bot ${slot}`, + x: getPlayerSpawnX(slot, playerCount, width), + slot, + color: PLAYER_COLORS[slot], + lastShotTick: 0, + alive: true, + lives: scaled.lives, // matches startGame(): player.lives = game.lives + respawnAtTick: null, + invulnerableUntilTick: null, + kills: 0, + lastActiveTick: 0, + inputState: { left: false, right: false }, + } + } + + return { + ...GAME_STATE_DEFAULTS, + roomCode: 'SIM000', + mode: playerCount === 1 ? 'solo' : 'coop', + status: 'wipe_hold', + tick: 0, + rngSeed: seed, + countdownRemaining: null, + players, + readyPlayerIds: [], + entities: barriers, + wave: 1, + maxLives: scaled.lives, + lives: scaled.lives, + score: 0, + alienDirection: 1, + wipeTicksRemaining: WIPE_TIMING.HOLD_TICKS, + wipeWaveNumber: 1, + alienShootingDisabled: false, + nextEntityId, + difficulty: structuredClone(difficulty), + config: { ...DEFAULT_CONFIG }, + } +} + +// ─── Game loop ──────────────────────────────────────────────────────────────── + +function sumBarrierHp(state: GameState): number { + let hp = 0 + for (const barrier of getBarriers(state.entities)) { + for (const seg of barrier.segments) hp += seg.health + } + return hp +} + +function setWaveStat(arr: number[], wave: number, value: number): void { + while (arr.length <= wave) arr.push(0) + arr[wave] = value +} + +function bumpWaveStat(arr: number[], wave: number, by: number): void { + while (arr.length <= wave) arr.push(0) + arr[wave] += by +} + +/** + * Run one full simulated game. Deterministic: same options → same GameResult. + */ +export function runSimGame(options: SimGameOptions): GameResult { + const tickCap = options.tickCap ?? DEFAULT_TICK_CAP + const policy = BOT_POLICIES[options.policy] + if (!policy) throw new Error(`Unknown bot policy: ${options.policy}`) + + let state = buildInitialSimState(options.difficulty, options.playerCount, options.seed) + + const livesLostByWave: number[] = [0] + const waveClearTicks: number[] = [0] + const barrierHpAtWaveStart: number[] = [0] + let totalAlienShots = 0 + let totalPlayerDeaths = 0 + let prevStatus = state.status + let waveStartTick = 0 + + while (state.status !== 'game_over' && state.tick < tickCap) { + // 1. Ask each living bot for its intent (all from the same pre-tick state, + // like real clients deciding off the same broadcast sync) ... + if (state.status === 'playing') { + const intents: Array<{ id: string; intent: BotIntent }> = [] + for (const player of Object.values(state.players)) { + if (!player.alive) continue + intents.push({ id: player.id, intent: policy(state, player.slot, options.seed) }) + } + // 2. ... then dispatch through the same actions GameRoom queues for + // real `input` / `shoot` WS messages. + for (const { id, intent } of intents) { + const held = state.players[id].inputState + if (intent.input.left !== held.left || intent.input.right !== held.right) { + state = gameReducer(state, { type: 'PLAYER_INPUT', playerId: id, input: intent.input }).state + } + if (intent.shoot) { + state = gameReducer(state, { type: 'PLAYER_SHOOT', playerId: id }).state + } + } + } + + // 3. Advance the world one tick. + const waveBefore = state.wave + const result = gameReducer(state, { type: 'TICK' }) + state = result.state + + // Alien shots fired this tick: reducer ids them `ab__`. + for (const e of state.entities) { + if (e.kind === 'bullet' && e.dy === 1 && e.id.startsWith(`ab_${state.tick}_`)) totalAlienShots++ + } + + for (const ev of result.events) { + if (ev.name === 'player_died') { + totalPlayerDeaths++ + bumpWaveStat(livesLostByWave, waveBefore, 1) + } else if (ev.name === 'wave_complete') { + setWaveStat(waveClearTicks, ev.data.wave, state.tick - waveStartTick) + } + } + + // Wave starts "playing" (wipe_reveal → playing): mark clear-timer start + // and snapshot barrier HP (the implicit barrier-decay ramp, spec §3.5). + if (state.status === 'playing' && prevStatus !== 'playing') { + waveStartTick = state.tick + setWaveStat(barrierHpAtWaveStart, state.wave, sumBarrierHp(state)) + } + prevStatus = state.status + } + + return { + configName: options.difficulty.name, + playerCount: options.playerCount, + botPolicy: options.policy, + seed: options.seed, + outcome: state.status === 'game_over' ? 'defeat' : 'cap', + finalWave: state.wave, + survivalTicks: state.tick, + livesLostByWave, + waveClearTicks, + barrierHpAtWaveStart, + totalAlienShots, + totalPlayerDeaths, + } +} diff --git a/worker/src/sim/sim.test.ts b/worker/src/sim/sim.test.ts new file mode 100644 index 0000000..50020e4 --- /dev/null +++ b/worker/src/sim/sim.test.ts @@ -0,0 +1,119 @@ +// worker/src/sim/sim.test.ts +// Validation of the simulation harness itself (spec §3.7): +// determinism, bot skill ordering, and config sanity. +// +// Tick caps here are deliberately small to keep the suite fast — the full +// 54000-tick cap is for real experiments via the CLI, not for CI. + +import { describe, it, expect } from 'vitest' +import { DEFAULT_DIFFICULTY, validateDifficultyConfig, getBarriers } from '../../../shared/types' +import { validateGameState } from '../../../shared/state-defaults' +import { runSimGame, buildInitialSimState, type GameResult } from './runner' +import { BUILTIN_CONFIGS } from './cli' +import { aggregateCell, quantiles } from './experiment' +import { formatMarkdownReport } from './report' +import type { BotPolicyName } from './bot' + +function median(values: number[]): number { + return quantiles(values).median +} + +// ─── Built-in configs ───────────────────────────────────────────────────────── + +describe('sim built-in configs', () => { + const names = ['ship-v1', 'easier-multi', 'flat', 'classic-ramp'] + + it('ships exactly four built-in configs', () => { + expect(Object.keys(BUILTIN_CONFIGS).sort()).toEqual([...names].sort()) + }) + + it.each(names)('%s passes validateDifficultyConfig', (name) => { + expect(validateDifficultyConfig(BUILTIN_CONFIGS[name])).toEqual([]) + }) + + it('ship-v1.json is DEFAULT_DIFFICULTY exactly', () => { + expect(BUILTIN_CONFIGS['ship-v1']).toEqual(DEFAULT_DIFFICULTY) + }) +}) + +// ─── Initial state ──────────────────────────────────────────────────────────── + +describe('buildInitialSimState', () => { + it('produces a valid GameState in wipe_hold with barriers from the config', () => { + const state = buildInitialSimState(DEFAULT_DIFFICULTY, 1, 1234) + expect(validateGameState(state)).toEqual([]) + expect(state.status).toBe('wipe_hold') + expect(state.rngSeed).toBe(1234) + expect(getBarriers(state.entities)).toHaveLength(3) // ship-v1 solo: 3 barriers + + const state4 = buildInitialSimState(DEFAULT_DIFFICULTY, 4, 1234) + expect(Object.keys(state4.players)).toHaveLength(4) + expect(getBarriers(state4.entities)).toHaveLength(4) // ship-v1 4p: 4 barriers + expect(state4.maxLives).toBe(5) + }) +}) + +// ─── Determinism (spec §3.7) ────────────────────────────────────────────────── + +describe('sim determinism', () => { + it('same seed/config/policy twice → deep-equal GameResult (solo novice)', () => { + const opts = { difficulty: DEFAULT_DIFFICULTY, playerCount: 1, policy: 'novice' as const, seed: 7, tickCap: 2500 } + expect(runSimGame(opts)).toEqual(runSimGame(opts)) + }) + + it('same seed/config/policy twice → deep-equal GameResult (2p competent)', () => { + const opts = { difficulty: DEFAULT_DIFFICULTY, playerCount: 2, policy: 'competent' as const, seed: 42, tickCap: 2500 } + expect(runSimGame(opts)).toEqual(runSimGame(opts)) + }) +}) + +// ─── Skill ordering + wave progression (spec §3.7) ──────────────────────────── + +describe('bot skill ordering on ship-v1 solo', () => { + const SEEDS = 20 + const TICK_CAP = 4000 // games that outlive the cap count as survivalTicks = cap + + const byPolicy = new Map() + for (const policy of ['random', 'novice', 'competent'] as const) { + const results: GameResult[] = [] + for (let seed = 1; seed <= SEEDS; seed++) { + results.push(runSimGame({ difficulty: DEFAULT_DIFFICULTY, playerCount: 1, policy, seed, tickCap: TICK_CAP })) + } + byPolicy.set(policy, results) + } + + it('median survivalTicks: competent > novice > random', () => { + const med = (p: BotPolicyName) => median(byPolicy.get(p)!.map((r) => r.survivalTicks)) + const random = med('random') + const novice = med('novice') + const competent = med('competent') + expect(novice).toBeGreaterThan(random) + expect(competent).toBeGreaterThan(novice) + }) + + it('competent clears wave 1 at least sometimes (waves actually progress)', () => { + const competent = byPolicy.get('competent')! + const clearedWave1 = competent.filter((r) => r.finalWave >= 2) + expect(clearedWave1.length).toBeGreaterThan(0) + // And the per-wave instrumentation recorded the clear. + const sample = clearedWave1[0] + expect(sample.waveClearTicks[1]).toBeGreaterThan(0) + expect(sample.barrierHpAtWaveStart[1]).toBeGreaterThan(0) + }) + + it('aggregation + report cover the cells without NaN', () => { + const aggregates = (['random', 'novice', 'competent'] as const).map((p) => aggregateCell(byPolicy.get(p)!)) + for (const cell of aggregates) { + expect(cell.games).toBe(SEEDS) + expect(Number.isFinite(cell.finalWave.median)).toBe(true) + expect(Number.isFinite(cell.survivalTicks.median)).toBe(true) + expect(cell.outcomes.defeat + cell.outcomes.cap).toBe(SEEDS) + expect(cell.defeatBeforeWave2Rate).toBeGreaterThanOrEqual(0) + expect(cell.defeatBeforeWave2Rate).toBeLessThanOrEqual(1) + } + const markdown = formatMarkdownReport(aggregates) + expect(markdown).toContain('## Config: ship-v1') + expect(markdown).toContain('| 1 | competent | 20 |') + expect(markdown).not.toContain('NaN') + }) +}) From f4d19f2a6f5879d573e9945bde3af041cd4eecb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 13:52:46 +0000 Subject: [PATCH 07/11] Add ship-v2 candidate config: cap cols at 11 to fix layout bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The full experiment grid revealed that every config with 13-column alien grids at 3p/4p ends in invasion within 6-10 seconds — the formation is 115 cells wide vs an alien movement range of 110 cells, so leftmost+rightmost columns hit walls every move interval and the formation drops every tick. Not a difficulty problem; a layout bug. ship-v2 keeps ship-v1's exact multipliers and lives but caps cols at 11 everywhere (4p moves to 11×6 = 66 aliens, vs the broken 13×6 = 78). Solo is bit-identical to ship-v1 (G1 preserved). Re-running the experiment grid will confirm whether the layout fix alone is enough or whether the multipliers need re-tuning. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- worker/src/sim/cli.ts | 2 ++ worker/src/sim/configs/ship-v2.json | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 worker/src/sim/configs/ship-v2.json diff --git a/worker/src/sim/cli.ts b/worker/src/sim/cli.ts index a5f0f93..3ea5288 100644 --- a/worker/src/sim/cli.ts +++ b/worker/src/sim/cli.ts @@ -20,6 +20,7 @@ import { formatMarkdownReport, formatJsonReport } from './report' import { DEFAULT_TICK_CAP } from './runner' import { isBotPolicyName, type BotPolicyName } from './bot' import shipV1 from './configs/ship-v1.json' +import shipV2 from './configs/ship-v2.json' import easierMulti from './configs/easier-multi.json' import flat from './configs/flat.json' import classicRamp from './configs/classic-ramp.json' @@ -36,6 +37,7 @@ declare const process: { argv: string[]; exit(code?: number): never } export const BUILTIN_CONFIGS: Record = { 'ship-v1': shipV1, + 'ship-v2': shipV2, 'easier-multi': easierMulti, flat, 'classic-ramp': classicRamp, diff --git a/worker/src/sim/configs/ship-v2.json b/worker/src/sim/configs/ship-v2.json new file mode 100644 index 0000000..4f20ba7 --- /dev/null +++ b/worker/src/sim/configs/ship-v2.json @@ -0,0 +1,19 @@ +{ + "name": "ship-v2", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { "speedMult": 1.0, "shootMult": 1.0, "cols": 11, "rows": 5, "lives": 3, "barriers": 3 }, + "2": { "speedMult": 1.25, "shootMult": 1.5, "cols": 11, "rows": 5, "lives": 5, "barriers": 4 }, + "3": { "speedMult": 1.5, "shootMult": 2.0, "cols": 11, "rows": 5, "lives": 5, "barriers": 4 }, + "4": { "speedMult": 1.75, "shootMult": 2.5, "cols": 11, "rows": 6, "lives": 5, "barriers": 4 } + }, + "livesMode": "shared", + "waveRamp": { + "speedPctPerWave": 0.0, + "shootPctPerWave": 0.0, + "maxWaveForRamp": 8 + } +} From f40802e4123d5211a37e193195db00a4f47b576c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 15:00:53 +0000 Subject: [PATCH 08/11] Add ship-v2.1/v2.2 wave-ramp candidate configs Both are ship-v2 (11-col layout fix) plus a modest wave ramp, addressing the T3 "later waves never get harder" gap: v2.1 ramps +2% speed / +3% shoot per wave, v2.2 ramps +3% / +5%, both capped at wave 10. Experiment results to follow. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- worker/src/sim/configs/ship-v2.1.json | 47 +++++++++++++++++++++++++++ worker/src/sim/configs/ship-v2.2.json | 47 +++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 worker/src/sim/configs/ship-v2.1.json create mode 100644 worker/src/sim/configs/ship-v2.2.json diff --git a/worker/src/sim/configs/ship-v2.1.json b/worker/src/sim/configs/ship-v2.1.json new file mode 100644 index 0000000..246760a --- /dev/null +++ b/worker/src/sim/configs/ship-v2.1.json @@ -0,0 +1,47 @@ +{ + "name": "ship-v2.1", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { + "speedMult": 1.0, + "shootMult": 1.0, + "cols": 11, + "rows": 5, + "lives": 3, + "barriers": 3 + }, + "2": { + "speedMult": 1.25, + "shootMult": 1.5, + "cols": 11, + "rows": 5, + "lives": 5, + "barriers": 4 + }, + "3": { + "speedMult": 1.5, + "shootMult": 2.0, + "cols": 11, + "rows": 5, + "lives": 5, + "barriers": 4 + }, + "4": { + "speedMult": 1.75, + "shootMult": 2.5, + "cols": 11, + "rows": 6, + "lives": 5, + "barriers": 4 + } + }, + "livesMode": "shared", + "waveRamp": { + "speedPctPerWave": 0.02, + "shootPctPerWave": 0.03, + "maxWaveForRamp": 10 + } +} \ No newline at end of file diff --git a/worker/src/sim/configs/ship-v2.2.json b/worker/src/sim/configs/ship-v2.2.json new file mode 100644 index 0000000..99cf5e7 --- /dev/null +++ b/worker/src/sim/configs/ship-v2.2.json @@ -0,0 +1,47 @@ +{ + "name": "ship-v2.2", + "base": { + "alienShootRate": 0.016, + "alienMoveIntervalTicks": 18 + }, + "perPlayerCount": { + "1": { + "speedMult": 1.0, + "shootMult": 1.0, + "cols": 11, + "rows": 5, + "lives": 3, + "barriers": 3 + }, + "2": { + "speedMult": 1.25, + "shootMult": 1.5, + "cols": 11, + "rows": 5, + "lives": 5, + "barriers": 4 + }, + "3": { + "speedMult": 1.5, + "shootMult": 2.0, + "cols": 11, + "rows": 5, + "lives": 5, + "barriers": 4 + }, + "4": { + "speedMult": 1.75, + "shootMult": 2.5, + "cols": 11, + "rows": 6, + "lives": 5, + "barriers": 4 + } + }, + "livesMode": "shared", + "waveRamp": { + "speedPctPerWave": 0.03, + "shootPctPerWave": 0.05, + "maxWaveForRamp": 10 + } +} \ No newline at end of file From f21e21cef29e3c9944e2d8bf99813842735ea53b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 15:08:25 +0000 Subject: [PATCH 09/11] Add difficulty report tool: hazard, Kaplan-Meier, flow-channel views Designer-facing static HTML report (tools/difficulty-report.html) that visualizes bot-sim results JSON: per-wave hazard curves (Aponte/Levieux/ Natkin failure probability), Kaplan-Meier survival with cap-censoring, flow-channel challenge proxy with tunable band, wave pacing, and summary cards anchored to the first config's solo cell. Loads files via drag-drop, file picker, or bundled sample dataset (ship-v1 vs ship-v2, 800 games). Pure transforms live in tools/difficulty-report-lib.js (UMD: browser script + CommonJS) and are tested by `bun tools/difficulty-report-test.js` (47 assertions against the real sample data, incl. the known ship-v1 4p wave-1 wipe yielding hazard 1.0 and ship-v2 fixing it). https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- tools/difficulty-report-lib.js | 370 + tools/difficulty-report-test.js | 287 + tools/difficulty-report.html | 716 + tools/sample-data/ship-v1-vs-v2.results.json | 33060 +++++++++++++++++ 4 files changed, 34433 insertions(+) create mode 100644 tools/difficulty-report-lib.js create mode 100644 tools/difficulty-report-test.js create mode 100644 tools/difficulty-report.html create mode 100644 tools/sample-data/ship-v1-vs-v2.results.json diff --git a/tools/difficulty-report-lib.js b/tools/difficulty-report-lib.js new file mode 100644 index 0000000..7dc4c84 --- /dev/null +++ b/tools/difficulty-report-lib.js @@ -0,0 +1,370 @@ +/** + * difficulty-report-lib.js + * + * Pure data transforms for tools/difficulty-report.html. + * No DOM, no Chart.js, no I/O — every function here takes plain data and + * returns plain data, so it can be unit-tested with bun: + * + * bun tools/difficulty-report-test.js + * + * Loaded by the HTML via + + + + + +

Vaders Difficulty Report

+

How a difficulty-config change alters the game, measured from bot-simulation results

+ +
+ How to read this report +
+

Per-wave hazard — Following Aponte, Levieux & Natkin (2011), difficulty is the probability of failure at a task: each point is the chance a game that reached wave w is lost during wave w. This is the headline view — compare configs at the same player count.

+

Kaplan-Meier survival — Standard survival analysis as used in game analytics (e.g. Drachen et al.): the fraction of games still going after t seconds. Games that hit the simulation tick cap are right-censored (they leave the at-risk pool but never count as losses), so the curve is honest about unfinished games.

+

Flow channel — Csikszentmihalyi's flow model, as adapted for game pacing by Jenova Chen and Jesse Schell: challenge over time should stay inside a band between boredom (too easy) and anxiety (too hard). Here the challenge proxy is mean lives lost per wave; tune the band edges to your taste and check whether the curve stays inside. Caveat seen in real data: a config can show low lives-lost yet 100% hazard (instant defeat by alien invasion) — always read this view together with the hazard view.

+
+
+ +
+

Data

+
+ + + +
+
No data loaded.
+
+ +
+ Drag & drop one or more sim results JSON files anywhere on this page
+ (output of the worker sim CLI — drop a "before" file and an "after" file to compare configs side by side)
+ …or use the file picker above. The sample-dataset button needs the page served over HTTP + (e.g. python3 -m http.server in tools/) — fetch() can't read local files when opened via file://, but drag & drop always works. +
+ + + + + + diff --git a/tools/sample-data/ship-v1-vs-v2.results.json b/tools/sample-data/ship-v1-vs-v2.results.json new file mode 100644 index 0000000..6ee2187 --- /dev/null +++ b/tools/sample-data/ship-v1-vs-v2.results.json @@ -0,0 +1,33060 @@ +{ + "aggregates": [ + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 836.5, + "median": 1046, + "p75": 1410.5 + }, + "defeatBeforeWave2Rate": 0.98, + "meanLivesLostWave1": 2.98, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 10, + "median": 15, + "p75": 22 + }, + "survivalTicks": { + "p25": 8419, + "median": 11897, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.16, + "outcomes": { + "defeat": 34, + "cap": 16 + } + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 2 + }, + "survivalTicks": { + "p25": 1192, + "median": 1383, + "p75": 1582.5 + }, + "defeatBeforeWave2Rate": 0.72, + "meanLivesLostWave1": 8.94, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 17, + "median": 21, + "p75": 23 + }, + "survivalTicks": { + "p25": 14166.25, + "median": 18000, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.42, + "outcomes": { + "defeat": 20, + "cap": 30 + } + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 240, + "median": 240, + "p75": 240 + }, + "defeatBeforeWave2Rate": 1, + "meanLivesLostWave1": 0, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 240, + "median": 240, + "p75": 240 + }, + "defeatBeforeWave2Rate": 1, + "meanLivesLostWave1": 0.54, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 190, + "median": 190, + "p75": 190 + }, + "defeatBeforeWave2Rate": 1, + "meanLivesLostWave1": 0, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 190, + "median": 190, + "p75": 190 + }, + "defeatBeforeWave2Rate": 1, + "meanLivesLostWave1": 0.96, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 836.5, + "median": 1046, + "p75": 1410.5 + }, + "defeatBeforeWave2Rate": 0.98, + "meanLivesLostWave1": 2.98, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 10, + "median": 15, + "p75": 22 + }, + "survivalTicks": { + "p25": 8419, + "median": 11897, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.16, + "outcomes": { + "defeat": 34, + "cap": 16 + } + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 2 + }, + "survivalTicks": { + "p25": 1192, + "median": 1383, + "p75": 1582.5 + }, + "defeatBeforeWave2Rate": 0.72, + "meanLivesLostWave1": 8.94, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 17, + "median": 21, + "p75": 23 + }, + "survivalTicks": { + "p25": 14166.25, + "median": 18000, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.42, + "outcomes": { + "defeat": 20, + "cap": 30 + } + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1163.5, + "median": 1335.5, + "p75": 1551.25 + }, + "defeatBeforeWave2Rate": 0.28, + "meanLivesLostWave1": 11.3, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 18.25, + "median": 21, + "p75": 22 + }, + "survivalTicks": { + "p25": 18000, + "median": 18000, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.5, + "outcomes": { + "defeat": 10, + "cap": 40 + } + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1061, + "median": 1229.5, + "p75": 1318.25 + }, + "defeatBeforeWave2Rate": 0.32, + "meanLivesLostWave1": 15.08, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 18.25, + "median": 22, + "p75": 24 + }, + "survivalTicks": { + "p25": 15135.75, + "median": 18000, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 1.12, + "outcomes": { + "defeat": 17, + "cap": 33 + } + } + ], + "results": [ + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1426, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1491, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 838, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 889, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1373, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 813, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1575, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 793, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 95, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1648, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 911, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1667, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 134, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 677, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1049, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 145, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1035, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 133, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 939, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 118, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1459, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1911, + "livesLostByWave": [ + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 1524 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 23 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 910, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 140, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1423, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 593, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 78, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 797, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 836, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 113, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 883, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 111, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1124, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 142, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 765, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1091, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 679, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 116, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 733, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 96, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1843, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 493, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1367, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1157, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1534, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1554, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 943, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 93, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 947, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 137, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 757, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1219, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 107, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 548, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 71, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 851, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1499, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 164, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 827, + 850, + 785, + 683, + 649, + 733, + 737, + 638, + 631, + 637, + 757, + 662, + 659, + 601, + 762, + 709, + 613, + 618, + 688, + 640, + 715 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 43, + 23, + 17, + 9, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1553, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5944, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 864, + 782, + 810, + 674, + 662, + 658 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 28, + 14, + 4, + 1, + 0 + ], + "totalAlienShots": 527, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 818, + 817, + 790, + 746, + 658, + 634, + 733, + 674, + 666, + 650, + 620, + 690, + 714, + 689, + 711, + 664, + 714, + 690, + 636, + 670, + 685 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 37, + 22, + 10, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1603, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 870, + 768, + 746, + 665, + 697, + 634, + 623, + 687, + 676, + 692, + 676, + 730, + 730, + 660, + 669, + 726, + 811, + 671, + 709, + 675, + 661 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 39, + 27, + 15, + 12, + 7, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1606, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14572, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 862, + 776, + 744, + 703, + 653, + 673, + 694, + 602, + 669, + 702, + 621, + 674, + 588, + 670, + 624, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 44, + 21, + 14, + 10, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1267, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4107, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 876, + 732, + 729 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 43, + 29, + 11 + ], + "totalAlienShots": 343, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15486, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 821, + 817, + 730, + 767, + 671, + 728, + 661, + 663, + 636, + 639, + 727, + 698, + 693, + 665, + 649, + 665, + 626, + 652 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 36, + 21, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1404, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8671, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 1037, + 871, + 789, + 612, + 667, + 702, + 734, + 653, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 40, + 29, + 20, + 9, + 4, + 2, + 2, + 1 + ], + "totalAlienShots": 748, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11962, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 832, + 739, + 652, + 676, + 677, + 708, + 660, + 638, + 637, + 641, + 660, + 709, + 767 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 46, + 22, + 8, + 6, + 3, + 3, + 2, + 2, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 987, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 778, + 749, + 731, + 713, + 765, + 677, + 723, + 710, + 744, + 633, + 630, + 663, + 656, + 644, + 743, + 705, + 644, + 643, + 615, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 79, + 51, + 33, + 22, + 12, + 6, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1595, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10308, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 818, + 889, + 801, + 731, + 690, + 678, + 672, + 622, + 676, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 27, + 18, + 16, + 13, + 8, + 4, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 909, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 806, + 862, + 840, + 713, + 658, + 783, + 729, + 657, + 660, + 638, + 674, + 654, + 624, + 723, + 680, + 688, + 645, + 730, + 691, + 680 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 38, + 14, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1542, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 8981, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 787, + 766, + 639, + 678, + 709, + 742, + 733, + 657, + 612, + 611 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 38, + 19, + 10, + 5, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 741, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11043, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 744, + 707, + 643, + 705, + 661, + 638, + 679, + 598, + 705, + 683, + 691, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 59, + 33, + 15, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 955, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 15, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 876, + 832, + 738, + 676, + 739, + 690, + 687, + 673, + 621, + 657, + 765, + 725, + 675, + 688, + 680, + 656, + 726, + 715, + 625, + 674, + 619 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 41, + 23, + 12, + 4, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1598, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14511, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 774, + 780, + 777, + 755, + 656, + 621, + 685, + 715, + 640, + 675, + 640, + 655, + 651, + 629, + 656, + 674, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 40, + 16, + 13, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1250, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11832, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 917, + 833, + 740, + 650, + 692, + 794, + 732, + 688, + 713, + 677, + 748, + 677, + 659 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 30, + 16, + 9, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1080, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9548, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 813, + 678, + 703, + 691, + 673, + 661, + 656, + 635, + 735, + 706, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 47, + 20, + 6, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 843, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7018, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 879, + 777, + 663, + 684, + 720, + 655, + 710, + 698 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 49, + 37, + 22, + 14, + 10, + 6, + 2 + ], + "totalAlienShots": 541, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 792, + 714, + 706, + 662, + 603, + 670, + 627, + 656, + 666, + 684, + 658, + 650, + 663, + 732, + 635, + 711, + 623, + 688, + 667, + 641, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 30, + 9, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1622, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 22, + "survivalTicks": 17463, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 845, + 721, + 680, + 658, + 638, + 655, + 626, + 636, + 720, + 685, + 695, + 670, + 689, + 647, + 630, + 683, + 690, + 769, + 671, + 716, + 738 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 56, + 30, + 14, + 7, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1459, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 6857, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 768, + 760, + 667, + 646, + 686, + 727, + 631, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 37, + 23, + 13, + 10, + 6, + 5, + 5 + ], + "totalAlienShots": 591, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 23, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0, + 804, + 783, + 777, + 717, + 688, + 608, + 658, + 655, + 730, + 693, + 586, + 684, + 700, + 712, + 621, + 713, + 641, + 640, + 727, + 758, + 648 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 62, + 33, + 20, + 15, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1637, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12567, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 873, + 822, + 748, + 697, + 719, + 784, + 767, + 718, + 654, + 709, + 751, + 671, + 770, + 739 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 41, + 15, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 784, + 771, + 708, + 705, + 639, + 625, + 673, + 625, + 684, + 702, + 606, + 723, + 663, + 693, + 658, + 633, + 679, + 683, + 627, + 662, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 38, + 23, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1512, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 786, + 780, + 688, + 628, + 696, + 793, + 700, + 731, + 650, + 678, + 640, + 637, + 682, + 651, + 708, + 773, + 634, + 618, + 663, + 725, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 42, + 17, + 8, + 7, + 2, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1552, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 835, + 783, + 682, + 781, + 765, + 638, + 709, + 717, + 650, + 627, + 748, + 692, + 656, + 661, + 729, + 639, + 727, + 775, + 632, + 746, + 683 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 39, + 21, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1647, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6648, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 859, + 791, + 756, + 641, + 693, + 658, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 34, + 17, + 9, + 3, + 0, + 0 + ], + "totalAlienShots": 604, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0, + 864, + 799, + 737, + 700, + 728, + 644, + 686, + 672, + 729, + 626, + 638, + 658, + 617, + 736, + 654, + 641, + 657, + 656, + 655, + 653, + 643, + 608 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 36, + 17, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1509, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8144, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 782, + 837, + 716, + 656, + 674, + 700, + 645, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 43, + 30, + 14, + 5, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 697, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12712, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 811, + 729, + 787, + 716, + 732, + 721, + 646, + 661, + 669, + 680, + 776, + 728, + 662 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 40, + 27, + 20, + 13, + 7, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1044, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11546, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 840, + 787, + 779, + 751, + 689, + 676, + 638, + 745, + 641, + 652, + 680, + 677, + 796 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 34, + 23, + 14, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1031, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 33, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 869, + 768, + 715, + 735, + 705, + 656, + 691, + 693, + 753, + 693, + 815, + 730, + 680, + 688, + 752, + 618, + 650, + 662, + 693, + 711, + 700 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 44, + 31, + 17, + 9, + 7, + 6, + 4, + 2, + 2, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1532, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 15953, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 760, + 695, + 692, + 643, + 699, + 683, + 680, + 656, + 662, + 630, + 657, + 697, + 671, + 666, + 727, + 711, + 714, + 702 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 44, + 28, + 16, + 12, + 7, + 3, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 1338, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7233, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 711, + 841, + 653, + 700, + 728, + 664, + 634, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 77, + 28, + 12, + 7, + 4, + 3, + 3, + 2 + ], + "totalAlienShots": 649, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 759, + 811, + 746, + 694, + 725, + 693, + 644, + 651, + 662, + 599, + 715, + 702, + 736, + 621, + 758, + 657, + 643, + 658, + 711, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 42, + 15, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1624, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8434, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 815, + 792, + 676, + 728, + 702, + 715, + 680, + 701 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 42, + 31, + 22, + 17, + 13, + 7, + 2, + 1 + ], + "totalAlienShots": 787, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4937, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 929, + 707, + 752, + 729, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 42, + 26, + 14, + 6 + ], + "totalAlienShots": 424, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6412, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 891, + 737, + 665, + 788, + 659, + 670, + 629 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 41, + 19, + 11, + 5, + 2, + 2 + ], + "totalAlienShots": 590, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10749, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 1073, + 832, + 768, + 791, + 672, + 732, + 670, + 659, + 634, + 683, + 709, + 638 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 52, + 27, + 18, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 979, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10261, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 772, + 670, + 701, + 712, + 711, + 728, + 707, + 677, + 703, + 668, + 619 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 82, + 53, + 28, + 14, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 860, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11378, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 932, + 895, + 762, + 729, + 675, + 639, + 637, + 625, + 655, + 640, + 658, + 660 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 47, + 21, + 7, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1021, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 3928, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 819, + 803, + 788, + 622 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 28, + 18, + 10 + ], + "totalAlienShots": 348, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11812, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 790, + 708, + 641, + 618, + 621, + 713, + 670, + 656, + 659, + 606, + 764, + 654, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 74, + 35, + 19, + 14, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1039, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5894, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 925, + 683, + 695, + 719, + 653, + 738 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 57, + 24, + 9, + 4, + 2, + 1 + ], + "totalAlienShots": 532, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 46, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 838, + 763, + 698, + 692, + 621, + 598, + 715, + 658, + 602, + 753, + 687, + 691, + 714, + 662, + 674, + 648, + 625, + 678, + 781, + 706, + 631 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 40, + 18, + 6, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1601, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5418, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 858, + 755, + 629, + 685, + 683 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 80, + 47, + 32, + 20, + 15, + 7 + ], + "totalAlienShots": 465, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 633, + 658, + 635, + 764, + 685, + 732, + 648, + 748, + 661, + 632, + 658, + 641, + 710, + 662, + 730, + 618, + 584, + 694, + 636, + 624, + 614 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 45, + 26, + 15, + 10, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1505, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15379, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 848, + 749, + 658, + 623, + 633, + 636, + 744, + 702, + 657, + 654, + 760, + 666, + 692, + 619, + 659, + 671, + 690 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 40, + 20, + 11, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1321, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8414, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 807, + 708, + 642, + 755, + 607, + 660, + 676, + 744 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 76, + 43, + 29, + 10, + 2, + 2, + 1, + 0, + 0 + ], + "totalAlienShots": 713, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1457, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 156, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1266, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 168, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1281, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2171, + "livesLostByWave": [ + 0, + 3, + 7 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 32 + ], + "totalAlienShots": 255, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 993, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1589, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 174, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1471, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1253, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 181, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1243, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 162, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1185, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1779, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1315 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1975, + "livesLostByWave": [ + 0, + 7, + 3 + ], + "waveClearTicks": [ + 0, + 1214 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 240, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1633, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1189 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 238, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1413, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 858 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 213, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1839, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1141 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 245, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 827, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2551, + "livesLostByWave": [ + 0, + 4, + 5, + 1 + ], + "waveClearTicks": [ + 0, + 997, + 1049 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19, + 1 + ], + "totalAlienShots": 341, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1279, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1487, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 150, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2093, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52 + ], + "totalAlienShots": 290, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 907, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 159, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1327, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1429, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 210, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1507, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1563, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1133, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 130, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1489, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 154, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1461, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 179, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1464, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1014 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 209, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1687, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 191, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1961, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1655 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 183, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1143, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 205, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1107, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 897, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2387, + "livesLostByWave": [ + 0, + 4, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 962, + 600 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27, + 5 + ], + "totalAlienShots": 358, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1166, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1615, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1213 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1727, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 266, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1237, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 152, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1239, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1479, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1273, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1207, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 141, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1452, + "livesLostByWave": [ + 0, + 5, + 5 + ], + "waveClearTicks": [ + 0, + 964 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 599, + 564, + 594, + 536, + 692, + 610, + 520, + 648, + 615, + 629, + 627, + 1173, + 887, + 825, + 783, + 694, + 750, + 837, + 803, + 832 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 46, + 22, + 16, + 8, + 5, + 5, + 4, + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2262, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17704, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 4, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 534, + 639, + 688, + 683, + 745, + 690, + 777, + 785, + 959, + 776, + 915, + 821, + 782, + 789, + 903, + 899, + 750, + 733, + 845 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 107, + 46, + 23, + 15, + 8, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2285, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 2, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 564, + 659, + 597, + 651, + 519, + 485, + 550, + 622, + 614, + 614, + 692, + 872, + 871, + 1250, + 735, + 776, + 913, + 930, + 860, + 832 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 46, + 25, + 19, + 14, + 8, + 7, + 7, + 7, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2353, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12162, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 2, + 1, + 1, + 2, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 580, + 512, + 593, + 626, + 553, + 650, + 1012, + 1003, + 1000, + 875, + 919, + 924 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 44, + 28, + 19, + 13, + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1449, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10661, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 0, + 1, + 2, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 520, + 680, + 609, + 602, + 668, + 775, + 778, + 617, + 884, + 975, + 872, + 928 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 45, + 21, + 11, + 10, + 5, + 4, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1311, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 529, + 574, + 552, + 732, + 619, + 650, + 561, + 525, + 576, + 558, + 555, + 659, + 564, + 565, + 601, + 626, + 757, + 961, + 780, + 1085, + 826, + 872 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 55, + 27, + 14, + 8, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2168, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 7, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 4, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 760, + 705, + 915, + 578, + 605, + 540, + 645, + 596, + 589, + 522, + 696, + 643, + 629, + 925, + 887, + 889, + 851, + 867, + 846, + 914 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 39, + 17, + 13, + 7, + 6, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2188, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11764, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 1, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 478, + 530, + 631, + 539, + 662, + 580, + 620, + 579, + 647, + 663, + 608, + 678, + 784, + 1187 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 102, + 57, + 24, + 15, + 11, + 9, + 4, + 4, + 4, + 3, + 3, + 2, + 1, + 0 + ], + "totalAlienShots": 1446, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 567, + 579, + 647, + 577, + 593, + 639, + 663, + 561, + 638, + 652, + 842, + 787, + 1038, + 795, + 899, + 889, + 1007, + 962, + 1002, + 842 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 54, + 29, + 21, + 14, + 11, + 4, + 4, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2192, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 690, + 678, + 620, + 618, + 607, + 597, + 656, + 621, + 789, + 890, + 756, + 966, + 745, + 885, + 766, + 816, + 738, + 714, + 759 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 111, + 43, + 26, + 15, + 7, + 4, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2287, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14998, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 3, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 612, + 632, + 717, + 692, + 850, + 611, + 708, + 830, + 806, + 1020, + 877, + 821, + 787, + 798, + 802, + 825 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 41, + 25, + 20, + 9, + 7, + 6, + 5, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1932, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 824, + 674, + 654, + 645, + 648, + 636, + 677, + 634, + 592, + 653, + 535, + 716, + 810, + 1035, + 791, + 858, + 844, + 931, + 872 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 35, + 16, + 11, + 10, + 8, + 5, + 5, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2258, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12327, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 631, + 566, + 611, + 593, + 548, + 606, + 495, + 625, + 593, + 560, + 859, + 703, + 741, + 724, + 865 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 46, + 30, + 21, + 16, + 6, + 5, + 4, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1511, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 566, + 644, + 664, + 623, + 714, + 678, + 642, + 648, + 638, + 549, + 704, + 562, + 652, + 576, + 714, + 782, + 733, + 1067, + 888, + 861, + 761 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 51, + 20, + 10, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2316, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 13696, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 529, + 627, + 537, + 619, + 636, + 639, + 617, + 541, + 580, + 676, + 588, + 539, + 737, + 633, + 661, + 672, + 884 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 48, + 26, + 16, + 11, + 9, + 9, + 6, + 4, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1646, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 3, + 2, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 715, + 641, + 604, + 579, + 537, + 517, + 542, + 531, + 500, + 562, + 543, + 675, + 728, + 803, + 769, + 766, + 848, + 1119, + 912, + 800, + 874 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 104, + 54, + 20, + 13, + 10, + 8, + 7, + 3, + 3, + 3, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2235, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17718, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 537, + 588, + 740, + 680, + 573, + 590, + 598, + 653, + 629, + 624, + 1208, + 886, + 987, + 873, + 998, + 761, + 709, + 813, + 775 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 98, + 54, + 31, + 16, + 11, + 9, + 9, + 7, + 6, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2221, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 538, + 580, + 604, + 625, + 520, + 540, + 495, + 608, + 649, + 631, + 662, + 653, + 621, + 677, + 552, + 488, + 647, + 811, + 787, + 685, + 878, + 786 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 55, + 31, + 16, + 11, + 9, + 6, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2247, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10158, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 3, + 1, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 746, + 663, + 547, + 653, + 664, + 789, + 816, + 972, + 732, + 884 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 51, + 27, + 15, + 11, + 7, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1235, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6356, + "livesLostByWave": [ + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 552, + 706, + 705, + 707, + 675, + 658, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 41, + 31, + 26, + 20, + 12, + 5 + ], + "totalAlienShots": 854, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 21, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 640, + 550, + 535, + 495, + 494, + 617, + 537, + 556, + 642, + 794, + 1010, + 920, + 845, + 999, + 773, + 760, + 893, + 892, + 992, + 886 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 50, + 28, + 19, + 11, + 10, + 9, + 7, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2222, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6666, + "livesLostByWave": [ + 0, + 3, + 1, + 2, + 2, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 569, + 688, + 728, + 843, + 891, + 708, + 748 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 101, + 44, + 20, + 11, + 8, + 7, + 3 + ], + "totalAlienShots": 865, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 15733, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 887, + 648, + 682, + 601, + 584, + 579, + 579, + 705, + 657, + 610, + 635, + 556, + 643, + 610, + 877, + 800, + 1068, + 720 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 42, + 24, + 17, + 11, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 3, + 1, + 0, + 0 + ], + "totalAlienShots": 1934, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 581, + 526, + 631, + 641, + 613, + 568, + 575, + 666, + 817, + 720, + 518, + 555, + 593, + 647, + 555, + 605, + 520, + 660, + 613, + 575, + 583, + 665, + 703, + 525 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 49, + 36, + 20, + 11, + 9, + 8, + 6, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2260, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 704, + 678, + 647, + 693, + 689, + 549, + 636, + 813, + 1048, + 878, + 868, + 870, + 862, + 830, + 857, + 807, + 883, + 873 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 42, + 21, + 10, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2343, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13694, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 511, + 611, + 591, + 577, + 604, + 637, + 676, + 759, + 563, + 509, + 584, + 803, + 874, + 889, + 800, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 46, + 27, + 19, + 17, + 14, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1698, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 591, + 648, + 594, + 541, + 624, + 663, + 599, + 521, + 576, + 505, + 531, + 579, + 758, + 807, + 1039, + 917, + 885, + 987, + 819, + 799 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 54, + 30, + 19, + 6, + 3, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2312, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 601, + 650, + 668, + 579, + 589, + 552, + 737, + 546, + 585, + 551, + 495, + 558, + 551, + 527, + 577, + 567, + 619, + 626, + 648, + 615, + 669, + 649, + 645, + 633 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 45, + 21, + 12, + 11, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2145, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 524, + 554, + 530, + 566, + 593, + 567, + 612, + 575, + 721, + 783, + 878, + 802, + 817, + 810, + 1028, + 908, + 887, + 802, + 1017, + 870 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 109, + 62, + 38, + 20, + 16, + 12, + 11, + 10, + 8, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2237, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15826, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 834, + 651, + 562, + 675, + 598, + 746, + 620, + 595, + 650, + 630, + 597, + 679, + 746, + 883, + 1064, + 797, + 916 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 35, + 17, + 10, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1971, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 31, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 720, + 550, + 568, + 486, + 563, + 681, + 667, + 649, + 690, + 617, + 654, + 648, + 633, + 607, + 607, + 679, + 616, + 512, + 532, + 563, + 755, + 741 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 38, + 16, + 11, + 11, + 6, + 4, + 2, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2224, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 32, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 507, + 557, + 547, + 594, + 548, + 574, + 586, + 585, + 547, + 606, + 650, + 642, + 598, + 608, + 551, + 719, + 718, + 1098, + 915, + 831, + 816, + 959 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 71, + 40, + 23, + 17, + 11, + 10, + 7, + 7, + 6, + 6, + 5, + 5, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2219, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16621, + "livesLostByWave": [ + 0, + 3, + 2, + 1, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 642, + 686, + 618, + 664, + 510, + 746, + 660, + 793, + 814, + 788, + 973, + 919, + 872, + 914, + 844, + 875, + 781, + 963 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 49, + 30, + 22, + 18, + 12, + 7, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2080, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 34, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 645, + 623, + 527, + 575, + 611, + 578, + 579, + 616, + 535, + 523, + 600, + 577, + 554, + 651, + 674, + 600, + 649, + 585, + 595, + 589, + 751, + 817, + 829 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 31, + 22, + 11, + 7, + 5, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2203, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 554, + 657, + 670, + 632, + 639, + 584, + 636, + 598, + 632, + 739, + 669, + 650, + 624, + 534, + 718, + 784, + 965, + 775, + 775, + 819, + 823 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 40, + 26, + 17, + 12, + 12, + 12, + 9, + 6, + 2, + 2, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2316, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 579, + 593, + 565, + 602, + 529, + 650, + 606, + 554, + 660, + 607, + 547, + 624, + 564, + 633, + 594, + 646, + 584, + 622, + 543, + 535, + 681, + 753, + 832, + 637 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 40, + 24, + 10, + 8, + 5, + 3, + 2, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2194, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 37, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 563, + 615, + 570, + 493, + 610, + 721, + 721, + 561, + 625, + 607, + 619, + 619, + 608, + 716, + 637, + 702, + 648, + 723, + 691, + 707, + 574, + 622, + 641 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 53, + 31, + 24, + 19, + 12, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2314, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9682, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 4, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 642, + 583, + 582, + 564, + 721, + 685, + 749, + 765, + 780, + 1104 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 43, + 25, + 19, + 14, + 10, + 5, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1232, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14554, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 588, + 695, + 652, + 572, + 571, + 577, + 609, + 579, + 621, + 775, + 777, + 792, + 1124, + 870, + 926, + 1041 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 45, + 23, + 20, + 11, + 6, + 4, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1867, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 40, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 488, + 636, + 629, + 593, + 645, + 662, + 696, + 620, + 608, + 636, + 684, + 511, + 621, + 596, + 720, + 634, + 508, + 650, + 733, + 635, + 649, + 734, + 749 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 48, + 21, + 12, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2284, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 620, + 594, + 609, + 631, + 657, + 608, + 575, + 597, + 663, + 577, + 581, + 689, + 693, + 650, + 630, + 624, + 613, + 629, + 701, + 819, + 608, + 549 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 60, + 39, + 27, + 20, + 15, + 11, + 6, + 3, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2169, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 42, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 580, + 723, + 703, + 589, + 506, + 568, + 560, + 544, + 496, + 577, + 510, + 621, + 550, + 775, + 788, + 790, + 851, + 897, + 786, + 1014, + 830, + 708 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 40, + 21, + 12, + 9, + 3, + 2, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2241, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 43, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 2, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 569, + 610, + 700, + 546, + 568, + 552, + 537, + 634, + 579, + 777, + 753, + 1150, + 798, + 915, + 816, + 749, + 803, + 873, + 859 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 42, + 25, + 15, + 9, + 3, + 3, + 3, + 3, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2223, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 44, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 475, + 614, + 649, + 645, + 653, + 603, + 565, + 626, + 648, + 590, + 552, + 577, + 535, + 628, + 620, + 567, + 579, + 616, + 611, + 611, + 1009, + 705, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 62, + 24, + 16, + 8, + 4, + 4, + 2, + 2, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2147, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 687, + 778, + 644, + 538, + 568, + 664, + 681, + 660, + 728, + 696, + 648, + 649, + 593, + 579, + 627, + 755, + 971, + 801, + 929, + 876 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 41, + 17, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2301, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14037, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 646, + 595, + 632, + 638, + 661, + 625, + 619, + 649, + 814, + 764, + 902, + 795, + 794, + 835, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 48, + 34, + 21, + 10, + 9, + 8, + 7, + 7, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1850, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 527, + 563, + 591, + 569, + 636, + 616, + 738, + 649, + 713, + 642, + 635, + 537, + 600, + 589, + 589, + 559, + 560, + 726, + 821, + 804, + 981 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 61, + 33, + 15, + 10, + 7, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2235, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 552, + 649, + 727, + 745, + 645, + 598, + 631, + 538, + 526, + 578, + 524, + 687, + 751, + 744, + 763, + 759, + 890, + 803, + 887, + 887 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 58, + 29, + 17, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2228, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12311, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 0, + 0, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 643, + 641, + 636, + 586, + 699, + 563, + 663, + 839, + 1021, + 887, + 829, + 812, + 919 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 43, + 27, + 13, + 4, + 4, + 4, + 4, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1514, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10653, + "livesLostByWave": [ + 0, + 1, + 2, + 3, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 582, + 690, + 662, + 1069, + 849, + 856, + 857, + 971, + 867, + 951 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 58, + 33, + 20, + 17, + 12, + 10, + 5, + 4, + 1 + ], + "totalAlienShots": 1363, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 64, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 57, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 64, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 68, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 73, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 55, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 57, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 62, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 50, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 72, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 57, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 56, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 66, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 56, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 85, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 83, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 68, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 68, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 68, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 55, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 70, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 71, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 66, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 67, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 83, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 64, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 73, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 65, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 60, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 240, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 36, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 35, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 39, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 55, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 39, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 64, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 42, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 41, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 73, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 61, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 56, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 39, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 39, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 36, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 62, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 49, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 32, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 37, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 63, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 41, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 55, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 37, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 48, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 39, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 53, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 42, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 44, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 4 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 52, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 73, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 2 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 57, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 51, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 54, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 43, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 58, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 56, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 55, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 47, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 45, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 190, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 46, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1426, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1491, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 838, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 889, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1373, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 813, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1575, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 793, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 95, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1648, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 911, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1667, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 134, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 677, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1049, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 145, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1035, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 133, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 939, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 118, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1459, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1911, + "livesLostByWave": [ + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 1524 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 23 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 910, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 140, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1423, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 593, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 78, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 797, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 836, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 113, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 883, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 111, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1124, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 142, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 765, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1091, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 679, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 116, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 733, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 96, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1843, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 493, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1367, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1157, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1534, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1554, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 943, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 93, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 947, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 137, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 757, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1219, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 107, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 548, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 71, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 851, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1499, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 164, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 827, + 850, + 785, + 683, + 649, + 733, + 737, + 638, + 631, + 637, + 757, + 662, + 659, + 601, + 762, + 709, + 613, + 618, + 688, + 640, + 715 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 43, + 23, + 17, + 9, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1553, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5944, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 864, + 782, + 810, + 674, + 662, + 658 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 28, + 14, + 4, + 1, + 0 + ], + "totalAlienShots": 527, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 818, + 817, + 790, + 746, + 658, + 634, + 733, + 674, + 666, + 650, + 620, + 690, + 714, + 689, + 711, + 664, + 714, + 690, + 636, + 670, + 685 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 37, + 22, + 10, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1603, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 870, + 768, + 746, + 665, + 697, + 634, + 623, + 687, + 676, + 692, + 676, + 730, + 730, + 660, + 669, + 726, + 811, + 671, + 709, + 675, + 661 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 39, + 27, + 15, + 12, + 7, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1606, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14572, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 862, + 776, + 744, + 703, + 653, + 673, + 694, + 602, + 669, + 702, + 621, + 674, + 588, + 670, + 624, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 44, + 21, + 14, + 10, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1267, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4107, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 876, + 732, + 729 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 43, + 29, + 11 + ], + "totalAlienShots": 343, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15486, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 821, + 817, + 730, + 767, + 671, + 728, + 661, + 663, + 636, + 639, + 727, + 698, + 693, + 665, + 649, + 665, + 626, + 652 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 36, + 21, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1404, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8671, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 1037, + 871, + 789, + 612, + 667, + 702, + 734, + 653, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 40, + 29, + 20, + 9, + 4, + 2, + 2, + 1 + ], + "totalAlienShots": 748, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11962, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 832, + 739, + 652, + 676, + 677, + 708, + 660, + 638, + 637, + 641, + 660, + 709, + 767 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 46, + 22, + 8, + 6, + 3, + 3, + 2, + 2, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 987, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 778, + 749, + 731, + 713, + 765, + 677, + 723, + 710, + 744, + 633, + 630, + 663, + 656, + 644, + 743, + 705, + 644, + 643, + 615, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 79, + 51, + 33, + 22, + 12, + 6, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1595, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10308, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 818, + 889, + 801, + 731, + 690, + 678, + 672, + 622, + 676, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 27, + 18, + 16, + 13, + 8, + 4, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 909, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 806, + 862, + 840, + 713, + 658, + 783, + 729, + 657, + 660, + 638, + 674, + 654, + 624, + 723, + 680, + 688, + 645, + 730, + 691, + 680 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 38, + 14, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1542, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 8981, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 787, + 766, + 639, + 678, + 709, + 742, + 733, + 657, + 612, + 611 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 38, + 19, + 10, + 5, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 741, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11043, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 744, + 707, + 643, + 705, + 661, + 638, + 679, + 598, + 705, + 683, + 691, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 59, + 33, + 15, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 955, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 15, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 876, + 832, + 738, + 676, + 739, + 690, + 687, + 673, + 621, + 657, + 765, + 725, + 675, + 688, + 680, + 656, + 726, + 715, + 625, + 674, + 619 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 41, + 23, + 12, + 4, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1598, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14511, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 774, + 780, + 777, + 755, + 656, + 621, + 685, + 715, + 640, + 675, + 640, + 655, + 651, + 629, + 656, + 674, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 40, + 16, + 13, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1250, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11832, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 917, + 833, + 740, + 650, + 692, + 794, + 732, + 688, + 713, + 677, + 748, + 677, + 659 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 30, + 16, + 9, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1080, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9548, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 813, + 678, + 703, + 691, + 673, + 661, + 656, + 635, + 735, + 706, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 47, + 20, + 6, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 843, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7018, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 879, + 777, + 663, + 684, + 720, + 655, + 710, + 698 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 49, + 37, + 22, + 14, + 10, + 6, + 2 + ], + "totalAlienShots": 541, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 792, + 714, + 706, + 662, + 603, + 670, + 627, + 656, + 666, + 684, + 658, + 650, + 663, + 732, + 635, + 711, + 623, + 688, + 667, + 641, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 30, + 9, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1622, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 22, + "survivalTicks": 17463, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 845, + 721, + 680, + 658, + 638, + 655, + 626, + 636, + 720, + 685, + 695, + 670, + 689, + 647, + 630, + 683, + 690, + 769, + 671, + 716, + 738 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 56, + 30, + 14, + 7, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1459, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 6857, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 768, + 760, + 667, + 646, + 686, + 727, + 631, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 37, + 23, + 13, + 10, + 6, + 5, + 5 + ], + "totalAlienShots": 591, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 23, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0, + 804, + 783, + 777, + 717, + 688, + 608, + 658, + 655, + 730, + 693, + 586, + 684, + 700, + 712, + 621, + 713, + 641, + 640, + 727, + 758, + 648 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 62, + 33, + 20, + 15, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1637, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12567, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 873, + 822, + 748, + 697, + 719, + 784, + 767, + 718, + 654, + 709, + 751, + 671, + 770, + 739 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 41, + 15, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 784, + 771, + 708, + 705, + 639, + 625, + 673, + 625, + 684, + 702, + 606, + 723, + 663, + 693, + 658, + 633, + 679, + 683, + 627, + 662, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 38, + 23, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1512, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 786, + 780, + 688, + 628, + 696, + 793, + 700, + 731, + 650, + 678, + 640, + 637, + 682, + 651, + 708, + 773, + 634, + 618, + 663, + 725, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 42, + 17, + 8, + 7, + 2, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1552, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 835, + 783, + 682, + 781, + 765, + 638, + 709, + 717, + 650, + 627, + 748, + 692, + 656, + 661, + 729, + 639, + 727, + 775, + 632, + 746, + 683 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 39, + 21, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1647, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6648, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 859, + 791, + 756, + 641, + 693, + 658, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 34, + 17, + 9, + 3, + 0, + 0 + ], + "totalAlienShots": 604, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0 + ], + "waveClearTicks": [ + 0, + 864, + 799, + 737, + 700, + 728, + 644, + 686, + 672, + 729, + 626, + 638, + 658, + 617, + 736, + 654, + 641, + 657, + 656, + 655, + 653, + 643, + 608 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 36, + 17, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1509, + "totalPlayerDeaths": 0 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8144, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 782, + 837, + 716, + 656, + 674, + 700, + 645, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 43, + 30, + 14, + 5, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 697, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12712, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 811, + 729, + 787, + 716, + 732, + 721, + 646, + 661, + 669, + 680, + 776, + 728, + 662 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 40, + 27, + 20, + 13, + 7, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1044, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11546, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 840, + 787, + 779, + 751, + 689, + 676, + 638, + 745, + 641, + 652, + 680, + 677, + 796 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 34, + 23, + 14, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1031, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 33, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 869, + 768, + 715, + 735, + 705, + 656, + 691, + 693, + 753, + 693, + 815, + 730, + 680, + 688, + 752, + 618, + 650, + 662, + 693, + 711, + 700 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 44, + 31, + 17, + 9, + 7, + 6, + 4, + 2, + 2, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1532, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 15953, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 760, + 695, + 692, + 643, + 699, + 683, + 680, + 656, + 662, + 630, + 657, + 697, + 671, + 666, + 727, + 711, + 714, + 702 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 44, + 28, + 16, + 12, + 7, + 3, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 1338, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7233, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 711, + 841, + 653, + 700, + 728, + 664, + 634, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 77, + 28, + 12, + 7, + 4, + 3, + 3, + 2 + ], + "totalAlienShots": 649, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 759, + 811, + 746, + 694, + 725, + 693, + 644, + 651, + 662, + 599, + 715, + 702, + 736, + 621, + 758, + 657, + 643, + 658, + 711, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 42, + 15, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1624, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8434, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 815, + 792, + 676, + 728, + 702, + 715, + 680, + 701 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 42, + 31, + 22, + 17, + 13, + 7, + 2, + 1 + ], + "totalAlienShots": 787, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4937, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 929, + 707, + 752, + 729, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 42, + 26, + 14, + 6 + ], + "totalAlienShots": 424, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6412, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 891, + 737, + 665, + 788, + 659, + 670, + 629 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 41, + 19, + 11, + 5, + 2, + 2 + ], + "totalAlienShots": 590, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10749, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 1073, + 832, + 768, + 791, + 672, + 732, + 670, + 659, + 634, + 683, + 709, + 638 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 52, + 27, + 18, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 979, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10261, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 772, + 670, + 701, + 712, + 711, + 728, + 707, + 677, + 703, + 668, + 619 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 82, + 53, + 28, + 14, + 4, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "totalAlienShots": 860, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11378, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 932, + 895, + 762, + 729, + 675, + 639, + 637, + 625, + 655, + 640, + 658, + 660 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 47, + 21, + 7, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1021, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 3928, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 819, + 803, + 788, + 622 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 28, + 18, + 10 + ], + "totalAlienShots": 348, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11812, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 790, + 708, + 641, + 618, + 621, + 713, + 670, + 656, + 659, + 606, + 764, + 654, + 639 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 74, + 35, + 19, + 14, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1039, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5894, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 925, + 683, + 695, + 719, + 653, + 738 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 57, + 24, + 9, + 4, + 2, + 1 + ], + "totalAlienShots": 532, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 46, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 838, + 763, + 698, + 692, + 621, + 598, + 715, + 658, + 602, + 753, + 687, + 691, + 714, + 662, + 674, + 648, + 625, + 678, + 781, + 706, + 631 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 40, + 18, + 6, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1601, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5418, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 858, + 755, + 629, + 685, + 683 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 80, + 47, + 32, + 20, + 15, + 7 + ], + "totalAlienShots": 465, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 633, + 658, + 635, + 764, + 685, + 732, + 648, + 748, + 661, + 632, + 658, + 641, + 710, + 662, + 730, + 618, + 584, + 694, + 636, + 624, + 614 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 45, + 26, + 15, + 10, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1505, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15379, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 848, + 749, + 658, + 623, + 633, + 636, + 744, + 702, + 657, + 654, + 760, + 666, + 692, + 619, + 659, + 671, + 690 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 40, + 20, + 11, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1321, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8414, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 807, + 708, + 642, + 755, + 607, + 660, + 676, + 744 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 76, + 43, + 29, + 10, + 2, + 2, + 1, + 0, + 0 + ], + "totalAlienShots": 713, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1457, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 156, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1266, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 168, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1281, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2171, + "livesLostByWave": [ + 0, + 3, + 7 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 32 + ], + "totalAlienShots": 255, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 993, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1589, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 174, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1471, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1253, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 181, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1243, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 162, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1185, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1779, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1315 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1975, + "livesLostByWave": [ + 0, + 7, + 3 + ], + "waveClearTicks": [ + 0, + 1214 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 240, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1633, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1189 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 238, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1413, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 858 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 213, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1839, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1141 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 245, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 827, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2551, + "livesLostByWave": [ + 0, + 4, + 5, + 1 + ], + "waveClearTicks": [ + 0, + 997, + 1049 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19, + 1 + ], + "totalAlienShots": 341, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1279, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1487, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 150, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2093, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52 + ], + "totalAlienShots": 290, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 907, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 159, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1327, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1429, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 210, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1507, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1563, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1133, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 130, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1489, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 154, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1461, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 179, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1464, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1014 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 209, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1687, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 191, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1961, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1655 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 183, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1143, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 205, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1107, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 897, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2387, + "livesLostByWave": [ + 0, + 4, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 962, + 600 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27, + 5 + ], + "totalAlienShots": 358, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1166, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1615, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1213 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1727, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 266, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1237, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 152, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1239, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1479, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1273, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1207, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 141, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1452, + "livesLostByWave": [ + 0, + 5, + 5 + ], + "waveClearTicks": [ + 0, + 964 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 599, + 564, + 594, + 536, + 692, + 610, + 520, + 648, + 615, + 629, + 627, + 1173, + 887, + 825, + 783, + 694, + 750, + 837, + 803, + 832 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 46, + 22, + 16, + 8, + 5, + 5, + 4, + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2262, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17704, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 4, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 534, + 639, + 688, + 683, + 745, + 690, + 777, + 785, + 959, + 776, + 915, + 821, + 782, + 789, + 903, + 899, + 750, + 733, + 845 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 107, + 46, + 23, + 15, + 8, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2285, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 2, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 564, + 659, + 597, + 651, + 519, + 485, + 550, + 622, + 614, + 614, + 692, + 872, + 871, + 1250, + 735, + 776, + 913, + 930, + 860, + 832 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 46, + 25, + 19, + 14, + 8, + 7, + 7, + 7, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2353, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12162, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 2, + 1, + 1, + 2, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 580, + 512, + 593, + 626, + 553, + 650, + 1012, + 1003, + 1000, + 875, + 919, + 924 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 44, + 28, + 19, + 13, + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1449, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10661, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 0, + 1, + 2, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 520, + 680, + 609, + 602, + 668, + 775, + 778, + 617, + 884, + 975, + 872, + 928 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 45, + 21, + 11, + 10, + 5, + 4, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1311, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 529, + 574, + 552, + 732, + 619, + 650, + 561, + 525, + 576, + 558, + 555, + 659, + 564, + 565, + 601, + 626, + 757, + 961, + 780, + 1085, + 826, + 872 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 55, + 27, + 14, + 8, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2168, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 7, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 4, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 760, + 705, + 915, + 578, + 605, + 540, + 645, + 596, + 589, + 522, + 696, + 643, + 629, + 925, + 887, + 889, + 851, + 867, + 846, + 914 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 39, + 17, + 13, + 7, + 6, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2188, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11764, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 1, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 478, + 530, + 631, + 539, + 662, + 580, + 620, + 579, + 647, + 663, + 608, + 678, + 784, + 1187 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 102, + 57, + 24, + 15, + 11, + 9, + 4, + 4, + 4, + 3, + 3, + 2, + 1, + 0 + ], + "totalAlienShots": 1446, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 567, + 579, + 647, + 577, + 593, + 639, + 663, + 561, + 638, + 652, + 842, + 787, + 1038, + 795, + 899, + 889, + 1007, + 962, + 1002, + 842 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 54, + 29, + 21, + 14, + 11, + 4, + 4, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2192, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 690, + 678, + 620, + 618, + 607, + 597, + 656, + 621, + 789, + 890, + 756, + 966, + 745, + 885, + 766, + 816, + 738, + 714, + 759 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 111, + 43, + 26, + 15, + 7, + 4, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2287, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14998, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 3, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 612, + 632, + 717, + 692, + 850, + 611, + 708, + 830, + 806, + 1020, + 877, + 821, + 787, + 798, + 802, + 825 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 41, + 25, + 20, + 9, + 7, + 6, + 5, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1932, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 824, + 674, + 654, + 645, + 648, + 636, + 677, + 634, + 592, + 653, + 535, + 716, + 810, + 1035, + 791, + 858, + 844, + 931, + 872 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 35, + 16, + 11, + 10, + 8, + 5, + 5, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2258, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12327, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 631, + 566, + 611, + 593, + 548, + 606, + 495, + 625, + 593, + 560, + 859, + 703, + 741, + 724, + 865 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 46, + 30, + 21, + 16, + 6, + 5, + 4, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1511, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 566, + 644, + 664, + 623, + 714, + 678, + 642, + 648, + 638, + 549, + 704, + 562, + 652, + 576, + 714, + 782, + 733, + 1067, + 888, + 861, + 761 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 51, + 20, + 10, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2316, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 13696, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 529, + 627, + 537, + 619, + 636, + 639, + 617, + 541, + 580, + 676, + 588, + 539, + 737, + 633, + 661, + 672, + 884 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 48, + 26, + 16, + 11, + 9, + 9, + 6, + 4, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1646, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 3, + 2, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 715, + 641, + 604, + 579, + 537, + 517, + 542, + 531, + 500, + 562, + 543, + 675, + 728, + 803, + 769, + 766, + 848, + 1119, + 912, + 800, + 874 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 104, + 54, + 20, + 13, + 10, + 8, + 7, + 3, + 3, + 3, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2235, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17718, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 537, + 588, + 740, + 680, + 573, + 590, + 598, + 653, + 629, + 624, + 1208, + 886, + 987, + 873, + 998, + 761, + 709, + 813, + 775 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 98, + 54, + 31, + 16, + 11, + 9, + 9, + 7, + 6, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2221, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 538, + 580, + 604, + 625, + 520, + 540, + 495, + 608, + 649, + 631, + 662, + 653, + 621, + 677, + 552, + 488, + 647, + 811, + 787, + 685, + 878, + 786 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 55, + 31, + 16, + 11, + 9, + 6, + 4, + 4, + 4, + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2247, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10158, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 3, + 1, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 746, + 663, + 547, + 653, + 664, + 789, + 816, + 972, + 732, + 884 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 51, + 27, + 15, + 11, + 7, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1235, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6356, + "livesLostByWave": [ + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 552, + 706, + 705, + 707, + 675, + 658, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 41, + 31, + 26, + 20, + 12, + 5 + ], + "totalAlienShots": 854, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 21, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 640, + 550, + 535, + 495, + 494, + 617, + 537, + 556, + 642, + 794, + 1010, + 920, + 845, + 999, + 773, + 760, + 893, + 892, + 992, + 886 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 50, + 28, + 19, + 11, + 10, + 9, + 7, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2222, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6666, + "livesLostByWave": [ + 0, + 3, + 1, + 2, + 2, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 569, + 688, + 728, + 843, + 891, + 708, + 748 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 101, + 44, + 20, + 11, + 8, + 7, + 3 + ], + "totalAlienShots": 865, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 15733, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 887, + 648, + 682, + 601, + 584, + 579, + 579, + 705, + 657, + 610, + 635, + 556, + 643, + 610, + 877, + 800, + 1068, + 720 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 42, + 24, + 17, + 11, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 3, + 1, + 0, + 0 + ], + "totalAlienShots": 1934, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 581, + 526, + 631, + 641, + 613, + 568, + 575, + 666, + 817, + 720, + 518, + 555, + 593, + 647, + 555, + 605, + 520, + 660, + 613, + 575, + 583, + 665, + 703, + 525 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 49, + 36, + 20, + 11, + 9, + 8, + 6, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2260, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 704, + 678, + 647, + 693, + 689, + 549, + 636, + 813, + 1048, + 878, + 868, + 870, + 862, + 830, + 857, + 807, + 883, + 873 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 42, + 21, + 10, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2343, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13694, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 511, + 611, + 591, + 577, + 604, + 637, + 676, + 759, + 563, + 509, + 584, + 803, + 874, + 889, + 800, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 46, + 27, + 19, + 17, + 14, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1698, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 591, + 648, + 594, + 541, + 624, + 663, + 599, + 521, + 576, + 505, + 531, + 579, + 758, + 807, + 1039, + 917, + 885, + 987, + 819, + 799 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 54, + 30, + 19, + 6, + 3, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2312, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 601, + 650, + 668, + 579, + 589, + 552, + 737, + 546, + 585, + 551, + 495, + 558, + 551, + 527, + 577, + 567, + 619, + 626, + 648, + 615, + 669, + 649, + 645, + 633 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 45, + 21, + 12, + 11, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2145, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 524, + 554, + 530, + 566, + 593, + 567, + 612, + 575, + 721, + 783, + 878, + 802, + 817, + 810, + 1028, + 908, + 887, + 802, + 1017, + 870 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 109, + 62, + 38, + 20, + 16, + 12, + 11, + 10, + 8, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2237, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15826, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 834, + 651, + 562, + 675, + 598, + 746, + 620, + 595, + 650, + 630, + 597, + 679, + 746, + 883, + 1064, + 797, + 916 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 35, + 17, + 10, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1971, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 31, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 720, + 550, + 568, + 486, + 563, + 681, + 667, + 649, + 690, + 617, + 654, + 648, + 633, + 607, + 607, + 679, + 616, + 512, + 532, + 563, + 755, + 741 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 38, + 16, + 11, + 11, + 6, + 4, + 2, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2224, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 32, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 507, + 557, + 547, + 594, + 548, + 574, + 586, + 585, + 547, + 606, + 650, + 642, + 598, + 608, + 551, + 719, + 718, + 1098, + 915, + 831, + 816, + 959 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 71, + 40, + 23, + 17, + 11, + 10, + 7, + 7, + 6, + 6, + 5, + 5, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2219, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16621, + "livesLostByWave": [ + 0, + 3, + 2, + 1, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 642, + 686, + 618, + 664, + 510, + 746, + 660, + 793, + 814, + 788, + 973, + 919, + 872, + 914, + 844, + 875, + 781, + 963 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 49, + 30, + 22, + 18, + 12, + 7, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2080, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 34, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 645, + 623, + 527, + 575, + 611, + 578, + 579, + 616, + 535, + 523, + 600, + 577, + 554, + 651, + 674, + 600, + 649, + 585, + 595, + 589, + 751, + 817, + 829 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 31, + 22, + 11, + 7, + 5, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2203, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 554, + 657, + 670, + 632, + 639, + 584, + 636, + 598, + 632, + 739, + 669, + 650, + 624, + 534, + 718, + 784, + 965, + 775, + 775, + 819, + 823 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 40, + 26, + 17, + 12, + 12, + 12, + 9, + 6, + 2, + 2, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2316, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 579, + 593, + 565, + 602, + 529, + 650, + 606, + 554, + 660, + 607, + 547, + 624, + 564, + 633, + 594, + 646, + 584, + 622, + 543, + 535, + 681, + 753, + 832, + 637 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 40, + 24, + 10, + 8, + 5, + 3, + 2, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2194, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 37, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 563, + 615, + 570, + 493, + 610, + 721, + 721, + 561, + 625, + 607, + 619, + 619, + 608, + 716, + 637, + 702, + 648, + 723, + 691, + 707, + 574, + 622, + 641 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 53, + 31, + 24, + 19, + 12, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2314, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9682, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 4, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 642, + 583, + 582, + 564, + 721, + 685, + 749, + 765, + 780, + 1104 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 43, + 25, + 19, + 14, + 10, + 5, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1232, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14554, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 588, + 695, + 652, + 572, + 571, + 577, + 609, + 579, + 621, + 775, + 777, + 792, + 1124, + 870, + 926, + 1041 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 45, + 23, + 20, + 11, + 6, + 4, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1867, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 40, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 488, + 636, + 629, + 593, + 645, + 662, + 696, + 620, + 608, + 636, + 684, + 511, + 621, + 596, + 720, + 634, + 508, + 650, + 733, + 635, + 649, + 734, + 749 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 48, + 21, + 12, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2284, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 620, + 594, + 609, + 631, + 657, + 608, + 575, + 597, + 663, + 577, + 581, + 689, + 693, + 650, + 630, + 624, + 613, + 629, + 701, + 819, + 608, + 549 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 60, + 39, + 27, + 20, + 15, + 11, + 6, + 3, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2169, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 42, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 580, + 723, + 703, + 589, + 506, + 568, + 560, + 544, + 496, + 577, + 510, + 621, + 550, + 775, + 788, + 790, + 851, + 897, + 786, + 1014, + 830, + 708 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 40, + 21, + 12, + 9, + 3, + 2, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2241, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 43, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 2, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 569, + 610, + 700, + 546, + 568, + 552, + 537, + 634, + 579, + 777, + 753, + 1150, + 798, + 915, + 816, + 749, + 803, + 873, + 859 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 42, + 25, + 15, + 9, + 3, + 3, + 3, + 3, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2223, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 44, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 475, + 614, + 649, + 645, + 653, + 603, + 565, + 626, + 648, + 590, + 552, + 577, + 535, + 628, + 620, + 567, + 579, + 616, + 611, + 611, + 1009, + 705, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 62, + 24, + 16, + 8, + 4, + 4, + 2, + 2, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2147, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 687, + 778, + 644, + 538, + 568, + 664, + 681, + 660, + 728, + 696, + 648, + 649, + 593, + 579, + 627, + 755, + 971, + 801, + 929, + 876 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 41, + 17, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2301, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14037, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 646, + 595, + 632, + 638, + 661, + 625, + 619, + 649, + 814, + 764, + 902, + 795, + 794, + 835, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 48, + 34, + 21, + 10, + 9, + 8, + 7, + 7, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1850, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 527, + 563, + 591, + 569, + 636, + 616, + 738, + 649, + 713, + 642, + 635, + 537, + 600, + 589, + 589, + 559, + 560, + 726, + 821, + 804, + 981 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 61, + 33, + 15, + 10, + 7, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2235, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 552, + 649, + 727, + 745, + 645, + 598, + 631, + 538, + 526, + 578, + 524, + 687, + 751, + 744, + 763, + 759, + 890, + 803, + 887, + 887 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 58, + 29, + 17, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2228, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12311, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 0, + 0, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 643, + 641, + 636, + 586, + 699, + 563, + 663, + 839, + 1021, + 887, + 829, + 812, + 919 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 43, + 27, + 13, + 4, + 4, + 4, + 4, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1514, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10653, + "livesLostByWave": [ + 0, + 1, + 2, + 3, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 582, + 690, + 662, + 1069, + 849, + 856, + 857, + 971, + 867, + 951 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 58, + 33, + 20, + 17, + 12, + 10, + 5, + 4, + 1 + ], + "totalAlienShots": 1363, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1502, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 870 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16 + ], + "totalAlienShots": 271, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1377, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 853 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 240, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 1733, + "livesLostByWave": [ + 0, + 10, + 1, + 4 + ], + "waveClearTicks": [ + 0, + 791, + 453 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21, + 8 + ], + "totalAlienShots": 288, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1001, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1393, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 942 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 250, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 903, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 172, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1324, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2485, + "livesLostByWave": [ + 0, + 5, + 7, + 3 + ], + "waveClearTicks": [ + 0, + 704, + 1068 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 48, + 0 + ], + "totalAlienShots": 386, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1318, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 772 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1374, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 707 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 6 + ], + "totalAlienShots": 289, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1774, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 938 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 265, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1465, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 591 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 40 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1209, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 182, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 781 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 225, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1599, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 328, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1389, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 847 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 260, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 1937, + "livesLostByWave": [ + 0, + 8, + 6, + 1 + ], + "waveClearTicks": [ + 0, + 713, + 833 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16, + 3 + ], + "totalAlienShots": 301, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1120, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 138, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1625, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 36 + ], + "totalAlienShots": 294, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1160, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 46 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1321, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 933 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 189, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1323, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 589 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 301, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1115, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1595, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 757 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 271, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1597, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 283, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1232, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 925 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 214, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1509, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 1231 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1165, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1007, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1534, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 265, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1367, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 770 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 249, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 831, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 139, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1669, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 1154 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 259, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 908, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1879, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 743 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 296, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 959, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 188, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 266, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1173, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 248, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1163, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 709 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1342, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 1010 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 230, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1102, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 213, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1411, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 708 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 278, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1191, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 828 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 203, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1163, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 211, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1747, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 1185 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 279, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1638, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 782 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 302, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1269, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1557, + "livesLostByWave": [ + 0, + 4, + 11 + ], + "waveClearTicks": [ + 0, + 571 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 256, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 729, + 820, + 722, + 489, + 957, + 756, + 585, + 440, + 699, + 714, + 890, + 610, + 625, + 786, + 775, + 1072, + 503, + 550, + 515, + 698, + 999 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 29, + 18, + 15, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2762, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 2, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 664, + 794, + 606, + 609, + 983, + 630, + 579, + 567, + 428, + 620, + 633, + 689, + 686, + 728, + 658, + 560, + 736, + 699, + 636, + 632, + 497, + 780 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 37, + 14, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2767, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 2, + 2, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 733, + 761, + 796, + 612, + 631, + 628, + 750, + 1069, + 698, + 863, + 770, + 772, + 825, + 856, + 844, + 1028, + 890, + 885 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 40, + 18, + 11, + 10, + 10, + 8, + 6, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2789, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 710, + 603, + 538, + 681, + 955, + 621, + 759, + 1161, + 552, + 529, + 583, + 1066, + 581, + 844, + 721, + 847, + 1012, + 1126, + 549 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 29, + 16, + 9, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2797, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 4, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 663, + 549, + 474, + 844, + 694, + 649, + 644, + 818, + 649, + 565, + 624, + 695, + 624, + 661, + 662, + 678, + 980, + 843, + 656, + 818, + 618, + 666 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 40, + 24, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2855, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 3, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 686, + 496, + 652, + 594, + 598, + 953, + 1155, + 810, + 752, + 1015, + 685, + 1092, + 869, + 1206, + 938, + 600, + 704, + 649, + 898 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 44, + 9, + 5, + 5, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2840, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 7, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 5, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 625, + 625, + 577, + 502, + 665, + 644, + 993, + 610, + 558, + 880, + 885, + 657, + 798, + 757, + 691, + 654, + 843, + 1030, + 1007 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 38, + 13, + 6, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2941, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 16618, + "livesLostByWave": [ + 0, + 1, + 2, + 3, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 629, + 661, + 804, + 604, + 755, + 695, + 692, + 583, + 758, + 829, + 966, + 695, + 876, + 773, + 1374, + 910, + 789 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 36, + 14, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2683, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 3, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 645, + 626, + 497, + 533, + 653, + 1127, + 821, + 844, + 977, + 618, + 876, + 1081, + 1429, + 910, + 707, + 845, + 1323, + 878 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 36, + 24, + 15, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2749, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15022, + "livesLostByWave": [ + 0, + 0, + 3, + 0, + 0, + 2, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 3, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 429, + 848, + 604, + 591, + 698, + 714, + 825, + 694, + 718, + 873, + 754, + 702, + 1105, + 770, + 978, + 862 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 35, + 10, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2427, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15228, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 3, + 1, + 3, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 631, + 635, + 485, + 529, + 761, + 956, + 886, + 778, + 608, + 758, + 976, + 900, + 883, + 1039, + 1041, + 1003 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 33, + 17, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2458, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 626, + 621, + 498, + 845, + 760, + 673, + 764, + 653, + 716, + 706, + 565, + 1064, + 766, + 712, + 683, + 560, + 661, + 765, + 766, + 875 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 32, + 23, + 17, + 8, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2771, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15248, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 4, + 0, + 0, + 2, + 0, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 667, + 739, + 745, + 797, + 576, + 881, + 728, + 676, + 820, + 816, + 716, + 758, + 734, + 810, + 668, + 871, + 830 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 35, + 16, + 9, + 5, + 4, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2398, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 491, + 593, + 960, + 787, + 636, + 674, + 721, + 757, + 506, + 596, + 566, + 618, + 602, + 619, + 505, + 469, + 568, + 1050, + 770, + 842, + 955 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 34, + 13, + 7, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2796, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 15, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 3, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 542, + 777, + 875, + 551, + 525, + 795, + 758, + 848, + 715, + 615, + 846, + 462, + 804, + 885, + 660, + 563, + 670, + 810, + 831, + 1538 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 33, + 22, + 14, + 9, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2801, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 454, + 556, + 607, + 748, + 595, + 687, + 801, + 641, + 804, + 638, + 730, + 631, + 572, + 429, + 552, + 549, + 660, + 810, + 614, + 815, + 608, + 876 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 36, + 16, + 10, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2779, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 17, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 2, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 630, + 691, + 643, + 729, + 666, + 705, + 681, + 537, + 560, + 552, + 545, + 555, + 614, + 1126, + 882, + 735, + 949, + 1084, + 869, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 29, + 21, + 16, + 13, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2943, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 435, + 515, + 458, + 482, + 608, + 617, + 757, + 577, + 1099, + 763, + 964, + 535, + 557, + 605, + 814, + 757, + 792, + 680, + 595, + 586, + 585, + 1040 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 44, + 29, + 16, + 9, + 6, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2818, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 19, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 669, + 550, + 595, + 669, + 807, + 618, + 846, + 648, + 684, + 524, + 486, + 774, + 614, + 935, + 705, + 1047, + 804, + 827, + 870, + 676 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 59, + 35, + 18, + 7, + 5, + 4, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2761, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 706, + 695, + 1086, + 694, + 980, + 570, + 622, + 979, + 777, + 1144, + 1143, + 1114, + 895, + 1189, + 830, + 1215 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 34, + 21, + 10, + 9, + 4, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2891, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 21, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 723, + 664, + 632, + 577, + 681, + 881, + 725, + 666, + 597, + 746, + 703, + 739, + 649, + 546, + 651, + 473, + 547, + 585, + 708, + 678, + 993 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 31, + 12, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2952, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15434, + "livesLostByWave": [ + 0, + 1, + 4, + 0, + 2, + 1, + 0, + 2, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 557, + 627, + 610, + 657, + 649, + 678, + 633, + 654, + 769, + 674, + 1152, + 1063, + 881, + 815, + 1283, + 1228 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 35, + 10, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2502, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13781, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 1, + 2, + 1, + 0, + 1, + 0, + 2, + 1, + 3, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 658, + 666, + 744, + 722, + 576, + 503, + 571, + 697, + 697, + 1063, + 1048, + 1065, + 1095, + 1152 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 40, + 19, + 13, + 9, + 8, + 5, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2206, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 1, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 725, + 933, + 557, + 669, + 682, + 583, + 708, + 582, + 674, + 672, + 649, + 1095, + 715, + 570, + 1067, + 788, + 873, + 794, + 1448 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 36, + 20, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2729, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 15111, + "livesLostByWave": [ + 0, + 1, + 3, + 3, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 504, + 624, + 690, + 758, + 920, + 678, + 1200, + 754, + 712, + 612, + 791, + 1156, + 1028, + 745, + 1310 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 47, + 16, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2435, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 669, + 503, + 649, + 771, + 660, + 564, + 726, + 874, + 866, + 881, + 855, + 718, + 772, + 671, + 861, + 784, + 600, + 886, + 734, + 574, + 544 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 37, + 17, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2683, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 617, + 731, + 614, + 605, + 638, + 597, + 683, + 943, + 753, + 684, + 675, + 616, + 820, + 873, + 697, + 701, + 846, + 751, + 860, + 678 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 41, + 26, + 14, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2822, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 4, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 525, + 611, + 908, + 720, + 633, + 714, + 729, + 1109, + 603, + 659, + 620, + 540, + 869, + 754, + 935, + 703, + 770, + 831, + 556, + 863 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 41, + 10, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2907, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 13607, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 3, + 2, + 0, + 2, + 0, + 0, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 473, + 954, + 603, + 625, + 953, + 837, + 682, + 849, + 852, + 1127, + 1096, + 1174, + 1072 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 20, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2366, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 30, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 453, + 772, + 517, + 607, + 565, + 551, + 551, + 1040, + 705, + 732, + 911, + 1011, + 732, + 794, + 543, + 656, + 1041, + 729, + 825, + 1107 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 23, + 17, + 12, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2998, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 31, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 527, + 675, + 591, + 491, + 601, + 509, + 491, + 1006, + 563, + 549, + 705, + 495, + 662, + 1039, + 793, + 740, + 1631, + 869, + 717, + 709, + 629 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 44, + 26, + 20, + 9, + 8, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2860, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9982, + "livesLostByWave": [ + 0, + 1, + 3, + 0, + 0, + 1, + 2, + 7, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 677, + 595, + 510, + 591, + 669, + 1178, + 1255, + 954, + 1075 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 43, + 29, + 13, + 6, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1677, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 33, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 2, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 469, + 617, + 637, + 635, + 626, + 1010, + 1103, + 1103, + 783, + 618, + 615, + 672, + 609, + 585, + 808, + 1304, + 800, + 844, + 826 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 34, + 14, + 8, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2935, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 34, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 4, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 736, + 761, + 680, + 747, + 793, + 644, + 615, + 546, + 550, + 774, + 1114, + 1040, + 717, + 747, + 856, + 756, + 821, + 862, + 1120 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 30, + 23, + 17, + 11, + 11, + 11, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2838, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 0, + 0, + 1, + 1, + 2, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 651, + 719, + 883, + 752, + 820, + 510, + 520, + 721, + 671, + 583, + 496, + 895, + 613, + 642, + 944, + 640, + 619, + 892, + 830, + 826 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 37, + 12, + 5, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2826, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 618, + 795, + 678, + 987, + 680, + 595, + 548, + 857, + 648, + 766, + 506, + 628, + 737, + 696, + 1041, + 1032, + 852, + 899, + 963, + 767 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 24, + 11, + 9, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2885, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 37, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 531, + 611, + 766, + 612, + 624, + 874, + 740, + 677, + 1115, + 595, + 591, + 916, + 620, + 881, + 854, + 701, + 597, + 546, + 571, + 780, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 43, + 24, + 11, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2823, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12517, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 4, + 0, + 0, + 0, + 3, + 2, + 2, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 446, + 607, + 597, + 661, + 831, + 746, + 854, + 517, + 863, + 749, + 774, + 1548, + 786 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 25, + 13, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2039, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 39, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 2, + 0, + 3, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 693, + 580, + 849, + 723, + 659, + 719, + 582, + 611, + 613, + 661, + 677, + 892, + 877, + 856, + 882, + 1019, + 973, + 1333, + 1122 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 24, + 7, + 4, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2747, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 40, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 545, + 617, + 640, + 649, + 758, + 986, + 848, + 596, + 582, + 525, + 618, + 646, + 769, + 793, + 1212, + 768, + 765, + 707, + 814, + 845 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 36, + 19, + 8, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2983, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 1, + 3, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 554, + 679, + 590, + 749, + 605, + 792, + 789, + 621, + 876, + 512, + 1039, + 974, + 1154, + 1766, + 671, + 744, + 1444 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 51, + 30, + 21, + 17, + 12, + 11, + 9, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2685, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 42, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 3, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 612, + 1007, + 787, + 607, + 586, + 467, + 521, + 679, + 600, + 603, + 630, + 620, + 465, + 833, + 621, + 769, + 849, + 626, + 884, + 671, + 833, + 788 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 18, + 7, + 6, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2826, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 43, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 421, + 621, + 616, + 465, + 470, + 616, + 567, + 912, + 626, + 635, + 1031, + 578, + 1133, + 731, + 694, + 634, + 686, + 682, + 646, + 570, + 1104 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 33, + 13, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2930, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 44, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 515, + 873, + 848, + 715, + 882, + 660, + 576, + 610, + 877, + 857, + 845, + 1134, + 782, + 1052, + 701, + 671, + 787, + 645, + 835 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 28, + 13, + 8, + 4, + 4, + 4, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2737, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 3, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 611, + 620, + 737, + 590, + 644, + 679, + 731, + 868, + 726, + 682, + 876, + 760, + 778, + 750, + 784, + 816, + 887, + 1059, + 884 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 30, + 13, + 11, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3007, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 46, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 469, + 617, + 900, + 729, + 843, + 572, + 525, + 521, + 724, + 870, + 870, + 729, + 651, + 565, + 672, + 656, + 804, + 914, + 708, + 561, + 1080 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 34, + 15, + 10, + 8, + 7, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2673, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 777, + 779, + 1202, + 556, + 570, + 522, + 544, + 661, + 635, + 594, + 964, + 869, + 765, + 641, + 1131, + 597, + 1009, + 758, + 608, + 876 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 31, + 10, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2702, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 3, + 0, + 1, + 0, + 0, + 1, + 2, + 2, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 545, + 669, + 837, + 817, + 669, + 866, + 783, + 791, + 1372, + 800, + 1128, + 1006, + 981, + 1162, + 1076, + 1329 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 37, + 21, + 7, + 6, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2941, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 49, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 519, + 886, + 668, + 646, + 651, + 601, + 868, + 817, + 1117, + 1101, + 749, + 721, + 666, + 708, + 859, + 804, + 1054, + 568, + 800 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 26, + 17, + 10, + 6, + 5, + 5, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2837, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 50, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 3, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 570, + 665, + 612, + 500, + 667, + 904, + 685, + 1011, + 644, + 1076, + 693, + 600, + 646, + 660, + 772, + 826, + 885, + 753, + 1038 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 43, + 19, + 11, + 9, + 5, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2788, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1523, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 341, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1585, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 756 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 385, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 1841, + "livesLostByWave": [ + 0, + 6, + 12, + 2 + ], + "waveClearTicks": [ + 0, + 543, + 823 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 23, + 0 + ], + "totalAlienShots": 414, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 652 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 309, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 975, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 251, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1324, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 324, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 241, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1245, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 746 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 274, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1258, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 608 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 333, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1175, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 607 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 39 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1443, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 678 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 387, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 869, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 227, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1294, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 323, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1287, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 360, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1418, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 774 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 330, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1357, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 777 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 308, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 955, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 277, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1232, + "livesLostByWave": [ + 0, + 18, + 2 + ], + "waveClearTicks": [ + 0, + 810 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 3 + ], + "totalAlienShots": 292, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1169, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 209, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1199, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 547 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 12 + ], + "totalAlienShots": 331, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1392, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 602 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 338, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1265, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 561 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 331, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1227, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 572 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 302, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 895, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 246, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1284, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 2 + ], + "totalAlienShots": 316, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1699, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 355, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1301, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 577 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 13 + ], + "totalAlienShots": 349, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1193, + "livesLostByWave": [ + 0, + 19, + 1 + ], + "waveClearTicks": [ + 0, + 911 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 225, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1299, + "livesLostByWave": [ + 0, + 8, + 12 + ], + "waveClearTicks": [ + 0, + 647 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 309, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1393, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 393, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1223, + "livesLostByWave": [ + 0, + 17, + 3 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 300, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1059, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1542, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 389, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 739, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 727, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 233, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1295, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 653 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 308, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1092, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 688 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 266, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1381, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 593 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 355, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 937, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 242, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1135, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 675 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 255, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1356, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 662 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 358, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1177, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 674 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 327, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1233, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1213, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 312, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1241, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 176, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 904, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 229, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12777, + "livesLostByWave": [ + 0, + 0, + 8, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 463, + 524, + 851, + 606, + 738, + 943, + 845, + 660, + 725, + 666, + 726, + 671, + 1038, + 1097 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 32, + 9, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2522, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 2, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 463, + 406, + 450, + 478, + 464, + 571, + 564, + 767, + 516, + 558, + 575, + 1006, + 708, + 518, + 731, + 617, + 457, + 513, + 535, + 487, + 733, + 524, + 738, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 37, + 20, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3437, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15831, + "livesLostByWave": [ + 0, + 1, + 1, + 1, + 1, + 3, + 5, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 598, + 669, + 613, + 574, + 659, + 650, + 621, + 569, + 709, + 635, + 736, + 690, + 656, + 1355, + 932, + 795, + 554, + 809 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 27, + 7, + 3, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3198, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 4, + 3, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 528, + 508, + 713, + 1357, + 569, + 562, + 538, + 554, + 616, + 642, + 677, + 693, + 737, + 739, + 646, + 997, + 810, + 569, + 743, + 531 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 51, + 17, + 13, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3488, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8857, + "livesLostByWave": [ + 0, + 2, + 3, + 3, + 5, + 2, + 2, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 520, + 472, + 608, + 1053, + 1083, + 1041, + 908, + 1105 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 36, + 23, + 6, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1825, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 4, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 384, + 1027, + 517, + 542, + 556, + 388, + 660, + 523, + 587, + 854, + 482, + 572, + 486, + 1108, + 477, + 491, + 528, + 905, + 729, + 1000, + 825, + 652, + 491 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 16, + 10, + 7, + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3493, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 7, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 680, + 599, + 541, + 671, + 575, + 733, + 558, + 634, + 609, + 694, + 945, + 565, + 957, + 729, + 997, + 1196, + 741, + 633, + 777, + 740 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 13, + 11, + 2, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3562, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 8, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 5, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 575, + 621, + 619, + 757, + 846, + 557, + 516, + 953, + 545, + 780, + 656, + 538, + 899, + 710, + 737, + 736, + 684, + 1206, + 984, + 547 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 18, + 10, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3444, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 2, + 1, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 739, + 773, + 399, + 479, + 428, + 470, + 781, + 555, + 679, + 510, + 684, + 573, + 1381, + 653, + 707, + 726, + 738, + 590, + 1050, + 495, + 812, + 761 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 27, + 13, + 8, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3314, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 2, + 0, + 2, + 1, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 394, + 699, + 867, + 1319, + 730, + 566, + 1013, + 646, + 535, + 692, + 637, + 632, + 846, + 826, + 666, + 685, + 613, + 697, + 714, + 913 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 22, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3548, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10012, + "livesLostByWave": [ + 0, + 4, + 0, + 2, + 0, + 1, + 3, + 2, + 3, + 0, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 536, + 429, + 745, + 518, + 723, + 682, + 973, + 568, + 585, + 771, + 503, + 629 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38, + 17, + 10, + 10, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2025, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14928, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 1, + 3, + 0, + 2, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 558, + 934, + 519, + 489, + 534, + 579, + 502, + 926, + 516, + 781, + 677, + 1169, + 665, + 884, + 1100, + 1021 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 11, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2973, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 13, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 410, + 784, + 1008, + 571, + 516, + 555, + 454, + 578, + 498, + 550, + 572, + 572, + 567, + 458, + 785, + 573, + 706, + 865, + 840, + 1043, + 984, + 996 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 18, + 8, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3551, + "totalPlayerDeaths": 17 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 3, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 430, + 503, + 514, + 592, + 935, + 524, + 663, + 705, + 570, + 692, + 714, + 729, + 1004, + 1180, + 908, + 527, + 841, + 608, + 1375, + 603 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 46, + 20, + 10, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3361, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11923, + "livesLostByWave": [ + 0, + 4, + 2, + 1, + 3, + 1, + 1, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 673, + 705, + 670, + 675, + 683, + 739, + 734, + 525, + 667, + 745, + 722, + 1099, + 1018 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 14, + 6, + 5, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2350, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 3, + 1, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 464, + 503, + 501, + 453, + 593, + 518, + 576, + 929, + 736, + 468, + 1354, + 711, + 575, + 602, + 569, + 1032, + 563, + 711, + 633, + 554, + 858, + 867 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 32, + 15, + 9, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3494, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15007, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 0, + 3, + 1, + 2, + 3, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 559, + 486, + 615, + 547, + 552, + 652, + 628, + 854, + 832, + 566, + 777, + 707, + 993, + 840, + 568, + 1047, + 1175 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 44, + 23, + 21, + 14, + 8, + 5, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3031, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 651, + 617, + 708, + 625, + 774, + 858, + 741, + 613, + 1058, + 838, + 739, + 586, + 735, + 709, + 674, + 585, + 575, + 1097, + 482, + 468, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 24, + 8, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3495, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 19, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 3, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 402, + 514, + 504, + 497, + 513, + 478, + 451, + 883, + 507, + 643, + 648, + 591, + 736, + 585, + 547, + 733, + 655, + 962, + 1036, + 783, + 710, + 1052 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 38, + 19, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3604, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 470, + 548, + 403, + 482, + 476, + 492, + 494, + 851, + 999, + 906, + 578, + 726, + 729, + 557, + 527, + 714, + 629, + 1002, + 656, + 632, + 505, + 786, + 740 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 25, + 11, + 8, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3555, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 21, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 4, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 457, + 367, + 520, + 976, + 418, + 607, + 498, + 913, + 590, + 597, + 515, + 585, + 956, + 853, + 584, + 560, + 832, + 715, + 563, + 535, + 843, + 681, + 649 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 38, + 17, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3548, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 22, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 5, + 1, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 599, + 483, + 419, + 438, + 449, + 488, + 470, + 986, + 742, + 701, + 580, + 576, + 739, + 604, + 688, + 1382, + 585, + 651, + 1139, + 565, + 530, + 951 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 38, + 9, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3358, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 23, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 470, + 824, + 556, + 624, + 761, + 468, + 544, + 817, + 458, + 857, + 734, + 519, + 490, + 521, + 553, + 508, + 456, + 365, + 385, + 932, + 722, + 598, + 737, + 736 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 20, + 11, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3406, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 679, + 659, + 1004, + 889, + 596, + 602, + 663, + 537, + 542, + 543, + 492, + 699, + 586, + 939, + 679, + 543, + 871, + 726, + 579, + 585, + 643, + 526 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 18, + 6, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3536, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10172, + "livesLostByWave": [ + 0, + 0, + 12, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 425, + 912, + 805, + 944, + 709, + 587, + 723, + 668, + 596, + 739, + 1125 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 30, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1909, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 26, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 479, + 882, + 427, + 525, + 366, + 727, + 825, + 568, + 707, + 519, + 511, + 526, + 727, + 611, + 500, + 398, + 770, + 636, + 478, + 556, + 562, + 534, + 623, + 593, + 495 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 16, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3361, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 7, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 424, + 856, + 358, + 417, + 449, + 544, + 863, + 732, + 662, + 629, + 714, + 522, + 409, + 911, + 996, + 758, + 552, + 555, + 631, + 631, + 535, + 964 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 14, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3566, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 460, + 736, + 563, + 593, + 545, + 589, + 546, + 499, + 599, + 435, + 618, + 605, + 789, + 558, + 545, + 544, + 641, + 605, + 599, + 589, + 619, + 623, + 549, + 739 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 24, + 11, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3411, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 3, + 0, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 742, + 437, + 494, + 431, + 726, + 542, + 734, + 428, + 1527, + 1468, + 626, + 676, + 1022, + 550, + 635, + 564, + 834, + 687, + 645, + 741 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 27, + 15, + 11, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3264, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 24, + "survivalTicks": 17239, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 2, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 4, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 438, + 363, + 488, + 484, + 505, + 575, + 424, + 451, + 603, + 590, + 479, + 716, + 512, + 566, + 838, + 541, + 647, + 623, + 736, + 736, + 585, + 808, + 780 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 34, + 12, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3403, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 31, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 3, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 465, + 474, + 439, + 352, + 488, + 476, + 511, + 527, + 775, + 670, + 620, + 1027, + 662, + 648, + 1451, + 645, + 1209, + 624, + 1475, + 859 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 37, + 17, + 7, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3417, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13342, + "livesLostByWave": [ + 0, + 3, + 0, + 0, + 0, + 1, + 0, + 1, + 4, + 2, + 0, + 0, + 0, + 1, + 3, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 549, + 510, + 458, + 755, + 620, + 629, + 713, + 712, + 736, + 524, + 563, + 475, + 604, + 756, + 1014, + 1056 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 35, + 20, + 7, + 5, + 4, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2510, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 33, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 3, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 1, + 2, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 440, + 432, + 716, + 583, + 731, + 920, + 711, + 860, + 443, + 443, + 510, + 665, + 535, + 627, + 657, + 641, + 741, + 678, + 740, + 1181, + 647, + 603 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 47, + 16, + 10, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3523, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14287, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 3, + 0, + 3, + 0, + 2, + 4, + 0, + 3, + 0, + 0, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 469, + 481, + 538, + 467, + 416, + 528, + 531, + 514, + 813, + 752, + 756, + 1090, + 1243, + 1563, + 804, + 874 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 29, + 16, + 9, + 7, + 7, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2824, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 26, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 488, + 671, + 486, + 518, + 515, + 494, + 641, + 810, + 521, + 471, + 475, + 461, + 402, + 350, + 377, + 523, + 940, + 719, + 565, + 608, + 737, + 474, + 722, + 376, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3433, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 553, + 547, + 558, + 736, + 592, + 578, + 583, + 490, + 480, + 581, + 530, + 893, + 512, + 389, + 543, + 518, + 915, + 645, + 556, + 935, + 639, + 809 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 26, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3534, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6073, + "livesLostByWave": [ + 0, + 2, + 5, + 3, + 1, + 3, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 474, + 519, + 407, + 471, + 566, + 1020, + 1267 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 28, + 12, + 7, + 4, + 0, + 0 + ], + "totalAlienShots": 1167, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8882, + "livesLostByWave": [ + 0, + 2, + 5, + 0, + 4, + 2, + 1, + 2, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 711, + 500, + 659, + 725, + 734, + 1251, + 1395, + 1064 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 26, + 19, + 9, + 7, + 4, + 1, + 0, + 0 + ], + "totalAlienShots": 1670, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 39, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 3, + 1, + 1, + 1, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 642, + 607, + 578, + 462, + 728, + 567, + 717, + 593, + 710, + 539, + 740, + 497, + 489, + 735, + 645, + 574, + 1459, + 708, + 686, + 1172, + 982 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 27, + 12, + 10, + 5, + 5, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3453, + "totalPlayerDeaths": 16 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 40, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 4, + 3, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 515, + 740, + 733, + 745, + 614, + 510, + 539, + 739, + 546, + 527, + 509, + 583, + 732, + 942, + 490, + 704, + 819, + 934, + 727, + 715, + 639, + 637 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 33, + 15, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3498, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 2, + 3, + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 2, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 601, + 616, + 889, + 516, + 508, + 600, + 587, + 786, + 553, + 954, + 1145, + 395, + 514, + 553, + 829, + 1054, + 821, + 934, + 737, + 507, + 609 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 28, + 9, + 7, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3593, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 42, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 640, + 940, + 608, + 485, + 497, + 552, + 787, + 410, + 601, + 430, + 558, + 572, + 462, + 469, + 571, + 859, + 739, + 712, + 567, + 619, + 641, + 584, + 726 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 68, + 22, + 9, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3581, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 43, + "outcome": "cap", + "finalWave": 26, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 468, + 379, + 458, + 347, + 476, + 414, + 514, + 460, + 700, + 508, + 494, + 437, + 709, + 630, + 604, + 667, + 494, + 502, + 456, + 738, + 731, + 569, + 593, + 1057, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 27, + 11, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3347, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 44, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 652, + 837, + 540, + 834, + 1114, + 496, + 465, + 975, + 694, + 526, + 484, + 394, + 552, + 549, + 563, + 778, + 502, + 659, + 484, + 507, + 498, + 491, + 727 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 73, + 28, + 11, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3337, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 15522, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 0, + 2, + 3, + 2, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 2, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 615, + 441, + 687, + 582, + 503, + 617, + 874, + 451, + 437, + 503, + 544, + 858, + 717, + 695, + 445, + 645, + 910, + 911, + 1014 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 28, + 14, + 8, + 6, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2959, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14521, + "livesLostByWave": [ + 0, + 4, + 2, + 0, + 2, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 3, + 0, + 0, + 0, + 2, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 505, + 574, + 903, + 486, + 883, + 1002, + 736, + 661, + 675, + 738, + 465, + 625, + 579, + 643, + 680, + 738, + 872 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 71, + 38, + 10, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2877, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 27, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 652, + 580, + 479, + 392, + 475, + 679, + 928, + 797, + 505, + 563, + 499, + 549, + 430, + 501, + 387, + 486, + 444, + 450, + 511, + 508, + 880, + 512, + 621, + 659, + 434 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 33, + 16, + 9, + 9, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3464, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 16994, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 0, + 2, + 0, + 1, + 4, + 0, + 0, + 1, + 1, + 0, + 3, + 1, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 650, + 465, + 495, + 586, + 483, + 550, + 493, + 539, + 499, + 524, + 735, + 994, + 1104, + 948, + 602, + 1162, + 1079, + 880, + 1266 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 41, + 19, + 7, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3280, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 49, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 4, + 1, + 0, + 4, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 652, + 1012, + 738, + 623, + 563, + 400, + 481, + 424, + 433, + 438, + 455, + 639, + 559, + 914, + 595, + 476, + 538, + 822, + 656, + 728, + 441, + 646, + 597, + 943 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 14, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3398, + "totalPlayerDeaths": 16 + }, + { + "configName": "ship-v2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9997, + "livesLostByWave": [ + 0, + 1, + 3, + 5, + 0, + 1, + 0, + 0, + 2, + 4, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 532, + 709, + 516, + 445, + 469, + 575, + 549, + 929, + 1025, + 569, + 1290 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 21, + 12, + 5, + 3, + 3, + 2, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 2032, + "totalPlayerDeaths": 20 + } + ] +} \ No newline at end of file From 773c6ff73e64f599f2287a797cf1b8082e47d853 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 15:10:51 +0000 Subject: [PATCH 10/11] Register ship-v2.x configs as sim builtins; fix builtin-count test The ship-v2 commit added a fifth builtin without updating the "exactly four built-in configs" assertion, and ship-v2.1/v2.2 were only loadable by file path. All seven shipped configs are now registered and the test validates each against validateDifficultyConfig. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- worker/src/sim/cli.ts | 4 ++++ worker/src/sim/sim.test.ts | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/worker/src/sim/cli.ts b/worker/src/sim/cli.ts index 3ea5288..5ad4b13 100644 --- a/worker/src/sim/cli.ts +++ b/worker/src/sim/cli.ts @@ -21,6 +21,8 @@ import { DEFAULT_TICK_CAP } from './runner' import { isBotPolicyName, type BotPolicyName } from './bot' import shipV1 from './configs/ship-v1.json' import shipV2 from './configs/ship-v2.json' +import shipV21 from './configs/ship-v2.1.json' +import shipV22 from './configs/ship-v2.2.json' import easierMulti from './configs/easier-multi.json' import flat from './configs/flat.json' import classicRamp from './configs/classic-ramp.json' @@ -38,6 +40,8 @@ declare const process: { argv: string[]; exit(code?: number): never } export const BUILTIN_CONFIGS: Record = { 'ship-v1': shipV1, 'ship-v2': shipV2, + 'ship-v2.1': shipV21, + 'ship-v2.2': shipV22, 'easier-multi': easierMulti, flat, 'classic-ramp': classicRamp, diff --git a/worker/src/sim/sim.test.ts b/worker/src/sim/sim.test.ts index 50020e4..282d3cd 100644 --- a/worker/src/sim/sim.test.ts +++ b/worker/src/sim/sim.test.ts @@ -21,9 +21,17 @@ function median(values: number[]): number { // ─── Built-in configs ───────────────────────────────────────────────────────── describe('sim built-in configs', () => { - const names = ['ship-v1', 'easier-multi', 'flat', 'classic-ramp'] - - it('ships exactly four built-in configs', () => { + const names = [ + 'ship-v1', + 'ship-v2', + 'ship-v2.1', + 'ship-v2.2', + 'easier-multi', + 'flat', + 'classic-ramp', + ] + + it('registers every shipped config as a built-in', () => { expect(Object.keys(BUILTIN_CONFIGS).sort()).toEqual([...names].sort()) }) From 1cdcb9b92a4c474973cc8627b189db76dd3df78f Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 15:22:00 +0000 Subject: [PATCH 11/11] Add ship-v2.1 vs v2.2 ramp experiment dataset to report samples Drop both sample files onto tools/difficulty-report.html to compare ship-v1, ship-v2, ship-v2.1 and ship-v2.2 across all views. Verdict from this grid: ship-v2.1 (+2% speed/+3% shoot per wave, cap wave 10) keeps solo within the G1 band (median wave 14 vs 15) while cutting 3p/4p cap-outs by half to two-thirds; ship-v2.2 over-corrects and drags solo down 33%. https://claude.ai/code/session_01N2xMGpx5Vq9TjHwxZ37iNv --- .../ship-v2.1-vs-v2.2.results.json | 35065 ++++++++++++++++ 1 file changed, 35065 insertions(+) create mode 100644 tools/sample-data/ship-v2.1-vs-v2.2.results.json diff --git a/tools/sample-data/ship-v2.1-vs-v2.2.results.json b/tools/sample-data/ship-v2.1-vs-v2.2.results.json new file mode 100644 index 0000000..049f50c --- /dev/null +++ b/tools/sample-data/ship-v2.1-vs-v2.2.results.json @@ -0,0 +1,35065 @@ +{ + "aggregates": [ + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 836.5, + "median": 1046, + "p75": 1410.5 + }, + "defeatBeforeWave2Rate": 0.98, + "meanLivesLostWave1": 2.98, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 9, + "median": 14, + "p75": 18 + }, + "survivalTicks": { + "p25": 7654.5, + "median": 11915, + "p75": 16066 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.16, + "outcomes": { + "defeat": 40, + "cap": 10 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 2 + }, + "survivalTicks": { + "p25": 1192, + "median": 1391, + "p75": 1602.5 + }, + "defeatBeforeWave2Rate": 0.72, + "meanLivesLostWave1": 8.94, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 12.5, + "median": 17, + "p75": 19 + }, + "survivalTicks": { + "p25": 11162.75, + "median": 16104.5, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.42, + "outcomes": { + "defeat": 30, + "cap": 20 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1163.5, + "median": 1306.5, + "p75": 1517.25 + }, + "defeatBeforeWave2Rate": 0.28, + "meanLivesLostWave1": 11.3, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 15, + "median": 17, + "p75": 21.75 + }, + "survivalTicks": { + "p25": 12266, + "median": 15234, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.5, + "outcomes": { + "defeat": 35, + "cap": 15 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1054.5, + "median": 1218, + "p75": 1299.75 + }, + "defeatBeforeWave2Rate": 0.32, + "meanLivesLostWave1": 15.08, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 14.25, + "median": 18.5, + "p75": 21.75 + }, + "survivalTicks": { + "p25": 12084, + "median": 15735.5, + "p75": 18000 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 1.12, + "outcomes": { + "defeat": 30, + "cap": 20 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 1 + }, + "survivalTicks": { + "p25": 836.5, + "median": 1046, + "p75": 1410.5 + }, + "defeatBeforeWave2Rate": 0.98, + "meanLivesLostWave1": 2.98, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 7, + "median": 10, + "p75": 12.75 + }, + "survivalTicks": { + "p25": 5989.5, + "median": 8633.5, + "p75": 11628.25 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.16, + "outcomes": { + "defeat": 46, + "cap": 4 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 1, + "p75": 2 + }, + "survivalTicks": { + "p25": 1192, + "median": 1378.5, + "p75": 1582.5 + }, + "defeatBeforeWave2Rate": 0.72, + "meanLivesLostWave1": 8.94, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 10, + "median": 13, + "p75": 15.75 + }, + "survivalTicks": { + "p25": 8536.25, + "median": 12101.5, + "p75": 14740.75 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.42, + "outcomes": { + "defeat": 44, + "cap": 6 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1163.5, + "median": 1288, + "p75": 1513.5 + }, + "defeatBeforeWave2Rate": 0.28, + "meanLivesLostWave1": 11.3, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 12, + "median": 16, + "p75": 19.75 + }, + "survivalTicks": { + "p25": 10831, + "median": 13539.5, + "p75": 16480.5 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 0.5, + "outcomes": { + "defeat": 41, + "cap": 9 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "games": 50, + "finalWave": { + "p25": 1, + "median": 2, + "p75": 2 + }, + "survivalTicks": { + "p25": 1061, + "median": 1171.5, + "p75": 1335.75 + }, + "defeatBeforeWave2Rate": 0.32, + "meanLivesLostWave1": 15.08, + "outcomes": { + "defeat": 50, + "cap": 0 + } + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "games": 50, + "finalWave": { + "p25": 14, + "median": 16, + "p75": 19 + }, + "survivalTicks": { + "p25": 11103.75, + "median": 14166.5, + "p75": 16166.75 + }, + "defeatBeforeWave2Rate": 0, + "meanLivesLostWave1": 1.12, + "outcomes": { + "defeat": 42, + "cap": 8 + } + } + ], + "results": [ + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1426, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1491, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 838, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 889, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1373, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 813, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1575, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 793, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 95, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1648, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 911, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1667, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 134, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 677, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1049, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 145, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1035, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 133, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 939, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 118, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1459, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1836, + "livesLostByWave": [ + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 1524 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 23 + ], + "totalAlienShots": 203, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 910, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 140, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1423, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 593, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 78, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 797, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 836, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 113, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 883, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 111, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1124, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 142, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 765, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1091, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 679, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 116, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 733, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 96, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1843, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 493, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1367, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1157, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1534, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1554, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 943, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 93, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 947, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 137, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 757, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1219, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 107, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 548, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 71, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 851, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1499, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 164, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7957, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 827, + 797, + 833, + 832, + 736, + 695, + 761, + 772 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 45, + 25, + 18, + 13, + 11, + 9, + 5 + ], + "totalAlienShots": 793, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 2, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 974, + 790, + 716, + 675, + 844, + 668, + 711, + 828, + 820, + 953, + 740, + 791, + 740, + 732, + 707, + 795, + 732, + 799 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 30, + 14, + 8, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1870, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1 + ], + "waveClearTicks": [ + 0, + 818, + 772, + 710, + 646, + 756, + 734, + 694, + 801, + 756, + 722, + 793, + 662, + 780, + 793, + 878, + 871, + 726, + 776, + 784, + 795 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 37, + 23, + 16, + 6, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1913, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 870, + 735, + 716, + 688, + 710, + 742, + 669, + 763, + 731, + 845, + 778, + 778, + 798, + 823, + 738, + 793, + 718, + 784, + 763, + 825 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 37, + 21, + 10, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1844, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 772, + 777, + 702, + 755, + 781, + 789, + 721, + 666, + 745, + 779, + 725, + 835, + 751, + 974, + 769, + 747, + 670, + 754, + 792 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 47, + 26, + 12, + 7, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1804, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 767, + 717, + 634, + 680, + 779, + 758, + 806, + 839, + 853, + 813, + 732, + 720, + 846, + 851, + 795, + 795, + 720, + 761 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 42, + 25, + 14, + 9, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1816, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4201, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 839, + 712, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 34, + 22, + 12 + ], + "totalAlienShots": 398, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10459, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 1037, + 785, + 839, + 760, + 778, + 708, + 667, + 706, + 814, + 816, + 818 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 43, + 30, + 15, + 7, + 6, + 4, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1052, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 814, + 785, + 740, + 713, + 795, + 743, + 838, + 754, + 756, + 762, + 833, + 722, + 751, + 699, + 738, + 790, + 772, + 737 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 40, + 17, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1840, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 813, + 851, + 819, + 779, + 763, + 665, + 731, + 800, + 796, + 779, + 825, + 646, + 748, + 840, + 752, + 808, + 856, + 811 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 79, + 50, + 25, + 8, + 2, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1914, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5944, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 907, + 772, + 765, + 843, + 843 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 34, + 21, + 8, + 5, + 1 + ], + "totalAlienShots": 569, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9614, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 746, + 746, + 674, + 708, + 795, + 760, + 682, + 771, + 772 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 47, + 23, + 14, + 7, + 3, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 924, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 5269, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 787, + 803, + 760, + 754, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 38, + 23, + 12, + 6 + ], + "totalAlienShots": 495, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15907, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 865, + 779, + 762, + 792, + 982, + 807, + 784, + 781, + 797, + 855, + 763, + 781, + 796, + 910, + 800, + 792 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 59, + 37, + 26, + 18, + 13, + 8, + 5, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1637, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13768, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 876, + 743, + 765, + 703, + 696, + 731, + 676, + 692, + 707, + 815, + 819, + 865, + 673, + 719, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 48, + 28, + 20, + 15, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1406, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15091, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 774, + 932, + 818, + 703, + 732, + 792, + 842, + 796, + 793, + 840, + 912, + 856, + 722, + 749, + 797, + 750 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 39, + 21, + 13, + 8, + 5, + 4, + 4, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1480, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11993, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 917, + 743, + 764, + 693, + 665, + 761, + 794, + 810, + 797, + 718, + 711, + 697, + 814 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 29, + 16, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1222, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7839, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 813, + 759, + 668, + 768, + 725, + 810, + 733, + 752 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 40, + 22, + 7, + 3, + 0, + 0, + 0 + ], + "totalAlienShots": 766, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 19, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 879, + 776, + 718, + 697, + 760, + 739, + 684, + 713, + 764, + 738, + 825, + 725, + 849, + 752, + 790, + 739, + 737, + 792, + 796, + 795 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 45, + 29, + 15, + 10, + 8, + 7, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1844, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 5031, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 812, + 666, + 600, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 24, + 10, + 2, + 1 + ], + "totalAlienShots": 486, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11767, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 845, + 714, + 758, + 672, + 680, + 698, + 811, + 773, + 690, + 790, + 832, + 710, + 771 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 56, + 16, + 7, + 4, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 22, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 768, + 824, + 749, + 728, + 732, + 816, + 690, + 733, + 780, + 773, + 820, + 824, + 796, + 795, + 809, + 831, + 790, + 796, + 670 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 38, + 16, + 9, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1874, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13837, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 804, + 795, + 684, + 630, + 625, + 683, + 766, + 733, + 757, + 731, + 770, + 1098, + 1046, + 837, + 693 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 62, + 39, + 22, + 8, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1370, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 5024, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 873, + 750, + 940, + 842, + 729 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 42, + 20, + 12, + 8 + ], + "totalAlienShots": 494, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15264, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 764, + 740, + 741, + 783, + 681, + 681, + 847, + 825, + 767, + 838, + 749, + 811, + 763, + 788, + 864 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 37, + 28, + 17, + 7, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1555, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7593, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 786, + 832, + 721, + 724, + 751, + 697, + 674, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 35, + 19, + 6, + 4, + 3, + 0, + 0 + ], + "totalAlienShots": 741, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15323, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 835, + 791, + 730, + 855, + 808, + 713, + 824, + 786, + 811, + 911, + 765, + 723, + 793, + 794, + 770, + 824 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 40, + 21, + 12, + 7, + 4, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1644, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1756, + "livesLostByWave": [ + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 859 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72 + ], + "totalAlienShots": 160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 17513, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 753, + 691, + 736, + 802, + 746, + 776, + 790, + 882, + 759, + 704, + 766, + 836, + 843, + 785, + 836, + 843, + 835 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 38, + 20, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1793, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9789, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 822, + 741, + 954, + 800, + 763, + 725, + 760, + 654, + 802 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 45, + 30, + 12, + 4, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 951, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14408, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 799, + 983, + 865, + 738, + 782, + 773, + 860, + 811, + 825, + 886, + 825, + 824, + 676, + 670 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 41, + 15, + 10, + 7, + 5, + 4, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1470, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11224, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 840, + 855, + 740, + 826, + 764, + 759, + 644, + 659, + 684, + 756, + 795, + 840 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 44, + 27, + 12, + 7, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1115, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11259, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 869, + 773, + 630, + 678, + 737, + 681, + 746, + 715, + 749, + 790, + 766, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 45, + 25, + 11, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1111, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 9009, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 814, + 808, + 772, + 774, + 853, + 766, + 750, + 806 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 42, + 30, + 20, + 12, + 5, + 0, + 0, + 0 + ], + "totalAlienShots": 868, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13261, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 711, + 859, + 670, + 717, + 685, + 697, + 711, + 782, + 769, + 836, + 722, + 764, + 786, + 809 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 77, + 30, + 12, + 6, + 5, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1354, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 858, + 717, + 698, + 677, + 848, + 690, + 752, + 759, + 749, + 765, + 794, + 787, + 807, + 823, + 747, + 731, + 733, + 804, + 802, + 802 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 44, + 28, + 18, + 9, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1880, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15632, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 814, + 751, + 681, + 715, + 692, + 782, + 815, + 742, + 845, + 742, + 763, + 1008, + 770, + 676, + 745, + 784 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 43, + 25, + 15, + 7, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1626, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 4, + "survivalTicks": 2955, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 929, + 680, + 765 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 40, + 16 + ], + "totalAlienShots": 283, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7064, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 891, + 814, + 783, + 723, + 796, + 731, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 39, + 27, + 21, + 11, + 6, + 3 + ], + "totalAlienShots": 748, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4019, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 1073, + 834, + 687, + 716 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 52, + 20, + 10, + 5 + ], + "totalAlienShots": 366, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7914, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 773, + 789, + 984, + 756, + 704, + 705, + 776 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 82, + 51, + 32, + 20, + 14, + 12, + 8, + 5 + ], + "totalAlienShots": 748, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 16119, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 795, + 777, + 827, + 814, + 660, + 764, + 790, + 840, + 733, + 873, + 661, + 792, + 743, + 803, + 810, + 750 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 41, + 22, + 13, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1739, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14841, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 819, + 819, + 737, + 712, + 747, + 757, + 777, + 766, + 732, + 741, + 763, + 752, + 707, + 866, + 858, + 759 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 30, + 18, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1526, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4247, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 849, + 741, + 692 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 74, + 40, + 25, + 15 + ], + "totalAlienShots": 408, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12311, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 925, + 667, + 699, + 653, + 659, + 684, + 661, + 797, + 838, + 809, + 746, + 868, + 801 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 57, + 19, + 10, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1274, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17473, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 838, + 755, + 675, + 695, + 746, + 682, + 721, + 848, + 699, + 745, + 782, + 744, + 726, + 752, + 704, + 783, + 823, + 810, + 784 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 37, + 14, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1873, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11764, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 822, + 770, + 805, + 832, + 841, + 770, + 709, + 779, + 766, + 927, + 797 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 80, + 45, + 26, + 20, + 17, + 9, + 5, + 4, + 4, + 2, + 1, + 0 + ], + "totalAlienShots": 1175, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11837, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 769, + 832, + 742, + 793, + 793, + 727, + 935, + 843, + 1005, + 839, + 661 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 41, + 26, + 17, + 10, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1214, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6508, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 839, + 803, + 693, + 729, + 729, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 38, + 19, + 12, + 7, + 4, + 3 + ], + "totalAlienShots": 636, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 1, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5849, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 857, + 786, + 747, + 775, + 682, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 76, + 36, + 19, + 10, + 5, + 1 + ], + "totalAlienShots": 585, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1457, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 156, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1266, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 168, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1281, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2219, + "livesLostByWave": [ + 0, + 3, + 4, + 3 + ], + "waveClearTicks": [ + 0, + 854, + 815 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 32, + 6 + ], + "totalAlienShots": 302, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 993, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1589, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 174, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1471, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1253, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 181, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1243, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 162, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1185, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1779, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1315 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1975, + "livesLostByWave": [ + 0, + 7, + 3 + ], + "waveClearTicks": [ + 0, + 1214 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 244, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1633, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1189 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1569, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 858 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 241, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1839, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1141 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 248, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 827, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2444, + "livesLostByWave": [ + 0, + 4, + 5, + 1 + ], + "waveClearTicks": [ + 0, + 997, + 1049 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19, + 1 + ], + "totalAlienShots": 317, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1279, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1487, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 150, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2093, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52 + ], + "totalAlienShots": 295, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 907, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 159, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1327, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1429, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 210, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1507, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1563, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1133, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 130, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1489, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 154, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1461, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 179, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1653, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1014 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 249, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1687, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 191, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1961, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1655 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 183, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1143, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 205, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1107, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 897, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2178, + "livesLostByWave": [ + 0, + 4, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 962, + 600 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27, + 5 + ], + "totalAlienShots": 310, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1166, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1607, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1213 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1727, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 266, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1237, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 152, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1239, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1479, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1273, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1207, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 141, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1452, + "livesLostByWave": [ + 0, + 5, + 5 + ], + "waveClearTicks": [ + 0, + 964 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 195, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14913, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 2, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 599, + 729, + 700, + 724, + 694, + 960, + 574, + 693, + 723, + 781, + 1055, + 1031, + 948, + 886, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 45, + 15, + 7, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2281, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14744, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 1, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 534, + 639, + 639, + 618, + 720, + 584, + 844, + 686, + 679, + 672, + 1230, + 986, + 1029, + 1085, + 897 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 107, + 46, + 21, + 13, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2180, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 564, + 659, + 652, + 831, + 746, + 704, + 1003, + 753, + 811, + 548, + 785, + 879, + 1458, + 876, + 1356, + 1066, + 762 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 46, + 20, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2662, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 580, + 671, + 621, + 727, + 848, + 869, + 763, + 783, + 1149, + 1012, + 859, + 988, + 923, + 1026, + 696, + 1276, + 889 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 44, + 30, + 15, + 9, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2685, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 520, + 628, + 568, + 607, + 570, + 645, + 662, + 676, + 981, + 648, + 810, + 724, + 782, + 861, + 808, + 806, + 514, + 837, + 730, + 795 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 40, + 18, + 12, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2738, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 529, + 549, + 627, + 685, + 691, + 623, + 932, + 672, + 870, + 783, + 1077, + 647, + 620, + 1136, + 559, + 814, + 1119, + 928, + 906 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 60, + 29, + 11, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2752, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 7, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 760, + 655, + 620, + 579, + 632, + 943, + 663, + 878, + 1453, + 776, + 1125, + 1090, + 1005, + 925, + 864, + 1350 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 39, + 18, + 12, + 7, + 4, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2588, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9158, + "livesLostByWave": [ + 0, + 0, + 1, + 3, + 0, + 0, + 1, + 0, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 478, + 582, + 633, + 632, + 658, + 614, + 1073, + 817, + 1289, + 880 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 102, + 53, + 19, + 12, + 8, + 4, + 1, + 1, + 0, + 0 + ], + "totalAlienShots": 1257, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 9, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 567, + 579, + 655, + 623, + 663, + 763, + 666, + 957, + 861, + 931, + 841, + 802, + 1120, + 988, + 919, + 932, + 1175, + 1111 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 52, + 29, + 13, + 6, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2760, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14322, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 3, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 690, + 632, + 631, + 696, + 645, + 551, + 895, + 855, + 1492, + 852, + 1076, + 1064, + 885 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 111, + 41, + 22, + 11, + 4, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2120, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10288, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 2, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 612, + 632, + 682, + 854, + 800, + 711, + 650, + 1221, + 704, + 1037 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 41, + 22, + 12, + 9, + 6, + 4, + 2, + 2, + 0 + ], + "totalAlienShots": 1495, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10854, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 2, + 3, + 0, + 0, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 714, + 697, + 775, + 630, + 1024, + 1083, + 870, + 1107, + 935, + 694 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 33, + 15, + 8, + 5, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1553, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7818, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 0, + 0, + 3, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 631, + 566, + 670, + 598, + 753, + 552, + 1183, + 1304 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 46, + 25, + 13, + 8, + 4, + 0, + 0 + ], + "totalAlienShots": 993, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5514, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 6, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 566, + 644, + 658, + 728, + 1049, + 928 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 48, + 25, + 13, + 6, + 3 + ], + "totalAlienShots": 715, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16846, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 529, + 627, + 573, + 609, + 619, + 474, + 588, + 955, + 879, + 870, + 635, + 648, + 756, + 725, + 1178, + 951, + 853, + 918 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 45, + 20, + 13, + 7, + 7, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2446, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10268, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 2, + 1, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 722, + 681, + 577, + 753, + 939, + 640, + 822, + 1275, + 1075 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 104, + 54, + 27, + 13, + 7, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1435, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15791, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 537, + 588, + 815, + 619, + 667, + 568, + 712, + 849, + 957, + 755, + 870, + 1258, + 793, + 1136, + 1070, + 943 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 98, + 53, + 23, + 10, + 4, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2395, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7014, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 3, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 538, + 583, + 706, + 1206, + 954, + 1438 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 54, + 35, + 19, + 7, + 0, + 0 + ], + "totalAlienShots": 873, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16069, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 746, + 774, + 743, + 651, + 627, + 657, + 1285, + 885, + 827, + 1165, + 902, + 912, + 1148, + 670, + 1228 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 49, + 21, + 11, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2342, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16999, + "livesLostByWave": [ + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 705, + 657, + 645, + 585, + 596, + 707, + 1007, + 868, + 1537, + 1226, + 1062, + 852, + 848, + 1399, + 825 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 41, + 27, + 21, + 19, + 12, + 8, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2492, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12089, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 3, + 0, + 0, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 640, + 550, + 578, + 581, + 606, + 563, + 627, + 668, + 838, + 674, + 1272, + 1002, + 1522 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 49, + 25, + 18, + 12, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1601, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5704, + "livesLostByWave": [ + 0, + 3, + 1, + 0, + 3, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 569, + 688, + 623, + 1031, + 873, + 975 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 101, + 42, + 16, + 7, + 2, + 2 + ], + "totalAlienShots": 763, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15183, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 535, + 887, + 675, + 583, + 578, + 587, + 585, + 686, + 868, + 753, + 881, + 1019, + 751, + 1065, + 1028, + 868 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 40, + 16, + 11, + 8, + 6, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2188, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 3, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 581, + 526, + 665, + 617, + 547, + 653, + 678, + 980, + 1224, + 970, + 900, + 988, + 1170, + 866, + 1107, + 818, + 1070, + 699 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 49, + 28, + 13, + 10, + 8, + 4, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2733, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 704, + 685, + 643, + 628, + 730, + 1003, + 1048, + 629, + 1019, + 701, + 636, + 595, + 845, + 805, + 670, + 875, + 869, + 686, + 654 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 42, + 13, + 7, + 5, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2673, + "totalPlayerDeaths": 4 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 604, + 513, + 528, + 633, + 605, + 662, + 701, + 819, + 522, + 1156, + 845, + 647, + 636, + 707, + 1115, + 816, + 780, + 827, + 812 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 43, + 21, + 10, + 6, + 4, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2627, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16084, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 2, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 591, + 637, + 606, + 612, + 1050, + 758, + 871, + 1405, + 680, + 884, + 851, + 948, + 1020, + 1341, + 950 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 53, + 29, + 17, + 9, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2332, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 601, + 610, + 722, + 921, + 687, + 658, + 572, + 773, + 871, + 721, + 645, + 712, + 763, + 718, + 759, + 1178, + 959, + 707, + 881 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 42, + 21, + 11, + 9, + 8, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2676, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 524, + 554, + 615, + 629, + 646, + 593, + 629, + 674, + 1020, + 1004, + 748, + 669, + 864, + 576, + 1210, + 576, + 796, + 938, + 1405 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 109, + 61, + 31, + 13, + 11, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2751, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 15066, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 834, + 683, + 690, + 802, + 604, + 459, + 971, + 781, + 809, + 1139, + 1098, + 1009, + 1157, + 1080 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 35, + 14, + 9, + 8, + 6, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2281, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14032, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 3, + 2, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 720, + 579, + 671, + 760, + 946, + 915, + 1114, + 916, + 791, + 851, + 1170, + 949, + 1130 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 38, + 24, + 12, + 10, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2058, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 32, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 507, + 557, + 640, + 709, + 554, + 541, + 680, + 687, + 934, + 812, + 739, + 999, + 778, + 927, + 951, + 1070, + 1226, + 874, + 939 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 70, + 31, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2774, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10079, + "livesLostByWave": [ + 0, + 3, + 2, + 1, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 642, + 686, + 625, + 619, + 735, + 720, + 1399, + 875, + 1080, + 1029 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 48, + 26, + 20, + 15, + 11, + 3, + 0, + 0, + 0 + ], + "totalAlienShots": 1484, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 34, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 645, + 623, + 628, + 728, + 630, + 598, + 648, + 939, + 530, + 574, + 955, + 853, + 733, + 971, + 1029, + 854, + 1145, + 1167, + 773 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 31, + 20, + 9, + 6, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2713, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 554, + 657, + 651, + 675, + 671, + 822, + 634, + 693, + 871, + 638, + 615, + 787, + 927, + 735, + 1550, + 742, + 647, + 716, + 865 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 40, + 31, + 23, + 11, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2586, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 579, + 647, + 667, + 745, + 677, + 737, + 863, + 862, + 681, + 603, + 1100, + 833, + 828, + 1095, + 1019, + 1126, + 1046 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 35, + 19, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2714, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16125, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 2, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 563, + 615, + 587, + 638, + 671, + 658, + 677, + 1007, + 950, + 883, + 1025, + 1031, + 1106, + 1329, + 819, + 1140 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 52, + 32, + 22, + 12, + 9, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2315, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12749, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 1, + 0, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 642, + 641, + 724, + 665, + 571, + 669, + 763, + 661, + 1158, + 1311, + 1225, + 1185 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 42, + 31, + 19, + 14, + 10, + 10, + 8, + 6, + 5, + 1, + 0, + 0 + ], + "totalAlienShots": 1819, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 39, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 588, + 695, + 663, + 613, + 697, + 608, + 1078, + 1037, + 708, + 1103, + 825, + 735, + 605, + 848, + 639, + 671, + 922, + 1211, + 1089 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 43, + 18, + 14, + 10, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2700, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13833, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 2, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 488, + 636, + 590, + 689, + 732, + 1041, + 1007, + 683, + 1099, + 1124, + 948, + 799, + 1108, + 876 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 48, + 27, + 11, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1994, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 620, + 622, + 678, + 579, + 638, + 671, + 590, + 758, + 625, + 681, + 979, + 957, + 1478, + 1237, + 1074, + 869, + 1144 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 60, + 39, + 19, + 15, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2672, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16312, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 580, + 587, + 617, + 684, + 726, + 682, + 944, + 1467, + 725, + 711, + 817, + 843, + 873, + 1135, + 1112, + 1366 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 46, + 29, + 16, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2365, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10449, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 4, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 569, + 650, + 619, + 729, + 646, + 869, + 1122, + 674, + 1045, + 1051 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 42, + 30, + 14, + 7, + 5, + 2, + 2, + 2, + 1, + 0 + ], + "totalAlienShots": 1473, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10665, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 2, + 0, + 0, + 1, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 475, + 621, + 636, + 671, + 766, + 677, + 645, + 637, + 1050, + 1182, + 1074 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 61, + 31, + 18, + 13, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1555, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 687, + 644, + 666, + 589, + 648, + 1005, + 663, + 703, + 812, + 748, + 864, + 842, + 883, + 1028, + 704, + 1092, + 775, + 812 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 40, + 15, + 7, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2714, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8296, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 2, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 646, + 671, + 543, + 650, + 698, + 1127, + 777, + 1089 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 46, + 30, + 17, + 14, + 10, + 2, + 0, + 0 + ], + "totalAlienShots": 1171, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 592, + 609, + 619, + 571, + 1025, + 820, + 859, + 779, + 860, + 711, + 603, + 787, + 817, + 843, + 943, + 705, + 764, + 1054 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 59, + 24, + 16, + 10, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2602, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 17356, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 552, + 677, + 668, + 593, + 580, + 1072, + 1408, + 1159, + 907, + 987, + 1211, + 717, + 1221, + 1175, + 1066 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 57, + 27, + 11, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2585, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 49, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 643, + 586, + 672, + 565, + 738, + 732, + 595, + 649, + 1149, + 737, + 692, + 703, + 959, + 803, + 1226, + 781, + 1069, + 1126 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 45, + 24, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2666, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 2, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9364, + "livesLostByWave": [ + 0, + 1, + 2, + 2, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 582, + 690, + 946, + 809, + 694, + 580, + 822, + 579, + 847, + 1203 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 57, + 23, + 17, + 14, + 9, + 4, + 3, + 1, + 0 + ], + "totalAlienShots": 1292, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1515, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 870 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16 + ], + "totalAlienShots": 270, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1662, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 853 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 337, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1664, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 791 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 253, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1001, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1549, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 942 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 298, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 903, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 172, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1324, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1782, + "livesLostByWave": [ + 0, + 5, + 10 + ], + "waveClearTicks": [ + 0, + 704 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 48 + ], + "totalAlienShots": 271, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1823, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 772 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 287, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1443, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 707 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 6 + ], + "totalAlienShots": 313, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2054, + "livesLostByWave": [ + 0, + 8, + 6, + 1 + ], + "waveClearTicks": [ + 0, + 938, + 701 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9, + 2 + ], + "totalAlienShots": 275, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1212, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 591 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 40 + ], + "totalAlienShots": 221, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1209, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 182, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1336, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 781 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 227, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1332, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1437, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 847 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 278, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1674, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16 + ], + "totalAlienShots": 315, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1120, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 138, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1532, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 36 + ], + "totalAlienShots": 332, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 46 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1289, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 933 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1264, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 589 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 287, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1115, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1234, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 757 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 238, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1612, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 328, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1232, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 925 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1509, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 1231 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1165, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1007, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1493, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 270, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 770 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 248, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 831, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 139, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1789, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 1154 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 302, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 908, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1401, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 743 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 277, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 959, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 188, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 246, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1173, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1200, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 248, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1568, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 709 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 278, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1342, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 1010 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 232, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1102, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1518, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 708 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 291, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1162, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 828 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1163, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 211, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2298, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 1185 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 447, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1438, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 782 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 263, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1269, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1277, + "livesLostByWave": [ + 0, + 4, + 11 + ], + "waveClearTicks": [ + 0, + 571 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 237, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 1, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 729, + 774, + 690, + 786, + 674, + 611, + 736, + 403, + 655, + 558, + 733, + 540, + 566, + 470, + 495, + 592, + 738, + 868, + 851, + 530, + 829, + 674 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 28, + 17, + 11, + 6, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3279, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 2, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 664, + 1027, + 486, + 499, + 605, + 625, + 591, + 873, + 520, + 483, + 494, + 526, + 551, + 545, + 569, + 593, + 735, + 734, + 646, + 738, + 712, + 1198 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 24, + 12, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3454, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 590, + 594, + 437, + 703, + 480, + 746, + 562, + 559, + 636, + 857, + 545, + 541, + 655, + 1113, + 947, + 568, + 981, + 709, + 1011, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 43, + 24, + 20, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3507, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 8689, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 4, + 0, + 2, + 2, + 2, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 516, + 512, + 548, + 578, + 538, + 710, + 1054, + 853, + 1105 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 40, + 18, + 10, + 5, + 1, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1638, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 663, + 727, + 958, + 993, + 700, + 589, + 576, + 946, + 852, + 480, + 465, + 429, + 494, + 560, + 540, + 479, + 595, + 563, + 674, + 656, + 724, + 689, + 581 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 28, + 12, + 6, + 4, + 4, + 4, + 4, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3301, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 21, + "survivalTicks": 17765, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 1, + 2, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 686, + 585, + 542, + 496, + 621, + 737, + 613, + 564, + 612, + 647, + 1131, + 523, + 492, + 707, + 942, + 460, + 810, + 687, + 1194, + 1380 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 39, + 15, + 9, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3210, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12446, + "livesLostByWave": [ + 0, + 0, + 1, + 3, + 2, + 3, + 2, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 626, + 533, + 514, + 656, + 1057, + 997, + 1054, + 787, + 1097, + 742, + 1262 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 38, + 23, + 12, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2445, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13202, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 3, + 0, + 1, + 5, + 0, + 1, + 1, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 629, + 626, + 612, + 626, + 543, + 528, + 535, + 724, + 727, + 1182, + 787, + 854, + 1466, + 1284 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 28, + 13, + 9, + 8, + 7, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2325, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10209, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 1, + 1, + 3, + 2, + 0, + 2, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 645, + 576, + 526, + 550, + 781, + 940, + 866, + 758, + 945, + 705, + 1115 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 38, + 24, + 18, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1843, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9816, + "livesLostByWave": [ + 0, + 0, + 5, + 0, + 2, + 0, + 2, + 0, + 0, + 1, + 3, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 429, + 722, + 589, + 497, + 713, + 653, + 1005, + 533, + 897, + 795, + 1073 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 22, + 11, + 7, + 1, + 1, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1907, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15873, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 3, + 1, + 0, + 2, + 1, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 631, + 571, + 623, + 621, + 619, + 580, + 723, + 483, + 488, + 465, + 936, + 610, + 782, + 683, + 620, + 1560, + 1029, + 1035 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 28, + 12, + 9, + 6, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2827, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 8868, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 4, + 1, + 0, + 1, + 3, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 539, + 547, + 873, + 775, + 596, + 555, + 719, + 777, + 1330 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 37, + 27, + 8, + 3, + 3, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 1425, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 13, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 667, + 591, + 624, + 605, + 711, + 726, + 840, + 682, + 410, + 912, + 544, + 551, + 519, + 736, + 734, + 542, + 485, + 693, + 562, + 1080, + 1008 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 39, + 19, + 17, + 10, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3124, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 2, + 2, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 491, + 540, + 918, + 896, + 579, + 695, + 435, + 928, + 416, + 470, + 452, + 638, + 961, + 589, + 1151, + 955, + 1048, + 759, + 782, + 1142 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 36, + 13, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3361, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15264, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 2, + 0, + 0, + 4, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 542, + 679, + 585, + 732, + 631, + 533, + 506, + 507, + 564, + 647, + 673, + 818, + 667, + 819, + 779, + 929, + 868, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 29, + 16, + 7, + 7, + 5, + 4, + 4, + 3, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3038, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 454, + 904, + 521, + 482, + 742, + 510, + 427, + 520, + 814, + 538, + 504, + 607, + 702, + 568, + 1097, + 533, + 466, + 723, + 734, + 627, + 1064, + 519 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 23, + 13, + 9, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3358, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 17, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 4, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 630, + 539, + 525, + 499, + 454, + 644, + 812, + 433, + 624, + 531, + 535, + 478, + 407, + 588, + 547, + 968, + 1181, + 638, + 745, + 1076, + 712, + 1058 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 32, + 22, + 16, + 11, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3509, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 2, + 0, + 2, + 1, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 435, + 570, + 569, + 656, + 544, + 414, + 520, + 595, + 855, + 583, + 737, + 736, + 554, + 736, + 965, + 645, + 777, + 918, + 680, + 728, + 814, + 700 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 51, + 22, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3496, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17734, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 4, + 2, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 669, + 599, + 673, + 764, + 765, + 544, + 535, + 544, + 714, + 713, + 728, + 636, + 648, + 1132, + 1065, + 582, + 1235, + 925, + 1352 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 58, + 31, + 21, + 12, + 10, + 7, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3322, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 390, + 505, + 628, + 648, + 439, + 463, + 452, + 619, + 421, + 818, + 606, + 703, + 635, + 621, + 613, + 554, + 934, + 924, + 1057, + 1160, + 771 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 39, + 17, + 9, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3674, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14807, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 2, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 545, + 744, + 557, + 496, + 613, + 524, + 1338, + 955, + 800, + 753, + 732, + 736, + 555, + 545, + 1054, + 981 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 34, + 22, + 12, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2750, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 4974, + "livesLostByWave": [ + 0, + 1, + 1, + 2, + 1, + 2, + 6, + 2 + ], + "waveClearTicks": [ + 0, + 557, + 566, + 725, + 521, + 612, + 963 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 41, + 8, + 5, + 5, + 2 + ], + "totalAlienShots": 818, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13961, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 1, + 3, + 0, + 2, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 658, + 545, + 621, + 590, + 691, + 442, + 543, + 522, + 547, + 483, + 735, + 607, + 645, + 1757, + 984, + 933 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 43, + 23, + 16, + 8, + 7, + 5, + 5, + 4, + 2, + 2, + 1, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 2658, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 2, + 0, + 0, + 3, + 0, + 2, + 1, + 0, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 725, + 584, + 674, + 575, + 592, + 712, + 1042, + 762, + 649, + 467, + 478, + 501, + 761, + 1230, + 935, + 754, + 1037, + 1008, + 740, + 1026 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 45, + 22, + 14, + 7, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3300, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12185, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 2, + 2, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 504, + 546, + 563, + 520, + 600, + 916, + 541, + 705, + 610, + 1242, + 522, + 708, + 686, + 620, + 721 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 40, + 16, + 8, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2111, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12206, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 2, + 2, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 669, + 750, + 541, + 519, + 545, + 493, + 830, + 611, + 566, + 1036, + 504, + 568, + 1014, + 1248 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 22, + 10, + 8, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2183, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12909, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 3, + 0, + 3, + 0, + 2, + 1, + 2, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 617, + 742, + 641, + 610, + 463, + 580, + 499, + 552, + 610, + 807, + 1215, + 1169, + 843, + 1175 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 38, + 22, + 14, + 10, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2506, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11548, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 1, + 2, + 2, + 0, + 1, + 0, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 525, + 732, + 504, + 556, + 476, + 650, + 573, + 537, + 612, + 1147, + 568, + 529, + 767, + 1158 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 23, + 15, + 12, + 10, + 7, + 7, + 7, + 3, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2163, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6472, + "livesLostByWave": [ + 0, + 2, + 2, + 2, + 2, + 1, + 3, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 473, + 719, + 557, + 602, + 1037, + 696, + 962 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 27, + 12, + 4, + 2, + 0, + 0 + ], + "totalAlienShots": 1139, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12732, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 453, + 659, + 561, + 617, + 906, + 719, + 971, + 512, + 874, + 534, + 997, + 764, + 962, + 712 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 26, + 10, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2491, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10327, + "livesLostByWave": [ + 0, + 1, + 5, + 0, + 0, + 3, + 1, + 0, + 2, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 527, + 543, + 696, + 587, + 1428, + 1238, + 661, + 587, + 1360, + 721 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 45, + 12, + 9, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1785, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5747, + "livesLostByWave": [ + 0, + 1, + 3, + 5, + 4, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 620, + 879, + 751, + 883, + 1066 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 50, + 14, + 6, + 1, + 0 + ], + "totalAlienShots": 1022, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 13538, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 2, + 2, + 3, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 469, + 504, + 545, + 512, + 605, + 897, + 569, + 534, + 1086, + 1204, + 1450, + 1550, + 1138 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 50, + 21, + 14, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2364, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14024, + "livesLostByWave": [ + 0, + 1, + 1, + 1, + 0, + 2, + 2, + 0, + 2, + 0, + 1, + 0, + 2, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 736, + 550, + 780, + 612, + 722, + 940, + 572, + 777, + 606, + 784, + 860, + 1004, + 693, + 729, + 1119 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 35, + 17, + 14, + 11, + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2676, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11239, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 6, + 2, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 680, + 684, + 674, + 543, + 735, + 583, + 717, + 1073, + 782, + 898, + 1093 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 28, + 19, + 11, + 9, + 6, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2125, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15204, + "livesLostByWave": [ + 0, + 2, + 2, + 0, + 3, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 618, + 729, + 689, + 709, + 636, + 682, + 482, + 572, + 598, + 566, + 670, + 1223, + 1003, + 898, + 1269, + 1058 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 26, + 8, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2889, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8841, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 3, + 5, + 0, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 531, + 544, + 569, + 612, + 995, + 1013, + 763, + 1074, + 1363 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 53, + 30, + 12, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1633, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 21, + "survivalTicks": 17762, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 2, + 2, + 0, + 0, + 1, + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 1, + 2, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 446, + 742, + 497, + 572, + 549, + 929, + 711, + 713, + 586, + 691, + 929, + 548, + 1154, + 618, + 751, + 1008, + 676, + 1023, + 961, + 706 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 16, + 10, + 5, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3549, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15568, + "livesLostByWave": [ + 0, + 0, + 2, + 4, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 693, + 640, + 900, + 783, + 598, + 709, + 620, + 650, + 591, + 728, + 725, + 644, + 1151, + 1280, + 1290, + 1060 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 26, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2872, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 40, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 535, + 548, + 1020, + 710, + 567, + 493, + 586, + 462, + 517, + 543, + 812, + 734, + 591, + 583, + 547, + 721, + 488, + 405, + 566, + 480, + 505, + 719, + 521 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 38, + 22, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3380, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 41, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 554, + 588, + 631, + 468, + 569, + 345, + 467, + 491, + 465, + 567, + 881, + 740, + 541, + 981, + 852, + 1480, + 663, + 640, + 651, + 796, + 533 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 57, + 32, + 21, + 17, + 14, + 6, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3287, + "totalPlayerDeaths": 11 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16701, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 2, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 4, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 612, + 536, + 524, + 1084, + 600, + 592, + 980, + 587, + 652, + 645, + 1463, + 938, + 1225, + 844, + 983, + 1176 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 38, + 19, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3119, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12629, + "livesLostByWave": [ + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 2, + 2, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 421, + 925, + 735, + 726, + 649, + 561, + 595, + 631, + 729, + 586, + 1039, + 954, + 718, + 1293 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 21, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2331, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14674, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 3, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 515, + 683, + 629, + 724, + 778, + 473, + 510, + 721, + 658, + 469, + 746, + 741, + 564, + 615, + 552, + 1352, + 739 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 42, + 18, + 7, + 4, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2623, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 611, + 932, + 505, + 556, + 754, + 544, + 456, + 426, + 618, + 681, + 477, + 483, + 542, + 703, + 706, + 534, + 702, + 533, + 510, + 468, + 516, + 571, + 1354, + 548 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 16, + 13, + 7, + 4, + 4, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3449, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 16112, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 1, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 1, + 0, + 2, + 0, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 469, + 584, + 856, + 795, + 530, + 429, + 785, + 563, + 604, + 740, + 1312, + 667, + 603, + 744, + 1059, + 732, + 1337 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 34, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3070, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 4, + 1, + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 777, + 559, + 637, + 473, + 623, + 481, + 576, + 488, + 490, + 619, + 975, + 581, + 739, + 631, + 887, + 816, + 1203, + 979, + 1240, + 1354 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 44, + 23, + 23, + 10, + 9, + 5, + 5, + 4, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3424, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13937, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 1, + 1, + 2, + 1, + 3, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 505, + 569, + 536, + 642, + 786, + 555, + 666, + 556, + 619, + 1159, + 848, + 661, + 1056, + 855, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 37, + 20, + 13, + 8, + 4, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2633, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 21, + "survivalTicks": 16451, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 2, + 3, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 519, + 720, + 561, + 673, + 569, + 568, + 522, + 579, + 437, + 822, + 724, + 550, + 543, + 741, + 589, + 745, + 892, + 618, + 1008, + 773 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 33, + 14, + 8, + 8, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3115, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 3, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 23, + "survivalTicks": 17701, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 1, + 1, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 485, + 495, + 538, + 591, + 537, + 501, + 475, + 479, + 541, + 779, + 554, + 489, + 689, + 707, + 948, + 739, + 733, + 644, + 902, + 917, + 796, + 842 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 45, + 23, + 10, + 7, + 5, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3530, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1523, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 343, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1585, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 756 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 390, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 2000, + "livesLostByWave": [ + 0, + 6, + 12, + 2 + ], + "waveClearTicks": [ + 0, + 543, + 823 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 23, + 0 + ], + "totalAlienShots": 490, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 652 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 310, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 975, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 251, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1324, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 327, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 746 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 260, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1258, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 608 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 335, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1043, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 607 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 39 + ], + "totalAlienShots": 214, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1443, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 678 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 389, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 869, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 227, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1294, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 325, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1287, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 365, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1418, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 774 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 334, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1357, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 777 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 309, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 955, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 277, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1232, + "livesLostByWave": [ + 0, + 18, + 2 + ], + "waveClearTicks": [ + 0, + 810 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 3 + ], + "totalAlienShots": 295, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1169, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 209, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1199, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 547 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 12 + ], + "totalAlienShots": 334, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1392, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 602 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 343, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1104, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 561 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 300, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1227, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 572 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 306, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 895, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 246, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1284, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 2 + ], + "totalAlienShots": 322, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1699, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 360, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1301, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 577 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 13 + ], + "totalAlienShots": 355, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1193, + "livesLostByWave": [ + 0, + 19, + 1 + ], + "waveClearTicks": [ + 0, + 911 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 225, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1447, + "livesLostByWave": [ + 0, + 8, + 12 + ], + "waveClearTicks": [ + 0, + 647 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 355, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1237, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 345, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1223, + "livesLostByWave": [ + 0, + 17, + 3 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 301, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1059, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1542, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 396, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 739, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 727, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 233, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1295, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 653 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 309, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1092, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 688 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 270, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1296, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 593 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 326, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 937, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 242, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1135, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 675 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 256, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1356, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 662 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 361, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1177, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 674 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 331, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1233, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1213, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 315, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1241, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 176, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 904, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 229, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15457, + "livesLostByWave": [ + 0, + 0, + 8, + 3, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 2, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 463, + 524, + 584, + 541, + 857, + 1380, + 980, + 625, + 753, + 913, + 879, + 584, + 802, + 548, + 1221, + 1454 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 32, + 11, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3399, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16529, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 5, + 4, + 1, + 0, + 0, + 0, + 1, + 2, + 0, + 2, + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 463, + 457, + 459, + 342, + 537, + 952, + 794, + 377, + 580, + 755, + 733, + 1071, + 893, + 1054, + 1137, + 733, + 1548, + 1093 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 34, + 20, + 11, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3822, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 3, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 1, + 0, + 2, + 0, + 3, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 598, + 790, + 958, + 427, + 788, + 572, + 672, + 863, + 959, + 650, + 407, + 516, + 473, + 1015, + 1035, + 587, + 486, + 1250, + 827, + 927 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 20, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4140, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 4, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 4, + 3, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 528, + 615, + 640, + 1118, + 986, + 930, + 574, + 588, + 372, + 573, + 590, + 614, + 1044, + 1016, + 806, + 890, + 1000, + 546, + 798 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 51, + 17, + 9, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4077, + "totalPlayerDeaths": 18 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12414, + "livesLostByWave": [ + 0, + 2, + 3, + 2, + 0, + 1, + 0, + 0, + 3, + 2, + 0, + 3, + 2, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 520, + 511, + 502, + 488, + 403, + 679, + 808, + 841, + 598, + 799, + 1015, + 1434, + 1029 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 32, + 12, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2980, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 17222, + "livesLostByWave": [ + 0, + 0, + 4, + 1, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 2, + 0, + 1, + 1, + 5, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 384, + 1016, + 1081, + 481, + 492, + 668, + 588, + 662, + 794, + 415, + 493, + 896, + 1180, + 732, + 1048, + 1336, + 1794 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 14, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3904, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15346, + "livesLostByWave": [ + 0, + 0, + 1, + 4, + 1, + 0, + 3, + 0, + 0, + 0, + 1, + 0, + 3, + 3, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 680, + 599, + 669, + 598, + 605, + 916, + 421, + 522, + 705, + 512, + 515, + 1338, + 840, + 1541, + 1462, + 1069 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 13, + 8, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3661, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14633, + "livesLostByWave": [ + 0, + 2, + 6, + 6, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 575, + 1018, + 839, + 932, + 855, + 657, + 1058, + 849, + 650, + 551, + 905, + 571, + 1114, + 1427 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 20, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3611, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12809, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 4, + 1, + 1, + 0, + 2, + 2, + 2, + 0, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 739, + 812, + 581, + 653, + 596, + 596, + 659, + 687, + 1189, + 1015, + 1044, + 1179, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 27, + 6, + 4, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2689, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 10, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 4, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 3, + 0, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 394, + 699, + 904, + 735, + 573, + 567, + 559, + 562, + 586, + 1031, + 434, + 596, + 570, + 664, + 597, + 715, + 935, + 666, + 844, + 1238 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 19, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4210, + "totalPlayerDeaths": 17 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 11, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 4, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 536, + 429, + 643, + 1323, + 772, + 642, + 657, + 660, + 1238, + 467, + 594, + 595, + 831, + 933, + 592, + 518, + 965, + 880, + 585, + 904 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38, + 17, + 12, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4035, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 3, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 558, + 934, + 369, + 703, + 427, + 463, + 523, + 568, + 589, + 551, + 594, + 496, + 799, + 558, + 596, + 838, + 477, + 566, + 484, + 538, + 587, + 518, + 966 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 11, + 9, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4192, + "totalPlayerDeaths": 17 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13892, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 0, + 1, + 3, + 2, + 3, + 1, + 0, + 4, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 410, + 759, + 593, + 456, + 588, + 1091, + 544, + 927, + 993, + 1259, + 937, + 1040, + 1092, + 1187 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 15, + 5, + 3, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3238, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11988, + "livesLostByWave": [ + 0, + 1, + 3, + 0, + 4, + 1, + 2, + 0, + 2, + 1, + 1, + 1, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 395, + 413, + 458, + 931, + 762, + 608, + 932, + 791, + 753, + 900, + 1013, + 1101 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 47, + 25, + 17, + 6, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2790, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 17257, + "livesLostByWave": [ + 0, + 4, + 2, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 1, + 3, + 0, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 673, + 705, + 450, + 572, + 1222, + 637, + 503, + 623, + 592, + 778, + 968, + 342, + 747, + 828, + 758, + 1189, + 1386, + 1231 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 14, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3956, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 16, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 3, + 1, + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 503, + 826, + 477, + 641, + 546, + 592, + 558, + 685, + 561, + 454, + 840, + 430, + 1299, + 1417, + 1130, + 1226, + 1069, + 1154 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 30, + 11, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4181, + "totalPlayerDeaths": 18 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15158, + "livesLostByWave": [ + 0, + 2, + 3, + 4, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 4 + ], + "waveClearTicks": [ + 0, + 559, + 945, + 588, + 681, + 1330, + 657, + 950, + 461, + 1022, + 660, + 802, + 689, + 777, + 549, + 675, + 707 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 33, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3658, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11343, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 1, + 3, + 4, + 0, + 0, + 1, + 3, + 0, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 651, + 617, + 617, + 671, + 879, + 766, + 705, + 626, + 1157, + 842, + 779, + 1005 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 24, + 13, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2623, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12372, + "livesLostByWave": [ + 0, + 0, + 2, + 4, + 1, + 4, + 1, + 0, + 0, + 1, + 1, + 2, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 402, + 791, + 405, + 438, + 915, + 654, + 1001, + 435, + 961, + 637, + 826, + 1458, + 1241 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 26, + 15, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2762, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 20, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 4 + ], + "waveClearTicks": [ + 0, + 470, + 531, + 876, + 434, + 540, + 893, + 458, + 975, + 532, + 1244, + 1104, + 1023, + 935, + 834, + 467, + 1106, + 925, + 471, + 422, + 1016 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 25, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3928, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 8772, + "livesLostByWave": [ + 0, + 2, + 1, + 2, + 0, + 1, + 3, + 3, + 0, + 2, + 1, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 457, + 367, + 478, + 743, + 438, + 509, + 1081, + 684, + 753, + 479, + 911 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 36, + 15, + 5, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2101, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 22, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 1, + 2, + 1, + 0, + 3, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 599, + 483, + 749, + 467, + 410, + 441, + 501, + 446, + 596, + 458, + 589, + 1036, + 524, + 1044, + 556, + 1045, + 811, + 469, + 863, + 1095, + 838, + 1037 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 35, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4143, + "totalPlayerDeaths": 18 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 23, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 470, + 824, + 454, + 514, + 568, + 1075, + 979, + 501, + 761, + 321, + 510, + 520, + 1015, + 876, + 1149, + 421, + 550, + 1130, + 958, + 465, + 440 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 20, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4219, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7374, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 6, + 3, + 1, + 1, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 679, + 713, + 597, + 964, + 606, + 669, + 519, + 1159 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 18, + 10, + 3, + 1, + 1, + 1, + 0 + ], + "totalAlienShots": 1613, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15008, + "livesLostByWave": [ + 0, + 0, + 8, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 425, + 458, + 357, + 705, + 455, + 569, + 551, + 545, + 761, + 586, + 501, + 447, + 464, + 486, + 1543, + 822, + 794, + 1524 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 34, + 21, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3577, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 26, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 4 + ], + "waveClearTicks": [ + 0, + 479, + 882, + 675, + 478, + 493, + 506, + 665, + 591, + 642, + 411, + 640, + 606, + 791, + 604, + 442, + 729, + 618, + 590, + 589, + 839, + 551, + 663, + 925 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 16, + 5, + 5, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4191, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 424, + 759, + 429, + 644, + 582, + 622, + 861, + 826, + 812, + 394, + 973, + 888, + 752, + 835, + 809, + 424, + 623, + 770, + 419, + 776, + 889 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 13, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4170, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 28, + "outcome": "cap", + "finalWave": 26, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 5, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 460, + 524, + 375, + 682, + 740, + 426, + 442, + 440, + 594, + 423, + 462, + 356, + 1189, + 462, + 463, + 449, + 585, + 410, + 766, + 487, + 834, + 894, + 692, + 554, + 723 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 30, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4134, + "totalPlayerDeaths": 16 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 8564, + "livesLostByWave": [ + 0, + 2, + 1, + 2, + 2, + 3, + 1, + 2, + 0, + 6, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 742, + 437, + 454, + 465, + 619, + 468, + 589, + 577, + 1514, + 1067 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 27, + 14, + 11, + 8, + 8, + 4, + 2, + 0, + 0 + ], + "totalAlienShots": 1818, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 30, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 438, + 363, + 564, + 443, + 506, + 822, + 589, + 864, + 386, + 439, + 649, + 618, + 799, + 454, + 498, + 1123, + 522, + 759, + 1248, + 848, + 765, + 625 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 34, + 12, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4006, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 11639, + "livesLostByWave": [ + 0, + 2, + 3, + 0, + 1, + 2, + 1, + 0, + 0, + 0, + 2, + 4, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 465, + 474, + 310, + 395, + 866, + 473, + 587, + 483, + 709, + 420, + 632, + 498, + 900, + 909, + 1318 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 36, + 16, + 11, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2635, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 32, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 3, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 3, + 0, + 2, + 0, + 1, + 3, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 549, + 510, + 736, + 533, + 965, + 507, + 581, + 496, + 624, + 489, + 455, + 645, + 934, + 403, + 976, + 1109, + 812, + 870, + 908, + 938, + 919 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 35, + 11, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4393, + "totalPlayerDeaths": 18 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7773, + "livesLostByWave": [ + 0, + 0, + 3, + 3, + 6, + 1, + 1, + 3, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 440, + 435, + 559, + 601, + 996, + 521, + 1552, + 1052 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 45, + 23, + 4, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1653, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 10648, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 5, + 2, + 0, + 2, + 0, + 4, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 469, + 564, + 432, + 358, + 382, + 416, + 390, + 836, + 587, + 595, + 592, + 1002, + 897, + 1025 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 29, + 13, + 6, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2346, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13873, + "livesLostByWave": [ + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 2, + 3, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 488, + 671, + 494, + 495, + 747, + 971, + 569, + 277, + 1125, + 466, + 508, + 984, + 857, + 622, + 1220, + 1024 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3152, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 36, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 1, + 1, + 0, + 2, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 553, + 852, + 542, + 582, + 550, + 635, + 546, + 578, + 533, + 770, + 1304, + 612, + 552, + 608, + 634, + 636, + 685, + 1292, + 760, + 997, + 963 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 17, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4162, + "totalPlayerDeaths": 18 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6048, + "livesLostByWave": [ + 0, + 2, + 5, + 5, + 1, + 0, + 3, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 474, + 519, + 797, + 637, + 615, + 908, + 926 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 27, + 3, + 2, + 2, + 0, + 0 + ], + "totalAlienShots": 1246, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17732, + "livesLostByWave": [ + 0, + 2, + 5, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 711, + 548, + 741, + 894, + 621, + 671, + 892, + 833, + 599, + 579, + 700, + 743, + 656, + 773, + 1036, + 886, + 1638, + 986 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 25, + 16, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4121, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16014, + "livesLostByWave": [ + 0, + 3, + 1, + 1, + 2, + 1, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 2, + 4 + ], + "waveClearTicks": [ + 0, + 642, + 607, + 642, + 592, + 1035, + 508, + 637, + 509, + 424, + 703, + 894, + 799, + 623, + 810, + 569, + 721, + 842, + 1204 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 27, + 7, + 6, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3704, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10286, + "livesLostByWave": [ + 0, + 4, + 7, + 0, + 2, + 0, + 0, + 2, + 1, + 2, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 508, + 670, + 1103, + 503, + 616, + 676, + 601, + 949, + 1088, + 1201 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 35, + 20, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2318, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9763, + "livesLostByWave": [ + 0, + 0, + 4, + 0, + 4, + 0, + 3, + 1, + 0, + 3, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 601, + 555, + 695, + 698, + 396, + 935, + 726, + 647, + 673, + 832, + 1062 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 27, + 12, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2343, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 42, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 2, + 3, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 640, + 940, + 421, + 463, + 455, + 787, + 413, + 484, + 420, + 831, + 686, + 744, + 957, + 588, + 817, + 764, + 591, + 458, + 576, + 836, + 842, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 68, + 22, + 15, + 8, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4122, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 43, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 3, + 0, + 0, + 5, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 468, + 379, + 541, + 400, + 438, + 536, + 522, + 1025, + 1242, + 1113, + 830, + 804, + 1011, + 1107, + 896, + 601, + 1038, + 594, + 1131 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 27, + 10, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4000, + "totalPlayerDeaths": 17 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 44, + "outcome": "cap", + "finalWave": 25, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 652, + 837, + 449, + 680, + 748, + 670, + 914, + 369, + 673, + 312, + 579, + 620, + 469, + 413, + 409, + 951, + 456, + 360, + 512, + 1123, + 529, + 726, + 528, + 602 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 73, + 28, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4098, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13453, + "livesLostByWave": [ + 0, + 0, + 3, + 0, + 2, + 6, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 615, + 727, + 624, + 422, + 566, + 648, + 641, + 553, + 590, + 596, + 1042, + 894, + 909, + 1100, + 910 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 24, + 12, + 11, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3069, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10681, + "livesLostByWave": [ + 0, + 4, + 2, + 0, + 0, + 1, + 2, + 3, + 4, + 1, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 505, + 574, + 544, + 591, + 644, + 537, + 605, + 1281, + 658, + 954, + 618, + 632 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 71, + 36, + 19, + 10, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2396, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 3, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 655, + 880, + 589, + 665, + 513, + 566, + 566, + 606, + 594, + 810, + 713, + 478, + 1034, + 574, + 524, + 623, + 707, + 527, + 940, + 623, + 769 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 44, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4029, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13154, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 6, + 2, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 650, + 465, + 413, + 354, + 499, + 500, + 413, + 891, + 503, + 535, + 1248, + 817, + 928, + 933, + 1197 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 39, + 23, + 10, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2956, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11143, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 1, + 4, + 0, + 1, + 0, + 1, + 4, + 3, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 652, + 1012, + 662, + 456, + 421, + 397, + 507, + 844, + 503, + 599, + 1149, + 757, + 1004 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 14, + 10, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2389, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.1", + "playerCount": 4, + "botPolicy": "competent", + "seed": 50, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 2, + 0, + 0, + 2, + 1, + 0, + 3, + 1, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 532, + 671, + 273, + 754, + 502, + 536, + 561, + 436, + 846, + 952, + 942, + 785, + 390, + 436, + 702, + 470, + 1100, + 528, + 542, + 1025, + 882, + 1173 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 18, + 12, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4290, + "totalPlayerDeaths": 19 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1426, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1491, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 838, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 889, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1373, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 813, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1575, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 793, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 95, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1648, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 911, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1667, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 134, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 677, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1049, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 145, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1035, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 133, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 939, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 118, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1459, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 160, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1836, + "livesLostByWave": [ + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 1524 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 23 + ], + "totalAlienShots": 203, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 135, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 910, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 140, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1423, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 593, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 78, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 797, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 114, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 836, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 113, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 883, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 111, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1124, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 158, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 142, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 765, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1091, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 127, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 679, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 87, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 116, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 733, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 96, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1843, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 493, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 59, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1367, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1157, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1534, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1554, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 943, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1179, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 126, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 93, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 947, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 137, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1647, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 757, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 106, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1219, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1045, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 107, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 548, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 71, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 851, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 110, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1499, + "livesLostByWave": [ + 0, + 3 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 108 + ], + "totalAlienShots": 164, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9387, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 827, + 797, + 808, + 720, + 807, + 809, + 765, + 725, + 816, + 831 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 45, + 25, + 14, + 9, + 5, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 988, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8724, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 974, + 854, + 757, + 670, + 724, + 809, + 759, + 957 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 28, + 16, + 10, + 9, + 4, + 0, + 0, + 0 + ], + "totalAlienShots": 902, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6814, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 818, + 772, + 721, + 683, + 693, + 779, + 711 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 37, + 27, + 20, + 13, + 7, + 4 + ], + "totalAlienShots": 736, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 9058, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 870, + 735, + 706, + 774, + 845, + 838, + 751, + 794, + 752 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 36, + 20, + 10, + 7, + 3, + 3, + 1, + 0 + ], + "totalAlienShots": 945, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 772, + 777, + 890, + 743, + 851, + 799, + 773, + 789, + 900, + 887, + 860, + 815, + 1011, + 932, + 1094, + 773, + 1019 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 47, + 23, + 16, + 9, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2077, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 5113, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 767, + 767, + 679, + 682 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 42, + 19, + 9, + 6 + ], + "totalAlienShots": 473, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8543, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 821, + 839, + 698, + 730, + 993, + 796, + 865, + 794, + 664 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 34, + 22, + 15, + 8, + 4, + 1, + 1, + 1 + ], + "totalAlienShots": 876, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 9503, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 1037, + 785, + 775, + 808, + 780, + 851, + 811, + 803, + 845 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 43, + 23, + 13, + 9, + 5, + 3, + 3, + 2 + ], + "totalAlienShots": 1016, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 17731, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 814, + 707, + 793, + 729, + 797, + 823, + 813, + 830, + 806, + 828, + 875, + 845, + 832, + 912, + 862, + 831, + 881 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 40, + 20, + 13, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2070, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7134, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 857, + 813, + 936, + 738, + 661, + 733, + 764 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 79, + 50, + 21, + 8, + 1, + 0, + 0 + ], + "totalAlienShots": 706, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 6231, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 907, + 796, + 791, + 824, + 811 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 33, + 17, + 9, + 5, + 2 + ], + "totalAlienShots": 633, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12407, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 746, + 787, + 729, + 713, + 891, + 713, + 799, + 935, + 875, + 718, + 771, + 989 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 47, + 25, + 14, + 8, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1382, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9862, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 787, + 803, + 763, + 844, + 731, + 721, + 778, + 802, + 1042, + 845 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 68, + 36, + 22, + 14, + 8, + 3, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 1034, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5918, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 703, + 725, + 685, + 820, + 773 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 59, + 38, + 24, + 17, + 6, + 2 + ], + "totalAlienShots": 601, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13894, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 876, + 712, + 734, + 795, + 758, + 717, + 866, + 839, + 766, + 768, + 1122, + 1003, + 823, + 856 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 73, + 47, + 27, + 16, + 10, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1545, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 11013, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 774, + 932, + 810, + 806, + 767, + 828, + 840, + 851, + 901, + 816, + 804 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 78, + 39, + 17, + 8, + 6, + 4, + 4, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 1185, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9878, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 917, + 743, + 699, + 824, + 810, + 759, + 749, + 783, + 943, + 844 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 61, + 29, + 16, + 12, + 7, + 3, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 1067, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14513, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 813, + 774, + 724, + 789, + 763, + 743, + 747, + 721, + 748, + 831, + 803, + 831, + 845, + 773, + 792 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 35, + 22, + 7, + 3, + 2, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1683, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14138, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 879, + 776, + 751, + 826, + 713, + 775, + 829, + 805, + 818, + 802, + 942, + 929, + 792, + 831 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 45, + 33, + 20, + 14, + 9, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1571, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4309, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 864, + 812, + 779, + 810 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 63, + 24, + 9, + 5 + ], + "totalAlienShots": 435, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9942, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 845, + 714, + 785, + 768, + 685, + 700, + 729, + 914, + 822, + 1125 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 56, + 16, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1050, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11708, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 768, + 823, + 798, + 725, + 738, + 797, + 808, + 881, + 740, + 770, + 796, + 754 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 37, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1280, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5911, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 804, + 795, + 789, + 841, + 780, + 729 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 62, + 38, + 17, + 10, + 9, + 4 + ], + "totalAlienShots": 594, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5869, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 873, + 750, + 795, + 750, + 729, + 796 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 40, + 22, + 16, + 8, + 8 + ], + "totalAlienShots": 625, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 25, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 764, + 769, + 760, + 672, + 757, + 705, + 684, + 945, + 812, + 909, + 860, + 886, + 817, + 843, + 897, + 991, + 1016 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 37, + 23, + 14, + 10, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2060, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 9348, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 786, + 785, + 733, + 698, + 793, + 827, + 773, + 777, + 1099 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72, + 36, + 14, + 7, + 4, + 3, + 0, + 0, + 0 + ], + "totalAlienShots": 1009, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 835, + 791, + 796, + 978, + 927, + 769, + 842, + 795, + 860, + 971, + 844, + 817, + 916, + 730, + 879, + 870, + 985, + 943 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 40, + 23, + 13, + 6, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2088, + "totalPlayerDeaths": 2 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1756, + "livesLostByWave": [ + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 859 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 72 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 4, + "survivalTicks": 3409, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 864, + 753, + 736 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 38, + 23 + ], + "totalAlienShots": 321, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 8338, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 820, + 822, + 794, + 986, + 731, + 764, + 752, + 897 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 75, + 43, + 27, + 17, + 10, + 1, + 1, + 0 + ], + "totalAlienShots": 805, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7652, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 795, + 721, + 758, + 715, + 742, + 781 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 37, + 26, + 16, + 8, + 1, + 0 + ], + "totalAlienShots": 758, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 4183, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 840, + 855, + 930, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 44, + 18, + 10 + ], + "totalAlienShots": 407, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 33, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 869, + 753, + 730, + 703, + 670, + 773, + 719, + 816, + 776, + 870, + 893, + 1025, + 899, + 804, + 803, + 915, + 826, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 44, + 23, + 11, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2127, + "totalPlayerDeaths": 1 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13868, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 822, + 814, + 848, + 824, + 774, + 730, + 765, + 821, + 740, + 907, + 860, + 871, + 846, + 759 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 41, + 23, + 13, + 9, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1587, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8363, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 711, + 778, + 673, + 686, + 754, + 717, + 837, + 962, + 797 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 77, + 30, + 16, + 6, + 6, + 4, + 0, + 0, + 0 + ], + "totalAlienShots": 866, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7693, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 717, + 751, + 800, + 684, + 877, + 778, + 819 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 67, + 44, + 22, + 9, + 6, + 1, + 1, + 1 + ], + "totalAlienShots": 812, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 11221, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 858, + 777, + 1006, + 718, + 666, + 726, + 723, + 923, + 971, + 789, + 860 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 34, + 12, + 8, + 6, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1242, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4588, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 929, + 680, + 671, + 690, + 720 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 64, + 39, + 12, + 6, + 5 + ], + "totalAlienShots": 459, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12578, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 891, + 814, + 944, + 807, + 822, + 762, + 854, + 826, + 942, + 874, + 894, + 1178 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 71, + 38, + 14, + 9, + 7, + 6, + 4, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1424, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 4, + "survivalTicks": 3684, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 1073, + 834, + 724 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 52, + 20, + 8 + ], + "totalAlienShots": 372, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7068, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 780, + 790, + 737, + 714, + 748, + 653, + 941 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 82, + 51, + 27, + 15, + 8, + 3, + 1 + ], + "totalAlienShots": 704, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13531, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 780, + 795, + 784, + 935, + 759, + 790, + 888, + 721, + 735, + 833, + 859, + 885, + 970, + 790 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 81, + 41, + 19, + 7, + 6, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1496, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4809, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 819, + 819, + 753, + 818, + 750 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 58, + 29, + 20, + 7, + 2 + ], + "totalAlienShots": 446, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 6652, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 849, + 809, + 795, + 756, + 852 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 74, + 38, + 20, + 13, + 10, + 6 + ], + "totalAlienShots": 681, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 3929, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 925, + 667, + 683, + 669 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 57, + 19, + 12, + 8 + ], + "totalAlienShots": 374, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 6204, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 838, + 819, + 1035, + 826, + 701, + 653 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 65, + 35, + 17, + 7, + 4, + 0 + ], + "totalAlienShots": 652, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 11389, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 780, + 822, + 789, + 823, + 778, + 722, + 735, + 851, + 864, + 825, + 996 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 80, + 45, + 27, + 14, + 8, + 7, + 4, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1298, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 5, + "survivalTicks": 3958, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 809, + 715, + 722, + 681 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 69, + 41, + 21, + 15 + ], + "totalAlienShots": 376, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9579, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 865, + 839, + 779, + 649, + 751, + 764, + 795, + 826, + 806, + 1042 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 70, + 38, + 23, + 17, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 983, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 1, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 8182, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 857, + 786, + 828, + 745, + 805, + 760, + 750, + 794 + ], + "barrierHpAtWaveStart": [ + 0, + 108, + 76, + 33, + 17, + 9, + 5, + 4, + 1, + 0 + ], + "totalAlienShots": 877, + "totalPlayerDeaths": 3 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1457, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 156, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1266, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 168, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1281, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1973, + "livesLostByWave": [ + 0, + 3, + 7 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 32 + ], + "totalAlienShots": 269, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 993, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1589, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 174, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1471, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 199, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1253, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 181, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1127, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1243, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 162, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1185, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1329, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 201, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1749, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1315 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 195, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1187, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1878, + "livesLostByWave": [ + 0, + 7, + 3 + ], + "waveClearTicks": [ + 0, + 1214 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 250, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1669, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1189 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 246, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1404, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 858 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 210, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1759, + "livesLostByWave": [ + 0, + 8, + 2 + ], + "waveClearTicks": [ + 0, + 1141 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 827, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1643, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 997 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 259, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1279, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 163, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1487, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 150, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2182, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 854 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52 + ], + "totalAlienShots": 294, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 907, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 159, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1327, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1429, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 210, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1507, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1563, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 161, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1133, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 130, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1489, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 154, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1461, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 179, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1732, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1014 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 265, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1687, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 191, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2215, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1655 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1143, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 205, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1107, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 897, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 144, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2032, + "livesLostByWave": [ + 0, + 4, + 6 + ], + "waveClearTicks": [ + 0, + 962 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 254, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1166, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1545, + "livesLostByWave": [ + 0, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 1213 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 225, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1839, + "livesLostByWave": [ + 0, + 6, + 4 + ], + "waveClearTicks": [ + 0, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 287, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1237, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 152, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1239, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1479, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 175, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1273, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1207, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 141, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1475, + "livesLostByWave": [ + 0, + 5, + 5 + ], + "waveClearTicks": [ + 0, + 964 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 212, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 10 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 148, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 6238, + "livesLostByWave": [ + 0, + 0, + 6, + 1, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 533, + 800, + 679, + 760, + 925, + 1246 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 44, + 27, + 12, + 1, + 0 + ], + "totalAlienShots": 908, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 14573, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 3, + 2, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 534, + 876, + 1075, + 693, + 1002, + 855, + 743, + 740, + 779, + 1231, + 994, + 1047, + 1454 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 107, + 39, + 7, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2237, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13247, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 1, + 1, + 0, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 564, + 625, + 853, + 634, + 652, + 1066, + 785, + 678, + 806, + 690, + 699, + 815, + 827, + 1206 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 39, + 8, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2118, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6786, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 5, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 641, + 548, + 731, + 1078, + 1135, + 932 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 44, + 31, + 11, + 2, + 0, + 0 + ], + "totalAlienShots": 901, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12036, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 0, + 4, + 1, + 1, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 520, + 656, + 643, + 607, + 956, + 825, + 942, + 841, + 768, + 831, + 1040, + 929 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 37, + 21, + 13, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1879, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10289, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 1, + 1, + 0, + 1, + 0, + 0, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 529, + 676, + 721, + 676, + 823, + 788, + 803, + 1133, + 866, + 1263 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 32, + 15, + 9, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1656, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10478, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 3, + 2, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 498, + 559, + 542, + 657, + 877, + 925, + 1744, + 1168, + 949, + 1024 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 45, + 27, + 13, + 8, + 4, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1489, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8502, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 1, + 2, + 0, + 3, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 478, + 650, + 604, + 686, + 930, + 567, + 1134, + 909, + 1043 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 102, + 45, + 23, + 16, + 9, + 6, + 2, + 0, + 0 + ], + "totalAlienShots": 1278, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8464, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 0, + 4, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 567, + 656, + 663, + 579, + 1103, + 755, + 777, + 748, + 764 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 52, + 23, + 12, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1226, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 11208, + "livesLostByWave": [ + 0, + 0, + 4, + 0, + 0, + 1, + 1, + 1, + 0, + 2, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 722, + 620, + 637, + 610, + 626, + 1073, + 845, + 1246, + 1038, + 1223 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 111, + 44, + 20, + 16, + 7, + 3, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1877, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13033, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 2, + 0, + 2, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 612, + 733, + 750, + 697, + 629, + 844, + 667, + 665, + 737, + 719, + 817, + 650, + 1086, + 795 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 44, + 24, + 17, + 9, + 4, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2088, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 12, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11444, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 0, + 4, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 718, + 588, + 666, + 833, + 700, + 768, + 824, + 712, + 1034, + 913, + 1094 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 30, + 14, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1895, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 15737, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 631, + 651, + 671, + 567, + 996, + 843, + 1311, + 797, + 1259, + 783, + 1242, + 936, + 1007, + 1133, + 767 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 47, + 34, + 30, + 20, + 13, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2285, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 9093, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 566, + 664, + 684, + 695, + 851, + 681, + 797, + 869, + 1283 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 41, + 22, + 14, + 5, + 3, + 0, + 0, + 0 + ], + "totalAlienShots": 1330, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15558, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 529, + 556, + 567, + 731, + 735, + 1060, + 763, + 796, + 594, + 508, + 750, + 752, + 1091, + 968, + 954, + 1297 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 45, + 26, + 20, + 8, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2553, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12167, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 1, + 3, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 790, + 602, + 695, + 594, + 746, + 860, + 601, + 705, + 615, + 651, + 786, + 913, + 922 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 104, + 50, + 25, + 8, + 5, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1933, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 14002, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 537, + 938, + 614, + 690, + 829, + 685, + 781, + 800, + 1594, + 1344, + 1146, + 927, + 769 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 98, + 35, + 19, + 18, + 9, + 8, + 4, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2193, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14674, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 0, + 2, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 535, + 577, + 612, + 612, + 589, + 761, + 1397, + 1268, + 1167, + 1050, + 1217, + 742, + 891, + 761 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 95, + 48, + 24, + 12, + 8, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2417, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 19, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 821, + 844, + 679, + 935, + 792, + 757, + 595, + 909, + 1066, + 558, + 593, + 710, + 1032, + 958, + 882, + 774, + 757, + 803 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 36, + 11, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2941, + "totalPlayerDeaths": 8 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6178, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 4, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 610, + 700, + 671, + 947, + 774, + 817 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 41, + 27, + 20, + 9, + 6, + 4 + ], + "totalAlienShots": 892, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12616, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 2, + 0, + 0, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 640, + 667, + 724, + 697, + 742, + 866, + 671, + 624, + 584, + 1103, + 605, + 1608, + 1187 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 38, + 22, + 8, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1923, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 8432, + "livesLostByWave": [ + 0, + 3, + 2, + 1, + 0, + 3, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 569, + 798, + 962, + 933, + 1247, + 1173, + 1352 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 101, + 35, + 21, + 10, + 6, + 2, + 0 + ], + "totalAlienShots": 1209, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 23, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 535, + 725, + 754, + 714, + 937, + 980, + 896, + 1040, + 675, + 796, + 634, + 1019, + 629, + 777, + 548, + 690, + 746, + 766, + 808, + 618 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 45, + 19, + 8, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2986, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4954, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 5, + 1, + 4 + ], + "waveClearTicks": [ + 0, + 581, + 674, + 702, + 767, + 897 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 90, + 40, + 17, + 8, + 1 + ], + "totalAlienShots": 691, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7262, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 3, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 722, + 689, + 636, + 985, + 1188, + 1322 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 47, + 19, + 11, + 6, + 2, + 0 + ], + "totalAlienShots": 1014, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8206, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 1, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 511, + 641, + 671, + 677, + 697, + 970, + 846, + 683, + 783 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 55, + 29, + 15, + 6, + 5, + 4, + 3, + 0 + ], + "totalAlienShots": 1215, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12839, + "livesLostByWave": [ + 0, + 1, + 0, + 3, + 0, + 2, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 677, + 1031, + 697, + 780, + 871, + 723, + 1305, + 1154, + 985, + 998, + 1284 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 53, + 21, + 14, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1930, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12239, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 1, + 2, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 601, + 595, + 655, + 622, + 865, + 683, + 860, + 825, + 1037, + 943, + 1067, + 794, + 805 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 43, + 30, + 13, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1896, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 29, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 524, + 674, + 637, + 658, + 967, + 628, + 775, + 550, + 597, + 684, + 626, + 652, + 1216, + 765, + 1093, + 1078, + 1119, + 1066, + 1141 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 109, + 57, + 29, + 17, + 4, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2977, + "totalPlayerDeaths": 7 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 30, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 17243, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 717, + 651, + 632, + 1050, + 701, + 722, + 768, + 630, + 588, + 662, + 642, + 719, + 1489, + 901, + 1069, + 927, + 1151 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 36, + 10, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2683, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 31, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 732, + 700, + 690, + 696, + 649, + 810, + 489, + 617, + 1017, + 974, + 1237, + 699, + 699, + 1067, + 1083, + 833, + 877, + 1060 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 100, + 35, + 12, + 7, + 7, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2897, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 11459, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 507, + 675, + 614, + 687, + 620, + 655, + 655, + 1081, + 771, + 793, + 786, + 1138 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 106, + 66, + 35, + 23, + 10, + 5, + 3, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1843, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14596, + "livesLostByWave": [ + 0, + 3, + 0, + 2, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 642, + 653, + 634, + 719, + 796, + 847, + 871, + 779, + 817, + 787, + 1506, + 1150, + 727, + 1086 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 46, + 28, + 17, + 8, + 2, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2321, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 34, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 645, + 647, + 674, + 632, + 615, + 986, + 571, + 899, + 618, + 641, + 739, + 720, + 627, + 795, + 725, + 725, + 696, + 781, + 660, + 1481 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 34, + 19, + 11, + 9, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2974, + "totalPlayerDeaths": 5 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12175, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 554, + 695, + 616, + 652, + 679, + 1109, + 682, + 971, + 1072, + 1158, + 728, + 855 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 44, + 17, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1970, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16209, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 579, + 698, + 973, + 816, + 678, + 732, + 814, + 785, + 680, + 742, + 731, + 692, + 999, + 1303, + 1166, + 902 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 36, + 10, + 7, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2580, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7842, + "livesLostByWave": [ + 0, + 1, + 2, + 1, + 4, + 0, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 563, + 722, + 581, + 1044, + 759, + 800, + 1009, + 1116 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 49, + 27, + 7, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1121, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9744, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 2, + 1, + 0, + 2, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 553, + 617, + 749, + 820, + 883, + 621, + 1083, + 760, + 750, + 1090 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 39, + 21, + 13, + 5, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1539, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9296, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 2, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 588, + 738, + 919, + 665, + 740, + 702, + 856, + 596, + 708, + 754 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 36, + 14, + 11, + 8, + 6, + 5, + 5, + 5, + 2 + ], + "totalAlienShots": 1485, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 8192, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 488, + 753, + 554, + 550, + 756, + 998, + 1027, + 1097 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 48, + 16, + 9, + 5, + 0, + 0, + 0 + ], + "totalAlienShots": 1218, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7784, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 1, + 2, + 1, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 657, + 667, + 733, + 704, + 644, + 611, + 1099, + 1318 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 57, + 26, + 16, + 11, + 8, + 3, + 0 + ], + "totalAlienShots": 1039, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 7586, + "livesLostByWave": [ + 0, + 1, + 1, + 2, + 0, + 3, + 0, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 580, + 817, + 686, + 605, + 701, + 1016, + 1447 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 36, + 17, + 11, + 6, + 0, + 0 + ], + "totalAlienShots": 1108, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16602, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 552, + 548, + 695, + 699, + 674, + 633, + 755, + 653, + 651, + 897, + 646, + 936, + 807, + 941, + 688, + 1198, + 900, + 844 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 44, + 17, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2840, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14763, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 475, + 588, + 615, + 597, + 657, + 1030, + 705, + 698, + 828, + 628, + 1192, + 1030, + 770, + 1048, + 1079 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 103, + 62, + 31, + 17, + 7, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2465, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 16402, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 2, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 483, + 823, + 649, + 787, + 907, + 708, + 593, + 885, + 705, + 703, + 755, + 501, + 590, + 809, + 806, + 1001, + 1085, + 843 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 27, + 14, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2611, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10128, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 2, + 2, + 1, + 0, + 1, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 511, + 554, + 646, + 640, + 629, + 712, + 1213, + 927, + 935, + 811, + 855 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 47, + 29, + 18, + 8, + 4, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1659, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 47, + "outcome": "cap", + "finalWave": 19, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 533, + 661, + 652, + 635, + 700, + 1036, + 961, + 648, + 919, + 653, + 1117, + 930, + 581, + 721, + 939, + 730, + 1285, + 1485 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 53, + 19, + 13, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2894, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 8639, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 0, + 6, + 0, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 566, + 646, + 1031, + 670, + 884, + 849, + 1025, + 777 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 46, + 22, + 4, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1262, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 9104, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 1, + 1, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 643, + 899, + 679, + 667, + 843, + 1270, + 1130, + 764 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 40, + 22, + 11, + 5, + 4, + 0, + 0 + ], + "totalAlienShots": 1335, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 2, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 13399, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 582, + 647, + 565, + 695, + 878, + 703, + 1190, + 791, + 1259, + 762, + 1069, + 801, + 1210 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 51, + 29, + 17, + 6, + 5, + 5, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2122, + "totalPlayerDeaths": 10 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1515, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 870 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16 + ], + "totalAlienShots": 271, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1662, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 853 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 342, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1357, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 791 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 251, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1001, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1549, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 942 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 301, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 903, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 172, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 198, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1324, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 3, + "survivalTicks": 1951, + "livesLostByWave": [ + 0, + 5, + 9, + 1 + ], + "waveClearTicks": [ + 0, + 704, + 832 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 48, + 9 + ], + "totalAlienShots": 284, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1759, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 772 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 286, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1384, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 707 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 6 + ], + "totalAlienShots": 296, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1787, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 938 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 256, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1287, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 591 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 40 + ], + "totalAlienShots": 243, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1209, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 182, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1336, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 781 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 232, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1342, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 751 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38 + ], + "totalAlienShots": 222, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1437, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 847 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 281, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1674, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 713 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 16 + ], + "totalAlienShots": 322, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1120, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 138, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1532, + "livesLostByWave": [ + 0, + 8, + 7 + ], + "waveClearTicks": [ + 0, + 686 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 36 + ], + "totalAlienShots": 336, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1047, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 46 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1289, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 933 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 178, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1264, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 589 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 34 + ], + "totalAlienShots": 288, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1115, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 173, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1234, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 757 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1612, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 332, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1232, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 925 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1509, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 1231 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 170, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1165, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1007, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 169, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1493, + "livesLostByWave": [ + 0, + 6, + 9 + ], + "waveClearTicks": [ + 0, + 714 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 37 + ], + "totalAlienShots": 272, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1262, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 770 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 235, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 831, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 139, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1789, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 1154 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 307, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 908, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 196, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1438, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 743 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 278, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 959, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 188, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1247, + "livesLostByWave": [ + 0, + 7, + 8 + ], + "waveClearTicks": [ + 0, + 651 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 248, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1173, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 165, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1200, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 734 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 250, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1568, + "livesLostByWave": [ + 0, + 10, + 5 + ], + "waveClearTicks": [ + 0, + 709 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 278, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1342, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 1010 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 232, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1102, + "livesLostByWave": [ + 0, + 14, + 1 + ], + "waveClearTicks": [ + 0, + 733 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 215, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1518, + "livesLostByWave": [ + 0, + 9, + 6 + ], + "waveClearTicks": [ + 0, + 708 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 27 + ], + "totalAlienShots": 293, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1162, + "livesLostByWave": [ + 0, + 13, + 2 + ], + "waveClearTicks": [ + 0, + 828 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 194, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1163, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 211, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 2298, + "livesLostByWave": [ + 0, + 12, + 3 + ], + "waveClearTicks": [ + 0, + 1185 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 448, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1438, + "livesLostByWave": [ + 0, + 11, + 4 + ], + "waveClearTicks": [ + 0, + 782 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 28 + ], + "totalAlienShots": 264, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1269, + "livesLostByWave": [ + 0, + 15 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 151, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1277, + "livesLostByWave": [ + 0, + 4, + 11 + ], + "waveClearTicks": [ + 0, + 571 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 41 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 13172, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 4, + 0, + 4, + 0, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 729, + 774, + 690, + 577, + 576, + 712, + 961, + 612, + 477, + 961, + 418, + 640, + 1421, + 918 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 27, + 16, + 9, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2498, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 2, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 2, + 2, + 3, + 0, + 0, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 664, + 1027, + 1047, + 515, + 482, + 995, + 637, + 619, + 750, + 900, + 1078, + 1157, + 843, + 1165, + 1333, + 1166, + 850 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 93, + 23, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3635, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15891, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 3, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 590, + 557, + 673, + 474, + 619, + 556, + 582, + 1018, + 632, + 911, + 1878, + 883, + 1214, + 985, + 1164 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 42, + 24, + 15, + 10, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3486, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 5381, + "livesLostByWave": [ + 0, + 0, + 2, + 6, + 1, + 1, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 498, + 516, + 526, + 553, + 557, + 962 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 40, + 15, + 7, + 7, + 0 + ], + "totalAlienShots": 1079, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 5, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 4 + ], + "waveClearTicks": [ + 0, + 663, + 678, + 801, + 627, + 658, + 662, + 462, + 589, + 670, + 424, + 692, + 471, + 463, + 557, + 484, + 489, + 454, + 638, + 584, + 635, + 777, + 794, + 810 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 28, + 11, + 8, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3775, + "totalPlayerDeaths": 9 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 6, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15263, + "livesLostByWave": [ + 0, + 0, + 2, + 2, + 0, + 2, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 686, + 585, + 542, + 496, + 450, + 485, + 541, + 662, + 568, + 824, + 840, + 1232, + 970, + 635, + 947, + 1088, + 1250 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 39, + 13, + 9, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2966, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 10, + "survivalTicks": 7468, + "livesLostByWave": [ + 0, + 0, + 1, + 3, + 1, + 0, + 1, + 5, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 556, + 626, + 533, + 719, + 524, + 462, + 553, + 528, + 1078 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 37, + 19, + 7, + 4, + 3, + 2, + 0, + 0 + ], + "totalAlienShots": 1496, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 10748, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 5, + 0, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 629, + 626, + 612, + 577, + 652, + 658, + 543, + 538, + 669, + 588, + 777, + 1084, + 658 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 28, + 13, + 10, + 7, + 6, + 5, + 3, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2119, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9838, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 2, + 0, + 2, + 2, + 1, + 3, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 645, + 576, + 526, + 579, + 491, + 526, + 525, + 681, + 884, + 1121, + 690 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 38, + 23, + 17, + 12, + 6, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1941, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 11167, + "livesLostByWave": [ + 0, + 0, + 5, + 1, + 1, + 2, + 1, + 0, + 2, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 429, + 722, + 732, + 969, + 833, + 705, + 908, + 961, + 1001, + 1083, + 1170 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 99, + 21, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2263, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13264, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 0, + 4, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 2, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 631, + 564, + 476, + 572, + 425, + 432, + 815, + 1332, + 844, + 591, + 514, + 937, + 714, + 819, + 892 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 27, + 20, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2902, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 633, + 539, + 517, + 507, + 673, + 556, + 1064, + 719, + 955, + 657, + 854, + 816, + 989, + 670, + 1117, + 1044, + 695, + 1027, + 838 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 37, + 27, + 21, + 12, + 9, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3968, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14874, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 1, + 3, + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 2, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 667, + 591, + 624, + 678, + 921, + 783, + 735, + 666, + 606, + 472, + 1307, + 1175, + 1240, + 1138, + 1058 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 39, + 19, + 16, + 11, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2960, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 14, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 5, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 491, + 569, + 557, + 636, + 512, + 508, + 537, + 434, + 573, + 583, + 735, + 523, + 745, + 278, + 488, + 965, + 911, + 894, + 884, + 1130, + 1338 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 34, + 13, + 7, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3849, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13239, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 2, + 1, + 0, + 1, + 0, + 1, + 2, + 0, + 0, + 2, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 542, + 961, + 644, + 518, + 486, + 662, + 587, + 692, + 1038, + 509, + 945, + 760, + 787, + 864, + 1094 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 25, + 15, + 7, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2709, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12754, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 5, + 3, + 0, + 0, + 0, + 0, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 454, + 919, + 507, + 624, + 715, + 470, + 511, + 608, + 579, + 939, + 829, + 568, + 556, + 890, + 1133 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 21, + 14, + 6, + 4, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2676, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 17, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 15509, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 1, + 1, + 2, + 4, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 630, + 539, + 525, + 499, + 526, + 743, + 514, + 516, + 373, + 1021, + 951, + 387, + 481, + 677, + 1129, + 1072, + 1259, + 1116 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 32, + 22, + 16, + 10, + 6, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3133, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 18, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7289, + "livesLostByWave": [ + 0, + 1, + 0, + 3, + 3, + 2, + 0, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 435, + 570, + 634, + 740, + 711, + 685, + 1006, + 1147 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 51, + 20, + 8, + 1, + 0, + 0, + 0 + ], + "totalAlienShots": 1485, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 19, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 15451, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 0, + 1, + 0, + 5, + 0, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 669, + 599, + 679, + 673, + 536, + 478, + 501, + 666, + 771, + 989, + 769, + 860, + 1062, + 1071, + 1066, + 937 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 57, + 23, + 12, + 12, + 12, + 11, + 10, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3364, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 14388, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 3, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 2, + 1, + 1, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 533, + 390, + 570, + 528, + 499, + 563, + 446, + 464, + 667, + 506, + 969, + 769, + 896, + 702, + 1310, + 1015, + 888 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 37, + 17, + 5, + 4, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3170, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17177, + "livesLostByWave": [ + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 2, + 0, + 1, + 0, + 3, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 545, + 557, + 1029, + 716, + 473, + 562, + 523, + 416, + 531, + 508, + 749, + 1182, + 761, + 537, + 772, + 907, + 1038, + 797, + 1145 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 39, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3806, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12093, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 4, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 557, + 605, + 541, + 550, + 795, + 417, + 532, + 602, + 804, + 547, + 1171, + 1332, + 1347 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 27, + 11, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2428, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 15414, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 2, + 2, + 0, + 1, + 3, + 0, + 0, + 1, + 1, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 658, + 545, + 621, + 590, + 738, + 717, + 600, + 1377, + 1164, + 932, + 792, + 829, + 1342, + 1009, + 1072 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 43, + 23, + 16, + 12, + 9, + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3162, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 24, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 1, + 3, + 0, + 0, + 2, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 725, + 527, + 712, + 639, + 584, + 507, + 418, + 548, + 509, + 1088, + 583, + 515, + 1319, + 1163, + 672, + 902, + 877, + 831, + 547, + 1389 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 44, + 33, + 21, + 8, + 6, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3733, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 16104, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 2, + 0, + 2, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 504, + 546, + 563, + 520, + 533, + 911, + 632, + 622, + 594, + 661, + 624, + 662, + 1405, + 657, + 571, + 918, + 874, + 555, + 958 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 40, + 15, + 8, + 5, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3160, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7074, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 0, + 1, + 8, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 669, + 750, + 541, + 519, + 508, + 564, + 937, + 1370 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 21, + 9, + 8, + 5, + 2, + 0, + 0 + ], + "totalAlienShots": 1139, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 27, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 2, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 617, + 742, + 578, + 556, + 661, + 1421, + 648, + 526, + 582, + 647, + 979, + 657, + 493, + 663, + 948, + 1171, + 1023, + 983, + 983 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 96, + 36, + 18, + 10, + 7, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3755, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13584, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 0, + 3, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 3, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 525, + 732, + 504, + 556, + 610, + 730, + 585, + 471, + 415, + 302, + 534, + 714, + 1096, + 654, + 1328, + 1029 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 23, + 15, + 12, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2909, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 12903, + "livesLostByWave": [ + 0, + 2, + 2, + 2, + 2, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 473, + 719, + 557, + 602, + 715, + 622, + 632, + 965, + 853, + 862, + 1322, + 1226, + 1167 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 97, + 26, + 8, + 3, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2516, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 30, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 2, + 1, + 0, + 0, + 1, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 453, + 659, + 562, + 651, + 473, + 485, + 511, + 801, + 464, + 443, + 588, + 446, + 658, + 1063, + 670, + 887, + 853, + 968, + 656, + 712, + 658, + 1032 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 26, + 10, + 5, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3837, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 6, + "survivalTicks": 4311, + "livesLostByWave": [ + 0, + 1, + 5, + 0, + 1, + 4, + 4 + ], + "waveClearTicks": [ + 0, + 527, + 543, + 687, + 679, + 592 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 45, + 9, + 6, + 3 + ], + "totalAlienShots": 809, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10962, + "livesLostByWave": [ + 0, + 1, + 3, + 5, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 485, + 620, + 879, + 803, + 1462, + 710, + 639, + 785, + 770, + 793, + 886 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 50, + 14, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2201, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 21, + "survivalTicks": 15557, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 3, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 2, + 1, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 469, + 504, + 545, + 601, + 519, + 533, + 868, + 369, + 548, + 335, + 439, + 452, + 515, + 879, + 659, + 603, + 1173, + 922, + 622, + 907 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 85, + 50, + 21, + 16, + 9, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3439, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14923, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 3, + 0, + 1, + 1, + 0, + 1, + 3, + 2, + 0, + 0, + 0, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 736, + 519, + 636, + 604, + 711, + 731, + 549, + 474, + 497, + 1069, + 1537, + 1223, + 965, + 1089, + 1403 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 34, + 10, + 5, + 3, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2909, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 35, + "outcome": "cap", + "finalWave": 18, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 3, + 0, + 2, + 2, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 657, + 680, + 623, + 502, + 534, + 619, + 1167, + 1088, + 542, + 666, + 593, + 1280, + 912, + 1088, + 1484, + 1106, + 892 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 27, + 19, + 16, + 11, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3624, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 13563, + "livesLostByWave": [ + 0, + 2, + 2, + 1, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 1, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 618, + 729, + 811, + 1320, + 542, + 570, + 1033, + 862, + 901, + 1238, + 1151, + 1665 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 25, + 9, + 3, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2522, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9439, + "livesLostByWave": [ + 0, + 0, + 2, + 3, + 2, + 0, + 1, + 3, + 0, + 1, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 531, + 560, + 997, + 721, + 900, + 786, + 735, + 508, + 1065, + 1170 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 48, + 27, + 13, + 5, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1820, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10169, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 0, + 6, + 0, + 1, + 0, + 0, + 4, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 446, + 742, + 497, + 572, + 540, + 519, + 831, + 533, + 1022, + 1316, + 1236 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 16, + 10, + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2146, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 10858, + "livesLostByWave": [ + 0, + 0, + 3, + 2, + 0, + 1, + 1, + 2, + 1, + 0, + 0, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 693, + 652, + 470, + 519, + 589, + 577, + 699, + 957, + 1001, + 949, + 604, + 919 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 24, + 18, + 10, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2261, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 23, + "survivalTicks": 16901, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 3, + 0, + 2, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 545, + 535, + 548, + 533, + 530, + 799, + 536, + 616, + 532, + 502, + 584, + 696, + 431, + 432, + 548, + 433, + 554, + 882, + 881, + 534, + 700, + 774 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 38, + 22, + 11, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3817, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10822, + "livesLostByWave": [ + 0, + 1, + 2, + 0, + 0, + 1, + 3, + 4, + 1, + 0, + 0, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 554, + 588, + 631, + 468, + 522, + 637, + 1427, + 776, + 813, + 1054, + 1373 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 91, + 57, + 31, + 21, + 14, + 7, + 2, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 2189, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 16606, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 3, + 0, + 0, + 0, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 612, + 536, + 609, + 613, + 658, + 455, + 577, + 619, + 817, + 496, + 449, + 712, + 1398, + 675, + 604, + 565, + 839, + 659, + 1399 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 38, + 14, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3446, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12668, + "livesLostByWave": [ + 0, + 1, + 3, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 2, + 1, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 421, + 925, + 735, + 726, + 630, + 441, + 714, + 486, + 594, + 582, + 987, + 665, + 1091, + 1064 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 19, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2635, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11699, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 2, + 0, + 1, + 0, + 4, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 683, + 628, + 691, + 561, + 625, + 1026, + 689, + 607, + 912, + 439, + 1192, + 1064 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 41, + 17, + 13, + 12, + 10, + 4, + 1, + 1, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2341, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 45, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 4 + ], + "waveClearTicks": [ + 0, + 611, + 873, + 539, + 624, + 501, + 521, + 511, + 701, + 900, + 989, + 1193, + 514, + 799, + 531, + 645, + 669, + 610, + 799, + 803, + 586, + 809 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 16, + 12, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3831, + "totalPlayerDeaths": 6 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10587, + "livesLostByWave": [ + 0, + 0, + 2, + 3, + 1, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 469, + 602, + 561, + 537, + 522, + 980, + 578, + 970, + 1271, + 1084, + 1089 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 41, + 9, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2146, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13516, + "livesLostByWave": [ + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 4, + 0, + 2, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 777, + 559, + 671, + 577, + 654, + 665, + 770, + 638, + 404, + 568, + 491, + 697, + 964, + 579, + 656, + 993 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 42, + 24, + 22, + 17, + 6, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2905, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 48, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 9528, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 1, + 3, + 0, + 0, + 2, + 1, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 485, + 505, + 570, + 570, + 912, + 710, + 714, + 830, + 1226, + 851 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 37, + 21, + 13, + 2, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1879, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 21, + "survivalTicks": 17209, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 0, + 5, + 0, + 1, + 1, + 2, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 519, + 720, + 561, + 619, + 596, + 735, + 545, + 439, + 350, + 866, + 534, + 584, + 1144, + 523, + 1398, + 823, + 507, + 871, + 895, + 1148 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 32, + 14, + 12, + 9, + 6, + 6, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3451, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 3, + "botPolicy": "competent", + "seed": 50, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 7766, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 4, + 6, + 0, + 1, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 485, + 495, + 639, + 586, + 997, + 706, + 590, + 945 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 92, + 44, + 21, + 7, + 2, + 0, + 0, + 0 + ], + "totalAlienShots": 1402, + "totalPlayerDeaths": 15 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 1, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1546, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 344, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 2, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1411, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 756 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 321, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 3, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1239, + "livesLostByWave": [ + 0, + 6, + 14 + ], + "waveClearTicks": [ + 0, + 543 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 23 + ], + "totalAlienShots": 316, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 4, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1255, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 652 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 343, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 5, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 975, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 251, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 6, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1332, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 722 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 331, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 7, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 679 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 25 + ], + "totalAlienShots": 244, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 8, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1204, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 746 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 9, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1289, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 608 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 345, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 10, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1171, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 607 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 39 + ], + "totalAlienShots": 286, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 11, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1067, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 239, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 12, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 206, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 13, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1017, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 177, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 14, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1302, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 678 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 10 + ], + "totalAlienShots": 350, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 15, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 869, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 227, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 16, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1353, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 691 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 17 + ], + "totalAlienShots": 344, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 17, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1337, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 644 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 381, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 18, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1346, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 774 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 311, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 19, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1410, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 777 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 4 + ], + "totalAlienShots": 325, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 20, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 955, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 277, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 21, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1172, + "livesLostByWave": [ + 0, + 18, + 2 + ], + "waveClearTicks": [ + 0, + 810 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 3 + ], + "totalAlienShots": 273, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 22, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1169, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 209, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 23, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1082, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 547 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 12 + ], + "totalAlienShots": 313, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 24, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1167, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 602 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 21 + ], + "totalAlienShots": 291, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 25, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1360, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 561 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 354, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 26, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1198, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 572 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 324, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 27, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 895, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 246, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 28, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1426, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 2 + ], + "totalAlienShots": 370, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 29, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1776, + "livesLostByWave": [ + 0, + 12, + 8 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 22 + ], + "totalAlienShots": 424, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 30, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1126, + "livesLostByWave": [ + 0, + 11, + 9 + ], + "waveClearTicks": [ + 0, + 577 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 13 + ], + "totalAlienShots": 306, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 31, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1157, + "livesLostByWave": [ + 0, + 19, + 1 + ], + "waveClearTicks": [ + 0, + 911 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 7 + ], + "totalAlienShots": 212, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 32, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1602, + "livesLostByWave": [ + 0, + 8, + 12 + ], + "waveClearTicks": [ + 0, + 647 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 363, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 33, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1286, + "livesLostByWave": [ + 0, + 13, + 7 + ], + "waveClearTicks": [ + 0, + 656 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 15 + ], + "totalAlienShots": 355, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 34, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1429, + "livesLostByWave": [ + 0, + 17, + 3 + ], + "waveClearTicks": [ + 0, + 697 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 353, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 35, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1059, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 193, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 36, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1152, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 728 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 8 + ], + "totalAlienShots": 269, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 37, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 739, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 38, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 727, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 233, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 39, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1442, + "livesLostByWave": [ + 0, + 9, + 11 + ], + "waveClearTicks": [ + 0, + 653 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 18 + ], + "totalAlienShots": 337, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 40, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1094, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 688 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 19 + ], + "totalAlienShots": 277, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 41, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1380, + "livesLostByWave": [ + 0, + 10, + 10 + ], + "waveClearTicks": [ + 0, + 593 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 20 + ], + "totalAlienShots": 358, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 42, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 937, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 268, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 43, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1053, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 242, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 44, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1119, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 675 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 11 + ], + "totalAlienShots": 262, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 45, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1233, + "livesLostByWave": [ + 0, + 14, + 6 + ], + "waveClearTicks": [ + 0, + 662 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 9 + ], + "totalAlienShots": 351, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 46, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1129, + "livesLostByWave": [ + 0, + 15, + 5 + ], + "waveClearTicks": [ + 0, + 674 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 321, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 47, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1233, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 202, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 48, + "outcome": "defeat", + "finalWave": 2, + "survivalTicks": 1110, + "livesLostByWave": [ + 0, + 16, + 4 + ], + "waveClearTicks": [ + 0, + 730 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 5 + ], + "totalAlienShots": 280, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 49, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 1241, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 176, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "novice", + "seed": 50, + "outcome": "defeat", + "finalWave": 1, + "survivalTicks": 904, + "livesLostByWave": [ + 0, + 20 + ], + "waveClearTicks": [ + 0 + ], + "barrierHpAtWaveStart": [ + 0, + 144 + ], + "totalAlienShots": 229, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 1, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 14544, + "livesLostByWave": [ + 0, + 0, + 0, + 1, + 6, + 1, + 0, + 0, + 1, + 0, + 5, + 0, + 1, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 463, + 577, + 809, + 1102, + 574, + 553, + 536, + 731, + 510, + 957, + 811, + 915, + 1621, + 1659 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 35, + 11, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3327, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 2, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 12537, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 0, + 4, + 0, + 1, + 0, + 0, + 6, + 2, + 0, + 0, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 463, + 562, + 1009, + 504, + 469, + 573, + 657, + 475, + 922, + 1041, + 792, + 1187, + 530, + 1064 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 24, + 7, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3137, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 3, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9515, + "livesLostByWave": [ + 0, + 1, + 0, + 0, + 4, + 4, + 5, + 0, + 1, + 0, + 2, + 0, + 3 + ], + "waveClearTicks": [ + 0, + 598, + 621, + 1007, + 551, + 614, + 515, + 515, + 988, + 845, + 851, + 471 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 69, + 33, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2429, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 4, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14508, + "livesLostByWave": [ + 0, + 4, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 4, + 1, + 0, + 3, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 809, + 864, + 389, + 844, + 521, + 531, + 1076, + 517, + 926, + 520, + 1091, + 855, + 1183, + 1201, + 907 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 51, + 10, + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3759, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 5, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10431, + "livesLostByWave": [ + 0, + 2, + 2, + 3, + 8, + 0, + 0, + 0, + 2, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 470, + 486, + 886, + 618, + 803, + 487, + 875, + 592, + 1015, + 1015 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 35, + 12, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2678, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 6, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 3, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 4, + 1, + 0, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 384, + 405, + 624, + 432, + 365, + 454, + 469, + 570, + 700, + 1041, + 491, + 1030, + 446, + 457, + 401, + 847, + 735, + 416, + 555, + 529, + 941, + 1133, + 1034 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 35, + 8, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4754, + "totalPlayerDeaths": 16 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 7, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 16928, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 4, + 0, + 3, + 2, + 1, + 2, + 2, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 680, + 1145, + 574, + 694, + 744, + 475, + 671, + 510, + 445, + 756, + 685, + 932, + 755, + 572, + 580, + 1140, + 1020, + 734, + 971 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 84, + 8, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4340, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 8, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 17039, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 4, + 0, + 0, + 4, + 1, + 1, + 0, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 575, + 942, + 588, + 618, + 520, + 577, + 719, + 484, + 430, + 763, + 1068, + 1250, + 577, + 906, + 1040, + 874, + 896, + 1394 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4403, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 9, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11016, + "livesLostByWave": [ + 0, + 0, + 2, + 3, + 2, + 0, + 2, + 2, + 1, + 1, + 1, + 3, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 739, + 487, + 427, + 297, + 389, + 313, + 805, + 750, + 543, + 930, + 973, + 1466, + 965 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 70, + 34, + 15, + 10, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2869, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 10, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 11834, + "livesLostByWave": [ + 0, + 0, + 2, + 1, + 1, + 0, + 0, + 3, + 0, + 2, + 0, + 5, + 3, + 2, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 394, + 919, + 880, + 563, + 482, + 399, + 420, + 519, + 846, + 518, + 529, + 890, + 1039, + 1292 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 13, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3138, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 11, + "outcome": "defeat", + "finalWave": 13, + "survivalTicks": 12543, + "livesLostByWave": [ + 0, + 4, + 1, + 1, + 2, + 2, + 0, + 3, + 1, + 0, + 3, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 536, + 434, + 493, + 1332, + 1100, + 850, + 472, + 1011, + 1240, + 1037, + 965, + 1314 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 38, + 21, + 13, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2915, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 12, + "outcome": "cap", + "finalWave": 20, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 2, + 0, + 2, + 1, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 558, + 440, + 699, + 391, + 853, + 1251, + 594, + 1029, + 439, + 404, + 522, + 1035, + 580, + 1053, + 984, + 635, + 953, + 1083, + 815 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 37, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4315, + "totalPlayerDeaths": 14 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 13, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11876, + "livesLostByWave": [ + 0, + 0, + 4, + 3, + 1, + 0, + 0, + 2, + 2, + 2, + 1, + 0, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 410, + 464, + 501, + 409, + 706, + 470, + 1120, + 945, + 723, + 770, + 544, + 1434, + 1409 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 38, + 17, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2882, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 14, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12011, + "livesLostByWave": [ + 0, + 1, + 3, + 1, + 0, + 4, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 3, + 1, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 605, + 321, + 467, + 469, + 459, + 530, + 595, + 575, + 851, + 809, + 559, + 834, + 893, + 1355 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 94, + 34, + 22, + 10, + 6, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3032, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 15, + "outcome": "defeat", + "finalWave": 9, + "survivalTicks": 8229, + "livesLostByWave": [ + 0, + 4, + 1, + 4, + 1, + 3, + 0, + 1, + 5, + 1 + ], + "waveClearTicks": [ + 0, + 673, + 899, + 842, + 518, + 1234, + 961, + 602, + 1035 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 19, + 6, + 4, + 3, + 2, + 1, + 0 + ], + "totalAlienShots": 1698, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 16, + "outcome": "defeat", + "finalWave": 15, + "survivalTicks": 15596, + "livesLostByWave": [ + 0, + 0, + 4, + 3, + 2, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 3, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 464, + 864, + 643, + 1173, + 843, + 1035, + 556, + 1241, + 822, + 1328, + 913, + 958, + 1731, + 1009 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 88, + 27, + 9, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3824, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 17, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 1, + 1, + 0, + 2, + 1, + 0, + 3, + 0, + 2, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 559, + 1172, + 427, + 497, + 644, + 652, + 536, + 623, + 569, + 414, + 553, + 829, + 598, + 596, + 722, + 452, + 1321, + 626, + 866, + 864 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 83, + 25, + 18, + 10, + 9, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4814, + "totalPlayerDeaths": 19 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 18, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 0, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 651, + 650, + 642, + 530, + 872, + 514, + 376, + 636, + 582, + 582, + 791, + 768, + 846, + 460, + 1111, + 529, + 1141, + 747, + 1014, + 868, + 624 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 17, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4839, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 19, + "outcome": "cap", + "finalWave": 24, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 402, + 590, + 433, + 392, + 837, + 496, + 405, + 453, + 416, + 577, + 535, + 975, + 980, + 964, + 951, + 602, + 541, + 891, + 820, + 849, + 576, + 665, + 580 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 89, + 28, + 12, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4739, + "totalPlayerDeaths": 12 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 20, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6252, + "livesLostByWave": [ + 0, + 1, + 2, + 1, + 6, + 3, + 2, + 3, + 2 + ], + "waveClearTicks": [ + 0, + 470, + 528, + 509, + 714, + 586, + 850, + 1258 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 26, + 6, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 1529, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 21, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10297, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 3, + 0, + 0, + 4, + 2, + 3, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 457, + 597, + 1329, + 565, + 665, + 838, + 533, + 995, + 733, + 853, + 929 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 21, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2498, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 22, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 17491, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 1, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 599, + 471, + 400, + 441, + 668, + 1045, + 1178, + 533, + 627, + 624, + 796, + 985, + 593, + 884, + 551, + 685, + 828, + 1065, + 1226 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 15, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4684, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 23, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15758, + "livesLostByWave": [ + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 0, + 3, + 1, + 2, + 0, + 0, + 2, + 2, + 1, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 470, + 499, + 822, + 664, + 955, + 674, + 445, + 854, + 797, + 525, + 495, + 821, + 1009, + 820, + 1182, + 951, + 1197 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 21, + 7, + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3842, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 24, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14857, + "livesLostByWave": [ + 0, + 0, + 4, + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 4, + 0, + 2, + 1, + 0, + 1, + 4 + ], + "waveClearTicks": [ + 0, + 679, + 619, + 907, + 683, + 513, + 387, + 435, + 562, + 788, + 748, + 1045, + 614, + 1330, + 775, + 504, + 831 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 24, + 13, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3859, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 25, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13935, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 2, + 0, + 0, + 1, + 1, + 1, + 4, + 0, + 2, + 2, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 425, + 350, + 610, + 669, + 611, + 505, + 504, + 739, + 548, + 540, + 1239, + 1052, + 950, + 1132, + 1650 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 35, + 10, + 6, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3405, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 26, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10676, + "livesLostByWave": [ + 0, + 0, + 5, + 0, + 0, + 3, + 0, + 2, + 2, + 2, + 4, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 479, + 835, + 474, + 364, + 896, + 680, + 562, + 865, + 891, + 1053, + 1006 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 82, + 10, + 8, + 6, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2868, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 27, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 13464, + "livesLostByWave": [ + 0, + 0, + 1, + 0, + 0, + 2, + 0, + 1, + 0, + 1, + 5, + 0, + 3, + 2, + 1, + 1, + 3 + ], + "waveClearTicks": [ + 0, + 424, + 580, + 567, + 410, + 501, + 492, + 1398, + 455, + 548, + 838, + 452, + 875, + 767, + 952, + 1271 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 86, + 15, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3478, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 28, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 12677, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 4, + 0, + 1, + 0, + 0, + 2, + 2, + 2, + 3, + 3 + ], + "waveClearTicks": [ + 0, + 460, + 934, + 567, + 577, + 491, + 456, + 342, + 622, + 457, + 923, + 587, + 407, + 1035, + 552, + 444, + 1015 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 80, + 12, + 6, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3251, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 29, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 10294, + "livesLostByWave": [ + 0, + 2, + 1, + 0, + 1, + 3, + 1, + 0, + 5, + 0, + 3, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 742, + 666, + 516, + 415, + 966, + 544, + 640, + 968, + 860, + 977, + 1399 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 61, + 26, + 14, + 9, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2176, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 30, + "outcome": "cap", + "finalWave": 23, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 0, + 1, + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 2, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 438, + 712, + 882, + 451, + 878, + 482, + 575, + 451, + 582, + 863, + 418, + 682, + 493, + 563, + 645, + 652, + 1062, + 1240, + 547, + 391, + 832, + 746 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 20, + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4572, + "totalPlayerDeaths": 13 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 31, + "outcome": "defeat", + "finalWave": 12, + "survivalTicks": 9998, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 2, + 1, + 3, + 1, + 2, + 1, + 2, + 0, + 4 + ], + "waveClearTicks": [ + 0, + 465, + 560, + 662, + 642, + 657, + 926, + 547, + 1056, + 587, + 768, + 830 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 79, + 30, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2469, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 32, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 12194, + "livesLostByWave": [ + 0, + 3, + 0, + 1, + 0, + 0, + 0, + 2, + 0, + 1, + 3, + 2, + 1, + 2, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 549, + 429, + 586, + 461, + 420, + 460, + 930, + 408, + 771, + 823, + 738, + 926, + 978, + 576, + 835 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 36, + 15, + 6, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3381, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 33, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 14837, + "livesLostByWave": [ + 0, + 0, + 3, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 3, + 5, + 3 + ], + "waveClearTicks": [ + 0, + 440, + 471, + 873, + 889, + 542, + 492, + 458, + 589, + 354, + 791, + 317, + 957, + 687, + 753, + 816, + 600, + 878, + 945 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 81, + 36, + 10, + 2, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3683, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 34, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11361, + "livesLostByWave": [ + 0, + 1, + 1, + 0, + 1, + 6, + 1, + 0, + 0, + 0, + 2, + 3, + 2, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 469, + 426, + 373, + 447, + 775, + 803, + 530, + 1342, + 655, + 670, + 652, + 1124, + 1156 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 27, + 22, + 13, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2808, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 35, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15039, + "livesLostByWave": [ + 0, + 0, + 5, + 0, + 0, + 1, + 0, + 1, + 2, + 1, + 0, + 0, + 1, + 2, + 1, + 0, + 3, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 488, + 686, + 609, + 568, + 582, + 405, + 813, + 777, + 672, + 589, + 593, + 593, + 889, + 1165, + 1101, + 908, + 1185 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 52, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3614, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 36, + "outcome": "defeat", + "finalWave": 14, + "survivalTicks": 11018, + "livesLostByWave": [ + 0, + 1, + 0, + 2, + 0, + 2, + 2, + 3, + 0, + 0, + 4, + 1, + 1, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 553, + 883, + 422, + 473, + 450, + 502, + 661, + 587, + 587, + 733, + 668, + 757, + 1107 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 16, + 6, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2696, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 37, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 13908, + "livesLostByWave": [ + 0, + 2, + 2, + 1, + 1, + 1, + 3, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 3, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 474, + 480, + 646, + 443, + 664, + 856, + 549, + 521, + 866, + 918, + 611, + 777, + 675, + 1061, + 1042, + 1046 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 31, + 8, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3536, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 38, + "outcome": "defeat", + "finalWave": 8, + "survivalTicks": 6806, + "livesLostByWave": [ + 0, + 2, + 6, + 1, + 2, + 1, + 4, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 509, + 545, + 666, + 1166, + 1081, + 734, + 1045 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 65, + 24, + 14, + 10, + 7, + 2, + 0 + ], + "totalAlienShots": 1508, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 39, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 16303, + "livesLostByWave": [ + 0, + 3, + 5, + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 1, + 2, + 0, + 1, + 0, + 0, + 1, + 2 + ], + "waveClearTicks": [ + 0, + 642, + 604, + 492, + 853, + 770, + 454, + 522, + 730, + 842, + 1020, + 1502, + 977, + 873, + 924, + 1383, + 962 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 76, + 33, + 19, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4338, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 40, + "outcome": "defeat", + "finalWave": 7, + "survivalTicks": 6504, + "livesLostByWave": [ + 0, + 4, + 2, + 6, + 1, + 3, + 3, + 1 + ], + "waveClearTicks": [ + 0, + 515, + 862, + 827, + 826, + 658, + 1657 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 77, + 14, + 3, + 0, + 0, + 0 + ], + "totalAlienShots": 1495, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 41, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14816, + "livesLostByWave": [ + 0, + 0, + 2, + 1, + 2, + 3, + 0, + 1, + 0, + 1, + 3, + 1, + 0, + 1, + 4, + 0, + 1 + ], + "waveClearTicks": [ + 0, + 601, + 593, + 989, + 540, + 598, + 503, + 832, + 425, + 988, + 768, + 1101, + 830, + 671, + 1010, + 1139 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 66, + 23, + 9, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4010, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 42, + "outcome": "defeat", + "finalWave": 19, + "survivalTicks": 14522, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 1, + 4, + 2, + 0, + 0, + 0, + 1, + 2, + 0, + 0, + 3, + 1, + 1, + 2, + 2, + 1 + ], + "waveClearTicks": [ + 0, + 640, + 684, + 951, + 708, + 721, + 603, + 621, + 449, + 463, + 594, + 452, + 397, + 339, + 634, + 745, + 727, + 1172, + 973 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 68, + 26, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3924, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 43, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 14537, + "livesLostByWave": [ + 0, + 3, + 0, + 0, + 0, + 3, + 3, + 2, + 2, + 0, + 0, + 0, + 1, + 0, + 3, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 468, + 470, + 547, + 469, + 750, + 480, + 1041, + 736, + 884, + 552, + 587, + 1107, + 567, + 936, + 1226, + 1275 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 67, + 22, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3699, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 44, + "outcome": "defeat", + "finalWave": 16, + "survivalTicks": 14398, + "livesLostByWave": [ + 0, + 0, + 2, + 0, + 3, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 1, + 1, + 3, + 4, + 2 + ], + "waveClearTicks": [ + 0, + 652, + 913, + 440, + 636, + 540, + 654, + 432, + 1092, + 1240, + 767, + 795, + 474, + 786, + 1174, + 966 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 73, + 23, + 12, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3424, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 45, + "outcome": "defeat", + "finalWave": 20, + "survivalTicks": 16749, + "livesLostByWave": [ + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 1, + 0, + 0, + 2, + 0, + 0, + 0, + 2, + 1, + 1, + 4, + 3, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 615, + 670, + 559, + 517, + 556, + 799, + 391, + 422, + 540, + 1113, + 463, + 794, + 428, + 561, + 566, + 1437, + 867, + 1009, + 1305 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 24, + 12, + 9, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4309, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 46, + "outcome": "defeat", + "finalWave": 11, + "survivalTicks": 10239, + "livesLostByWave": [ + 0, + 4, + 0, + 5, + 2, + 1, + 1, + 2, + 1, + 2, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 505, + 430, + 670, + 673, + 670, + 477, + 1045, + 1251, + 973, + 1669 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 71, + 35, + 11, + 11, + 5, + 2, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 2423, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 47, + "outcome": "defeat", + "finalWave": 18, + "survivalTicks": 15181, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 1, + 2, + 0, + 1, + 1, + 1, + 0, + 1, + 3, + 2, + 2, + 1, + 1, + 0, + 2 + ], + "waveClearTicks": [ + 0, + 556, + 668, + 661, + 589, + 622, + 360, + 968, + 466, + 491, + 1028, + 821, + 771, + 754, + 506, + 1262, + 1046, + 1076 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 74, + 19, + 6, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3815, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 48, + "outcome": "cap", + "finalWave": 21, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 3, + 4, + 2, + 0, + 1, + 1, + 1 + ], + "waveClearTicks": [ + 0, + 650, + 672, + 426, + 375, + 416, + 1223, + 715, + 464, + 800, + 453, + 553, + 439, + 598, + 462, + 502, + 899, + 814, + 1178, + 1476, + 920 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 87, + 32, + 15, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4360, + "totalPlayerDeaths": 19 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 49, + "outcome": "defeat", + "finalWave": 17, + "survivalTicks": 12073, + "livesLostByWave": [ + 0, + 0, + 0, + 2, + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 1, + 1, + 1, + 2, + 0, + 2, + 2 + ], + "waveClearTicks": [ + 0, + 652, + 605, + 497, + 520, + 505, + 386, + 414, + 402, + 367, + 698, + 521, + 762, + 595, + 802, + 787, + 1082 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 78, + 35, + 15, + 6, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 3064, + "totalPlayerDeaths": 20 + }, + { + "configName": "ship-v2.2", + "playerCount": 4, + "botPolicy": "competent", + "seed": 50, + "outcome": "cap", + "finalWave": 22, + "survivalTicks": 18000, + "livesLostByWave": [ + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 3, + 2, + 1, + 0, + 2, + 3, + 2, + 3 + ], + "waveClearTicks": [ + 0, + 532, + 1096, + 535, + 705, + 543, + 1007, + 592, + 690, + 331, + 451, + 547, + 707, + 375, + 560, + 458, + 680, + 690, + 710, + 881, + 1486, + 1180 + ], + "barrierHpAtWaveStart": [ + 0, + 144, + 75, + 10, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "totalAlienShots": 4731, + "totalPlayerDeaths": 19 + } + ] +} \ No newline at end of file