This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
proton_features [2010/12/27 05:42] seth |
proton_features [2013/07/26 01:34] (current) seth |
||
---|---|---|---|
Line 1: | Line 1: | ||
{{:proton_header_black.png?|}} | {{:proton_header_black.png?|}} | ||
=== Features === | === Features === | ||
- | * Create 2D and 3D games that run on Windows, Mac OS X, iOS, Android, and Palm WebOS in C++ | + | * Create games and apps that run on eight platforms in C++: OSX, Win, iOS, Android, WebOS, RIM Playbook, Linux, Flash |
- | * Entire engine based on GL (OpenGL ES 1.X or standard Open GL modes) | + | * Entire engine based on GL (OpenGL ES 1.X or GL 1.3) |
- | * System specifics are totally abstracted, hiding the gotchas and caveats of each platform | + | * **In App Purchase** integrated for iOS, Android, and webOS through a single interface (IAPManager) |
- | * Scene graph component based system that handles game and GUI objects together (they are the same thing) | + | * Third party systems integrated: [[http://www.tapjoy.com|Tapjoy]], [[http://www.hookedmediagroup.com/Mobile/|Hooked]], [[http://www.chartboost.com/|Chartboost]], Startapp, [[http://www.flurry.com/|Flurry]] |
+ | * System specifics are abstracted, hiding the gotchas and caveats of each platform, while still harnessing the full power of the native hardware (for instance, hardware audio decoding) | ||
* Sigslot based (with boost::signals) messaging system that lets you dynamically schedule calling entity and component functions, set variables | * Sigslot based (with boost::signals) messaging system that lets you dynamically schedule calling entity and component functions, set variables | ||
- | * Supports screen stretching to fit any screen size, manual multiple resolution layouts, or a mixture of both | + | * Supports fake screen resolutions with stretching, so you can target only a few sizes and automatically scale up/down to the closest one |
* Internal component based GUI system with menus, buttons, scrolling, text input (supporting hardware and soft keyboards) | * Internal component based GUI system with menus, buttons, scrolling, text input (supporting hardware and soft keyboards) | ||
- | * Particle system (LinearParticle) | + | * 2D and 3D Particle system (LinearParticle for 2d, and Irrlicht for 3D) |
- | * Font system supporting in-line coloring, kerning, scaling, wrapping. Imports BMFont generated fonts. | + | * Font system supporting in-line coloring, kerning, scaling, wrapping. Imports BMFont generated fonts. (no unicode yet..) |
- | * Simple to use Sound Manager with smart caching and streaming. (Supports multiple implementations: AVAudioPlayer, FMOD, Android, Audiere, SDL_mixer) | + | * Simple to use AudioManager with smart caching, streaming, and per sfx controls. (Supports 6 implementations) |
- | * Portrait and landscape mode support with rotation/flip | + | * Portrait and landscape modes support with rotation/flip (on some platforms) |
- | * Automatic internal handling to get around power-of-2 texture limitations | + | * Automatic internal handling to seamlessly deal with power-of-2 texture limitations |
* Socket and HTTP classes, in-game file downloading | * Socket and HTTP classes, in-game file downloading | ||
* Powerful 2D image handling with scaling, tinting, rotation, animation | * Powerful 2D image handling with scaling, tinting, rotation, animation | ||
- | * FileManager that transparently handles decompressing files when needed, supports mounting zips as filesystems | + | * FileManager that transparently handles decompressing files when needed, supports mounting zips as filesystems, automatically mounts Android .apks |
- | * Touch screen, accelerometer, and vibration support | + | * Get abstracted input from touch, mouse, DInput, iCade, Xperia gamepad, 60Beat Gamepad, accelerometer. Supports multi-touch on most platforms including Win7/Win8 |
- | * RTPack.exe command line tool intelligently handles image conversions to .rttex format, a wrapper that handles multiple formats (including .pvrct) | + | * RTPack command line tool intelligently handles image conversions to .rttex format, a wrapper that handles multiple formats including jpg and powerVR compression types |
- | * Requires minimum outside dependencies for portability | + | * Requires minimum outside dependencies for portability, most are included (such as libjpg, libpng, a small subset of boost, etc) |
* Large group of cross platform utility functions suitable for stealing if you want (Such as RemoveDirectoryRecursively, CreateDirectory Recursively, LaunchURL, etc) | * Large group of cross platform utility functions suitable for stealing if you want (Such as RemoveDirectoryRecursively, CreateDirectory Recursively, LaunchURL, etc) | ||
* Supports premultiplied alpha, can optionally convert on load | * Supports premultiplied alpha, can optionally convert on load | ||
* Separate "system" and "game" timers make pausing the game easy | * Separate "system" and "game" timers make pausing the game easy | ||
- | * Built-in database system can serialize to/from storage | + | * Built-in database system (VariantDB) can serialize key/data pairs to/from disk or raw memory easily |
* All C++ source is "right there" making debugging easier - don't know how to use a component? Look at its source | * All C++ source is "right there" making debugging easier - don't know how to use a component? Look at its source | ||
* 3D features provided by the optional pre-integrated [[http://irrlicht.sourceforge.net/|Irrlicht]] component - Proton SDK doesn't use any of its window setup or input code, but only the rendering pieces | * 3D features provided by the optional pre-integrated [[http://irrlicht.sourceforge.net/|Irrlicht]] component - Proton SDK doesn't use any of its window setup or input code, but only the rendering pieces | ||
* Liberal [[http://www.rtsoft.com/proton/license.txt|open source license]] | * Liberal [[http://www.rtsoft.com/proton/license.txt|open source license]] | ||
- | * Used in the games [[http://www.rtsoft.com/pages/dscroll_mobile.php|Dungeon Scroll]], [[http://www.codedojo.com/?p=138|Mind Wall]], [[http://www.rtsoft.com/pages/bliparcade.php|Blip Arcade]], and [[http://www.rtsoft.com/pages/dink.php|Dink Smallwood HD]] | + | * Used in the games [[http://www.rtsoft.com/pages/dscroll_mobile.php|Dungeon Scroll]], [[http://www.codedojo.com/?p=138|Mind Wall]], [[http://www.rtsoft.com/pages/bliparcade.php|Blip Arcade]], [[http://www.rtsoft.com/pages/dink.php|Dink Smallwood HD]], [[http://www.rtsoft.com/pages/tanked.php|Tanked (Free 3d game)]], and [[http://www.growtopiagame.com|Growtopia]]. |
- | * Even if you don't plan on selling a desktop version of your game, having a native desktop binary makes it a breeze to record high speed movies of your app for promotion purposes | + | * Even if you don't plan on selling a desktop version of your game, having a native desktop binary makes it a breeze to debug and record high speed movies of your app for promotion purposes |
=== The Insane Proton Sigslot based Entity/Component System === | === The Insane Proton Sigslot based Entity/Component System === | ||
Line 33: | Line 34: | ||
* No hard-coded Render or Update functions, a very different way to think about and use entities | * No hard-coded Render or Update functions, a very different way to think about and use entities | ||
* Loose coupling, can call functions, get/set variables without knowing anything about the entity/class - directly or scheduled | * Loose coupling, can call functions, get/set variables without knowing anything about the entity/class - directly or scheduled | ||
- | * Dynamic function/variable creation at an entity or component level using a variant data type | + | * Dynamic creation and runtime binding of function and variables. Supports reflection, remote procedure calls, tweening |
* Components can share data and work together - for example, adding the RenderTrailComponent will add a 'trail' without knowing anything about the component (s) that is actually handling rendering | * Components can share data and work together - for example, adding the RenderTrailComponent will add a 'trail' without knowing anything about the component (s) that is actually handling rendering | ||
* Can request callbacks when data is changed or functions are called | * Can request callbacks when data is changed or functions are called | ||
* You can just ignore the entire entity system if you want, or just use it for your app menus/GUI | * You can just ignore the entire entity system if you want, or just use it for your app menus/GUI |