
Project Overview
The Headcannon Game Engine, HCGE for short, has been in development for over a decade by an '80s kid raised with classic computer and game console hardware. Borne from a deep fascination with these machines and a thorough respect for the developers who could make the best of them, HCGE is highly specialized for getting the most out of the 2D realm on today's hardware; Retro sensibility meets modern raw power! While other tools seem to emphasize a simplistic interface first and foremost, creating the engine around those ideas as almost an afterthought, HCGE has always had a major focus on the backend - not only what you can do, but how well it's done. Its high performance comes in part from this engine-first attitude, building solid and efficient functionality and then creating more-and-more simplified interfaces for accessing that functionality. Compare HCGE to other tools under similar conditions of increasing stress, and see which one slows down on your state-of-the-art computer first! Develop games from Windows, OSX, or Linux that will run on all of those platforms and more! With "homebrew" support for PSP, Wii, GP2X, and GCW-Zero, plans for mobile devices and licensed usage on modern consoles, and more to come, reach an ever-growing audience across a variety of platforms! "Release" versions of HCGE are made available to the public absolutely free (for non-commercial use), with the latest in-development features and support being more-immediately available to "Patrons" as thanks for helping to keep the project growing! Why not give it a try? Stop by our Discord server to ask questions about getting started! [ *Please note that while the following videos do depict the current "release" builds of HCGE, they do not accurately represent the most recent full and modified feature set. In fact, they are quite old, and due to be replaced along with the "release" builds when several new features reach full completion. Please consider becoming a Patron to gain access to the absolute latest builds with in-progress features and special access to high-priority support! ] Features
Backend
Game components are modular - In addition to breaking up game data into individualized files that can easily be edited, referenced, shuffled, added, removed, or swapped, the engine also considers three levels of scope: "Game", "Zone", and "Act". "Game" scope represents data that should be available during the entire gameplay session, while "Zone" scope represents a particular group of "Act"s, and "Act" scope represents that Act alone. When given the proper scope, data is loaded (and unloaded) only when necessary, minimizing both RAM usage and program startup time! The sound system supports .wav, .ogg, and .xm music and .wav sound effects, with separated music/sfx volume controls. Music in .wav or .ogg format can start with a lead-in "intro" that comes before the looping section. Music in the .xm format can have up to 16 channels and use most standard effects. Besides the additional controls available to moduled music, it also supports "song events" that allow the music to control the game, or the game to control the music! Sound effects can even be broken into three parts - An intro for buildup, a looping section for the sustain, and an outro to play when the loop is cancelled! Thousands of colors can be displayed on-screen simultaneously, with graphic assets internally being palette-based for maximum visual control! The palette contains a maximum of 512 defined color entries that can be changed at any time, including between draw calls within a single frame, or even multiple times during the drawing of a single Object! Use the built-in palette cycling and/or palette animation tools to animate the colors, or change them manually in user-created script functions to create different effects! Per-Object palette offset control allows for effects such as enemy color variants and flashing, with the same option available for individual level scroll layers! Enhance the visuals with alpha-based additive and multiplicative blending! Rotate sprites 360 degrees and scale them on each axis independently! Level layouts are Tile-based. While larger structures can be imported and used in the editor, the engine breaks things down internally into 8x8 tiles for a high degree of precision in level design without the performance loss of using freely-placed objects of arbitrary size instead of a tile grid. Individual tiles can have their own animations that automatically update the graphic used by all instances of that particular tile across the entire level, and sections of tiles within the grid can be replaced at any time programmatically! Each tile also contains a "Floor Type" property and an "Angle" property with values ranging from 0 to 255, as well as its own collision map identifying each pixel as "not solid", "top-only solid", or "all sides solid", that can be read and acted upon at any time from a user-created script to define special interactions with Objects/Players! Tile Planes, the grids upon which tiles are placed to create the level itself, can be made to scroll relative to the "camera" in one of six different ways - As a full layer tied directly to the camera's position, as a full layer at a fractional offset from the position of the camera, separated into rows of columns or tiles that scroll at different speeds, or even separated into rows or columns of pixels that scroll at individual speeds. Create any number of Tile Planes within a single level, and turn them each on or off individually at any time, even control them separately between each available screen! It's also possible to write special script functions that can be attached to individual Tile Planes and manipulate the offset of each row/column to create some neat effects! HCGE includes a built-in system to handle the low-level management of Objects. Plug in built-in and user-created script function names, sprites and animation listings, and a list of variables and identifiers to define an Object type. With each object containing a special "Priority" setting, the engine sorts all them all and calls their events at the appropriate time automatically! Choose from built-in functions to draw Objects and move them with or without automatically respecting level collision, or create scripted functions that make them do all sorts of crazy things! This system can also keep track of "Object Range", how far the Object is from any active camera. Set what happens to each type of Object when it goes "out of range", manage performance by automatically ignoring and suspending certain Objects that are too far away from the real action! Objects can even be defined as "Projectiles", a special kind of Object that tests for collisions with other Objects, avoiding the slowdown of having non-"Projectiles" constantly running extra checks! In addition, there is a built-in system to handle low-level management of "Players", more complicated and versatile than a standard "Object". Create a "Player Character" by defining "Movement Modes" with custom control functions and "Key Events" that dictate how the player reacts to input, his state, and environment. Make use of the unique "Path Tracer", which is capable of vectored movement based on floor angle settings, can be made to follow a path around a complete circle, gathers more information about the Player's movement and collision state than with a standard Object, and uses a unit-by-unit moveme-and-test method instead of adding whole velocities directly to the position and testing only the final destination, providing high accuracy in collision while on a path and even when moving at a diagonal line through freespace! Attach a camera to each of the two available Players to have the screen follow them, and even switch the Player from one available Character to another at any time!
The "Status Script" is a special type of script that can be used to create interface elements. These scripts allow the use of fixed or numerical counter text, animated or unanimated sprites, and windows for text/sprite/window grouping and clipping areas, as well as "selections" for defining and reacting to menu-style input. Create animated and interactive HUDs, intros, title screens, menus, in-game dialogue, and debugging displays! Everything that happens during gameplay is controlled by "Script Functions". These are written by you using a custom programming language called "Headcode", thus, the extension ".hc". Assign these functions to Player and Object events, attach them to Tile Planes, set them to run in the background, and more to take total control of everything the game does! Any one thing in the game can access and manipulate any other thing for any reason! ![]()
![]() Using the Level Editor, build or modify your levels and test structural changes in real-time! Resize the window and use any of five levels of zoom to aid in navigation and editing! Easily switch between Tile Planes for editing, toggle multiple Tile Planes for simultaneous display, apply a visible Tile collision overlay, copy/paste sections, grab tiles, draw to the level using Tiles or Stamps, and change collision properties of placed tiles! Toggle drawing of sprite collision boxes and screen/activity borders to better see what's going on during gameplay, and even make the window scrolling follow the player around so that you can play the game inside the editor at any window size or zoom level! ![]() Within the Level Editor is the Level Ripper. Use this to transform .pcx or .tga image files into Tiles and Tile Planes! Work in parts, add extra Tiles and Tile Planes to existing levels at any time! Create fully-designed Tile Planes or import image chunks for use with copy/paste or to turn into Stamps! ![]() The Tile Editor works in conjunction with the Level Editor to allow manipulation of level graphics and layout. Use it to touch-up existing tile art or draw entirely new tiles, set tile collision maps and collision properties, create tile animation, modify the "tile palette", and create palette animation! ![]() With one keypress, the Level Editor becomes the Object Editor, allowing for Objects to be placed, moved, and modified! Set up initial Object states or manipulate them in real-time for testing! Keep an eye on their settings during live gameplay! ![]() In the Sprite Editor, import sprite frame graphics from .pcx or .tga files and set up or modify drawing offsets, collision boxes, and hotspot locations for Player or object Sprites! |
||
Downloads
Processor and memory requirements for reliable performance will change depending on the content of the game, but the absolute minumum requirements are: ( "Homebrew" ) When targetting "homebrew" platforms, bear in mind that the Wii uses a 729MHz processor, while the PSP uses a 333MHz processor, and both have only 24MB of RAM available for use by HCGE. The Wiz has 32MB of HCGE-available RAM, but although it is made to run at 750MHz, there is overhead somewhere within the Linux kernel and/or the SDL sound implementation that bring it down to the level of the PSP. Games built for use on these systems must target these numbers! * Due to use of DirectX 7, the current Windows "release" build will appear somewhat choppy in Windows 10 as native support was dropped by Microsoft in favor of emulation. The in-development version has been switched to DirectX 9, restoring smoothness in Windows 10, and will be made publicly available at a future date. I apologize for the inconvenience. ** There are two issues with the current Mac "release" build. Firstly, it will not run at all on recent versions of OSX High Sierra (the app will exit immediately) due to use of an API that is no longer supported by Apple. To successfully run this build under an older version of OSX also requires that SDL actually be installed, as opposed to just existing in the app package, for HCGE to run without immediately exiting. If you do not already have SDL installed, please right-click the HCGE app and select "Show Package Contents", and then navigate to "Contents/Frameworks" and right-click and copy "SDL.framework". Then, navigate to your main hard drive's "/Library/Frameworks" folder and paste "SDL.framework". You may need to use your administrator password to complete the operation, since this is a system folder. This will only need to be done once. Both of these issues have been solved in the in-development version, which will be made publicly available at a future date. I apologize for the inconvenience.
Full documentation for all setup and definition file formats, script commands, engine management systems, and editors is included with PC and Mac download packages, and may also be accessed from the website via links in the features section or from here via the "Getting Started" document.
Check out the Headcanon Section of the site for more information on our "fan" content! |
||
Contribution For private and non-commercial use, "release" builds of HCGE are distributed under a "Pay-What-You-Want" system; the software is provided to everyone free of charge, but users are encouraged to contribute to help ensure that development can continue! For commercial use including but not limited to commercially-released games or paid services involving HCGE, it is necessary to obtain a commercial license. However, the license is not necessary until monetary transactions are made. Prototype your game or develop it to completion for free! or Become a Patron! $10+ Patrons receive early access to in-development versions of HCGE as well as priority support! Thank you very much for your consideration! |
||
License
|