https://github.com/deadprogram/tinyrogue
Fun package for creating roguelike games with TinyGo on Firefly Zero using WASM
https://github.com/deadprogram/tinyrogue
Last synced: 8 months ago
JSON representation
Fun package for creating roguelike games with TinyGo on Firefly Zero using WASM
- Host: GitHub
- URL: https://github.com/deadprogram/tinyrogue
- Owner: deadprogram
- License: mit
- Created: 2024-12-23T14:48:30.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-12-30T21:50:24.000Z (10 months ago)
- Last Synced: 2024-12-31T07:47:57.425Z (10 months ago)
- Language: Go
- Homepage: https://fireflyzero.com/
- Size: 124 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-tinygo - tinyrogue - Fun package for creating roguelike games with TinyGo on Firefly Zero using WASM (Gaming / Instrumentation and control with sensors and actuators)
README
# TinyRogue
Fun package for creating [roguelike games](https://en.wikipedia.org/wiki/Roguelike) using [TinyGo](https://tinygo.org/) on [Firefly Zero](https://fireflyzero.com/).
## Features
### Complete
- 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### TODO
- Game items
- Predefined maps/levels
- World map
- Show/hide entrances/exits
- PortalTypes per dungeon
- ?## Examples
Here is a simple "Hello, Gopher" example that shows a little bit of what you can do:
```go
package mainimport (
"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](./examples/hello/)### More examples
- For slightly more complex behavior, see the "Gopher Walk" game located here: [Gopher Walk](./examples/walk/)
- An example that has multiple Levels: [Gopher Multiwalk](./examples/multiwalk/)
- Example that has multiple Dungeons/Levels: [Gopher Multidungeon](./examples/multidungeon/)
### Complete Games
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
## Architecture diagram
This diagram shows the relationship between the different types that make up a TinyRogue game.
```mermaid
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
`Game` is what you are making that the user can play.
### Player
The `Player` represents the person playing the `Game`.
### Creatures
`Creatures` are the non-player characters. Could be monsters, allies, or ?
### GameMap
`GameMap` is what contains the important information about the world in which the game is played.
### Dungeon
A `Dungeon` is a collection of `Levels` that the `Player` will explore.
### Level
A `Level` in an individual level which contains a collection of `MapTiles` and a collection of `Rooms`.
### MapTile
`MapTile` is an individual tile on a grid which represents the positions of the walls, floor, player, and the creatures.
### Room
A `Room` is a rectangular area of a `Level` which is open to the `Player` or `Creatures` to move around in.
## Useful tools
Here is a short list of some useful tools:
### Convert existing images to Sweetie 16 pallette
https://tezumie.github.io/Image-to-Pixel/## Credits
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!