# GoonServer

The server component for GoonScape, handling multiplayer synchronization and chat.

## Features

- Tick-based game state synchronization
- Player movement validation
- Global chat system
- Client connection management
- Protobuf-based network protocol

## Prerequisites

- Go 1.23 or higher
- Protocol Buffers compiler (protoc)

## Installation

1. Clone the repository:
```bash
git clone https://gitea.boner.be/bdnugget/goonserver.git
cd goonserver
```

2. Install dependencies:
```bash
go mod tidy
```

3. Build and run:
```bash
go run main.go
```

## Configuration

Server settings can be modified in `main.go`:
```go
const (
    port     = ":6969"               // Port to listen on
    tickRate = 600 * time.Millisecond // Server tick rate
)
```

## Protocol

The server uses Protocol Buffers for client-server communication. The protocol is defined in `actions/actions.proto`:

- `Action`: Player actions (movement, chat)
- `ActionBatch`: Grouped actions from a player
- `ServerMessage`: Game state updates to clients
- `PlayerState`: Individual player state
- `ChatMessage`: Player chat messages

## Development

After modifying the protocol (`actions.proto`), regenerate the Go code:
```bash
protoc --go_out=. actions/actions.proto
```

## Deployment

The server is designed to run on a single instance. For production deployment:

1. Build the binary:
```bash
go build -o goonserver
```

2. Run with logging:
```bash
./goonserver > server.log 2>&1 &
```
