Godot Wild Jam Postmortem & Pig Poppa's Future
Pig Poppa, a game where you roam a park looking for spray cans to graffiti offensive scenery while killing any pig that tries to stop you, was created for Godot Wild Jam #22 and released on itch.io June 21st 2020. This post goes over my first real introduction to the Godot engine, my reasons why I created Pig Poppa, and what I have in store for the game's future. Get comfortable, this is going to be a long one!
I've been loosely following Godot ever since I heard about it when I started/got serious about gamedev. It immediately struck a chord with me because of the way the engine was being developed (one or two guys through Patreon/sponsors and doing well both financially and with the project) and it being completely open source. However I don't really do 2D games generally, so it didn't appeal to me over Unreal or Unity.
I recently found out Godot had VR support (via a plugin -- https://github.com/GodotVR) thanks to a post on the /r/gamedev subreddit. It was super easy to get an initial Godot project setup and get the OpenVR plugin installed. I was following the VR starter tutorial but I wanted to create the project myself, but in hindsight I ended up copying a bunch of stuff from the finished project anyways so for a game jam it probably would've made more sense to just use the existing project and open up a new scene. I'm lazy but I still like doing things the hard way, what can I say?
One of the things most I like about Godot right off the bat is how the scenes can be organized. I don't like Unity and Unreal's scene tree seems to get a little bit cluttered/hard to manage for me at times (mostly my fault I'm sure). I liked the workflow of adding a blank node to organize things under and easily translate them around the scene. Searching and adding new nodes was easy and it was clear what was hidden/nested/etc.
Speaking of the tree I really like the simplicity of GDScript and built-in methods and things. Again I don't like Unity's system and I like Unreal's blueprints however I'd love the ability to write code in something other than C++ for various reasons. I did not try visual scripting in Godot but the fact that it supports it out the box is fantastic. I firmly believe that engines should provide as little friction as possible to new game developers who just want to bring their ideas to fruition. (This is a separate topic but nobody should be gate keeping new developers, especially ones that don't come from a coding background. Your issue is with storefronts and curation, be mad at that.)
Why Pig Poppa?
There's no simple answer here just a bunch of random things that led to me to mold the game into what it is now. As everybody knows this current time the world is in fucking crazy for a lack of better terminology. There's way too many bad things being signal-blasted to everybody at once via the internet, news, social media, and peer groups. A combination of things is putting people over the boiling point and it's a lot to take in and stay composed even for the most rational of people.
Especially being a huge fan of hip-hop, police brutality has always been a forefront of discussion in the various circles I find myself in or surveying. I've had few interactions with the police and none of them positive, and that's as a white male. I could not begin to imagine being a person of color, much less a black male, in America daily. I don't know how it feels and I will never know how it feels to live in a society that has both systemically and openly oppressed people that look like you from the time you were born. I don't like speaking publicly about my feelings (especially if I feel like I'm not equipped to have the best viewpoint on the subject) and I am not one to virtue signal or anything like that; the barrage of current events just sickens me physically and emotionally.
You know, it's good to let your anger out
And let love in, ha ha, and, uh
Heh ha ha ha ha ha, ha, ah heh, heh
I think it's good to, that if you can put anger on a picture
Instead of smacking someone in the face, it's a lot safer
I don't know where the original quote comes from, but this quote from the opening of the song "The Cow" by Westside Gunn puts into words how I feel about creating the game. For me games are a creative outlet to get out whatever thoughts and feelings I have inside. Sometimes that's just a boring game like Tetris. Sometimes that's a game about causing chaos by spray painting things and killing pigs. Feeding the negative thoughts and energy directly back into your artwork instead of physically reacting might not be an easy thing to do but it sure as shit can be cathartic.
The theme of GWJ was "Revolution". The initial idea that I wanted to start working on was a game where you play as a modern day revolutionary and your goal is to paint over monuments/topple statues/etc. while being hunted by the pigs. You would use graffiti to do things like cover up hateful wording and maybe write your own or tear down/paint a statue into a person worthy of display. There's a lot of ways I could go with those ideas but unfortunately that kind of project was way too out of scope for a weekly jam (which is always what happens).
I came up with the name Pig Poppa towards the last day of the jam when I was trying to think up a name to list the project under. I love alliteration and figured using 'pig' in the title would work, so I settled on "poppa". I wasn't sure of the direction I wanted to go with the name: it obviously represents the idea of shooting pig but I also was considering implementing a vague story where you are/are fighting "Pig Poppa". If you don't like the connotation of the title that's fine, but I'll let the sample of KRS-One's quote from STFU Part 2 by the late great Sean Price (RIP) speak to that:
I think that um, if you truly want to stop the violence
You look at someone's who violent, you pick up a baseball bat, and you beat his (ass)
Now, obviously, then the violence will stop
The shipped version changed the spray to a square but I'm working on it!
Funnily enough, while I'm a huge proponent of healthy work/life balance (and generally maintain that in my 9-5 jobs), something about indie game development just doesn't work like that for me. I think because it requires me to be more creative than I normally would be otherwise doing similar types of work. Sure, doing devops-type work I might design an system architecture and be "creative" that way, but it's not the same thing. Indiedev is also a lot more motivating than just working on some boring side app you hope makes you enough money to keep food on the table.
Honestly I think I was partly burnt out from working on Off-Killter and seeing it getting plays but not getting any real feedback about the game. I initialized the project/repo named `gwj-revolution` on the 15th, made some little additions from the VR tutorial on the 16th, but didn't truly make any progress until the 17th when I implemented the initial code for the spray cans. I wasn't sure how I was going to do this exactly, but thankfully a Godot community member named 'Miziziziz' had a repository on GitHub with a sample project for spraying a material onto surfaces that I was able to easily pull in and adapt for my immediate needs.
Let me step back really quickly to mention the art direction for the game. Obviously it's very colorful and that was on purpose for a few different reasons but mainly because it's easy to make look good and I wanted to add colorful gore when killing pigs for a stylized effect (think MadWorld inspired). I decided on choosing a color palette for the game, something I've never done, by just picking random colors I liked. I wanted to limit myself to no more than 10, and when I thought I really had 9 so I just stuck with that. I found this really cool site for generating and saving palettes. This is the game's current palette:
Am I allowed to use different shades? Is that cheating?
After the spray painting was implemented it started to feel like I had something worth pursuing so my interested kind of perked up and I knew that I could have at least something to release. I started mocking out the level and adding basic scenery like trees, benches, and architectural features like fountains. Once I was satisfied with the basic scene I finally had decided on the game being violent and added in the weapons from the VR starter tutorial.
Of course since I had weapons now I needed an enemy to use them on. I went looking for a pig model and found the perfect one on OpenGameArt by user 'namelivia'. Best part? It's textured and animated with the included Blender file! I had already the placeholder spheres that break apart in the scene from the tutorial so I figured that would be an excellent base for a gory death. I changed the color of those, added in the pig model and idle animation, and before long I had a moving destroyable enemy!
The actual difficult part comes in when you want the enemy to do more than just stand around. I'll admit I have next to no experience programming AI and that shows because I'm currently terrible at it. The idea I had was for the initial enemies to be smaller pigs that patrolled their areas and then charged at you and jumped at your face if they got close enough. That basically ended up in them jumping at me and then flying straight up into space. I couldn't get this right, so I ended up settling on them just coming at the player and "attacking" then stopping momentarily. And even that kind of broke in the final build. That's one of the biggest things I'm focusing on fixing post-jam.
Most of the other parts of the jam were spent learning Godot itself and the right/wrong way to do things, fiddling with various scripts, trying to figure out why I broke something, and adding little bits of polish like more scenery, a memorial area, music, actual terrain (with a low poly water shader), and implementing some sort of menu and UI.
Speaking of the UI this is the first time I've done any kind of UI in a VR game. Since the goal was to capture paint cans I wanted to have them obviously displayed and have at the very least an exit button in the game. Obviously the menu isn't great and I'd like to improve it but I'm honestly pretty happy with how it turned out for my first time. It's basically a scene with collision enabled planes (for raycast selection) that get toggled & locked to the user's view. I want to improve this and find a better way for the user to know their health level and how many cans they have left to get. The health could be solved by a vignette on the screen but the can UI is not as easy unless you want to have a sort of sci-fi futuristic overlay style UI. I thought one idea might be having a sort of visual inventory/pop up that is connected to one of your hands/wrists might work well; I saw a great example of that on Reddit recently that I might try to implement depending on how long I spend polishing this project.
Wrap-Up & Future
I crunched the last 48 hours with only a little bit of napping to get the majority of what I could done before it was time to submit. I like crunching like this when I'm having fun with a project and am actually getting stuff done; it only sucks when I can't get everything I want done for a submission. As soon as I notice myself just staring at a problem for too long I either switch tasks (programming to level design) or take a stretch break (and rarely a nap). But to circle back to the beginning of this article I realize that crunching is not a healthy work habit to have long term and I do not want to make this a habit for any actual projects I dedicate myself to in the future. I'm slowly but surely learning I need at least 4 hours of sleep to recharge enough to where I feel like it's a new day.
I'm happy with the progress I made on Pig Poppa considering how long I actually dedicated to it during the jam, but I would've liked to have the game in a better playable state. Currently these are the future tasks I have planned for Pig Poppa:
- Fix terrain navigation (teleportation everywhere including slopes)
- Improve pig AI patrolling and attacking
- Improve game performance when using spray cans
- Allow every piece of scenery to be painted over
- Polishing whatever else feels necessary
I never want to leave a game that's on my profile unfinished; WIPs are fine but broken abandoned games are not. So I want to at least tie up Pig Poppa to have a fully working menu, endgame, and be polished enough to where all the basics work (navigating, shooting, painting, etc.) and it feels worth at least a few minutes of your time to admire the scenery and paint a statue.
That's finally it! Thanks for reading this far; I'm planning to make a YouTube video for this post too so be sure to follow me/subscribe and check that out when it's up. I'm also planning on releasing the source code, so please let me know in the comments if you are interested so it also serves as a reminder for me to make it public!
If you played Pig Poppa please comment below or Tweet me and let me know what you thought, positive or negative! I'm open to any and all constructive criticism about the game. Maybe you don't agree with some of my points or my reasoning for creating the game? Let's talk about it.
Follow me on Twitter: https://twitter.com/elocnat
Follow me on itch.io: https://elocnat.itch.io
Get Pig Poppa
Leave a comment
Log in with itch.io to leave a comment.