Skip to content

atty303/pob-web

Repository files navigation

pob.cool - Path of Building for browser environment

wakatime

This is browser version of Path of Building.

Features

  • Run the PoB in your browser, that's all.
  • You can select the version of the PoB to run.
  • Saved builds are stored in the browser's local storage.
    • The Cloud folder appears when you are logged into the site. Builds saved there are stored in the cloud and can be accessed from anywhere.
  • You can load a build by specifying a hash in the URL.

Limitations

  • Network access is through our CORS proxy, so all users have the same source IP. This will likely cause rate limiting.
  • For security reasons, requests containing the POESESSID cookie will be unconditionally rejected. Do not enter POESESSID in the PoB of this site.

Principle

  • We will not make any changes to the original PoB. This is because a lot of effort has been put into the PoB itself and we want the community to focus on developing the offline version.
    • However, it does make changes in behavior that are possible without changing the code.

Development

Prerequisites

Clone the Repository

This repository includes a submodule in vendor/lua. To include the submodule when cloning the repository, use the --recurse-submodules flag:

git clone --recurse-submodules <repository-url>

If you omitted the flag, you can use the following commands to clone the submodule:

git submodule init
git submodule update

Install dependencies

npm ci

Run driver shell

Set up a development server for the PoB web driver alone.

npm run build -w packages/driver
npm run dev -w packages/driver

Run web app

Set up a web application development server. You need to build the driver first.

npm run dev -w packages/web

Under the hood

  • Running the original PoB Lua code.
  • Use a custom Lua 5.2 interpreter to run the code.
  • Using Emscripten to compile the PoB engine to WebAssembly.
  • A module equivalent to SimpleGraphic is written in C to bridge with the JS driver.
  • The JS renderer renders using WebGL.
  • packages/driver emulates PoB windows with vanilla JS.
  • packages/web is the React application that uses the driver.