Wednesday, January 1, 2020

Welcome 2020

Hello, I hope you had a good new years! I had a good holiday season but again I didn't get as much done as I had wanted.

I put alot of effort into learning Lemur's style system which is really cool but has a high learning curve. When I implemented my ui elements for Reindeer Rearing the first time in Lemur I wound up making many sub-classes of the default components. This looked good and worked as expected, but it was alot of work and alot of copied code. Using lemur's styling it looks like I can minimize this duplicated code almost entirely. Here's my current placeholder ui until I can re-work in the pixel art from before:
I was able to implement the chime sound effect when buttons are pressed in 7 lines in the style, which is automatically re-used for every button. In the original Reindeer Rearing the simple chime effect was 4 lines of code every time I created a button.

I am also completely re-working all of the mini games. I am aiming to get them to feel more responsive and overall more polished. At the moment they are all simple debug shapes or output text so there isn't much to show, so I hope to have some of the artwork moved over or replaced by my next post.

That's pretty much all I have for today. I'll try to have more artwork and maybe some usefull code snippets next time. Consider that a resolution ;)

Tuesday, December 3, 2019

Bogie Weapons and the return of Reindeer Rearing

Hello, I hope you had a great November. My November was very productive. I had a solid week off from work due to the holiday and I dedicated most of that time to working on various projects!

Bogie is churning along nice and steady. I continue to bash away at physics to get them as consistent and predictable as possible. I was able to boil down the aircraft flight model into several easily modifieable and understandable tables and the results are very pleasing. The underlying math for the flight model is not likely to change dramatically from here on.

After I got the flight model in a useable position I started playing with weapons. I now have working machine guns and guided missiles, all weapon code is still rather early though and likely to change alot.

I was able to implement asynchonous loading and loading screens with progress bars! This was a first for me so I am pretty happy to discover how simple it could be.

December is here, and that means I decided to revisit Reindeer Rearing. I wound up leaving RR in it's broken state 2 years ago when I realized I was trying to build on top of a broken base. I decided to give the project a complete re-write while using the assets I had already created. Hopefully I can have this finished before Christmas.

That's all for my November update. I apologize for the lack of pictures but nearly everything I have finished is either completely behind the scenes or just being drawn with debug lines atm. I will do my best to have some screenshots for my next update!

Tuesday, October 29, 2019

Physics are fun! Also Ludum Dare 45

Hello everyone, I hope you're having a fun Halloween time! I've spent most of the last few weeks working on costumes for the family, but I've also managed to squeeze in some programming, and even another fun project that my wife suggested and is co-producing!

Early this month was Ludum Dare 45! I thoroughly enjoy attempting this jam and I was looking forward to giving it another run. The theme was "Start with nothing" and I set a restriction to NOT make another 2d sidescroller action game. Instead I started with the idea "Open a shop in a back alley as a homeless person." I do wish to take a moment and say I recognize the sensitivity of this topic. Many cities in the US are facing a major problem with homelessness, and I strongly feel the position of many citizens and governments are actively making the situation worse. This helped shape the tone of my game to focus on the desperation of such a situation.


Every morning random garbage spawns in 2 back alleys. You must collect this garbage and attempt to talk to people to find anyone willing to give you money in exchange for this garbage. "One man's garbage is another mans treasure." If you are unable to raise $10 by nightfall you will not have enough money for food and water, and will not survive the night. To make things even harder every item is made up of a grid which takes up space in your inventory. Your inventory is pathetically small at 2x5, with items being 1x1, 1x2, 2x1 or 2x2 in size.

Just because you manage to fit an item in your jacket doesn't mean you'll be able to sell it. People are not willing to stop and chat with a homeless person and will largely ignore you. If you don't have exactly what someone wants, when they want it they'll continue on their way and get the item from somewhere else.

This game took me right up to the deadline to finish and is missing many features I had hoped to implement. That said if you are interested I have posted a playable version to Itch and the source code is available on Github.

I've been really focused on working through physics and collisions for Project Bogie. I know I want rather large environments and a system that integrates well with my entity-data structure, so I figured I could tackle most of the collisions from scratch. This is working pretty much as well as I had hoped, with some parts going very smoothly and others being kind of a pain, but progress is being made every week and I can't complain about that!

The flight physics I want to try are loosely based off real aerodynamic lift models. I am boiling the flight dynamics I wish to see in each aircraft into as few tables as possible. I am not trying to make a simulator so everything is being focused on feel.

I should note that I do not plan on including any real world vehicles. Everything will be fictional and slightly futuristic. I find the aesthetic for Crimson Skies very appealing.

Debug boxes showing the OcTree, a heightfield broken into multiple parts and a couple of box colliders
Collisions are causing a bit of a headache. Object to object collisions were surprisingly straight forward to implement and I am very happy with the results. Terrain is currently problematic and I have gone through several iterations to find what works the best. I do not need incredibly accurate terrain collisions to get a functional prototype working, I do need one that works consistently. This is likely going to be my focus for the next week or so.

Until next time!

Monday, September 23, 2019

Another Hold, Another New Venture

Game design is hard, solo game design is even harder. Sometimes you start with the greatest ideas and rush in to happily create what you think is awesome. Sometimes you get 80% of the way to a playable prototype and realize that awesome idea is really just some sparkly mud.

I'm putting Ceres on hold (probably indefinitely) since after getting as far as I did, I realized it was just plain not fun.

Now I'm working on another project under the name "Bogie" for now. This is a genre I've always wanted to try making a game for! As of writing this I don't have much more than cubes flying around in what feels like the direction I hope to take the project, but I'm also tackling some engine level problems that I've had crop up in previous projects. This is making for a much slower start than on Gothic or Ceres, but the end result will be several new libraries I will be able to re-use in the future which are solid and well tested.

Sometimes life hands you lemons, other times you try to grow lemons and realize you planted a thorn bush. I know I haven't had a playable project in awhile, but that's ok. Every day I'm working to make the next playable thing the best playable thing I can make!

Thanks for coming by and reading. If you're looking for something fun to do there are some playable games linked on the right, or check out my "Interested in making games?" section and try making something fun!

Thursday, July 18, 2019

Project Ceres

My one side project kind of exploded.

It started as a "Multiplayer Asteroids" kind of game and turned into what is currently dubbed "Project Ceres" (real name determined but to be revealed at a later date). At it's core it's still about blowing up random asteroids.

I wish I was better at art...

The objective for now is to blow up asteroids which will drop little power ups. You need to return these power ups to the spawn area for additional points. Rinse and repeat until you explode, at which point your score gets reset and you can try all over again!


I am feeling close to finished with the core gameplay. In the end it wound up a lot less fun than I had hoped. I am not likely to polish it much beyond the minimum needed for it to be playable as I already have a queue of new projects I'd like to try.

Monday, March 25, 2019

Alot of progress, not much to show

Hello, I just wanted to pop in real quick with an update. I've been making a lot of progress on fixing up Gothic. It's had some pretty major changes but most of which will be largely invisible. The biggest challenge I'm facing now is a decision to re-write the real time aspects into turn based gameplay. This decision came after I tried 3 or 4 different economies in a row and just wasn't happy with any of them. I think the turn based approach makes player actions more meaningful and fits with more traditional artillery games. The turns will be much like Worms except the player can set up multiple turrets to all fire at the end of the turn while also building and repairing structures. Managing your population will be an important resource to maintain peak performance.

I've started a couple of other side projects as well to keep my motivation up, but I won't talk about them to much as they're both pretty small in scope and will likely not be seen for awhile. One is not a game and is a challenge I like to return to every couple of years to try different approaches to solving. If I wind up with something worth showing I'll make this freely available with source code so everyone can fiddle with it. The other side project was a random idea I had while trying to convince a friend to play with jMonkey Engine. Again, not certain how far I'll pursue it but for now it's giving me a short break from staring at the same catapults every day.

Not much else to report. Thanks for stopping by!

Sunday, January 6, 2019

Ludum Dare 43

I realized I never made a post about my participation in Ludum Dare 43 where I finished my newest project, Slime Venture!

The theme for the latest Ludum Dare was "Sacrifices must be made" and what better thing to sacrifice than your own body or the bodies of similar creatures? I decided early on to stick with my theme of 2d platformers as I have become very familiar with the systems involved and I new I could get a functional prototype done quickly. I didn't dedicate the whole weekend to the compo so I wasn't willing to tackle something entirely new.

Credit to my wife for suggesting slimes, which were a great choice as I didn't have to put much effort into assets. Simple colored cubes while not much to look at were fully functional and believable. The bright colors also made it easy to differentiate the slimes from each other and the background.

JMonkeyEngine is of course my go to 3d engine with Java as the primary language. I decided midway through the project to also incorporate Groovy script to supplement Java and give me an easy way to test features without needing to compile. This also taught me that when Netbeans' Gradle plugin compiles a project with a sub-project containing your assets, those assets are copied and stored in a separate folder. After an hour of head scratching I figured this out and made a simple work around to access files directly for testing only.

I used dyn4j for the physics and collisions. Integrating the physics into JME is easy and consistent.

Zay-ES was used to take advantage of an entity-component system. While I don't feel as strongly about ECS as I used to (At one point I couldn't fathom making a game without one) I do still feel they are very useful and when implemented correctly greatly speed up prototyping. The art is in finding a balance between to many and to few components for any given situation and really fleshing out your systems on paper. Remember, your systems ultimately drive what components you make and not the other way around!

Lemur UI is my favorite GUI system for JME. It lacks some features but is so easy to work with that I rarely run into an issue I can't resolve.

The game loop is very simple: Every level has a spawn point that sets the player's avatar to a slime with a given size and color. Every level needs to specify a trigger to activate level end. The only trigger I used for the Jam was a simple detection zone that would detect the player entities id if the player was inside the zone. There was no visual editor for levels and they are all described via groovy script calling java functions to build the various set pieces.

Slimes all have a size (1-5) and a color (blue or green in the prototype). Slimes who are a larger size will consume slimes of a smaller size. This is true for slimes of the same color, so beware you can still be eaten by "friendly" looking slimes! If you consume a slime that is your color and smaller than you, you grow 1 size. If you consume a slime that is a different color and 1 size smaller than you, you shrink 1 size. Smaller slimes move faster and jump higher than big slimes. Most levels features obstacles that were to small for large slimes to pass through, so you would need to shrink yourself enough to squeeze through. Other levels would require you to eat slimes in a certain order to be the correct size to finish the level.

All in all this Ludum Dare was tons of fun. I didn't dedicate my entire weekend, and altogether probably spent 12 hours working on this project. By setting the scope very small and dedicating more time to interacting with my wife and kid I had a much easier time focusing on programming when I did sit down to work.