I'm a little late for my November post. I am going to count this as my November post since I am doing only a day after. I feel like it's close enough and I was busy over thanksgiving. However, I was still pretty rushed when making this post so its definitely not as polished. One of my favorite quotes is "if I would have had more time, I would have wrote a shorter letter" and I think that applies here. Anyway, I'm going to try to get this up as fast as possible on this shitty airplane WiFi (thank you t-mobile for the free wifi) and hope nothing goes wrong. Enjoy
A friend and I decided to do a game jam that weekend. Something that you should know about me is that I don't do spontaneity well. It gives me a lot of anxiety, but sometimes, I do something like this to push me out of my comfort zone because sometimes it's really helpful to be able to do something on short notice.
I had an issue with deciding to do this. I have never made a game or even touched the software to do it. We made the unsurprising decision to use Godot due to Nate's familiarity and ease of use. The rest of Thursday, I finished my classwork so that I could work on the jam for the entire weekend.
On this day, I emailed Gender Inclusive Housing at my university. When I arrived at college, I was still closeted and got placed in an all-male dorm. Since arriving, I had made significant progress towards actually coming out and wanted to be moved to Gender Inclusive housing for the next semester.
Within about 30 minutes, I got an email back asking if I wanted to move that weekend. This rocked me. I wasn't sure if I should or if I would be able to move out with 4 days' notice. I tried to finish the work I needed for the day, but it was challenging. I don't handle spontaneity well, and this was about as spontaneous as it could get. I felt as if there was a rock in my chest for the rest of the day. Ultimately, I decided that I needed to do it then.
Friday came around, and the jam was supposed to start at 12. As we got closer to the time, I started messaging Nate to see if he was awake. He was not. Eventually, we got to 12, and I decided to go on a walk in the woods near my campus to start thinking of ideas. The theme was Mystic and Constant Escalation.
I really enjoy walking around in these woods. It's a very calming and serene experience, and it's the only place on campus where I ever felt truly safe and alone. As I was walking, I passed the place where I had a panic attack a week earlier. It was surreal walking by that.
Eventually, Nate woke up, and we got on a call to discuss what we wanted to do. We decided on a bullet hell game. This fit the theme of constant escalation, and we decided to theme it around magic stuff like crows, crystal balls, and similar.
With the game decided on, I needed to start making the code which was complicated by the fact that I had no idea what I was doing. When presented with a task that you have never done before, it can often be intimidating and difficult to work with because a lack of knowledge does not allow you to see the edges of each part and everything blends together into a single mass. When this happens, I believe that the best way to approach this is by starting as fast as you can and building something, anything. There is a desire to do it right the first time after learning, but that can be too daunting. If you make something quickly, you are suddenly on the inside of the problem, and everything grows from that point. This makes each consecutive step easier, even if your first step wasn't as good as it could possibly be.
I started by making the main player scene in Godot and tried to make it move. I wasn't quite sure how to do this but I looked up a tutorial and got it to work. From there, I decided I needed to get a bullet to be able to shoot from the player. This was easier said than done. I made a bullet scene but getting it to shoot from the player was very difficult. I spent a lot of time working on getting it to spawn at the same spot as the player. This took me a lot of trial and error, but eventually, it started working, and we had the start of a game that a person could play.
Since I needed to be moved out by the end of the weekend, I just needed to start packing. I had a lot that I needed to pack and wasn't quite sure what I needed. The first thing I decided to pack was most of my clothes. I decided to put clothes I wouldn't be wearing in the next 4 days into a suitcase still on their hangers, so I wouldn't need to rehang them once I moved in. The suitcase was filled quickly, so I packed stuff in a large duffle bag. I also started unloading everything in my desk drawers.
I was incredibly nervous throughout all of this. I didn't even have room assignments and still hadn't wrapped my head around the fact that I would be moving out in two days. I felt vaguely sick all day, like the way you feel right before a big drop on a roller coaster.
While I was working on barely getting something working, Nate worked on all the game's sprites. He created some really cool enemies and made the atmosphere amazing.
Because it was a Friday night, I decided to go to my university's Hack Night. Every Friday, the biggest group of nerds you have ever met gather at the maker space and work on interesting, fun, or just plain weird projects until ungodly hours in the morning. I have made many friends there, and it is always something I look forward to. I was hardly out of place working on a game jam there.
During this, I started implementing the new eye enemy with an attack with a bullet spiraling around it. Again, I planned to make something as fast as I could, so I started thinking about how to implement it. Of course, I overcomplicated it. I decided I wanted to do this based on the parametric derivative of the spiral of archenemies. This would allow me to manipulate the velocity throughout the attack in order to replicate that function. I spent most of the night working on making this work. Nate tried to helpfully tell me that I was a fucking idiot and overcomplicating it, and I decided to proceed anyway. Ultimately, once I got the spiral behavior, I noticed how flawed my approach was because the velocity of the spiral of Archimedes increased with each spiral, which made bullets that were impossible to dodge. I continued to tinker with it by throwing more random math at the problem till I got some weird but interesting behavior by dividing by a natural log. It was 12 AM at this point, and I decided to call it a night since I wasn't making progress. In my opinion, sleeping off issues is one of the best ways to deal with them. You can only run into a wall so many times before you just can't anymore, and sleep allows you to come back to it with a fresh mind.
I had to go to class, and that was one of the hardest classes I've sat through. I had a constant brain fog and anxiety throughout the whole thing and couldn't take my mind off of everything that needed to happen. At the end of the class, I got an email from housing with my room assignment. Immediately, I felt a massive weight lifted off of me. Unfortunately, my roommate's assignment was messed up. When I tried to email my roommate, my email bounced. I emailed housing about the issue and called to no avail, so I had no way to contact the person I would be living with in 2 days. Surprisingly, I was mostly okay with this. I emailed some more people and knew this would eventually be worked out because there just wasn't another option. I did go to that night's Hack Night, but I headed out after about an hour because I needed to wake up early the next day.
I quickly implemented a more sensible spiral shot by rotating the velocity vector. This worked almost instantly.
During the rest of the day, I was going to work on the hat enemy and start on the final boss. The hat enemy was relatively simple. It was a clone of the first enemy that Nate created, but instead of shooting one shot, it shot 3 at slightly different angles. I should have been able to implement this one relatively quickly, but in our rush, we didn't make an enemy class, so it was rather annoying to add enemies. We could have gone back and fixed it, but we determined that there was not enough time to do this as we had already implemented two enemies. Eventually it was implimented.
Earlier in the day, I got in contact with my roommate, and we scheduled a time to meet. By this point, my bags were all full, so I decided to bring them and unpack them so I would be able to use them again for the rest of my stuff. If I had planned out my packing better, I likely would not have needed to do this, but with the time I had, I didn't have any other choice. It was really nice getting into my new room and meeting my roommate. Even this early, I could already tell it was going to be better.
After talking with my roommate for a bit, I went back to my dorm, packed a bit more, ate, and then went to Fantasy Club to take the night easy.
At this point, I started implementing the boss enemy, the tarot card. This was difficult because we wanted it to have two attacks. I started by cloning another enemy and then created two new attacks. The first one was relatively easy. All I needed to do was create a shot that went up and then fell with gravity. The next one was a bit more difficult because it needed to hone in on the player. This wasn't too bad, but I struggled with getting it to follow the player. The issue was very similar to the first issue I had with global positioning, so I was able to fix it after I realized the cause. I then started on the state machine for the card's behavior. I was rushing to get it to a specific location so I could leave by the time I needed to go to the fantasy club. I was pushing the clock, but at the last hour, I was finally "happy" with it, so I decided to leave.
When I was packing, I realized I had nowhere near enough bags. I ended up needing to go to Walmart to get moving bags. They were still not enough when I got back, so I needed to make an extra trip. To do this, I needed to start the checkout process, which would start a 24-hour timer for when I needed to be moved out. I didn't really have many other options but to do this, so I did. I got my key and was able to access the new building. Having a countdown on my phone did not help my anxiety, but it did get me moving.
At this point, I needed to just finish the tarot card enemy. Since I got spawn movement and attacks
working, I needed to finish the state machine and get it all tied together. The biggest issue I was
facing was getting timers initiated in order to activate the different behaviors and switching.
Since I was running out of time, I did this messily with state changes on the state machine and
called get_tree().create_timer(#).timeout
way more than I should have. Eventually,
however, it started to work, which was enough for this phase of the project.
I was now fully packed and cleaned, so all that was left was to move my bags. Unfortunately, there were way more than I could move on my own, so I called for some help from my friends in Fantasy Club. I am very grateful that they were willing to take the time on a Sunday night to help me move. With their help, we were able to move all of my bags to my new room, and I could start settling into my new home.
At this point, we needed to get ready to launch. One of the things that we needed was some splash art to show while loading. Nate was busy with the background music, which meant that I needed to do the art. I can do art, but I'm not very good at it and find it somewhat difficult. If we wanted to have it by the deadline, I did need to do the art. I made it, and I think it's alright. I'm not necessarily proud of it, but it did serve its purpose. With this, we decided to submit the project and go to bed.
When I initially considered this post and its takeaways, I was thinking more about coding practices. I thought, " Wow, you should really make a class for your different enemies to make your life easier," but that doesn't really matter. Even when doing it "wrong," we still ended up with a functioning game at the end.
I believe that a more important focus is being able to just do something, even if it's not the best thing you could possibly do. We would not have been able to finish the game, and I would not have been able to move if we didn't just run forward instead of carefully planning out everything to make sure we were doing it optimally. This isn't to say that there is no place for careful planning. In fact, you should be doing that most of the time, but it is still important to be able to do something rather than nothing when the situation calls for quick action over the best action.
Additionally, I needed my friends in order to succeed in both of these things. I have never touched Godot before and would not have been able to accomplish as much as I did without Nate's technical and artistic support (again, he also did most of the art and music). I wouldn't have been able to move without my friends helping me move bags and everyone around me being super supportive emotionally while I was incredibly stressed out.
I am super happy with the results of both of these events. I want to do another game jam in the future, as it was enjoyable, and I feel like I gained a lot from it. I don't think I want to move again, but I am so much happier in my new dorm and am really glad I did it. Me from a year ago would not be able to do any of these things. Deciding to do something as large as these would have terrified me, but I have gained a lot of confidence, and I think it is worth it.
Check out the game here and let me know what you think