• entries
    615
  • comments
    4,397
  • views
    663,255

About this blog

Learn about game development technology

Entries in this blog

Josh

Forum Update

The forum software has been updated to a major new version.  This completes my effort to give the entire website responsive design, and ensures we continue to receive security updates.  The responsive design part is really for SEO, but it is kind of cool to be able to browse the entire site on your phone without zooming in.

Documentation has been switched over to the new system here, which is independent from the forum software:
https://www.leadwerks.com/learn

The entire site is now using SSL on every page, again for SEO purposes.

There are a few bits that need improvement, but overall it's a solid upgrade and I think you will find the new site to be very helpful.  I've added a new Q & A forum where you can get technical assistance and rate the answers.  Code formatting has been improved a lot, and the notifications system does a really good job of catching replies to your posts.  (If you're receiving a lot of emails you can disable this in your account settings.)

Finally, you can now set a cover image to show at the top of your profile, which is pretty cool.

Josh

I've taken your suggestions and incorporated the fixes into the new documentation system here:

https://www.leadwerks.com/learn

 

All classes and commands are alphabetized, with classes listed first.

 

All pages in the API Reference should be working now.

 

If a page does not appear in the old docs, or if a command does not have an example, it will not appear in the new docs, as I am not changing the content right now.

 

Please let me know if the table of contents of pages have any errors.

Josh

I'm asking the community to look over the new documentation system and find any mistakes before I sign off on the project. The tutorials are not completed. The API Reference should be completed, although the main API Reference page is not showing anything right now.

https://www.leadwerks.com/learn

 

Here are my notes to the developer who is working on the docs:

Thank you for the update. I have fixed the table of contents page so that clicking on a link in the tree view will navifate to the correct page. This should make it much easier to test.

 

The following corrections are needed:

 

A new <subclasses> tag has been added, to show a list of all derived subclasses on a class page:

https://www.leadwerks.com/learn?page=API-Reference_Object_Entity

 

This is what it looks like for the Entity class page:

<subclasses>

<subclass>Camera</subclass>

<subclass>Bone</subclass>

<subclass>Model</subclass>

<subclass>Terrain</subclass>

<subclass>Brush</subclass>

<subclass>Light</subclass>

<subclass>Pivot</subclass>

</subclasses>

 

The App class can be removed from the TOC. Rewriting the example functions eliminates our use of this.

 

The Object class page is missing.

 

In the table of contents, all camera function links after GetClearColor() are wrong.

 

There is no Emitter::ClearPostEffects() function. Please remove this from the TOC.

 

I am asking my community to find any other problems. Overall, it's looking great.

 

Please review the material and make sure everything meets your satisfaction, and leave your comment below if needed. I figure many sets of eyes will be more efficient than just me looking through it. This is your documentation, and I want to make sure it's the best for you. Thanks for your help!

Josh

The table of contents and index can now be used to navigate to a page:

https://www.leadwerks.com/learn

 

Search is also working.

 

Almost all of the commands are filled in, with examples for Lua and C++, updated to use the standard main() entry point, or in the case of Lua, just a main script with no function.

 

Function arguments and syntax will also be displayed in C++ or Lua data types. So if you have the docs set to Lua, you will just see "number" instead of "const float blah blah blah..."

 

I am going to review the material and then I will ask the community to go through it before I give my freelancer the final OK.

 

blogentry-1-0-35735600-1493074797_thumb.jpg

Josh

The new docs system is mostly working now:

https://www.leadwerks.com/learn?page=API-Reference_Object_Entity_SetPosition

 

Features:

  • Treeview list of all tutorials and API classes and functions.
  • Alphabetical index (generated automatically from the table of contents).
  • Search (with autogenerated search index).
  • Switch back and forth between languages, with cookies to remember your preference.
  • Entire examples are automatically selected when you click on them.

Todo:

  • Table of contents doesn't yet navigate.
  • I would like to pretty-up the URLs using .htaccess rewrite rules.

 

Documentation is being loaded from XML files. I find this easier than a database, which is quite opaque to me. You can access some of the XML files being used here. MartyJ even made a cool template for the data on his site here.

 

At this point I think I can outsource the actual content creation to Upwork. This will involve copying and formatting our existing documentation into XML files, as well as updating all the examples to work by just using a main() function instead of the old App() class that we don't really need. I will be posting the job on that site soon.

Josh

I've been getting good results storing documentation data in XML files. This allows me to make changes to the way documenation is displayed, without updating hundreds or thousands of pages. I can also write documentation without as much HTML markup. For example, bullets can automatically be inserted in line breaks for the syntax info. Javascript-based search engines usually require all page contents to be store in an array, so this gives us an easy way to collect that data.

 

Since XML is a known standard, this makes it a bit easier to outsource the documentation content.

 

Here is a sample file I am working with.


<?xml version="1.0"?>

<page>

<title>SetPosition</title>

<description>Sets the position of an entity in 3-dimensional space, using local or global coordinates.</description>

<cppsyntax>

void Entity::SetPosition(const float x, const float y, const float z, const bool global = false)

void Entity::SetPosition(const Vec3& position, const bool global = false)

</cppsyntax>

<luasyntax>

nil Entity:SetPosition(number x number y, number z, bool global = false)

nil Entity:SetPosition(Vec3 position, bool global = false)

</luasyntax>

<parameters>

x: X component of the specified position.

y: Y component of the specified position.

z: Z component of the specified position.

position: the position to set.

global: indicates whether the position should be set in global or local space.

</parameters>

<remarks>

An entity can be positioned in local or global coordinates. Local coordinates are relative to the entity parent's space.

 

If the entity does not have a parent, local and global coordinates are the same.

 

<img src='img/552px-Space.png' />

 

Leadwerks uses a left-handed coordinate system. This means that if you hold your left hand as shown below, your middle finger, index finger, and thumb will point in the directions of the X, Y, and Z axes, respectively.

<img src='img/image2.jpg' />

</remarks>

<luaexample>

--Create a window

window = Window:Create()

context = Context:Create(window)

world = World:Create()

local camera = Camera:Create()

camera:SetRotation(35,0,0)

camera:Move(0,0,-6)

local light = DirectionalLight:Create()

light:SetRotation(35,35,0)

--Create a model

model = Model:Box()

while true do

if window:Closed() or window:KeyHit(Key.Escape) then return false end

model:SetPosition(Math:Sin(Time:GetCurrent()/10.0),0,0)

Time:Update()

world:Update()

world:Render()

context:Sync()

end

</luaexample>

<cppexample>

#include "Leadwerks.h"

using namespace Leadwerks;

int main(int argc, const char *argv[])

{

Leadwerks::Window* window = Window::Create();

Context* context = Context::Create(window);

World* world = World::Create();

Camera* camera = Camera::Create();

camera->SetRotation(35, 0, 0);

camera->Move(0, 0, -4);

Light* light = DirectionalLight::Create();

light->SetRotation(35, 35, 0);

//Create a model

Model* model = Model::Box();

while (true)

{

if (window->Closed() || window->KeyDown(Key::Escape)) return false;

model->SetPosition(Math::Sin(Time::GetCurrent() / 10.0), 0, 0);

Leadwerks::Time::Update();

world->Update();

world->Render();

context->SetBlendMode(Blend::Alpha);

context->DrawText(model->GetPosition().ToString(), 2, 2);

context->Sync();

}

return 0;

}

</cppexample>

</page>

 

Even the table of contents can be store in XML, which provides a listing of all pages and a way to automatically create the search index and a list of all topics:

<?xml version="1.0"?>

<contents>

<topics>

<topic>

<title>Tutorials</title>

<openstate>true</openstate>

<topics>

<topic>

<title>1. Editor</title>

<openstate>true</openstate>

<topics>

<topic><title>1.1 Editor Interface</title><openstate>true</openstate></topic>

<topic><title>1.2 Scene Panel</title></topic>

<topic><title>1.3 Textures</title></topic>

<topic><title>1.4 Materials</title></topic>

<topic><title>1.5 Models</title></topic>

<topic><title>1.6 Terrain</title></topic>

</topics>

</topic>

<topic>

<title>2. Games</title>

<topics>

<topic><title>2.1 Marble Platformer</title></topic>

</topics>

</topic>

<topic>

<title>3. Lua Programming</title>

<topics>

<topic><title>3.1 Introduction to Lua</title></topic>

</topics>

</topic>

<topic>

<title>4. C++ Programming</title>

<topics>

<topic><title>4.1 Introduction to C++</title></topic>

</topics>

</topic>

</topics>

</topic>

<topic>

<title>Script Reference</title>

<topics>

<topic><title>AI</title></topic>

<topic><title>Analytics</title></topic>

</topics>

</topic>

<topic>

<title>API Reference</title>

<topics>

<topic>

<title>Object</title>

<openstate>true</openstate>

<topics>

<topic><title>Asset</title></topic>

<topic><title>Analytics</title></topic>

</topics>

</topic>

</topics>

</topic>

</topics>

</contents>

Josh

I'm not entirely happy with the output of HelpNDoc for a few reasons. It outputs a great variety of formats, but doesn't do a spectacular job of any. I hoped to use CHM for local help but these do not scale well on high-resolution displays, and the technology will not be updated by Microsoft. HelpNDoc's HTML output is okay but not great, so I started experimenting with my own HTML to get exactly the look and functionality I want.

 

RIght now I have a javascript-based treeview for navigation, breadcrumb links, syntax highlighting for Lua and C++, responsive design, the ability to switch between C++ and Lua documentation on the same page, and the code examples select the entire block when you click on them. There's still more work to do, but so far this is the most promising method that is giving the best results. I am not sure yet if this will be a lot of PHP files or a utility program that spits out a bunch of HTML files.

 

blogentry-1-0-82981500-1489471156_thumb.jpg

 

blogentry-1-0-57106600-1489471168_thumb.jpg

 

I'm going to focus on the format of the data and then I'll post a job on Upwork and find someone else to do the grunt work of filling in all the content.

Josh

Our website has been updated with a new look and responsive design. Here are a few highlights.

 

Landing page:

blogentry-1-0-33605400-1489032564_thumb.jpg

 

Product pages:

blogentry-1-0-30517000-1489032631_thumb.jpg

 

Screenshots used in the site from games will display the title and author when you hover the mouse over them.

 

Responsive layout scaled for phones:

blogentry-1-0-17785100-1489032656_thumb.jpg

 

Clearer writing that says exactly what Leadwerks does and who it is for:

blogentry-1-0-95312500-1489032672_thumb.jpg

 

Dark gallery and video pages:

blogentry-1-0-59513400-1489032715_thumb.jpg

 

Sleek screenshot pages:

blogentry-1-0-34674700-1489032735_thumb.jpg

 

I left the Workshop pages as-is for now. The forum software is going to be updated and a new skin will be designed for the new version of the community software.

Josh

I have a few preview images to show you my progress with the implementation of my design for the website refresh. Enjoy.

 

blogentry-1-0-89993100-1488425458_thumb.jpg

 

blogentry-1-0-91921200-1488425469_thumb.jpg

 

blogentry-1-0-08950400-1488426213_thumb.jpg

 

Here's a new version of the view image page. It's pretty bold. The image stretches to its max dimensions, and a dark background is shown beyond that.

 

blogentry-1-0-06611400-1488476815_thumb.jpg

 

Working with a dark background for the video and gallery pages, and it feels pretty natural. Information pages with lots of text use the light theme, while image-heavy artsy sections use a dark theme so you can focus on the content.

 

blogentry-1-0-39138300-1488489539_thumb.jpg

 

This is close to finished:

 

blogentry-1-0-69328900-1488518773_thumb.jpg

Josh

Website Concepts

Here are some concepts I came up with for the site redesign.

 

blogentry-1-0-28096400-1488243640_thumb.jpg

 

blogentry-1-0-75543500-1488236499_thumb.jpg

 

blogentry-1-0-17914300-1488236510_thumb.jpg

 

The bold no-bull**** interface of itch.io inspired this design:

 

blogentry-1-0-48946400-1488241588_thumb.jpg

 

I think what will work best is if the designer takes my rough sketches, turns it into a clean design, and implements it with clean code.

 

I don't think we can change the whole site over at once without me losing control of the creative process and having runaway costs. I want to focus on the pages I have shown here and establish a foundation I can experiment with and iterate on.

Josh

Website Design

With the upcoming uncertainty that Steam Direct introduces to Steam sellers, I am putting more effort into our website, because it may be the primary channel through which new users discover Leadwerks in the future. Although the functionality of our site is awesome, the visual design is rather outdated and it's time for an actual designer to take over. I've got a rough idea of what I want the site to look like, but beyond that I am happy to let someone else figure it out.

 

blogentry-1-0-26079000-1488136311_thumb.jpg

blogentry-1-0-01585300-1488136321_thumb.jpg

blogentry-1-0-61174400-1488136333_thumb.jpg

 

I plan on the design using lots of big images, and we have a large collection of high-res renders made with Leadwerks that will look great.

Josh

Website Updates

I've successfully pulled every website page out of the Invision Power Board CMS that I can:

http://www.leadwerks.com

http://www.leadwerks.com/graphics

http://www.leadwerks.com/editor

http://www.leadwerks.com/programming

http://www.leadwerks.com/features

http://www.leadwerks.com/steamos

http://www.leadwerks.com/gamelauncher

http://www.leadwerks.com/workshop

http://www.leadwerks.com/gallery

http://www.leadwerks.com/videos

http://www.leadwerks.com/games

http://www.leadwerks.com/company

http://www.leadwerks.com/contact

http://www.leadwerks.com/termsofuse

http://www.leadwerks.com/privacy

http://www.leadwerks.com/cookies

 

These pages load independently from any of the community software files, so the website and community can be updated separately.

 

I've taken the web design as far as I can, which is better than most designers would do, but not as good as I want. The website really needs to sell the software. Now I am looking for a high-quality redesign, which I expect to cost a fair amount of money. I'm primarily looking at design firms in the SF bay area who have experience making AAA game websites.

 

The community software will be updated to the latest version, which breaks our skin and other customizations. A new skin will be designed that will be similar but not identical to our current look.

 

At one time, I tried to use IPB for everything, including commerce, a gallery, and downloads, but I don't think a CMS can be very good at all things. We're only using IPB at this point for the forum, blogs, and a few custom databases and pages. Steam is working well for screenshots, videos, and downloads (Workshop), and I use custom PHP scripts to retrieve and display that information.

 

The beta branch of the editor has the Workshop home page set to the new location and everything should work without a hitch.

 

The documentation is also being separated out into a different system that is better suited for that purpose, but that will take more time.

Josh

The upcoming changes to the Steam curation process may mean we experience greatly reduced visibility in the Steam store, and I am preparing for that possibility. The plan for quite a while has been to double down on the ease of use and learning that differentiates Leadwerks from every other game development system on the market.

To that end, I have begun translating the documentation into a format that is easier to view and search. The welcome page has been done away with and will be replaced by a start page similar to Visual Studio that displays recent news, allows project selection and creation, and encourages the user to become active in the community. By default, the documentation will probably open automatically in a CHM file the first time the program starts.

We're relying much less on IPB (our community software) nowadays, and most of the website is being pulled out of that system. The gallery page, for example, now runs with no connection to the forum installation. Eventually we will upgrade the community software to the latest major version, and this move will minimize any disruption to the website.

Meanwhile, the game templates are in the planning stage. The marble platformer template is actually generating a lot of cool ideas and it could be easily repurposed to make an engaging third-person platformer game. I think this will be a fantastic introduction to game development and inspire a lot of creative variations.

The social media accounts are now adjusted to be more selective with the content they repost.

The goal is to make new users the best possible experience learning to make games. It's not enough just to have certain features, I want new users to be religiously enthusiastic when they see what they can do with Leadwerks.

Josh

A full update for Windows and Linux is now available on the beta branch which addresses several small problems:

http://www.leadwerks.com/werkspace/topic/15772-standalone-build-wont-launch/

http://www.leadwerks.com/werkspace/topic/15761-entity-gets-has-stopped-working-error/

http://www.leadwerks.com/werkspace/topic/15766-crash-anything-since-last-update-object-already-deleted/

 

The version of the VC redistributable has also been updated in Steam and will fix this problem if you are having trouble running your game from the editor in debug mode:

http://www.leadwerks.com/werkspace/topic/15734-problem-starting-43-in-debug-mode/

Josh

Previously, I laid out a pretty complete design of the racing game template I want to build. There's definitely enough there to build out the concept with very little left unanswered.

 

We are going to have a marble game template, because of its simplicity and ease of learning. However, unless the template really looks like a game people would want to play, it doesn't offer enough "carrot" to inspire people. This idea is less well-defined than the racing game, so I am only in the idea stage right now. There's two big aspects of this I want to figure out: level design and game mechanics.

Level Design

If you look at a lot of this type of game on Steam, they pretty much all just use some random blocks or generic levels and place a ball in it. This is what I do not want:

 

blogentry-1-0-27844500-1487091948_thumb.jpg

 

A game of this type should have a highly ordered repeating geometry.

 

blogentry-1-0-36719800-1487092121.png

 

blogentry-1-0-38268300-1487092283_thumb.jpg

 

These examples are more orthogonal than I would like, but it's a start. I definitely want the base of it to be a checkered pattern. I do not want random blocks. See how the Sonic level design uses some trim along the edges to make it look nicer?

 

Here's an example of some more organic elements mixed into the design:

 

blogentry-1-0-46098300-1487092568.jpg

 

Here's a nice curve. Not exactly what I want, but it provides some ideas:

 

blogentry-1-0-77891800-1487092734_thumb.jpg

 

I like the curving plastic pieces here:

 

blogentry-1-0-06314100-1487092904.jpg

 

It should look like a toy kit you put together. The wooden elements are also pretty cool.

 

So here's my quick summary of what I want in the level design:

  • Mostly orthogonal and diagonal brushes with a checkboard pattern.
  • Lush vegetation to break up edges and make the world less boxy.
  • Curved pre-formed pieces that look like plastic and wooden toys.

 

Overall I want the world to feel like an old Nintendo fantasy world with an adventurous feel. The music might not be 8-bit, but should have some of that style:

http://www.playonloop.com/2017-music-loops/doctor-gadget/

 

The marble itself should have a distinctive look. Maybe a reflective silver ball-bearing, using the SSG effect to reflect the world around it?

Mechanics

I am pretty foggy on this because I don't play this type of game. Fans? Moving platforms? Loop-de-loops? Got any suggestions or examples from other games you would like to see me implement? If you have a video of gameplay, that's even better.

 

The idea is to implement a few reusable mechanics that can be recombined in interesting ways, so that someone can make a finished game just by recombining them and making additional levels. I also favor mechanics that are associated with a specific model so that they are easily recognizable, like fans, magnets, saws, etc.

 

Tell me your ideas in the comments below.

Josh

The path we are on

blog-0137282001486914853.jpg

Previously, I have talked about my plans for Leadwerks and how to get there. In that blog I started with technical specs and went backwards with the path we would follow to achieve those goals. Now I have begun to put some of these ideas into practice and I want to review my plan with you.

 

I met with a very large academic institution a few months ago and talked about using Leadwerks to teach game programming. This is the whole reason I wrote this blog and did the research included therein. When I put the graph up showing job requirements, it was a very easy sale.

 

blogentry-1-0-83594900-1486875125_thumb.png

 

I then gave a short talk to a group of their students who had some web development background, but had zero game development experience. Perfect! These people are my bread and butter. The purpose of this was to gauge interest in a class in game development, and they were very interested.

 

As I was talking to these people I realized I could not meet their expectations. No one else could either, but I knew at the end of a two week course they would only have very rudimentary ugly games made, not the dreams they had in their head. These people did not know anything about mipmaps, debuggers, texture coordinates, and they did not care. They just wanted to make games.

 

I cancelled my plans to hold a class because I knew we weren't ready to give them what they really needed. Leadwerks is the easiest way to build your own 3D games, but we are not all the way there yet. No one out there is really giving complete beginners the means to learn to make their games quickly, but we can be the first to do it with a bit more work.

 

As I stated previously, the documentation is being revised, including an offline copy of the docs. This takes an enormous amount of time because I have to copy, paste, and edit hundreds of pages. I am also revising all the code examples to only use the main .lua and .cpp files and get rid of the App::Start() stuff, which is a holdover from mobile.

 

The next step is to create a broader selection of high quality game templates. This is the final step that is needed to bridge the gap between game development technology and a complete beginner. The templates have to be polished and feel like a game you would actually want to play. This must happen or everything I have done has been a waste of time.

 

We are in a race against time to connect with a large audience in a way where they can't imagine life without Leadwerks. If I fail to do that, we will go the way of every other abandoned open-source game engine out there.

 

So that is what I am working on.

Josh

An update to 4.3 is available on the beta branch. This fixes it so the editor is not DPI-aware and will be scaled correctly if scaling on Windows is used. This build is also built with a fresh install of Windows 10 and Ubuntu (but it shouldn't make any difference).

 

This is a full build for Windows and Linux, with C++ libraries included. Game Launcher is also updated on its beta branch.

 

If there are no problems with this, it will go onto the default branch in a couple days.

Josh

I am going to try something different this time and use the Thunderclap tool to promote the release of Leadwerks 4.4, which I have scheduled for April 3:

https://www.thunderclap.it/projects/52943-leadwerks-game-engine-4-4

 

Please sign up to help with the launch if you would like to promote it.

 

Also, there is still time to help the launch of A Demon's Game:

https://www.thunderclap.it/projects/52763-a-demon-s-game-crowdfunding

Josh

An update is available on the beta branch for Windows, editor and Lua executables only. This fixes a problem in the new light update system:

http://www.leadwerks.com/werkspace/topic/15713-shadow-update-editor-issues/

http://www.leadwerks.com/werkspace/topic/15716-43-child-entities-do-not-cast-shadows/

 

The animation shaders are also modified and they will appear better:

http://www.leadwerks.com/werkspace/topic/15710-all-animated-shaders-have-wrongstatic-normals/

Josh

I'm going to focus on directing people to the Leadwerks mailing list and getting people to sign up for Leadwerks accounts. This is much more valuable than social media followers we have no data for, or even Steam users we can't contact directly.

 

We do need something extra to get the word out to people on the web about Leadwerks, but I don't think Facebook and Twitter are it...

Josh

Our website and Steam store page get traffic from a variety of websites. Facebook, Twitter, and Google+ are pretty low in those rankings. So I have to wonder, why am I advertising these social networks on every page in our website? What are they doing for us? It's not 2006. Is Facebook even relevant? My stats say not really. It appears I am only doing this because it is conventional wisdom that we should do so, and I have never been one for conventional wisdom.

 

I have removed the social links from our website footer and disabled all feeds to our social accounts. Not sure if this will remain, but at this time all evidence indicates there are much better channels to focus on.

Josh

Leadwerks 4.3 RC3

A full build is available for Windows and Linux on the beta branch on Steam. This fixes a problem with the character controller physics and with the Alt key on Windows.

 

To upgrade 4.2 C++ projects to 4.3, you must add the following search paths:

  • $(LeadwerksHeaderPath)\Libraries\libvorbis\include
  • $(LeadwerksHeaderPath)\Libraries\libogg\include

 

I'm pretty sure it's ready, but please give it a good thrashing. This will go up on the default branch tomorrow morning.

Josh

Leadwerks 4.3 RC2

I've uploaded a full build for Windows and Linux, and updated the game launcher beta branch. This adjusts some very minor issues that you probably won't even notice.

 

Some of your characters might need to have their character controller angle setting set to 180, depending on how you have them set up. This is because some previously incorrect behavior has been fixed. You can use my third-person player script for testing.

 

My only concern at this point is that some of HaydenMango's games now have characters that are walking too slowly. I haven't seen this problem in any other games, so it is hard to guess what could be causing that.

Josh

I've uploaded a release candidate of version 4.3 on the beta branch. This is a full build, for Windows and Linux. The Game Launcher beta branch is also updated.

 

If all is well this will go onto the stable branch in a few days.

Josh

An update is available on the beta branch, which includes the editor and Lua executables, for Windows only. The following issues are resolved:

http://www.leadwerks.com/werkspace/topic/14934-materials-go-crazy-when-used-on-a-prefab/

http://www.leadwerks.com/werkspace/topic/15644-latest-43-beta-causes-crawler-to-rotate-at-wrong-direction/

http://www.leadwerks.com/werkspace/topic/15597-wrong-issues-with-z-sort-materials/#entry104462