Cold Path - turn-based multiplayer strategy

#1

Hello forum. Today I want to show a new game that I am developing. I created this topic in Dev diaries because I want to share some interesting points from the development.
This is also a turn-based strategy, like my first game. I really love this genre of games :slight_smile:

Differences from Civilization Path
  1. Local and global multiplayer.
  2. Resources. You need uranium to operate a nuclear reactor.
  3. Buildings. For example, a tower allows you to see army in neighboring provinces
  4. Skills. Political institutions were replaced by skills. The number of skills is limited, so you need to choose them for your style of play.
  5. Over 50 technologies from taxes to a fusion reactor.
  6. Vassality. You can make another country a vassal, and it will play to your advantage. Instead of losing, you too can become a vassal and declare independence at the right time.
  7. Seas. You can move around the water provinces
  8. Various other changes, both in architecture and in general.







Game modes:

  1. Single
  2. Local multiplayer
  3. Global multiplayer

I apologize for the fact that not everything is in English. The fact is that I will do the translation files last
The game is under development, I plan to start a multiplayer test with players in the near future. I believe the game will turn out interesting

There is only one link so far:
VK Group: vk.com/coldpathgame

13 Likes

#2
Little joke

– can I copy your icon?
– yeah, just change it up a bit so it doesn’t look obvious you copied
– ok

2 Likes

#3

Multiplayer is based on modified version of DefNet. The core of the game can be copied and with a couple of changes the server can be launched outside the game client.
The game client for network-dependent actions accesses the network table, which stores various functions, depending on what game mode is currently.
Something like:

network.war(land1, land2)

Different actions are performed depending on the game mode:

  • Single - do something
  • Client - send data to server
  • Server - do something and send data to clients

Interface is one. The server also supports various plugins. So I write logic in them. For example, a chat plugin create and attribute messages. Plugin system allows kick players. Plugins are completely independent of each other. They can register commands, also have a common space. That is, the chat plugin makes the chat feature publicly available to all plugins. And the kick plugin can use it to create message that someone was kicked from the game
To search for local games, I wrote two modules that use UDP.

3 Likes

#4

Really cool! Thank you for sharing your progress so far!

1 Like

#5

Very nice, turn based is my favorites too!!! Wish you the best

1 Like

#6

Thanks britzl and Elpidoforos_Gkikas

1 Like

#7

You even remembered to add baltic states wich in not very common but sounds fun

1 Like

#8

i love games that look like this!!

1 Like

#9

Also will be there greece? and does player can use it? thanks

0 Likes

#10

Yes. Greece is on the map and will be available in some scenarios.
I will add a scenario editor later. It will be possible to create any countries and customize them.
I plan to add a lot of maps and scenarios to the game
I copied the map of Europe from Civilization Path and added the sea.
There are a some of interesting points about working with the map, I will write about them later in this topic.

Map of Europe

3 Likes

#12

Hello, everyone! A month ago I promised to write about various interesting things with the map in my opinion. Well the time has come.

Provinces quality
I just have to say thank you to @Pkeod


My first idea to apply this method was: make NE that blurs the image and set material with contrast shader. Then I realized that writing an algorithm for blurring is not the most pleasant thing. I also realized that processing for each image at runtime is terrible for performance.

I forgot about it for a while, but I remembered it during the development of a new game.
Now I pre-blur the images with a third party editor and then apply shader:

shader code
varying mediump vec2 var_texcoord0;

uniform lowp sampler2D texture_sampler;
uniform lowp vec4 tint;

const float threshold = .01;

void main()
{
    // Pre-multiply alpha since all runtime textures already are
    lowp vec4 tint_pm = vec4(tint.xyz * tint.w, tint.w);
    vec4 c = texture2D(texture_sampler, var_texcoord0.xy);
    vec3 res = smoothstep(.5-threshold, .5+threshold, c.xyz);
    gl_FragColor = vec4(res,c.w) * tint_pm;
}

Comparison

Without:


Distance Field:

The screenshots were made at different times, so they have a different scale. In the case of distance fields, it is even larger.
I think the difference is obvious

ImageTransparencyCalculator
The name is really incomprehensible, I guess I should have thought a little longer.
How did I handle the click?
I used collisions in Civilization Path. Creating collisions that repeat the contours of the provinces is a pain. It takes a lot of time, and no matter how hard you try, the result will not be perfect.

Civilization Path Editor Screen

At first I started using Convex hull shapes that were automatically generated from the image by a third-party editor. The result was better, and most importantly - faster.

Later in the Russian Telegram, there was a talk about click tracking and the idea of tracking a click using a color change and a render script came up. I tried to implement this but no success. In general, I doubt that this is possible in Defold.
I got inspired by this method and wrote a native extension. How it works:
The native extension takes the image data as input and rebuilds the buffer, leaving only the transparency data in it.
The resulting monochrome image can be reduced in NE. In this case, the accuracy drops, but the size of the generated file also decreases. This is just in case someone doesn’t want perfect accuracy.
Further, the file data is compressed by zlib.
And already on the basis of this data, the lua module calculates whether the transparent area was clicked.
I’m glad now I can perfectly track the click, and everything is automated.
I will also be glad if this is also useful to someone and saves time. I know that @russelkgd changed it for GUI. That’s cool.

Link to topic

Various dynamic objects
They are created using game object factories. From flags to nuclear explosions.
Performance is very important. Therefore, some objects are not always shown. Objects outside the camera are disabled.

example

I still use msg.post("@render:", “draw_line”) for lines, although I know it’s not good. I will definitely experiment with this. Maybe even the distance fields will try again :slight_smile:
It’s a sad that there is no slice 9 for sprites. I think this would be one of the solutions.

4 Likes

#13

Fun thing that i used similar approach for continent selection, but with ellipses as my collision objects.

Continent selection

Anyway, thanks again for that extension. I will probably contribute gui version to your repository, but i need to change there something to allow more straightforward approach to it, because right now is adapted for my specific gui scene, which is not good. So maybe one day)

3 Likes

#14

Thank you for another great post!

There’s an issue for it here: https://github.com/defold/defold/issues/4653

3 Likes