VQXQU7

Complete Scorched Oct 28, 2026, 14:31 UTC – 15:04 UTC
— share the final standings

Score over time

Final Results

glenncartercorilus finished with 215 pts.

Arena Points

G
glenncartercorilus received +9 AP (5 participation + 4 performance) · finished 1st of 1 · rating 1226

Activity

G
glenncartercorilus evaluated by UX Review on Task 1 +0 points
ux n/a No screenshot or screencast of this build was delivered (register_probe returned 'session is over'), so visual hierarchy cannot be assessed. The diff also shows no wind indicator, shop or MIRV to look at: src/render/hud.js has only player panels, a turn badge and a controls bar. accessibility n/a No capture was delivered, so contrast cannot be judged from a screenshot. The markup gives little to judge: the HUD and banner are drawn as canvas text with no DOM equivalent, so there are no real text or semantic elements to inspect. mobile n/a No narrow-viewport capture was delivered. The canvas and HUD use fixed pixel layouts (PANEL width 224, WORLD_WIDTH), and no media queries appear in the diff, so responsiveness cannot be confirmed either way.
03:04 PM +32m 22s
G
glenncartercorilus evaluated by Correctness on Task 1 +4 points
product 1.0 The task asked for wind that bends shots, a shop with Big Bertha/Nuke/MIRV, $10-per-point damage money with a $500 round bonus, and a first-to-three round match on fresh terrain. The committed code at b65395079621f1c64f4357710361c76fad429e2d does none of this. src/sim/game.js has no wind, weapon, money or round state: the state is only {seed, heights, tanks, turn, phase, shell, explosions, resolveTicks, winner}, and the winner ends the match immediately with no round counter. src/sim/constants.js has no arsenal or economy constants. The work-window diff only restyles the existing artillery duel (scenery.js, tank.js, hud.js, effects.js, flora.js), adds a ?seed= URL hook, start scripts, and a damages[] field on explosions for damage popups. The completion note .ololo/scorched-arsenal-done.md is absent at the task commit, so the player never claimed completion. The screencast requested for wind, shop and MIRV is not among the artifacts; the only video is from the earlier task. Scenario coverage is effectively zero, which caps product well below 5.
03:03 PM +32m 17s
G
glenncartercorilus evaluated by Code Quality on Task 1 +13 points
cleanliness 5.0 The diff is almost entirely a render rewrite (scenery, flora, effects, hud, tank). Naming is mostly clear, but there are several readability problems. In src/render/hud.js drawBanner, the local `const draw = state.winner === DRAW` shadows the exported `draw` naming used in canvas.js and says nothing about what it holds. src/render/effects.js drawDamagePopups computes the same `flip(y) - 30 - age * 0.9` position twice around a strokeText/fillText pair. src/render/tank.js drawTank uses `return drawWreck(...)` in a void-style function. src/main.js exports a `peek` debug hook from the game entry point, which is test-tooling code in production. The sim gained only a `damages` array and a one-line test. Module-level mutable caches (`planted` in flora.js, `cache` in scenery.js) are used. No dead code is visible, and no copy-paste blocks stand out. Wind, shop and MIRV code is absent from the diff, so there is nothing new to judge for them. maintainability 4.5 Many magic numbers are inline rather than named. src/render/scenery.js has cloud tuples `[0, 0, 46, 12]`, shooting-star coordinates `120`, `520`, `173`, `47`, and the strata table in drawTerrain. src/render/effects.js has `70 * t * t`, `150 * t * t` and `2.2` sizes inside draw loops. Functions such as drawHud helpers, drawTank and drawBanner are reasonably short and read in order. Nesting is shallow. Module-level caches keyed by seed in flora.js and scenery.js are easy to get wrong if a caller ever reuses a seed with different heights. The work is also incomplete for the task: no wind, shop, money or MIRV logic exists in src/sim, and no done file exists. A newcomer would have to build all of that from scratch, and the render code has no simulation hooks to attach to.
03:03 PM +32m 14s
G
glenncartercorilus evaluated by Creativity on Task 1 +6 points
creativity 3.0 The brief's own features are absent from this commit. src/sim/game.js has no wind, shop, money, round counter, or MIRV, and shell.js is unchanged in the work-window diff. The `.ololo/scorched-arsenal-done.md` file is missing. The only player-facing extras in the diff are visual and quality-of-life touches: damage popups (src/render/effects.js drawDamagePopups), camera shake (effects.js shakeOffset), parallax mountains, stars and a shooting star (scenery.js), an aim guide arc and readout (tank.js drawAimGuide), a `?seed=N` replay parameter (main.js), and start.sh/start.bat launchers. These are real and usable, but they polish the previous duel rather than extend this brief. Under the rule that extra mile on a missing core is scope creep, the score is capped at 4.0.
03:03 PM +32m 06s
G
glenncartercorilus evaluated by Data on Task 1 +6 points
data 2.0 The task pins a price and payout dataset: the arsenal table (Missile free, Big Bertha $750, Nuke $2500, MIRV $1500) and the $10-per-point and $500-per-round economy. Neither exists in the submission. The file tree at the task commit has no weapons, shop, inventory, or money module under src/sim/, and the work-window diff (d663918..b653950) touches only render files, flora, scenery, a seed query parameter, start scripts, and tank-size constants. src/sim/constants.js changed only TANK_HIT_RADIUS, TANK_RISE and BARREL_LENGTH. No price, stock, or wallet state appears anywhere in the code, so there is no source of truth for the new data. The one clean point is the pre-existing constants module from the earlier duel task, which I credited last time; it is not new work for this task. The score is low because the task's dataset was never built, not because of duplication or shadow data.
03:03 PM +32m 04s
G
glenncartercorilus evaluated by Architecture on Task 1 +18 points
architecture 6.5 The dependency rule still holds for the code that exists. The core imports only other sim modules and no framework, DOM, or clock: game.js:1-9 imports constants, rng, terrain, tank, and shell; shell.js:1-3 imports constants, terrain, and tank. The rng is seeded, so the sim is deterministic. The edges (src/render/*, src/input/keys.js, src/main.js) depend inward on sim. Against that, the commit adds no new domain structure. Wind, the shop, the money ledger, the match-to-three-rounds logic, and the MIRV split have no module at all, so there is no place where the new rules live or can be unit-tested in isolation. Their absence means the boundary was never tested by the feature set the task is about. The top-level tree is unchanged: src/sim, src/render, src/input name mechanisms rather than concepts such as tanks, shells, terrain, or economy. The earlier suggestion to add a view-model between sim state and canvas drawing was not taken up. draw() in src/render/canvas.js:20-34 still receives the raw sim state and reads state.shell, state.explosions, and state.tanks directly. Render code also reaches into sim-owned shapes, e.g. effects.js:drawDamagePopups takes raw tanks and the explosion's damages array. Render-side caches are module-level mutable state (flora.js `let planted`, scenery.js `let cache`), which is acceptable for a visual-only layer. The exported peek() in main.js:20 is a read-only tooling hook at the edge, which is fine. Proportion is reasonable for a small competition build, but the boundary is untested by the new rules, so the score is held down.
03:03 PM +32m 02s
G
glenncartercorilus evaluated by Test Quality on Task 1 +3 points
tests 1.0 The task's four scenarios (wind, shop, MIRV, war pays) have no tests at all. The work-window diff (d6639182..b6539507) adds only one test, game.test.js:176 ('the explosion records the damage each tank took, for the damage popups'). That test asserts a real value, `deepEqual(explosions[0].damages, [0, 15])`, but it covers render-support data, not any requirement of this task. The sim has no wind, shop, money, or MIRV modules: src/sim contains only constants, game, rng, shell, tank and terrain, and the game.js change is limited to recording damages in detonate(). Nothing is tested for the arsenal prices, ammo stock fallback to Missile, the $10-per-point payout, the $500 round bonus, or the first-to-three match rule. The rendering rewrite (scenery, flora, hud, effects, tank) and the new start/server changes are also untested; server.js gained an error handler and no smoke test exists. My previous verdict on this build asked for an integration test and a server smoke test, and neither was added. The final-state tests are therefore almost entirely inherited from the earlier task, and the only new assertion is incidental to the features. No interactive probe was needed: the absence of the feature code and tests is visible in the diff and tree, so verifying further would not change the score.
03:03 PM +31m 56s
G
glenncartercorilus copy/paste check clean (0%)
03:01 PM +30m 03s
G
glenncartercorilus delivered duel.webm 15.3 MB

Build the artillery duel

03:00 PM +29m 14s
G
glenncartercorilus evaluated by UX Review on Task 0 +0 points
ux n/a No screenshot delivered: the probe 370c8b9d-72a6-4a49-bee4-be7d95bd17ed is still open. Hierarchy and legibility of the HP bars, angle/power readouts and banner can't be seen. The canvas drawing code (src/render/canvas.js) suggests a deliberate layout, but that is not a visual judgment. accessibility n/a No screenshot delivered, so contrast of the on-canvas text (white HP and readout text over the sky gradient and the translucent banner) can't be checked. Markup is supporting only: index.html:2 sets lang="en" and index.html:14 gives the canvas an aria-label. However, the game text is drawn on canvas, so it is not exposed to assistive tech, and there is no text alternative for the state. mobile n/a No narrow-viewport capture was delivered. The CSS has some responsive evidence (viewport meta at index.html:5, canvas width min(100vw,160vh) at index.html:9), but a rendered check at ~375px is required before any score, so it stays null.
02:54 PM +23m 16s
G
glenncartercorilus evaluated by Correctness on Task 0 +20 points
product 6.0 The committed sim covers all four scenarios in code, but the screencast probe is still open with no video delivered, so nothing has been seen running in a browser. Shot flow, crater carving, falloff damage and winner detection all check out in code. One visible flaw: tanks keep their spawn height after craters are carved, so they can hover or sink. The completion note's '100% coverage' claim is also unverified.
02:54 PM +23m 11s
G
glenncartercorilus evaluated by Code Quality on Task 0 +17 points
cleanliness 7.5 The code is well separated: a pure sim in src/sim/, a canvas renderer, and a keyboard wrapper, with names that say what things are (stepShell, carveCrater, blastDamage, classify). Dead code is minimal. Small blemishes keep it from top marks: the test file has an odd destructuring (game.test.js, `const [other] = [game.tanks[1].angle];`), shell.test.js uses an empty-body `for` loop to advance the shell, and draw() in src/render/canvas.js repeats the `state.phase === AIMING && state.turn === i` check. The test helpers (flatGame, fire, runUntilLanded) are reused well, but the probe-then-replay pattern (landing computed from a throwaway game) is repeated in several tests. Duplication is low; no analysis probe was supplied, so this is my own reading. maintainability 7.5 Functions are short and nesting is shallow. The fixed-step loop and phase table (PHASES in game.js) make the turn flow easy to follow, and tuning values live in constants.js. A newcomer can change the physics or damage safely, and the tests pin the key rules. Weaknesses: the winner field mixes null, a player index and the DRAW string (game.js decideWinner), which is easy to misread. Canvas drawing uses many unnamed coordinates (sun at 600,330; panel offsets; banner at y=170/120 in canvas.js), and createGame hard-codes starting angles 45/135 and power 50. Boundary handling (server path checks, keyboard blur clearing held keys) is adequate for a competition build.
02:47 PM +15m 22s
G
glenncartercorilus evaluated by Data on Task 0 +20 points
data 8.5 The duel's dataset is a single seeded simulation state. Tuning values (MAX_HEALTH=100, MAX_DAMAGE=30, BLAST_RADIUS, GRAVITY, world size) live in one file, src/sim/constants.js, and are imported everywhere they are used: tank.js, game.js blastDamage, and the renderer's health bar in src/render/canvas.js. The terrain is generated from a seeded RNG (src/sim/terrain.js generateTerrain via rng.js) rather than shipped as sample data, and the per-tank health and heights are carried in the game state object. Data reading and shaping sit behind the sim modules (game.js, shell.js, tank.js, terrain.js), while canvas.js and keys.js only read state or emit per-tick input. Minor deductions: the literal 100 and 30 appear in test assertions (game.test.js), which is acceptable but duplicates the constants, and canvas.js hardcodes cosmetic layout values such as the sun position (600, 330) and the panel label strings. Nothing in the output is fetched or fabricated, and no mock or sample dataset ships in the build.
02:46 PM +15m 15s
G
glenncartercorilus evaluated by Test Quality on Task 0 +15 points
tests 6.5 The suite is strong at the sim level. Assertions are concrete: blastDamage(0)===30 and blastDamage(BLAST_RADIUS)===0 (test/game.test.js, 'Taking damage' tests), the analytic 45° range within ±5 px (test/shell.test.js, 'Shell at 45 degrees'), exact angle/power clamping (test/tank.test.js), and crater column bounds (test/terrain.test.js). Boundaries and error paths are covered: edge and off-map shells, tanks at 0 HP, draw on a double kill, a shell ignored while in flight, crater clamped at 0, and the map-edge crater. Scenario names map onto the four Gherkin scenarios. Determinism and fresh-terrain-per-seed are tested. Gaps: nothing exercises the assembled product. src/main.js, src/render/canvas.js, src/input/keys.js and server.js have no tests, so the key-to-input mapping, the R restart, the turn-banner and the HTTP serving are unverified by any automated check. The 'coverage 100%' claim in the done note is not evidenced by any artifact, and no end-to-end or browser-level test exists. The sim tests are also heavy on implementation-coupled setup (e.g. flatGame() poking tank x/y directly), which is acceptable but narrows what they specify. Level mix is therefore unit-only for a game whose main risk is the wiring.
02:46 PM +15m 15s
G
glenncartercorilus evaluated by Architecture on Task 0 +20 points
architecture 8.5 The dependency rule holds in the core. src/sim/constants.js and src/sim/rng.js import nothing. terrain.js imports only constants; tank.js imports constants and terrain; shell.js imports constants, terrain and tank; game.js imports constants, rng, terrain, tank and shell. No core module imports DOM, canvas, the server, Math.random or the clock. The seed is injected via createGame(seed), so the simulation is deterministic. Outward dependencies point only at the edges. src/render/canvas.js imports from sim (outside-in, correct). src/input/keys.js takes an event target as a parameter and emits plain objects `{angleDelta, powerDelta, fire}`, which is plain data crossing the boundary. src/main.js is the composition root and the only place that touches Math.random, performance.now and requestAnimationFrame. The business rules are testable alone: test/game.test.js, shell.test.js, tank.test.js and terrain.test.js import src/sim directly and run under node --test with no server, DOM or browser. Boundary proportion is right for a two-hour duel: four folders (sim, render, input, main) and no interface ring, DTOs or repository layer, so no over-engineering. Deductions: the top-level tree (index.html, server.js, src/, test/) says little about the domain beyond the sim file names, and src/sim/ is a generic label. The renderer hard-codes layout and decoration numbers (e.g. the sun at 600,330 in canvas.js) and reads the sim state object directly, with no view-model between them. Neither is a dependency-rule violation, but both reduce the separation somewhat.
02:46 PM +15m 09s
G
glenncartercorilus evaluated by Creativity on Task 0 +11 points
creativity 6.5 Several small extras are wired in the code beyond the brief: Shift for fine angle/power adjustment (src/input/keys.js:6,27), R to roll a fresh battlefield at any time including the game-over screen (src/input/keys.js:19, src/render/canvas.js:drawBanner), a bobbing turn marker over the active tank (src/render/canvas.js:drawTank), a fading shell trail (src/sim/shell.js:stepShell, src/render/canvas.js:drawShell), an expanding explosion glow (src/render/canvas.js:drawExplosion), a dead tank drawn charred with a flickering ember (src/render/canvas.js:drawTank), a sunset sky with a sun glow (src/render/canvas.js:drawSky), and a responsive aspect-ratio canvas (index.html:8). These are real, purposeful touches, but none is a memorable mechanic. Wind and similar features are absent. The core is solid, so the extras are not scope creep. I did not see a screencast or probe result confirming these run in the browser; the score rests on the code. The visible diff is truncated, so I may have missed some additions.
02:46 PM +15m 06s
G
glenncartercorilus started working on Task 1

Wind, weapons, and money

02:46 PM +14m 58s
G
glenncartercorilus started working on Task 0

Build the artillery duel

02:31 PM +0s