A suite of tools for Phantasy Star Online.
Go to file
warmonipa 9b6aea9c59
Some checks failed
Tests / build (push) Has been cancelled
Resolve the visual glitch of Mericus & Merikle. (#26)
2025-03-29 23:11:20 +01:00
.github/workflows All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
buildSrc All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
cell Undid temporary code change necessary for early versions of Kotlin 2. 2025-03-21 14:14:37 +01:00
core All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
gradle/wrapper All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
kotlin-js-store All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
psolib Resolve the visual glitch of Mericus & Merikle. (#26) 2025-03-29 23:11:20 +01:00
psoserv All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
test-utils All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
web All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
webui All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
.gitignore All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
build.gradle.kts All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
FEATURES.md Removed bug from bugs list because it was fixed. 2021-11-30 16:07:33 +01:00
gradle.properties Increased Kotlin daemon max heap size. 2025-03-21 13:51:34 +01:00
gradlew All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00
gradlew.bat Upgraded Kotlin to 1.4.30 and Gradle to 6.8.2. Set the Kotlin JVM version to 11. Added a subproject for offline asset generation which, at the moment, can generate the list of item types. Ported unitxt and ItemPMT parsing. 2021-03-06 13:33:04 +01:00
LICENSE Added license. 2019-05-28 18:43:34 +02:00
README.md All code now compiles with Kotlin 2.1.20, all tests pass, development builds work and production builds work. 2025-03-21 13:17:19 +01:00
settings.gradle.kts All code now compiles with Kotlin 2.0.0 and all tests pass. 2024-07-18 18:24:10 +02:00

Phantasmal World

Phantasmal World is a collection of software for Phantasy Star Online. The web application has a model viewer, quest editor and hunt optimizer. There is also a work-in-progress PSO server.

Developers

Phantasmal World is written in Kotlin and uses the Gradle build tool. Much of the code is multiplatform and reusable as a library.

Tests status Tests status

Features and Bugs

See features for a list of features, planned features and bugs.

Getting Started

  1. Install Java 17 (Temurin is recommended)
  2. Ensure the JAVA_HOME environment variable is set to JDK's location

Then, for the web application:

  1. cd to the project directory
  2. Launch webpack server on http://localhost:1623/ with ./gradlew :web:jsBrowserDevelopmentRun --continuous
  3. web/src/main/kotlin/world/phantasmal/web/Main.kt is the application's entry point

For the PSO server:

  1. cd to the project directory
  2. Start the server with ./gradlew :psoserv:run
  3. psoserv/src/main/kotlin/world/phantasmal/psoserv/Main.kt is the server's entry point

IntelliJ IDEA is recommended for development. IntelliJ setup:

  1. Use Ctrl-Alt-Shift-S to open the Project Structure window and select a JDK (you can let IntelliJ download a JDK if you don't have a compatible one installed)
  2. Configure the Gradle run task for the web application:
    1. In the Gradle window, right click web -> Tasks -> other -> run
    2. Click "Modify Run Configuration..."
    3. Add --continuous to the arguments field
    4. Click OK
    5. You can now start the webpack server from the main toolbar

Exploring the Code Base

The code base is divided up into the following gradle subprojects.

core

Core contains the basic utilities that all other subprojects directly or indirectly depend on.

psolib

Psolib contains PSO file format parsers, compression/decompression code, a PSO script assembler/disassembler and a work-in-progress script engine/VM. It also has a model of the PSO scripting bytecode and data flow analysis for it. This subproject can be used as a library in other projects.

cell

A full-fledged multiplatform implementation of the observer pattern.

test-utils

Test utilities used by the other subprojects.

web

The actual Phantasmal World web application.

webgui

Web GUI toolkit used by Phantasmal World.

psoserv

Work-in-progress PSO server and fully functional PSO proxy server.

Unit Tests

Run the unit tests with ./gradlew check. JS tests are run with Karma and Mocha, JVM tests with Junit 5. Tests can also be run per project with e.g. ./gradlew :psolib:check.

Code Style and Formatting

The Kotlin coding conventions are used.

Production Builds

Web Application

Create an optimized production build with ./gradlew :web:jsBrowserDistribution.

PSO Server

Create a native production build with ./gradlew :psoserv:nativeBuild. Cross-compilation is not possible, this command has to be run on each platform.