FunGEn-0.4.5: README.md
<style>
/*
body {
background-color:black;
color:white;
}
*/
.a {
font-weight:bold;
color:red;
font-size:200%;
}
.b {
font-weight:normal;
/* color:#bbb; */
color:black;
font-size:smaller;
}
</style>
<div style="float:right; margin:3em 0 1em 1em;">
<img src="/site/logo.gif">
<br>
<a href="http://hub.darcs.net/simon/fungen/examples/pong/pong.hs#22"><img border=0 src="/site/pong.png" title="The pong example - click to see code" style="margin-top:2em;"></a>
<br>
<a href="http://hub.darcs.net/simon/fungen/examples/worms/worms.hs#22"><img border=0 src="/site/worms.png" title="The worms (snake) example - click to see code" style="margin-top:1em;"></a>
</div>
# <span class="a">Fun<span class="b">ctional</span> G<span class="b">ame</span> En<span class="b">gine</span></span>
FunGEn (Functional Game Engine) is a BSD-licensed, cross-platform,
OpenGL/GLUT-based, imperative game engine/framework written in
Haskell. With very few dependencies and two example games, it's one
of the easiest ways to get started with Haskell game development.
It provides:
* Initialization, updating, removing, rendering and grouping
routines for game objects
* Definition of a game background (or map), including texture-based
maps and tile maps
* Reading and intepretation of the player's keyboard and mouse input
* Collision detection
* Time-based functions and pre-defined game actions
* Loading and displaying of 24-bit bitmap files
* Some debugging and game performance evaluation facilities
<!-- * Sound support (windows only, not in current release) -->
Andre Furtado created FunGEn and I
([Simon Michael](http://joyful.com)) maintain it sporadically. If
you'd like to take it and run with it, or co-maintain, let's chat! I'm
`sm` on the #haskell-game IRC channel.
**Home:** <http://joyful.com/fungen> \
**Hackage:** <http://hackage.haskell.org/package/FunGEn> \
<!-- **Changelog:** <http://hackage.haskell.org/package/FunGEn/changelog> \ -->
**Changelog:** <http://hub.darcs.net/simon/fungen/raw-file/CHANGES> \
**Code:** <http://hub.darcs.net/simon/fungen> \
**Discussion & help:**
[#haskell-game](http://www.haskell.org/haskellwiki/IRC_channel) IRC channel,
[haskell-cafe](http://www.haskell.org/haskellwiki/Mailing_lists) mail list
\
**Docs:**
[API docs](http://hackage.haskell.org/packages/archive/FunGEn/0.4.2/doc/html/Graphics-UI-Fungen.html),
Andre's [pong tutorial](site/example.html),
<!-- New version of the [pong tutorial](TUTORIAL.html) \ -->
<!-- the [old site](http://www.cin.ufpe.br/~haskell/fungen) \ -->
Stack Overflow [FunGEn questions](http://stackoverflow.com/search?tab=newest&q=fungen), \
Haskell wiki [OpenGL tutorial](http://www.haskell.org/haskellwiki/OpenGLTutorial1) \
## Getting started
**Install from hackage:**
```
$ cabal update
$ cabal install FunGEn
```
**Or, install source and
[run](http://hub.darcs.net/simon/fungen/examples/helloworld.hs)
[the](http://hub.darcs.net/simon/fungen/examples/pong/pong.hs)
[examples](http://hub.darcs.net/simon/fungen/examples/worms/worms.hs):**
```
$ darcs get http://hub.darcs.net/simon/fungen
$ cd fungen
$ cabal install
$ (cd examples; ghc helloworld; ./helloworld)
$ (cd examples/pong; ghc pong; ./pong)
$ (cd examples/worms; ghc worms; ./worms)
```
(darcs is like git but simpler. If your system doesn't provide it, get it [here](http://darcs.net/Binaries).)
**Contribute patches:**
- log in to hub.darcs.net and fork <http://hub.darcs.net/simon/fungen>
- push patches to your branch
- give me a "pull request" on #haskell-game
---
## FAQ
**What is a game engine?**
A game engine can be considered as a library that provides game facilities
to a game programmer. When using a game engine, the programmer must
specify when the game events happen, rather than how they are
implemented. A same functionality may have its implementation varying from
platform to platform, in the case the engine is platform-independent. The
main advantage of a game engine is that it can be reused to the
development of many different kind of games, in an automated way, saving a
lot of programming time.
**Why Haskell?**
We believe that Haskell is a great language to develop games, because of
its high level of abstraction and the generation of a more concise,
elegant and shorter code. This is great for code maintenance and
understanding. Combining the power of Haskell with the facilities provided
by game engines seems a promising project. You can find more info on
Haskell in its official site.
**What is HOpenGL?**
HOpenGL stands for Haskell Open Graphics Library. Actually, it is a
binding to one of the most famous graphics libraries around the world
(OpenGL) and its auxiliary toolkit (GLUT). In other words, it makes
possible to call OpenGL/GLUT routines (which were written in the C
language) when programming in Haskell. You can find more info on HOpenGL
in my HOpenGL Tutorial site, or in its official site.
---
## To do
Andre's 2002 site included this message:
> Current Status: Some feedback indicated that the first version of FunGEn was not as "functional" as it was desired: some game issues were still being dealt through an imperative fashion. This way, the authors of this project decided to change the game engine philosophy: programmers should describe a game as a set of "specifications" rather than defining its behavior imperatively. One plausible alternative for accomplishing this task
> is porting the Clean Game Library (CGL) to Haskell, adding some FunGEn specific features. Hence, this is the actual status of the FunGEn project: it is being rebuilt in order to provide game programming mechanisms following the CGL
> concepts. This really demands some time, but the authors expect a new version to be released soon.
>
> ... PLEASE NOTE: this is the very first version of FunGEn, and it was released just to get some feedback from game programmers. You are strongly invited to <A HREF="mailto:awbf@cin.ufpe.br">tell</A> your game programming experiences with FunGEn, helping us to release a definitive, stable version). Ok, after this disclaimer, please fell yourself free to take a quick tour in the site; it contains a lot of useful information for those who are really interested in trying a new game programming experience. Nice coding...
and this todo list:
> Here you have a list of some upcoming FunGEn features, and some other
> desired features (but with no implementation prevision yet).
>
> - Support map scrolling (coming soon);
> - Support mouse input management (coming soon);
> - Make a polygon map definition avaiable (coming soon);
> - Make sound avaible to non-Win32 platforms;
> - Create, if possible, some operators to avoid the excessive (x <- ...) syntax;
> - Support auto-animated objects;
> - Create a GLUT independent font support (or perhaps extend it);
> - Improve the installation process;
> - Upgrade FunGEn to be both a 2D (bidimensional) and 2D 1/2 (bi and a half dimensional) engine;
> - Create a map editor/generator (possibly in other language, or using the brand new Haskell GUI...);
> - Take courage to start thinking about the 3D world...
>
> Would you like to suggest a feature? Feel free to do it. Would you like to
> implement a feature? Please do it! Keep in touch.
and this [old windows code with sound support](/site/FunGEn0.1-Win32.zip).
---
## Credits
Andre's 2002 credits:
> FunGEn was created by Andre Furtado, Computation Science graduation
> student at the Informatics Center (CIn) of the Federal University of
> Pernambuco (UFPE), as part of a Scientific Iniciation (PIBIC/CNPq)
> research project (Creating a Game Platform Using Haskell), oriented by
> lecturer Andre Santos (PhD, 1995, University of Glasgow), who was
> responsible for figuring out a lot of FunGEn implementation details.
>
> I would like to thank also the following people who contributed for the development of FunGEn:
>
> - Sven Panne
> - Jay Cox
> - Geber Ramalho
> - Carlos Andre Pessoa
> - Charles Madeira
> - Monique Monteiro
> - The people at the Haskell mailing lists
>
> FunGEn can be distributed freely, in the hope that it will be useful, but
> WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> or FITNESS FOR A PARTICULAR PURPOSE. I would thank you if you cite my name
> and this site if you are going to use FunGEn for other things besides home
> programming.
---