CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
翻译准备中
Kodeida — a game where your code moves the hero: LeetCode techniques in the worlds of Ukrainian literature. TypeScript, JavaScript and Python, offline.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗You write a function with a real LeetCode signature. The world runs it step by step: Aeneas walks, Mykyta points at the cells your code reads, and the Greedy Wolf shows how many steps brute force would take. No AI hints — the code is yours.
Solve a real problem and watch every step. Dido's problem is LeetCode 11, Container With Most Water. Run shows the two pointers moving across the posts; Judgement runs the hidden tests, including 10,000 posts, and compares your code with the Wolf's brute force.
The story begins on Olympus. The gods feast around the Crystal Pysanka until Juno and Aeolus break it, and its shards scatter into books of Ukrainian literature. Every character speaks: ten cutscenes lead into the first lines of code.
Sixteen worlds, six songs. Each world is one technique, from arrays and two pointers to graphs and dynamic programming. Nine of them are playable now: worlds 0–8.
Never coded? Start with the ABC. The menu asks whether you can code. From scratch opens the ABC: the Sibyl teaches Aeneas on Ukrainian fairy tales the night before Troy falls, in Python, JavaScript or TypeScript, and every printed line appears on a scroll.
Most coding sites hand you problems. Kodeida teaches you to recognise the technique inside a problem and understand why it works.
Languages: TypeScript, JavaScript and Python (via Pyodide, bundled, works offline) today, then C#, C++ and Go. The interface is in Ukrainian and English. The game works offline.
A new player answers one question in the main menu: can you code?
| Answer | Where it leads |
|---|---|
| 🌱 No, from scratch | The ABC — a separate track for adults who are learning their first language. Pick Python, JavaScript or TypeScript: every lesson is written for that language, and the program's output appears line by line on a scroll. The Sibyl teaches Aeneas on Ukrainian fairy tales the night before Troy falls; when the ABC is done, the story moves on to world 0. |
| 🧭 A little | The intro and world 0, Ashes of Troy: one new idea per exercise — a command, a loop, a condition, a counter. |
| ⚔️ Yes, give me problems | The intro, then straight to world 1, Sea of Aeolus. World 0 stays open for review. |
Whichever way you choose, the Sibyl shows you around the interface on your first exercise. Change level in the menu reopens the choice without losing progress, and the ABC is always one click away in the sidebar.
| System | File | Note |
|---|---|---|
| macOS · Apple Silicon | Kodeida-…-arm64.dmg | signed and notarized |
| macOS · Intel | Kodeida-…-x64.dmg | from 0.1.2 |
| Windows 10/11 | Kodeida-Setup-….exe | not signed yet: SmartScreen may ask you to confirm |
| Linux | Kodeida-….AppImage | chmod +x and run |
All files are on the latest release; the website picks the right one for your system.
The game updates itself. It checks for a new version on start and every 6 hours, downloads it in the background and installs it on restart. You can also check by hand: Kodeida → Check for Updates… in the macOS menu (Help on Windows and Linux), or Settings → Updates.
Pre-alpha, ready for the first playtest.
enei.move() to Combination Sum in hell, with tests, hints, stars and the Wolf comparison. Cutscenes between worlds. Every problem is written so a 15-year-old can follow it: new terms explained, a worked example, no 10⁴-style constraints.The technical plan is in docs/MVP.md.
We are looking for 10–20 people, mostly students and juniors who are afraid of algorithms. The question we want to answer: after world 2, can you solve the real Container With Most Water on LeetCode without the game?
maxArea(height: number[]): number. There is no special game API that does the thinking for you.Proxy that records every read and write. The recorded events are what the scene animates, and their count is what we compare with the Wolf.app/src/assets/art, drawn ×2 on a low-resolution grid with no smoothing. They were made with the PixelLab generator and then edited by hand (faces, heads pasted between frames, cleaned artefacts). Glow, water, smoke and snow on top are drawn in code (bgfx.ts). The first version of the art, drawn entirely from shapes in site/app.js, still renders the map, the UI and anything that has no new sprite yet.Requires Node.js 22 or newer.
cd app
npm install
npm run dev # in the browser: http://localhost:5173
npm start # build and open the Electron app
npm run selftest # engine and every level, without a browser
npm run typecheck
npm run sync-sprites # copy sprites, scenes and the map from site/app.js
npm run dist # installers for the current OS into app/release/
Environment variables: KODEIDA_USER_DATA=/tmp/kd starts with a fresh profile (onboarding from scratch); KODEIDA_SMOKE=1 runs a smoke test and exits; KODEIDA_SMOKE=update checks for updates in a packaged build.
The website has no build step:
cd site
python3 -m http.server 8000 # http://localhost:8000 and /artbook.html
The trailer, the release video and the Reels are built with Remotion in video/. They use the game's own art (npm run art copies it into public/art), and a script synthesises the music:
cd video
npm install
npm run sfx # sound effects → public/
npm run music # the trailer's and the release video's music
npm run art # the game's art and the site renders → public/art
npm run record # game footage at 2× (needs the game running, see CONTRIBUTING)
npm run dev # Remotion Studio: preview and edit
npx remotion render Trailer-uk out/kodeida-trailer-uk.mp4
See CONTRIBUTING.md for the site encode and the Reels cover.
app/ the game: Electron + React + TypeScript + Monaco
electron/ main process: window, app:// protocol, CSP, menu, auto-update
build/ icons, DMG background, installer art, entitlements
scripts/ selftest (engine and every level), sync-sprites (site → game)
src/engine/ sandbox Worker, runner, judge, no UI
src/levels/ worlds 0–8 as data, the ABC (abetka.ts), English texts, Book of Tricks
src/assets/art/ PNG sprites, animations and backgrounds (the new pixel art)
src/world/ art.ts (loads the art), scenes.ts (levels), cutscenes.ts, bgfx.ts (living backgrounds), sprites.js (generated from site/app.js)
src/ui/ screens: menu, onboarding, level, map, ABC, book, shirt, settings; story.ts — ABC cutscenes; DevScreen.tsx — dev panel (any level or cutscene, dev builds only)
site/ the website, deployed to GitHub Pages
index.html landing page (UA / EN)
artbook.html artbook (UA / EN): animations, screens, UI kit, onboarding, identity, motion
media/ the trailer (UA / EN), its posters; media/art/new — renders of the new art for the landing and the artbook
newart.js puts the new art on the landing and the artbook (app.js stays shared with the game)
app.js pixel-art renderer, scenes, journey map, i18n; the game imports it
style.css shared styles, light and dark themes
docs/
NOTES.md the original idea, decisions and plan
MVP.md technical plan of the MVP
BRAND.md brand book: name, mascot, palette, voice
LORE.md world, characters, the Crystal Pysanka
STORY.md the full campaign: 6 songs, 16 worlds, problems per world
ONBOARDING.md scene-by-scene script of the intro
media/ the logo and the GIFs in this README
video/ the trailer, the release video and the Reels (Remotion)
src/timeline.mjs the trailer laid out in bars, shared by the picture and the music
src/scenes/ trailer scenes; src/launch/ — the release video and the Reels
scripts/ music.mjs (synthesised soundtrack), record.mjs (game footage)
Every push to main that touches site/ redeploys GitHub Pages. To publish a release, bump the version in app/package.json and push a vX.Y.Z tag. See CONTRIBUTING.md.
Ideas, art, story, translations and accessibility feedback are welcome right now. The app is young and changes fast, so for code please open an issue first so we can agree on the approach. Start with CONTRIBUTING.md. By taking part you agree to the Code of Conduct.
Want to propose a new world? Use the World idea issue template: one work of Ukrainian literature in the public domain, one technique.
Security issues: report them privately, see SECURITY.md. Accessibility barriers are bugs, see ACCESSIBILITY.md.
Characters and settings are based on public-domain texts: Ivan Kotliarevsky (Eneida), Ivan Franko (Mykyta the Fox, The Painted Fox), Lesya Ukrainka (The Forest Song), Mykhailo Kotsiubynsky (Shadows of Forgotten Ancestors), Hryhorii Kvitka-Osnovianenko (The Konotop Witch) and Ukrainian folk tales. All designs are original; nothing is copied from film or cartoon adaptations.
app/, site/, workflows): Apache License 2.0.docs/, the pixel art in app/src/assets/art and site/media/, the images in docs/media/): CC BY-SA 4.0. The art was made with the help of PixelLab; see the license file for details.