I’ve been working on a few prototypes for a 2D action-roguelite that I’ve had in my head in some form or another since 2012. The driving idea behind it is a minimalistic 2D game based on capturing the feel of a DBZ fight. LBZ is the closest game I can think of which is out there, and it’s not quite what I want in terms of game feel or style.
Below we’ve got videos which show a few prototypes made with this project in mind. The latest version is based off the second video shown below.
Hello hello. Status update on where I’m at and what I’m working on nowadays.
It Always Ends In Nuclear War A civilization building game in development for Windows and Linux. I’m creating this because I want a simple 4X-like game which keeps micromanagement to a minimum yet allows for large empires.
Project is still alive and being worked on. In retrospect I think I bit off a bit more than I should have, because holy crap there’s a lot of work left to do, but it’s slowly getting done.
I’ve made some big sweeping changes since I last talked about this. Most noticably, I’ve gotten rid of the psuedo 3D height effect in favor of a flat map. This allows me to have more varied tile types which was impossible to do with the tile-height visuals, it’s a huge improvement in terms of gameplay. I am a bit sad because I put a lot of work on getting the 3D height in and looking good, but I think the change is for the best.
The other major change that I want to talk about is that I’ve changed the name of the game. It’s now called “It Usually Ends In Nuclear War”. Initially I came up with this as a joke, but the more I thought about it, the more it made sense to me. The original name was supposed to be tongue-in-cheek, but I can see people getting upset that every game did not in fact end in a nuclear war. That’d be a nightmare to design! The intention with this new name is that it’s more obvious that the name is tongue-in-cheek and should not be taken too seriously.
Most of the work that is left is AI, though there are things which need to be fleshed out. When I feel that the game is ready, the plan is for me to start talking about it on a regular basis. I want to record weekly video blogs similar to what the developers of games like Overgrowth / Production Line are doing.
For the past two years I’ve been saving my money with a vague idea that I would take time off from working full time in order to finally finish It Always Ends In Nuclear War. That time has now come. I just finished moving into a place where I’ll have a much lower monthly burn rate, I’m going to have enough money to at the very least last a year.
Finishing It Always Ends In Nuclear War is now my priority. I’m still going to be working a few hours every week for what was previously my full time job, but the amount of time I can devote to the game has increased to at least 30 hours a week. To put this into perspective, it was rare that I could spend that much time a month working on the game.
Until now this game has basically been a cool hobby for me, but it’s a very time consuming hobby. For my own sanity I need to finish it and put it behind me. When the game is done I’m going to put it up for sale and see what happens. I’ve read enough video game post mortems at this point to realize that I have almost no chance of making any money, but that’s all right. It’d be really dissapointing and I’m sure I’d be upset, but I’ll be happy just completing the game and having something to put on my resume.
I think it’s going to be a fun year for me.
I just read this story about an artist who had been keeping a blog about his artwork on Google’s Blogger Platform. Google disabled his email and blog account for an apparent terms of service issue, though they haven’t communicated exactly what term had been broke.
There’s a good lesson here in having multiple backups of the things you care about. I think most people understand that. I think it’s less obvious that relying on a service like Blogger is inherently dangerous. You’re giving someone else control of what you can do / say, and if they happen to not want your content for whatever reason, you’re allowing them to remove that content at their discretion.
Where you can, I think it’s important to not put yourself at the mercy of others. Own your website domain. Own your website data. If possible, make your website content platform agnostic so that you can switch to another host if need be.
This site is just static HTML, for instance, so any website host in the world should have no problem hosting the content. Something like Wordpress would be just as good. There’s a tradeoff here as I think using a service like Blogger or Tumblr will drive people to your site. I just don’t think it’s worth the price of admission of allowing another entity to control access to your content.
This isn’t just about blogs. People who rely on Youtube for a living are very much at the mercy of Google. The same goes for websites which rely on adwords to make revenue. Steam has a near monopoly on the PC video game space. Unfortunately, I don’t think there’s too much that can be done about those three.
It’s slow but steady progress on the game front. I’ve now got a design which I’m confident in, which admittedly has happened before, but I think it’s truly solid this time.
I’ve also been making some great progress on the coding front. I’m not a morning person in the slightest, but I’ve started getting up at around 6 AM, which allows me roughly two hours in the morning to work on the game while I’m fresh. It’s actually made mornings a lot more pleasant for me, as I have something to look forward to every day (making progress on the game!), and it makes me feel like if I do nothing else that day, at least I’ve done a small part of working towards completing this game and thus completing one of my major life goals. Making this change has been one of the best things I’ve decided on in a good while.
I’ve recently discovered a design document from one of the early iterations of the game, and it had a cool little gem in it – I had written down the day that I started work on It Always Ends In Nuclear War. 11/24/12. It’s been very on and off work, to be honest, and what I’ve wanted to do with the project has changed drastically over time, but it’s cool to know how long I’ve been at it.
I’ve started some other small projects from time to time while working on this game, and usually what I’ve done is either start those projects from scratch, or try and take some code from It Always End In Nuclear War to use as a base. This has been a pain, though. A few weeks ago I decided to abstract out the core, reusable bits of It Always Ends In Nuclear War into a framework which I can use for other C++ programming projects. This was a surprising amount of work, but it’s done now, and I’m extremely happy about it. It not only cleans up the code for It Always Ends In Nuclear War, but it gives me a base to work from for other projects.
Finally, I spent a little time last night and this morning on getting unit range to work. Basically, if a unit enters the range of another unit, the game now knows about it. This is the first step towards getting a good working combat system. The screenshots below shows this, with the numbers below each unit being an identifier for units which are in range. The first screenshot is missing a small edge case so it isn’t entirely accurate, second screenshot has it working 100%.
On the back of my CD player there is a date proudly displayed: APRIL 2000. It was then that Panasonic gave birth to something beautiful – it was then that my SL-SW60 was born. I have been with her for more than 16 years now, and I think I can safely say that she is the finest piece of machinery known to mankind.
I want to be clear here. I’m not talking about this model CD player in general, because, as I’ve found out from reading other reviews about this model, the SL-SW60 has been known to stop working after a year or so of use. No, I’m talking about my specific SL-SW860. My SL-SW60 would never do that to me. She loves life and she refuses to die.
I say, in all sincerity, that my SL-SW860 is more of a man than I’ll ever be, which is impressive because I had previously been referring to her as a she. I used to bring this thing with me on my busride to highschool, and it never let me down. Eventually something new and shinier was released, an iPod, and I foolishly turned my back on my old friend to embrace the future. My SL-SW860 didn’t complain, though, because it knew that it was the better machine and that was enough for it to be happy. Fast forward to a year or two later, and my iPod dies. I opted to buy an iPod Video, but it, too, would become useless within two years.
But all that time my SL-SW860 waited for me. Newer technology came out and went, technology that made it obsolete, but did my SL-SW860 care? Not at all. I didn’t realize it at the time, but my SL-SW860 stands proudly over the competition. My SL-SW860 is able to do this because my SL-SW860 will never quit.
Well, okay, once it did quit on me. Rather early on in its life I had dropped it, and it ceased to work after the drop. But that’s when something magical happened – that’s when my SL-SW860 became who it is today, that’s when it realized its love for life. You see, after it stopped working I had, in desperation, opted to hit it rather hard, possibly by throwing it against the wall. This shocked it back to life. I believe that this was the defining moment of its life. It had experienced the cold void that was death and, through sheer force of will, brought herself back from deaths grip. It had decided that death was not for her, and that she would never again be caught in deaths embrace.
I’ve become something of a runner in recent years, and for a few good years I would always take my SL-SW860 with me. I’ve occasionally fallen on these runs, and it’s been hard on the SL-SW860. On one particular run, I fell and came down on it with most of my weight. The left lock mechanism fell off, but my SL-SW860 soldiered on. Who needs a left lock when you have a perfectly fine right one?
I suspect that she will never die, or at the very least outlive me; but if that dark day does come, I plan on giving her a hero’s funeral. SL-SW860, with your 40 seconds of anti-shock memory, I salute you and love you with all my heart and soul. Know that when I said you were the finest piece of machinery mankind has ever created, I also meant that you are the finest piece of machinery mankind will ever create.
It’s been about four months since my last post, so what have I been up to? Well, the day job takes up most of my mental energy, but I’m still working on It Always Ends In Nuclear War when I can. When I last posted about it, I was close to a working prototype for the game. I did in fact complete the prototype, which is really cool (!), but I wasn’t happy with how it turned out, which is not so cool. There were a few design flaws which I think made it more tedious than fun to play. I suppose that’s why we do prototypes.
I’ve gone through like four major designs with this game, and I’m hoping that my next go round will be the last one. If not, I’ll continue trying until I get things right. Each time I go through this process I gain more experience and more of an idea on what I need to do to accomplish what I want. I’ll eventually get it right.
I’ve been using Windows almost all of my life. I remember the first computer my family got had Windows 3.1, which booted up to either DOS or a GUI version of Windows depending on what you chose on startup. I can’t remember ever having a real issue with Windows, it just worked and it did everything I wanted it to.
Honestly, I like Windows. It’s a modern marvel in my mind. I’ve read that even back in the XP days it was more than 50 million lines of code, which is mind boggling to me. I don’t know how large it is today, but I think it’s safe to say that its grown a bit. I think that the more I program, the more I appreciate complex systems which work reliably.
With all that being said, I’m going to be switching to Linux (specifically, Linux Mint) and using it exclusively for the foreseeable future. I could say that it’s because Microsoft has been doing some questionable things with regards to user privacy in Windows 10. I could say that their update process is also in need of an overhaul, as it takes hours to patch a Windows 7 install to be up to date.
I actually couldn’t even update my Windows 7 install to Windows 10. I got the notification icon saying that I’m eligible to upgrade, but I was greeted with an error when I went to install it. I consider myself pretty technical, but none of the fixes that I tried solved the error, and short of reformatting I saw no way of fixing the issue.
That all played a role in this decision, sure, but it wasn’t the catalyst. I like Windows 7, and I’d have stuck with it if I could have. Unfortunately, I got a notification out of the blue saying that my product key is invalid. I’m not entirely sure why – I bought Windows 7 in 2010 and I’ve been using it ever since. It had been a good 7 or so months since I last reformatted my computer, so it was really just out of the blue.
I was going to reformat and see if that fixed it, and failing that I was going to call Microsoft up to try and see why my key was now invalid. I then had a realization that I’m essentially asking a monolithic faceless corporation for permission to use my own computer, and have been since Windows XP. I can kind of understand that kind of security for a regular program, but for the entire operating system? It didn’t sit right with me, and it doesn’t have to be that way. There exists another operating system, another modern marvel if you will, and it won’t ever tell me I don’t have permission to use my own computer.
I’ve been using Linux on my laptop for a good year now, and it’s been a mostly pleasant experience once I got used to it. Program compatability is the only real hurdle to cross, but thanks to the internet it’s not such a big deal nowadays as lot of programs are moving online. I was worried about Visual Studio, and I was worried about games. I found a Visual Studio replacement in the form of CLion, which I’ve found to be a suitable replacement to Visual Studio. As for games, I’m going to be missing out on a lot, but I don’t play as many games as I used to, and my steam account has more Linux games that I can reasonably play anyway. With any luck less destractions will mean that I’ll get more work done on It Always Ends In Nuclear War.
We’ll see how this goes. I’ve been using Linux exclusively for more than a week now and, well, it does everything that I want it to.
Work continues on the GUI system for It Always Ends In Nuclear War. In my last post I talked about how I was working on an automatic layout system so that I don’t have to worry about manually positioning GUI items on the screen. This was surprisingly hard to do, but I did come up with something that I’m happy with. It’s not the greatest thing in the world as I only have so much free time to do this, but it should definitely help me out in the future.
At the most basic level, I’m thinking of each GUI component as a rectangle that takes up space on the screen. The layout system just manipulates rectangles for me by positioning and sizing them based on properties that I define for the rectangles. So if for whatever reason I want a GUI component to span half of its container in width, and all of its container in height (a container the size of the screen is always the top most container), be anchored to the left edge of its container with an offset of however many pixels, be centered vertically, as well as have constraints on the size (min/max width and height), I can do that really easily. The cool thing is that each GUI component can have other GUI components as children, allowing me to embed and use these position properties inside other GUI components.
I’m going to be working on the GUI system until it’s finished. I very much want to be done with this task and start work on the actual game again, but I think patience always pays off in the end. It should be worth it to have a good base so that I can quickly create / iterate on the GUI screens. In terms of components, at the moment I have a
I think that’s a pretty good list of things, but I still need to build out a tab container, dropdown list, input box for text, a list view, numeric spinner, and a color picker. I also want some way of making certain components scrollable. I have some vague ideas on how to go about making the components scrollable, but I’m not really sure how I’m going to do it yet.
I’m also trying to pick out color schemes for the GUI. I am not an artist, so I’m going to be going with plain colors / shapes instead of using premade images as a lot of games do. I’m thinking something simple like white text on a semi transparent background as shown here looks pretty good.
I went to sleep at 7 PM last night, and woke up this morning at 9.30. I’ve got a three day weekend, I’ve got 14 hours of solid rest, and I’m ready to get shit done on It Always Ends In Nuclear War.
The biggest thing holding me back has been lack of a good GUI library. A lot of the game will come through interacting with the GUI, so it has to be easy and quick for me to iterate by adding / moving components around. It also has to look half-way decent to the end user. I’ve looked into third party GUI libraries in the past, and it’s been rough. I wasn’t sold on anything that I saw, so I opted to see how it would be making my own GUI from scratch.
It’s been okay. I’ve lovingly titled the GUI system I’ve been making SubGUI. I’ve got a button widget, radio button widget, a navbar, a progress bar, dialogue box, message box (dialogue box being a popup window where you click okay to dissmiss, messagebox being an area of the screen where messages appear / fade away after a certain amount of time), and an initial version of a slider. I’ve basically been making widgets as I needed. I’ve run into two main problems, though.
The first was blurry text. I narrowed it down to using antialiasing. Apparently if I had antialiasing turned on, the text also gets smoothed out, which is pretty terrible. I solved that problem by drawing the text on a RenderTexture off screen instead of directly to the window. The text still doesn’t seem as crisp as it does in a web browser, but I feel like it’s crisp enough, and if I spend some more time on it I’m sure it’s a solvable problem.
The other thing of concern has been how to handle the layout, which I had been doing manually. Each widget has an onResize method, and I define how it positions itself / sizes itself there. This works, but it’s a huge pain in the ass, and I don’t want to keep going down this route.
The way I see it, I have two options. I can either look into third party libraries once again, or I can try my hand at seeing if I can come up with something that automatically lays out my components in a reasonable way.
The path of least resistence is to look into third party libraries / frameworks, which I’ve been doing the past week or two. It’s been rough. I don’t want to deal with working in another language, so that means only C++ libraries / frameworks. I’ve considered in one way or another qt, wxFrameworks, gwen, imgui, myGUI, crazy eddies, gtk, using chromium to build the GUI with web tools (html, css, js), guichan, otterUI, SFGUI, and turbo badger. Out of all of them I liked imgui the most, but I wasn’t sold on any of them.
I’ve decided that I’m going to go ahead and do the stupid thing, which is to make a layout engine and continue to create my own GUI widgets. I started to implement it on Thursday, and I think it’s reasonable. I’ve got a design for the layout API, a decent idea on how it should behave, and three days to make it happen. I’m actually hoping to finish the layout manager early, and work on adding more components to the framework, but I’ll be happy enough if I come out of this weekend having something which does automatic layout in a reasonable fashion.
Copyright © - Daniel J. Petersen