Pac-Man: Week Four
Progress
My efforts over the past four weeks have been: engine programming, gameplay programming, art, and music. But the only things that can easily be shown are visuals and audio, so here they are.
There are coins that line the grungy corridors. You must pick all of them up to advance to the next stage, and each increases your score. They emit light, so the hallways get darker as you collect them.
There are four eyeballs placed throughout that act as power-ups, and you can never escape their gaze.
There are skulls that patrol the maze, looking for those that steal their treasure.
But you can fight back by collecting an eyeball, giving you the power to defeat the skulls, which kicks off an energetic song.
Here’s a short video of everything so far:
Thoughts
Keeping Perspective
After working on the same thing for only a month, I already find it hard to keep perspective and resist the urge to throw it all away. Every day is incremental progress and from that close distance it’s easy to lose sight of the total progress that’s been made.
That’s even more true when not using an engine because a lot of my time early on was spent implementing things that an engine would have had ready out of the box.
- Getting a window open
- Reading input
- Adding live code reloading
- Locking the framerate
- Adding a Blender script to export data
- Adding a logger
- Adding a math library
- Adding a basic memory manager
- Adding a basic renderer
- Getting a mesh rendering on screen
All engine-level stuff, and when I type it all out it sounds like a lot, but at the end of the first week it felt like I hadn’t made any progress at all because all I saw on screen was an unlit cube.
But the flip side is days that are spent working on art or audio or planning, and I feel like nothing has been accomplished because I don’t have any git commits for that day, but of course that’s not true.
It helps to show progress to close friends and family to get an external perspective.
Lack of an Engine
Another problem with not using an engine is that experimentation is made more difficult. If I think of a cool feature and want to try it out, I have to write it first rather than being able to use one that’s already been built.
But the benefits have been knowing each system intimately, and everything being small and simple enough to keep in my head. There is also satisfaction in knowing that every line is my own.
I told myself I’d re-evaluate the custom engine decision after one month and I stick by my decision. It makes some things more difficult but I think overall it’s been beneficial. It also helps to keep the project scoped well because adding a new feature requires a lot of work. In this way I think limitations help to breed creativity.
Resisting Temptation
As a programmer there’s always the temptation to make every system a perfect abstraction that’s general in case of future needs, and I’ve had to resist that temptation at every turn.
I don’t have time to waste doing things now that I might need later. Instead I’ve tried to be very diligent about only doing the bare minimum needed to achieve the end-goal, even if it means it’s not perfect and I might need to redo it in the future.
I must accept that some of the code I write will be for this game only, but there will also be a lot of code that I’ll be able to move over to the next project, and I’ll likely be able to improve the architecture with lessons learned.
I must also accept that a lot of the code will be not good, but it gets the job done.
Developing an Art Style
I have a certain nostalgia for games of mid-90s where models had low poly counts, the textures had big chunky pixels, everything lacked antialiasing, and more was left to the imagination. The developers of that era managed to do a lot with very little.
I read once that if you’re trying to target nostalgia, you should recreate how you remember things looking and not how they actually looked. I think that’s good advice, and so I’ve tried to tap into the nostalgia while also injecting it with some modernity.
- Low-poly models
- Low-res textures
- No anti-aliasing
- Simple lighting
What’s Next
I still need to add more of the AI so that each of the enemies has its own behavior, and make them react differently when the player is powered up (they should run away).
There needs to be a score that increases as you pick up items and consume skulls, and difficulty needs to increase with each stage, so I need to make sure that all feels good and progression makes sense.
Beyond that, most of what is left are the things that are often avoid until the end because they aren’t very fun: UI, start screen, options menu, pause menu, credits.
And of course polish and pizzazz. I’ll need to tweak the lighting a lot to make sure it’s dark enough to get the mood I’m going for, but not so dark players can’t see anything.
All of that is what will hopefully turn it into a real game.
I expect that this stuff will take longer than I think so I’m allocating another month will be to take it over the line. In that time I hope to accomplish all that I listed above, as well as basic marketing, getting it onto Steam, etc.
Last Edited: Mar 11, 2025