Awesome
NICO Game Framework
NICO is a simple game framework for the Nim programming language inspired by the PICO-8 API.
Supported platforms:
- Windows
- Linux, including RaspberryPi
- Web/HTML5 via Emscripten
- Android
- MacOS
What it does:
- Paletted Bitmap Graphics (you can load a custom palette up to 256 colors)
- Fixed or flexible custom display resolution with pixel scaling
- Sprite drawing, load png spritesheets, specify tile size per sheet (can load multiple and switch between them)
- Tilemap drawing, import json from Tiled
- Drawing primitives: pixels, lines, rectangles, circles, triangles
- Input: Keyboard, Gamepad, Mouse, Touch
- Sfx playback: load and play ogg vorbis files, configurable number of mixer channels.
- Built in chip synth
- Music playback: stream ogg vorbis files.
- Custom audio callback for generating your own sounds via code.
- Text drawing: load and draw fonts from png, supports variable width fonts.
- Export animated gifs
Installation
- You will need to have the Nim compiler installed
- Run
nimble install nico
- Run
nicoboot <yourname> <projectname> <directory>
to create a new directory with an example base ready to start working with. - You can watch a quick tutorial here
- Native build:
- You'll need SDL2 for native builds, on Windows, ensure SDL2.dll is copied to your project directory.
- From your project directory run
nimble runr
to build and run the example as a native build. - From your project directory run
nimble rund
to build and run the example as a debug native build.
- Web build:
- For web builds you'll need Emscripten.
- From your project directory run
nimble webr
to build for web in release mode. - From your project directory run
nimble webd
to build for web in debug mode.
Learning
Why should you use NICO?
- It's fun and easy to use
- Learn Nim the fun way! It's a great new statically typed programming language that compiles to C.
- You can build for Web, Windows, Linux, Mac, Android, and potentially other platforms.
Future work:
- API Documentation
- More examples
- Tests
- Utility modules for common higher level tasks
- Browser to browser networking using WebRTC
- Immediate mode GUI
- 3D Utils and Rasterizer