paypal

Jan Zeleny's Development blog

JUL
24
2014

Development progressed

In last few months, there was quite a rush at work and less time to continue on Mashinky development, but I am still here working at any free time I can get:


FEB
11
2014

Update

It's been a long time since the last post, but the development goes well. There are many new features and polishing, so I will enlist here at least some of those I can remember:


JUN
25
2013

Performance

As I prepared multi core support, I have also created some sort of visual frame profiler to see all threads and their workload / waits / dependencies. Than I started to work on asynchronous render target and found a lot of performance-related bugs, wrong using of some render buffers etc. I've spent last 2 weeks by optimizing the render part of my engine and here you can see some results:



The colored bars are hierarchy of tasks for each thread (names and timing of these tasks are visible when moving mouse over). Different threads are marked with semi-transparent black background. Vertical lines are target frame times for 60 fps or 30 fps.

MAY
21
2013

Data driven rules

I am still working on better and more intuitive GUI. Meantime I cleaned codes a bit and moved most of game rules, buildings / trains / tracks types from hard-coded places in game code to separated xmls files. This will speed up not only my development process (Now I can iterate game rules without rebuilding the executables) but it also opens new possibilities for potential future modding or variability of the game experience (more landscape presets, more train sets, more industry sets etc.)

APR
17
2013

Tablet

I have a new helper in my hobby - Wacom tablet Intuos3. It is a kind of device which I've always wanted to try and learn how to use it in a game development. First picture was (surprisingly) train, specifically one of typical Czech railcar 852. I will probably use this tablet for some artworks, menu backgrounds or icons in the game, but not for textures which I want to be photo-based as much as possible.


APR
15
2013

Multi-core support

I've decided to go multithread :) In recent couple of days, I've rewritten a huge amount of code, clean it a bit and I separated core and render part of code, created Thread management and switched to multithread.
It should speed up the game a lot, especially when there will be a huge amount of simulated trains/industry which could otherwise drop down the performance a lot.
Right now, the bottleneck of performance is render, but with proper multithreading support and current abstraction layer of render API, the next step could be asynchronous render device which could also speed it up a bit.


MAR
04
2013

First focus test

I've decided that there is a time to let the first player in so I organised a first focus test in december. Than we discussed a lot of ideas and feedback from this first play-test. I decided to change few things, especially gui logic, camera fov and camera panning to be more user friendly. I plan to do another tests regularly.
There are few other changes in a game code and assets. I've added support for more kinds of track (and created complete set of assets for electrified tracks, which forced me to change a scale a bit because of automatic positioning of masts). The gui windows are now able to snap and few of them (where it makes sense) are scalable. The gui has also ability to render floating 3d icons, so you can easily see where are production buildings, where are your trains and what is loaded in each vagon.

DEC
10
2012

Multiplayer

On the original Transport tycoon game I loved an idea of multiplayer (even if it wasn't much stable to play), but I also hated AI, because it always ruined my "perfectly realistic tracks" with some crazy selfcrossing bridges etc. So I decided to skip PC opponents in my game and to create enjoyable multiplayer instead of this. I've spent few weeks by implementing multiplayer for up to 8 players and it is working now! There are still few bugs to fix, but it is improving every day and players can connect and disconnect runtime. I also want to make it more persistent, so the server keeps all trains of disconnected player running. Here you can see first multiplayer screenshot:)


OCT
28
2012

Bugfixing

I've spent few more days bug-fixing and polishing the code. Save/load is working better and all buildings or stops upgrades, players colors and camera position or direction are saved/loaded correctly. I've also fixed smoke from steam engines and shadow casting on it.
Scotchman already has a tender, and I've finished new wagon for passengers, soon I will add some screen-shots.


OCT
9
2012

Anti-aliasing implemented

Recently I've heard about some antialiasing techniques and from that moment, I see aliasing everywhere in my engine, so I decided to add FXAA (fast approximate anti-aliasing) method, which fits well to my game. You can see some results here:


SEP
29
2012

Animated volumetric fog

I am still polishing new gui graphics, but meantime I tried to improve volumetric fog and here you can see the result. Volumetric fog has improved graphics and it is now animated, so it looks like moving clouds in the valleys.


AUG
29
2012

Normal & Specular maps, Flying Scotsman

The engine now supports normal and specular maps. Assets could be more detailed and simplified models looks almost as their high-poly versions thanks to this new feature. I am still working on balancing of second era, and I've created placeholders for all vagons and locomotives. This could help a lot when testing gameplay and upgrade system.

I am also in contact with graphic artist Arthur M. Novotný who created second steam engine - Flying Scotsman. You can see work-in-progress version (without tender) here:


APR
13
2012

Upgrade system & Assets

I almost finished upgrade system for buildings and technologies. I also balance rules for first epocha. This will provide posibility to review the game from horizontal slice and one of many conditions to achieve alpha state. I've also added posibility to have one vagon or locomotive from more parts (tenders, articulated locomotives etc). As time progressed, I made more assets. Last of them is here (Mallard).
- The whole locomotive is white, because of new feature able to colorize trains and buildings by player color.


FEB
27
2012

Making of assets

I have recently discovered, that this game needs quite a huge pile of game assets (models, textures, sounds, etc etc). It is not easy to create them or gather them by another way so first I decided to learn how to use 3D modeling softwares and how to create and texturize my models. I am still looking for some outsorced assets.
I also hired my girlfriend, which is quite talented graphic artist:)
By design, I will need around 150 individual models from 7 different eras. First model created from scratch was one old farm house inspired by "Dlaškův statek" (real historical building here in my country). You can see result here:


OCT
27
2011

Changing seasons and optimization

To improve the impression of playing the same map for a long time, I implemented the runtime changing seasons technique. Now there can be different light, fog and vegetation color for every year season, leaves fall off in autumn, snow descends into the lowlands in the winter, grass grow in spring etc.
I also did a lot of optimizations for vegetation, reflections in the water, and many others so the framerate is almost doubled. Therefore I also enlarged map to have 512*512 tiles.

AUG
19
2011

Far ambient

I got rid of impostoring optimization and instead of it, I made a new optimization for drawing objects in a distance. I call it "far ambient" and the principle is quite simple: Every object has its own low-poly approximation and when some chunk of a map has been changed, the engine bakes all geometry and textures used in current map chunk to one huge mesh. This takes some time (~0.1s) but It needs to be done only when some object has been added or deleted (when constructing, or using dynamite). In ordinary frame, all far ambient objects from map chunk can be drawn by one render call! It saves the video memory used for impostors and the most important thing: It saves the render time. When the camera goes near the object, it is smoothly transformed to high-poly model by screen space noise thresholds.
You can see result here:



JUL
16
2011

Few updates

In last two months I did only few changes to engine and I've been working on gui migration to new API, cleaning of code, fixing some bugs. Now the development should go better with all of these changes. You can see list with some of them here:


MAY
2
2011

Development news

The development of multiplayer is not going very well, because of huge data that needs to be transported when player logs in (whole map with all trains, buildings statuses etc.) One of possible solutions is to disallow player to connect when game already started, but this is not what I want. I'd like to create server and let players connect run time.

I am also working on new gui system (not gui graphics yet). It should be more flexible and better designed for future updates. This task is almost done, now I am rewriting old functionality into this gui system.

APR
1
2011

Game rules improvement and plan for next week

I finally wrote some design document for this game and it forced me to make some decisions. One of them was industry system and benefits from satisfying some of market demands. I will not reveal what kinds of industry will be in Mashinky, but player will get different benefits from different production buildings and there will be around 20 different buildings/industries in 7 eras. I have already implemented all of these buildings and polishing rules (there are only placeholder models for all of these buildings, so I'd rather not take any screen-shots from this version :-) ).

Now I am trying to implement multiplayer via TCP/IP, so it will be possible to play via LAN or internet. Players should have choice to cooperate or compete with each other.

MAR
13
2011

Track smoothing and First train station visualization

I would like to create game that will not only be strategy, but it should also be a very simple simulator where the player will be able to drive his train. This point of view changes the desired qualities of close look on building, trains and track where everything has to be more detailed.

The major problem for doing this was the shape of tracks. It was not smoothed in heights, so when the train changed slope, it was like a train accident. Now the tracks are finally smoothed and it is less annoying.

I am also thinking about train stations layout, because tracks are (due to tiles size) quite far from each other. Probably there will be covered platforms and player will be able to build non-track tiles connected to the station like station building, warehouse etc. I will have to solve if the first train set will be American or European.



MAR
13
2011

Sea shader

It is more complicated to create a water surface in engine for Mashinky than in Transport tycoon. First implementation was back in university, where I had sophisticated drainage system capable of creating rivers, lakes etc.
This system was great, but it had few disadvantages: It took almost 1 second to rebuild drainage system after every change of map and It also couldn't reflect surrounding world due to many different lake heights. I had to abandon this way and try to do it better designed for today's hardware.

Second try to implement sea surface was much better, because the game has only one level of water and it doesn't need to care while changing the terrain. The system for new water is only one huge quad across the whole map with following properties:

You can see some screen shots here:



MAR
3
2011

New trees

I've decided to switch from generated trees to pre-modeled versions. Now the game engine uses 3 new trees (acacia tortilis, acer platanoides and fagus grandiflora) from very talented graphic artist Jan Marvanek.

Also the grass has been changed and all vegetation in game engine is now slightly animated in breeze. You can see new HD screen-shots below:



JAN
25
2011

Winter trees

All trees in this engine have now two versions: summer and winter. I don't have seasons in my engine yet, but there is a snow fields, when you travel high in mountain. It is much more realistic when these snow areas are covered by winter-looking trees, so when tree should grow high enough, engine will use winter texture.



DEC
28
2010

Speedup + Highlighting

In last few days I've tried to speedup starting of the game. This is improvement especially for this state of development (I need to run the game for few times per minute, so every second counts).

Track lay highlighting is new feature that helps you to see what you are building and if it is possible. Here you can see one screen-shot from construction mode:



DEC
22
2010

Save/Load/New game

Save and load of whole map with trees, trains, stops, buildings status, etc. has been completed. It has advantage for development, because now I can create many different maps for testing different situations and load which one do I want.

I've added "New game" option so I don't need to restart application to create new map.

There is also new camera for construction mode. Now it is simpler to lay track or manage terrain.