Fun package for creating roguelike games using TinyGo on Firefly Zero.
- Customizable images with cache for tiles such as walls and floors
- Generative maps
-
Field of View for torch-like illumination
-
Creature behavior is configurable
-
Creatures approach Player using shortest path astar algorithm
- Configurable action system for combat, spells, etc.
- Popup dialogs for messages e.g. "A wild gopher has appeared!"
- Creature spawning
- Automatic terrain image variation for walls and floors
- Multiple dungeons each with multiple levels.
- Portals aka level entrances/exits
- Game items
- Predefined maps/levels
- World map
- Show/hide entrances/exits
- PortalTypes per dungeon
- ?
Here is a simple "Hello, Gopher" example that shows a little bit of what you can do:
package main import ( "github.com/deadprogram/tinyrogue" "github.com/firefly-zero/firefly-go/firefly" ) func init() { firefly.Boot = boot firefly.Update = update firefly.Render = render } var game *tinyrogue.Game func boot() { // create a new game game = tinyrogue.NewGame() // load the image tiles for the floor and walls game.LoadImage("floor") game.LoadImage("wall") // set the dimensions for the game and the tiles gd := tinyrogue.NewGameData(16, 10, 16, 16) game.SetData(gd) // generate a random game map game.SetMap(tinyrogue.NewSingleLevelGameMap()) // create the player player := tinyrogue.NewPlayer("Player", "player", game.LoadImage("player"), 5) game.SetPlayer(player) // set player initial position to some open spot on the map. player.MoveTo(game.CurrentLevel().OpenLocation()) } func update() { game.Update() } func render() { game.Render() }The code for this is located at Hello, Gopher
-
For slightly more complex behavior, see the "Gopher Walk" game located here: Gopher Walk
-
An example that has multiple Levels: Gopher Multiwalk
-
Example that has multiple Dungeons/Levels: Gopher Multidungeon
A complete game is "Ghost Castle" located in this repo: https://github.com/deadprogram/ghost-castle
"Ghost Castle" is in the Firefly Zero catalog here: https://catalog.fireflyzero.com/deadprogram.ghost-castle
This diagram shows the relationship between the different types that make up a TinyRogue game.
flowchart TD subgraph game Game Game --> GM Game --> Player Game --> Creatures subgraph world GM[GameMap] --> Dungeons Dungeons --> dungeon subgraph dungeon Dungeon --> Levels Levels --> levels subgraph levels Level --> Tiles Tiles --> tiles Level --> Rooms Rooms --> rooms subgraph tiles MapTile1 MapTile2 MapTileN end subgraph rooms Room1 Room2 RoomN end end end end subgraph characters Player Creatures --> Creature1 Creatures --> Creature2 Creatures --> CreatureN subgraph creatures Creature1 Creature2 CreatureN end end end Game is what you are making that the user can play.
The Player represents the person playing the Game.
Creatures are the non-player characters. Could be monsters, allies, or ?
GameMap is what contains the important information about the world in which the game is played.
A Dungeon is a collection of Levels that the Player will explore.
A Level in an individual level which contains a collection of MapTiles and a collection of Rooms.
MapTile is an individual tile on a grid which represents the positions of the walls, floor, player, and the creatures.
A Room is a rectangular area of a Level which is open to the Player or Creatures to move around in.
Here is a short list of some useful tools:
https://tezumie.github.io/Image-to-Pixel/
Based on code originally from the following sources, but with many modifications:
https://github.com/cscazorla/roguelike
https://github.com/gogue-framework/gogue
Thank you!



