Nongl

Overview

Nongl is free, libre and open source cross-platform game development library (FLOSS). You can get the source code here.

Table of contents

History

We started developing android games in 2010. Till today (12/2015), it’s our major platform. However, ever since the beginning, it caused us a lot of frustration. It’s like, the worst operating system we ever had to use. Poor documentation, counter intuitive mechanisms, awful services, 1 year deprecation policy and the MOST BUGGY developer tools on the planet. We had to do something about it, and we did. NONGL!

Development mindset

NONGL stands for NOMone Native Game Library. In short, we tried to COMPLETELY abstract the underlying operating system. We wanted to forget android altogether. We also wanted the interaction between the library and the system to be limited to the main and basic services only. Everything that could be done inside the library had to be done inside the library. So for example, while Nongl has Activities, they don’t correspond to android activities and have nothing to do with them. While Nongl has Views and Layouts, they are also different from those provided by android. You get the point.

This kept the interaction with the underlying system restricted to a minimal set of apis. At this point, we noticed that porting Nongl to other platforms was just a matter of writing these abstraction apis for the target platforms. So we did a bunch of platforms! Linux, Mac, iOS and HTML5 (using Emscripten), and they worked beautifully!

Samples and future

We’ve used Nongl to make a bunch of games (and stuff). Check our portfolio for samples. It’s where we feel home. We’ve actively developed Nongl for more than 2 years, believing it to be totally worth it. We’ve witnessed Unity, Unreal and pretty much every engine under the sun go free, but we didn’t abandon Nongl. Maybe it wasn’t a very good decision, but we don’t regret it. In fact, we are going to rebuild Nongl from scratch once again! This time, we are calling it Addaadah Engine and we are making it open source right from the beginning. Although we are not going to work on the old Nongl any longer, we’ll borrow lots of concepts, code and all the experience we gained developing it. This post stands for historical and emotional reasons, and for those who are curious about the origins of Addaadah Engine.

Features

Platforms

  • Linux, Mac, Android, iOS, HTML5.

Core Features

  • Well-defined minimal system abstraction layer.
  • OpenGL/WebGL graphics.
  • Tasks and task scheduler.

UI

  • Activities and activities stack.
  • Dialogs.
  • Onscreen notifications.
  • Themes.

Flexible extensible views

  • ImageView, ColorView, TouchableView, Button, ToggleButton, TextView, TileMapView, NinePatchView, SegmentedImageView …etc.

Flexible extensible layouts

  • AbsoluteLayout, LinearLayout, ListLayout, ScrollableLayout, StaticLayout …etc.

Viewport management

  • Viewport transformations and layout local coordinates.
  • Custom clipping.

Drawing

  • Optimized opaque and transparent drawing passes.

Sprites

  • Sprite, AbstractSprite, NinePatchSprite, SegmentedSprite, TextSprite.
  • SpriteBatches (dynamic and static).

Primitives

  • Quads, lines, rects.

Text drawing

  • Bitmap fonts.
  • Bitmap font generation tool.
  • Automatic text measuring and layouting.

Animations

  • Custom composite animations.
  • Interpolators (tweens).

TileMaps

  • TileMapView.
  • Multiple tilesets.
  • Multiple layers.

Textures and frame buffers

  • Automatic texture loading and management.
  • Texture regions.
  • Texture atlases.
  • Pixel maps.
  • FrameBuffers (render targets).
  • Texture packing.
  • Texture analysis and segmentation tool (alpha blending reduction).

Compressed textures

  • Etc1 (with automatic alpha texture attachment).
  • PVR.

Texture formats

  • PNG.
  • KTX.
  • PVR.

Compression

  • zlib compression.
  • Assets compression.

Audio

  • Audio (music and sound) management.
  • Audio fade in/out.
  • Audio pitch control.

File system

  • Persistent preferences.
  • File object.

Extensible streams

  • File streams, buffered streams, compression streams, byte buffer streams.

Gesture detection

  • Multi-touch gestures.
  • Gesture recording and replaying.

Networking

  • Http requests.
  • Sockets.

Game services

  • Apple Game Center (iOS).
  • Google Play Games (Android).

Misc

  • Entity-Component-System framework.
  • Our own managed objects (shared_ptr, weak_ptr …etc with a twist).
  • Simple particles.
  • Extensible and replaceable shaders.
  • TextBuffer (our own String object).
  • Text parsing utilities.

[br].. and much more!

Comments are closed