Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
www
 
 
 
 
 
 
 
 
 
 

README.markdown

voxeling

Inspired by voxel-engine and voxel.js, this is a multiplayer sandbox (like Minecraft creative mode) implemented in WebGL with very few dependencies. Very much a work in progress.

Demo: https://voxeling.greaterscope.com (Google Chrome and Firefox 46+)

Project blog: https://blog.alanszlosek.com/tags/voxeling/

Preferred texture set:

Past textures provided by:

Player skins from:

Gameplay Features

  • Multiplayer, with maxogden, substack and viking skins
  • Block creation and destruction (batch operations via click-and-drag)
  • Jumping and flying
  • First-person, over-shoulder, third person camera views (these need some love, though)
  • Building materials and material picker dialog
  • Gamepad support (80% complete)
  • Adjustable draw distance (change it according to your GPU speed and memory)
  • World state is saved to files or mysql (install mysql npm module)

What I'm working on

  • Optimizations, always and forever
  • Point light sources and shadow mapping

Technical Features

  • Client and Server (ported bits from my voxel-client and voxel-server forks)
  • Simple physics engine for player movements
  • My own "horizonal merge" meshing algorithm
  • Sample world generators
  • Websocket connection for chat messages, player positions, world changes
  • Chunk data is fetched via AJAX and gzipped
  • Object pool to reduce memory allocations and garbage-collection pauses
  • voxel-highlight replacement
  • Uses hashlru for minimizing trips to the file-system or database for frequently requested chunks
  • Relatively flat architecture means it's easy to get a WebGL handle and the inverse camera matrix for drawing
  • All IO and chunk meshing is done in a web worker, which keeps the framerate very high
  • Directional lighting
  • Day and night cycle (still needs some love)

See it in action in the demo (Google Chrome or Firefox): https://voxeling.greaterscope.com

Or follow the installation instructions below to run it locally.

Installation

In terminal 1:

# git clone the repo into voxeling folder
cd /path/to/voxeling
# Download textures from http://bdcraft.net/purebdcraft-minetest (256x256 version)
# Extract to www/testbdcraft

# Generate combined texture file (cuts down on WebGL bindTexture calls)
# You'll need PHP with gd/imagemagick. Once I get node version working, you won't need PHP
cd scripts
# This generates www/textures.png and texture-offsets.js
php textures.php

npm install

# create folder for world chunks
mkdir -p chunks/your-world

# copy the default config and customize
cp config-example.js config.js
# NOTES
# Be sure to change websocketBindAddress to the address of the interface you want to listen on
# The server config key tells the browser where to connect for a websocket connection.
# Use the "wss://" protocol for secure websocket connection from the browser, "ws://" otherwise
# TODO: put note about server vs httpServer params in config
# Also sample Caddy config for running websocket through same domain assets are served through
vim config.js

# Build and bundle the client code into a single file
node node_modules/browserify/bin/cmd.js src/client.js -o www/bundle.js
# dO the same for the web worker code
node node_modules/browserify/bin/cmd.js src/client-worker.js -o www/client-worker.js

# start server
node src/server.js

In terminal 2:

cd /path/to/voxeling
# Start Caddy to serve the HTML, JavaScript, CSS and chunk files
caddy -conf ./third-party/Caddyfile

Now, point your browser to http://127.0.0.1:9966. Read the introduction for controls and keybindings. Enjoy!

Contributing

See the CONTRIBUTING file

License

MIT License

About

Creative mode WebGL voxel game. Runs in Chrome, with multiplayer functionality and very few dependencies

Topics

Resources

License

Releases

No releases published

Languages

You can’t perform that action at this time.