In today’s “A Closer Look At” guide we will be taking a look at the App Game Kit 2 game engine. The Closer Look at Series is a combination preview, review and getting started tutorial aimed at giving you a solid overview of what working in a particular game engine is like. App Game Kit is a cross platform game engine capable of making games for Windows, Mac, iOS, Android and Blackberry devices using Mac or Windows development environments. App Game Kit regularly costs $99, although if you are reading this near the publish date ( 7/12/15 ) it is currently available in the Humble Gamedev Bundle with several other tools.
AppGameKit is a cross platform, mobile friendly 2D/3D game engine, although 3D is a work in progress. AGK is programmed primarily using AGK Script, which is a BASIC dialect with some C++ style features. If the word BASIC caused you to recoil in terror from your screen, don’t worry, AGK is also available as a C++ library. If the word C++ just recoiled from your screen, hey… there’s always AGK Script… 🙂 Over the course of this article we will take a quick look at both. AppGameKit 2 was the result of a successful Kickstarter campaign and is a product of The Game Creators who previously developed Dark Basic and 3D Gamemaker.
There is also an HD video version of this article available here or embedded below.
Hello AGK
Let’s jump right in with a pair of Code samples. First in AGK Script, then in C++.
AGK Script Example
// Project: test // Created: 2015-07-10 // Setup the main Window SetWindowTitle( "My Game Is Awesome!" ) SetWindowSize( 640, 480, 0 ) // set display properties SetVirtualResolution( 640, 480 ) SetOrientationAllowed( 1, 1, 1, 1 ) // Create a Cube 100x100x100 at the Origin box = CreateObjectBox(100,100,100) SetObjectPosition(box,0,0,0) // Add a light to the scene CreateLightDirectional(1,-1,-1,-0.5,255,255,255) // Set the position of the camera and aim it back at the origin SetCameraPosition(1,0,100,-150) SetCameraLookAt(1,0,0,0,0) rotationY# = 0 // Gameloop do // Display the current FPS Print( ScreenFPS() ) // Rotate our Object SetObjectRotation(box,0,rotationY#,0) // Display back buffer Sync() // Update Rotation rotationY# = rotationY# + 1 loop
Here is this code example running:
C++ Example
// Includes #include "template.h" // Namespace using namespace AGK; app App; void app::Begin(void) { agk::SetVirtualResolution (640, 480); agk::SetClearColor( 0,0,0 ); agk::SetSyncRate(60,0); agk::SetScissor(0,0,0,0); // Load a Sprite at index 1 agk::LoadSprite(1,"logo.png"); // Scale the sprite to 25% of it's size agk::SetSpriteScale(1, 0.25, 0.25); } void app::Loop(void) { agk::Print(agk::ScreenFPS()); // On gamepad press, spacebar hit, touch or left click enable physics on our sprite // And make that sucker bouncy, gravity does the rest if (agk::GetButtonPressed(1) || agk::GetPointerPressed()){ agk::SetSpritePhysicsOn(1, 2); agk::SetSpritePhysicsRestitution(1, 0.8); } agk::Sync(); } void app::End (void) { }
Here is this code sample running:
There is a bit more to the C++ example than the code shown here. AGK is provided as a library for C++ use. To get started there are also a number of templates that you can copy and start from. Each template has a bootstrap class containing the required code to start AGK. For example the Visual Studio project provides a WinMain implementation for you. Here are the currently available templates for a Windows install (MacOS has XCode projects available for iOS and Mac):
Of course you can of course create your own application and simple use AGK as a C++ library if you prefer.
Tools Included
AGK IDE
If you are working with AGK Script, the majority of your development will be done in AGK IDE. AGK IDE is a Code::Blocks derived IDE with full text editing, syntax highlighting, code completion and debugging support for AGK Script.
I experienced no lag when using the IDE. Most of the features you would expect in a modern IDE are available, including code folding, find/replace, intellisense and code hints:
Refactoring tools are all but non-existent and unfortunately there is no local help. (We will discuss help files shortly).
Debugging is supported:
But the implementation is barebones, limited to break points, step over/out and displaying the call stack. You can inspect variable values, but you have to enter them manually in the Variables area. There is no ability to inspect, add watch or set conditional breakpoints. I believe this functionality is relatively new, so hopefully it will be extended with time.
If you choose to work with C++, you will not use AGK IDE at all, instead working in your C++ IDE of choice. As mentioned earlier, several templates are provided.
Placement Editor
AGK also ships with the Placement Editor, a fairly simplistic tiled level creator:
It enables you to place varying sized tiles, perform transforms such as rotation and mirroring, layer up and down and supports grid snapping to grid for precise layouts. The UI however leaves something to be desired, with the scroll bars only supporting movement via the arrows and panning controlled using an onscreen controller. Additionally you have to exit the application and copy graphics to the media directory to add new tiles. Unfortunately it’s also lacking some seriously required functionality such as defining collision volumes or physics properties. It does however enable quick creation of tiled backgrounds.
AGK Player
One other cool feature of AppGameKit is the AGK Player, available on mobile devices:
By pressing Broadcast in the IDE, you can easily see your code running on device without having to bundle/sign/deploy like normal. It is available for download in the app store, except on iOS where you have to build and deploy it yourself using XCode. This tool enables rapid on device testing during development and can be a huge time saver.
Samples and Demos
AppGameKit ships with an impressive number of AGK Script code samples:
Including a few complete games:
And some user provided examples:
Here is the SpaceShooter example in action:
Documentation and Help
I mentioned earlier that there is no local documentation available, which is unfortunate. There also doesn’t appear to be a generated class library reference, which is also unfortunate. That said, the documentation available for AGK is actually rather solid and has been complete from my experiences. It is available entirely online so you can check it out yourself.
The scripting language itself is quite simple and documented here in reference form. While a more broad language introduction and overview is available here. As mentioned earlier, there are also dozens of examples included to learn from. There are a series of guides available covering specific topics such as networking , platform publishing and more. The closest thing to a class reference is the Commands documentation, you can toggle between C++ and BASIC code examples:
AGK also has a very active developer forum available.
The Library
Of course we should talk about what functionality is available in AGK. Over all it’s quite comprehensive, although the 3D functionality is very actively under development and some functionality is obviously missing or under development ( such as animated 3D model support ).
The follow feature list is taken directly from the AGK site.
- Write once, deploy technology
- Code in BASIC or native (C++)
- Device independent
- Cross Platform IDE
- Develop on Windows or Mac and deploy to Windows / Mac / iOS / Android / Blackberry 10
- Broadcast test apps to devices over Wifi
- Auto Complete
- Function Lists
- Code Folding
- Export to exe/app/apk/ipa
- 2D Games Engine
- Tweening
- Blending modes
- Spine Support
- Box 2D Physics
- Particles
- Drawing commands
- Text support – fixed and variable width
- 3D Engine
- Primitives
- Positioning
- Rotation
- Shaders
- Collision
- Cameras
- Lights
- Audio/Visual
- Video Playback
- Sound
- Music
- Input Agnostic
- Direct Input Control
- Touch
- Keyboard
- Mouse
- Accelerometer
- Joystick/Controllers
- Sensors
- Camera Access *
- GPS *
- Geo-location *
- Inclinometer *
- Light Sensor
- Mobile
- Rating an app *
- In-App Purchasing *
- Adverts *
- – Chartboost
- – Admob
- Networking
- Messages
- Shared Variables
- Misc
- File IO
- Facebook *
- File IO
- Extensive help & tutorials
- Time & Date
- Enhanced image control
- QR Codes
- HTTP
- Edit Boxes
- Zip file control
- Coming Soon…
- Debugger
- 3D Engine Enhancements
- File IO
- 3D Bullet Physics
- Extension System
* Selected platforms only.
Conclusion
I certainly haven’t spent enough time with AGK to consider this a full review by any means. The following are my initial impressions when working with AGK. I am personally not a huge fan of the BASIC language, even as a beginner recommendation, but AGK Script is accessible and the included tooling make AGK an appropriate choice for beginners, especially with the included examples and solid documentation. I was able to use the library very much by intuition and the ability to code entirely in C++ will appeal to several developers. The mapping between C++ and BASIC is very natural but this also comes at a cost. The C++ side of the equation is very “flat” in structure, using no OOP and a disconcerting number of “magic number” type variables. In a simple project, AGK is a solid and approachable choice. In more complex projects, without writing an organizational layer over top, I could see quickly developing a mess of unmaintainable code.
The tools included with AGK are functional but could both use a bit of polish. The editing experience in AGK script is fine but the debugger is fairly young and needs some work and the some more refactoring support would be nice. Integrated and context sensitive help would also be a huge boon. For the most part though there is enough functionality in the IDE that working in AGK Script wouldn’t feel like a chore. The level editing tool is nice in that it exists, but the functionality is extremely limited and the UI isn’t the best. For anything but the most trivial game, I would imagine you would find yourself wanting a more mature tool like Tiled, although a loader is available, so this is certainly an option. Also, the editor is only available on Windows machines.
From a developer perspective, for a 2D game, AGK provides pretty much all of the functionality you would expect and some that is a bit unexpected, like cross platform video playback. 3D is coming along but missing some key functionality. The code experience is incredible consistent, once you’ve figured out how to do one task, you can generally guess how other tasks are going to be performed. You can accomplish a great deal in AGK in a very short period of time, but I do question how well the design would scale to larger projects. As a C++ library, AGK could also be considered as a cross platform competitor to libraries such as SFML or SDL. AGK does appear to be a good solution for new developers, especially if you like the BASIC programming language or wish to work with an approachable C++ library. For more experienced developers, AGK is a productive and easy to learn library supporting a respectable number of platforms with the option of high and low level development. I just don’t know how well this product would scale with project complexity.
The Video