Due to several inquiries about how I created my inventory, crafting, and storage systems, I would like to explain my approach in more detail. In this blog post, I won't use any code but rather focus on explaining the underlying logic.
1. The InventoryItem Class
The foundation of these systems is an Item class, which I abstractly created to represent different types of items (materials, placeable objects, weapons, consumables, etc.). The reason for an abstract class is straightforward:
So we went through a lot of fragment shaders. Did some vertex displacement. Went through tessellation. Now, some geometry. I don't have much to say about it. Just keep poking at it with a proverbial stick and eventually situations start to look familiar and you know what to do because it's similar to stuff you've encountered before. It does seem to me that there's not a lot of variety in geometry shaders. There's a bit, though. Enough to make it interesting. But grab these shaders and you'll hav
Ultra Engine 0.9.3 is here, with usability improvements, bug fixes, and new AI-powered features to make game development easier. You can get a discount now in our store or on Steam all week.
"Futuristic Room" by Dennis Cliofis
Object creation has been overhauled with a more visual approach that lets you easily select the object you want to add to the scene.
You can also insert a new object into the scene tree, under the selected node, or in the scene root.
I had already created a similar window handler for Leadwerks in a previous project. As I'm currently importing my project into the new engine, I thought it was time to refine this functionality.
But what exactly can the Window Handler do?
As the name suggests, it manages multiple "UI Windows" so that only one is displayed at a time. This is particularly useful when working with different windows for the UI, such as one for inventory, another for a crafting menu, and yet another for dialog
This component generates a Mouse Movement Controller featuring a free-look mode. Typically, such character controllers find application in ARPG (Action Role-Playing Game) or RTS (Real-Time Strategy) games. In this setup, you observe the character from a top-down perspective and direct their movement to a specified position by clicking the left mouse button.
The Component itself need the terrain name and the name for the walk animation. Also your character needs an idle animation.
Ultra Engine unlocks the full power of your GPU to deliver up to 10x faster performance for your game. Ultra Engine is now available in Early Access, both in our store and on Steam. Use coupon code "LAUNCH" to receive a discount before January 1.
Ultra Engine is a huge leap in technology that provides a new future-proof foundation, while keeping the strengths and general design philosophy we developed in Leadwerks. There were many major underlying changes made to create a better development
Back in July, I set out to create a base for creating a version of Cyclone with Ultra Engine. I've gotten a lot of feedback from the release and started to conceptualize ideas on how to prevent or limit on making the same mistakes.
One major goal I had was to compartmentalize the system. This should just exist on it's own and game code should just lay on top of this. This was possible thanks to the event system which cuts down on the number of pointers that need to be passed. Components can
At long last, the engine that felt like it would never be done is here. This is all the result of an idea I had and wanted to put to the test. Of course I never anticipated it was possible to deliver a 10x improvement in rendering performance, but here we are with the benchmarks to prove it.
Research & Development
The last four years of research and development were an opportunity to rethink and redesign what a game engine should be. Along the way there were a few ideas I had that
Hello!
This blog was created in 2012, but here I am resurrecting it. The option to create a new blog disappeared when I deleted another old blog that had no articles.
Anyways, please ignore the previous entries, because they are really old and outdated. The code shown in those blogs do not work with LE 4, and I don't even think I have the engine that was released around 2012.
To catch up a bit; back then I ended up doing contract work with various game engines, then getting the jo
With the new engine coming along and me noticing limits with Cyclone's current architecture, it's time for me to start thinking about the mistakes I've made and how would avoid repeating them with the new engine. Luckly, Ultra Engine is far more flexible than Leadwerks thanks to smart pointers and the event system. I wish to share some of my plans going forward.
Log, Log, Log Everything!
I personally never look at my log files. I instead look at the CMD output and the debugger to see w
Attention: The addition of our custom model file format has changed the way this system works. Colliders are now saved into the Ultra MDL file.
I haven't been blogging much because I am making so much progress that there would be too much to cover. In this article I will talk about one little system I spent the last week on and show the improvements I have made to the workflow over Leadwerks.
In the asset editor, when the root of a model is selected, a "Collider" field appears in the p
Not long ago, I wrote about my experiments with AI-generated textures for games. I think the general consensus at the time was that the technology was interesting but not very useful in its form at the time. Recently, I had reason to look into the OpenAI development SDK, because I wanted to see if it was possible to automatically convert our C++ documentation into documentation for Lua. While looking at that, I started poking around with the image generation API, which is now using DALL-E 2. Ste
As I have explained before, I plan for Ultra Engine to use glTF for our main 3D model file format, so that your final game models can be easily loaded back into a modeling program for editing whenever you need. glTF supports a lot of useful features and is widely supported, but there are a few missing pieces of information I need to add into it. Fortunately, this JSON-based file format has a mechanism for extensions that add new features and data to the format. In this article I will describe th
I have two goals for the art pipeline in the new game engine.
Eliminate one-way 3D model conversions.
Use the same game asset files on all platforms.
In Leadwerks, 3D models get converted into the proprietary MDL format. Although the format is pretty straightforward and simple, there is no widespread support for loading it back into 3D modeling programs. This means you need to keep a copy of your 3D model in FBX and MDL format. You may possibly want to keep an additional fi
Here's a cool effect I don't know why I didn't think of this sooner. This shader uses parallax occlusion and a trick similar to that in the weeper (22a_weeper). The idea is that you can get a cheap refraction effect by multiplying the texture coordinates of the diffuse texture with the normals (naturally you'd have to establish the diffuse "outcolor" after you establish the normals). It looks something like this:
float amplitude = 0.1;
vec4 outcolor = texture(texture0,ex_texcoords0 + normal.x
Package plugins are now supported in Ultra Engine 1.0.2. This allows the engine to handle other package formats besides just ZIP. In order to test this out, I created the Quake Loader plugin, which currently supports the following formats used in the original Quake game:
PAK
WAD
BSP (textures)
SPR
LMP
Why Quake? Well, the original Quake game is what got me into game development through modding, but Quake is also great for testing because it's so weird.
Took some time to figure out the best approach to do this but I've got it now.
To start with I created components that are all the same size. I am using 16x16x16 components. The voxel terrain is 128^3 so dividing that evenly is 8^3 components. In this image there is 512 of them. The red are inactive and the green are active (they have a model the represents the surface). This posed a problem for very large terrains. I would need a component size small enough so that LOD and real-time
After months of work on various base classes I have finally started to re-build my game in Ultra. There is still a lot of work to do to these classes (voxel terrain especially) but my aim is to keep the ball rolling by getting them to a workable state so I can build a playable game and then work on fine tuning later. Plus, I find it more fun to fine tune classes when there is a working game at your finger tips rather than just a bland test project.
I started off with voxel terrain. Basic
I wanted to take some time to investigate geospatial features and see if it was possible to use GIS systems with Ultra Engine. My investigations were a success and resulted in some beautiful lunar landscapes in a relatively short period of time in the new game engine.
I have plans for this, but nothing I can say anything specific about right now, so now I am working on the editor again.
Leadwerks had a very well-defined workflow, which made it simple to use but also somewhat limi
I'm working on a editor which translates english into C++ for Ultra Engine in realtime.
The idea is to make using Ultra Engine really easy, and it should suit beginners as well as advanced users.
Over time I plan to make it an universal human language to computer language translator which can be configured to use any game engine or other engine.
I'm also wondering if a commanding sentence is more easy than an spectating sentence, but perhaps both can be used to make it suit all cases.
I started using Ultra Engine on 2023-01-18. Learning to use the engine has been really easy.
The documentation is very clear and I can search for keywords I want to learn about. Each command has a fully working example, so I can quickly copy-paste and try the code.
The installer is also amazingly fast and automatic, and updating to the latest engine is just a click away. Updating my projects to use the latest version is also fully automatic by clicking on the yellow sign.
The supp
This diary counts so much steps to reach a good experience of car driving with Leadwerks 4.6, that it just felt so often like unreachable.
So as we know the car is built with 8 joints, 4 hinge joints for the tires + 4 slider joints for the dampers
I just thought last week about implementing a new little trick like using a spring joint more to connect the visible car to the invisible body of the car.
Set the mass to about 300 (usually to heavy for joints) and set the Gravit
In this post, I want to introduce you to my GitHub repository: https://github.com/klepto2/UltraEngineUtilities
Currently, there is not that much available, but I am working on adding more utilities and helper classes, which will help to work with UltraEngine. I had the privilege to be one of the first users of UltraEngine and was able to see the enormous amount of potential right from the beginning. So with the repo, I want to give some of the small or bigger helpers I have developed or ma