Monday, July 2, 2012

Work progress - part two

In last article I wrote a bit how did everything started. In this post I am going to focus more on describing the development process of particular systems in our engine. In case someone does not know, we are implementing our own game engine called "LD Engine". Of course we thought about using something that already exists like Andengine, libgdx or even commercial ones like Unity, but we have decided to write our own engine because of one particular reason... We did not want to use nothing that complex. Our goal is to create fast and efficiently working engine in which we have full control and knowledge what is going on. 

Let's get to specifics, below is a list of engine features for today:

Input System:
  • touch-screen
  • keyboard
Audio System:
  • music
  • sound effects 
Fonts System:
  • dynamicly loading fonts from *.ttf files
Graphics System
  • textures
  • sprites
  • rendering modes
World System:
  • tile based world
  • save and load map from files
  • customizable WorldObjects
  • supporting up to 4 map layers
  • supporting 2D Roguelike RPGs
Player System:
  • advanced experience system
  • hero's abilities (customizable action and effect)
  • build-in Inventory System (customizable ItemObejcts)
  • support for Achievements and Titles
Physic System:
  •  vectors math
  • matrixes math
  • customizable world rules
  • support for velocity, acceleration, gravity, wind force, elasticity, friction, air resistance, displacement of water
  • custom forces and resistances
Lightning System
  • point lights (tile based)
  • global lightning (tile based)
  • customizable light colors
Collision System
  • world collisions
  • objects collisions
Particle System
  • customizable effects
  • highly efficient - 20.000 particles without fps drop
File I/O System
  • custom file formats
  • saving and loading game data
  • JSON writer and reader
  • XML writer and reader
  • Particle Editor
  • Level + Dungeon Editor
  • Bitmap Font Generator
Those are features that are available for now, but we are still going to slightly extend them. For example we thought about adding Network System, just for collecting anonymous data or to sharing statistics and achievements with other players (maybe later we will think about implementing multiplayer).

Anyway let's talk about things we did in May. 
First thing we did was implementing graphics system. We created basic OpenGL structure (GLSurfaceView, Renederer, etc.) and we designed method to load, release and hold textures in GPU memory. Then we created simple method that paints things on screen using draw_texture() (for testing purpose) and we moved on to programming the core of engine.
We started by creating basic game thread and Update System. Then we upgraded it by adding game loop and FPS counter. Of course we made sure that game will run smoothly and with stable speed on slow and fast Android devices. 
After that we implemented Input System and we spent next two days on synchronizing it with game loop.
25th May we implemented structure for objects in game (which can be found below), and designed basic usage of sprites. We also fixed some bugs and added support for landscape mode.
LD Engine - Objects Model
LD Engine - Objects Model

In last week of May we created simple GUI for testing purpose and we implemented fully working Physic System. 30th May we updated our GUI Component and we gave users ability to customize every single element in UI.

I think that is enough informations for today :) In the part three of this series I will say something about "parallax scrolling", Font System and World System that we have developed. 

No comments:

Post a Comment