APOCALYX is a...

free Game Engine based on OpenGL (MAIL) (SITE) (FORUM) (BLOG)

Tuesday, July 2, 2013

Just a simple APOCALYX 3D Engine tutorial


So you have downloaded the full 64 Mb Windows installer of the APOCALYX 3D Engine. Now you want to learn how to use it.
The engine is distributed with a lot of interesting demos. From their Lua sources you can learn a lot, but also a few lines of simpler code may be helpful.

Thus let's follow this code provided by R. Roswell. This source features a basic tutorial which explains how to start the engine, clear the screen, and sets the update and finalise code.
What are those "start", "update" and "finalize"? Well, it's simple: a Lua script controls completely the game (or generally, the program/simulation) behaviour. An infinite loop is executed continuously and that loop calls an "update" function defined by the developer. Usually a call to some keyboard and mouse control functions is performed, too.

But let's read the source (in red bold style the actual code, while in red italics the Roswell's comments):

The following are functions needed at the start of the script. The actual start of the script is at the bottom of the file. You may wish to read the bottom segment first.
This is used for our group of functions starting with callback.


  callback = {}

  function callback.init()



We set the title of our render window. We then also set the size of our window. This is part of the WIN object.

    setTitle("Tutorial 1: Basic Engine Template")
    setDimension(800, 600)





empty() and emptyOverlay() empty the 3D scene objects and 2D scene objects. These methods are part of the WORLD object.

    empty()
    emptyOverlay()



This removes the partial help menu located on the left hand side during rendering. With the following command it will simply display "F1 Show/Hide Help". If you want to disable the help menu completely use the command hideHelp(). These methods are part of the WIN object.

     showHelpReduced()


This sets the blanking colour of the scene. This is colour fills the screen after each frame. Part of the WORLD object.

     setClear(0.0,0.0,1.0)
  end

  function callback.update()


Here we could move our objects around and take input


  end

  function callback.final()


empty() and emptyOverlay() empty the 3D scene objects and 2D scene objects. This tutorial has no objects but it is always good practice to clear the scene. These again are part of the WORLD object.

    emptyOverlay()
    empty()


  end


This is where the engine actually gets initilised. The render loop is controlled by ApocalyX and you gain control back through the CallBack functions.
What this means is when ApocalyX Engine starts it runs our function callback.init specified in the first parameter.
Before the engine renders its next frame to the screen it also runs our function callback.update specified in the second parameter.
When you close the program or end the scene the engine runs our function callback.final specified in the third parameter. This is used to free up any resources or you might want to save some data.


   setScene(Scene(callback.init,callback.update,callback.final))


Scene is a construct method of Scene object and is used for setScene which is part of the WIN object.

Thank you Roswell for this clear presentation of the main loop of every APOCALYX game.

For more details and the complete source code of this simple example, visit the Tutorial section at the internet address: http://apocalyx.sourceforge.net/tutor-basics-01.php

Monday, August 17, 2009

Fleet Viewer



The new MekaWars' Fleet Viewer

Sunday, January 18, 2009

MekaWars meets Gun-Tactyx

Yesterday I cited the space marines that populate the starships during battles.

Space marines defending the
central area of a module

My idea was to develop the MekaWars control unit system (as you may already know, in MekaWars the players develop the AI of their units - that's how MekaWars is meant to be played) and recycle it for Gun-Tactyx-2 (that is the sequel of Gun-Tactyx).
Then, recently, I had a more interesting idea: why don't merge the two projects? This brought to an additional mechanic of the game.
During starship battles, hits can destory a unit (producing wreckage that is going to be collected), but starship modules can't. The latter are only disabled, but hulls may be robbed of their resources (up to a certain percentage).
The additional mechanics is: before materials can be brought away from a module, a space marine unit must assault it and defeat the defending troops. Here is where the Gun-Tactyx fight-style comes in.
You can imagine hard fights between starships and, at the end, you'll see assault units moving to the modules; then the attention is focused on the inner corridors of the modules, where attackers fight the defenders (as in the initial scene of the first Star Wars movie) to steal the contained resources or the whole module.

Space marine on an assault
unit waiting for the attack

Saturday, January 17, 2009

MekaWars' dungeons

The starships concept included in MekaWars was extended and improved. Additional modules apart (research module to develop the projects from which devices, units and ships are designed; factory module to effectively build devices, units and new modules), the ships have now got a crew.
I'm not talking about the pilots of units or the captains of the ships (or even the admiral that commands the fleet), but there are also the space marines that defend the ships from outer attacks.
I'll descibe them more deeply tomorrow. For the moment give a look to the starship's corridors.

Starship's corridors

Friday, January 16, 2009

MekaWars' stellar systems

Yesterday I talked about the Galaxy. Today is the time of stellar systems.

The star, one planet with a moon
and a fleet exiting the hyperspace

Each sector of the Galaxy contains a stellar system. The prototype of the system is given by a star, with several planets, each with its moons.
The asteroids rich of resources will be located in that environment, so the units must scan the space to avoid the star, planets and moons and look for asteroids or enemy units.
I already told of a different combat system. One of the differences is: once a unit (fighter, harvester, exoskeleton etc.) is destroyed its deviced will be available as wreckage, after the explosion. Special units will look for that wreckage to collect it and bring it to the fleet hulls. Then such devices will be used to assemble other units or sold to other players.
Some ship will mount research modules and factory modules to build units, but collecting devices from enemy players will save a lot of energy and resources.

Thursday, January 15, 2009

MekaWars' Galaxy

MekaWars Offline will feature a strategic map like the one you can see below.

MekaWars' strategic map

Each player has got a sector to manage, separated from other players by neutral sectors.
A fleet can travel from sector to sector through hyperjumps, because travels among stellar systems needs too time being performed at sub-light speeds.
A fleet can jump in a neutral sector only if no more than two fleets are already there (well, one can jump, but it's almost sure that the fleet will appear too near to the star to survive).
Then there are three possibilities: if no fleet is there, the harvesters can freely work to collect resources (the usual iron, silicon and uranium) to research and produce new devices, units and ship modules; if there is a friendly fleet that is already harvesting, the cargos can commerce exchanging materials; finally, if there is an enemy fleet, a battle could take place.
A new kind of battles, different from the usual ones described in past posts and shown in the demo, will be available, but let's discuss it in one of the next posts.
Different rules apply when a fleet enters the sector where the base of a player is located: only one enemy fleet at a time can enter and enough time since the last attack must have passed.
Just an additional note about resources: asteroids rich in uranium (useful to produce energy) will be more frequent near the center of the galaxy, the silicon (useful to build devices) will have an higher density along the border, while iron (necessary to build any kind of structure) will be located more frequently in between.

Wednesday, January 14, 2009

MekaWars' simulator

Almost three months have passed since the last post. I was quite busy and it was impossible for me to publish the promised daily post.
However recently I've found some spare time to spend and I used it to continue the development of MekaWars Offline. In particular I have successfully ported the already working Lua simulator to C++, so very large starship battles are going to be possible.
The port wasn't very difficult, because the Lua code was already object oriented, and the final result is more mantainable and error proof.

CodeBlocks & Borland C++ at work
to compile the MekaWars simulator

As you may know, MekaWars Offline is a project different from MekaWars Online. In fact, the latter is going to be played online among a large number of users, who are going to manage their empire like in other browser games, but its core will be the battle simulator of MekaWars Offline. This one will be more similar to a mixture of JRobots and Gun-Tactyx (where the players are only going to share the algorithms of their bots), as I'm going to describe in the next posts.