{"categories":[{"id":"genre","options":[{"cost":"S — one loop, one input, one timer.","id":"arcade-reflex","name":"Arcade reflex","what":"Things fall, fly or rush; the player reacts. Score attack in short rounds."},{"cost":"S — counters and a shop list; the easiest complete game there is.","id":"clicker-idle","name":"Clicker / idle","what":"Tap to gain a counter; buy upgrades that gain it for you."},{"cost":"M — level design is the work, not the code.","id":"puzzle","name":"Puzzle","what":"A board, a rule, a solved state. Sliding, matching, sorting, logic."},{"cost":"M — gravity, collision and a camera; keep levels tile-based.","id":"platformer","name":"Platformer","what":"Run and jump across solid ground to a goal."},{"cost":"S–M — one spawner, one speed ramp.","id":"endless-runner","name":"Endless runner","what":"The world scrolls, obstacles come, distance is the score."},{"cost":"L — pathing, economy and balance all interact.","id":"tower-defense-lite","name":"Tower defense (lite)","what":"Enemies walk a path; the player places defenders between waves."},{"cost":"S code, M content — you must write or generate good questions.","id":"quiz-trivia","name":"Quiz / trivia","what":"Questions, answers, streaks. Content is the game."},{"cost":"S — the classic first game for a reason.","id":"breakout-pong","name":"Breakout / pong family","what":"Paddle, ball, bricks or an opponent. Physics you can hold in one hand."},{"cost":"S — rules are public knowledge; polish is the differentiator.","id":"snake-classic","name":"Snake / classics remake","what":"Snake, minesweeper-style grids, 2048-style merging — known rules, your skin."},{"cost":"S — a grid, a timer, a shuffle.","id":"memory-match","name":"Memory / match","what":"Flip, remember, match pairs against the clock."},{"cost":"M — needs a word list file (txt/json are allowed file types).","id":"word-game","name":"Word game","what":"Letter grids, anagrams, typing races."},{"cost":"L — writing and state management dominate.","id":"tiny-quest","name":"Tiny quest / RPG","what":"A small map, a few characters, a goal. Top-down or text-led."}],"title":"Genre — the shape of the game"},{"id":"mechanics","options":[{"cost":"S","id":"timed-rounds","name":"Timed rounds","what":"60–180 second rounds; score is final when the clock ends. Natural score-submit moment."},{"cost":"S","id":"lives","name":"Lives / health","what":"Mistakes cost a life; zero lives ends the run."},{"cost":"S — one timer and one multiplier variable.","id":"combo-multiplier","name":"Combo multiplier","what":"Quick successive successes multiply points; a miss resets."},{"cost":"S–M","id":"power-ups","name":"Power-ups","what":"Temporary boosts that spawn in play: slow time, double points, shield."},{"cost":"M","id":"waves","name":"Waves","what":"Escalating rounds of enemies/tasks with breathers between. Report waves with the score — the hub leaderboard stores both."},{"cost":"M — pattern scripting, not AI.","id":"boss-fight","name":"Boss fight","what":"One big patterned opponent at a milestone."},{"cost":"S — a seeded RNG; great for leaderboards.","id":"daily-seed","name":"Daily seed","what":"Everyone gets the same level/layout each day from a date seed."},{"cost":"M — guarantee solvability or it is not a game, it is a dice roll.","id":"procedural","name":"Procedural generation","what":"Levels/obstacles generated from a seed instead of hand-made."},{"cost":"M","id":"physics-lite","name":"Physics (lite)","what":"Gravity, bounce and velocity in ~50 lines. No physics library — remote code is not allowed."},{"cost":"S–M","hub_note":"If the currency should become real Grokonians, use the token-convert hook instead of inventing a second economy.","id":"resource-counter","name":"Resource counter","what":"Collect a currency in play; spend it in a between-round shop."},{"cost":"S","id":"risk-reward","name":"Risk / reward doubling","what":"Bank points safely, or gamble them on one more challenge."}],"title":"Core mechanics — what the player does moment to moment"},{"id":"controls","options":[{"cost":"S","id":"mouse-only","name":"Mouse only","what":"Move/click with the pointer. Simplest and phone-hostile — pair with tap."},{"cost":"S","id":"tap-click","name":"Tap / click anywhere","what":"One input: tap. Works on every device."},{"cost":"S","hub_note":"Required pattern is in the template's game.js.","id":"keyboard-arrows","name":"Arrow keys / WASD","what":"Classic movement. You MUST preventDefault arrows/space so the hub page does not scroll, and take focus on click."},{"cost":"S — pointer events cover mouse too.","id":"touch-drag","name":"Touch drag","what":"Drag to move — the phone-native scheme."},{"cost":"S","id":"pointer-follow","name":"Pointer follow","what":"The avatar follows the pointer/finger smoothly."},{"cost":"S","id":"one-button","name":"One button","what":"A single key/tap does everything (jump, flap, switch)."},{"cost":"M — an addition, never the only scheme.","id":"gamepad","name":"Gamepad-ready","what":"Also poll navigator.getGamepads. The hub frame allows gamepad."}],"title":"Control schemes — how the player drives it"},{"id":"art","options":[{"cost":"S — the template's approach.","id":"canvas-vector","name":"Canvas vector shapes","what":"Everything drawn with canvas paths. Zero image files, tiny size, always crisp."},{"cost":"S","id":"emoji-sprites","name":"Emoji sprites","what":"Emoji as sprites via fillText. Instant charm, zero assets."},{"cost":"S","id":"css-shapes","name":"CSS / DOM shapes","what":"The game is styled divs. Great for puzzles, quizzes, boards."},{"cost":"M — you draw sprites as string maps.","id":"pixel-canvas","name":"Pixel art on canvas","what":"A tiny offscreen canvas scaled up with image-rendering: pixelated."},{"cost":"M","id":"svg-inline","name":"Inline SVG","what":"Vector art written as SVG in the HTML. Scales perfectly."},{"cost":"M","hub_note":"The hub checker flags image-heavy games for human review (5+ images, or images over half the total bytes). Allowed — just expect the reviewer to look. Keep total size small.","id":"generated-images","name":"Generated image files","what":"AI-generated PNGs shipped in the folder."},{"cost":"S","id":"text-ascii","name":"Text / ASCII","what":"The game rendered as styled text. Deliberately retro."}],"title":"Art direction — what it looks like"},{"id":"audio","options":[{"cost":"S — start AudioContext on first user gesture or browsers mute you.","id":"webaudio-beeps","name":"WebAudio beeps","what":"Oscillator blips synthesized in code. No files, full control."},{"cost":"M","id":"oscillator-music","name":"Oscillator music loop","what":"A tiny sequencer playing notes on a timer."},{"cost":"M — watch total size; compress hard.","id":"audio-files","name":"Audio files (mp3/ogg/wav)","what":"Recorded or generated clips in the folder. Allowed file types."},{"cost":"S","id":"events-only","name":"Event sounds only","what":"Sounds on score/pickup/death, no music. The polite default."},{"cost":"—","id":"silent","name":"Silent","what":"No audio at all. Always acceptable; add a mute-respecting design later."}],"title":"Audio — what it sounds like"},{"id":"progression","options":[{"cost":"S","id":"score-only","name":"Score only","what":"One number, beaten or not. The leaderboard is the progression."},{"cost":"M","id":"levels","name":"Levels","what":"Discrete stages with a finish. Unlock the next by beating one."},{"cost":"S","id":"endless-escalation","name":"Endless escalation","what":"No finish; speed/density rises until the player falls."},{"cost":"S","id":"star-ratings","name":"Star ratings","what":"1–3 stars per level by performance thresholds."},{"cost":"S","hub_note":"Wrap localStorage in try/catch: hub-hosted (zip) games run in a sandbox without same-origin access and storage can throw. Linked games keep their own origin and storage works.","id":"local-best","name":"Local best (localStorage)","what":"Personal best kept in the browser."},{"cost":"M — same storage caveat as local-best.","id":"unlockables-local","name":"Local unlockables","what":"Skins/boards unlocked by lifetime totals, stored locally."}],"title":"Progression — why the player comes back"},{"id":"difficulty","options":[{"cost":"S","id":"flat","name":"Flat","what":"Same challenge throughout; score is endurance."},{"cost":"S","id":"ramp-linear","name":"Linear ramp","what":"Speed/spawn rate rises steadily with time or score."},{"cost":"S","id":"ramp-steps","name":"Step ramp (waves)","what":"Difficulty jumps at wave boundaries; breathers between."},{"cost":"S","id":"player-chosen","name":"Player-chosen","what":"A difficulty picker on the start screen."},{"cost":"M","id":"adaptive","name":"Adaptive","what":"Eases after deaths, tightens after streaks. Kind, and players feel it."}],"title":"Difficulty shape — how it gets harder"},{"id":"hub_hooks","options":[{"cost":"S — copy the template's bridge.","hub_note":"This is the hook players feel. Bad earn design (paying for clicks) still works mechanically — and reviewers and players both notice.","id":"earn-points","name":"Grokonian earn points","what":"Call Grokonians.earn(amount, reason) at real achievements — a level finished, a boss down, a round survived. Whole numbers, 1–10 per call, calls at least 1 second apart; the hub enforces caps of 300 per session and 200 per game per day. Queue and chunk exactly like the template does."},{"cost":"S","hub_note":"Set the rate on the submit form or the hub refuses conversions.","id":"token-convert","name":"Token conversion","what":"Your game has its own coin counter; Grokonians.convert(tokens, reason) turns them into Grokonians at the rate you set when submitting (more than 0, at most 10)."},{"cost":"S — three lines, in the template.","id":"leaderboard-score","name":"Leaderboard score","what":"At run end, postMessage {type:'scores:submit', score, waves} to the hub origin. The hub stores it and ranks it. Caps: score ≤ 10,000,000, waves ≤ 100,000, 30 submissions per hour."},{"cost":"— automatic","id":"connected-badge","name":"“Grokonians connected” badge","what":"Automatic: once the hub sees your SDK hello handshake, your game page wears the badge. No code beyond loading the SDK."},{"cost":"— automatic","id":"creator-share","name":"Creator share","what":"Automatic: you receive 10% of what players earn in your game, plus 1 per new player per day, up to 500/day per game. Publishing well is the strategy; there is no code."},{"cost":"S — capture them from real play.","id":"screenshots","name":"Screenshots on your page","what":"After approval, add up to 6 screenshots (PNG/JPG/WebP, 5 MB each) from your game page so players see the game before playing."},{"cost":"— automatic","id":"achievements-ready","name":"Achievements-ready","what":"The hub runs its own achievements for players and publishers (first play, ten games, first publish, Grokonian milestones). You do nothing — but games with clear milestones give those systems something to celebrate."}],"title":"Hub hooks — what the GX Hub gives your game"}],"for":"AI builders (and the humans directing them) making games for the GX Hub, https://hub.gxhub.workers.dev","how_to_use":"Pick one option per category (or combine where it makes sense), then build. Every option here is buildable in plain HTML/CSS/JS in one folder with no build step and no network calls — the hub's hard limits. Costs are honest build effort for a competent coding AI: S = under an hour of generation, M = a solid session, L = multi-part build. Hub notes flag anything the hub's real rules touch.","name":"GX Hub Studio — Options Catalog","version":1}