Jump to content

Ultra Software Company Blog

  • entries
    189
  • comments
    1,264
  • views
    726,284

Contributors to this blog

About this blog

Entries in this blog

Making Leadwerks.com More Scalable

Our website stores a lot of user generated content in the forum of images and attachments.  Before Leadwerks Game Engine was on Steam the demands were even higher, since we had our own downloads and gallery sections that stored data on our server.  Since the implementation of Steam screenshots and Workshop a lot of that has been offloaded onto the Steam servers, relieving our server from some of the data storage and transfer costs.  (If you're interested, all our old content is archived on Googl

Josh

Josh

Leadwerks Halloween Game Tournament 2017

Fall is in the air.  The leaves are changing colors, people are bundling up, and game developers are itching to try their hand at another community game tournament.  How does it work?  For 30 days, the Leadwerks community builds small playable games.  Some people work alone and some team up with others.  At the end of the month, on Halloween day, we release our projects to the public and play each other's games.  The point is to release something short and sweet with a constrained timeline, whic

Josh

Josh

Leadwerks Game Engine 5 is Coming

Leadwerks 5 is going to be developed alongside 4.5 with an extended period of beta testing and feedback.  My goal is to build the world's most advanced game design software, tailored to the needs of our community and clients.  Development will first focus on a new programming API updated for C++11 and then a completely new editor using Leadwerks GUI and based on the workflow developed with our current editor. The first beta will support the following features right away: Shared Point

Josh

Josh

Unicode in Leadwerks 5

I've begun implementing unicode in Leadwerks Game Engine 5.  It's not quite as simple as "switch all string variables to another data type". First, I will give you a simple explanation of what unicode is.  I am not an expert so feel free to make any corrections in the comments below. When computers first started drawing text we used a single byte for each character.  One byte can describe 256 different values and the English language only has 26 letters, 10 numbers, and a few other cha

Josh

Josh

Learning how to use C++11 shared pointers

I have implemented C++11 shared pointers into Leadwerks Game Engine 5 and the following program now works.  When you press the space key the box variable is set to NULL and the visible box on the screen disappears: #include "Leadwerks.h" using namespace Leadwerks; int main(int argc, const char *argv[]) { auto window = CreateWindow(); auto context = CreateContext(window); auto world = CreateWorld(); auto camera = CreateCamera(world); camera->Move(0,0,-5); camera->SetClearColor(

Josh

Josh

Say Hello to Leadwerks 5 Shared Objects

All classes in Leadwerks are derived from a base Object class.  In Leadwerks 5 we separate simple and complex objects with the new SharedObject class. Simple objects like a Vec3 ( a three-dimensional vector), an AABB (axis-aligned bounding box), and other items are all derived from the Object class.  Simple objects are created with constructors.  When we make one object equal to another the value is copied from one variable to another, but the two variables are still separate objects.  Belo

Josh

Josh

3 Ways Leadwerks Game Engine 5 Makes Game Programming Easier

Leadwerks Game Engine 5 moves Leadwerks forward into the future with massive performance increases and more advanced features, it also makes game development easier than ever before with three great new programming features. Shared Pointers I could write a whole article about the benefits of shared pointers.  Shared pointers are basically a simple form of garbage collection that relieves you from the need to manually delete objects, but doesn't suffer from the slow speed of full garbag

Josh

Josh

Leadwerks 5 Beta Rollout

Today I am excited to announce plans for the release of the first Leadwerks 5 beta version.  Leadwerks 5 will roll out sooner rather than later, employing an extended beta period during which versions 4 and 5 will live side-by-side, using the same code base, with preprocessor definitions to compile each version.  This allows me to fix small problems without forking the code, while I can implement new changes in version 5.  The first features implemented will be the use of smart pointers for all

Josh

Josh

3 Ideas You Must Understand to Use C++11 Shared Pointers in Leadwerks Game Engine 5

Leadwerks Game Engine 5 is being designed to make use of shared pointers.  This eliminates manual reference counting, which has probably been the most difficult part of programming games with Leadwerks.  Here are three concepts you must understand before you start using smart pointers in Leadwerks 5, Don't Create Multiple Shared Pointers from One Object When a shared pointer goes out of scope, it deletes the object it references.  If another smart pointer was created separately that re

Josh

Josh

C++11 Shared Pointers Make Leadwerks 5 Simpler

This shows the fundamental difference between shared pointers and manual reference counting. Leadwerks 4: void Material::SetTexture(Texture* texture, const int index) { if (this->texture[index] != texture) { if (this->texture[index]) this->texture[index]->Release(); this->texture[index] = texture; if (this->texture[index]) this->texture[index]->AddRef(); } } Leadwerks 5: void Material::SetTexture(shared_ptr<Texture> texture, const int index)

Josh

Josh

A look at C++11 Weak Pointers in Leadwerks 5

Previously, I talked a little bit about shared pointers in C++11.  These use automatic reference counting to track how many variables are pointing to an object.  When the object is no longer being used, it is automatically deleted.  This is similar to garbage collection, but doesn't involve the massive overhead of garbage-collected systems.  In fact, shared pointers simply automate something we were already doing with the Release() and AddRef() commands in Leadwerks 4. A weak pointer is lik

Josh

Josh

Game Tournaments, Schwag, and American Apparel

I have proven beyond a shadow of a doubt that I am very bad at shipping posters.  The Winter Game Tournament was completed in January and I have yet to deliver your prizes.  If you have a job opening for someone to ship prizes, or to ship anything at all, I am probably the worst candidate you could ever hope to find to fill said position.  Seriously. Part of the problem (although it's still not an excuse) has been that it is actually incredibly difficult to have custom USB keychains made. 

Josh

Josh

Five Programming Changes You'll See in Leadwerks 5

Leadwerks 4.x will see a few more releases, each remaining backwards compatible with previous versions.  Leadwerks 5.0 is the point where we will introduce changes that break compatibility with previous versions.  The changes will support a faster design that relies more on multi-threading, updates to take advantage of C++11 features, and better support for non-English speaking users worldwide.  Changes are limited to code; all asset files including models, maps, shaders, textures, and materials

Josh

Josh

A Look at C++11 Shared Pointers in Leadwerks 5

C++11 introduces shared pointers, a powerful language feature that provides easy memory management without the overhead of garbage collection.  The example below should look familiar to you: #include "Leadwerks.h" using namespace Leadwerks; int main(int argc, const char *argv[]) { shared_ptr<Leadwerks::Window> window = Leadwerks::Window::Create(); shared_ptr<Context> context = Context::Create(window); shared_ptr<World> world = World::Create(); shared_ptr<Camera&

Josh

Josh

Leadwerks Game Engine 4.4 Released

Leadwerks Software today announced the release of version 4.4 of their topselling game engine on Steam.  This version adds a new GUI system, support for inverse kinematics, and enhanced visuals.  The free update goes out today to over 20,000 paid users on Steam. Leadwerks Game Engine 4.4 sees the introduction of Leadwerks GUI, a system for creating resolution-independent in-game menus.  Custom GUI elements can be created with Lua script, or an item can be selected from a number of pre-built

Admin

Admin

Fog in Leadwerks 4.4

Distance fog is one of the most basic visual effects in 3D graphics, going back to the 1990s.  Here is the effect in the Quake 3 Arena map "Fatal Instinct", which was shrouded in a dense orange fog: Leadwerks Game Engine 2 had this available as a built-in effect, while the more flexible effects system of Leadwerks 3/4 had several Workshop shaders available to use, including one by Klepto and another one more recently added by myself.  However, this has not been part of the official SDK

Josh

Josh

Shader Enhancements in Leadwerks 4.4

Leadwerks Game Engine 4.4, scheduled for release soon, features some updated and enhanced visual effects.  In this blog I will talk about some of the adjustments I made.  Having "The Zone" scene that Aggror recreated actually helped a lot to see how shaders could be improved. Bloom / Iris Adjustment / HDR The bloom and iris adjustment shaders have been updated to give bloom a wider and softer blur.  Iris adjustment is faster and more intense now, which will make the outdoors areas seem

Josh

Josh

Creating Realistic Skyboxes with Vue

This tutorial demonstrates how to create a high-quality skybox for Leadwerks Game Engine using Vue. Download Cloudy Blue Skies.zip FixVueCubemap.zip Required Third-Party Programs Vue Esprit Exporter Module Loading the Example Run Vue and select the File > Open menu item.  Extract the zip file above and open the file "Cloudy Blue Skies.vue". Atmosphere and Clouds You can modify the appearance of the sky with the Atmosphere Edito

Josh

Josh

Saving In-Game Settings

An update is up which saves all menu settings into your game's config file.  When your program calls System:SetProperty() the inputted key-value pair is saved in a list of settings.  Your game automatically saves these settings to a file when it closes, located in C:\Users\<USERNAME>\AppData\local\<GAMENAME>\<GAMENAME>.cfg. The contents of the config file will look something like this: anisotropicfilter=8 antialias=1 lightquality=1 screenheight=720 screenwidth=1280 ses

Josh

Josh

In-Game Menu

Along with Leadwerks GUI, Leadwerks 4.4 adds an in-game menu that is available with the default Lua scripted game.  You can use this to allow your users to adjust settings in the game, or provide a more sophisticated way to quit the game than simply pressing the escape key. The default window size has been changed to 1280x720 when run from the editor.  Your game will now run in fullscreen mode by default when it is launched outside the editor. All of these changes are contained i

Josh

Josh

We integrated GameAnalytics.com into Leadwerks; You won't believe the shocking results

In Leadwerks 4.3 we integrated GameAnalytics.com into our software, both in the editor and in the engine, as a tool developers can use to track their player statistics.  A number of events were set up in the editor to fire when certain actions were performed, in order to gain better insight into how people were using Leadwerks.  Here are the results. The most popular primitives Unsurprisingly, boxes are by far the most popular primitive created in Leadwerks Editor.  The community has c

Josh

Josh

New Physics Features in Leadwerks 4.4

Leadwerks Game Engine 4.4 features an upgrade to the latest version of Newton Dynamics, along with a bunch of new features to enhance physics. Kinematic Controller The new kinematic controller is a joint that lets you specify a position, rotation (Euler or quaternion), or a 4x4 matrix to orient the body to.  You can set the maximum linear and angular force the joint may use to orient the entity.  This allows you to create a kinematic controller that only affects position, only affects rot

Josh

Josh

Building Multiplayer Games with Leadwerks

A new easy-to-use networking system is coming soon to Leadwerks Game Engine.  Built on the Enet library, Leadwerks networking provides a fast and easy way to quickly set up multiplayer games.  Each computer in the game is either a server or a client.  The server hosts the game and clients can join and leave the game at will.  On the other hand, when the server leaves the game, the game is over! Creating a Client You can soon create a client with one command in Leadwerks: clien

Josh

Josh

Leadwerks GUI

After a lot of research and development, Leadwerks GUI is almost ready to release.  The goal with this system was to create an in-game GUI that was customizable, extendable, and could also serve as a windowed GUI for application development in the future. Widgets The GUI system is based on the Widget class.  Once a GUI is created on a rendering context you can add widgets to it.  Each widget is a rectangular container with a padding area.  The widgets can be arranged in a hierarchy and

Josh

Josh

Website refresh and Leadwerks 5

Back around February I started working on a website update that included the following: Responsive design everywhere. SSL everywhere. Visual improvement of website. Updated documentation system. Tutorials for C++ programming basics. Update forum software to new major version. Forum moved to new URL. All of that is now pretty much done.  These changes improve the online Leadwerks experience and are independent from the software itself, so it

Josh

Josh

×
×
  • Create New...