# GoonScape A multiplayer isometric game inspired by Oldschool RuneScape, built with Go and Raylib. ![GoonScape Screenshot](resources/screenshot.png) ## 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