An open API service indexing awesome lists of open source software.

https://github.com/2003scape/rsc-client

🎮 runescape classic web client
https://github.com/2003scape/rsc-client

games jagex java-game javascript-game mmorpg mmorpg-client remake rsc rsps runescape runescape-client

Last synced: 7 months ago
JSON representation

🎮 runescape classic web client

Awesome Lists containing this project

README

          

# rsc-client
a port of the
[runescape classic](https://classic.runescape.wiki/w/RuneScape_Classic) client
([*mudclient revision 204*](https://github.com/2003scape/mudclient204))
from java to javascript.

this client is designed to work with
[rsc-server](https://github.com/2003scape/rsc-server) and
[RSCGo](https://github.com/spkaeros/RSCGo).

![](./screenshot.png?raw=true)

## install

$ npm install @2003scape/rsc-client

## usage
after making modifications to `./src/`, run `$ npm install` to install developer
dependencies, then `$ npm run build-dev` to create a new bundle in `./dist/`.

the `./dist/` directory contains everything you need to use the client.
run `$ npm start` to start a simple HTTP server at http://localhost:1337.
you may put optional arguments into the hash of the URL:

http://localhost:1337/index.html#members,127.0.0.1,43595

alternatively, you can manually invoke `mudclient` on your own canvas:

```javascript
const mudclient = require('@2003scape/rsc-client');

const mc = new mudclient(document.getElementById('mudclient-canvas'));
mc.members = false;
mc.threadSleep = 10;

(async () => {
await mc.startApplication(512, 346, 'Runescape by Andrew Gower');
})();
```

if you don't want to host a separate websockets server, you can
pass a [Web Worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker)
instance of rsc-server into the `.server` property instead.

see https://github.com/2003scape/rsc-server#browser-usage

## options
features from earlier mudclients and/or inspired by modern third-party clients
with their default values:

```javascript
// hold down middle click and move the mouse to rotate the camera (only when
// camera is type manual)
mc.options.middleClickCamera = true;

// scroll panel lists and chatbox with the mouse wheel (and camera if zoom
// enabled)
mc.options.mouseWheel = true;

// click the compas to face north
mc.options.resetCompass = true;

// show roofs unless inside buildings
mc.options.showRoofs = false;

// use arrow keys (and mouse wheel if enabled) to zoom in and out
mc.options.zoomCamera = true;

// show the remaining experience until next level in skills tab
mc.options.remainingExperience = false;

// show your total experience in the skills tab
mc.options.totalExperience = false;

// censor chat and private messages
mc.options.wordFilter = true;

// support account registration, password changes and recovery within the
// client using jagex's older UIs
mc.options.accountManagement = true;

// display an "Fps: X" counter at the bottom right of the screen
mc.options.fpsCounter = false;

// retry logins when the server disconnects
mc.options.retryLoginOnDisconnect = true;

// experimental mobile support
mc.options.mobile = false;
```

## assets
make sure that wherever you host it, it's able to access
`./data204/` via
[XHR](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)
for its cache files.

## faq
* what is the purpose of `| 0`? why not use `Math.floor()`?

`number | 0` is an
[asm.js](https://github.com/zbjornson/human-asmjs#11-type-declaration)
declaration for declaring a number as a 32-bit integer. the original
java client used integer overflow techniques often, and this is the most
performant method to declare them and accomplish the correct
behaviour (javascript's
[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)
is an [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754); a
[java double](https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html)).

## license
Copyright 2021 2003Scape Team

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your option)
any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along
with this program. If not, see http://www.gnu.org/licenses/.