GoonScape
A multiplayer isometric game inspired by Oldschool RuneScape, built with Go and Raylib.
Features
- 3D isometric world with height-mapped terrain
- Multiplayer support with client-server architecture
- Pathfinding and click-to-move navigation
- Global chat system with floating messages
- Multiple character models
- Background music
Prerequisites
- Go 1.23 or higher
- GCC (for CGO/SQLite support)
- OpenGL development libraries
- Raylib dependencies (see raylib-go)
Installation
Pre-built Binaries
The easiest way to get started is to download the latest release from:
https://gitea.boner.be/bdnugget/goonscape/releases
Choose the appropriate zip file for your platform:
- Windows:
goonscape-windows-amd64-v1.1.0.zip
- Linux:
goonscape-linux-amd64-v1.1.0.zip
Extract the zip and run the executable.
Quick Start
For development:
# Run directly (recommended for development)
go run main.go
# Run with local server
go run main.go -local
Server Setup
The server requires CGO for SQLite support:
# Enable CGO
go env -w CGO_ENABLED=1
# Clone and build server
git clone https://gitea.boner.be/bdnugget/goonserver.git
cd goonserver
go build
Client Installation
Then install or build:
# Install the client
go install gitea.boner.be/bdnugget/goonscape@latest
Or build from source:
git clone https://gitea.boner.be/bdnugget/goonscape.git
cd goonscape
go build
Controls
- Mouse Click: Move to location
- T: Open chat
- Enter: Send chat message
- Escape: Cancel chat/Close game (it does both of these at the same time so gg)
- Arrow Keys: Rotate camera
- Mouse Wheel: Zoom in/out
Configuration
Server connection can be configured using command-line flags:
# Connect to default server (boner.be:6969)
go run main.go
# Connect to local server
go run main.go -local
# Connect to specific server
go run main.go -addr somehost # Uses somehost:6969
go run main.go -addr somehost:6970 # Uses somehost:6970
Note: The -local
flag is a shorthand for -addr localhost:6969
and cannot be used together with -addr
.
Building Release Binaries
The project uses Docker to create consistent builds across platforms. To build release binaries:
- Build the Docker image (only needed once):
sudo docker build -t goonscape-builder -f Dockerfile.build .
- Create release builds:
sudo docker run -v $(pwd):/build goonscape-builder
This will create zip files in the build
directory for:
- Windows (64-bit):
goonscape-windows-amd64-v1.0.0.zip
- Linux (64-bit):
goonscape-linux-amd64-v1.0.0.zip
Each zip contains the binary and all required assets.
Development
The project uses Protocol Buffers for network communication. If you modify the .proto
files, regenerate the Go code with:
protoc --go_out=. goonserver/actions/actions.proto
Fixing the models
This is a note/reminder to myself. The models and animations are generated with meshy.ai (referral link, give me credits pls). Somehow the bones armature things are not in the same root as the model and it becomes like a weird pudding when using the animation. I had to manually fix this in Blender by doing:
- Selected the char1 mesh thing
- Alt + P (the right Alt kek) => Clear Parent and Keep Transform
- Tried to do the same for Armature, they should both be in the Scene collection as siblings, so straight from root
- Select char1 and press Ctrl + A => All Transforms
- Repeat for Armature
- Select char1 and make sure it still has the Armature Modifier attached (via purple wrench icon), I remove it and reapply it just to be sure
When exporting it, I make sure Transform +Y is up direction is turned off, otherwise my gooner walks on the walls instead of the floor lmao