Engine Decision: Terrain & Digging
I played around with Ogre3D a bit and I came accross the following guide: http://dave.uesp.net/wiki/Block_Land
It explains how to create a terrain like that of MineCraft with Ogre. This looked pretty cool because such a system would allow free digging. So I tried the first parts of that guide:

Terrain in spherical shape without texture:

Terrain with random textures:

This is cool but it leads to several problems: Consumes much memory It looks very blocky and unnatural which is not the style I want to achieve in Stranded III

I though about smoothing the terrain by automatically adding different shapes at the edges but this wouldn't completely solve the problem. It would still look blocky and unnatural. People would still note that the whole world is based on blocks.

One alternative would be a voxel terrain. There are also attempts on that in Ogre:http://www.youtube.com/watch?v=-hJkrr5Slv8
This actually looks quite awesome but it also takes much memory in case of large islands and implementing the game logic in such a world is pretty complicated.

So I had to discard the idea of a completely modifiable terrain that allows crazy caves and cliffs for the sake of bigger islands. I'm going to stick to the primitive but fast and natural heightmap terrain.

It's still possible to dig in this terrain but it is impossible to create stuff like caves with it. You can only change the height. Caves are still an option because they can be realized with models which are put on the terrain. This has already been done in Stranded II and other games are using this method as well (Skyrim or Fallout 3 for example).

Here's another screenshot using the standard Ogre terrain. I also added a few Stranded II palmtrees.

The Ogre terrain is already much better than the terrain of Stranded II. It casts shadows (even though the lightmap quality is pretty low on the screenshot above) and it allows crazy shaders, bump maps and specular maps, making it look much more detailed.

Lua added
Luckily using the Lua library in a C++ project is quite simple as Lua itself is written in C! So I managed to do this within a few minutes and I'm now ready to use Lua scripts in Stranded III.

Shadow Trouble
Shadows are giving me a headache though. I played around with shadows but there are a few problems:

First of all: The part of the palm trees that is UNDER the ground (I made the wireframe visible to show that the trunk doesn't end at the ground) is rendered as shadow as well (red circles). This looks pretty odd and stupid. The easiest solution would be to simply don't put parts of models under the terrain. This leads to other problems though. Some models would partially fly in the air when placed on steep terrain for example.

The leaves of the palm trees are not rendered in the shadowmap at all. Just the trunk. By default Ogre3D materials don't cast shadows when they have transparency. This can be disabled in the material script but it looks like I also have to enable "depth_write" to make it work, which makes all transparent shapes look crazy.
In the following screen you can see that the leaves cast shadows but if you look at the leaves themselves you can see that they cover the ground and trunks in an odd manner. This happens because I had to enable depth_write in their material script to make them cast shadows.

Hopefully there are solutions for those problems but I won't concentrate on shadows now. I'll continue with implementing game logic and a way to define and script objects, units and items. Moreover I have to choose/tweak the right Ogre3D scene manager to make everything run smoothly on large islands.

By the way: I found out that the Ogre3D Milkshape exporter can automatically create LOD (level of detail) versions of your models with reduced polygon counts. Ogre3D uses those versions automatically for objects which are far away from the camera to reduce the amount of polygons which need to be rendered.

58 days without update - but don't worry, I'm still working on Stranded III. There was no update for such a long time because I checked Unity3D and I decided to switch. It will speed up the development of Stranded III and guarantees cross platform compatibility and massive scaling so Stranded III can probably run on low end and high end systems.

I'm currently just using the basic version but I'll switch to pro.

Currently working on the map editor. Here are some screenshots:

Height Map Importing
You can import heightmaps from grayscale images like in SII. The screen also shows the great file selection system I implemented yesterday and today. Heightmap import is already fully working.

Height Editing
Of course you can also edit the heightmap right in the editor using a brush to increase or decrease the size. This is working as well but still needs some tweaking.

Terrain Painting
Unity3D terrain uses so called splat maps. This means that you can use different textures on your terrain (not just a simple colormap like in SII). Terrain painting is not implemented yet.

Multiple Terrains
You can have more than one terrain on your Stranded III maps (theoretically even an unlimited terrain amount). You can freely position them and select different sizes. The maximum terrain size is much taller than the biggest terrain in SII! This all means that you will be able to create f*cking large maps.

Note about the interface
The editor uses the standard Unity3D GUI system. This makes the editor look neutral which is a good thing in my opinion because you will also use it to make maps for your mods (note that the Unity3D GUI can be modified and skinned anyway).

The in-game interface though will not use the Unity3D GUI. It will use my own GUI (which still has to be written) to make it look like Stranded (or like anything else because you'll be able to change it as well).

Next steps Implement terrain painting Implement loading of definitions and allow to place objects/units/items in the editor Tweak and extend in-editor height editing

Terrain painting and height map editing is now fully working. You can control the size and softness of the brush (and also alpha when painting). You can now also add, remove and modify terrain textures. Map loading and saving is working as well.

Terrain Texture Editing
I drew an ugly creature using the map editor and took some shots to demonstrate the terrain texture editing:

This is what I drew in a minute or so. I also edited the heightmap a bit to make it look 3d. It's a terrain, not a canvas. The white circle is the brush tool used for heightmap modification and painting.

Now I edit the tiling size of the first texture (the dark green one which is used as background color):

You can clearly see the difference in the dark green texture. It's much bigger now:

Swapping textures with others works as well. I'm going to change the bright sand texture with a texture which is actually a heightmap:

Here you go:

Next step Implement loading of definitions and allow to place objects/units/items in the editor

Definitions are now working. At least the most basic stuff for definitions.

defintions/objects/palmtrees.cfg has written:

object=palmtree01
name=Palmtree
model=res:palmtree01

object=palmtree02
name=Palmtree
model=res:palmtree02

This code defines 2 palmtrees which can be placed in the editor. A short explanation:

object=identifier: Defines a new object. Note that Stranded III uses string identifiers which has a huge advantage because you don't have to remember numeric IDs anymore (the game still uses numbers as IDs internally for maximum speed)

name=name: The name for the object. This one is only used to display the object in the editor list. You will also be able to access this name with scripts. Moreover it will be possible to load this name from a language file so it is different depending on the used language.

model=model path: The model used for this object. This would normally be a path to a model file but Stranded III has some models included and baked into the binary file. Those can be accessed by using the res: prefix followed by the resource name.

Those are obviously just the very basic definitions which are required to define a new object. More definitions for size changing and scripts etc will be added.

I also already implemented some fancy functions for definitions. For example you will be able to define colors in many different ways:
color=#RRGGBB (HTML style hex color with 6 chars)
color=#RGB (HTML style hex color with 3 chars)
color=r,g,b (comma separated RGB values from 0-255)
color=keyword (HTML color keywords)

Here's a little scene with Unity3D lensflares and some free models from the Unity3D asset store:

Placing objects and loading and saving maps with objects is now working

Attributes
Stranded III introduces a completely new concept (well, at least new to the Stranded series): Attributes. They can be used to specify the properties of objects, units and items. They can be modded like nearly everything in Stranded III (meaning that you can invent your own attributes when you mod the game).

For example there can be attributes which say that an object is inflammable or that it swims on the water surface. Attributes can also have values so you can say that a stick has a certain length or flexibility.

These attributes allow an insane complexity and game depth. The attributes of items for example may influence the attributes of the new items you craft. So a bow created with a stick which is super long and flexible will cause more damage than a bow which is crafted using a short and inflexible stick.

I'll post more about this concept later!

Grass
Stranded II had a grass map which specified where grass was displayed and where not. I'm not going to use a grass map in Stranded III. Bad news you think? Not necessarily! I already posted that you will be able to use many different textures on a terrain in Stranded III. This advantage over Stranded II makes a grass map needless. The grass will simply depend on the ground texture in Stranded III. So you can simply paint a beach and it will automatically have no grass (unless you assigned grass to the sand texture you were using). Another advantage is that you will be able to define different grass types, colors and sizes in Stranded III. One for each used terrain texture. Stranded II had only one boring grass type.

That's how the grass can look like (note that grass is not rendered in the distance. The rendering range will depend on the settings).

I added another texture in this shot which has no grass assigned to it. Note the texture list which tells you which texture has grass (+ Grass) and which not. There's also a new button to change the grass settings for the selected texture. You can freely load and use any texture as grass!

This shot shows 3 different "grass" types in action. I loaded a red flag icon as grass just to show what's possible. The dark grass is higher. You can specify the minimum and maximum width and height for each grass type:

Besides this I will probably add ways to remove/add grass at certain areas without changing the ground textures. Maybe by introducing grass infos which can be placed on the map and/or corresponding script commands.

Filtering
I also implemented filtering for the editor lists. This is crucial when there are hundreds or even thousands of different objects. This was available in Stranded II already. You will be able to filter the editor lists by self-defined categories in Stranded III as well.
New: You can also filter the list by the file in which things have been defined!

Lists
Another handy editor feature: A list of all object instances on the map. There are some different options for this list as you can see on this shot:

This is how the actual list looks like:

You will get to the properties window of an object if you click it at the list. This window allows you to edit the object, to remove it or to center it in the camera view.

Next steps Implement the attribute system (already started) Finish object property window (already started as well) Start to implement actual in-game logic (let player control a unit which walks around on the terrain and collides with objects)

Again a long time without updates. Sorry about that. I'll now show you a preview of the object property window which will appear when you click at an existing object on the map.

Object Properties
Most parts of the object property window are now implemented. You will obviously be able to modify the position and rotation with visual tools as well but you can also specify these values directly. You can also specify a parent object (storing stuff in other stuff). Storing is theoretically not restricted in Stranded III. You can store everything (objects, units, items, infos) in everything. You can also store stuff which itself contains other stuff. It's theoretically an unlimited hierarchy.

You now might ask yourself (if you know something about Stranded II scripting): How is it possible to store different types of objects if there's only a textfield for an ID and no textfield for the type/class? The answer is simple: Object-, unit-, item- and info instances on the map share the same ID space in Stranded III. So there is only one instance with the ID 1. It can either be an object, unit, item or info. But there can't be for example an object with ID 1 and a unit with ID 1 at the same time because only one instance is allowed to have ID 1, no matter if it is an object/unit/item/info. This also simplifies scripting because you will never have to specify the type/class again and commands will be more universal.

In this screen you can see that even health - which is a very basic value - is realized using the attribute system. It is not hardcoded at all. Modders can decide if they need health attributes for certain objects or not. This leads to maximum freedom.
Also it's pretty memory friendly: Attributes are only saved if their values differ from the default values (you can define default attribute values for each object but you can also specify general default values which count for all objects/units/items/infos). So all objects with default health values (or in other words: all object which are undamaged) don't require additional memory in save games and map files.

You can easily choose and edit attributes in the attribute window:

Object Properties - Variables
Same for script variables. You can now directly specify local script variables in the editor and assign values to them. Stranded III will support 4 data types for local script variables: byte (0-255), integer (32 bit, signed), float (32 bit, signed) and string.

The variable window allows you to specify the type, name and value of a variable:

What about the "Children" section
The children section of the object property simply lists all instances which are stored in the currently selected instance (=have this instance as parent). It's not yet implemented.

Lua Accessibility
Of course you will be able to read/write/remove attributes and variables with Lua scripts as well. Same for storing and unstoring stuff.

"virtual" defines a virtual object. The only reason to define a virtual object is to use it later in an "extends" instruction. The "extends" instruction makes an object extend another object. This means it will inherit all definition lines from the other object and you are then able to add/overwrite definitions to actually make the new object different.

the line extends=tree is the same as writing category=Trees because the virtual definition tree only contains that single line.

extends=palmtree01 will take all lines from the palmtree01 definition and put it at the position of the extends line. So bluetree is basically the same object as palmtree01 just with another name and another model_color (and another identifier of course).

You can even go wild and use multiple extends per object to inherit from multiple different objects. Stranded III will warn you in case you inherit from the same object multiple times (this can happen directly and indirectly. For instance you would inherit from tree twice if you would add the line extends=tree to the bluetree definiton because it already extends palmtree01 which itself already extends tree!). Moreover Stranded III detects deep inheritance hierarchies and cancels infinite inheritance loops with detailed warning messages to avoid crashs in case of dumb definitons

Automatic minimap generation
I just took the colors from the Stranded II minimap generator and this is the result. I also improved the "Manage Terrains" window a bit.

Moving and rotating stuff
Moving and rotating stuff right in the editor with your mouse is now possible as well. There also is a button to set the initial rotation angle for new objects and a fill terrain with objects button. The buttons below those are just additional buttons for movement and rotation and to open the properties/delete the object.

No big deal but it shows how things will work. You will be able to script the in-game interface in the very same way.
Note (for people who are used to CS2D/Carnage Contest Lua scripting): The color commands have 4 parameters. The last one is the alpha value. The parameters range from 0 to 1 (not from 0 to 255).
The used images in this shot are obviously NOT final but only placeholders!

Scaling
Moreover I decided to allow scaling objects in the editor. It's already fully implemented. You can either scale proportionally (change scale in all directions in the same magnitude) or you can change the scale on single angles for example to get a palm tree which is just very high.

Lakes
I now added a lake creation tool for the editor. It works this way:

1. click at the terrain where you want to create the lake

2. drag the mouse to control the water level of the lake (a blue plane visualizes the water level)

3. release the mouse button to actually generate the lake

The game automatically detects the shores. Flood fill is used to determine the size of the water surface.
The water surface texture is just a placeholder on those screenshots. All 3D graphics are not final.

Rivers
Rivers are planned as well but not implemented yet. I can't tell if automatic/dynamic rivers will be in the final game or not but I'll try to add them.

Networking
Moreover I implemented my UDP library in Unity3D (same one which is used for Carnage Contest and Counter-Strike 2D as well). This allows me to implement the multiplayer code of the actual game and I already started to do so. I can't show this stuff on screens though because it's just internal code. I also implemented basic U.S.G.N. functionality like adding servers to the serverlist or getting the current game version/news/serverlist from the U.S.G.N. masterserver.

Menu
A mouse cursor and different wooden buttons have been added (graphics work in progress)

Console
I also programmed a console now (unfinished, input is missing etc.). It's a bit more advanced than the consoles in my other games because it allows you to filter the console messages. For example by importance: message warning error critical error

It also shows how many messages of which type are currently in the console (see icons at bottom)

U.S.G.N. Connection
You may also have noticed that the website shows that I'm playing Stranded III from time to time. This means that the U.S.G.N. connection and communication already works. Servers are already added to the (still invisible) Stranded III serverlist as well.
I also worked a lot on underlying networking code.

Zlib Compression
Moreover I added a library for Zlib compression. This is used for map files (to make them smaller) and will also be used for various data transfers when playing online.

I'm still working on networking stuff and also on the Lua commands which will allow you to completely mod the game. Both of these things are very complex but unfortunately also boring so it's hard to make dev blog entries about those...

In-Game Interface
I started to script an interface in Lua. All the graphics will be replaced of course. I'll probably go for a window based interface like it's known from MMORPGs. The idea behind this is to make it work with every resolution without using ugly upscaling. The higher your resolution is the more you see of the actual game even while using menus. This is crucial because the game won't stop while having menus opened (it wouldn't work in multiplayer and I'll probably handle it the same way in singleplayer).

This shot shows two unfinished interface windows:

Character Window
On the left is the character window. At the moment it just shows the character and the quick access bar. Slots to equip the player (weapons and clothing) are not added yet.

Inventory
The inventory on the right just shows empty item slots and a scrollbar. Missing things are buttons for interactions, capacity and weight bars (more on that later) and maybe tabs for different item categories.

Capacity & Weight
The number of item slots in your inventory is theoretically unlimited (like Stranded II). But all items will have two numeric attributes: size and weight and your character will have a maximum capacity. You will not be able to carry more stuff when the sum of your items + the item you are trying to pick up exceeds your maximum capacity (so capacity is basically equal to the weight system of Stranded II). Weight is not gone though. Items still have a weight. Weight will not limit how much you can carry but a high weight will have negative impacts. Your character will not be able to run anymore when weight exceeds a certain limit. It may also become slower, jump less high or may get hungry and thirsty faster.

This system also allows to express stuff like large and light items like palm leaves or heavy but small items. This makes the game more realistic. I think how much stuff you can carry and how it influences you is pretty important for a survival game.

I'm also thinking about making single items which actually exceed your maximum capacity in size. You won't be able to put those in your inventory. Instead you will only be able to hold this stuff directly in your hands which also makes you quite defenseless as you are forced to unequip your weapon.
This is great for multiplayer and might lead to scenarios like: "hey I want to move this heavy rock. Can you please protect me while I'm doing this?"

Capacity and weight will be displayed visually with two bars. The amount taken by a certain item or stack of items will be highlighted on those bars when hovering the items in the inventory.

I'm planning to make it possible to craft bags (which will be equipped to the player). The better your bags are the higher your capacity is. Special clothing might provide additional capacity. Like trousers with pockets.

Stacking
All items in Stranded III can have distinctive attributes. This makes stacking problematic. Stacking will still be used to give the player a better overview. If you have just one item of a type you will directly see it with its attributes. If there are multiple of the same type you will see a stack with a little number showing the amount. Clicking the stack will "open" the stack, showing all items with their attributes.

I didn't try to make it work on other platforms (operating systems) than Windows because the speed problems made it quite useless to me. Maybe the speed issue is caused by the reflections it relies on (at least when using it like it's done in the examples) and maybe there are more efficient ways to use it but I didn't try that either.

Instead I stumbled upon "UniLua" (https://github.com/xebecnan/UniLua) It does not require any DLLs but is a plain C# implementation of Lua! That's cool and makes it cross-platform. Moreover it's amazingly fast. So this is what I'll use to support Lua scripting in Stranded III.

Character slots
A feature completely missing in Stranded I and II is the possibility to craft and wear clothes. I'm planning to add this feature to Stranded III.

A special thing about this is that certain items may occupy multiple of these slots instead of just one. For example a helmet with a ventail will occupy the head and the face slot. A rucksack will occupy both shoulders while a sling bag will only occupy one shoulder.

Also all of these items may provide additional inventory slots and capacity. For example trousers may provide some space because they have pockets.

I originally planned to have just one big inventory but I'll probably split it up into multiple inventories (max. 1 per equipped item). So when you drop your trousers all the stuff which is in your pockets will be gone as well unless you drag&drop it into another inventory first. Of course there will be buttons to do such stuff quickly. And of course you will get the stuff back when collecting the dropped trousers again.

Participation / Translation
A lot of people already contacted me to offer their help. I'm very thankful for this. Many wanted to translate the game, some wanted to provide music or other stuff. However I'm currently in a development stage where I can't use that help. It's simply too early.

I will develop the game in English (and create a German translation myself) and it probably doesn't make much sense to translate it until it's finished. All strings will be stored externally in text files so everybody will be able to create translations when it's done. Please do not contact me for this until the game is done.

Merry Christmas!
I was busy updating CS2D ( CS2D Beta 0.1.2.3) but now I'm working on Stranded III again. This is another boring dev blog entry without fancy screenshots. Sorry for that but I wanted to show that I'm still alive and working on Stranded III.

C# is much better than Unityscript
I decided to rewrite the code to be 100% C# instead of using Unityscript (which is basically like Javascript). The advantage of this is that C# is much more strict which results in cleaner code which is less error-prone and easier to maintain. Most code (several thousand lines) has already been translated.

Scripted editor?
I didn't rewrite the editor code yet but I consider to script the editor (or at least parts of it) in Lua as well. The advantages of this are obvious: Users can easily implement awesome tools to make map editing more convenient.
I'm currently in a planning phase for this.

Dynamic item inventory images
I also had the idea to make the images for items in the inventory less static. Instead there will be a Lua function for each item which is used to draw the item. This allows you to create animated inventory items which can also look different depending on their attributes. You could make rotten meat look darker or green just to name one example (while using only one item type ["meat"] instead of two types ["meat" and "rotten meat"]).

I'm not 100% sure if Lua and the GUI functions of Unity 3D are fast enough to make this work as intended (there can be many items visible at the same time) but I'll try it and I think it would be pretty awesome especially because I didn't see animated and dynamic inventory item images in any other game yet.

Extended Definitions
Unity3D allows you to have game objects with components (lights or particle emitters for instance) and children (other game objects, models for instance). I wanted to allow this for Stranded III as well. To make that possible I had to extend the very basic definition system to allow some sort of encapsulation.

I'm not fully done with this yet but here's a short example just to give you an idea how it looks like:

You can see that the inheritance system (note the abstract and extends keywords) is still present. collision actually creates a new component at the tree. In this case a capsule collider.

I'm planning to extend this so you can do stuff like

Code:

123456789

object "bla" { ... child { model=... child { ... } }}

This would allow you to create more complex objects consisting of multiple parts which can be accessed and manipulated individually. A windmill with rotating wings for example.

Enhanced Debugging
Debugging definitions and scripts is a crucial task for everyone who modifies them. For that reason I now made it much easier to do so. The new console doesn't only show the file and the line of an error but it also makes it clickable. So you can now just click an error and your text editor will open the file and scroll to the line which caused the problem. This is controlled over a configuration file. You can modify that file and the necessary commandline parameters to use this feature with any text editor you like.

Signs of life
Oops! 123 days without update! I'm really sorry about that!
I'm working full time as software engineer since mid-April so it's hard to find time to work on the game and to post news about it. Development continues anyway!

Here's a little screenshot showing a depth of field effect (objects which are far away get blurred) which can be enabled in Stranded III:

I'm still working on "internal Engine stuff" so it's hard to show new things. I currently focus on the console and the Lua interface which will be used to script huge parts of the actual gameplay.

The updated console will have (and already has) the following sections:

Standard Console
Shows messages and errors and allows to enter commands. Clicking error or warning messages leads you directly to the corresponding script/definition, opens it in the specified editor and scrolls to the right line.

Definition Console
Shows a list of all definition categories (like objects, units, items, ...) and all definitions of a category when you click a category. When you click a definition you get more details about it. Also there are icons which show you warnings and errors in definitions so you can quickly find problems.
This is a huge improvement over Stranded II where you weren't able to directly inspect all the defined stuff.

Instance Console
Basically the same as the definition console just for actual instances on the currently loaded map.

There will probably be a developer mode (command line parameter / menu setting) to enable/disable the definition and especially the instance consoles as it could be used for cheating (getting information about objects and where they currently are on the map).

That's it for now. I'll try to update the dev blog more frequently now but I can't promise anything!

The website is still very empty and unfinished. I'm planning to add a lot of foliage to the background later. Well... and content of course

The new website is not using WordPress like the old page on www.Stranded3.com so all the comments will probably be lost. Sorry about that (I backed them up). The new page will allow you to comment stuff using Disqus though which is pretty fancy.

I'm also planning to add a command reference for the Stranded III Lua scripting API and definition language very soon.

Moreover I recorded a little video of the new scripted main menu (and also the hardcoded console):