Skip to content

lab1702/netrek-web

Repository files navigation

NETREK-WEB

Netrek-Web screenshot

A browser-based version of the classic Netrek game. Play instantly in your web browser - no installation required!

Quick Start

For Players

  1. Visit the server in your browser: http://server-address:8080
  2. Enter your name and choose a team
  3. Click "Enter Game" to start playing

For Server Owners

# Install the server
go install github.com/lab1702/netrek-web@latest
# Run the server
netrek-web
# Or run on custom port
netrek-web -port 3000

Server is now running at http://localhost:8080

Game Controls

Mouse

  • Left Click: Fire torpedo
  • Middle Click: Fire phaser
  • Right Click: Set course

Keyboard

  • 0-9: Set speed
  • S: Shields
  • O: Orbit planet
  • R: Repair
  • L: Lock on target
  • C: Cloak
  • T/Y: Tractor/Pressor beam
  • P: Plasma torpedo
  • D: Detonate torpedoes
  • B: Bomb planet
  • Z/X: Beam armies up/down
  • A: Message all
  • Shift+T: Team message
  • ?: Help window
  • \: Practice mode (add bots)

Advanced Setup

Build from Source

Prerequisites: Go 1.26+

git clone https://github.com/lab1702/netrek-web.git
cd netrek-web
go build
./netrek-web

Docker

docker build -t netrek-web .
docker run -d -p 8080:8080 netrek-web

Game Features

  • 4 teams with 40 planets
  • 6 ship types (Scout, Destroyer, Cruiser, Battleship, Assault, Starbase)
  • Real-time space combat
  • Tournament mode (4v4+)
  • Practice mode with bots
  • Team messaging system

Development

Code Organization

The project is organized into clear modules for maintainability and scalability:

Server Architecture (server/)

  • Handler Modules: Focused, modular message handlers

    • game_state_handlers.go - Login and quit handlers
    • movement_handlers.go - Movement, orbit, and lock handlers
    • combat_handlers.go - Weapons and combat systems
    • ship_management_handlers.go - Repair, beam, and bomb handlers
    • communication_handlers.go - All messaging systems
    • bot_handlers.go - Bot management commands
    • handler_utils.go - Shared utilities and data structures
  • Game Engine: Core game mechanics and systems

    • websocket.go - WebSocket handling and game loop
    • physics.go - Physics simulation and collision detection
    • projectiles.go - Torpedo and projectile systems
    • systems.go - Ship systems (shields, weapons, engines)
    • planets.go - Planet mechanics and interactions
    • tournament.go - Tournament mode logic
    • victory.go - Victory conditions and game ending
  • Bot AI System: Intelligent computer opponents

    • bots.go - Main bot coordination and initialization
    • bot_combat.go - Combat decision-making and targeting
    • bot_navigation.go - Movement and pathfinding
    • bot_planet.go - Strategic planet capture decisions
    • bot_weapons.go - Weapon firing and aim calculation
    • bot_jitter.go - Position randomization to prevent clustering
    • bot_helpers.go, bot_types.go - Supporting utilities
  • Utilities: Supporting systems

    • intercept.go - Advanced torpedo targeting calculations
    • game_helpers.go - Game utility functions

Client Architecture (static/)

  • index.html, game.html - Landing page and game interface
  • netrek.js - Main game client and WebSocket communication
  • ship-renderer.js, planet-renderer.js - Rendering systems
  • info-window.js - HUD and information displays
  • ship-bitmaps-all-teams.js - Ship sprite data
  • convert_bitmaps.js - Utility to convert X11 bitmap data for planet sprites

Game Data (game/)

  • types.go - Core game data structures
  • planets.go - Planet configurations and initialization
  • torp.go - Torpedo physics and range calculations

This modular structure enables:

  • Clear separation of concerns
  • Easy navigation to specific systems
  • Parallel development without conflicts
  • Comprehensive test coverage
  • Maintainable and extensible codebase

Testing

The project includes comprehensive test coverage for all critical systems:

Test Files

  • Game Logic: game/torp_test.go - Torpedo physics and range calculations
  • Server Core:
    • server/handlers_test.go - HTTP and WebSocket handlers
    • server/harness_test.go - Test harness utilities
    • server/test_helpers.go - Testing support functions (helper file)
  • Bot AI System:
    • server/bots_test.go - Bot behaviors and decision-making
    • server/bot_combat_test.go - Bot combat improvements and targeting
    • server/bot_jitter_test.go - Position jittering system
  • Combat Systems:
    • server/starbase_fire_test.go - Starbase weapon systems
    • server/weapon_direction_test.go - Weapon targeting calculations
    • server/orbit_weapons_test.go - Orbital velocity and weapon accuracy
  • Game Features:
    • server/tournament_test.go - Tournament mode logic
    • server/victory_test.go - Victory condition testing
    • server/formatting_test.go - Message formatting tests
  • Utilities: server/intercept_test.go - Advanced targeting algorithms

Running Tests

# Run all tests
go test ./...

# Run with verbose output
go test -v ./...

# Run with coverage report
go test -cover ./...

# Run specific test package
go test ./server
go test ./game

# Code quality checks
go fmt ./...
go vet ./...
go build ./...

Credits

Based on the original Netrek (1986). Visit https://www.netrek.org/ for the classic game.

License

Educational implementation. Original Netrek is open source.

About

Netrek like game written in Go and JavaScript requiring no special client download

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors