milkblog

homepage

May 1, 2024.

Finding More Time

April 3, 2024.

Walking

March 6, 2024.

Making Time

February 15, 2024.

Writing What Was Already Written

January 10, 2024.

A New Year

December 4, 2023.

Ritual

October 7, 2023.

Few and Far Between

August 20, 2023.

Learning to Program

June 21, 2023.

Patchwork in the Game Cloth

June 12, 2023.

How I am Thinking About Level Design

May 29, 2023.

Recent Updates and This Week's Plans

May 28, 2023.

Doldrums

Finding More Time

May 1, 2024

April was another good month of creative progress: the re-write of Gossamer Matrix has been accelerating, and I have begun to implement some of the mechanics involved in Snake Blood.

As far as GossMat goes, I am working on the weapon implementation now, which is mostly connecting what happens on the reload screen with the functionality of a traditional FPS weapon with raycasting, ammo consumption, all that. It seems simple, but I'm struggling with it more than I thought. It is more of that tangle of threads and Godot signals that have to weave around each other, and every step of the way I feel that I am making it more complicated and confusing. But actually, that's exactly what I am doing, so I really shouldn't continue to be so stressed by it. That's what happens with these things right? they get more complicated over time. I just hope mine ends up working in the end.

During my implementation of the reload system so far, I have run into many things that I overlooked with the way PhysicsItems and drop zones work. A huge one was leaving out the ability to restrict a drop zone to a certain item type. These drop zones are used for the player's general inventory, but also for things like placing ammo into weapons, and obviously there cannot be a situation where you jam a chocolate bar (or the same weapon) into the chamber of a gun. That'd be fun, but I'm not sure if I want things to be that out of hand. Anyway, all of this is to point out that no matter how much I plan, there always seem to be situations that are overlooked that come back to bite later. Which keeps things interesting for sure, and can sometimes lead to inspiration, but I want to minimize it as much as possible. Designing for 'modularity' seems to be a good way to prevent this, but for me there is a trade off between time spent developing the game and time spent planning it. I can plan as much as I want, but I don't think that I'll catch everything.

In contrast to this, Snake Blood is almost completely planned out as far as programming goes, and I'm feeling good about it. There are few problems that I need to solve in comparison with Gossamer Matrix, and I think the smaller scope is more encouraging to me, because it feels like I can actually complete it without an unreasonable amount of work. I've never had something I felt confident in presenting as a finished work, so being able to finish something is really exciting to me.

~~~~~

The most valuable thing that I think I am learning from pursuing game development is how to form and adjust the scope of something. Scope is dependent on the technical requirements, skill, and the idea itself, but also highly dependent on the context of the creator. Regardless of any changes in my skills and desires, I've realized that the time I have to work on a project, more than anything, is the real limit of my scope. For me, this is also closely tied to my stress/mental health. The less free time I have, the more stressed I usually am, and the less likely I am to spend it on creative work. I think part of the reason I feel so confident about Snake Blood is that it is a project specifically designed in mind with not having that much time to work on it. It is something that is small enough to survive the most turbulent of monomaniacal storms, as well as the most boring doldrums. And I like that, I feel much more comfortable with a smaller scope than a larger one. I feel like it doesn't matter as much, but in a way that I think is good, is invigorating to me. In a way, I am much more excited by it because I can just release it in whatever state that I want; there is less expectation than with a commercial object. And I suppose that I can still do whatever I want with GossMat, but it feels different somehow. It is at least more technically involved, and getting it to function the way that I want it too takes much more consideration than I am honestly comfortable with. Maybe that discomfort is good though, too.

~~~~~

Back to Gossamer Matrix, I want to briefly look at what I had talked about in January as far as how I imagined development going...

For a tentative plan I had (1) upgrading the version of Godot, (2) polishing the item physics, (3) adding back a level development work flow, and (4) beginning to work on AI and level design. I think that this is probably still realistic for this year; although, 'upgrading' turned into 're-write the whole thing'. That being considered, I guess I have just surpassed (2), which is polishing the item physics. BUT, since I am re-writing the game, things have changed a bit in that now I have to add the weapons and player behavior back before I can begin working on implementing a level development workflow. I can call it (2.5) then.

I think that I was generous in setting up expectations, and that it is working out pretty well. At this point, I feel that I am definitely going to be working on level design/AI/gameplay by the end of the year, which feels good. Then hopefully, 2025 can be dedicated to play testing and design and what not. I hope that I will feel comfortable releasing at the end of 2025, but I am leaving that alone for now as there is a lot of time for expectations to change between now and then.

~~~~~

I have no idea how many people actually read these posts, but I wanted to ask a question about what would be most interesting to read about for the future of the blog. Should I focus more on the technical problems that I give myself and have to solve, or more on my thoughts surrounding it? These posts are mostly a way for me to indulge myself and let out some stress, but if people actually read what I am writing down, I'd be happy to include stuff that others find interesting. I've also considered trying to write more in general about videogames or whatever, and if I get the urge to do that I'll probably post something in between development updates.

Anyway I think I have been using my new-found time pretty well, and hope I don't burn out soon.

Walking

April 3, 2024

i actually feel like i made a lot of progress on Gossamer Matrix this month. i made somewhat of a breakthrough on how the PhysicsItems are interacted with that i think (i hope) will not get in the way of additional features and functionality later on. the thought that rescued me from this unproductive loop was using a singleton which all the PhysicsItem's 'let_go' and 'picked_up' signals would get attached to, so i could have a common functionality of them accessible from anywhere in the code. there is probably a better way to program the PhysicsItem class so that i can just have the code contained there, but this way it is separated for me in my mind and easier to grasp. i have always been told to stay away from things in the global scope, but my experience with game dev tells me that there are things that just benefit more from being freely accessible across the program. i may have to amend this thought later on, but for now i think it works.

so, the basic flow of PhysicsItems is this: they get picked up from by the player and send a signal to a DropItemHandler which calls necessary functions related to the particular item using data from the global scope. not much happens with an item that get's picked up other than physics for it are completely disabled (may change in the future to enhance gameplay) and it's parent is changed to the Loose Items Menu. if this object is then dropped, the global scope checks for a Holster position that the player's mouse is hovering over, and if it is compatible, the item is locked into this holster by calling the drop_into function in the Menu that is associated with this DropRegion. if no compatible region exists, the item is just dropped into the Loose Items Menu where it will always jump and tumble around the player's screen until the player gets aggravated by it and throws it away, or finds a spot in their belt to keep it secured.

i reworked the inventory code a little too, but have yet to test it. the current build is an 'unstable' one, with plenty of unfinished functionality that i still have to work out, such as two overlapping items being picked up at once, and the mouse region not registering unless the mouse is moved out of it and then back in. weird stuff like that.

-

i have also started to feel that gameplay in Gossamer Matrix will get stale quickly if i just have gun parts be the main interactable object. my idea on the plot and visual design is constantly changing, and i am disappointed by a lot of what i have come up with so far for that, but i am trying to unify the inspirations i have for this project into something that feels somewhat cohesive but also a little chaotic. there are certain beats that i want to hit, but determining whether they are too jarring or out of place is going to take some experimentation once i get into the actual gameplay development side of things. i simultaneously feel too restrained and too extrapolated.

~~~~

i have been putting some work into Snake Blood, which i briefly described in the last post, as well. the main problem i am facing with that is how i want to handle the color palettes. it is a game about wandering the Desert, and the colors of the world as the temporal space changes are a main point. there are two axes with colors that i want to combine somehow, and i want to curate them, not just generate an interpolated set that the world transitions through. each color has to 'mean something', and so far i have made 23 colors for the transition from midnight to noon. but, how does the sky's colors reflect off the sand of the desert, and how does that change the shadows? how does that change the color of the objects that'll be encountered throughout the journey? the position of the Sun and Moon are mapped to the player's position on the surface of the world, so unique places to visit are only going to be one color, but for objects like rocks and weeds, they are going to be encountered during every color of the sky. it would get exhausting creating all those assets and would be jarring to experience a discrete color transition for each different part of the 'grid' that the sky's color changes, so some extent of interpolation is going to have to be done, i think. i will of course have to look at how Godot handles color addition and blending, and maybe that will help me a bit to come up with the main colors. i should also mention that i don't want to use any computed lighting, as i think that will ruin the effect i am going for; it is the same case with Goss Mat and i honestly really like following that design restraint. but Goss Mat uses 32 colors, and i already have way more from just creating the sand and sky colors.

there is also the potential problem of what to do when i want color transitions that are outside of the Sun/Moon transitions, like during the Eclipse that happens, i want everything to become desaturated, which will involve some two-dimensional thinking about the color grid i'm making. the easiest way for me to think through this is to draw it out, but i guess if i am not interpolating things, i don't really have to look out for which mathematical formula would allow this to happen, i can just look up the correct colors in an array and it'll be fine. things that will become more clear the more i work on it i guess.

~~~~

i hope that i can have something to show for the visuals of Snake Blood soon, i am feeling pretty good about the work i've done for it so far. it is going to be a lot of abstract pixel art and saturated colors. i am also feeling really good about the story/plot for it, and i think that aspect is going to be a lot less work than for Goss Mat. Snake Blood is supposed to be a chill experience of walking through the desert and contemplating the environment and the objects that you encounter, whereas i feel Goss Mat needs some more cohesion and push from behind to make it work. i haven't bothered coming up with a roadmap or anything, and i think it's going to stay that way. things i remember to add will be important enough to add, and things i forget will get left out. the simplicity of the gameplay is also helpful in that regard.

i am optimistic for next month's progress, but we will see what ends up happening. i am going to have more hours available to me to work on creative stuff for at least the month of April. if finances don't get completely screwed up i will continue it through the summer, but again, i'll have to see.

Making Time

March 6, 2024

It has been a little less than a month since the last post, but I want to do these in the first week of each month if possible, rather than some more-arbitrary sounding point in the middle. I think this is going to be a relatively short post, since I have barely worked on gossMat at all since the last one; I really don't have anything new to say. I still think things are going well, it's just that I haven't had the time --- which always feels silly to me to say because I really have plenty of time outside of making money for myself. But of course there are other things happening besides game dev and my job, and I have been compelled to avoid game dev because it really is a form of work: it isolates me from my social life and leisure and takes time from doing chores that I need to do. It's not that I don't enjoy it, I just need to sit down and consciously focus on it, which isn't always easy to bring myself to.

I am currently thinking of ways in which I won't be isolating myself by working on it, and that involves working on my laptop: in the common space, at a cafe like right now; things like these that get me to move around or be around people. What I identify as the major roadblock to development is the fact that my PC is locked away up in my room which for various reasons I don't really want to spend time in. Unfortunately my laptop is a less-than-ideal machine to be doing game development on given that it isn't really meant to deal with graphics other than videos, and it is kind of small. But I also don't think that getting a new one would motivate me much, so I am in this weird state right now where I think the only solution is to spend just a little bit of time alone in my dev-chamber once in a while.

This blog is a good place to reaffirm some ideas of mine, and I hope that I can get used to pulling myself away from life a little bit more to do some creative work, 'cause I think I need it. An idea I have had to ameliorate the amount of time I spend locked away is to do 'idea-development,' or I-don't-know-what-to-call-it, where I write down ways to solve certain problems or implement ideas, sort of to the effect that pseudo-code is used to plan out the flow of a program. I briefly talked about it in a previous post and how I often mess up once it comes to actually implementing those ideas, because I forget about one essential part of the program and find that it ruins my whole idea and I have to start over. But rather than trying to force it in the moment, maybe writing down my problem and having it to refer to in a different place would be helpful? Idk. There is also an idea, that I have tried out to great success, where I use my laptop to make assets for the game, like 3D models and textures or design menus/UI, but that reservoir is dry at the moment.

~---~

I have other ideas that I hope will be smaller projects and won't explode, and so far I think the scope has been kept manageable for a couple of them; I could work on these concurrently with gossMat and just have them be laptop projects and gossMat be a PC project since the scope is much larger. The working title for one of them is Snake Blood, where you traverse a desert in search of legendary beings to mercilessly slaughter and assert your single-minded view of the universe. I am pulling a lot of inspiration for it from the beautiful walk-in-a-park game Proteus by Ed Key and David Kanaga, and the original idea (which has since changed quite considerably) was inspired by the plot of El Topo by Alejandro Jodorowsky. An America-themed bar in Quebec city and the novel Lonesome Dove by Larry McMurtry are also very big inspirations for this project. In recent years I have taken interest in the mythos that goes behind the 'Western' as a genre and its derivatives and so I envision this project as some sort of precipitate of that interest. But maybe, in the absence of inspiration/need of gossMat assets, I can at least begin working on Snake Blood assets or the bastardization of the celestial mechanics that are going to play a large part in guiding the player to critical points throughout the narrative. I think it could potentially be beneficial to both projects and I if I am working/thinking about them each at the same time, allowing me to refresh more often and be inspired while still making progress.

~---~

These posts are at least something, and even when I feel like I have nothing to write about I somehow encourage myself through these. Well, I can't say that I will have any concrete updates about the project this month, but I am cutting my hours at work starting in April and will hopefully be able to finally devote those few moments I want to, to game development.

Writing What Was Already Written

February 15, 2024

I started writing this post last week but got side-tracked.

This is the first update for how the re-write is going, and overall it isn't going that poorly. I am trying to re-imagine the code design to be a little more robust and understandable, because upon returning to it many times in the old structure, I was always confused and frustrated by it. I am hoping to both understand it better and make it more 'modular' this second time around. I am unsure whether or not my goal of having the reload system finished by March is realistic, as I have mostly been focusing on physics and item interaction, but that's fine because I don't really have any deadlines yet. A lot of the changes are probably things I don't even need to do, but it feels good to refresh my understanding of how it works since I first wrote these bits two years ago now.

The most significant change I have made so far is in how the PhysicsItems work, specifically how the player interacts with them. Before, the non-physics stuff like detecting the mouse and holding the object was based on using the collision shapes of the rigid body, which made more sense to me at the time. So the item's bounds would enter the drop area, the player would let go, and then something would happen. I am experimenting with having the interaction be based off the mouse instead, so something will only happen if the object is dropped when the mouse is in a significant area, not the object itself. I am hoping that this makes moving items around a little more intuitive and precise, but if it is too awkward I have another fix in mind that I didn't consider before, which is doing a sort of FIFO system with the areas that an object enters. But anyway.

Programming is never without its stresses, but I think a lot of the stress I feel is preventable somehow. I often get into these lines of thinking where I feel I don't pause, it is just a continuous streak, and when I encounter a block that I didn't think about, I sweep it up into whatever I am working on, and it either messes everything up, or I forget I even modified it and it messes things up later. Most of the time when this happens I make a small change that only helps one problem, all the while creating others. So I need to get better at recognizing these moods. I have tried writing pseudo-code while at work to plan things out better, but that's tough because I don't really have the overall structure to reference when I am working on it, and I forget what it's like, and then I realize later that I actually can't implement this unless I change everything else. Hopefully that is also something that I can be more on top of with this re-write. This is one of the few larger programs I have written, and I feel like the stakes are somewhat higher for this one, because I am planning to distribute it and want as few bugs and quirks in the structure as possible. I want it to work as intended at least most of the time.

I am finding a few hours every week to do some work on this, which is not even close to what I actually want to spend on it, but at least it is something, and somewhat regular. I'll see what I have at the end of this month and hopefully have more information to adjust my expectations for the future.

A New Year

January 10, 2024

Now that it's the New Year I wanted to try and organize my thoughts a bit. Goal-setting is not really what I want to do, but moreso go over what I have been able to do in the last twelve months and see how I can somehow extrapolate that into this year. When going through my development journal I was actually kind of surprised at how much I did, which is contrary to what I feel I have done. At the beginning of last year, I did a lot of modeling assets and sketching level designs because that was my priority. I was going to simply add the last couple of weapons and continue on to gameplay design and then be nearly done by 2024 (ha.) Instead a lot of different stuff happened and now I am on a completely different trajectory.

-

A big thing that I finished fairly early on was the manual weapon switching, where, instead of pressing 'g' to cycle between five weapons, the player would drag and drop the weapon from their belt to their hands in a separate inventory. Development on this went pretty smoothly. The code was straight forward and most of the work I had to do was handling the art that would support it. I still feel like the UI could be designed better but that is going to be something that I revisit for the whole project later on.

An addition that made me very happy and reinvigorated me a little was creating the oscillating fan. It is one of those mundane things that just struck me as interesting and fun to make and so I did it in a fit of passion. One of the most rewarding ways to do things in my opinion. It encompassed pretty much every aspect of development, from code to handle the animation, 3D modeling and texture work, and sound design. That it touched upon all these aspects was really helpful for strengthening some skills, and combining them together into a finished asset felt like a miniature project in and of itself which was very motivating to me.

Last year is also when I started to think about trash in the game, and how to handle the physics a little more interestingly. The trash was always going to crowd the screen, but making it react to the player's movement and other actions is really important for the game feel. To me it feels completely different and it offers a challenge that I think will be fun for the player to solve.

I also buckled down and re-coded the vending machine functionality to be extendable and more random, which will help later down the line when I add new items. I would still like to tweak the randomness a little bit, maybe having it favor certain types of items, manually adjusting probabilities, stuff like that. But that is small work that can be done at any time.

Perhaps the largest addition of last year was the shotgun implementation, which was not a small part of the reason why I began to rethink a lot of the code structure to the game. I thought it would be easier to rip a hole in the game and patch it up to be able to incorporate a new mechanic, but no, it was pretty complicated, and has been making me think the entire game's functionality is now pretty fragile, which in some way is funny. But it is mostly a frustrating thing to consider, despite almost being done with (what I presume to be) the last of the patchwork. The player code is really the only code that I need to preserve, the rest makes up a small part of the game. When I am done with the revolver, I should be done with the player and I will be able to move onto the rest of the stuff that is going to need to be developed.

-

Now, as for what is to come. My plan is of five parts:

  1. finish revolver implementation
  2. upgrade to Godot 4 (3.4 is going to be ancient by the time this project is done...)
  3. polish the physics
  4. add back Qodot
  5. work on AI and level design

These five points have so many sub-points that I do not want to think about writing them down right now. I think, and hope, that the revolver will be completable in this wonderful month of January even though I have yet to turn on my PC since the first day. At the risk of lying to myself, I don't think there is much I have left, not accounting for the inevitable bug fixes that will have to be done. So that leaves February for upgrading to Godot 4.

Upgrading the engine is important to me because I have been using the same version for a couple years now basically, and since a couple more years is probably going to be the realistic timeframe for a release, I want to have it on software that is somewhat modern. We all know how quickly computers can change. This will also give me an opportunity to begin rewriting the game if I deem that I must. I am going to be rewriting the AI anyway considering that the gameplay design is drastically changing, and Godot 4 has a different navigation system, so I might as well take this opportunity the compile what I have learned about games programming and write the thing better and more prudently.

After the engine update/program rewrite, I am going to really hammer down the physics. Things are a little finicky at the moment, and since the physics are what the players are going to be interacting with the most (it is fundamentally the entire game!) I want it to feel great.

Then I am going to add back Qodot to the mix, as I will be removing almost everything except the reloading system during the upgrade. Qodot has been a fantastic help and I highly recommend it if you want to use Trenchbroom as a level editor for Godot. I plan to keep using it as it is the only level editor that I know how to use, and also seems the most intuitive/quick to develop ideas for. I tried Hammer a long time ago and it was confusing to me, Trenchbroom I picked up right away.

After that it will be level design and AI (they kind of go hand in hand), and of course making more assets for sprucing up the levels. There are a lot of things that need to happen in between this stuff, so I am honestly not expecting to get it all finished this year. I also just don't want to set unrealistic expectations for myself. Unrealism can either go too far or not far enough, but if I get the upgrade done I will feel very satisfied, and that is something I can't imagine taking much longer than a few months, barring life events and mental health.

I am feeling very confident about the projected project this year, and I am excited to continue. Now that I have somewhat of a system for writing blog posts and keeping updates on things that I can't really show off in the same way, I am also confident that I can keep a schedule of updates. Once a month is going fine so far, even though this is like the third or fourth month; there is always plenty to talk about and plenty of time to mentally prepare myself for getting *something* done. Thank you for caring enough to read this, and to everyone for caring enough at all about the project to continue expressing interest in it. You have been a big motivator for me to finish this <3.

Ritual

December 4, 2023

So my goals since the last post here have yet to be met. At the beginning of last month I was expecting to have the revolver completely finished and added to the game, and by this month already have begun on level design, or enemy behavior, or writing, or anything other than stitching together poorly-thought-out code (which I am exhausted from by now.) Alas, I still have a significant portion of the revolver left to go. I need to add the bullets into the UI, make the extractor work, and have the hammer function appropriately. I am still debating with myself whether to add the 3D animations in now or later. The only reason I want to work on it now is so that I don't forget how my code works, which has partly been the problem of taking too much time off. But also, I'm just not thrilled with putting the effort in to make it happen at this point, so I'm going to move on to something I find more thrilling. I'm tired of going back and forth through the same script files.

For about a month I didn't work on the game at all, which is kind of scary to me. It's not that I am in a rush or anything, but I would like to have progress pretty consistently, if nothing else but for my mental health; I want the feeling like I am doing something, exercising my mind, expressing myself. For me, at this point, I haven't really found a different creative outlet that hits the same marks. It is strange to me to flick between gamedev projects instead of just focusing on one when I am the only developer of both. Game development hasn't been a general thing for the past couple years, it is always in the context of GossMat, and switching gears per se is not a comfortable thing I can do. Any time I sit down to do something creative on my computer I think, "I could be doing work on Gossamer Matrix instead" and move to that. So, the fact that I haven't really worked on it in a month or so is concerning to me.

I have been thinking of ways I can work that get me into the groove a bit more. I miss those development sessions that went several hours beyond what I had planned because I simply couldn't pull myself away. I don't know if those were healthy really, they were sometimes stressful, but rewarding to a degree that I haven't felt with anything else. And now that I am at the opposite end of that production schedule (which I think is just as stressful but in a different way), I want to get back to development with a more intentional approach.

One of the other game ideas I have been brainstorming has to do with spirituality and conducting ritual, and I have been wondering to what extent I can include those more into my life. I think there is something of spirituality in any creative project, especially ones that last this long, but I am lacking the ritual aspect. This blog is something of an attempt at using ritual to be more intentional and regular and attuned to this project. A space where I have to think about something specific, stay on topic, put effort into staying on track and not letting my mind completely wander. I makes me feel good to have these posts to look back to as well. I am going to try and make a post at the beginning of each month from now on, whether or not I make any progress on developing the game. I will have at least made progress on how I think about making the game, and that is important too, and something that I can apply anywhere, not just to GossMat or videogames. I want to think of this space not as a place to provide updates on any particular project, but more so how I approach creative things in general.

Few and Far Between

October 7, 2023

In August I made a major update, which was adding the shotgun. It was a lot more under-the-hood work than I expected, but the result is exactly what I wanted, and it will make adding the revolver easier hopefully - if not just for the fact that I understand my own code better than I did before. Since the shotgun I have made significant progress toward adding the revolver, finishing all but a couple of the assets that I need for the UI. I still have to do all the coding and importing, but I can do that all at once.

This is how updates have been going generally: big bursts of energy because I rarely get the time to work on it due to the dynamic responsibilities of life. At first, about a year ago, I was really uncomfortable with this idea; it was new to me, and the grinding halt of creative precipitate made me worried. Now it is a normal thing that I have dealt with every day, and I'm feeling less anxious about it. I am often disappointed in myself, but no longer anxious; I'm no longer feeling like I need a deadline, or need to consider every possible thing. I can focus on it a bit at a time. I am finding that having more of a structure is very helpful now. Before, I could spend eight hours of my day creating, and I had the time to execute an idea as soon as it popped up, to derail. Now that that time is spread out, I forget about things and need to write them down. I need to slot them into the general plan that I have.

Another thing that seems to be a consequence of this new method of working is that my mind is wandering to different ideas. To be honest, the idea for Gossamer Matrix was pretty spontaneous, and so was the popularity which put pressure on me to continue developing it. Which, to be clear, is very welcome and if not for the interest of other people it would have fell flat. I love working on it, and it is the first time that I can actually focus on one project and not stray from it. So, thank you, deeply; I have learned so much. But nothing else about the project was thought out, at all. It all came from me hastily needing some sort of context. With all of these other ideas my mind has wandered to while developing gossMat, I have had a base. There is a life to these other ideas. Things that grew and died and left the soil ripe for better, stronger ideas to grow in their place. With these secondary ideas I don't feel pressure to get something solid developed first. The spontaneity behind gossMat is a beautiful part of it, but maybe I am feeling stale from it. I think both approaches have merit, and of course this type of stuff is nuanced, but Gossamer Matrix feels plastic to me whereas these other games are alive in my head and organic.

-

Anyway, the 'plan' for October is to get the revolver, the final weapon, added to the game. Then I can move onto boring stuff like making sure the game saves correctly and how levels will unlock. I shouldn't say boring I guess, it is interesting in it's own way. I mean that it really isn't the type of creativity I can have fun with. It is creative for sure, it is problem solving, and you can take liberties with it as well, and it is a fundamental part of the way the game feels; players will completely change strategies based solely on how a game is saved. I guess that is another idea for a different game....

Learning to Program

August 20, 2023

Recently, last week, I finished most of the shotgun implementation that I have been mentally building up to for months it seems. By most I mean it's all there, except for the charging handle behavior that's a little wonky. Anyway, it took a while because I very carefully had to squeeze in this new code, new functionality, for the weapon system in order to correctly incorporate this new weapon. Usually, I feel like I can just build on top of whatever I created and it usually works pretty well, but this is the biggest project I have worked on yet, and the weapon code is something that I didn't touch since a year ago. Extending the weapon code was not as simple as adding a new weapon in the past, because the shotgun uses an internal magazine, and the shells (in this case, the physics objects that will bounce around the screen) aren't magazines, they are shells. Because the weapon system is based on external magazines only, the magazine (which is usually transient) had to be made to function as a permanent part of the weapon, and the shells had to be magazines, but with just one bullet.

With the way things currently are, and will hopefully not change, the shells are Magazine objects, so they can bounce around the screen just like the other magazines, and can be thrown away when their ammo is spent. However, because, technically, there are multiple magazines 'attached' to the shotgun at one time in order to load multiple shells, they turn invisible and are disabled and simply sit on the reload screen until the charging handle is pulled back. I extended the Magazine class in a couple ways: one, to override any features that the Shells didn't need; and two, to create an InternalMagazine that keeps track of objects instead of keeping an integer tally, so the type of shell could be saved as well (I have slugs and standard shot).

I have studied object-oriented programming for years, and the program I have now I could never imagine using in the past, there are so many things tacked on because I was impatient and too excited. But to fix them now would be to restructure the whole thing, and so many different parts have been lazily tied together at this point that I would need to search for and rewrite a lot in order to make it work. So I will not do that. The program works, and that is really all that matters to me at the moment. Optimizing performance interests me, but it will never be so expensive that it is something I need worry about. There is a certain dizzying, intoxicating element to writing a program that works, but is also awfully confusing when you get down to the threads that I love.

Patchwork in the Game Cloth

June 21, 2023

Spent some time making assets for the shotgun this week. This is going to be the final weapon I add probably, making the total number 4. I am thinking a bit about making the silenced handgun a revolver just to add a little more variety, which I think the reload system needs, but it seems a little silly. I don't know the whole game is silly, it's just another one of those hang ups I have on things, I catch myself thinking too realistically sometimes, not spontaneous enough. Hell, I'll change it to a revolver next.

Beside that aside, yes, all the gun assets are done! I didn't really want to do that part because it involved a lot of technical, time consuming, non-creative stuff, like breaking the icon for the reload into separate parts, or making the hands shape correctly to the gun and having the gun positioned correctly in the hands. It also involved modifying the code a bit to include a new weapon. The big code modification is coming up next though, the actual functionality of it. I must set aside a several hour block to do it one of these days, just so I can work on it all in one go and make sure I have extra time to buffer it if something unexpected happens, which it always does. That is the only way I can comfortably start working on a coding project: if I don't have a time to beat.

It is this patchwork feeling I don't really like doing. I like coding an idea from a fresh start, or in a way which can be isolated from the rest of the code. It is probably my fault for not planning ahead so much, but everything eventually gets all tangled up and attached to each other that I must navigate to so many different places and make little small, identical changes. And then I miss something, and thank goodness the project is small because it would take forever to debug every issue that I miss. Again, there are probably technologies and techniques that I can learn to prevent this from happening, but that is boring. I am making a game because it is a fun and interesting process, nothing more. I've learned a lot from it so far, will learn more, and will never learn everything. I can make some compromises. The second this stops being worth it I will quit, but as of right now this has been worth every second spent.

How I am Thinking About Level Design

June 12, 2023

This week I spent some time with the images for the Steam page to make them a little more exciting and up to date. I feel like my thoughts on the art style have solidified over the last year and that I've felt more confident in creating game assets and 'promotional' stuff. Part of that of course is that I've learned the tools a little more, and that I have had the time to think about the directions I want to take the project in. The updates are not yet live, mostly because I am waiting to make the trailer, which means that I am looking at tweaking the level design a little bit. The levels have largely stayed the same over the past year, and for me that makes the visuals feel a little old and non-polished. I think they aren't up to snuff with what a final release should be, and will need a pretty big change eventually, so might as well freshen up some things to better represent the work I have put into it through all this time.

I know that other people probably won't notice or feel that way, but still. I need it for me and I think that is okay because I'm not really stressing over it. It is just another thing that I want to do as much as the other things, a thing to check off. It's not going to be something that takes any more effort or time than anything else. But I'm not looking forward to it as much as the other aspects. I am excited to finally get the time to add the final weapon, to fix this bug with the vending machines, test and modify the AI (or just entirely rewrite it), and even create banal objects that will clutter up the scenes, in a good way. There is just something about re-visiting these levels that makes it un-fun. Maybe it is that I have already populated them with characters and objects, and it is difficult to imagine me moving all that stuff around to accept a new layout, even though most of the time I don't have to move around all that much. Psychological thing, I don't know. Anyway I am going to add a new weapon soon, tweak the levels a bit, maybe the textures, and then begin recording gameplay for an updated trailer.

Recent Updates and This Week's Plans

May 29, 2023

The other day I got some important bug fixes done. The first one had to do with loading the player's inventory correctly, as I noticed things were missing on respawn. At first I figured that it was something to do with improperly saving/loading the items, but I realized I was calling the 'remove item from inventory' function every time an item was picked up, not just the one time when you unholster it. So basically every time you messed around with these items jumping around your inventory screen, you were technically removing the items that were still on your belt. Come time to start a new level, your unfairly trimmed inventory was saved instead of the one that you appeared to have, and when you respawned you almost all the time started with nothing. I presume that fixing this one also fixed a bug where new magazines would be put into already occupied slots, so hopefully that is two problems with one solution.

The second little bug was annoying but easier to fix. Turns out I wasn't disabling the mouse when the player leaves an inventory screen, so whatever they were hovering over would be clicked on when they interact with something in the world or shoot a gun, causing weird things like unloading the magazine or unholstering your weapon after every time you shot at something. I just made a global boolean flag that gets turned on and off whenever the player can use their little wiggly arm thing, so that if the player clicks on a grabbable UI object while not in a menu it won't proceed with the code block.

Next week I will update the steam page with some gameplay and new art assets and a better description that suits what the game is about now. It has been a year since I touched that page basically so it can use an update. I feel my ideas and what I want to convey have changed a lot since.

Doldrums

May 28, 2023

I have reached a period of stillness in my creative life at the moment. Over the years that I have more seriously undertook art, and through conversations with people and friends, I realize that moments like these are somewhat inevitable. Maybe there is some sort of creative-energy-reservoir inside all of us that depletes and needs to be replenished once in a while, but even that oversimplification makes me uncomfortable. I don�t really know. They just happen.

The worst part about it is that I do not feel like I have any control over these bouts of depression. They begin for whatever reason, and continue until they cease and I get those creative juices back, coursing through my body. I try to figure that pushing myself to accomplish smaller goals along the larger steps I had set out for myself will ease me into my usual state of mind, but it almost never works really. I create when I feel creative, and don�t when I don�t.

It is frustrating to acknowledge this indefinite gap in my personal productivity, especially when so much of my life revolves around it, but I believe there is not much else that I can do during times like these to ameliorate it. I try not to feel frustrated, because there is no point. Every once in a while there is a spark, either related or unrelated to the current project, and I pursue it briefly and then give up on it usually. So many things remain unfinished this way. That is disappointing to me. But it is in the revolt that I am made miserable. If I can somehow accept this period where everything pursued is pursued for the moment and not for the future, I feel that I can become encouraged again.

Many things go unfinished. When a project in the scope of a couple years is developed, original ideas are tossed aside, and new ideas rapidly blossom to become unexpected additions. The project changes. My inspirations change. My life situations change. I don�t know why it is surprising to me, that things change, but it is. And this surprise I feel naturally turns into frustration, because I don�t think of where these feelings come from. I don�t need to know where these feelings come from, to be honest, I just need to not be made miserable by them. I must acknowledge them to accept them, that is all. Acknowledgment. This is why I have found it to be pretty pointless to set deadlines for myself. I never know when the wind will stop blowing, or when it will pick back up again, just that it will happen, eventually. When it happens, I think that it is important to take advantage of it as much as I can, and maybe when the winds inevitably settle too, I can take advantage of that time to reflect.

The doldrums is an excuse to stop stressing about things, do things for myself, and do things for the short term. There is a moment to practice mindfulness, acceptance, and a moment to try and learn about things that otherwise I would not have the time or interest in. These periodic moments where I cease to feel myself have always scared me, I am scared now. It is like crawling into a cocoon, with the body crying out to change itself into something it wasn�t before. I am comfortable in my life before this moment of uncertainty and dissolution, why would I accept a change now? But if these periods are inevitable, fighting it is pointless. Guidance is different. Moments of change are stressful, uncomfortable, but if you learn how to guide them, they can change you in good ways, you can improve yourself. Don�t harden the rest of you inside the cocoon, let it liquidize and become fluid, see the fluid, recognize everything that it can become, and move toward it. The doldrums are externally motionless, but inside are extremely chaotic and stressful. A ship stuck at sea is still full of seamen all crying out to do something, get home, to eat. But the surface of the water is calm, the sun shines, and nowhere else is there a sound to be made.