137 lines
3.9 KiB
Markdown
137 lines
3.9 KiB
Markdown
# 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](https://github.com/gen2brain/raylib-go#requirements))
|
|
|
|
## 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:
|
|
```bash
|
|
# 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:
|
|
```bash
|
|
# 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:
|
|
```bash
|
|
# Install the client
|
|
go install gitea.boner.be/bdnugget/goonscape@latest
|
|
```
|
|
|
|
Or build from source:
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
1. Build the Docker image (only needed once):
|
|
```bash
|
|
sudo docker build -t goonscape-builder -f Dockerfile.build .
|
|
```
|
|
|
|
2. Create release builds:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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)](https://www.meshy.ai/?utm_source=referral-program&utm_medium=link&utm_content=TUZLRK). 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
|
|
|