2023Graded

Popelmon

Pure Java · Swing · Jackson for saves

Overview

A Pokémon parody built in four days for the Java exam: one hand-built island, and the whole class in the dex.

Popelmon is a Pokémon parody in pure Java Swing: one hand-built 150×120 tile island, random battles in the tall grass, a working catch system, and a dex where German pun monsters (Popelchu, Glumandarsch, BiZAZAm) share slots with the friend group and one teacher with a sense of humor.

Built in four days as the trade-school Java exam, written from scratch with no game framework, and handed in on the fifth with an A+. The sprites came from the friends (Tobi drew most, Julian the rest), the whole class played it, and Herr Reineke, the teacher who made it into the dex, found it hilarious. Archived since its one-batch upload on July 27, 2023.

How do you build a game in four days?

The course taught basic Java and the exam said: make a game. Four days were left before the hand-in, so everything got written from scratch at exam speed, every system figured out along the way: a GamePanel running a 60 FPS delta-time loop, a KeyHandler, a TileManager for the world, a CollisionChecker, a UI, all of it one person's work.

Day five was the hand-off and the grade came back an A+. The better review came from the classroom: the whole class played it.

The Popelmon title screen: New Game, Load Game and Exit Game under a small green sprite
the title screen: New Game, Load Game, Exit Game

Who is in the dex?

Sixteen monsters. Five keep their official German names (Schiggi, Taubsi, Raupy, Relaxo, Enton), five get bent into puns (Popelchu, BissAmSamen, Glumandarsch, Evolarsch, and the shiny BiZAZAm with doubled hp and pp), one is called Charizard, plainly, and five are people. Finn ships with Booze-Attack, Eat-Attack and Puke. Julian got Elfbar Hit, Juice WRLD and Pre workout. Tobi got Snooze and Sleepy. Max wrote himself in as the group's hacker: Disable Firewall, Brain OS Hack, Super Saiyajin. And Herr Reineke, the trade-school teacher, received a complete PUBG loadout: Throwing Pan, Chicken Dinner, Tactical Entry, Snipe.

Tobi drew most of the sprites, Julian the rest, which makes the art a group project of its own. Herr Reineke found the game hilarious and okayed staying in the dex. The dialogue is in English because I play my games in English; the German lives in the names.

The Choose your Starter screen with three hand-drawn monster starters
the starter trio, all hand-drawn
The inventory screen showing Popelchu's card: Health 100, Level 10, attacks Charm, Tail Whip, Spark, Thunderbolt
Popelchu's card: real Pikachu moves under the fake name

How does it actually play?

The world is one hand-built island: 150×120 tiles of mountain ring, water, forest, one village and a dirt-path network between it all. The camera culls to the screen, collision is per-tile AABB, and every character walks on a 4-direction, 4-frame cycle. Tall grass is the only danger: every step rolls 0-3000, and a roll of 20 or less starts a fight.

The fight screen is a 2×2 menu: Fight, Catch, Run, Inventory. Moves land in four damage tiers, each roll fresh, the wild monster swings back after a beat, and Catch converts 21% of the time. Every monster enters at level 10 with 100 hp, so every run starts even. The pause menu's Save Game serializes the whole player object to JSON, and the next launch picks it up from disk.

Animated capture of Popelmon gameplay: the player walking through a village with two houses and talking to a villager
the village loop: two houses, a villager, and F to talk
The Popelmon fight screen: Popelchu facing a wild monster, Fight, Inventory, Catch and Run buttons below
the fight screen: pick a move, roll the dice, or throw a Catch

What's under the hood?

The island is one hand-built map: 150×120 tiles, 18,000 in total, about 45% water, ringed with mountains and forest. The renderer targets 60 FPS with delta-time accumulation, the camera culls everything off-screen, collision is per-tile AABB, and every character animates on a 4-direction, 4-frame walk cycle.

Dialogue arrives with a typewriter effect, the pause menu toggles fullscreen and writes real JSON saves through Jackson, and the game state machine keeps title, play, pause, dialogue, battle and inventory in their own lanes. All of that, 47 files and 4,241 lines, written in four days by someone who had just finished a basic Java course.

The pause menu with a Fullscreen checkbox, Save Game and Quit Game
the pause menu: fullscreen, Save Game, Quit Game
A dialogue box in the village reading: Ah, welcome, my young friend! I've been eagerly awaiting your arrival.
the professor intro every new save starts with

Where is Popelmon now?

Archived at its natural end: the exam was handed in, the A+ came back, and the whole game went to GitHub in one batch on July 27, 2023. The committed save file still carries a keyboard-mashed player name, so someone sat down and played it, which is the review that counts. On this route Popelmon is the seam between the Minecraft years and the engine years: the engines stop picks the thread up from here.

Field notes

  • 47 Java files, 4,241 lines, written from scratch with no game framework; Jackson handles the save file.
  • One hand-built island: 150×120 tiles, 18,000 in total, about 45% water, with 96 distinct tile types in the ground.
  • 16 px tiles scaled 3× into a 960×576 window; the renderer targets 60 FPS with delta-time accumulation, fullscreen optional from the pause menu.
  • 16 monster classes, everyone at level 10 with 100 hp and 100 pp; moves roll damage in four tiers, Catch lands 21% of the time.
  • Tall grass rolls 0-3000 per step and starts a fight on 20 or less, about 0.7% of steps, across a 16-monster encounter pool.
  • 14 NPC classes with scripted dialogue and a typewriter text effect; every character walks on 4 directions × 4 frames.
  • Saving serializes the whole player object to JSON on disk, and the next launch picks it up automatically.
  • The committed save file's player name: handsjhfohshoshfndsfosdhfosho.
  • Uploaded in one batch on July 27, 2023; the README followed on October 6, 2026.

Source

github.com/notdezzi/popelmon-java