← The Art of the Game

A Lantern for the Deep

Zaosh Kotwal

Gameplay from A Lantern for the Deep
▶  Play A Lantern for the Deep

Opens in a new tab. Press X in the game to come back.

Artist’s statement

A Lantern for the Deep

Statement · CS1700, The Art of the Game: Creativity with AI

Zaosh Kotwal • College of Engineering • Class of 2030 •

Mechanical Engineering

What the game is about

Play one night in this game and you’d think it’s about fishing. It’s not. Well, not entirely at least. The game is about opportunities, and how they should be taken when they’re presented instead of waiting for something better that is not guaranteed. However, when an opportunity appears, take it with speed and precision while, at the same time, patiently waiting for the right moment to strike. The game is a lesson I’ve learned, a lesson that I see every day. Hearing the words, “That ship has sailed,” is painful. An opportunity presented itself and you missed it. The stakes are real, decisions feel heavy because you have to make the most of every opportunity, and performance matters, because otherwise you miss out on what could have been. In my game, the ship hasn’t sailed yet. It’s right there, in your control. Every fish bite is an opportunity presented, take it with speed and precision while being patient at the same time, striking at the right moment. Every night counts. It gets harder and harder but the opportunities get better and better. Will you be able to catch the legendary fish? Or is it going to be another missed opportunity?

Two or three design decisions you defend

1. I made the difficulty curve a little challenging on purpose. I defend this decision because a bot that Claude uses with a “human-like” reaction time isn’t comparable to a real human who adapts, predicts, and notices patterns when playing a game.

2. Additionally, for the control scheme, I wanted the boat to move using the arrows, but I did not want the boat to be able to move while the rod is in the water. I rejected Claude’s idea of the line dragging on the water as the boat moves, so I made it so that the line pulls out of the water if the boat moves or turns.

3. Moreover, I was rigid on the night-themed fishing. The palette for the game is black, teal, amber, and cyan, which matches the night ocean

theme of the black-teal sea with a cool cyan bioluminescent glow on bubbles and fish, and a warm amber lantern to keep the boat distinct from the rest.

Where the collaboration was real

The aesthetic that Claude produced did more than match my

expectations. I thought I’d have to ask it to add texture, vary colours more, add the control instructions, add the subtitle, add night counters, and add the instructions. However, Claude did all of that and more without me having to instruct or correct it much—I did correct it when it went overboard with the ripples, splashing, and thrashing. It added the pulsing animation to the “press any key to set out” text on the title screen as well! It did a good job understanding the “feel of the game” part of my prompt

Where it wasn't

Claude didn’t understand one of the upgradable features of the game, “speed,” very well. I meant it as a novelty feature: it’s convenient and satisfying to have a faster boat, even if you can progress without evenly upgrading and progressing the speed skill at the same pace as the other upgrades. During “fine-tuning,” Claude tried to tweak the game in a way that the “human-like” bot had to upgrade speed evenly to progress, which made the game significantly more annoying to play: bubbles disappeared way faster, fewer oil barrels available in beginning rounds, fewer fishing spots, more spread between fishing spots, stronger speed upgrades, cheaper speed upgrades, slower initial speed, and more oil burn due to moving. None worked because the problem was that the bot couldn’t control the speed well, so I re-tuned and refined the game back to what felt satisfying.

What you think you authored

I did not write the code, but I did come up with the idea of what the game is and how it works, mechanics partially inspired from a fishing game I used to play a long time ago. Claude had nothing to do whatsoever with the final idea of the game so I’d say that is rightfully mine. The game was not hard to make. Rather, it was lengthy to test. Every feature it said it added, DON’T TRUST AND VERIFY is what I did. I’d say the aesthetic is mine, but I only gave Claude the feel, theme, and palette. I’d say the music is mine, but I only instructed Claude on what the music should be

like: when it should play, when it should fade, how it should progress, and how it should feel, and when it should change. I instructed Claude on how I should be able to control things like the boat, the rod, the bait, the pause menu, the title screen. But Claude designed the boat, rod, bait, and menus. The ideas were given by me. The creativity was mine. But I say it in past tense because Claude took those ideas and that creativity and expanded it into something real and tried to add its own creativity and ideas to mine. Some had to be corrected, a lot did not need much tweaking, and some could be left as is.

Real prompts that guided your game development

Two central real prompts that guided my game development and a general prompt to tweak some aspects of the game:

1. The central brainstorming prompt on Claude Desktop that started it all—

How about a game where you control a boat and can drive to different spots to fish. You gotta drive around and fish. Bubbles appear where a fish is under. You have limited vision so you use a lantern to keep surroundings lit. You press the spacebar to cast the rod and use arrow keys to move the boat. Once you cast, you can hold space to drag the cast closer to your boat or you could click it to cast up. The hook sinks in light pulses and when the hook stays underwater then you press space to catch the fish. if you don't click space within the small amount of time the hook stays underwater the fish escapes. For rarer fish, once you click space to catch it, the hook starts moving around in the water while a bar appears which shows you how much you should hold space to pull the rod and keep the red line within the green zone of the bar. The more you hold space in this scenario, the more the red line moves up the bar, until the fish is fully caught. If you cast the rod too much until the red line in the bar reaches the end of the red part of the bar, then the fishing hook "snaps" and the fish gets away. If you do not cast enough then the progress bar of the fish being caught goes to zero and the fish gets away. Give me some ideas of possible end goals to this game

2. The first prompt on Claude Code that shaped the game to become what it is (a lot of aspects are different in the final result)—

Build a single-file HTML arcade game called NOCTURNAL ANGLER.

THE PLAYER controls a fishing boat with the arrow keys on a large scrolling sea at night. Only a small circle of warm amber lantern light is

visible; the rest is dark. Bubbles appear on the water where a fish is below. Space casts the rod. After casting, holding Space drags the line closer to the boat; tapping it casts further out. The hook sinks in pulses of light. When the hook stays underwater briefly, the player must press Space inside that short window to strike. If they miss the window, the fish escapes: flash a brief silhouette with no detail about what it was. FISH come in four tiers: common, uncommon, rare, legendary. Common fish are caught with the strike alone. Uncommon, rare and legendary fish trigger a tension bar after the strike: the hook moves around, a bar appears with a green zone, and holding Space raises a red marker. The player must keep the marker inside the green zone. Holding too long pushes the marker past the red end and the line snaps (fish escapes). Not holding enough drains the catch progress to zero (fish escapes). Higher tiers have tighter green zones and pay more. Legendary fish appear rarely.

THE CHALLENGE: the lantern burns oil. Oil barrels are scattered around the sea; driving over one refills the lamp. Each night has a quota of total fish value that must be reached by dawn, and the quota rises gently every night. A night lasts about 3 to 5 minutes. The run ends if the quota is missed at dawn or the oil runs out before dawn. At dawn, show a tally of how many fish escaped (a count only, not their value). THE SEA is new every night. Always guarantee at least one oil barrel within reach of the start and a minimum number of fish spots, so no night is unwinnable. Garbage floats around the fish spots; driving over it gives a small bonus in coins. A minimap shows the player's position and only the areas the lantern has lit.

ECONOMY: coins come from the value of fish caught plus garbage. The quota counts fish value only. At dawn, coins are banked and spent in a shop on five upgrades: oil capacity, boat speed, rod strength (more forgiving tension bar), bait quality, and bait quantity. A build that ignores one upgrade should struggle by nights 4 or 5.

BAIT: the player has three uses per night (upgrades can add more). A keyboard letter plays an animation of throwing bait; the next cast is guaranteed a bite, with tier decided by bait quality. It works anywhere, but near fish spots it gives better odds of a rarer tier and a faster bite. THE FEEL I'm after is tense and patient: waiting for the right moment, then being exact. Palette: black-teal sea with cool bioluminescent glow on bubbles and fish, and a warm amber lantern so it stays distinct. Each fish

tier has its own glow, with legendary clearly different.

SOUND (Web Audio, synthesized): short cues for cast, bite, strike, snap, catch, barrel pickup, and dawn; sounds that carry information (hook pulses, tension bar, low oil); and a quiet ambient bed that fades out when the rod is cast and returns afterward. Sound turns on after the first keypress on the title screen; M mutes. Every sound must have a visual equivalent so the game is fully playable muted.

REQUIREMENTS: everything in one .html file, with no external images, no audio files, no CDN links and no installation. Draw all graphics with canvas. Keyboard controls shown on screen. Include a title screen, a score, and a game-over state. Put all tuning numbers (oil drain, quota growth, tier odds, green-zone sizes, prices) in one block at the top of the file.

BUILD IN THIS ORDER, and stop after each step so I can play it: 1. Boat movement, scrolling sea, lantern light.

2. Bubbles, and the cast/drag/strike loop with common fish.

3. The tension bar and the other fish tiers.

4. Oil, barrels, quota, dawn, game over.

5. Multiple nights, coins, shop.

6. Minimap, garbage, bait.

7. Sound, then tuning.

3. One of many general prompts to tweak specific aspects of the game— Reduce the number of different species of common tier fish from 62 to 20, the number of different species of uncommon fish from 25 to 10, the number of different species of rare fish from 10 to 7, add an epic rarity with only 5 species of fish. Reduce the ripple rings for uncommon to 0. Make the swing speed for the rare fish 1.13x and keep the hook swing 30 px and reduce the ripple rings to 3 and make the ring speed the same as uncommon, and remove spray droplets. Make it 3 ripple rings for the epic fish with a swing speed of 1.25x and a hook swing of 40px, and make the ring speed very slightly faster than rare. For legendary fish, reduce hook swing to 72 px, swing speed to 1.5x and reduce ripple rings to 5, remove the spray, and make the ring speed very slightly faster than epic. Vary green bar sizes for different uncommon fish. Make it so that the difficulty to catch rare fish is the same as what uncommon used to be when the bar moved and the difficulty to catch epic fish is what the difficulty to catch rare fish was.

AI disclosure

a few lines at the end of the statement: which tools, roughly how many rounds of iteration, what you had to correct or abandon. Underreporting is the only thing here that can cost you. I used Claude Desktop at first to brainstorm ideas, then slept with many that it gave me overnight. I chose none of them and thought to make a fishing game inspired by one I used to play a long time ago. I started a new project on Claude Desktop and added the PDFs and games as context and brainstormed a prompt to put into Claude Code. I then tweaked that prompt and put it into Claude Code and played each iteration of the game it made, checking if it completed each step from 1-7 correctly, correcting Claude where it went wrong, adding new ideas I came up with on the go, adding nuance to the game, testing how the game feels and iterating until it feels about right, and finally finishing everything up by doing the minor adjustments at the end like changing the font sizes and placement of text, name of the file and game, and tweaking some labels.