First Gameplay Video

I just created a small gameplay video of Business Magnate, I think it shows a bit better how the game will play like:

Any feedback is welcome.

Also, there is now a steam page for the game. So you can put it on your Steam wishlist, if you like:

Also, if you want to help, you can upvote the tags of the game on the steam page.

Changed the name of the game

Some friendly people let me know that the planned name for my next game, which was "Business Builder" probably wasn't a very good choice: There is a mobile game which has a similar name, although not the same one. That's also why I overlooked this. Still, unfortunate. I could go on using "Business Builder", since it is not the same, but to avoid confusion and because the game is still in development, a change of name is a good idea.

So I changed the name, and "Business Builder" will now be named "Business Magnate".

Website and logos are already converted, and I think although that new name is a bit more complicated, it better tells you what the game will be exactly about.

Mac Mini 2018

I just received a new Mac Mini from Apple. The new one is black. Looks interesting, compared to the three older generations:

Starting it up, it is surprisingly fast (especially compared to the older versions), only that default "natural" mouse wheel scrolling (which is inverted) was annoying. It only has two 'normal' USB ports, the remaining other 4 ports are USB-C, so I guess I need to invest in a few adapters. Another change: The power adapter is now internal, as it seems. It only has a simple cable connecting to the mac. All my older macs have external ones.

So yay, going to write better macOS versions of my Software in the future.

Creating a Tycoon Game Part 2 - Hit Tests and Streets

I am developing a game named Business Magnate. This post is part 2 of its development blog (part 1 is here).

For making the isometric engine more useful, we need to be able to click onto buildings, in order to open dialogs and similar. Detecting if a user clicked on a building isn't actually that difficult: Just check if the mouse coordinates are within the rectangle of the drawn sprite, and if the hit pixel is solid. We also need to check if another building is drawn in front of the current one, and then take that one, of course. For business magnate, I also added a hit-test cache:

The red overlay is the hit cache image, it won't be visible in the final game

What it does is basically speeding up the hit-testing: Every frame, I need to lookup which building is under the mouse cursor, and do a image lookup to do pixel perfect hit-testing. For big images, and a lot of them, this could mean that a lot of data needs to be kept in memory for this, increasing cache misses, or even worse: transferred between GPU and main memory. To prevent this, a size reduced and only 1-bit-per-pixel version of the image is created and held in memory, to do very fast hit-testing.

If for example we have 10 building types with a size of 512x512 pixels, we would need about 10 MB for this, which would have needed to be transferred and unlocked. The hit-testing images only need 0.3 MB instead, which is a very nice improvement for this.

The fact that the image isn't exactly matching at the borders is negligible, the error is too insignificant for users to notice. I tried it out, and it feels very nice. Also, the game runs quite fast that way on slower systems.

Additionally, I implemented a quick way to easily create streets:

A simple algorithm quickly scans for neighbouring tiles after the user placed a new street tile, and adjusts the tiles to connect in order to form streets. No magic there.

I'm not yet sure if it will be necessary in the game to have an efficiently planned street layout, but the company and building setup you can create in the game will definately look a lot nicer with proper streets.

If you like the game, you can subscribe to the newsletter on the game's website, or follow me on twitter.

CopperCube Roadmap

When I started developing the Irrlicht 3D engine nearly 20 years ago, I always had a public roadmap on the website. Not sure why I didn't make one for the CopperCube 3D game engine as well. So time to change that.

The official CopperCube roadmap is now available, too. It's still a bit empty, but I guess it will fill more and more during the next months. It only contains the big items (not bug fixes and similar), but if I forgot something very important, please let me know!

Deprecation not Appreciated

When starting a 32 bit app on the newer macOS versions, you get a message box which reads like this:

And I get a lot of support requests by scared users because of this. Asking me if the app is broken. No, it is perfectly fine. Apple just decided to throw that at them, and blame the developer once they stop supporting 32 bit apps.

From my - the developers perspective, this is really a dick move by Apple. Really, suggesting that the app is not ok and scaring my users is not ok.

Especially when "deprecating" very important frameworks such as OpenGL, Apple doesn't seem to be in the position to claim which part of the software running on a computer is not compatible.
Maybe, when starting CopperCube on a newer MacOs, I should show this message box from now on:

Not sure if it would help, though.

Creating a Tycoon Game Part 1 - Writing the ISO engine

For that Business Simulation Game I am working on, I decided to go with an isometric view of the buildings. 3D would have been possible too - especially since I am also working on that 3D game engine - but I think it is much easier to place buildings and have a nice overview with an isometric 2D view.

Programming wise, it is a mixture of 2D and 3D, and you have a combination of the disadvantages and benefits of both: Mostly everything is nearly in screen coordinates but you still need to do some z-sorting and clipping. It's easy to implement, even calculating the position of an iso-tile is very easy (pseudo language):

getIsoTileScreenPosition(x, y)
   var tileWidthHalf =  isoTileWidth  * 0.5 * zoom;
   var tileHeightHalf = isoTileHeight * 0.5 * zoom;
   return position2D( x * tileWidthHalf  - y * tileWidthHalf, 
                      x * tileHeightHalf + y * tileHeightHalf );		

I've written about 5 isometric engines during the last 20 years, in Delphi, Basic, C, ActionScript and C++. But none of these had zoom, which I definately need for this game. I experimented a bit, and after a while I felt that I found a very nice way to do it: The engine is able to zoom smoothly, but the user only can switch between 5 or 6 fixed zoom steps. This makes the world and game feel very responsive: It looks very nice when zooming is moving between two fixed steps, and the user is still quickly able to switch between two or more of his preferred zoomed views:

I'm satisfied with how this worked out so far. I'll post a new update next week.
If you want to get a mail once the game is playable, you can subscribe to the games newsletter on its website.

My Next Game

After a successful twitter poll, where 96% voted yes, I'm going to develop my next game a bit more in the open. Meaning I'll blog and tweet a bit more about it, while it still is in development, even if there isn't much to see yet. So here is the plan:

My next game will be named Business Magnate, a tycoon game with some quite unique features.

I already created a website for it (here), which was quite a bit of work. I wrote all the HTML, CSS, PHP and JS code manually and by hand, and although it is just a single page with a newsletter, it was surprising how much work it is nowadays: You need meta tags, icons, crawler directives, GDPR compliance, responsiveness, accessibility, browser compatibilty and more.

I did a bit of pre-production work already, so that's why there is even a screenshot visible on the website, this is from the actual game already. But there is a lot of work to do in order to make this a playable and fun game, so let's stay tuned.

A couple of random Game Development Tips

If you want to create a game, you'll probably figure this one out quickly: Game development is not easy.

You probably have read an article or two with tips about how to start game development, and I'd like to add a few things from my experience so far:

The "What if somebody else creates my game idea" syndrome

A lot people have this problem: Once you start working on your game which probably has a unique idea, you start worrying that someone else might be working on a very similar game like you. Maybe it even has the same title or similar graphics. What if he releases his game just before you?

I must confess, although I have single-handedly created 11 commercial games already (the latest few listed here), I still have this problem from time to time. I know some game devs accusing other of "stealing" their idea in public forums, although they haven't even published anything about their game publicly.

It's a strange, irrational fear. The best strategy to avoid this is either to ignore it, or better: Do the opposite: publicly talk about your game, show screenshots, write about your ideas. Let people know what you are working on. It's advertising and in the worst case, people will know you had the idea first.

The "Make a unique game" myth

When thinking about starting to create your game, you probably have read multiple times that if you create a unique game with a new and revolutional fun game mechanic, you will be successful. This is mentioned in a lot of communities, but according to my experience it isn't necessarily true.

Best allegory: Take a look at how many take-away pizza shops you can find in your city. Now think about what happens if you start a take-away shop for vegan grilled unicorn legs. It stands out and is probably something very interesting to eat, but how many people actually want to eat vegan grilled unicorn legs? Most people want pizza. Sure, there are dozens of pizza shops making better pizza than you can, but there are much more people ok with eating not-so-great pizza instead of vegan grilled unicorn legs.

Motivational Review based Blowbacks

You probably know that once you released your game, it's not over. People expect you to update the released, finished game frequently. It is sad, but common that people consider a game to be "dead" if you haven't published an update to your game within the last two months, even if it is years old. And even then, lets face it: The gaming community can be a great place, but it also includes dicks. No matter how good your game is, you will be getting bad reviews. Even if they are just few. But they can really hurt, and this can impact your motivation to continue working on the software greatly.

You need a really thick skin for creating a game. I have gotten used to it, but it still hurts if someone describes your game as ""piece of shit"", when you spent months or even years working on it.

It will happen, so get ready for this. It also happens during development, which is probably even worse.

You won't be successful

This last point isn't something people rarely speak about, but it is very important, and I usually mention this in blog posts like these: You won't be successful. About 9 of 10 games won't make it, financially wise. There are too many factors you cannot control, so don't put all your money into your game. Don't risk everything. Keep some money aside, or work on your game only as side project. Just because of this, I'm personally also not 100% invested into games, the other part is serious software.

Please take all the things I wrote above with a grain of salt. These are just the things I learned during the 22 years I've been developing games, and I might be wrong. But maybe some part of this article helped you a bit.

Trumped up - Tariffs now in Government Simulator

I just added tariffs into Government Simulator's simulation engine and released it as version 1.4 on Steam. So basically, you can now be like Trump, if you like:

The effect tariffs will have depends on how the internals of the country you are running look like, and they have limitations: There are no individual types of goods on which you can impose tariffs, it is just an average factor, since the simulation isn't fine grained enough for this. It doesn't have a simulation running imports/exports between all the countries. But that would be something which would be also maybe cool to be added some day in the future.