Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Work in Progress / Sports Fiction ®

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 26th Sep 2014 02:32

Query Module - 24/09/14 - 22:00 Query Class and X-Query Element

Inner workings

Today entailed a review of inner workings of the query class, the main component of the X-Query element. The difference between our classes and elements is that the elements are classes with XML and ZeroOne features designed for abstractive use; they have the quality of being abstracted to perform what you specify without specific classification constraints.

From a VB.NET dotNET perspective, a query class instance requires something enumerable such as an array to analyse. Here we have the days of the week synthesized into an array:

Dim items = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}

The base query class instance which X-Queries derive from is established behind the scenes, so to put it, with something like the following:

Dim qry As New Query(Of String)

Here we specified the query to work with strings, but in the editor you would specify what your query is to work with.

There are a number of settings we need to put into place, two of which we will review today.

Immediate Query

When the query is set to run immediately, it collects the results as it is created.

When the query is not set to run immediately, it passes on the results when it is referenced, and every time it is referenced.

Static Query

When the query is static, its results are fixed; in this instance the source of the information is used to form a static array.

When the query is not static, its results can be modified; in this instance the source of the information is used to form a new dynamic array.

Sports Fiction - 24/09/14 - 18:00 Entity Modelling

In the previous phase of extruding my blender geometry, I needed a way to perform the extrusion without altering the source mesh, having the extrusion effect certain parts of the mesh, previewing the result as alterations of the source are done.

To perform such an extrusion, I needed to use a Blender modifier called Solidify.

Solidify Modifier
The solidify modifier behaves as a non-destructive extrusion tool. It adds depth to what may be a flat surface without altering the source geometry.

The following metal component of my entity starts of flat.

It is the made to appear thickened by the modifier after application by its thickness parameter.

Limiting the modifier to certain geometry

Reducing the effect to certain parts of the mesh requires establishment of vertex groups which are to be referenced by the modifier; filtering the vertices assigned

You can also use a separate instance of the modifier by separating parts of the mesh into their own object, performed using the P key in edit mode with the geometry of interest selected.

The modifier works well with the bevel modifier, adding mitred edges to reduce their sharpness.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 29th Sep 2014 01:44 Edited at: 29th Sep 2014 01:45

X-Producer - 28/09/14 - 23:00 Project Update

X-Producer's modules planned for subsequent release

This is a message to confirm that the modules which make up the X-Producer's tools and services will be released for testing and for full release on a subsequent basis starting from the commencement of 2015. The basic materials and graphics tools are likely to come out first.

A look at the forecast of X-Producer's modular growth.

The X-Producer toolset will consist of the client program and cloud. The X-Producer client will load the modules you have installed on your local system. The X-Producer cloud will be accessible through a web browser or through the client's asset tab. The cloud and client will feature various tools of different scopes and sizes.

* The cloud will mostly generate, showcase and publish assets. The assets can be imported into the X-Producer client, or can be used in other software (such as AppGameKit, Blender or The GIMP).
* The client (shown in most X-Producer screenshots) can import the assets obtained from the cloud, or from an asset source of choice online or offline.

The client and cloud will be independent so that you will be able to use the cloud to obtain or generate assets for your products or Sports Fiction content without the client. In-turn, you can use the client to create new assets without using the cloud; although such assets could be uploaded via the client.

Usage of the client and cloud is most likely going to come free of charge. Test versions of the modules will also be free of charge; the final full releases of the modules will be purchasable. Certain services and privileges of X-Producer cloud user accounts will incur fees depending on the type of service.

Most of the early releases will be the simple client/cloud modules, or aspects of the modules when the larger modules are under development, since these complex tools have a long way to go before being fit for use.

There will be showcases of the modules prior to their alpha, beta and full releases.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 1st Oct 2014 22:24 Edited at: 1st Oct 2014 22:34

X-Producer - 01/09/14 - 06:00 Online Service Configuration

I have gotten up real early this morning to perform a serious mammoth undertaking. On this rear day of freedom, I am to perform the following urgent tasks before it is time to go back to my day job for 3 full days

Setup the servers for X-Producer Cloud pre-alpha (Something I tend to call the X-Cloud)
Prepare online content delivery functionality
Link the service commands to all of the module functions related to providing visual content (Yikes!)

The purpose of the servers - SUPPLY assets to you online, QUICKLY and make them look good if visual, make them sound good if audible

1 Interpret what assets you need for your game, film or what ever it is your are creating at the given time

2 Recommend the best quality assets available which the X-Cloud can determine

2.1 If no such asset exists, create it for you according to your instructions (if it can).

3 Have X-Cloud create certain assets and present it to you anyway (if it can) to see if you like what it comes up with

4 Provide options
Option 1 : Download the asset for your tool of choice
Option 2 : Share the asset
Option 3 : Recommend the asset for someone else's project
Option 4 : Trade the asset (if you added original features to it)
Option 5 : Import the asset into the X-Producer client for runtime use or for complex customization

So today, let's see if I can prepare the server for configuration. Prepare its database for content delivery, and link the service commands to all of the visual X-Producer modules. (We will work on linking the audio commands later, since I still need to learn how to use FMOD)

X-Producer - 01/09/14 - 13:00 Server Configuration Status

OK, I have the servers set in place and the database has been created with a basic structure to build from.

No doubt we all know that I will not be posting delicate information about the whereabouts of the servers or the details of how everything works; but what is important is for you to know what kind of things are going to take place in the future.

So far the following is possible:

Create user accounts and other intrinsic data-server functions
Create visual assets
Create projects and developer groups
Categorize assets
Store icons temporary icons for asset categories

Content delivery

Browse visual assets
Basic search engine
Basic menu

There a many more tasks to be performed over the course of the month, but it has been a fair start so far. I will post screenshots of the server's online interface as soon as the interface looks more polished and consistent across all common browsers and devices. To be honest, that is the difficult part...

Now let's apply the service commands by linking them with the modules key functions.

Hosting Module - 01/09/14 - 13:40 Link up Hosting Service Functions

HTTP and FTP access for sending and receiving operations
Collaboration database for sharing project assets and obtaining help on your project
Project database for associating assets with projects, hosting the projects and showcasing your projects

I will not go into detail about the HTTP, FTP, TCP and UDP jargon on this occasion; what is important to know is that what you create as a public entity will have somewhere to live.

Z-Definitions Module - 01/09/14 - 14:00 Link up Z-Definition Service Functions

Apply level-of-detail features to 3D objects
Apply level-of-detail features to 2D objects
Apply level-of-detail features to shaders

All of that stuff is crucial for making sure the servers do not blow up. This technology is based on ZeroOne's level-of-detail functions for smooth gameplay in Sports Fiction. Two birds knocked down with the same stone.

Data Module - 01/09/14 - 14:15 Link up Data Service Functions

Import/Export X Data (including X-Properties) for your assets
XML operation codes - Need to discuss this with Dejan (How will the operation codes be converted into and from XML? What is to run locally and what is to run on my server/s)

X Data is simply the X-Producer's database format. Nuff said.

Graphics Module - 01/09/14 - 14:30 Link up Graphics Service Functions

Create texture using placeholder
Create Web Art (HTML)
Create 3D Text
Create Vector Art
Create X-Brush from Graphic

This is the X-Graphic format used to represent any visual which is not simply a bitmap in the case of PNGs or X-Brush documents, or a user interface or multi-paged document in the case of X-Layouts.

Yields Module - 01/09/14 - 14:40 Link up Yields Service Functions

Spawn X-Element for visual
Create particle effect
Apply physics to particles
Apply particle effect to brush (See Brush Module)

The yields spawn other ZeroOne elements and therefore are heavily used for generating particle effects. I do not think particle effects will be ready for the pre-alpha due to their rendering overheads.

Brush Module - 01/09/14 - 15:40 Link up Brush Service Functions

Create X-Brush for rendering paint strokes
3D brush algorithm (Using CPU tessellation and single mesh techniques previously demonstrated)
2D Brush algorithm - Did not get the time
Apply particle effects to brush using yield functions.

Where the nodes where the low level class used to build most of the modules in the engine; the brush module is the lowest level visual class used to build most of the interesting visual effects soon to be showcased.

Kinematics Module - 01/09/14 - 17:30 Link up Kinematics Service Functions

Apply kinematic physics to items
Kinematic based special effects - Needed more planning.

Kinematics deal with motion of points and bodies. This module is primarily for the ZeroOne clients for creating game items of physical and mechanical nature. Its secondary purpose is to support some of the content creation functions of the X-Cloud.

Entity Module - 01/09/14 - 17:30 Link up Kinematics Service Functions

Create X-Entity out of X-Items
Render X-Entity to image

Without going into too much detail here; X-Entities are groups of X-Items. The entities handle relationships of items, and the items are composed of data, 2D and 3D content representing something collectable or containable.

Item Module - 01/09/14 - 17:30 Link up Item Service Functions

Create X-Items using the X-Object format
3D Mesh Segmentation
3D Mesh Grids
Create X-Items out of 2D/3D/Data objects
Generate 2D Content
Generate 3D Content
Generate Data
Create X-Brush from item
Create X-Graphic from item
Generate UV Map - I am not yet satisfied with my current UV unwrapping concepts...

X-Items are the main objects used to create game or film content in 3D; but can also live in 2D or non-visual domains.

Layout Module - 01/09/14 - 18:00 Link up Layout Service Functions

Create Windows GUI
Create Web Art and Web Documents
Create X-Layouts for the X-Producer client and other ZeroOne applications
Load X-Element rendering into X-Layout
Load 2D game level whilst applying X-Themes
Convert list of images into spritesheet (WIP)

X-Layouts are one step above X-Graphics because they can contain user interface events and multiple pages. But the focus for the time being is on their ability to render web documents and user interface elements for your game or tool project. (These are also used to define much of the X-Producer's and Sports Fiction's user interface).

Organisms Module - 01/09/14 - 18:30 Link up Organism Service Functions

Generate Branch
Generate Leaf
Generate Limb
Generate Trees - I needs more work before this function is written on concrete
Generate Creature - Long long way away before I can consider establishing such a function

X-Organisms will simulate foliage and living beings using lower level X-Elements. This is one of the most difficult to build modules so far.

Scenes Module - 01/09/14 - 18:30 Link up Scene Service Functions

Generate Buildings - I need more work on various lower level modules before designing the function
Load Scene
Create X-Scene out of X-Entities and X-Unions (or packages of elements variable in type)

The X-Cloud will supply our X-Scenes into your required model format, if compatible. Of focus is the building generator, which will use various X-Elements to supply you with buildings while you wait.

Worlds Module - 01/09/14 - 19:05 Link up World Service Functions

Generate Land Texture
Generate Ocean Texture
Generate Clouds
Generate Planet - Waiting on sphere terrain concept before this function can be defined
Cave - It is clear how caves will be generated; but not how they are to be carved out of planets

OK, that's it for todays 'labour'.

Sports Fiction Content Production

As a message of clarification for futuristic Sports Architects and modders; in a more complete version of the online service, such content will have the necessary tools for producing content for Sports Fiction. First, the focus is on getting things to work, and getting a team of developers established so I can focus more time on project management and the things I do best, rather than everything as the jack of all trades.


Most of the basic functions are linked with the server, many of which are unfinished, however the goal here is be able to call such functions from a remote devices to use the service; such as a computer, mobile phone, iPad or tablet; anything with internet access and a modern web browser with decent HTML5 and CSS support. I will at first avoid any fancy javascript content for maximum compatibility.

On my next available opportunity I will be working with my assistant to complete the local generators. There are a number of modules which need completion before things can take off.

Preparing to find a few more assistants
I am saving a little money to hire a second part-time assistant; but this one is going to work on the service; while my current one focuses on the engine. I will hopefully have a new programmer on board at some point next month.

I failed to find a decent 3D modeller at an affordable price so far this year; I find them to be quite difficult to find due to the vast population of them, but hopefully I will be able to find the right one soon.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 3rd Oct 2014 01:11 Edited at: 3rd Oct 2014 01:51

Brush Module - 02/09/14 - 17:00 Matrix1 3D Brush Source Development

Today's programming task relates to defining how the vertices of 3D geometry gets painted along a brush-stroke or vector-path.

The following are the key components of the operation:

Define the origins of the geometry given the selected 3D brush from your palette
Define how each mesh reacts to the 3D brush stroke
Define the object output function for creating the resulting geometry

Matrix1 is a DarkBASIC Professional plugin which supplies important software development tools. Some of the handy Matrix1 functions used frequently in this day of code includes:

Place Object In Group

This will assign a 3D object to a 3D object group. In my software, we will use object groups to define which objects belong to an X-Entity. The term group in ZeroOne is reserved to define a group of any element, not just a 3D object; so from a DBP standpoint, object groups represent the objects that make up entities.

Set Vector3 To Angles Between Vectors

This function is being used for the generator to analyse the angular relationships between key elements of the brush strokes. From point to point, vertex to point and the trajectory of the mouse / graphics tablet pen; or the path of a vector graphic. This applies to the 2D brush strokes, which simply omits the additional axis from the 3D brush stroke. We do not need to create a new class for anything which simply omits a few properties from another class.

Sort Array

This was a handy function for comparing the properties of one element along the brush path to another. The order of the array indicates which contains the lowest resulting value, and which contains the highest resulting value; and the ratio of the values in-between.

Next step
The next step is to create transform handles so that the user may drag brush strokes around after they draw so that they may make corrections. The generator will require the handles for its own simulated artwork.

Materials Module - 02/09/14 - 17:00 Linked up with the X-Cloud

I forgot to link up the materials module with the online service yesterday, along with the other modules. This has now been linked for generating textures and renderings.

Materials Module - 02/09/14 - 22:15 Continuation of Grass Experiments

I spent some time in the 'grass department' today, so to say. Our grass effect will be composed of more than one component because I believe there are many possible states, conditions and perspectives which make up a single blade of grass; and there are areas where grass can get in the way of gameplay, or can improve it. As for aesthetics, this is a handy feature for the renderings and generated textures.

First phase from a few years ago

The first was designed a few years ago. This gets us started with medium distance grass blades without introducing much geometry. It requires cleaning up, the example I shot brings the camera far too close to what is purposed for distant scenery.

Pros - Cheap way to make lots of grass blades over a gigantic terrain without hurting the performance in DirectX 9.00
Cons - Not good for close ups
TODO - Make it animate more like grass and improve the Z-Ordering

Second phase from earlier this year

The second phase, in no planned order, was applying pixel flickering tricks to simulate grass even further away. In this video we appear to be close up due to the lack of a terrain; but with more time we can make this look less obvious in digital nature.

Pros - Cheapest way to animate grass. No additional geometry. Brilliant for long distance
Cons - Not good fit close ups
TODO - Make the flickering more smooth

Today's phase

In the third phase I have introduced more height in the grass blades taken from the component used in the second phase. These blades reside in texture space. A more aggressive animation was used to see how far we can go before the flickering goes out of control. It will be interesting to see this on a terrain later on.

Pros - Cheapest way to animate grass. No additional geometry. Increases the depth of the effect.
Cons - Not good fit close ups
TODO - Make the flickering more smooth, grass blades more curved and recognizable

In the forth phase I have taken the distortion shader and applied the principles of wind blowing along a rough terrain; all in texture space. Here the wind blows from left to right, although video capturing will not pick it up brilliantly; this is going to be useful for Sports Fiction when simulating motion of vehicles and spacecraft.

Pros - Cheapest way to animate grass. No additional geometry. Looks like blowing grass blades
Not much wrong with this one, it should work fine in combination with the others.

TODO - Experiment some more

Next phase
I will spend more time refining the textural aspects of the effect; and will start to introduce the 'real' grass blades for close-ups later on. I have spent a great deal of time coming up with techniques for generating grass blades in Direct X 9.0.

As for Direct X 11, the Ziggurat plugin features some interesting instancing and tessellation examples which may come handy in the distant future.

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 3rd Oct 2014 08:20
Interesting work with the grass. Flickering the pixels for very distant sections is a neat idea, I can see how it would be really effective if blended with a good transition to more substantial blades up close.

It will be good to see it gain more perspective when applied to a terrain with some recognizable objects to help determine scale and distance.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 3rd Oct 2014 23:09 Edited at: 3rd Oct 2014 23:19

Z-Definition Module - 02/09/14 - 14:00 Z-Definitions Phase 1 Part 1

Today I started programming the Z-Definitions functionality purposed for optimizing the engines.

The first step involved organising a collection of objects, limbs, shaders and elements an assigning them a threshold relative to the position of the player by their vector from the camera on the relative Z axis, or relative to the active performance of the running hardware. The threshold determines whether such elements should be updated, put to sleep, hidden, reduced in quality or whether something must happen in the software at the point of transition between the Z-Definitions themselves.

PADLOD is a personal acronym for Performance and Distance Levels of Detail being used to represent levels of detail given the performance not just the distance of the camera.

All Z-Definitions have the following key properties.

* Minimum Distance & Maximum Distance
* Minimum Performance & Maximum Performance

When the Z-Definition origin is within this distance from the camera, it is updated; otherwise it and its content are either put to sleep or unloaded.

When the software is running within the range of performance, it is updated; otherwise it and its content are either put to sleep or unloaded - they are not required.

Based on these four criterion's, the software will invoke the appropriate actions for improving your gaming or development experience.

Next phase

Design the components which perform the necessary actions, given the performance of the software and/or the distance of the camera.

Materials Module - 02/09/14 - 14:00 Grass Development Phase 3

I undertook the 3rd phase of building the grass techniques; an experiment aiming to combine some of the principles of the first technique and the second; layers of grass in addition to being drawn on a single pass respectively. I will also produce this render effect with one polygon. So far this is what I have come up with.

In the first step I had to get the grass to elevate in texture space taking the camera position and object normals in consideration. I needed a number of texture-maps to define where the grass blades are and how many should exist. At this point it is not a problem that the grass blades look blurry and cartoon-like, the finesse work will come later.

As for the diffuse map moving around like Super Mario water flooded with apple juice, I will need to have the texture clamped in place a bit better to divert attention away from the intrinsic counterfeit nature of the grass.

The next step is to produce the following improvements:

Make the blades more distinctly defined compared to each other
Introduce some bumps, since a grass surface is never perfectly flat
Make the blades finer

In the end I managed to introduce a less repetitive animation, and the grass blades look finer. There are also a few bumps here and there.

One thing I could not figure out was how to make individual grass blades bend when used on a flat surface. When used on a terrain the grass blades will not all face the same direction; but I will need to get them to bend much more randomly. A task which is low priority.

Pros - No additional geometry. Nice quality at medium and long distances.
Cons - Bound to texture space. Needs presence of technique 1 and the real blades of grass to sprout out in the final rendering out.
TODO - Make each blade more unique, reduce the repetitive tiling and wavy animation.


I think that is all for the texturing aspect of the grass renderer. Next it will be time to work on combining the techniques, and introducing grass geometry and terrains.

Quote: "from Ortu

Interesting work with the grass. Flickering the pixels for very distant sections is a neat idea, I can see how it would be really effective if blended with a good transition to more substantial blades up close.

It will be good to see it gain more perspective when applied to a terrain with some recognizable objects to help determine scale and distance."

Another thing which I will use Z-Definitions and the PADLOD principle for is what Ortu pointed out; we need transitions between the different levels of detail and performance. Certain grass geometry is fit for certain distances, and certain ratios of live performance.

Sports Fiction - 02/09/14 - 14:00 Entity Preview Panel Phase 1 Part 1

The entity preview window for Sports Fiction will be used in various item configuration screens in the game. Much of the design of this panel will be based on providing access to key tools for game item configuration, emphasizing the key considerations given the current player objective.

First, I will need to experiment with ways of rendering entities in this view in a technical-architectural way. I have an upgrade to the Sports Fiction UI pending which features more futuristic interface controls, but for now we will focus on the objects.

Today I experimented with the DBP wireframe display.

So far it seems fair, although if used in the real thing; anti-aliasing will be required to make the edges look smooth; reducing the mosaic looking edges. I would like to remove the triangles and just have four sided polygons, but this is low priority at this phase.

I had some feelings it is time to put a more interesting default background in place for the SF client, something more interesting than the grey screen.

Next, more concepts for technical-architectural styled rendering.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 4th Oct 2014 22:19 Edited at: 4th Oct 2014 22:26

Organisms Module - 04/09/14 - 16:00 Hair - Phase 1 Part 1

I spent some time travelling on public transport buses and trains earlier on in the day and could not help myself from watching people. With the topic of hair on mind as the next focus of the organisms module, by observations it is clear that this will be quite a challenge which I look forward to; given the complex nature of the strands forming a unique pattern with each person.

As always, I tend to start with the texture and shader. Rather than copying pictures of hair from photographs; I felt it would be more prudential for the software to generate the hair using texture maps as a guide.

I dedicated just a few hours for the commencement of this task on this occasion because of the medium priority for this feature.

I selected a photograph of Scarlett-Johansson's hair style by random; and decided to give it a shot over the next few weeks.

Over 100,000 strands of hair forming a wavy pattern, grouped together with adjacent strands following a similar path, and the others forming a path of their own. In some places, only a few strands follow the same path.

For the task ahead I will not need to run a major science project to determine the best possible way to simulate the form and motion of such hair; all we need is something that looks similar without compromising the performance of the software.

I took a look at one of the paths which caught my attention, stemming from the green part of the line. This path indicates that what ever geometry is going to be put into place, needs to be quite long in length for this hair style, even though her hairstyle at the Rome film festival in this photo would be considered to be medium length hair for most women.

I started to think about what hair geometry I have in place already, which seems to be fit for the task. I will just need the organisms module to generate the geometry along generated paths from the head and out.

But before geometry, I will work on the texture. For which I started to create a analytical shader which renders perfectly straight strands. No curving, no alpha channel and the colour of the strands are for analysis rather than for realism. What is being analyised is the depth of the strands rendered really close to the test viewport camera.

The strands need to be quite straight with this type of hair; the curves are to be handled by the geometry. However a number of stray pieces of hair could be used to add some nuance.

Next tasks
Introduce a bit of waviness, transparency, natural hair colour, tone, texture and lighting.

Sports Fiction - 04/09/14 - 19:00 Modelling - Buggy B - Phase 1

I decided to spend about 45 minutes creating an adaptation of Buggy A into Buggy B. I have planned to spend 30 minutes to 45 minutes here and there modelling game assets, without compromising my primary role as game / software developer.

These vehicles will not be taken seriously. My policy for much of the complex entities prior to the completion of the entity and item editor is to not spend much time on their modelling work. There is no point spending weeks modelling what will be constructed in a few hours once such editors have been created and some 3D modellers have been hired.

My task here is to make them look like a vehicle, make em look somewhat futuristic, and make them drive; another purpose for such vehicle designs are to make them look different from the others, making the different racers or players more distinguishable.

I concluded that because the second buggy looked different to the first one, the objective was accomplished. I figured about 3 or 4 more versions will be efficient for a 10 player race. There are many other classifications of vehicles, spacecraft and sports fielder which need equal attention.

Worlds Module - 04/09/14 - 19:45 World Module Phase 1

The worlds module is one of my most anticipated challenges; I have even paid my assistant to work a few hours on its sphere terrain. (Hopefully he will make a good start). I made a brief list of components I will need to design:


I also have 3 world formats in mind; based on their terrain structure:

Normal terrain
Sphere terrain
Abstract terrain

I have been thinking about how to get sphere terrains and path terrains generated. I will base their design on the Blitz Terrain plugin because I do not wish to re-invent the wheel; however these special adaptations will work for a planet shaped world, and an abstract world forming some kind of a customizable shape.

After a little thought about how I am going to make things happen. I decided to spend some time researching the rendering of clouds.

Worlds Module - 04/09/14 - 20:00 Researching cloud techniques

The first idea for researching cloud rendering was to try out the Dark Clouds plugin. I am a fan of creating my own effects, but I also have a policy of making good use of the tools at hand.

As you may have noticed, I often use tools for what they were not built for willingly. It is this unorthodox behaviour which award me the best of ideas so far. I knew that the Dark Clouds plugin was for rendering a sky box environment around the viewer; but what I need is something which also renders the environment around a planet!

Out of the box this is not possible; but through my eyes it will be.

I took a look at the plugin's rendering out of the box, and this is what it came up with:

It took a heck of a long time to load, but finally we got something quite interesting (minus the metallic looking static creature floating in the middle of the sky).

I felt that it looks interesting, and need not be perfect at this stage. There are a million things I can do to make it look better. I am now thinking about how to use this with a number of shading techniques.

There seems to be only a hand full of plugin functions, which is usually a sign of tool with limited control; but this does not mean that I will not be able figure out how to apply what it is good for.

I intend to play around with the plugin, stripping its example down to the bare bones and when scheduled to work on the clouds component of the world generator, introduce other techniques into the scene; before projecting the scene into other perspectives of the world, such as from outer space.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 5th Oct 2014 19:07 Edited at: 5th Oct 2014 19:51

Binary Modular Software - 04/09/14 - 9:20 Additional Logo

The Binary Modular software group's first logo incorporated the figures zero and one to represent ZeroOne as our base strategic system of providing our digital services. I have now created an additional logo which incorporates the traditional lowercase b and uppercase M which is the usual prefix for all of our asset libraries. Now our name and strategy are both represented in the same logo. It will sometimes appear in our 'motherboard-green' theme when representing a less serious topic.

Both logos are minimalistic because from my early graphics design experiences; complex logos are the least versatile for screen, print, clothing or projection; in serious or trivial situations.

Any devblog update based on us, will now feature this logo instead of the engine logo. The zero and one engine logo will be used when discussing the system itself.

Organisms Module - 04/09/14 - 9:20 Hair - Phase 1 Part 2

Waviness of hair. The waviness will come from the forces applied in texture space and in 3D using the vertices which make up the hair style. I wanted to keep the texture waves limited since we are currently creating straight hair, in comparison to course hair. I added a wave texture stage to the shader, adding micro sized waves to make the hair look less plastic like; or plasticy in Chris's vocabulary.

Next, I then increased the strands of hair and the decreased the roughness for comparison. Comparing one extreme to another is my usual procedure for determining the behaviour of a generator, shader, sound or effect.

As always, I tend to start with the texture and shader as a 2D challenge; before considering the 3rd dimension.

Rather than merely copying pictures of hair from photographs; I felt it would be more prudential and helpful for the software to be able generate the hair for you, using your texture maps as a guide.

Organisms Module - 04/09/14 - 10:30 Hair - Phase 2 Part 1 - Adding Colour and Texture

It was then time to add some colour and texture to the shader. Introducing the new features was just a matter of creating a gradient to reflect the minor highlights of the hair, leaving rendering the major highlights and shadows to the lighting system.

Before linking the new shader with the material editor, so that I can use the user interface to make adjustments, I first had fun playing around with the settings to make sure that the characteristics of the hair can be changed appropriately, with limited distortion.

The following two screenshots show how the diffuse texture was generated.

First the gradient

And then some noise to add finer detail

Applying the textures

When the textures were added, the render became a decent close-up shot of the coloured hair. It came up a bit dark, but I will adjust the colour in the X-Producer's material editor later, and seamlessness will be a task for another occasion.

We can also change the characteristics of the hair; useful for the Sports Fiction's character editor, and the X-Producer's texture generator.

A more pronounced alteration produces hairs which bunch together and break apart.

The black lines represent areas of transparency

We will be able to see through the black parts when transparency is applied using an opacity mask texture. Instead of using the alpha channel of the base texture, we use a dedicated opacity texture so that users of the generator can create more variations of the same hair without having to make changes to the base image.

When the opacity mask is removed

We get a really thick looking instance of hair when the opacity is taken out of consideration, as shown below if the user omits the opacity texture.

I noticed that my algorithm does not adjust the waviness much in the vertical axis of the texture; something I will look into later on.

Problem found when applying transparency

Judging by the following view of the effect with transparency applied; we have quite a mess. It will be interesting to find out what went wrong when it is time for the next update.

Worlds Module - 04/09/14 - 13:00 DarkCLOUDS Early Analysis

Time to perform a quick analysis of DarkCLOUDs before considering it as a basis for the skies. Like the grass system, I will combine various techniques to produce a final result. DarkCLOUDs need not handle much, but I indeed hope that it will...

So let us ge rid of the pelican, and take a look at the default sky rendering.

And here is the effect with rain.

It looks fit for the job; the person who created to tool has seemed to have nailed it quite nicely.

The documentation is limited and I will need to understand a little bit more about how it works before I can take things to the next level; but I will not be using Google to find out. I create an observation tool. I will take a look at what it is doing behind the scenes, using a quick application of analytical textures, since it is the pictures which paint 1000s of words.

Worlds Module - 04/09/14 - 14:15 DarkCLOUDS Analysis Textures

I have spotted the following assets supplied by the renderer which have been used to make a quick collage for your observation.

There are not as many images as I would have hoped for, but it is way too early to make any sound judgement about such matters. Of particular interest to me is what the cirrus, rain and sun images are doing. It seems so far that I could not affect the main clouds by supplying my own particle images.

I created the analysis textures containing patterns, text and gradients for indicating where they are in the rendering.

Applying the assets

I had the assets applied into the environment, and this is what it showed:

The colour information was discarded, but it became clear what is being done with the cirrus clouds texture. When it eventually started to rain, I noticed how the rain was applied. It seems to be rendered on a gigantic cylinder.

I did not manage to spot my sun flare image, but I did not care because the perceivable structure of the rendered scene will be decent to work with.

I then started wondering what would happen if I moved above the clouds; would I end up moving outside of the rendering and into an environment filled with black? Actually what I observed exceeded my expectations, for such a low priced product.

That was pretty cool. I want the players to fly in and out of planets; and here the clouds plug-in provides a skybox which can change in altitude. But there is more...

I already noticed a cube mapping function used in the pelican example. But this one is not quite the single image cube map function supplied by the Dark Shader plugin; no, this cube mapping function produces separate sky-box images!. A function which opens the doors to many other areas of cloud development, but I will touch on those areas later. I do not yet know if the cube mapper will pick up third party content in the atmosphere, but this is still a flying start. Even if third party content could not get detected, we could paste them on the images.

Here are what we will be able to generate out of a scene

And so, here is the cube map applied to a sphere in the sky

So in the end I am happy with using DarkCLOUDs in the X-Producer and Sports Fiction. The next step is to integrate it into an X-Element, introduce it within an X-Scene and run some test scenes with some other new special effects .

Additional work

DarkCLOUDs will simply cut off the clouds when you fly too high; not quite what I want for the final product. I will start researching and planning how I will need to add a layer of clouds to be viewed from below the view-port camera when flying in outer-space or just above the clouds.

We will also need physics clouds so that objects can interact with some of the clouds.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 6th Oct 2014 21:57 Edited at: 6th Oct 2014 22:09

Sports Fiction - 06/10/14 - 16:00 3D User Interface

The time here in London was 4pm, a feeling of tiredness from a physically demanding day-job-day was what dominated my mind, convincing me to dive into the bed beside me; who cares if I am tired... I don't.

I decided to split the evening into a few sessions; focusing on one aspect of the project in one session and then another aspect later; reminding myself of what needs doing, who needs to do what later and what I should do myself.

The first aspect I looked into is where I left off with the 3D user interface features of Sports Fiction.

Why would one place a 3D user interface into a gaming environment? Can you think of a number of good answers?

Some UI elements are to be a part of the game world while the traditional UI buttons and windows will be able to float around in 3D space.

I need a function to convert a number of relative UI elements into a single image for manipulation. I completed the function which draws the UI and all child elements into an image. By nature the user interface starts off as many separate images, but we need just one image for each major UI element so that they can be rendered as a composition in 3D.

My next step will be to test drag a window in 3D space.

Worlds Module - 06/10/14 - 18:00 Planet Surface

I need to give my grass somewhere to grow, the clouds somewhere to cover and my water somewhere to flow. So I decided to prepare the action plans for terrains, trees, stones, lakes, oceans, rivers and seas.

Starting with the terrains; I have created an X-Element which will produce the different categories of terrains for use in our world; ranging from mountains, footpaths to caves and the planet itself. I want the X-Properties of this element to be consistent with the various types of terrains so that they can all be easily understood by the user based on the learning of one set of tools; namely the world editor.

I use the term terrain quite loosely because I prefer to refer to them as surfaces because I have a number of applications for them, not just for the ground... But for the time being I will continue to call them terrains since this is a more common TGC community term; in the X-Producer, The X-Terrain format will be composed of X-Surfaces; anything called a terrain will simply mean an X-Producer XML defined terrain for the ZeroOne engine which uses X-Surface elements.

X-Surfaces are generally to be seen as the surface OF X; they are surfaces of something.

A nice image of example surfaces by the Wikipedia

X-Surfaces can:
Contain child surfaces (Surfaces on a surface)
Be any shape
Be height field modified
Be animated
Be stacked
Be blended together
Have variable levels of detail
Integrate with Blitz-Terrain, Advanced Terrain, PhysX Height Fields, Matrices and Grids (Multi tiled planes)
Painted or modified with X-Brush tools
Work with my Terrain AI features
Be used in your DBP projects using 3D objects; and in some scenarios Blitz-Terrains or Advanced Terrains.

Pretty cool sounding isn't it; but mere words cannot compare to seeing things with your own eyes.

We will discuss and showcase the X-Surface quite frequently while we discussing the X-World element, which will be an X-Surface on steroids; but there will also be applications for X-Surfaces in the other modules too!

Zero One 06/10/14 - 19:30 Running DBP tests

One cool way in which our Dark BASIC code is tested is through the ZeroOne configuration INI file for the given process. In the INI file we can supply test parameters for creating class instances and running them in the simulation without having to recompile the program.

When the engine detects the request for testing via its configuration file; it follows the provided instructions accordingly. On todays occasion, I used the configuration to quickly spawn various 3D elements for testing before introducing them into the X-Producer.

Nytus Sermus
Years of Service
User Offline
Joined: 17th Jan 2013
Posted: 7th Oct 2014 12:25
wow, Chris u are a workaholic! As much time as you've spent developing sports fiction, it reminds me of one famous game with an immortal development cycle, DNF, you should have called it Sports Fiction Forever....haha, seriously though you are as dedicated as you are talented.
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 8th Oct 2014 00:50 Edited at: 8th Oct 2014 00:54

Binary Modular 07/10/14 - 19:30 Update

Quote: "Sports Fiction Forever"

2 years next week since the thread was posted. There has been plenty of time to think about sports yet to be current, and there should always be an interesting subject.

As for the big budget long development games out there. I only hope my little game does not entertain as badly as Duke Nukem Forever did. La Noire is a good game which took a decade for 200 people to build. I am not sure if Destiny is doing very well at the moment, but Activision have invested in an IP, not just a video game.

Quote: "seriously though you are as dedicated as you are talented"

Thanks, I always look forward to playing what I see in my mind; that is what keeps me motivated. It is also my excuse for learning which is all thanks to the lessons learned from observation and from studying reality.

DBPR Tips: Did you know?

Every once and a while it will be good for me to share some of the techniques being used, here are a few to try out for yourself.

As well as having multiple statements in an IF block: + Code Snippet

You can write them on a single line like so: + Code Snippet

You can use constants to insert repetitive code like so: + Code Snippet

and repetitive parameters: + Code Snippet

You can perform a task at random, giving more likelyhood to a certain outcome using a select statement like so:+ Code Snippet

Organisms Module - 07/10/14 - 17:00 Phase 2 Part 2 - Dealing with hair problems

Quite a number of digital hair problems have occured. For one I was unable to bring the hair into the X-Producer's viewport without it looking like a bunch of dried mosaic vines which would have made a nice looking background in Worms Reuinited; but our goal is to advanced from static head pieces to dynamic strands.

So what should I have done to find the cause of the problem shown in the last update.

Do I

A: Search google to find out what why my hair shader is distorted?
B: Create some analytical textures to indicate what the shader is doing
C: Disable aspects of the shader?
D: Ask the Green Gandalf?
E: Turn off the computer, drink some beer and come back to the task later when an idea comes to mind?
F: Leave it for tomorrow?
G: Start all over again, shall we?

I am sure if a survey was sent distributed we would recieve back all sorts of answers. I will not put this off because this is a problem which prevents progress. I do not think I will find the answer on Google, and asking for forum help is something I will do if I get stuck. I never like starting any development all over again.

The procedure I ended going with was to disable aspects of the shader. After removing a number of features and returning the result, the cause of the problem was indicated. I was using transparency settings which were blending the overall surface with the background regardless of my opacity map, rather than only with the presence of the opacity map; removing the feature improved the result; however, it also revealed that further work needs to be performed before it is X-Producer ready, so to say.

Organisms Module - 07/10/14 - 17:30 Phase 2 Part 3 - Improving the waviness

Although the hair style I am starting with will not feature much waves; I am laying out a foundation for introducing waviness later on when the rest of the hair styles are given a generator.

Hair are some reflections of what occurs when the wave map is changed; along with some minor adjustments to the number of strands. Again, black areas represent transparency; layers of hair will be underneath in the final result.

Hopefully in we will get the hair in good working order in the next few updates.

Reason Module - 07/10/14 - 17:40 Event Reasons

So far the concept of reasoning has been developed to determine whether a query or algorithm satisfies something. This is being put into place so that you can tell the X-Producer or Sports Fiction user interface or environment to perform something if something is true.

I came up with a concept which now causes the reason to perform actions; where by something occurs because of a reason. To make this work, I am thinking of having you specify a certain event that can happen; and when it happens; take action according to your specification.

I figured I had better put this into testing before elaborating any further.

Yields Module - 07/10/14 - 19:00 Emitter Shapes

The X-Yield element will yield certain attributes or resources when requested to do so. Yields can be score, damage or other attributes; and can spawn any particle effects, geometry and any X-Element. To make some progress with this module I started to work on where and how such yields can take place as visuals.

I started out by creating a new ZeroOne function which creates objects around a specified object.

By selecting an object in a scene as an emitter shaper; it can be used to spawn geometry from within itself. Or it can be used to spawn geometry around itself. We will see the outcome of this task in one of the next few updates.

Using the configuration file I mentioned a few updates ago, I played around with the settings so that I can determine how best to take things forward. I put some physics and particle effects properties in place for when we introduce such aspects in future.

Le Verdier
Years of Service
User Offline
Joined: 10th Jan 2012
Location: In the mosh-pit
Posted: 8th Oct 2014 11:50 Edited at: 8th Oct 2014 11:53
Your huge work and devlog are really impressive..

About the hair problem, do you mean the good old problem of "trapezoid with triangles distortion" ??
If yes I'm not sure there is an easy solution except increase tesselation or maybe an expensive shader..
try googling "texture map a trapezoid"..

All hail the new flesh
Years of Service
User Offline
Joined: 28th Dec 2005
Location: Sweden
Posted: 8th Oct 2014 12:43
Haha, here's a constant favourite of mine (warning: not serious)...
+ Code Snippet

"Why do programmers get Halloween and Christmas mixed up?" + Code Snippet
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 8th Oct 2014 23:07 Edited at: 8th Oct 2014 23:12

Binary Modular 07/10/14 - 21:00 Update

Quote: "Le Verdier: About the hair problem, do you mean the good old problem of "trapezoid with triangles distortion" ??"

I am having problems with the pixels. Well at least that was the problem; the dark edges around the hairs etc, not a good look. It was caused by my effect states. For some reason I had a blend operation applied to all colour channels, which I needed to turn off because I am taking control over the blending with my opacity map.

The new problem is now the hair is overly transparent when my opacity mask is applied. With out any doubt; it will only take a few moments to figure that problem out when I get round to it.

As for the triangles; I will be modelling the hair geometry myself; I will not generate the hair geometry. Unless I find a good reason to do so. So if plan A goes accordingly, the modelling program will generate the UV coordinates I need; and I'll have the users select from a list of hairstyles; or plan B, generate the hair in the character editor and have it calculate the UV coordinates.

Amongst 1,000 other problems, the hair problem doesn't me scare much. I will make note of you suggestion for reference.

Good luck with your Scene Editor - Making Of campaign; I have seen a number of interesting tools and editors from you over the years. Looking forward to seeing how that one develops. Not easy.

Quote: "Le Verdier: Your huge work and devlog are really impressive"

Thanks, it is nice to look back every once and while to see how things evolved. Makes me wonder what things will look like this time next year.

Quote: "Rudolpho: Haha, here's a constant favourite of mine (warning: not serious)

perhaps iValue = 2 : print "Indeed" : endperhaps"

Indeed perhaps.

Yields Editor 07/10/14 - 16:30 Prototype Function - Randomize Yields on Emitter Shape

Emitter shapes are the first aspect of the yields module I wanted to start, and it is in the yields editor where this start will take place.

To get this function to work, I had to spend a number of hours creating new engine console commands, object movement functions and object collection functions. After about 3 hours of some serious DBP compiling we have the prototype function in place within the X-Producer and Sports Fiction. I intend to use this feature for placing rocks, stones, insects, fungi and grass around certain objects. The X-Brush strokes and particle effects will also have applications for this function.

In the following demonstration; a sphere was used as the emitter shape, and cubes where yielded from the X-Yield to produce a sequence of cubes on the outer surface of the sphere. It does not matter what shape the emitter shape is, what matters is whether it can supply good collision detection.

So far the generator is too slow for intended use; after turning off the logging system, I will run some benchmarks to find the bottleneck. I intend to introduce the physics engine so that the user can take advantage of his or her hardware, speeding up the process; opening up more interesting features and command-sets.

Do feel free to post up any ideas for what else such a function could be used for, so that I can make note of what features might be worth to adding to it which I have yet to come up with.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 10th Oct 2014 20:27

Binary Modular 10/10/14 - 12:00 Research and Development Notes (R&D/RTM)

Today's activity started with a can soda.

It was an appointed moment for a fizzy drink, as far as my taste buds were concerned and as permitted by my diet. It was a can of soda of a flavour and brand I was not familiar with; its text was written in Polish, and I had no way of determining its ingredients. So naturally, with a selection of 50 or so brands of soda I was already familiar and happy with, I decided to pick the one I knew nothing about, with no known ingredients but with an interesting energy drink themed logo on the face of its green can. I took some Lucozade just in the event of an emergency after-taste-attack from exhibit x.

When I eventually tasted the drink; I at first thought that what ever its ingredients were, it was not so bad at first, but after a few minutes, I began to notice the after-taste which was not in accordance with the regulations and policies set in place by my taste buds. So on came the lucozade to flush out any slight reminder of the taste.

The drink turned out to be an american brand called Mtn Dew; or Mountain Dew; brought to us by Pepsi. Not quite my can of soda; although [i]one person's hate is another person's love[i], I am not sure what it is about the drink that makes it worth considering. The experience shows how much not knowing what something is can draw attention no matter how fussy the audience is, whether the outcome is desirable or not.

As with all of my experiences of the surrounding spontaneous occurrences of life; this lesson was added to my project notes under the topics of promotion and of game design; sometimes the choice the user will make is out of curiosity.

Binary Modular 10/10/14 - 12:15 Task Timer

I spent the first part of the afternoon programming a task timer class. This is class to be used by my game as a reasoning and querying source, and by the developers ( including myself) for an analysis of the time spent on project tasks.

When used by the game

Compared to engine clocks which:
Time continuous engine processes
Indicate performance bottlenecks with benchmarks

Task timers will:
Time how long it takes for the player to reach an objective
Time how long it takes for the AI to reach an objective
See what the AI or Player spends most of their time doing with their game characters and items

When used by the developers
Task timers will:
Time how long it takes for processes such as light maps to complete
Time how long it takes for the developer and the developer's collaborators to complete tasks
Show what takes up most of the developer's time

Here is the design for the task timer tool (which will look different in the X-Producer).

I will be adding the task listing components the next time I work on the research tool.

Binary Modular 10/10/14 - 14:45 Converting PNG imags into an ICO (Windows icon format)

I often require the use of an icon converter service to convert my images into icons for use in software. Before I supply the X-Producer with an icon conversion support; I am using a website called ConvertICO at which provides a fast PNG to icon conversion service free of charge.

Material Editor10/10/14 - 12:00 Getting ready for grass development phase 4

The code name for the base grass shader is called ZeroOne.WavyBlades or just Wavy Blades. No shader in our library is named for a specific purpose, but this name indicates what kind of materials would benefit from its technique. Starting off with this base shader, we will soon add the other two shaders to complete the look of the grass, along with some bushes and plants.

To begin the next phase, I need to use the X-Producer to find appropriate default settings for the materials in a test scene. For this I will need the following XML file, the details of which we will have explained in the next update.

<XProp Name="WavyBlades" Header="Wavy Blades">...

+ Code Snippet

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 13th Oct 2014 00:14 Edited at: 13th Oct 2014 00:20

Material Editor12/10/14 - 19:00 X-Properties for shaders

I needed to use the X-Producer to find appropriate default settings for the materials in my game scenes, and would like the users of my tool to do the same for theirs. To prepare the shaders for implementation, an XML document describing a series of X-Properties will explain how to set up user interface for adjusting the shader.

Now in most of today's shader editors; simple writing out a short list of metadata for each shader constant would suffice in supplying the given editor information about what would usually produce a set of textboxes or sliders for adjusting your values.

The X-Producer's material editor is no ordinary shader editor. When dealing with the X-Producer you have an unlimited number of ways of editing a value using either a predefined user control or your own; these controls are instruments used to synthesize various shader features into a solution. When defining how you want your shader to be tweaked, we need to use XML with the X-Property format shown below.

<XProp *attributes >
* Child properties *

Another reason for using external XML descriptions of the tweaking controls is so that more than one material can be defined from the same shader; and in-turn; more than one shader can define the same material (with a few exceptions to be introduced later) When we define an XProperty document of a shader, we are defining a derived implementation of the shader itself; therefore, the settings apply to all materials which link to the shader via this derived implementation (where the material could have linked to the shader using a different implementation)

The first part of the shader x-property document indicates the name and header of the shader instance.

<XProp Name="WavyBlades" Header="Wavy Blades">...

The name is the name of the implementation. It is used for refering to the implementation of a shader program; in this case the ZeroOneWavyBlades shader; but the name could have been anything.

In the properties panel of the X-Producer, it is the header attribute which is shown instead of the name. The difference is that the name must be unique and not contain any special characters, whereas the header can contain any string.

What is populated into the properties panel when the shader implementation is active will be defined by the child properties.

Zero One Backend 12/10/14 - 22:00 Regex - Regular Expressions

I am starting to make use of regular expressions (or regex) in the Zero One plugin, engine and the X-Producer as a feature, and as a tool for my own use when working on my software.

Regular expressions can search and manipulate text in a string variable, document or file. Unlike common search and replace functions found in word processors and search engines; regular expressions are a sophisticated text processing instructions used to perform smarter searches and replacements of text. It is ideal for programmers to detect errors, validate forms, find all occurances of a series of words and replace them given a certain condition.

This is no new technology, since it has been around for over 6 decades. It has many applications in software development.

To introduce regex without going into much detail, we will first look at some basic examples of searches and matches:
All of the following regular expressions start and end with front-slashes, as is the case in many regex tools, but may sometimes be unecessary due to the slashes being added for you, behind the scenes so to say.

In the text: Print User.Name

Regex: /Print User.Name/

Matches: Print User.Name

Reason: All the characters in the expression are literal, and the text is identical

In the text: Print User.Name

Regex: /P.... User.Name/

Matches: Print User.Name

Reason: All the characters in the expression are literal, except for the dots, which return any character, except newline/return when set not to detect new lines.

In the text: Post User.Name

Regex: /P.... User.Name/


Reason: Nothing is returned because what is expected is a 5 character word followed by a space at the start of the text beginning with a capital P. Post is a 4 character word followed by a space. In actual fact, what is expected before the word User, is 6 characters including the initial capital p, and the space.

In the text: Print User.Name

Regex: /[a-zA-Z]/

In global mode; matches: Print User.Name

In normal mode; matches: P

Reason: The square brackets represent a single occurance of any alphebetical character from a-z, in lower or uppercase. Only in global mode will this match the whole text, otherwise only the first occurance of a character from a-z will be returned.

So far we have seen sneak preview of regex; not quite as useful as it gets, but simple enough for most to grasp, and sets us up for a more complex and sophisticated regular expression introduction to follow. A great way to search for matches in your strings using the plugin, or your asset files or X-Queries using the X-Producer.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 18th Oct 2014 02:31 Edited at: 18th Oct 2014 02:39

Zero One Backend 17/10/14 - 20:00 Regex - Regular Expressions - Part Two

As your knowledge of regular expressions increase, so will the number solutions you have available for finding patterns of text, validating the matches and replacing the matches where necessary; in string variables, opened documents and files saved on the system.

In your first encounter of the regular expression syntax, it may seem like overkill to take the time to write an instruction which might have been handled by a simple search and replace command, but there are many text operations which a normal search and replace tool will not be able to handle, patterns relative to adjacent content which you as a human being can easily recognise, like the following:

Tom won the bingo features 3 words that happen to be 3 characters long

Word.exe, Word.txt, Powerpoint.exe features two filenames classified as .exe (executable programs), contains one valid email address, the one with the @ sign in between mario64 and

HTML files mostly consist of XML syntax which contain the following XML pattern <head> somewhere before XML pattern <body>

and Green is my favourite color is a sentence which contains the US variation of the word colour

These patterns are easily recognisable by the human eye, but how could you perform a search and replace with such criteria on a computer? Well for one, you could resort to programming an application dedicated for the purpose, but that is the extreme solution. A more efficient solution is to use Regular Expressions.

Regex can be tested online using one of a number of regular expression development tools. The one that I am using is at which contains a global mode option, some other cool settings and a pattern cheatsheet to name a few of its features.

I will no provide an early example of using regex in your search operations, we will have demonstrated a number of simple regular expressions which consistently match the 3 words in the first sentence above (Tom won the bingo) which happen to contain 3 characters followed by a space character using repetition.


In the text: Tom won the bingo

Regex: /Tom won the/

Matches: Tom won the

Reason: We have simply requested a literal match of all the characters as indicated between the front-slashes. These front-slashes may not be required in certain Regex input fields or function parameters; something indicated by the supplied documentation for the given tool.

In the text: Tom won the bingo

Regex: /./

Matches: Tom won the bingo

Reason: We have used the wildcard (.) to match everything. Now what we need is to limit the match to 3 letter words

One way to limit the wildcard to 3 characters is to introduce a repetition. Repetitions indicate how many times a certain pattern can or must occur. The repetition syntax we will introduce at this stage will be a number enclosed by curly braces, after the pattern like so:

pattern{1} for 1 repetition
pattern{2} for 2
pattern{3} for 3 repetitions and so on

So to match any 3 character pattern, followed by a space; we declare the pattern as the wildcard repeated 3 times, followed by a space

In the text: Tom won the bingo

Regex: /.{3} /

Matches: Tom won the

Reason: The wildcard will take 3 characters. After the wildcard and its repetition parameter, we have a space; therefore a space is expected after the sequence of 3 characters. We have a match of all of the 3 letter words, including the spaces but not the word bingo, which happens to contain 5 letters.

In some programming languages and systems the syntax will differ. For example with the Visual Studio IDE, search and replace repetition is performed like so:

pattern^1 for 1 repetition
pattern^2 for 2 repetitions
pattern^3 for 3 repetitions

Now continuing with the traditional syntax. /.{3} / matches 3 characters followed by a space. This method is not perfect because the wildcard will also return non word characters and control characters; therefore:

In the text: Tom ### the bingo

Regex: /.{3} /

Matches: Tom ### the

Reason: We have used the wildcard (.) to match everything, including the non word characters, in this instance, the hashes (### ).

In the text: Tom ### the $$$

Regex: /.{3} /

Matches: Tom ### the

Reason: We have used the wildcard (.) to match everything, including the hashes (### ), but not the dollar signs ($$$), because the dollar signs are not followed by a space.

In the text: A B # C D E

Regex: /.{3} /

Matches: A B # C

Reason: We have used the wildcard (.) to match everything, including the spaces and the hash. It did not match D E because this string does not end with a space character. It did match #, followed by space, followed by C, followed by space. This is because the first three characters qualify as any wildcard character, the last character is a literal space character, and had to be a space character to qualify because of the literal space character at the end of our pattern.

Repetitions in Global mode

These examples are based on global matching, which similar to the 'Find All' tool in a text editor, which finds all matches. If this mode where turned off, the following would occur:

In the text: Tom won the bingo

Regex: /./

Matches: Tom

Reason: We have used the wildcard (.) to match everything; but only the first match is returned, the engine will not search for the other matches.

In the text: A B # C D E

Regex: /.{3} /

Matches: A B

Reason: We have used the wildcard (.) to match everything, including the spaces and the hashes. It did not match '# C ' because the search was terminated after the first qualified match, 'A B '

Global expressions tend to be suffixed with a lowercase 'g', written as follows: /expression/g

But for learning purposes, we are omitting the g from our patterns to make them look less cluttered. Global mode tends to be controlled by a checkbox in the Regex enhanced tool or its configuration file.

The following two expressions perform the same action with global mode turned on.

In the text: Object_0001 & Object_0002

Regex: /Object_.{4}/

Matches: Object_0001 Object_0002

Reason: We have requested that there needs to be the string 'Object' with a capital 'O'; and this string must precede an underscore (_), and the underscore must be followed by 4 characters; in this instance the text contains 4 digits. The match will not pick up the ampersand (&) and its adjacent spaces, since these were not a part of the Regex pattern.

We have matched both Object_0001 and Object_0002 because global mode is switched on.

In the text: Object_0001 & Object_0002

Regex: /Object_.{4}/g

Matches: Object_0001 Object_0002

Reason: We have requested all occurrences because of the '/g' at the end. In addition, we have requested that there needs to be the string 'Object' with a capital 'O'; and this string must precede an underscore (_), and the underscore must be followed by 4 characters.

With global mode turned off, only the later example which follows will match both occurrences.

But how would we ensure that such a pattern ends with a series of 4 digits? And how can we limit characters to word characters? These are some of the things we will discuss in the next Regex update.

World Module17/10/14 - 22:00 Terrain

To begin with, I have re-introduced Blitz Terrain into the engine. At first I was going to have the Sports Fiction game set on a world placed on-top of a never-ending terrain. Now, with the new plans; I am aiming to use a sphere shaped world as a reference for the terrain, projecting the content using coordinates on the sphere.

After months of developing my viewport; it seems like I have a problem with its rendering system and the rendering system of Blitz Terrain. I can see various renderings of the terrain overlapping. My first guess is that it is rendering to all cameras. My engine has various needs for these additional cameras. I will now look into rectifying the matter with some of the Blitz terrain commands.

First attempt to fix the problem

My first attempt was to override the sync masking by creating a new engine variable called OverrideSyncMask.

This did not work. I will take a closer look at the rendering pipeline of my engine to see if anything there is causing a conflict.

Graphics Editor17/10/14 - 23:30 Basis for vector drawing tools almost ready

We now have the ability to draw vector shapes. We can render a collection of shapes into an image file, use the shapes in an X-Animations or as user interface elements in X-Layouts or other X-Graphics. To start with I am playing around with simple drawing operations such as the ellipses in the screenshot below. Next I will complete the shape manipulation tool so you can change the position and size of the shapes.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 20th Oct 2014 23:23 Edited at: 22nd Oct 2014 14:37

Zero One Backend 20/10/14 - 18:00 Regex - Regular Expressions - Part Three

In the previous update related to the development of the Regex features which will run more sophisticated searches for text compared to standard text editor search and replace functions. We looked at using repetition of regular expressions. This is a process which enables you to specify the number of times a certain pattern of text needs to occur in a body of text in order for the search procedure to find a match. So if we wanted to search for all of the three letter words in a sentence, we will have no trouble doing so.

We also learned that there is a variation of the Regex syntax accross various platforms and tools. For instance in most programming languages, text editors and the X-Producer; to find three characters using repetition syntax, we can use:


Excluding the forward-slashes if requested.

In the Visual Studio IDE search and replace box, to find three characters we would use:


Most likely and hopefully in the final edition of the X-Producer and the Sports Fiction modding tools, the traditional Regex syntax will be used.


Before introducing X-Producer's Regex search; let us demonstrate how popular regular expressions are. Even from its early Unix origins, you will find that your very Windows operating system has the regular expression facility built into its command library. The command library can be accessed using an advanced console application for Microsoft Windows called Powershell.

Let us demonstrate searching for all 3 character expressions that end with the letter m. We will now use Powershell; which is launched by typing in powershell in your Windows 7 run / Windows 8/8.1 start screen.

On my G:\ drive, I have a file called Test.txt containing the following text: + Code Snippet

To acheive this we will use the following expression without the forward-slashes:


This requests any character, twice, followed by an 'm'. Not the best solution, but simple enough to grasp. Take note that we are not performing a global search, therefore the last occurance 'ham' will not be matched.

What I am demonstrating is the consistency of Regex functions even in a different tool, so that you can be confident you will find uses outside of the X-Producer.

So first, let us open Powershell; we can use the default commandline as shown here, which is what you will see after typing in powershell in your start/run window.

It will not matter what drive you have displayed on your Powershell window. You can run regular expressions regardless of the current directory. (Take care to note that this console supports cmd commands, that is the commands used by the age old Dos inspired windows command prompt; therefore you can use the cd command to select directories)

You now have the option to continue using this default view; or you can load the PowerShell GUI by running the following command: ise.

To make a general recommendation, I am stating that the ISE is useful for learning how to use Powershell and is best if you'd like to use your mouse when working. It will list all the available commands and provides facilities for debugging your scripts.

We will continue to use the ISE. Next we need to populate a variable with our text file's content. Do not worry about the extensive details of the commands I am using, what is important is for you to understand that the following command will load g:\Test.txt, and place its text content into a variable called MyText.

$MyText = [IO.File]::ReadAllText("g:\test.txt")

Note that this text features no Regex, this is a Windows Powershell script to load all of the text from a file into a variable.

Now that the $MyText variable contains the text; let us perform a Regex search for all of the occurances of 2 characters followed by m.

We will need to use the regular expressions command called 'match'. This is a PowerShell commandlet (cmdlet).

$MyText -match '.{2}m'

When we run the expression, the match cmdlet returns true. The pattern was found in the text stored in the $MyText variable. The pattern is enclosed as a string using the single quotes.

The matches found happen to be stored in a global variable called $matches. This is an array containing all of the occurrences found by your last used regular expression call. In this instance it will only contain the first match, we have not performed a global search (See the first Regular Expression update above for more information on global mode)

The result is Sam; which contains two characters followed by an m.


Regular expressions can search for digits; that is the numeric characters. When searching for text you will be able to specify a certain number of digits. There are a number of ways of achieving this which we will look at on this occasion. The first way is to make use of the digit character class.

Character Classes
Character classes in regex tend to be preceded by a back-slash, or enclosed in square brackets. These specify the fundamental criteria of each required character (or excluded character as we will show in future).

Digit Character Class


The frontslash d expression requests one digit.


Three of them would require a 3 digit pattern


We can also use the repetition curly braces to indicate the number of digits in the match; in this instance, a 5 digit number is required.

Digit examples

In the text: Customer Telephone Number 07777-777770

Regex: Number \d\d\d\d\d-\d\d\d\d\d\d

Matches: Number 07777-777770

Reason: We captured 5 digits followed by a dash followed by 6 digits. This need not be the valid telephone number format in your province; what matters is that the search successfully matched the 11 digit number in this body of text. We also requested that the search includes the 'Number ' prefix, demonstrating that other character classes can be used in the same Regex pattern.

In the text: Quantity:12345

Regex: \d{4}

Matches: 1234

Reason: We requested a digit character, using 4 repetitions, returning a 4 digit number. The 5th digit was not included because of the eager nature of the expression engine being satisfied by the pattern (you would not additionally match 2345).

We can demonstrate the previous example in Powershell by using the following syntax:

'Quantity:12345' -match '\d{4}' ; $matches

We have provided a literal string, requested the match of the 4 digit pattern, and used the semi-colon to separate the $matches array output call, which outputs the result as shown in the following screenshot; because calling a variable outputs its value.

Range of digits
We can also use square brackets to demonstrate what range of digits we want. The range is separated by a dash, from the minimum to a maximum digit.

In the text: 1234-5678

Regex: [1-4]

Matches: Number 1234

Reason: The first 4 numbers are the only numbers which contain a digit in the range of 1 to 4 (including 1s and 4s). In a non-global search the result would be '1' because only the first result is returned.

But what if we wanted to match either of the following numbers:


Both contain the numbers 1 to 8, but the first one is delimited with dashes. I will demonstrate in the next update.

Graphics Editor 20/10/14 - 20:00 Early Workings of Vector Shape Creation

Today I have established a basic way to draw shapes on to an X-Graphic. This is to be developed into the drawing procedure in most visual editors in the X-Producer, 2D or 3D, including the layout and film editors. It will take some time to get this aligned with the end goal which is to supply the means for creating or importing data-rich vector graphics to produce game content or designs for multimedia applications.

Please forgive me for Blender's issue interpreting the drawing 'mouse cursor' in the following video which looks box

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 21st Oct 2014 02:22
nice write up on regex, they can be confusing and frustrating sometimes the more complicated a search being performed, but they are definitely worth it.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 22nd Oct 2014 15:57 Edited at: 2nd Nov 2014 22:17

Zero One Backend 22/10/14 - 12:00 Regex - Regular Expressions - Part Four

Quote: "Ortu

nice write up on regex, they can be confusing and frustrating sometimes the more complicated a search being performed, but they are definitely worth it."

Thanks. Indeed regex expressions are very confusing, particularly when poorly written, or when overused (where a complimentary programming function or text editing tool would have done the job more easily)

For those of you who are struggling so far, take note that using Regex on a daily basis helps limit confusion. As Ortu says, it is definitely worth it; you will find yourself performing things you would never have done before. Again, is a great place to start.

Following on from the previous update; we can now search using the wildcard character (.) and the digit pattern \d. The digit pattern is actually a series of permitted characters defined by something known as a character class.

Character Classes

With a character class, you tell the regex engine to match only one out of a selection characters. You perform this by placing the permitted characters between square brackets. Like so:


If you want to match an a or a b or a c, we enclose these characters in a set of square brackets, in any order.

Character classes, also known as character sets, match a single character. This means that the text being searched is test against the character class for each character; not words with the use of this pattern.

You can use character classes to solve a number of common search problems. Let us suppose you have articles for your video game that you wish to upload to a database. What if the text contains 'gray' with an a instead of 'grey' with an e? How will you return any results if your players search for all gray items using the a instead of the e?

By using a character class with an a and e, we can detect both the occurrences of gray with an a, and the occurrences of grey with an e.

In the text: Would you like to continue Y

Regex: continue [YN]

Matches: Y

Reason: Only a Y for yes, or N for no was requested by the pattern for last character of the pattern

In the text: Option 5

Regex: [12345]

Matches: 5

Reason: Only a digit from one to five could be matched; so a 5 was found in the text

In the text: Ham Sam Lam Lima

Regex: [am]{2}

Matches: am am am ma

Reason: There are 4 occurances of two characters which happen to contain an a or m. Three of the matches where am from Ham, Sam and Lam. One of the matches was ma from Lima.

In the text: Green Gandalf

Regex: G[ra]

Matches: Gr Ga

Reason: Gr was found as the first match of G, followed by r or a; Ga was found as the second match of G, followed by r or a.

So let us examine one other issue with searching for text. What if two or more words have the same or similar meaning?


Imagine for a moment that all of your users needed to search for all articles containing the word color. The only search term that could work is the word 'color'. What about the UK English spelling including the u? (colour)

We can solve this problem by performing a search for color OR colour (with or without the u)

Alternation uses the same principle as character classes, but instead of having different characters, you can have different strings and additional regex patterns. You can use alternation to select a set of possible regular expressions. Alternations are set using the pipe symbol |

You can search for the literal text door or entrance by simply separate both options with a vertical bar or pipe symbol: door|entrance.

In the text: Would you like me to purchase bratwursts, burgers or frankfurters

Regex: bratwurst|frankfurter

Matches: bratwurst frankfurter

Reason: The regex search is looking for the pattern bratwurst and the pattern frankfurter. If either are found, they are returned. If we added |burger to the pattern, then burger would have also been returned.

In the text: CurrentServer=

Regex: localhost|127\.0\.0\.1


Reason: In this search we are interested in finding out whether the player is running local server. This tends to be the localhost at the IP address of These URLs represent the same location, therefore we have a successful match for, as would have been the case with localhost in the text; but there is something else; why did we have to use the backslashes in the pattern before each dot?

Escaping Metacharacters
Because the dots are a metacharacter, we needed to tell the regex engine that the metacharacter after the backslash is to be treated as a non-metacharacter; and have the character included in the literal search.

The backslash symbol enables you to prevent the following from happening:

In the text: CurrentServer=127?0?0?1

Regex: localhost|

Matches: 127?0?0?1

Reason: We have matched an invalid server name. The dots have been treated as wildcard characters because of what they represent. They can only be represented as dots if escaped using the frontslash.

In the text: [MySettings]LaunchCommands=\d "c:\"

Regex: \d


Reason: The regex engine expects a digit because of the character class (\d). We need to escape the frontslash so that it is treated like the d, a literal aspect of the pattern. \\d woould have worked.

So what's next? In the next update will cover some more pracitical applications of you have learned.

Code Editor 22/10/14 - 11:00 Text Formatting Code

One of the many uses of the code editor will be to write code for displaying formatted text for HTML or the engine's X_Documents. I have just added the buttons for formatting the selected text. The buttons will be displayed with no icons for now and will perform the formatting procedure of the selected programming or scripting language.

In the following illustrations I have demonstrated forum text formatting. (Again I am experiencing cursor display problems because of Blender's video loader and my currently available video format)

The video also shows that you can set a default image path for linking to images.

Years of Service
User Offline
Joined: 12th Mar 2009
Posted: 31st Oct 2014 01:47
Just to let you know. I've been following this project pretty religiously seeing as my own project is very similar. You definitely help me push my self each day knowing I have someone to compete with haha. The designs are no where near identical, but they are very similar in aspects. When I get to the stage of being able to display my progress. I hope my posts help you as much as yours have helped me. You've presented things I originally wouldn't have considered myself which obviously leads to more creative thoughts. Keep up the fantastic work and progress. I'm looking forward to Sports Fiction.
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 2nd Nov 2014 22:15 Edited at: 2nd Nov 2014 22:18

Quote: "pictionaryjr:

I've been following this project pretty religiously seeing as my own project is very similar"

I am glad that you find it useful.

Quote: "pictionaryjr:

You definitely help me push my self each day knowing I have someone to compete with haha"

When I see other people, getting on with it, it makes you feel you ought to do the same.

I am also motivated by my goal of wanting to play the game I see in my mind.

Quote: "pictionaryjr:

When I get to the stage of being able to display my progress. I hope my posts help you as much as yours have helped me."

I look forward to seeing your work. I do get some ideas from other WIPs in and outside of TGC. Ideas are everywhere you look.

I can understand people who wait until their the project looks good before posting; but my personal decision was to post as early as possible, with just 2,000 lines of code, a prototype character model with a couple of screenshots and diagrams.

I need as much development progress and documentation I can put out there as early as possible because it takes a long long time to attract a community and getting them to know what is going to happen...

Although some people do not read and have plenty to say, many of your close observers can be the ones who do not post a single word on your thread, but are there reading it everyday. They are more interested in what you have to write and what you are going to do than in how great a couple of early screenshots look.

I know you will probably wait a few more months before posting your thread, I am just reflecting my personal taste of starting an early WIP so you can be motivated to keep it fresh. But at first my updates where only about once every 3 months lol; it took some time to realise that the WIP has an impact on your performance.

We'll chat later

Zero One 02/10/14 - 8:00 Code refactoring and node improvement phase 1

I have been preparing to take on the next exciting development phase related to game flow nodes. Over the past week I have been working on refactoring the code and increasing the use of node functions, introducing the node system as a replacement for most of my old hard coded systems. I want this new version of the system to establish a higher level of modularity and portability for my software.

How this benefits you as a Sports Fiction player
Increased modularity will mean more sports, and more sports which are easier to make interesting and to maintain. When arranging your own sports parties or official events you will have a greater selection of activities for you and your guests or opponents and team members.

You will also receive more frequent updates because these will require less work; the new system has already halved to complexity of recompiling the viewport.

Increased portability will make it more likely for players using different devices to interact in the same sport. Providing the sport is supported, one of your friends who uses an android device can play with you while you play on your Windows PC.

How this benefits you as an app developer
Increased modularity will make it easier to change the structure of your X-Producer generated code imported into your DBPro/AGK/dotNet or other application language.

Increased portability will mean that most of the engine code is defined at runtime, reducing the amount of code unsupported on various hardware such as mobile phones by replacing their unsupported nodes with custom source code.

How this benefits you as a Sports Fiction map developer
Increased modularity will make it possible for your map files to tailor the structure of the game to you needs; rather than having a rigid set of hard coded map features which can make you maps less distinguished.

Increased portability will make it possible for your map files to work on as many devices Sports Fiction or its streamlined versions will work on.

How this benefits you as a Sports Fiction sports architect
Increased modularity will make it easier to make new sports, deriving the complexities of existing sports rules and objectives by simply adding the interesting nodes into your new sport.

Increased portability will make it more likely for your sport to work on as many devices Sports Fiction or its streamlined versions will work on.


The benefits of this new node refactoring work are already being seen, the DX9 viewport executable has dropped from 40,000 lines to about 15,000 lines of code; making it more stable and quicker to compile and deploy. It may also mean requiring less RAM and CPU usage in the long run, since the smartness of the system increases with ease of development. This is only one of the first of many benefits soon to be seen.

The HexSphere will be derived from the X-World element created in the X-Producer. The X-World will be composed of any 3D object, be it a sphere, island, asteroid, worm hole or rabit hole. The X-World has no interest in what shape or form it is; it is only concerned with what it is made of and what X-Scenes it contains, and where the scenes are located.

The HexSphere class assignes a sphere made out of hexagons (and a few pentagons) as the world object. Each HexagonGameMap will be a location on this HexSphere, and the map content will be located on further hexagons within.

The X-Producer's world editor will be able to edit these hexagon based spheres.

Sports Fiction 02/10/14 - 8:30 Sports Fiction Hextree World - Phase 1

The hexagon shape is being used to represent a building block of the game world in the Sports Fiction overview screen. This is no sandbox cube building block or Lego block, but rather it is a gaming area in 3D space. The overview screen is going to be used by certain players in an interesting secret game feature I will reveal close to release. For now, let us consider the structure of the overview screen; a 2D grid of hexagons, with the content of the world place upon them to represent their 3D location.

HexPanel, HexGridControl, and HexagonGameMap controls
Three interface controls where created earlier in the week, the HexPanel which is a base hexagon tile control class which arranges the content at certain coordinates on the hexagons. It does not matter what the content is, the HexPanel can contain any game content with a 2D or 3D location.

The HexGridControl handles the events for each tile in its HexPanel instance. This control adds low level functionality to the HexPanel, whilst the HexPanel just handles the display of its content.

The HexagonGameMap is what you will see in the game, a map made out of hexagon tiles which are taken from the HexGridControl and implement with gaming functions. It is not until the HexagonGameMap class is spawned that any Sports Fiction campaign game can occur; although the custom games can occur without this campaign feature; in the campaign you are either in a world, or in outer space. In a custom game you will be put straight into your chosen sport's map.

HexTree Algorithm

The Sports Fiction HexTree performs something similar to what octree algorithms do, which is to partition space; but rather than splitting 3D space into 8 sections, and further splitting these inner sections into 8 more; the hextree will split 3D space into 6 sections, and these will get split into 6 sections again when you zoom into the world.

I mentioned where I was going with this game world in one of the first few posts over a year ago here.

Quote: "The engine will transition in realtime between layers, from globe to object; there is no loading screen planned"

These layers transition from one hextree level to another. At the highest level you are out of the HexSphere and in outer space, which is to be formed of a different hex-tree system to that of plants. At the next level you will have the HexShere, followed by the HexagonGameMap followed by the 3rd person / 1st person view of the sport or other scene.

This transition will take some time to get right, but it is important for a number of secret game features to be implemented.

In phase one of this part of the development cycle, we have the player's overview icon class able to locate itself somewhere on the hexagon tiles, and move from tile to tile in overview mode.

We will introduce further gaming functionality in the next Sports Fiction Hextree World update, along with node, query and script functions.

Years of Service
User Offline
Joined: 12th Mar 2009
Posted: 7th Nov 2014 07:25
I plan to have it to a displayable stage by the end of January. The community on these forums will be pretty happy with what I release as it should benefit all of us pretty spectacularly. I'm excited to see your game as well. It sounds very interesting and with how much work you've put into it. I wouldn't expect anything less
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 8th Nov 2014 00:39 Edited at: 8th Nov 2014 00:51

Quote: "pictionaryjr:

I plan to have it to a displayable stage by the end of January. The community on these forums will be pretty happy with what I release as it should benefit all of us pretty spectacularly."

Well that sounds like good news for the community; something spectacular to look forward to in 2015. I look forward to seeing your work in action.

Zero One 07/10/14 - 21:00 Regular Expressions - Part Five

Now that you have been introduced to a number of basic regular expressions, it is time to prepare for more advanced string searches.

Matching words and identifiers

It was explained that in the regex pattern /.*/, the dot will match any character in a string, and the asterisk (*) will repeat this match pattern zero or more times depending on the amount of characters left in the target string, which may or may not be terminated at the end of the line of text, given the Regex system and options. But what if we wanted to only match letters of the alphabet, and numbers?

Well we have a special character class for returning letters of the alphabet and numbers; you can use \w to return all word characters in a body of text. This is a useful class for parsing code because this class will also qualify underscore characters, which are valid identifier characters in most programming languages.

In the text: Object120

Regex: \w

Matches: Object (or O as the first match)

Reason: The word 'Object' is the only part of the string which uses word characters. If set to match one character at a time; the Regex function will return each subsequent character fro 0 until t.

In the text: +=-/

Regex: \w


Reason: No word characters are used

In the text: +___+

Regex: \w

Matches: ___

Reason: The underscore is a valid word character.

In the text: Name_Of_Character=Simon Smith

Regex: =[\w ]*

Matches: =Simon Smith

Reason: The Regex function will find the first occurrence of the equals character. It is only from this point where a valid match can be obtained. Now the Regex pattern matches any word character or space because the word character class and a space have been enclosed in square brackets followed by the zero or many quantifier (*).

In the text: OPEN "EasterEgg.xml"

Regex: "[\w\.]*"

Matches: "EasterEgg.xml"

Reason: The Regex function will first look a speech mark; followed by zero or more word characters, dots (escaped using the escaped character \); this result must be terminated by a speech mark, as indicated by the speech mark at the end of the Regex pattern.

Identifier class - \i

There is an identifier class in Regex for returning words which are not prefixed by a digit. This is more suitable for returning identifiers for XML or variable names since such entities could not be named with preceding digits. The support for this class is not as wide as for the word character class; but it is good to know that the identifier class exists.


The word character class is useful for matching names, keywords and identifiers for scripts or your very own datafiles. You may encounter circumstances in the future where you will need to create your own datafiles for your sports, maps, entities or X-Producer plugins. To use Regex for these files, where XML may not be available or desirable, you have a number of other cool Regex functions for enhancing such work. The functions useful for parsing files are going to be discussed in the next section of this update.

Capture and replace

One of the primary uses of regular expressions is to replace text. You can easily replace strings within strings without the need for regular expressions, but Regex offers functionality not found in common search and replace commands. This functionality is based on capturing the results of the search, and using them to generate something useful, using replacement patterns.


Replacement patterns perform for replacement text, what search patterns perform for searched text; they supply the rules for the replacement operation. Before going into further detail about replacement patterns, we will provide a sneak preview of the kind of queries you will be able to perform.

Search and replace example

In this example we will search for the name of the player in the following string:


We will need to match what lies after the equals sign, but in addition to that; we also need to make sure that what precedes the equals sign, declares that the token which follows is the value name parameter.

We could match the value of this expression using /Name=[\w*]/, but this will include the Name= string. That we do not want. To omit part of the expression from the array of entries for replacement; we could use one of many available Regex solutions; in this instance we will use capturing groups and non-capturing groups.

Capturing Groups

Capturing groups contain matched strings which we are interested in reusing after the search is performed. We capture parts of the results using parenthesis enclosed patterns.

With the pattern: (1234)\w*, we can capture the 1234 in the text '123456789'. All of the characters outside of the capture group are not kept for additional operations. So if we performed a replacement operation on this captured string, we could replace the 1234 with something.

There is a problem with this first search pattern; the text outside of the capturing group will be found by the search operation and will be kept as is in any result where such a match is required. This is because the part outside of the group is maintained as a valid search match. The 56789 pattern matches the text, and preserves it. This problem becomes more clear to see in action; for this reason a short video has been posted further down the page.

If we did not want the 56789 string to be preserved in the result; but required it to be found by the search operation, we can use a non-capturing group.

Non-Capturing Groups

Non-capturing groups allow you to search for something, without replacing it. You specify that a certain pattern must exist for the required operation to commence, but you omit parts of the result. This works by filtering non-capturing groups from any collection of captured groups, so you can later refer back to the captured groups, without any non-capturing groups being returned.

You declare non-capturing groups using + Code Snippet followed by the required pattern, followed by ). - I will have to enclose the syntax in code tags until I figure out how to escape such patterns on this forum.

With the pattern: + Code Snippet, we search for 123456789, but only include the 1234 for reference. Next we use backreferences to obtain the result of the search.


In most Regex tools, the backslash is suffixed with the index of the captured group to return its match in a replace operation. In Microsoft dotNET and the X-Producer, it is the dollar sign that is suffixed with the index. Depending on what hardware Sports Fiction is running on, in most cases it should work with the dollar sign.

The best way to demonstrate back-references are with examples of parts of Regex searches being replaced with Regex replacements.

In the text: Open "EasterEgg.xml"

Search Pattern: + Code Snippet

Matches: Open "EasterEgg.xml"

Where the replacement pattern is: $1

The result is: EasterEgg.xml

Reason: First the word Open followed by a space, followed by a double speech mark is requested. Without the ?: symbol in the parenthesis, this would have been assigned to back reference 1. The second group is actually the captured group at index 1, because it does not contain a non-capturing pattern + Code Snippet. The final group is non-capturing, but must exist in the source string for a successful match.

It is good to note that $0 will return the entire search, index zero is used to store a global group.

Where the replacement pattern is: $0

The result is: Open "EasterEgg.xml"

In the text: PRINT "Hello World"

Search Pattern: + Code Snippet

Matches: Open "EasterEgg.xml"

Where the replacement pattern is: $1

The result is: Hello World

Reason: Only the one group is captured, the group without the non-capturing group symbol + Code Snippet

Here is a video demonstration of another capturing example in the X-Producer using the Microsoft .Net syntax.

This and similar Regex expressions will prove useful when constructing data-driven user-controls, custom X-Producer tools or SF Sports.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 16th Nov 2014 21:58 Edited at: 19th Nov 2014 21:24

Update 16/11/14

On a busy occasion filled with great programmatic challenge and rectification; to my amazement it has been a whole 9 days since the last update. The updates in this development blog tend to be frequent during such times of heavy development activity; but on this occasion my focus has been more on the code than the blog. This evening I will spend some time keeping you up to date with what is going on and what lies ahead.

To recap on the past few weeks; we have been focusing on a number of current development tasks.

The Sports Fiction universe generator using a development model based on the HexTree algorithm which is like a path of perception leading from one hexagon to another, revealing space and organic or manufactured ingame-geometry on planets, moons or asteroids as you advance along your in your travels in the game; each hexagon representing not what shape they are, but what content is within them; whether arrayed on the surface of a planet or used to represent segments of outerspace.

The HexagonGameMap which is what advanced Sports Fiction players will use to implement their strategic plans for championing the array of my sports and the sports contributed by some of you one day. This map will also show you the demographics which highlight important attributes about the population including team fans, opposing fans and the characters of the story. It is here where all non-sporting or sporting events can be observed on a grand scale (without overloading your CPU)

Derivatives of the HexagonGameMap which includes the planets and the ingame-satellite controlled mapping systems for the characters of the controller-class; a class amongst others which will revealed in a concrete demonstration of the gameplay where what I am talking about will make more sense when you see the characters playing their interdependent roles in the campaign or professional game modes; which are seperate from the other game modes incepted for the delivery of a much more casual variation of good fun!

Regular expressions for text searching in the X-Producer and Sports Fiction. Allowing you to perform smart search and replace operations on any text based game data or content for your general needs. I will continue to introduce this useful technology in a few updates.

Activity over the last 9 days

Work has gone underway on the audio module, world terrain classes, X-Reason predicates, hextree world generation and Regex. I will outline the work on the audio module in this update.

Audio Module 16/11/14 - 19:00 Audio Classes

I am planning to use the FMOD studio audio technology in the PC versions of SF, but to start off I have been developing a streamlined audio process using DarkBASIC and the ZeroOne runtime engine. I want all audio systems for all hardware to follow a similar model when producing sound from your ingame-surroundings; ensuring that redevelopment for various platforms takes up the lowest amount of time, and ensuring that SF sounds like SF what ever machine you play it on.

So far this is how the digital audio client is structured:

Sound Engine Class

The sound engine is set in place as a client side service-like engine which processes the sound for all ZeroOne based applications running on a PC. It will observe what is taking place in the SF-universe, and output the noises and soundtracks positioned within the universe via the appropriate stereo or 5.1 audio channel, given your audio system. There is likely to be only one active sound processor instance on any given ZeroOne installation such as for running SF and XProd at the same time.

I would like to have this processor run a separate CPU thread for Sports Fiction on as many platforms as I can make it work with. It seems the complexity of the ZeroOne viewport will likely mean that there will be little room for an advanced audio system programmed in DarkBASIC when there are to be thousands of viewport rendering entities processed on the same thread in the same application. I have plans for the audio experience which will need its own engine separate from my rendering system, so that each do not slow each other down.

I do not think that the DarkBASIC compiler will be able to compile the two systems successfully into one executable; not at least until the viewport is heavily refactored and optimized; and even then I would not want to limit your visual and audio experience to 2GB of RAM if you decide to maximize the implementation of your gaming hardware you paid good money for.

If and When FMOD is introduced, it will likely be linked with this audio processor; or may supersede it whilst maintaining a similar audio definition and playback model.

The main procedural call the sound engine makes is to a function called UpdateSoundScapes() which updates the central components of a live audio session.

Soundscape Class

All elements in the game-universe which produce sound will all do so via a soundscape instance. All game related sound will belong within the domain of a soundscape. Soundscapes are the container for an array of sounds occurring in an environment.

In the soundscape loop we have a root if statement declared as follows: If SoundScapes(s).IsEnabled : fVol# = SoundScapes(s).Volume# ... etc, etc. Here we have checked to see if the sound scape is enabled, thus containing sounds which the level/game designer wants you to hear at the appointed time. The soundscape also has a volume property which affects the volume of all sounds within itself.

All soundscapes are defined as either a class or instance. Soundscape instances use their given soundscape class as a template for controlling the audio they contain. This means more than one instance of a soundscape class can exist with unique concurring events, and can contain the same or different sound elements governed by similar rules.

There will be a little refactoring to perform with the instances so that they handle all of their own sounds instead of having a 'superclass' which does all of the dirty work, which is not as modular a processor as I want it to be

Each update call to the soundscape element runs an update on its attached sound elements which include:

* Soundmarks
* Sound Environments
* Soundtracks
* Sound Signals
* Echos

Each of these sound elements will be discussed in the next update; along with some more information on the world generator's terrain characteristics algorithm, predicates, SQL and Regex.

Derek Darkly
Years of Service
User Offline
Joined: 22nd Sep 2011
Location: Whats Our Vector, Victor?
Posted: 17th Nov 2014 03:47 Edited at: 17th Nov 2014 03:50
Wow! So how far along are you, approximately? Is the entire vision itself in your head, or are there facets yet to be thought of?

I'm guessing you're either at 15% conservatively, or there is no end, ever, and that this project will grow and mutate, achieving a sinister consciousness and finally terminating the human race!

Personally, I'm going to be disappointed if it doesn't include the ability to make genetic creations from actual DNA models, give us access to all of NASA's internal data, as well as the cure for cancer, the answer to world peace and finally what Eddie Vedder was saying in that horrible song "Yellow Ledbetter"

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 23rd Nov 2014 23:46 Edited at: 23rd Nov 2014 23:51

Update 23/11/14

It has been a bit hectic at work this week, but now for some development. I am soon to post the latest update, but first in answer to your questions Derek.

Quote: "Derek Darkly:

Wow! So how far along are you, approximately? Is the entire vision itself in your head, or are there facets yet to be thought of?"

I do have most of the plan in my game document, if not in my notes and the document for the X-Producer; plus another document which contains all of my planned tests, prototypes, techniques, game ideas, special effect ideas and database design. But even with all of this documentation, most of the main goals are in my head. You just cannot compare visualising people and their friends and families enjoying various experiences one is purposing to make happen.

There is one aspect of the Sports Fiction I have left wide open; the storyline. I wanted to do more research and training before any story writing.

It seems that at this point, the first playable unreleased version will take about 4 to 5 more months to make, and will be very simple and will run internally because I need to perform thorough tests before I can have any solid software installed on any end user machine.

X-Producer is going to get an Open GL CAD based component which I will invest in at some early point in 2015. Until then, most of what is going to happen over the next 4 months is programming the world generator and creating lots of 3D templates and place holders ready for the gameplay.

Quote: "Derek Darkly:
I'm guessing you're either at 15% conservatively, or there is no end, ever, and that this project will grow and mutate, achieving a sinister consciousness and finally terminating the human race!

I think about 50% or so; most of the early work has been related to building an infrastructure and coming up with ideas. The rest of the work will involve using the infrastructure and the ideas.

When I first started, I created a prototype soccer engine and driving engine but quickly learned that without an infrastructure I would end up building a completely different game to what is planned; hence the X-Producer and a number of systems have been built to fulfil the requirements.

Most of my work from this point onward will be more visual and dynamic because all of the 'boring' stuff is almost done. I've just had my starters, now time for the main course.

Quote: "Derek Darkly:
Personally, I'm going to be disappointed if it doesn't include the ability to make genetic creations from actual DNA models, give us access to all of NASA's internal data, as well as the cure for cancer, the answer to world peace and finally what Eddie Vedder was saying in that horrible song "Yellow Ledbetter"

Not to worry, I have all of my hamsters working on it!

I will post the next update tomorrow; I am tad bit tired tonight.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 29th Nov 2014 03:06 Edited at: 29th Nov 2014 03:51
Thank you for taking the time to check out my progress thus far.

Zero One Backend 28/11/14 - 18:00 Regular Expressions - Practical Examples

To demonstrate a practical example of how you can apply what you have learned about Regular Expressions. Consider the following real case scenario.

When re-implenting Diggsey's TopGUI program in my 3D user interface system, I needed to override a number of default colour-schemes on a frequent basis. A colour scheme is supplied by a user defined function which TopGUI uses to assign you required colour palette to its system. Here is what I started out with in the function:

THEME_SHADOW_END = 0x00000000
THEME_GRIP_DARK = 0x80000000

I wanted to extract my colour profile from the user's settings file; I will want people to be able to change the colours when modding the Sports Fiction game, or when making dynamic content with the X-Producer. So, having literal values set in stone would not fulfil my user's needs. To rectify this, I created a function for loading colour values from an INI file.

To make use of the function, all I needed to do is write the following, using the first line as the subject for the example: THEME_ACTIVE_LIGHT = UISetting( group, entry, defaultColour )

All well and good, but what about all of the other lines? Do I really want to go in there and write out each and refactor each and every line when ever I need to do so on this occasion and in the future? Nope; because with Regex we can write a small series of patterns which can do the job for me.

The following video demonstrates how I got it done; using the X-Producer's Regex window currently under development.

The types of regular expressions used are capturing groups, non-capturing groups, word character classes and backreferences; all explained further up this webpage.

An additional video has been shown below which demonstrates changing undefined variables to locally defined variables

Zero One Backend 23/11/14 - 11:00 Regular Expressions - Lookarounds

Lookarounds are assertions which look either ahead of a match for a certain suffix, or behind for a certain prefix. Because the lookaround functions are assertions, they return a boolean value; true or false, rather than returning a string. If the result is true, the match is successful, if they return false, the match will not be success. The overal search operation will return an empty result.


Lookaheads ensure that a search matches something which contains a certain suffix. Suffixes are characters which follows a character or a series of characters. Lookaheads can also ensure that a search matches something which is not followed by something.

In the text: Wood.jpg

.jpg could be considered as the suffix used to determine the file format specified by a filename.

Positive Lookaheads

Positive lookahead assets that matched text is followed by a required pattern.

Positive lookaheads are defined using ?= character combination within a set of parenthesis. The search pattern within the parenthesis after the equals sign must exist in the text being searched, after the position of the lookahead assertion.

The following positive lookahread assertion will find the text which is followed by my surname: .*(?=Tate). The pattern starts off with a dot which indicates any character, an asterisk which indicates any amount of characters, then the lookahead assertion indicating that the match is only valid if my surname follows it. Note that this match will not return my surname, only the matches of Regex patterns outside of assertions are returned.

In the text: The last word of first sentence is cheese. The last word of the second sentence is ham.

The Regex pattern: \w+(?=.)

Returns: cheese ( and then ham)

Reason: This regular expression finds the last word of each sentence using a positive lookahead assertion that a word is followed by a full-stop; a period. The \w class searches for word characters; the + sign indicates that at least one or more should be found. The period character is enclosed in a positive lookahead assertion.

Sports Fiction 28/11/14 - 22:00 2D and 3D UI - Early Development

In the latest update I will be showing some of the progress of Sports Fiction's user interface. In this update I will be taking you through my design concepts so far, which will lead to a more well arranged system in the more exciting development phases to come.

This humble beginnings of the game's user interface development will be of interest to people who may be interested in developing or modding the sports and who are professional gamers interested in the future of configurable user interfaces and how it can improve your successes in the future game. For everyone else things may seem a little confusing at first, but will make more sense when the user interface is put to real use.

Sports Fiction is a game under development which is based on sports in the future. Within the game you can take control over a character's sporting career in a campaign, take part in online tournaments, or have fun playing all of the available sports in the game, inviting along your friends if you want to have fun together.
Before developing the bulk of the 3D game content including the sports, the development thus far has been focused on implementing user interface systems capable of making the game a reality.

The user interface is a central part of any software such as a video game which represents all the ways in which you the user can interact with your computer or mobile device and the components of the software.
The user experience is a major concern for the usability, pleasure and satisfaction you gain from your interactions with the game. For professional gaming it also means designing an experience as best as I can, which maximizes your potential to win.

In the early stages of interactive development we will look at the UI (user interface). As the interface matures and functions improve, we will focus more on UX (user experience) design.
User Interface Progress

Designing a user interface system for a video game differs from work related software in the fact that games tend to feature a storytelling, providing user interaction with diegetic controls within the game world, as well as the non-diegetic controls which live on windows and panels on screen space. The diegesis is where all of the elements and events occur which affect or can be manipulated by characters within the game; these elements can also include sound and 3D props.

Some video games feature many diegetic user interface elements such as hand drawn maps and computer control panels which can immerse the player into the game world. MMORPGs tend to feature a lot of non-diegetic controls because such games require rapid interaction, micro-management and analysis of distant surroundings, often all occurring without delay on screen.

Sports Fiction presents an interesting game model which is required to both immerse the player into the game world, and offer the ability to control and monitor detailed gaming elements with little delay.


No two players will have the exact same strategies when advancing through their campaign careers or through online tournaments. For this reason it is likely that these players will have configured their user interface for completely different needs and for their screen resolutions. A player riding a hover-board across a country landscape is going to require a much more screen efficient user interface than a player who is designing a team formation for an up and coming game of soccer on an advanced obstacle field.
The user interface system has been designed to be highly customizable. At this early phase in development, the user interface is so customizable, it could pass as the user interface for a computer operating system. You can change the size, design and colour of the user interface, the shortcut keys and gamepad buttons, so on and so forth.

With such a vast level of customizability, comes complexity of development; which is why it has taken such a long long time to get to where we are today; and there is a long way to go. But this complexity brings game capabilities which are worth the wait.

3rd Dimension

It is understood that the human brain's memory is composed of experiences connected from other experiences within a neural network. This web-like network of memories resemble elements on a map. The more significant memories could be compared to outstanding landmarks, while the insignificant memories could be compared to common locations on the map. As humans we find it easy to remember journeys from one place to another, and we experience these journeys in 3D.

To make good use of your minds ability to remember journeys in 3D space, to make it easier for you to remember how to access parts of the user interface which is significant to you; Sports Fiction will provide 3D user interface functionality as a complement for the 2D user interface, making for a complete system; great for putting more of the content into the game world, and for giving you more options for your personal user interface configurations. You will be able to put your frequently used 3D windows where ever you want to put them; so as long as they are the 3D windows! 2D windows can also be rotated, but do not exist in 3D space.

Guiding the player

It is also important to present the gaming experience with as little difficulty as possible; it is not desired to make it more difficult for the player to get started than it needs to be. This is related to user experience (UX) which is covered in more detail in part two.

For a moment let us consider a few illustrations of the user experience of learning how to play. Consider for a moment how ridiculous it would be to have to create a tutorial on how to play Super Mario Bros

In reality the level design and interactivity tells the story which even a child can understand.

On the other hand, it would not feel like much of a game if you had to lead a civilization and control its government, military and culture without being presented with some kind of tutorial or guide.

In reality a set of tutorials and hints are provided in all of the Civilization games to make the learning process a pleasure rather than a pain.

Attention to detail

It is said that a good user interface will help you get the task done effectively; without distracting you from the important details; while bombarding you with unimportant information. Whilst the user interface system will not always be able to judge what is most crucial for your competitive needs at every given moment; it will supply customizable controls and filters to ensure that what is important for you, can be given more prominence.

Much of the final user interface will feature transitional animation and aesthetic design elements set in place to decorate the screens; these kind of unnecessary UI features can be switched off if required.
Some animated features will be used to build tension, others are to represent cool downs or action delays. When designing one of the text controls transitional animations; I implemented various options for how such text is displayed, be it instant or progressive.

Each transition builds up a different kind of dramatic tension as you wait to see what text is going to appear.
This functionality will be supplied in some of the list boxes, which will either delay the view of a climatic text event, or will reveal the important text first before showing the less important text.
In this early working, three different list boxes contain different versions of the same transition. You will interpret certain options before others.

In some of the list boxes developed so far, the selected element is the most animated; in other cases the unselected elements are more animated; it is all about elements are significant in the given context.

Types of controls

There are a number of different types of controls in Sports Fiction, and the X-Producer. We will introduce some of the general controls and the variety of forms they come in; but there are many more under development and yet to be implemented.

It will be useful to understand how they work if you are planning to configure your interface for competitive play, or for developing your own sports.


A window is the main container for most of the non-diegetic user controls in Sports Fiction, and contains most of the X-Producer's floating controls. As is the case on the Windows operating system; most windows can be dragged around, resized, minimized and maximized. Sports Fiction's 3D windows can currently be moved around along a flat plane; but in future there may be a need to be able to freely drag the 3D window around where ever you need it to go within a game level.
Windows tend to feature a heading at the top of a client area. The client area contains the content of the window, which moves around with it as you drag the heading. This is nothing new to most people, but it is not always available in video games, but is available in Sports Fiction.
Sports Fiction currently features the following window classes.

Fixed Windows

Fixed windows cannot be moved around by the user, and cannot be resized. These contain a size and location arranged by the system; and are useful for constructing parts of the interface which need to be consistent. Sometimes these windows can be hidden, minimized and restored to their usual size.

Draggable Windows

Draggable windows, as their name implies, can be dragged around. In the case of Sports Fiction, they can be dragged in 3D when they are 3D in form.

Resizable Windows

Resizable windows, as their name implies, can be resized by the user. In the case of Sports Fiction, they can be resized in 3D when they are 3D in form.

Diegetic 3D Windows

Diegetic windows represent the user interfaces which exist in the game universe. They may or may not resemble the usual Sports Fiction themed interface design; and will sometimes be operated by characters in the game universe.


Panels are containers for controls which need to move around with the panel or be arranged by the panel. Panels are quite simple in design, but are very useful. There are a number of different types of panels used in the game; each implementing an arrangement system taken from Microsoft dotNet, my user interface system or Diggsey's TopGUI system for DarkBASIC.

Base Panels

Base panels tend to simply be called panels; their purpose of containing other panels and controls is inherited by more complex panel classes to be shown. In some platforms there will exist a Canvas control, which is similar in that it does not arrange its content, its content has a set coordinate within the panel.

Diegetic 3D panels

3D panels will likely represent interactive features of digital props in the sports fiction universe. In some cases you can use your mouse, keyboard or gamepad to interact with the controls on these controls.


Grids are a common panel class which contain a number of rows and columns, and in some cases levels. Each element inside of a grid is set at a specific row and column, and can span multiple rows and columns. This panel will be useful for inventories and micromanagement controls.


StackPanels are one of the most common panel classes which arrange their content in some way. Stackpanels will stack their content from top to bottom or bottom to top in vertical orientation, or from left to right or right to left in horizontal orientation. These work similar to TopGUI flow layout controls


DockPanels are a panel class which docks their content either to the left, top, right or bottom of the dockpanel, or on the left, top, right or bottom edge of each other.


WrapPanels will arrange their content much like the text on a document. Starting from left to right, or from right to left, each element is to be arranged in sequential order until the end of the line, and then a new line is produced.


Views are a controls which contain data, and displays the data using some kind of data template and display filtering.


Treeviews arrange their content according to their relationships. Parents contain children, and children can contain siblings, or additional children.


ListViews (or listboxes) reveal their data as a list. These views may or may not feature icons attached to the data. Some of Sports Fiction's listviews feature scrolling, and some do not.

Combo Boxes

Combo boxes combine the features of lists and text boxes. The text usually filters, searches for and represents the selected item in the list.


TabViews reveal their content one at a time, and can be configured to behave like step by step configuration controls or slideshows. One of the most major implementations of this control is the X-Producer's editor tab view.


Gridviews work much like spreadsheets; the rows within a spreadsheet tend represent a record, and each column usually represents an attribute or metric assigned to the record. Gridviews arrange data into tabular layouts.


Buttons behave as they do in the real world, when pressed they trigger an action. There are different kinds of buttons, and in Sports Fiction, there will be many of them. Buttons tend to be mouse controlled, but can be controlled using a keyboard or gamepad. The spacekey, return key or confirm-button on a gamepad or touchscreen can also activate a button. Pressing left or right, or tab or shift-tab allows you to select different buttons.

Some of Sports Fiction's buttons feature quite a large design, making them easy to spot and click; representing a central or important action.

Others are quite small, and are designed to be screenspace efficient, out of the way but very much visible. In some cases the small buttons have been rendered a bit too small to read, but this is temporary.
Some of Sports Fiction's buttons will have aesthetic properties, such as the glass screen button which has the option to show or hide its glass screen.


All buttons tend to inherit the properties of the base button class which performs an action when pressed.


Toggle buttons behave like switches; they turn something on or off.


Check buttons are similar to toggle buttons; they enable or disable something; the difference is that checkboxes tend to form a part of a series of related multiple choice options.


Radio buttons behave like single choice option buttons. Much like a radio, you can only select one band at a time, and each radio button belongs to a single group of radio buttons.


Graphs are the analytical controls used to represent data which is of interest to the player, tournament organiser or developer. These come in a variety of forms, and we will have more graphs available in the final game. Most of the graphs so far inherit from a base graph class which provides the functionality of containing a list of values.

Line Graph

The line graphs consist of data points which tend to reveal the behaviour or metrics of something in the game or its configuration and modding tools. The line graphs will come in all shapes and sizes for each of the sports which require them for revealing information such as player progress or team scores.
Each line graph has an X axis in horizontal direction, and Y axis in the vertical direction. Colour controls have been constructed so that the colour of the lines can reveal an important message regarding the data being represented; it is good it will tend to go green, if is bad it will tend to go red.

Bar Graph

Bar graphs uses the size of vertical or horizontal bars to represent the scale of something within the data being represented by the graph. In one direction, the position of the bars represent a category or time of occurrence; the length of the bars in the other direction represent the scale of the value.
Like line graphs, each bar can be colour coded to represent the scale of the values and their message. Here oranges and reds are used to represent the bad, and the greens and blues are used to represent the good.

Adjustment Controls


Dials work like sliders, they contain adjustment mechanisms which have a minimum and maximum value. Dials are best used to preserve screen space without being too difficult to see; but can also come in large forms used for configuration of technical game elements.
Dials can also be non-interactive, these simple reveal the scale of something such as the speed of a vehicle.


Sliders are ranged adjustment devices used to adjust a value between its minimum and maximum value. Sliders will come in many forms and sizes for use in configuring and engineering equipment for use in the sports. Sliders tend to be either horizontal or vertical.

Value Bars

Value bars tend to be used to reflect the current progress of an operation; when they are used in this context they tend to be called progress bars. Value bars can also represent the scale of an attribute such as energy or fuel in the same manner in which the bars on a bar graph represent such scales.


So we have covered the basic controls which you can use to provide interaction with your sport; these are also controls which you will be able to configure for your competitive needs, making victories more attainable. In future updates on the user interface system, it will have matured and will contain additional benefits, more fonts and a more attractive design.

Development of 3D lists and combo boxes

Sports Fiction 23/11/14 - 15:00 Modelling of weapon for shooting sports

I spent a few days coming up with weopon concepts for the shooting sports. I have a number of sports ideas which will feature automatic rifles such as this. I will be making further progress with this and not too many weapons because for at least the sports I am going to create, I want strategy and skill to determine the winner, rather than the weapon.

Sports Fiction 23/11/14 - 15:00 Universe Instances - World Generator Phase 1 Part 1

So, it is time to get started with this universe instance game component I've had planned for the advanced game modes in Sports Fiction. This is going to take a while!

Each universe will spawn with a certain course of history leading up to the moment where your set of characters start their sports careers in the story campaign or PvP campaign.

Each instance will have its own set of game sessions stored on one of the instance servers I have configured.

First Step
The first step for generating worlds is to spawn a number of 2D terrain tiles for use in the overview screen, and for preparing what is required to generate the 3D content. So far each path of terrain is one tile thick and is yet to prevent overwrites.

I have purposefully slowed down the spawn rate so that I can keep track of how things are working. As always, I have started off with lots of debugging displays so that I can keep track of all the minute details.

Adjacent terrain tiles will have an impact on what kind of terrain is spawned each step of the way.

Each instance is to be set to include one or more accessible planets where sports cultures, cities and landmarks can spawn. The map will use the hexpanel control I constructed last week. It will break the world down into a number of hexagon grids; each grid is to be joined together into a shape of a globe mesh; or sub-section of a space-station.

Terrain Classes

There are four terrain classes so far, each represented by a rough place-holder image.

Flood Plains
Desert Plains

Each of the current and future terrain classes will come with a number of attributes which will affect local sports cultures and your experiences in the localities. The arrangement, proximity and character of the terrain are determined by a number of metrics according to the user specified planet settings, any active MOD or instance server overrides.

Second Step

In an attempt to adjust the spawn thickness setting, I have seen an increase in land scale; but not as much of an increases as expected...

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 29th Nov 2014 07:00 Edited at: 29th Nov 2014 07:04
The UI is well beyond comprehensive, nice work. The 3d interface elements have always been interesting.

I like the universe generation, I was working on something similar on a smaller scale for a browser based 2d turn based strategy game a while back, this aims to go much further though and I'm looking forward to seeing it translate into full 3d environments.

The gun style fits the near future setting pretty well, but the main grip (trigger hand) seems kind of blocky and uncomfortable, could maybe use more contouring toward the back where the palm will wrap it

Good laugh on that Mario graphic, particularly "This is a pipe -> |"

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 2nd Dec 2014 21:51 Edited at: 2nd Dec 2014 22:07
Quote: "The UI is well beyond comprehensive, nice work. The 3d interface elements have always been interesting."

It is slowly getting there; I did not want to show it at such an early stage, but felt it is important to keep people up to date with what is going on with the UI. I think the end result will be a dynamic desirable welcoming for the players, especially when the UI becomes a part of the game world.

Quote: "I like the universe generation, I was working on something similar on a smaller scale for a browser based 2d turn based strategy game a while back,"

I love strategy games, so I something in this game has to be based on that love of planning ones campaigns with the use of a map. Will there be somekind of overview map system for your game?

Quote: "
The gun style fits the near future setting pretty well, but the main grip (trigger hand) seems kind of blocky and uncomfortable, "

It is a shame I cannot hold it to feel how comfortable it is. lol. So far I am having to guess because my character's hands are not yet perfect for posing yet.

I will be working on that gun for the next 6 months so will there is plenty of time to make the trigger look more comfortable; this weapon and about 5 or 6 others. One of the many reasons for building a small weapon range (at least for my sports), is because I want to spend lots of time on the weapons, getting things to look, sound and play right; the technological culture of the game world encourages customization over fixed branding; therefore the weapons should be modifiable; so any ways in which such weapons would be modifiable in say 10 to 15 years time would be a great help.

I will post some other angles for more feedback before refining its look and logic; after a few more months of refinement I will work on its texturing.

Let me know if there are any other concerns. Although at this moment in time I could not reveal what exactly is being shot at; but can say there will at the very least be a smart-skeet shooting Sport; although that does not sound like much when put into words

Quote: "Good laugh on that Mario graphic, particularly "This is a pipe -> |""

It is quite interesting looking back at the fact that many of us in our early teens or pre-teens completed the entire 1 to 2 hour long game without the need for manual; quite the show of talent from Miyamoto, placing things and arranging things in such a way that the level design is actually the game manual!

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 3rd Dec 2014 07:33 Edited at: 3rd Dec 2014 07:34
Quote: "Will there be somekind of overview map system for your game?"

There will definitely be at least a larger continental map, as this was one of the first things I started laying down in pre-production. There will probably also be over-view maps of cities and settlements, I am leaning towards a static ink on paper style for these. As far as smaller level scale maps and/or interactive gps type maps, probably not, they are a helpful convenience, but most of the time I want the focus to be on the world rather than a dot or arrow.

Some thoughts on the gun:

Quote: "It is quite interesting looking back at the fact that many of us in our early teens or pre-teens completed the entire 1 to 2 hour long game without the need for manual; quite the show of talent from Miyamoto, placing things and arranging things in such a way that the level design is actually the game manual!"

I honestly can't remember ever reading a manual for instructions on a console game. Atari/NES controllers where simple enough you could figure out what each of the buttons did easily enough and they rarely changed based on context. the A button did the same thing at any point in the game as it did when the game first loaded usually.

SNES/Genesis just expanded on these same basic controls with little more need for explanations than perhaps a letter up on the screen.

By the time N64, Xbox, PS consoles and controllers came around with considerably more complexity, the games themselves were designed with enough tutorial type gameplay to teach the controls early in the game.

That being said, Mario really was a brilliant bit of design on many levels and it is evidenced in the incredible success that it has enjoyed.


Login to view attachments
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 4th Dec 2014 12:15
Quote: "Some thoughts on the gun"

Thanks, I will have a go at taking your suggestions.

Quote: "I honestly can't remember ever reading a manual for instructions on a console game."

Yeah, there not that many, like the Legend of Zelda and D&D, later on on SNES/Genesis [Megadrive] - Street Fighter, Mortal Combat etc

I just find it interesting.

Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 4th Dec 2014 13:12
Nice work, i didn't see your last posts with the gun earlier.

Quote: "It is a shame I cannot hold it to feel how comfortable it is. lol. So far I am having to guess because my character's hands are not yet perfect for posing yet."

How about 3D printing? Ok, i am joking but, It is not impossible. Depending on the price i guess.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 4th Dec 2014 13:38
Quote: ""It is a shame I cannot hold it to feel how comfortable it is. lol. So far I am having to guess because my character's hands are not yet perfect for posing yet."

How about 3D printing"

hmm, not a bad idea!

I think I could order some 3D printing, wood working or plastic forming of the ergonomic game entities; although not so freely with weaponry which may cause legal offense or secutity concerns.

Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 4th Dec 2014 14:11
Legal offense? Really? For printing a mock up of an imaginary weapon? It is not like printing the design of an actual gun. I don't know the laws that concern 3D printing and guns but it sounds silly if that is truth. Lol, what about replicas and toy guns?

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 4th Dec 2014 16:10
There was a lot of fuss about the first 3D printing of a gun in 2013; because some people out there are making them into real weapons the activity is being monitored by law enforcement agencies accross Europe.

Although I am unlikely to get into trouble with 3D gun printing; I think I'll just stick to my budget make do with some play doh.

One of the sports categories in my 'extended' list which I have been thinking about recently is the kick boxing; although I want to aim for a game suitable for 12 year olds and above. I think I can pull it off with some of the principles used in Marvel's super hero games and films; with a bit of future tech and emphasis on the traditional point system; since the players do not die in SF.

I have been watching your videos and notice how complicated it would be to create the animations. Watching live kick boxing events I notice alot of complicated footwork performed by the kick boxes even when not striking. Quite interesting to watch.

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 4th Dec 2014 16:26
It would take considerable work to get this one print ready. I believe I see floating geometry and unconnected pieces, this won't work for physical printing. Blender does have tools to do Boolean joins and to find and seal non-manifold edges. It will have to be water tight, and if you want it life size, you will want to make it hollow with an inner shell of polygons as well. Subdivision and other modifiers will be ignored so poly counts need to be high enough to support these things in the actual mesh. i've found the best way to do this is to design it around printing from the start.

I haven't actually printed anything due to the costs involved, but have done some modeling for printing. Shapeways will let you upload a model and validate it's print compatibility without requiring you to actually submit an order which is nice. It's an interesting shift when modeling for physical production vs modeling for games where u you can basically do whatever you want.

Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 4th Dec 2014 17:39
Having the option to print something from your game and physically be able to touch it in real life is quite cool, no matter the extra work it takes, still there is a high price involved, but just having the option is quite cool.

Quote: "I want to aim for a game suitable for 12 year olds and above"

maybe you should think of a more technical sport like tae kwon do? aiming for specific body parts for points instead of going for a knock out for example. of course the kicks in tae kwon do are more complicated, harder to animate. punches are easier to animate. the good think is that you can find tutorials from real martial artists on youtube and use them as reference. they explain step by step how the body moves during a kick. just type "how to do a roundhouse, front, side, whatever kick" you want.
of course nothing can beat motion captured kicks... i wish i could use motion capture for my game but i don't have the budget for it.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 4th Dec 2014 19:44 Edited at: 4th Dec 2014 19:53
Quote: " Ortu

It would take considerable work to get this one print ready. I believe I see floating geometry and unconnected pieces,"

Indeed. Would you say that modelling for print ready geometry is difficult? I ask because I have NEVER modelled for 3D printing, but do have minor experience with CAD/CAM. If my models had to be water tight, it sounds like a pain to also construct things in modular fashion with multiple limbs, which is a necessity for item customization in the game.

I think it is worth the consideration because 3D printing should get cheaper as the printing procedure becomes more commonplace. I would love to analyse designs for entities such as weapons, hoverboards, footwear, eyewear, body limbs, flying backpacks and so on in the real world; even if simplified for the purpose, because each model needs simplified versions anyway for mobile devices and old hardware.

Quote: "Dimis

maybe you should think of a more technical sport like tae kwon do"

Thanks. I think it will be soon time for me to do more research on such sports, picking the ones that will look right in the game.

Quote: "of course the kicks in tae kwon do are more complicated, harder to animate. "

I think that by the time I have completed soccer and dance, Tae Kwon Do should be faily straight forward. When I worked on my soccer prototype a few years ago, I noticed how easy it is for the animations to look robotic and repetitious. It will be interesting to see how I get around that when the time comes.

Quote: "find tutorials from real martial artists on youtube and use them as reference. they explain step by step how the body moves during a kick."

I will spend a great deal of time doing so; this game is very easy to make very cheesy; so I will need such research to back up my decision making; and at the same time make it for the family; no pressure!

I will not be able to escape the hatred of sports fanatics and professionals, but at least some of them will let me get away with this if I obsorb the techniques from sports pioneers.

Quote: "of course nothing can beat motion captured kicks. i wish i could use motion capture for my game but i don't have the budget for it."


That concept makes me wonder what I would do to make it work, if my life depended on it.

One method could be performed using distance sensors on a wireless devices attached to your body, one could record the trajectories and compare them to a base stance, and have a hook based limb pull the joints to where the should go to match the stance.

In addition to limb positions is limb angles, the use some kind of low cost orientation detector; such as a smart phone, and have them attached to your body, recording their orientation to file during the poses; using an additional one if an additional rotational axis needs to be detected. Once you calibrate the orientation accordingly, the data could be used immedietly using the limb angle commands.

Ideas which sounds stupid at first eventually evolve into something useful which may or may not be related to the original purpose.

I enjoy animating in Blender, and will make an entity animator in the X-Producer, but nothing would be better than using real action as the basis for animating characters; there is nothing more real than what is real.

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 4th Dec 2014 20:59
They are not any harder to execute, they just required more specialized planning to account for physical considerations. You need to be mindful of solid and hollow volumes, consider how weight and stress will affect small or narrow segments, there is a certain minimum thickness that pieces are required to maintain for proper printing without tears, holes, collapsing and the like. You can print in different materials from plastics to ceramics, to metals and each will have it's own properties and needs.

Once upon a time I worked in jewelry and gained some experience in metal casting. This lead naturally into an interest in printing and many of the same concepts apply to each.

A print doesn't all have to be one piece, you can print components then assemble them physically, screw's, bolts, glue, just as with any other physical thing, but each component is an individual model as far as the printer is concerned

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 6th Jan 2015 17:00 Edited at: 6th Jan 2015 17:04
I keep timing these new thread pages perfectly after each project break. Anyway...

Now that X-Mas and the new year has passed, it is time to get back to work on this.

I have been working on a CSGO map pack side project which needs a little urgent attention first, then more time will be spent on this primary project.

Yesterday work commenced stripping down some of the engine and adding the features back in XML node form; therefore, the engine is no longer 100% hard code; I can no make changes to my engine without touching the DarkBASIC IDE.

Now the world generator... Let's see where I left off a month ago.

I got as far as making the earth hex tiles more organic prior to any shader implementation and most importantly the actual 3D; but there is much to revise and much to talk about in my next official progress update where things will be more easier to explain.

Years of Service
User Offline
Joined: 18th Oct 2007
Location: I`m under ur bridge eating ur goatz.
Posted: 7th Jan 2015 18:40
Chris, have you considered implementing some form of project management into this tool? It'd be pretty cool to be able to set deadlines, milestones, track bugs, TODOs, etc. and have it integrated into the IDE.

I like offending people. People who get offended should be offended. -- Linus Torvalds
Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 7th Jan 2015 21:23 Edited at: 7th Jan 2015 21:31
What you mention will be very important for all of us; although the IDE could not compete with dedicated project management software, sometimes the smaller tool is fit for the given task, and useful features a few button clicks away can save time.

The P,H, and J buttons will link you to the integrated tools that will offer such functionality.

There are plans for the [h] hosting module to organize your resources on a network and with subversioning (if subversion DLLs are available).

The [P] project module will package everthing into a project file, providing you with project management features; for example, TODO lists, reminders, 2D and 3D notes and tasks. For my team and yours, you can also create a user login requirement for your project files for security and seperation of concerns; given engine's server/client model, user management functionality is intrinsic.

And the [J] Join-up module will provide collaborative features.

It is all closely linked with dotNET so there are many possibilities, any special requirements can come from a little bit of C++/VB.NET/C# programming to make your own plugin or module for the IDE.

I will be using these tools for my own ventures and so I will force myself to notice the grey areas and add all the necessaties of day-to-day development; be it for software or multimedia.

I look forward to quitting the day job so I can put things into 2nd gear, but it will be some time before that can happen.

Years of Service
User Offline
Joined: 12th Jun 2011
Location: Athens, Hellas
Posted: 7th Jan 2015 23:16
Quote: "I look forward to quitting the day job so I can put things into 2nd gear, but it will be some time before that can happen."

If you can take the risk, then when you are ready go ahead, but make sure that you will not regret it. If times were better (economically) i would have taken that risk too, and invested time and effort in learning new things concerning game development. Then again my day job is not going so well, so maybe i will have that extra time.

By the way, since your project is DBpro, are you afraid that DBpro games will have problems running in future operating systems? This is my primary concern and i am trying to look for a backup plan for my project.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 8th Jan 2015 16:13 Edited at: 8th Jan 2015 16:16
Quote: "If you can take the risk, then when you are ready go ahead"

I will definately keep my job until a basic income is made from the my projects. While I am working I will make use of the income to pay for the some of the resources.

Quote: "
By the way, since your project is DBpro, are you afraid that DBpro games will have problems running in future operating systems? This is my primary concern and i am trying to look for a backup plan for my project."

I have avoided putting all of my eggs in one basket, and I have been keeping a close eye on what Microsoft and TGC are doing.

In the worst case scenario, I'd have to port the engine. I have designed the software in such a way that it uses common functions found in many programming languages so I can port the software to another development tool if need be without having to translate too much code hidden in DLLs; it would take about 1 month or 2 months to do the port, the difficult part is handling engine aspects which differ from DBPRO.

Using XML (Nodes) means I do not need to rewrite the whole engine if need be.

In terms of Microsoft, there is a strong market for DX9; there are millions of players running popular games on Direct X 9.0, Microsoft have no intention to drop it until there is no market for it; but the current focus is on DirectX 12 which promises more advanced sceneric rendering features.

As for TGC, there seems to be a focus on AppGameKit which can handle 3D and uses a similar BASIC programming language. Changing my source code to work in AppGameKit will be a matter of running a code conversion: EG: square brackets instead of parenthesis arrays.

All in all, I do not care about the language or API I am using, although I like using DBPRO, .NET and DirectX, at the end of the day my main focus is on gameplay, graphics and tool development; if I think to heavily about third party deadlines, deadends, depreciation then I would not really be focus on my project, which should have a reasonable plan for all that can go wrong, which will go wrong.

My mindset is to concentrate more on making good stuff; I do not think people like Notch focuses to heavily on such things; he did not even care to use a 3D modelling program, just a bunch of cubes. Now all of those cubes earned him enough money to out bid Jay Z for Beverly Hills mansion.

Make good stuff and you might find that large companies may one day end up building their API's around you because of player/user demand, and your players making the effort to install old drivers in order to play your game or use your tool because it offers something not found elsewhere.

Chris Ritchie
Years of Service
User Offline
Joined: 7th Jan 2006
Location: Norn Iron
Posted: 15th Jan 2015 00:14
This is just simply stunning work Chris, I cant remember a project as well managed as this one. They used to sticky good projects here, I think this one is very deserving, people could learn a lot from reading through your thread.

Lead programmer ULIDIA
DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 15th Jan 2015 00:39
These days there is hardly a need to sticky, but i agree, the work that has gone in to this is pretty amazing

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 17th Jan 2015 15:59 Edited at: 17th Jan 2015 16:19
Thanks guys; it is all just a matter of sticking to it. All the 15 minute tasks here, 3 hour tasks there, do add up in the long run.

At the moment I am working on a serious debugging problem with nodes; nothing exciting and 101% too boring to discuss hence no update yet.

It will take a long time to reach my expetations, but that's the point of starting a long term project (or mammoth undertaking if you want to call it that). It is also a great way to learn games development and becomes something to draw back on when at work or when undertaking other projects.

Sticky's a great, but I'd rather keep it like this anyway, so my page is highlighted when there is an update; when there is no latest update there is no need for it to be at the top

DBPro Master
Years of Service
User Offline
Joined: 21st Nov 2007
Location: Austin, TX
Posted: 17th Jan 2015 21:10
I tended to notice on the 3d board that when something gets stickied, traffic actually seems to drop as it just kind of blends in with the ooooold stickies that have been around forever that no one pays attention to anymore. Letting things fall halfway down the page then pop back up again when there is something new works well to draw attention to the update.

Don't sweat the debugging, you'll get it worked out.

Chris Tate
DBPro Master
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 18th Jan 2015 17:19
Thanks; I am getting there.

Login to post a reply

Server time is: 2018-02-18 20:12:04
Your offset time is: 2018-02-18 20:12:04