Company:
Twitter Youtube
     Personal:
Twitter Youtube
 

Project Overview

    Introduction

      If you're looking for game development tools, you usually don't have to look far. If you're developing a 2D game and are looking for not only versatility, but also performance, then you may have found your solution!

      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

      [ *Please note that full documentation does not yet exist for the most recent full and modified feature set, so for the moment, the links below correspond only with the current "release" build and will not represent the most up-to-date in-development builds with complete accuracy. They are included for very generalized informational purpose only, and are due to be replaced along with the "release" builds and newer documentation 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! ]

      Backend

        HCGE is Multi-platform - Games can be developed and tested on one platform and will readily work on any of the other supported platforms with very little work; just bear in mind the processor and RAM spec of the lowest target platform, and whip up some additional button configuration files!

        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!





      Scripts

        "Setup scripts" exist for listing variable names and data to load for the game/level, and for defining complex concepts such as Object Types, Player Characters, and overall Levels. They are plain text and are usually stored as ".def", ".lst", or ".typ". They can be easily modified with any text editor, but eventually interfaces will be created to interact with them in a simpler way.

        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!






      Editors

        All editors reside in their own windows and can be used in real-time during gameplay to view and test all sorts of things! Be aware, though, that not suspending the level on a fresh start to perform permanent edits can cause loss of data!


        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

    Platform Downloads and System Requirements

      [ *Please note that the current "release" builds do not accurately represent the most recent full and modified feature set. In fact, they are quite old, and due to be replaced 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! ]

      Processor and memory requirements for reliable performance will change depending on the content of the game, but the absolute minumum requirements are:

      • Windows*- Pentium processor, 8MB of free RAM, and Windows 95+ w/DirectX9+
      • Mac**- Intel MacOSX system of comparable spec to Windows
      • Linux- Linux with SDL on PC system of comparable spec to Windows

      • ( "Homebrew" )

      • PSP- Any PSP with any custom firmware installed
      • Wii- Any Wii with "The Homebrew Channel" installed
      • GP2X Wiz- Any Wiz system
      • GCW-Zero- Any GCW-Zero system

      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.





    Documentation

      [ *Please note that while the current documentation does describe the current "release" builds, it does not accurately reflect the most recent full and modified feature set. It is due to be replaced along with the "release" builds after 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! ]

      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.





    Templates and Examples

      Original / Generalized

        This is a list of General HCGE Functionality examples and templates developed by Headcannon:


        HCGE General Game Template

        A set of very basic Script and data files that provide just enough information to get a "Game" up and running. It is meant only for use as a starting point in creating new Games, and as such, it contains no gameplay of its own, and uses very basic assets that in no way reflect HCGE's potential

        Install directly from within the HCGE main interface, or Download here for manual install (place contents in the HCGE program folder)  

        [ *Please note that while the video does contain footage of the template's contents and elements of the interface included with the "release" builds, it otherwise does not properly represent the most recent recent full and modified feature set. In fact, it is extremely old. It is due to be replaced along with the "release" builds after 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! ]





      "Fan Game" Content

        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!

Contribute via PayPal!

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


The HCGE is not an "opensource" project, and under no circumstances will sourcecodes be distributed. Please don't ask.

    Private and no-fee use

      Users are hereby granted license to freely create and distribute HCGE games for private and no-fee use. Generocity is accepted and encouraged; please see the contribution section for details.

      It is requested, but not required, that any game running on the HCGE be made to display a splash screen noting that fact, or that the fact be mentioned non-trivially in some accompanying documentation or credits sequence.

    Commercial use

      Any user finding the HCGE fit for commercial/for-fee use must first purchase a commercial license before engaging in any commercial/for-fee activity. For information regarding the commercial license, please send an email request titled "HCGE License" to domain "headcannon.com", username "stealth".

      The aforementioned email address is not for any other correspondence. For questions, comments, and support, please visit the Headcannon Discord Server, or contact us via twitter!

    Performance

      License is hereby granted to perform free, no-fee public or private demonstration, explanation, tutorial, etc using the HCGE. A commercial license must be purchased before any for-fee performance of the HCGE, public or private.

    Distribution

      The base HCGE may be freely distrubuted under the follwing conditions-

      • Only the original, unmodified archive may be distributed.
      • Any distribution of the HCGE must be provided free of charge.
      • The HCGE may not be distributed as part of a package.

      Any game created using the HCGE may be distributed in conjunction with the HCGE as a combined, stand-alone application under the following conditions-

      • The game must be made to start automatically when the program is launched. This is accomplished by renaming its .gdf file to "default.gdf".
      • If the game is not "packed" using the game.hcg container format, then all files from the original HCGE archive must be included, unmodified.
      • The combined application must be provided free of charge unless a commercial license has been purchased.
      • The combined application may be distributed as part of a package provided that it is presented as a game using the HCGE and not as the base HCGE, and that the package is distributed free of charge, or a commercial license has been purchased.

      All files for any game created using the HCGE may be distributed without the HCGE itself under the following conditions-

      • The files must be provided free of charge unless a commercial license has been purchased.

    Game Licensing

      Content of any games created with the HCGE, including officially-developed game packages are subject to their own license terms regarding gameplay use, and use, availability, and readability of source materials.

      Users may use whatever licensing terms they like for their own games, subject to the condition that the author must purchase a commercial license if a fee is to be charged for the game or any HCGE-specific game code or data.

    Fee - Definition

      Any receipt of currency through any means during the process of developing or distributing a game using the HCGE, or any performance of HCGE usage, shall be considered a "fee" under this license, regardless of classifcation (Ex: "Donation"), source (Ex: Kickstarter), or intended use. Please contact the address in the "Commercial Use" section to discuss how any particular situation affects licensing.