If were a user of BlitzMax in the past, you will love these convenience commands in Turbo Engine:
int Notify(const std::wstring& title, const std::wstring& message, shared_ptr<Window> window = nullptr, const int icon = 0)
int Confirm(const std::wstring& title, const std::wstring& message, shared_ptr<Window> window = nullptr, const int icon = 0)
int Proceed(const std::wstring& title, const std::wstring& message, shared_ptr<Window> window = nullptr, co
There's a crazy sale on Steam right now. If you haven't played STALKER yet, you can get it for $10:
http://store.steampo...check/app/4500/
In other news...
Framework is being compiled into the engine DLL and being made an official part of the engine API. It will remain a separate piece of code for BlitzMax programmers they can just import. A mechanism will be added to add your own custom post-processing effects, though this will not be available immediately. It will be something like th
Merry Christmas! Here's an update on the beta branch.
The previous update was mistakingly supplied with the Debug DLL for Windows. This has been fixed. (Good thing we have a branch for testing!)
The internals of the Workshop system have been completely rewritten to support Workshop items in any folder. The editor will also no longer download Workshop items at startup, but instead wait until you install them in your project. Workshop items will not be automatically updated, but will dis
I hope everyone is having an awesome Christmas week. I'm taking a break from coding to show you our new office we moved into in November at the Sacramento Hacker Lab.
All decked out for Christmas:
Chris is pretending to work, but he's not fooling me:
So we changed the arrangement to make a reverse mullet. (Party in the front, business in the back):
The kitchen provides energy, both in the form of food and alcohol:
The common area:
The room-temperature beer flo
The Leadwerks Mercenary Action Figure has been released as a DLC. Previously, I talked about how the Workshop Store was not selling much content, and that we need game-ready content to be available to use in Leadwerks. At the same time, DLC sales are quite good, which seems contradictory.
To date, this item has total sales of $299 since release and cost $2000 to produce. (Additional characters will be a bit cheaper if we reuse animations.) After Steam's cut, I've lost $1800 on this proje
Vulkan gives us explicit control over the way data is handled in system and video memory. You can map a buffer into system memory, modify it, and then unmap it (giving it back to the GPU) but it is very slow to have a buffer that both the GPU and CPU can access. Instead, you can create a staging buffer that only the CPU can access, then use that to copy data into another buffer that can only be read by the GPU. Because the GPU buffer may be in-use at the time you want to copy data to it, it is b
The lean startup methodology posits that life is to short to build a product no one wants. The old way of doing business involved a limited number of companies with very high barriers to entry adopting a "push" strategy. Sears could effectively create demand for a product by choosing what they wanted to feature prominently in their mail-order catalog. Television advertisers could craft a promotional strategy that would reliably result in a certain response. Those days are over, fortunately,
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
A map viewer application is now available for beta subscribers. This program will load any Leadwerks map and let you fly around in it, so you can see the performance difference the new renderer makes. I will be curious to hear what kind of results you see with this:
Program is not tested with all hardware yet, and functionality is limited.
I have map loading working now. The LoadMap() function has three overloads you can use::
shared_ptr<Map> LoadMap(shared_ptr<World> world, const std::string filename);
shared_ptr<Map> LoadMap(shared_ptr<World> world, const std::wstring filename);
shared_ptr<Map> LoadMap(shared_ptr<World> world, shared_ptr<Stream> stream);
Instead of returning a boolean to indicate success or failure, the LoadMap() function returns a Map object. The Map object gives
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 replac
I've got the Steamworks HTML renderer working with Leadwerks GUI now. The current build on Steam uses the Windows HTML renderer, which is part of IE. This isn't cross-platform, which is one reason why game launcher isn't available for Linux right now. The Chromium-based Steamworks HTML renderer is cross-platform but there are some issues.
The HTML renderer works by rendering a web page into a memory buffer and then uploading that buffer to a texture and drawing it onscreen. The visible r
The scene browser lets you see every entity and brush in the scene, and also lets you arrange entities in a hierarchy. You can add a light to the scene, position it onto a lamppost, then use the scene browser to parent the light to the lamppost model and save the whole thing as a prefab.
There's no "mesh" class in the new engine, and entities inherit a lot of the properties that models in LE2 had, like scripts and physics. Models are just MDL files, and generally just contain model and bon
I apologize preemptively for the title.
So I picked up a Samsung Galaxy Tab today, for testing...yeah, that's it, "testing"...
I installed the USB driver for Windows, restarted my computer, and was able to start debugging Leadwerks3D on it with no trouble at all. However, the rendering showed black objects that ought not be black.
At this point in the game, having such a basic issue is very scary to me. I tracked the problem down to the lighting uniforms being passed to the sha
I've been revising the Lua design a bit. Ideally this should have been done six months ago, but I did not realize how popular it would be. During beta testing there wasn't much interest in it. That's understandable, because no one likes using beta software. As soon as it was released, suddenly there was some very advanced stuff being implemented immediately. This is great, and I can see my thoughts about how it would benefit us were correct. It also made me want to implement a single-state syste
I've got the editor and Lua interpreter communicating on OSX, but am having trouble creating a window...some weird Objective C problem. I've got to go get my local Xcode expert.
When considering the script system in Leadwerks 5, I looked at alternatives including Squirrel, which is used by Valve in many games, but these gave me a deeper appreciation for the simplicity of Lua. There are only a handful of rules you need to learn to use the language, it’s fun to use, yet somehow it does everything you could ever need.
These were three big issues I had to solve. First, the Leadwerks 5 API makes extensive use of smart pointers, which our binding library tolua++ does not
Until now, we haven't really had proper debugging info when a crash occurs during execution of a Lua script. Thanks to some previous work TylerH did with Lua, a conversation with him revealed how to easily add debugging info into the editor and script interpreter. (Incidentally, the Lua integration was Tyler's idea to begin with!) Here's a shot of the Script Editor catching an engine crash and displaying the script line the error occurs at. This is a crash that occurred in the engine, not a
The Leadwerks 5 API uses C++11 smart pointers for all complex objects the user interacts with. This design replaces the manual reference counting in Leadwerks 4 so that there is no Release() or AddRef() method anymore. To delete an object you just set all variables that reference that object to nullptr:
auto model = CreateBox();
model = nullptr; //poof!
In Lua this works the same way, with some caveats:
local window = CreateWindow()
local context = CreateContext(window)
local world =
Here's the layout for pure Lua applications. This will run on Android, iOS, Windows, and Mac, with no third-party compilers to mess around with. And because it's JIT compiled by the engine itself, it's fast:
--This function will be called once when the program starts
function App:Start()
--Set the application title
self.title="Darkness Awaits"
--Create settings table and add defaults
self.settings={}
self.settings.vsync=true
--Load the user's settings
self:LoadSettings()
The C++ object debugger for Lua is working now. It was a little tricky, but I implemented a method to view all members of C++ objects. The debugger does handle dynamic object fetching, so if you expand a node in the debug tree representing a C++ object, the contents of that object will be loaded and displayed. Let's say you have an entity parented to another entity. This allows you to expand the parent member of the child, then find the child in the parent's child list, and so on, ad infinit
The Leadwerks community tends to be a pretty mature, technically astute one. This is great because it's easy to get good feedback and help, but we do tend to suffer from a tendency to focus on low-level details. This can cause problems with it delays projects, sometimes infinitely. If all we do is keep reinventing the wheel we'll never get to the automobile.
Preparing the FPS weapons pack is giving me a chance to work on some high-level game behavior I don't get to do much. Sometimes we t
Below is raw output from the Lua debugger. It displays all variables, tables, and functions in the Lua script call stack. This will be displayed in a nice treeview interface that looks much better, but I found this terribly exciting.
You'll notice that tables don't get expanded, even though I have the ability to display all the values in a table. The reason they don't get expanded is because tables can contain tables, including tables that might be found elsewhere in the program. This ca
I am working out the advanced logic and interaction by applying it to different problems. Messaging the way the original Quake engine was set up is pretty straightforward. Half-Life 2's input-output system is interesting, but requires an additional mechanism beyond the existing keyvalues system. Lua allows some really powerful stuff. You could enter a string in the property editor, and the script itself could execute this string! But if it's confusing for me, it's going to be really confusing fo