A game from high school
We used to play Eskiv in high school. During Covid I recreated it and wrote a bot that got pretty good at it. This was before I was using coding agents; the game and bot were my own work.
It's different from the learning agents elsewhere on this site. This one looks ahead through possible moves and chooses somewhere it thinks it can survive.
What you’re watching
The large square is the player, the circles are enemies and the small squares are pickups. As more balls fill the field, getting to a pickup safely becomes harder. The bot looks a hundred ticks ahead. If it can't find a target with a safe enough future, the run ends.
What is it actually doing?
Later I made a headless version and ran 10,000 games, recording the frames. Watching a run gives a feel for it, but I wanted to look at a few things across many games:
- Does the agent move in straight lines? How close to the shortest route does it actually walk, and does that change as the field gets crowded?
- Where does it spend its time? Does a brute-force agent with no notion of “danger zones” still discover them empirically?
- How does it die? Is it mostly clipped by fast enemies, or does it trap itself in corners when the field fills up?
Path ratio vs clutter
Straight-line distance divided by actual path walked, per pickup. 1.0 means the agent walked a straight line. Bucketed by how many balls were on the field at the time.
Even early on, the bot takes detours around enemies. As the field gets crowded, the paths become much longer. With over a hundred balls, a pickup can require a route more than four times the direct distance.
Where the agent stands
Player-position density by score bucket. Log-smoothed, 16.4 million samples. Auto-scrubs through the game’s life.
It spends the early part of a run near the centre, then moves towards the walls as the middle fills up. At high scores it often stays near one edge. There's no explicit instruction to hug a wall; that pattern comes out of the search.
How it dies
Final score per game. Brute agent, lookahead=100, small field.
In these 10,000 runs, every ending was recorded as a trap, not a direct hit. The search ran out of targets it considered safe before a ball collided with the player. So the zero-hit count says something about how the bot stops, as well as how it dodges.
How cautious does it need to be?
Open question
A hundred ticks of lookahead may be more caution than it needs. I'd be interested to see how the scores change with a shorter horizon, including whether it starts ending through collisions instead.
Open question II
I'd also like to compare it with a learned policy. Would it end up on the same walls, or take risks this search rules out?
Open question III
The routes get steadily more indirect as balls accumulate. I wonder how much of that is unavoidable and how much belongs to this particular bot.