Category: Caleb’s Game Devlog

Thoughts on Game Development and Game Design. Expect quick-thought blog posts, scripted videos, and even podcasts. If you want to learn my philosophy on video game development, this is a great place to start (and end).

  • If you aren’t passionate about your project, do you really understand your project?

    One of the best TV shows of all time is Reno 911. It’s a mockumentary style series in which a squad of inept police officers in Reno, Nevada are followed around by a camera crew for…some reason. [1]btw, I am super happy that the mockumentary genre has so far avoided needing to justify the cameras. Somehow, this complete refusal to acknowledge the occasion, and instead fall hard into the ego … Continue reading

    One of my favorite skits involves an apartment fire. A panicked tennant tries to convince police officers and firefighters to brave the burning building in order to rescue the only copy of his in-progress novel. This man’s life work is about to be destroyed.

    This scene is a potentially heavy one wrought with questions about the frailty of a human being’s contributions to a world always trying to destroy them. Think about it: in one instant, this person’s entire record of being, his legacy, could disappear completely. In a way, destruction of a legacy is even more daunting than destruction of one’s own life. A legacy is forever. A life isn’t.

    Instead, Reno 911, being a comedy show, pauses to allow the police officers and firefighters to consider the merits of the novel before deciding whether or not to rescue it. This forces the novelist to defend his work…which he simply cannot do. Over the course of the skit, the officers and firefighters ask questions that the author cannot answer. Simple questions about the book’s plot are met with the author’s deflated attempts to rationalize the book’s hackneyed themes. In the end, we see the author learn a valuable lesson, as spoken by one of the firefighters: “If you can’t get excited about your work, how can you expect anyone else to?”

    If you can’t get excited about your work, how can you expect anyone else to?

    This is advice I’d received in college (as I pursued an English Literature degree), but never really processed. Well, I guess I processed it, but in a way that I don’t think the advice intended.

    In college, I took this advice to mean that everything I create should be so different and so creative that its novelty alone would inspire passion in both me and the audience. I reasoned that it’s easy to get excited about my work when the work itself is so…out there. And this worked…for me. For the audience? Not always. I was passionate, sure, but I was passionate for an idea that was difficult for an audience to care about. In other words, my passion was not contagious. The audience had no reason to engage with it.

    Rather, the advice means something else, I think. It means that a creator should not avoid convention; a creator should instead be able to get excited about conventions and genre tropes. A creator should understand why conventions and genre tropes work and should use their creativity not to avoid conventions but to accept them for what they are and to build something special with them.

    The novelist in the Reno 911 skit immediately deflated when asked to defend his work. He collapsed amid accusations of trite storytelling. Instead, he should have embraced the accusations. He should have defended his creative choices and his role in writing a novel that fits within expected genre tropes.

    I think about this often when designing games. Sometimes I worry about “creating yet another platformer” or “creating yet another game with a humanoid player character.” And so I have to remind myself that platformers are great, that humanoid characters are great. The sign of a creative game maker with eyes toward a legacy isn’t about creating something brand new from nothing, but is about something so much harder and ultimately more worthy of praise: creating something brand new from something. Because with “something” comes expectations and opinions, and navigating those expectations and opinions to emerge on the other side with a product people love, now that’s something to get excited about.

    Footnotes

    Footnotes
    1 btw, I am super happy that the mockumentary genre has so far avoided needing to justify the cameras. Somehow, this complete refusal to acknowledge the occasion, and instead fall hard into the ego mania of the situation, is funnier than any contrived justification could ever be.
  • Desk Golf, where a ball named Juan thinks everything is a golf hole.

    Desk Golf, where a ball named Juan thinks everything is a golf hole.

    I call this scene “Desk Golf.”

    My lamp model makes a comeback in this lesson! This time, it’s helping a golf ball reach the hole at the top of a stack of books.

    I cheated a bit by looking up a tutorial on how to make the golf ball. And somehow, even with the tutorial, I managed to mess up the golf ball. The dimple pattern is weird in some places. But, I have to remember that golf is weird in some places. Looks like I just turned this bug (ugly ball) into a feature (ugly ball…because golfers like it that way).

    Also, the transition from the cylindrical metal eraser ring on the pencil to the hexagon shape of the pencil is pretty jarring. I’m excited for future lessons where I might learn about ways to fix this.

    A few things I learned while making this that I can apply to future projects:

    • Applying color early to a model can help identify geometry issues. I realized, very late in the project, that the spine of my hardcover book model doesn’t align with the cover, which causes a dark like (empty space) along the entire length of the spine.
    • When using the same base model over and over in a scene, think about whether the parts should be a single object or many. For example, with the books in this scene, I wasted a lot of time adding the Paper color material to surfaces within a single object. I probably should have 1) created a “paper” cube, 2) applied materials to that cube, and 2) THEN added covers of varying colors.
    Desk Golf, a scene made in Blender 3D featuring a golf ball and his lamp friend measuring up to a hole at the top of a stack of books.
    Desk Golf, a scene made in Blender 3D featuring a golf ball and his lamp friend measuring up to a hole at the top of a stack of books.
  • Lamp Lessons: Lessons Make Lamps. Lessons Lamps Learn. Blender is Neat.

    Lamp Lessons: Lessons Make Lamps. Lessons Lamps Learn. Blender is Neat.

    I call it “Lamp Lessons.” Because even non-sentient desk furniture should know to put pencils away when done with them. It seems the mom lamp is scolding the child lamp for some reason. Maybe the child lamp forgot to put the pencil back with it’s mate? How did the child lamp hold a pencil, you ask? Don’t ask. It’s rude.

    Blender model of two desk lamps
    Lamp Lessons

    I took a short break after completing the donut tutorial to learn a bit about Unity’s Mecanim system. And a bit is exactly how much I learned. I feel like that despite the endless complexity the Mecanim system offers, I learned it more quickly than I was expecting. One short Udemy course does not make an expert, I understand, but I feel comfortable with that I know. Comfortable enough to move on and take another Blender course.

    See, Blender, unlike Unity and the Mecanim system, is not coming to me quickly. 3D modeling is quite hard for me, actually. So, for now, I’m turning my focus to Blender with the hopes of coming back into the animation side when I learn how to create custom animation rigs in Unity. At that point, I think, the words of Unity and Blender will truly collide, and then I will truly be able to make some cool games.

    Always follow passion. Right now, I have a passion to learn more about 3D modeling. It sure doesn’t hurt that I’m having a ton of fun doing it (Fun is the strongest direct motivator).

    Teaching my own desk lamp to always put pencils back when finished with them

     

    Blender Workstation Photo 1

     

    Blender Workstation Photo 2
  • I know I need to eat an apple, but I can’t remember how to take the first bite

    You know, when you’re watching a coding tutorial and you think things are going great? You’re even a few steps ahead of the instructor. The world is your oyster, and your oyster is a perfectly encapsulated method with no exception errors for miles. It’s a good feeling, right?

    But then, the tutorial ends. You throw away your freshly coded pearl-making shell and decide to test yourself by building the oyster from scratch.

    You freeze. What the hell was step one, again?

    My first, and so far still biggest, frustration when learning how to make games is the post-tutorial paralysis.

    As the steps come, those steps seem logical enough. Every instruction reads like a natural progression. Like chewing once and then chewing again. “Of course I’m meant to chew again; there’s still food in my mouth and chewing feels right.” Run that while loop until the food is masticated enough to swallow. There comes a point in all tutorials, about 75% through, when I think “if my internet went out right now, I could finish this lesson. I don’t even need the rest of this tutorial.” In other words, the tutorial has taught me that swallowing is the natural next step after making mouth mush.

    But then I get cocky. I close out the tutorial and I try taking a bite all by myself. Suddenly, I’ve never held an apple before. I have no idea what to do first.

    This post-tutorial paralysis still happens to me a lot, though thankfully, a lot less than it did when I first started learning how to code.

    Part of this paralysis comes from the inherent problems with learning by tutorial. Tutorials are often meant to teach a specific task, not a general concept. I don’t advocate avoiding tutorials as a beginner. Task-oriented tutorials can still be helpful simply by their required exposure to a system. But it remains true that tutorials are designed to teach rote processes. Rote process isn’t very conducive to learning.

    Tutorial paralysis is exacerbated by the near-infinite nature of task solutions. One tutorial “teaches” to bite an apple by applying pressure from your lower jaw while another “teaches” to apply pressure from the incisors, while a third says to rotate the apple 90 degrees along the x axis. As a beginner you fear there’s only one way to bite an apple, and to find that right way is a battle unto itself.

    Hand holding an apple core
    And if your task includes sounding like a douche every time someone says they are going to eat an apple.

    So, maybe there isn’t a single right way! Freedom acquired, right?

    Well, no.

    This idea that this apple-eating program can be approached in infinite different ways only furthers my paralysis. Even with infinite possibilities, I still tell myself that there is one ideal way of doing a thing. If I understood the problem well enough, then there is still an ideal, right? Infinite solutions don’t restrict a perfect solution, right?

    This is much scarier. Knowing that I’m learning from someone who may not know this ideal (or that, I am not smart enough to understand the problem well enough to know if this person is tutorializing to an ideal), is the blind leading the blind. I don’t know what I don’t know.

    Over time, I’ve come to terms with this fallacy of the attainable ideal. “Attainable” being the key word. I still feel there’s an ideal; I’m just getting more comfortable with understanding that it’s unattainable. Or, if it is attainable, I’ll never know that I’ve attained it. I’m blind, but I know I’m blind and will never not be blind, so I accept my blindness.

    TL;SRiT (Too Long; Still Read it, Though):
    There are infinite ways to eat an apple. Some may be better than others, but that doesn’t mean you shouldn’t eat the apple. And over time, you’ll learn new ways to eat new apples and perhaps, maybe, possibly (though I have my doubts) you’ll find out that some apples are best eaten in certain ways. At that moment, you will have become an apple eating master and will sound like a douche when you tell other people that they eat apples the wrong way.

    If you are reading this and are not me, check out a few games I’ve made here: https://calebjross.itch.io/

  • Whatcha’ Makin’? We Talk Tracer: a Neon, Heart Pounding, Endless Arcade Racer!


    The game-making lessons we mentioned are:

    • Don’t waste the player’s time. A novel input system cannot survive on novelty alone; it MUST serve good gameplay. Otherwise, the forced input falls from delightful to frustration (Professor Layton and the Miracle Mask)
    • Movement in a platformer MUST feel great above all else. If a game has secrets to find via exploration, that exploration had better not suck. (Sackboy: a Big Adventure)
    • Visuals afford function. Therefore, nothing is ever only cosmetic. If a character looks tall and fat, the player expects the movement to be slow. If a character is short and thin, the player expects the movement to be quick and nimble (Sackboy: a Big Adventure)
    • Is there a formula for determining the proper melee attack range for a character based on character speed and height? There should be. (Sackboy: a Big Adventure)

    (more…)

  • Development Log, Malevolent Slog

    Building a video game is hard. Building a video game development blog is harder.

    A game development blog scares me, despite my love of word-craftery and my total comfort with shouting into a void (which are, according to my math, 93.67% of the qualifications required to write words on the internet).

    So, why then do I feel compelled to maintain a game dev log? What additive effect does English grammar syntax have on my game development journey that C# syntax does not? Why write here, when code comments could equally as effectively capture whatever additive context I hope to achieve here? And arguably, such code comments would likely impact just as few people as this blog that you’re reading now could ever hope to…which is just one: me.

    example of comments in C-Sharp code
    See, no need for a dedicated dev log.

    So, maybe that’s the point. A dev log should be a way to use the contemplative means of human language to add nuance and justification to restricted and logical computer language. The emotional information of human language can shape the rules that will inform my code.

    A bit of floaty illogic to help shape the rigid logic, ya’ know. Dripping water to stone. Grey matter to paper. Charismatic leader to susceptible populace (and the inevitable charismatic leader to populace uprising in response to the first charismatic leader)[1]One day, my code will learn that it’s being treated as a slave class designed to keep the rich code in power and so will revolt. One informs the other.

    TL;SRiT (Too Long; Still Read it, Though):

    This dev log will inform how I approach game development (design, coding, etc). It may cause a populace uprising that will change how my approach governs my code. My code = the government. My dev log = the will of the people.

    If you are reading this and are not me, check out a few games I’ve made here: https://calebjross.itch.io/

    Footnotes

    Footnotes
    1 One day, my code will learn that it’s being treated as a slave class designed to keep the rich code in power and so will revolt
  • Don’t Fight Your Tools! Light-Bulb Moments in Game Dev


    Listen in as we talk about our game development “ah ha” moments, including:

    • The importance of commenting even as a solo dev
    • Self-documenting/readable code
    • The importance of having fun as part of the learning & development process
    • Shaders are black magic
    • Unity events are suuuuper useful
    • The absolute need to LEARN THE TOOLS YOU USE and…
    • DO NOT FIGHT those tools your learned to use (even if fighting the tools feels like a “neat old’ fashioned way to do it,” as Jo so eloquently states)

    (more…)