# The Messenger Game Engine

Messenger is a 2D game engine with experimental concepts for Elm based on **[WebGL](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API)**.

This repository is a CLI tool to create messenger project.
Main development is under several repositories:

- Core Messenger Elm library: [messenger-core](https://github.com/linsyking/Messenger-core)
- WebGL rendering in Elm: [elm-regl](https://github.com/linsyking/elm-regl), [elm-regl-js](https://github.com/linsyking/elm-regl-js)
- Extra Messenger Elm library: [messenger-extra](https://github.com/linsyking/Messenger-extra)
- Messenger templates: [messenger-templates](https://github.com/linsyking/messenger-templates)

Other repositories related to Messenger:

- Examples: [messenger-examples](https://github.com/linsyking/messenger-examples)
- Messenger documentation: [messenger-docs](https://github.com/linsyking/messenger-docs)

## Games made with Messenger

- [Reweave](https://github.com/linsyking/Reweave)
- [SilverFOCS Games](https://focs.ji.sjtu.edu.cn/silverfocs/project/2023/p2) (all games in 2023 are powered by Messenger)

## Cool Features

- Engine in a library. Messenger core is built in a library.
- Message (or event) based. Faster development cycle, easier to divide work.
- Functional, but OOP styled. Take advantages of both functional programming and OOP.

## Conceptual Picture

![](docs/concept.png)

## Tutorial/Guide

https://elm-messenger.netlify.app/
