Code Monkey home page Code Monkey logo

wowser's Introduction

Wowser

Version Join Community Build Status Known Vulnerabilities Maintainability Test Coverage

World of Warcraft in the browser using JavaScript and WebGL.

Licensed under the MIT license.

See Wowser tech demo

Status

Wowser is in the process of being split up into (at minimum) the following parts:

  • Client (user interface loaded from XML/LUA)
  • Pipeline server (serves up resources from the official client)

This repository will in the future become an umbrella package.

Background

Wowser is a proof-of-concept of getting a triple-A game to run in a webbrowser, attempting to tackle a wide variety of challenges: data retrieval, socket connections, cryptography, 3d graphics, binary data handling, background workers and audio, to name a few.

Features

Wowser is aiming to be both a low-level API as well as a graphical client, interacting with a World of Warcraft server like an official client would.

Note: Only Wrath of the Lich King (3.3.5a) is currently supported. A copy of the official client is required.

Warning: Do not attempt to use this client on official/retail servers as your account may get banned.

At present, Wowser is capable of:

  • Authenticating by username / password.
  • Listing available realms.
  • Connecting to a realm.
  • Listing characters available on a realm.
  • Joining the game world with a character.
  • Logging game world packets, such as when a creature moves in the vicinity.

In addition, there's good progress on getting terrain and models rendered.

Browser Support

Wowser is presumed to be working on any browser supporting JavaScript's typed arrays and at the very least a binary version of the WebSocket protocol.

Development

Wowser is written in ES2015, developed with webpack and Gulp, compiled by Babel and soon™ to be tested through Mocha.

  1. Clone the repository:

    git clone git://github.com/wowserhq/wowser.git
  2. Download and install Node.js – including npm – for your platform.

  3. Install dependencies:

    npm install
  4. Install StormLib and BLPConverter, which are used to handle Blizzard's game files.

Client

Webpack's development server monitors source files and builds:

npm run web-dev

Wowser will be served on http://localhost:8080.

Pipeline server

To deliver game resources to its client, Wowser ships with a pipeline.

Build the pipeline:

npm run gulp

Keep this process running to monitor source files and automatically rebuild.

After building, serve the pipeline as follows in a separate process:

npm run serve

On first run you will be prompted to specify the following:

  • Path to client data folder (e.g. C:/Program Files (x86)/World of Warcraft/Data)
  • Server port (default is 3000)
  • Number of cluster workers (default depends on amount of CPUs)

Clear these settings by running npm run reset

Disclaimer: Wowser serves up resources to the browser over HTTP. Depending on your network configuration these may be available to others. Respect laws and do not distribute game data you do not own.

Socket proxies

To utilize raw TCP connections a WebSocket proxy is required for JavaScript clients.

Websockify can - among other things - act as a proxy for raw TCP sockets.

For now, you will want to proxy both port 3724 (auth) and 8129 (world). Use a different set of ports if the game server is on the same machine as your client.

npm run proxy 3724 host:3724
npm run proxy 8129 host:8129

Contribution

When contributing, please:

  • Fork the repository
  • Open a pull request (preferably on a separate branch)

wowser's People

Contributors

dduarte avatar fallenoak avatar petersandor avatar timkurvers avatar yehonal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wowser's Issues

npm run scripts fail

I get the following error when I try to run either npm run serve or npm run start

λ npm run serve

> [email protected] serve C:\Projects\wowser
> bin/serve

'bin' is not recognized as an internal or external command,
operable program or batch file.

npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "serve"
npm ERR! node v0.12.5
npm ERR! npm  v2.11.2
npm ERR! code ELIFECYCLE
npm ERR! [email protected] serve: `bin/serve`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] serve script 'bin/serve'.
npm ERR! This is most likely a problem with the wowser package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     bin/serve
npm ERR! You can get their info via:
npm ERR!     npm owner ls wowser
npm ERR! There is likely additional logging output above

Forced 2D view on Windows?

After a while, I ran wowser (latest master updates) and saw this:

wowser-latest

I couldn't interact at all. Any ideas about what's going on?

Use BufferedGeometry

http://threejs.org/docs/#Reference/Core/BufferGeometry:

This class is an efficient alternative to Geometry, because it stores all data, including vertex positions, face indices, normals, colors, UVs, and custom attributes within buffers; this reduces the cost of passing all this data to the GPU. This also makes BufferGeometry harder to work with than Geometry; rather than accessing position data as Vector3 objects, color data as Color objects, and so on, you have to access the raw data from the appropriate attribute buffer. This makes BufferGeometry best-suited for static objects where you don't need to manipulate the geometry much after instantiating it.

Certain ADTs cannot be loaded

Might be related to the MCAL and MCSH chunks reporting incorrect sizes.

Known problematic ADTs:

  • Daggercap Bay (Northrend)

Look into riotify

Riotify would allow bundling the UI using CommonJS requires, no longer requiring global variables/scripts to be present.

demo video

hey I don't have WoW installed but i'm curious what this looks like!

wowser terminates abruptly on Windows (during BLP processing)

Hi, this may be related to issue reported in dependency wowserhq/blizzardry#51

There is no error message on crash, I had to search where the app crashes:

return BLP.from(req.resource.data, function(blp) {
var mipmap, png;
mipmap = blp.largest;
png = new PNG({
width: mipmap.width,
height: mipmap.height
});
png.data = mipmap.rgba;
res.set('Content-Type', 'image/png');
return png.pack().pipe(res);
});

(it doesn't crash when I send a randomly coloured PNG back)

After the crash I get -1073741819 from echo %ERRORLEVEL% (access violation)

Any help greatly apprieciated

Thanks

Peter

Split all pipeline components into web workers

This would prevent the (massive) lag currently experienced when loading the M2, ADT and BLP formats in the game screen.

Each pipeline component (M2, ADT and BLP) should get their own Browserified bundle, each to run in a separate Web Worker.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.