Moondust Engine

The PGE Engine is part of the PGE project, and will allow users to play episodes and levels.

Development

 * 0.0.1-pre-alpha....0.0.6-pre-alpha, The first test application had the basic physics system and is able to read and play levels, and can display blocks, BGOs, and backgrounds, but without NPCs and effects. Engine development started with a usage of the Box2d physics engine. It is possible to use warps but was no visual entering/exiting effect. The player's character was represented by a blue rectangle. It is also possible to travel between levels by using level-to-level warps. There also was implemented a message box system, which able to display special characters and different languages.
 * Into 0.0.7-pre-alpha has been added partial support of world map without the rendering of textures.
 * Starts from 0.0.8-pre-alpha engine finally can render an animation of playable characters and has the partial implementation of sound and music system. The Engine can play sounds on the world map and can play a music.
 * On the level some sounds are plays but the music was implemented since 0.0.9-pre-alpha.
 * Starts from 0.0.10 completely supports render of the world map and has been improved some physics parts.
 * 0.0.11 finally can render NPC graphics and do an iteration of their movements.
 * 0.1-Alpha finally got a new coded from scratch physical engine which completely replaces Box2d.
 * 0.2-alpha has basic NPC-AI system where NPCs are can be coded in a Lua and has a support of placing items from the editor into the engine.
 * 0.2.2.2-alpha got a forked SDL Mixer library named as "SDL2_Mixer_ext" which adds support for OGG files with looped fragment
 * 0.2.2.4-alpha has working events system include better auto-scrolling, except "Game end", "Player controls" and "Layer movement" event actions.
 * 0.2.4-alpha has full features world map path opener which will open paths on level completion, has more advanced NPC-AI system with adding of new things like to ContactDetector, ability to spawn any other NPC, full-featured transforming of NPC's, etc.
 * 0.2.5-alpha is a bugfix update which also includes internal optimizations and performance boost
 * 0.2.5.1-alpha contains a big update of Lua-API: here introduced Player API which allows making Lua controller for playable character make it more interactive, added new functions and events for NPCs, onHarm and onKill events are exchanged, fixed a lot of bugs. Since this version, roles of 7, 8, 9, 0 keys are changed: 7 decreases the number of playable character, 8 increases, 9 decreases number of playable character state, 0 increases. Introduced cannon-exiting pipe.
 * 0.2.6-alpha got a new physical engine which completely resolving slopes physics. Added Lua API which allows loading external images and added support for the HUD drawing, added API to spawn better effects, and NPCs are finally can get information about spawning way.

Planned Features

 * Improvement of start menu screen
 * Save/load of game save, episode intro screen to choice character and file with recent game save.
 * Better camera and ability to switch playable character and state in real time

Improvements in comparison with original SMBX Game engine

 * PGE Engine has configurable TPS which can be used with V-Sync
 * Less CPU load which gives the ability to play games on PGE Engine together with background programs or on slow PCs.
 * Cross-platform support: Linux, Windows, Mac OS X. SMBX works on Windows only.
 * World maps allow for music boxes with custom music
 * After saving in a hub-based episode, the player resumes the game from the most recent warp instead of the start point of the hub.
 * Autoscroll can work in multiple sections and can be launched from any event and from any section independent to the start of the level. Autoscroll can be launched inside another section while player starts from a non-scrollable section. A player repeats the whole path inside auto-scrollable sections when it enters into them again.
 * Screen fade effects between sections and between different screens of game: level<->world map<->main menu
 * Unicode-supported message boxes which can print text in any available language, but requires additional font maps to have a fine render of raster text.
 * Message boxes, menu boxes have fade effects when appears/disappears.
 * True semi-transparency support with alpha-channel
 * Built-in usage of OpenGL to render stuff
 * Built-in support for Lua scripts to have customized levels, NPC-AI, custom gameplay features, etc.
 * Less usage of memory because PGE Engine loads stuff dynamically by the first request of a specific object (NPC, block, BGO, Effect, background, playable character sprite).
 * Faster loading time compared to SMBX
 * Built-in support for command line features: you can run playing any level by the opening of that file by opening with the pge_engine application or run any episode by the same way.
 * With SDL Mixer X, PGE Engine supports many various music formats which can be used as built-in or custom in-game music.
 * Support of music with looped fragment (OGG only, but MIDI with loopStart/loopEnd or 111'th controller, Tracker Music and Game Music Emulators like NSF, SPC, VGM, HES, GBS, etc.).

Command line arguments
PGE Engine supports command line which allows you launch debug mode, start playing of the level or episode. (Also via drag&drop of the file into PGE Engine application icon in a file managers which are supports that)

Command syntax:
 * --config "{path}" - allow you to define a specific configuration pack with escaping a selection screen
 * --render-auto - automatically detect possible renderer in sequence: OpenGL 3, OpenGL 2, and then software render if both OpenGL tests are failed [works by default]
 * --render-gl3 - Use OpenGL 3.1 renderer (May not work on OS X)
 * --render-gl2 - Use OpenGL 2.1 renderer (Supports video cards which are not supports non-pow-of-two textures)
 * --render-sw - Use software renderer (may overload CPU)
 * --render-vsync - Toggle on VSync if supported on your hardware
 * --lang=xx - Force PGE Engine use specific language instead default locale (where xx - a code of language. For example, en, ru, es, nl, pl, etc.)
 * --num-players=X - Start game with X number of players (Currently 1 or 2, later 4 max players will be supported. 4-players limitation is going for standalone Split screen game mode)
 * --pXc=Y - Set character Y for player X (for example --p1c=2 will set character with ID 2 to first player)
 * --pXs=Y - Set character state Y for player X (for example --p2s=4 will set character state with ID 4 to second player)
 * --debug - Enables debug mode (Game result will not be saved, and special debug features are will be allowed). This argument requires for any --debug-* argument.
 * --debug-physics - Enables debug of the physics hitboxes of all objects are will be shown:
 * Blocks [green]
 * BGO [blue]
 * NPC [magenta]
 * NPC's in-area detector trap [red]
 * Playable characters [pink]
 * Warp entrances [light-red filled]
 * Physical environment zones [yellow filled]
 * --debug-print=[yes|no] - Enables/Disables printing of the debug information (Debug information is possible to toggle on/off with F3 key)
 * --debug-pagan-god - Enables god mode
 * --debug-superman - Enables unlimited flying up
 * --debug-chucknorris - Enables ability to playable character destroy any object
 * --debug-worldfreedom - Enables ability to walk everywhere on the world map
 * filename - actual file path

Examples:

Start testing of a level file ( UNIX-Like: Linux, Mac OS X, etc. )

Start testing of a level file ( Microsoft Windows )

Start testing of a level file with specified configuration package ( UNIX-Like: Linux, Mac OS X, etc. )

Start testing of a level file with specified configuration package ( Microsoft Windows )

Start PGE Engine with the interprocess mode

Print current version of PGE Engine

Videos

 * First demonstration
 * Warps and level wrap Functions Demo
 * Test walkthrough of hub-based episode on 0.0.2-pre-alpha
 * Long test of 0.0.7-pre-alpha
 * Gameplay Footage of 0.0.8-pre-alpha made by Bossedit8
 * Playthrough of v0.0.10 pre-alpha made by Bossedit8