We asked the team behind the game if they could share some insights into the Ogre3D usage and how the game was built in general, and Suny was kind enough to provide those:
What is SHMUP Creator
SHMUP Creator is a shoot ’em up maker. It allows people to create games without any coding or scripting. The games can use 2D sprites or 3D models. The game editor offers a lot of features allowing people to create gameplay, weapons, particle effects, and so on. We tried to make this tool easy to use and powerful enough for more experienced users. The team is tiny: I’m the only coder (+ musician + texture artist + sprite artist), and one other artist made the Art direction UI design and modeled all the 3D assets.
I’m using Ogre 13 and the DirectX9c renderer. I only modified a few lines of Ogre code to simplify my workflow (for example, to not crash when a font is looking for a non-existent character), and I wrote a few simple particle affectors, like simple damping or another one that keeps an effect 2D. I also wrote all the shaders, trying to be pretty but fast.
Shoot ’em ups are simple games, but performance is very important. I wrote an optimized bullet engine that creates a manual mesh object per bullet type. So I can display hundreds of bullets with one draw call per type. Also, the engine can create 3D or 2D games, and for 2D games, I’m displaying a quad per sprite. When a game is exported, I create static meshes for backgrounds to reduce the number of draw calls, and it helped quite a lot with performance. Users are quite surprised by the speed of the 3D engine. I’m not doing very fancy things (no GI or AO, no PBR for now) but it’s working quite well.
GUI and other libraries
The SHMUP Creator is mainly a tool, and obviously, the UI is a very important part of the product. I’m using MyGUI for this, with a lot of custom animations and transitions. I really enjoyed using MyGUI and I hope it will be maintained in the future! Other libraries used are Bullet for some simple ray/mesh collisions, Fmod for sound, assimp for 3D import and export, and SDL for gamepad and windows creation. I also use a tiny bit of boost and rapidxml for serialization.
I started to work on this project a long, long time ago. Actually, it’s my first C++ project ever 🙂 I tried Unity, but their rendering engine was very bad at this time, so I choose Ogre. There are downsides, but the good thing for me was that I had to learn a lot of things in a variety of subjects and do everything by myself, like writing all the shaders, optimizing the rendering pipeline, etc. All that knowledge is invaluable to me and I use it every day in my day job. Also, the community is not very important those days, but people are quite friendly and I can always find someone to help me if I need some help (Thanks again Paroj!).
SHMUP Creator is a game-making tool. I’m amazed by the quality of games made by the SHMUP Creator users: you can already play some of them on itch.io, and I hope some of them will be sold on Steam soon. So, in the end, I hope this product will help create a lot of games using Ogre 🙂
We asked the team behind the game if they could share some insights into the Ogre3D usage and how the game was built in general, and Robin was kind enough to provide those:
Spellheart is a MOBA (Multiplayer online battle arena) game. You can build your entirely own class by choosing items and abilities, and with an extremely customizable server that anyone can host, the possibilities are endless.
The game is based upon an idea that I have never seen before. Most RPG games are static, limiting your build options and forcing you to min/max. In this game, there is no best build because there are no classes. You create your own build without limitations or restrictions. With a customizable server, gameplay can be balanced in real time.
I have been working on Spellheart myself from the start, though some friends have helped me with a few assets. As I am only a programmer, I can only do that part of the game. The 3D models and sounds in the game are mostly from people that put them out for free with good copyrights.
I am using Ogre version 1.11.2, but I have modified the source for some minor things, such as making particles be able to use an atlas. I have also made a lot of custom particle affectors. All shaders in the game are written by hand, there is no on-the-fly automatic generation of shaders. Though I have written a program that helps me with this, so that I only have to alter one base shader to then generate all shaders at once for D3D9/ CG/ D3D11.
I do not use Deferred shading or anything like that, just normal Forward shading. Since my shaders can handle up to 20 lights and the game being top-down, there is no need for me to have support for more lights. Forward shading is therefore perfect for this game, while being faster than the newer techniques. I use a lot of batching through a custom-written ManualObject class to make a lot of smaller objects into one single batch in a very optimized manner. This happens for things in the game such as grass and footsteps on sand. I also use the built-in Instancing (HW Basic) on the static objects in my game. Since the game is top-down, this usually does not help that much, but “Many a little makes a mickle”. I live by that expression, optimizing everything I see can be a bottleneck. That is why the game can run in a very high FPS (500 FPS with a few changes in the options menu on my computer).
An edited version of Gorilla is used for the GUI of the game, but I also made a custom atlas generator for it to make it much easier to use. This also enables me to use a normalmap for each GUI element which is shown by a light from the cursor.
At the moment, the game only works for Windows (x64), but as Ogre can be compiled for all platforms, Linux and Mac could be added in the future (and also then using GLSL instead of CG).
The option menu in the game has extremely many options to make the game run on any kind of hardware (even Fixed Function Pipeline is possible through this).
I like Ogre because its community is helpful and that you can easily alter the source code if you want. Many game engines out there are based around being a tool-user instead of being a programmer, and I don’t want that. Those engines also seem to have performance issues in many of their games, unless you have a very high-end computer. Therefore, Ogre is the ultimate engine for me. It allows me to be a programmer and not just a tool-user, while being able to make games for low-end computers all they way up to high-end.
Today we want to highlight one of the many games based on Ogre3D that have come out recently. This time: iUBES:2
We asked the team behind the game if they could share some insights into the Ogre3D usage and how the game was built in general, and codrer was kind enough to provide those:
iUBES was developed using Visual Studio Express + Ogre 1.9 ; I didn’t upgraded simply because everything was running perfectly fine, without any need for additional power. Even if I’m looking forward to try out Ogre 2.x in the near future.
From my point of view, one of the main advantage of using Ogre engine is that it doesn’t carry any overweight. For this indie / somehow minimalistic design, it’d be a shame to ask for consequent configuration: Ogre helps iUBES running on almost any low-end laptop (DX9/ XP/ integrated graphics…).
At this time I only released a Windows/DX9 version of the game. However, beta testers proved the game to be running perfectly through Play On Linux / Play On Mac steam emulation. I was quite surprised actually.
No change have been made to Ogre, the game simply dynamically links to ogre’s dll right from the SDK. I only had to use my own functions for a couple of optimizations like math (hundreds of units bouncing on a spherical ground consume a lot of trigonometry), strings functions, … those kind of small things.
I didn’t use further libraries than Ogre itself. I even decided at some point to discard OIS (I feel more confortable using windows API directly). Everything else (GUI, winsock, directsound…) has been written from scratch for maximum flexibility.
Again that’s one of the things I DO love with Ogre: this is a pure rendering engine which doesn’t mix unrelated things like most game engines do. We can create our very own setup.
Except from trees and the iubes themselves which are very low-poly assets created using 3DS, the world is entirely procedural. Ogre’s ManualObject class was a huge friend.
As each building is build up bloc per bloc (hundreds), Ogre’s convertToMesh() method could have been a bottleneck. Hence each construction is split between a couple of meshes, then piled up and revamped from time to time during runtime.
Apart from water which use a classic 2.0 fragment shader, all the other textures are using the fixed pipeline. Terrain and Constructions use VertexColourTracking plus modulative detail textures. Since meshes are built procedurally, vertex colours have major benefits here (using basic math to finely darken inner faces of a building to improve lighting, and so on).
Fun fact: while I use PSSM hand written shadows on other projets, for this game I switched back to… built-in Ogre shadows (i.e. SHADOWTYPE_TEXTURE_MODULATIVE). Apart from some very little glitches, it fits quite perfectly my spherical world!
At this point I may confess that I’m a huge fan of the K.I.S.S. principle…
At the end of the day, this game only uses a fragment of Ogre’s capabilities, but benefits utterly from its versatility. “Hey let’s make a procedural RTS online game in a spherical world” – for such a custom idea, Ogre was the obvious way to go.
Once again, we want to highlight one of the many games based on Ogre3D that have come out recently. This time: “Shadows: Heretic Kingdoms“.
As usual we asked the team behind the game if they could share some insights into the Ogre3D usage and how the game was built in general, and the guys from bitComposer were kind enough to provide those:
The game was developed on an older Ogre version, but continually upgraded to the most recent versions (currently 1.10). We are thrilled to get the game to Ogre 2.0 though as there are some limits which we are not able to overcome with the 1.x versions (mostly related to hyper-threading and slow scene management).
Apart of a few bugs fixes we have not made any modifications to Ogre core. However, we are using some extensions of shader rendering pipeline. To be more specific, we have modified deferred shading with cubemaps projected lights, added off-screen particles, outlines glow and color correction to name the biggest changes.
We are supporting both DirectX 9 and DirectX 11 renderers. DX11 was included because of the improper detection of graphics cards on some computer with multiple graphics cards with DX9 version.
For 3D modelling, animation and export we are using Maya. Some outsources create their models in 3D Studio and we import those into Maya environment and export into the games.
We have developed our own editor which we are using for scene assembling which includes ragdoll editors, lightning.
For particle effects we are using Particle Universe with in-game editor for seamless implementation of particles to the game environments.
For physics simulation in Shadows we have used the Bullet library (mostly for collisions and ragdolls).
Scripting is done using LUA language. A lot of external files are XML formatted.
For text content handling (there is a lot of text content as you can imagine) we are using our own proprietary tool Locedit which is also available for 3rd parties if someone may be interested in. It features multiple languages, Unicode, subtitler for movies, XLS export/import, voice check and direction, etc.
Game content is encrypted and packed to improve loading times.
User generated content is planned to be distributed using Steamworks.
The entire toolset will be released for the community together with the game sometimes in the near future. We believe that Ogre community may benefit from our tools even for their own projects… It certainly will lack the polish and proper documentation of Unreal but it likely may be the most complex tool for Ogre and available for all Shadows owners without any additional fee.
We are currently starting porting of Shadows to Ogre 2.0 together with the Ogre team, so I hope our work will contribute to early availability of complete 2.0 version of Ogre.
Today we want to highlight another game based on Ogre3D that made its way successfully onto Steam: Kromaia. Check it out on Steam and watch the trailer at the end of this post.
The frantic old-school action of classic coin-op shoot-‘em-ups comes crashing headlong into the 21st century with Kromaia, exclusively for PC. Explosive high-octane blasting combines with hordes of enemies in a 360˚ environment, allowing you to fly, spin and shoot anywhere and everywhere!
Where most shooters see you racing along a fixed path to blast anything in your way, Kromaia does things differently. Set in three-dimensional space, you’re free not just to explore but also dodge and blast through hordes of enemies all intent on destroying you! With your objectives spread out in all directions, it’s a true test of high-speed flying and sharpshooting skill – only the greatest space pilots need apply!
True 360˚ Action – Kromaia sends classic coin-op shooting action hurtling into a new dimension, allowing players to explore huge 3D worlds full of things to blow up!
Harder, Stronger, Faster – The better you do, the tougher things get; adaptive AI adjusts to your abilities, ensuring you’ll always face a true challenge!
The Bigger They Are… – Survive through all your objectives and you’ll have a bigger challenge ahead: gigantic bosses that need to be destroyed before they destroy you!
Take Your Pick – Four unique craft, each with their own style of weaponry, let you experience the action of Kromaia in your own way. Rapid-fire guns, homing shots, powerful blasts or melee strikes… it’s totally up to you!