Skip to content

A web-based client written in Javascript for the game Ultima Online

License

Notifications You must be signed in to change notification settings

utkucansever/uojs2

 
 

Repository files navigation

uojs2

A web-based client for the game Ultima Online.

Join the chat at https://gitter.im/uojs2/Lobby Travis build status Dependency Status devDependency Status

Overview

This project is aiming to emulate the game Ultima Online (ver 7.x.x.x) in a web enviroment. It uses websockets (with websockify) to connect to servers that utilize the Ultima Online protocol. It then uses Redux to manage the global state and uses React coupled with three.js for the interface.

I'm mostly using this project to learn more about cool features in javascript. So please let me know if there is a better way to do something.

Also! Please know that this is completely a work in progress and it doesn't do anything spectacular (yet). Please don't tell me that it doesn't work. I know it doesn't work. It will be finished one day, assuming that I don't (1) die in an accident, (2) become homeless, or (3) get burned out from programming.

Current Status

Networking, decompression, global state, React (sorta) works. Three.js still needs to be integrated within the React component.

There also needs to be an art server and a way to quickly transfer art between the server and client. WebP + http2? maybe? no idea. Will research ideal image formats: gif is small, has a single alpha channel, and has limited colors... so this might be ideal.

Requirements

Browser requirements

  • Modern browser
  • WebGL support
  • Websocket support

Development & hosting requirements

  • Node.js, version 6+
  • ServUO (or possibly an alternative)

Getting Started

  1. Start your ServUO server. Edit src/server/config.js if needed.
  2. Clone the repository
  3. Install dependencies: npm install
  4. Build the project: gulp build (or gulp watch)
  5. Start websockify: npm start (this might not work)
  6. Open index.html
  7. Eat sandwich

Contributing

Here are some ways you can contribute to this project!

  • Implement more of the packets. Check out the state directory for examples.
  • Create a UI. I'm thinking if the state has an 'invalidate' flag, so that when set to true, it'll call a redraw in the redux subscribe method, which just rerenders the viewport. Does that make sense? I have no idea.
  • Code review it! If you're a hardcore javascripter (is that a word?), I really want you to tell me what can be improved on here.
  • Add in pages in the Wiki
  • Write tests (these are like the last thing on my todo list)
  • Migrate everything into web workers (particularly networking, redux stuff, and decompression). Then on the redux subscribe callback, transfer the data into the main UI thread?
  • If you live in Seattle, buy me some more beer. pls 🍺

ga

About

A web-based client written in Javascript for the game Ultima Online

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 97.0%
  • HTML 3.0%