diff --git a/FEATURES.md b/FEATURES.md new file mode 100644 index 00000000..5d79deb8 --- /dev/null +++ b/FEATURES.md @@ -0,0 +1,115 @@ +# Feature Overview + +Features that are in ***bold italics*** are planned and not yet implemented. + +## Create New Quest + +- *Support for episodes I, II and IV* + +## Load Quest + +- Open file button +- Support for .qst (BB, ***GC***, ***PC***, ***DC***) +- ***Notify user when and why quest loading fails*** + - ***Deal with missing DAT or BIN file in QST container file*** + +## Save Quest + +- Save as button + - Save as dialog to choose name +- Support for .qst (BB, ***GC***, ***PC***, ***DC***) +- ***Notify user when and why quest saving fails*** + +## Undo/Redo + +- Undo/redo stack +- Undo/redo buttons +- Undo/redo keybindings + +## Area Selection + +- Dropdown to switch area + +## Simple Quest Properties + +- Episode +- Editable ID, name, short and long description + - ***Undo/redo*** +- NPC counts + +## 3D View + +- Area geometry + - Collision geometry (c.rel) + - ***Rendering geometry (n.rel)*** + - ***Textures*** +- NPC/object geometry + - Textures +- ***Transparency*** + - ***Order independent transparency*** +- ***Minimap*** +- ***Top-down view (orthogonal view might suffice?)*** +- ***Add "shadow" to entities to more easily see where floating entities are positioned*** + - ***MVP: a single line*** + +## NPC/object manipulation + +- ***Creation*** +- ***Deletion*** +- Translation + - Via 3D view + - Via entity view +- ***Rotation*** +- ***Multi select and translate/rotate/edit*** + +## Script Object Code + +- Disassembler +- Assembler +- Instructions +- Simplified stack management (push* instructions are inserted transparently) +- Data + - Binary data + - ***Strings*** +- Labels + +## Script Assembly Editor + +- Instructions +- Data + - Binary data + - ***Strings*** +- Labels + - ***Show in outline*** +- Autocompletion + - Segment type (.code, .data) + - Instructions +- ***Go to label*** +- ***Warnings*** + - ***Missing 0 label*** + - ***Missing floor handlers*** + - ***Missing map designations*** + - ***Threads (thread, thread_stg) that don't start with a sync*** + - ***Unreachable/unused instructions/data*** + - ***Instructions after "ret" instruction*** + - ***Unused labels*** +- Errors + - Invalid syntax + - Invalid instruction + - Invalid instruction arguments + - ***Invalid label references*** + - ***Mark all duplicate labels (the first one is not marked at the moment)*** +- ***Show instruction parameters on hover over*** +- ***Show reserved register usage on hover over*** +- ***When saving, ask user whether to really save when asm contains errors*** + +## Enemy Waves + +- ***Figure out how they work*** + +## Bugs + +- [Script Object Code](#script-object-code): Make sure data segments are referenced by an instruction with an offset before the segment's offset +- [Script Object Code](#script-object-code): Detect code that is both unused and incorrect and reinterpret it as data (this avoids loading and then saving the quest incorrectly) +- [Area Selection](#area-selection): Lost heart breaker/phantasmal world 4 overwrite area 16 to have both towers +- [Area Selection](#area-selection): Show areas that are referenced from .dat but not from script (test with Point of Disaster (709)) diff --git a/README.md b/README.md index c624b4d1..7becc584 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,23 @@ # Phantasmal World -Phantasmal World is a suite of tools for Phantasy Star Online. This project is in a very early stage of development. +Phantasmal World is a suite of tools for Phantasy Star Online. ## For Developers -React is used for the frontend, MobX is used for state management and THREE.js for 3D graphics. +React is used for the frontend, MobX is used for state management and THREE.js for 3D graphics. See [features](./FEATURES.md) for a list of features, planned features and bugs. ### Getting Started 1. Install Yarn ([https://yarnpkg.com/](https://yarnpkg.com/)) 2. cd to the project directory -3. Launch server on [http://localhost:1623/](http://localhost:1623/) with `yarn start` -4. src/index.tsx is the application's entry point +3. Install dependencies with `yarn` +4. Launch server on [http://localhost:1623/](http://localhost:1623/) with `yarn start` +5. src/index.tsx is the application's entry point ### Tests -Run tests with `yarn test`. +Run tests with `yarn test`. The testing framework used is Jest. ### Production Build -1. Change the homepage field in package.json if you don't want to deploy to / -3. Build with `yarn build` +Create an optimized production build with `yarn build`.