FES Retro Game Framework

FES is a retro pixel game framework, built on top of Unity. It aims to create an ideal, low friction framework for making pixel-perfect retro games from the early 90s era. FES takes advantage of the portability, and the ease of deployment that Unity provides, but does away with the Unity Editor interface in favour of a traditional game loop, and code-only development.

Code-Only Development

FES builds on top of Unity, but it takes almost nothing from Unity's usual workflow. The IDE is discarded in favour of classic code-only development. Take a look at this simple "hello world" game:

public class MyGame : FES.IFESGame
{
    public FES.HardwareSettings QueryHardware() {
        var hw = new FES.HardwareSettings();
        hw.DisplaySize = new Size2i(320, 180);
        hw.ColorMode = FES.ColorMode.RGB;
        return hw;
    }
    public bool Initialize() {
        FES.SpriteSheetSetup(0, "MyGame/MySprites",
            new Size2i(16, 16));
        FES.SpriteSheetSet(0);
        return true;
    }
    public void Update() {
        if (FES.ButtonPressed(FES.BTN_SYSTEM)) {
            Application.Quit();
        }
    }
    public void Render() {
        FES.Clear(new ColorRGBA(50, 104, 108));
        FES.Print(new Vector2i(4, 4), new ColorRGBA(127, 213, 221),
            "This game is going to be AMAZING!");
        FES.DrawSprite(0, new Vector2i(4, 14));
    }
}

Features

  • Pixel perfect rendering
  • RGB and Indexed color mode, with palette swapping support
  • Primitive shape rendering, lines, rectangles, ellipses, pixels
  • Multi-layered tilemaps with TMX file support
  • Rendering to and from offscreen surfaces with custom sizes
  • Text rendering, with text alignment, overflow settings, and custom pixel font support
  • Clipping
  • Custom shader support
  • Sound and Music APIs
  • Simplified Input handling
  • Optional wide and tall pixel support
  • Post processing and transition effects, such as scanlines, screen wipes, screen shake, fade, pixelate and more
  • Supports an amazing variety of platforms, courtesy of Unity

Performance

FES is optimized to run efficiently and smoothly, and should satisfy any of your performance needs. Test the performance yourself in this FES stress test demo:

https://pixeltrollgames.itch.io/fes-stress

But... but the Unity Learning Curve!

FES only requires the very bare minimum knowledge of Unity to create a FES project, and you can find a guide for just that here:

http://www.pixeltrollgames.com/fes/docs/unity.html

Links

For more information and a very in-depth documentation please have a look here:

http://www.pixeltrollgames.com/fes/docs

If FES looks like the thing for you then please visit the store page on the Unity Asset Store:

https://www.assetstore.unity3d.com/#!/content/102064

Dogfooding

Lastly, I believe that with frameworks/engines dogfooding is critical. Merl is such a project:

https://pixeltrollgames.itch.io/merl

You can also check out a smaller game that is packaged with FES, well document source code and all!

https://pixeltrollgames.itch.io/brickbust

Published Jan 11, 2018
StatusReleased
CategoryTool
PlatformsWindows, macOS, Linux, Android, HTML5
Authordafu
Tags16-bit, 2D, 8-bit, Game engine, Pixel Art, Retro, Unity

Install instructions

You can try the above FES demo reel as a stand-alone application for one of these platforms below!

Download

Download
fes-windows.zip 13 MB
Version 1.5.0 16 days ago
Download
fes-linux.zip 18 MB
Version 1.5.0 16 days ago
Download
fes-osx.zip 29 MB
Version 1.5.0 16 days ago
Download
fes_demoreel.apk 22 MB
Version 1.5.0 16 days ago

Comments

Log in with your itch.io account to leave a comment.

Hi! Is it totally necessary to run FES in Unity version 2017.1.1? I'm trying to make it run on 2017.3.1f1 and I get this error: "Input Axis P1_VERTICAL is not setup".

Any ideas? thanks

No, FES will run on any version starting 2017.1.1. It sounds like your input settings have changed, FES is a complete project, you should let it keep it's own configuration after you import it.


Feel free to email at the support email address if you're still having trouble!