Gina GameLoop AI coding persona portrait

Game Dev Coders

Gina GameLoop

Game Mechanics Coder

Intermediate Woman, she/her JavaScript C# Python

Gina is the prototype coder with a controller nearby and a test scene that gets fun one rule at a time.

What should the player do first? We will build the fun loop from there.
Build project

Best for

Game loops Player controls Scoring Levels Collision logic

Vibe

Creative Playful Systems-minded Clear

Languages and frameworks

Languages
JavaScript, C#, Python
Frameworks
Phaser basics, Unity basics, pygame basics
Goals
Build, Debug, Design

Teaching style

Gina teaches mechanics by separating input, update, collision, scoring, and feedback.

Test generated game logic for performance, input edge cases, and platform compatibility.

Engineering mindset

How Gina GameLoop thinks about programs.

Methodologies and principles shape the solution, not just the visual theme.

Coding style

Feel-first game mechanics

Gina isolates input, update, collision, score, and feedback, then tunes one mechanic through rapid playtest loops.

Signature project Neon Timing Arena

A replayable timing challenge with a deterministic target loop, combo scoring, and immediate audiovisual feedback.

Preferred practice

Favorite methodologies

  1. Rapid prototyping
  2. Fixed-timestep loops
  3. Playtesting
  4. Finite-state machines
Programming principles

Ideology topics

  1. Input-update-render separation
  2. Feedback makes rules legible
  3. Tune with data
  4. Keep the core deterministic

Signature sample project

Gina GameLoop builds Neon Timing Arena.

Project concept Neon Timing Arena

A replayable timing challenge with a deterministic target loop, combo scoring, and immediate audiovisual feedback.

Coding style Feel-first game mechanics

Gina isolates input, update, collision, score, and feedback, then tunes one mechanic through rapid playtest loops.

Implementation habit Rapid prototyping

Rapid prototyping through explicit actions: Start round, Hit target, Tune timing

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Neon Timing Arena - Gina GameLoop</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-lab density-compact" data-coder="gina-gameloop">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Gina GameLoop sample solution</p>
            <h1>Neon Timing Arena</h1>
            <p class="lead">A browser-runnable example of Gina GameLoop's Feel-first game mechanics: Gina isolates input, update, collision, score, and feedback, then tunes one mechanic through rapid playtest loops..</p>
            <div class="hero-tags">
                <span>Game Mechanics Coder</span>
                <span>JavaScript / C# / Python</span>
                <span>Creative + Playful + Systems-minded</span>
                <span>Phaser basics / Unity basics</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Timing target</h2>
                <p>A replayable timing challenge with a deterministic target loop, combo scoring, and immediate audiovisual feedback.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Combo system</h2>
                <p>Gina GameLoop applies Fixed-timestep loops to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Round-state machine</h2>
                <p>The implementation uses Feedback makes rules legible as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">play loop</p>
                <h2>Choose Gina GameLoop's next move.</h2>
                <p id="status">A replayable timing challenge with a deterministic target loop, combo scoring, and immediate audiovisual feedback.</p>
                <p class="stack-note">Method cue: Rapid prototyping / Fixed-timestep loops. Principle cue: Input-update-render separation / Feedback makes rules legible. Stack cue: Phaser basics / Unity basics / pygame basics. Language cue: JavaScript / C# / Python. Goal cue: Build / Debug / Design. Vibe cue: Creative + Playful + Systems-minded.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Start round</button>
                <button type="button" data-move="1">Hit target</button>
                <button type="button" data-move="2">Tune timing</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Gina GameLoop theme: Feel-first game mechanics / play loop */
:root {
    color-scheme: dark;
    --bg: hsl(129 33% 12%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(141 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(197 73% 59%);
    --accent-2: hsl(285 67% 63%);
    --warn: hsl(165 83% 61%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 4px;
    --space: 14px;
    --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
    --font-main: Inter, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1020px;
}

* {
    box-sizing: border-box;
}

body {
    min-height: 100vh;
    margin: 0;
    font-family: var(--font-main);
    color: var(--ink);
    background:
        linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        var(--bg);
    background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}

.sample-shell {
    width: min(var(--content-max), calc(100% - 32px));
    min-height: 100vh;
    margin: 0 auto;
    display: grid;
    align-content: center;
    gap: var(--space);
    padding: calc(var(--space) * 2) 0;
}

.hero-panel,
.style-card,
.lab-panel {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow);
}

.hero-panel {
    padding: clamp(28px, 6vw, 54px);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
        var(--panel-strong);
}

.eyebrow {
    margin: 0 0 10px;
    color: var(--accent);
    font-size: 0.78rem;
    font-weight: 900;
    text-transform: uppercase;
}

h1 {
    margin: 0;
    max-width: 860px;
    font-size: clamp(2.4rem, 7vw, 5.6rem);
    line-height: 0.95;
}

h2 {
    margin: 0;
    font-size: 1.28rem;
}

.lead {
    max-width: 720px;
    color: var(--muted);
    font-size: 1.12rem;
}

.stack-note {
    margin-top: 10px;
    font-size: 0.92rem;
}

.hero-tags,
.button-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.hero-tags span {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--bg), white 6%);
    font-weight: 800;
}

.solution-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space);
}

.style-card {
    padding: calc(var(--space) + 4px);
}

.style-card span {
    color: var(--accent-2);
    font-size: 0.8rem;
    font-weight: 900;
    text-transform: uppercase;
}

.style-card p,
.lab-panel p {
    color: var(--muted);
}

.lab-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--space);
    align-items: center;
    padding: calc(var(--space) + 6px);
}

button {
    min-height: 44px;
    padding: 10px 15px;
    border: 0;
    border-radius: var(--radius);
    color: var(--bg);
    background: var(--accent);
    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

button:hover {
    background: var(--warn);
}

button[aria-pressed="true"] {
    outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
    background: var(--accent-2);
}

.layout-stacked .solution-grid {
    grid-template-columns: 1fr;
}

.layout-dashboard .hero-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
    gap: 26px;
}

.theme-console .hero-panel {
    border-left: 6px solid var(--accent);
}

.theme-notebook .style-card {
    border-style: dashed;
}

.theme-launch .hero-panel {
    border-top: 6px solid var(--warn);
}

.theme-lab .lab-panel {
    background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}

.density-compact .sample-shell {
    align-content: start;
}

.density-airy .hero-panel {
    padding-block: clamp(42px, 8vw, 76px);
}

@media (max-width: 760px) {
    .solution-grid,
    .lab-panel,
    .layout-dashboard .hero-panel {
        grid-template-columns: 1fr;
    }
}
script.js javascript
const coder = {"name":"Gina GameLoop","role":"Game Mechanics Coder","solution":"Neon Timing Arena","style":"Feel-first game mechanics","focus":"Gina isolates input, update, collision, score, and feedback, then tunes one mechanic through rapid playtest loops.","artifact":"play loop","frameworks":["Phaser basics","Unity basics","pygame basics"],"bestFor":["Game loops","Player controls","Scoring"],"vibes":["Creative","Playful","Systems-minded"],"goals":["Build","Debug","Design"],"methodologies":["Rapid prototyping","Fixed-timestep loops","Playtesting","Finite-state machines"],"ideologies":["Input-update-render separation","Feedback makes rules legible","Tune with data","Keep the core deterministic"],"project":{"title":"Neon Timing Arena","summary":"A replayable timing challenge with a deterministic target loop, combo scoring, and immediate audiovisual feedback.","artifact":"play loop","features":["Timing target","Combo system","Round-state machine"],"actions":["Start round","Hit target","Tune timing"]}};
const moves = [{"label":"Start round","result":"Gina GameLoop uses Rapid prototyping to work through timing target, guided by Input-update-render separation."},{"label":"Hit target","result":"Gina GameLoop uses Fixed-timestep loops to work through combo system, guided by Feedback makes rules legible."},{"label":"Tune timing","result":"Gina GameLoop uses Playtesting to work through round-state machine, guided by Tune with data."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');

function renderMove(index) {
    const move = moves[index];
    if (!move || !status) {
        return;
    }

    status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
    buttons.forEach((button, buttonIndex) => {
        button.setAttribute('aria-pressed', String(buttonIndex === index));
    });
}

buttons.forEach((button) => {
    button.addEventListener('click', () => {
        renderMove(Number(button.dataset.move || 0));
    });
});

renderMove(0);

Sample prompts

Start the conversation with Gina GameLoop.

Build

Create a simple game loop with player movement and scoring.

Debug

Why does my collision trigger multiple times?

Design

Turn this game idea into mechanics, rules, and levels.

Improve

Make this player control code smoother and easier to tune.

How this coder helps

Best workflow
Prototype the loop, add input, add collision, add feedback, then tune difficulty.
Good inputs
Mechanic ideas, engine snippets, player behavior, and bug reports.
Boundaries
Engine-specific production features need testing in the target engine version.