Compare commits

...
80 Commits
Author SHA1 Message Date
Melina Preuß da6c2657e1 list changes 2023-06-06 22:16:12 +02:00
Lukas Obermann eb6a6f1950 refactor: migrate List component 2023-06-06 12:57:34 +02:00
Lukas Obermann 553324bc1c feat: increase root font size 2023-06-05 22:38:51 +02:00
Lukas Obermann 982827a00f refactor: rename preloadApi to ExternalAPI in renderer contexts 2023-06-05 22:25:57 +02:00
Lukas Obermann 0c0ceeb0fa refactor: scrolling page frame 2023-06-05 22:19:04 +02:00
Lukas Obermann 24d5352f04 refactor: restructure src folder to easily differenciate between processes 2023-06-05 18:13:48 +02:00
Lukas Obermann 5b9df3748b refactor!: migrate basic navigation bar 2023-06-03 22:30:19 +02:00
Lukas Obermann 5c4d058e72 refactor!: adjust titlebar for macos 2023-06-03 13:15:50 +02:00
Lukas Obermann 39486a3f29 test: switch from jest to native node test runner 2023-06-03 12:04:35 +02:00
Lukas Obermann a09a321a7a ci: use node version 20 2023-06-03 11:43:41 +02:00
Lukas Obermann dca99eae08 build(deps): remove unnecessary packages 2023-06-03 11:39:53 +02:00
Lukas Obermann fbc753b467 build(deps): prune typings where its associated packages are not included anymore 2023-06-03 11:29:07 +02:00
Lukas Obermann e86b2559d6 build(deps): remove explicit listing of packages included with @reduxjs/toolkit 2023-06-03 10:10:44 +02:00
Lukas Obermann a83b1bd9bd build(deps): remove packages conflicting with recent versions of react and redux 2023-06-03 10:09:26 +02:00
Lukas Obermann 6decdd580a build(deps): remove insecure @electron/remote package 2023-06-03 10:08:21 +02:00
Lukas Obermann 41f32f8af9 refactor: move base styles and styles for all migrated components 2023-06-03 00:15:06 +02:00
Lukas Obermann 0620d76d8d build(webpack): use webpack for bundling scss files 2023-06-03 00:09:58 +02:00
Lukas Obermann dd8a91d0f8 refactor!: adjust title bar to plain js and register window events via preload script 2023-06-02 23:59:52 +02:00
Lukas Obermann 977841899f refactor!: adjust root view to plain js 2023-06-02 23:57:47 +02:00
Lukas Obermann 81aee53e4f refactor!: put initial database into redux store 2023-06-02 23:36:22 +02:00
Lukas Obermann 992f026662 refactor!: upgrade react and redux root 2023-06-02 23:26:22 +02:00
Lukas Obermann 44d4c83030 build(ts): ignore old files 2023-06-01 10:30:11 +02:00
Lukas Obermann a88dfc4c37 build(deps): upgrade redux packages 2023-06-01 10:22:38 +02:00
Lukas Obermann 40733ed679 refactor: move assets into src folder 2023-05-31 14:45:03 +02:00
Lukas Obermann e2ca8d5df3 feat!: adjust root processes to recent security and parallelization recommendations
This commit contains multiple changes at once.
- It migrates everything to new APIs.
- It uses a separate window for interacting with updates.
- It uses preload scripts for IPC.
- It integrates the database via a separate utility process.
2023-05-31 14:44:39 +02:00
Lukas Obermann 20536d4f69 build(gen): migrate config schema building to generator 2023-05-31 14:40:22 +02:00
Lukas Obermann 0cad4919a9 build(ts): upgrade typescript config 2023-05-31 14:38:52 +02:00
Lukas Obermann f85f52a7e5 build(webpack): upgrade webpack config 2023-05-31 14:38:39 +02:00
Lukas Obermann 24933a677d build(deps): upgrade core packages 2023-05-31 14:38:01 +02:00
Lukas Obermann fcc96c0460 style(config): adjust some uncommon eslint configurations 2023-05-31 14:37:40 +02:00
Lukas Obermann a4f55d9455 build(git): ignore mac meta files and new .webpack output folder 2023-05-31 14:37:10 +02:00
Lukas Obermann f7fdc3a8a0 refactor: remove outdated reasonml bridging helpers 2023-05-31 14:35:28 +02:00
Lukas Obermann aa639a0139 build(git): change database module path 2023-05-31 14:35:15 +02:00
Lukas Obermann bc80b0479a docs: add easier option to receive the database for contribution purposes 2023-01-24 18:52:20 +01:00
cziermannandChristian Ziermann fdd391b849 docs: correct build command for ts
Refs: #1592
Co-authored-by: Christian Ziermann <christian.ziermann@contabo.de>
2023-01-07 13:09:25 +01:00
Lukas Obermann 057edce846 build(release): 1.5.2-alpha.4 2022-07-22 23:31:27 +02:00
Lukas Obermann c52fc26a1b fix: improvement cost handling for some traditions
The refactoring resulted in no spells being available to intuitive mages.

In general, comparing improvement costs directly did not work.
2022-07-22 23:30:16 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d28667a935 build(deps): bump terser from 5.10.0 to 5.14.2
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Refs: #1382

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-22 21:03:23 +02:00
Lukas Obermann b92e47cd13 ci: update and streamline test workflow 2022-07-14 13:17:09 +02:00
Lukas Obermann 87a21b6fc4 style(ci): indent lists by two spaces 2022-07-14 13:07:31 +02:00
Lukas Obermann ccd0898f4e ci: provide apple csc env variables to macOS build only 2022-07-14 13:06:40 +02:00
Lukas Obermann c162931e74 fix: show improvement cost in tabular list 2022-07-12 22:16:27 +02:00
Lukas Obermann b578254d75 refactor: remove inconsistent and wrong usage of prefix functions 2022-07-12 10:23:26 +02:00
Lukas Obermann 7b57aca991 build(release): 1.5.2-alpha.3 2022-07-12 10:05:12 +02:00
Lukas Obermann 282467e4af refactor: disallow use of improvement cost as simple number 2022-07-12 10:04:54 +02:00
Lukas Obermann e6d1b8d3fd build(release): 1.5.2-alpha.2 2022-07-11 15:45:53 +02:00
Lukas Obermann f09be7d54b ci: fix package named import 2022-07-11 15:45:39 +02:00
Lukas Obermann 3397ed8cee ci: forward code signing certificates for macos 2022-07-11 15:37:48 +02:00
Lukas Obermann 7b6a0980b9 ci: fix package import 2022-07-11 15:24:55 +02:00
Lukas Obermann 7b245b989b ci: remove reasonml build from test 2022-07-11 15:23:04 +02:00
Lukas Obermann 32058f76c2 build(notarization): adjust plist for notarization 2022-07-11 15:14:23 +02:00
Lukas Obermann a6576bb8ab refactor: remove reasonml from project 2022-07-11 12:12:19 +02:00
Lukas Obermann 7c6e377692 feat: enable auto-update for macOS 2022-07-11 10:00:09 +02:00
Lukas Obermann fe7c5e68ed build: integrate notarization 2022-07-10 23:17:46 +02:00
Lukas Obermann 531530e763 build(deps): upgrade electron to 19.0.4 2022-06-19 12:37:51 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e1befd1383 build(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1375)
Bumps [semver-regex](https://github.com/sindresorhus/semver-regex) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/sindresorhus/semver-regex/releases)
- [Commits](https://github.com/sindresorhus/semver-regex/commits/v3.1.4)

---
updated-dependencies:
- dependency-name: semver-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-08 09:40:18 +02:00
Lukas Obermann 2eb87c8f4c build(deps): bump packages with vulnerabilities
- bump ejs from 3.1.6 to 3.1.7
- bump async from 0.9.2 to 3.2.3
- bump filelist from 1.0.2 to 1.0.3
- bump jake from 10.8.2 to 10.8.5
2022-04-29 11:17:10 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Lukas Obermann
531715f171 build(deps): bump plist from 3.0.4 to 3.0.5
Refs: #1371
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2022-04-29 11:11:33 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4c9096b3d5 build(deps): bump minimist from 1.2.5 to 1.2.6
Refs: #1365
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-29 11:10:27 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7c3d722d7e build(deps): bump moment from 2.25.3 to 2.29.2
Refs: #1364
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-29 11:09:26 +02:00
Lukas Obermann c4b995e046 build(release): 1.5.2-alpha.1 2022-04-29 11:01:20 +02:00
Lukas Obermann c987847c9b feat: add krallenkettenzauber as placeholder 2022-04-29 10:54:57 +02:00
Lukas Obermann e99828f1cc docs(changelog): add general changelog for 1.5.1 2022-03-21 11:33:42 +01:00
Lukas Obermann 246b3d5c1d build(release): 1.5.1
Refs: #1361
2022-03-20 15:26:41 +01:00
Lukas Obermann 8d54177cac Merge branch 'master' into release/1.5.1 2022-03-20 15:21:54 +01:00
Lukas Obermann 96c7b54fce docs(changelog): add Dutch changelogs für 1.5.1 2022-03-20 15:18:38 +01:00
Lukas Obermann 5c7ffd0660 docs(changelog): add initial 1.5.1 changelogs 2022-02-25 08:29:51 +01:00
Lukas Obermann d24fae03b7 build(release): 1.5.1-alpha.2 2022-02-22 11:16:20 +01:00
Lukas Obermann 8102bb1a9a fix: advantage Inspire Confidence could be bought with social Incompetence
Fixes #1351
2022-02-22 11:14:09 +01:00
Lukas Obermann 07d336dbb3 feat(maptool): add project links 2022-02-22 10:51:37 +01:00
Lukas Obermann d40bdac744 refactor(maptool): resolve most TODOs 2022-02-21 15:20:30 +01:00
Lukas Obermann d3926aff86 build(release): 1.5.1-alpha.1 2022-02-21 09:36:44 +01:00
Lukas Obermann 80fdffb373 fix(maptool): no export possible without an avatar
Fixes #1348
2022-02-21 09:36:25 +01:00
Lukas Obermann 92bfcb96b0 build(ide): disable output scanning for release tasks 2022-02-18 11:50:28 +01:00
Lukas Obermann afd32c9827 build(release): 1.5.1-alpha.0 2022-02-18 11:48:57 +01:00
Lukas Obermann 3f87dca910 fix: add missing Italian translations for MapTool export
Fixes #1350
2022-02-18 11:16:14 +01:00
Lukas Obermann 2c9332c37f fix: markdown parser ignores strikethrough
The GFM plugin was missing.

Fixes #1349
2022-02-18 11:06:44 +01:00
Lukas ObermannandLector 9e9a1139d3 fix(maptool): format change for 1.11.4
Since MapTool v1.11.14 a sizeMap needs to be included, otherwise the import does
not work. Maybe the format changed happend earlier.

Co-authored-by: Lector <dragonsfire@gmx.de>
2022-02-10 18:47:31 +01:00
Lukas Obermann c5d2b0a7a4 docs(changelog): add French changelog for 1.5.0 2022-02-09 12:51:33 +01:00
Lukas Obermann f1e16d5c39 docs(changelog): remove unreleased feature
(cherry picked from commit 449f8c7bb2)
2022-02-09 12:10:05 +01:00
490 changed files with 15542 additions and 56085 deletions
+1 -3
View File
@@ -1,5 +1,3 @@
src/App/Utilities/YAML/Schema/
*.cjs
*.js
*.gen.tsx
node_modules
/app
+9 -19
View File
@@ -8,8 +8,7 @@ plugins:
parserOptions:
ecmaVersion: latest
sourceType: module
project:
- ./tsconfig.json
project: ./tsconfig.json
ecmaFeatures:
jsx: true
env:
@@ -166,7 +165,6 @@ rules:
jsx-quotes: 2
key-spacing: 2
keyword-spacing: 2
line-comment-position: 2
lines-around-comment:
- 0
# requires an empty line before block comments
@@ -211,7 +209,6 @@ rules:
- ignoreChainWithDepth: 2
no-bitwise: 2
no-continue: 2
no-inline-comments: 2
no-lonely-if: 2
no-mixed-operators:
- 2
@@ -247,11 +244,6 @@ rules:
- blocks: never
classes: never
switches: never
padding-line-between-statements:
- 2
- blankLine: always
prev: "*"
next: return
prefer-object-spread: 2
quote-props:
- 2
@@ -291,8 +283,12 @@ rules:
prefer-const: 2
prefer-destructuring:
- 2
- object: true
array: false
- VariableDeclarator:
array: true
object: true
AssignmentExpression:
array: false
object: false
prefer-numeric-literals: 2
prefer-rest-params: 2
prefer-spread: 2
@@ -341,7 +337,6 @@ rules:
"@typescript-eslint/prefer-for-of": 2
"@typescript-eslint/prefer-includes": 2
"@typescript-eslint/prefer-readonly": 2
"@typescript-eslint/promise-function-async": 2
# "@typescript-eslint/quotes": 2
"@typescript-eslint/require-array-sort-compare": 2
"@typescript-eslint/require-await": 2
@@ -363,10 +358,7 @@ rules:
comma-spacing: 0
"@typescript-eslint/comma-spacing": 2
func-call-spacing: 0
"@typescript-eslint/func-call-spacing":
- 2
- always
- allowNewlines: true
"@typescript-eslint/func-call-spacing": 2
indent: 0
"@typescript-eslint/indent": 0
no-array-constructor: 0
@@ -399,8 +391,6 @@ rules:
- 2
- never
- beforeStatementContinuationChars: never
space-before-function-paren: 0
"@typescript-eslint/space-before-function-paren": 2
# React
react/boolean-prop-naming: 2
@@ -429,7 +419,7 @@ rules:
react/no-will-update-set-state: 2
react/prefer-es6-class: 2
react/prefer-stateless-function: 2
react/react-in-jsx-scope: 2
react/react-in-jsx-scope: 0
react/require-render-return: 2
react/self-closing-comp: 2
react/state-in-constructor:
+51 -38
View File
@@ -3,7 +3,7 @@ name: Prerelease Builds
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
jobs:
build:
@@ -12,42 +12,55 @@ jobs:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macOS-latest
- ubuntu-latest
- windows-latest
- macOS-latest
include:
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 16.x
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Install Node.js dependencies
run: npm ci
- name: Build ReasonML files
run: npm run re:build
- name: Build TypeScript files
run: npm run js:build
- name: Build Sass files
run: npm run css:build
- name: Build
run: node ./deploy/build.js prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.js prerelease
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile JavaScript files
run: npm run js:build
- name: Compile Sass files
run: npm run css:build
- name: Build macOS application
if: runner.os == 'macOS'
run: node ./deploy/build.mjs prerelease
env:
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
TEAMID: ${{ secrets.TEAMID }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Linux application
if: runner.os == 'Linux'
run: node ./deploy/build.mjs prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Windows application
if: runner.os == 'Windows'
run: node ./deploy/build.mjs prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.mjs prerelease
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
+51 -38
View File
@@ -3,7 +3,7 @@ name: Stable Builds
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+
jobs:
build:
@@ -12,42 +12,55 @@ jobs:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macOS-latest
- ubuntu-latest
- windows-latest
- macOS-latest
include:
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 16.x
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Install Node.js dependencies
run: npm ci
- name: Build ReasonML files
run: npm run re:build
- name: Build TypeScript files
run: npm run js:build
- name: Build Sass files
run: npm run css:build
- name: Build
run: node ./deploy/build.js stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.js stable
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile JavaScript files
run: npm run js:build
- name: Compile Sass files
run: npm run css:build
- name: Build macOS application
if: runner.os == 'macOS'
run: node ./deploy/build.mjs stable
env:
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
TEAMID: ${{ secrets.TEAMID }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Linux application
if: runner.os == 'Linux'
run: node ./deploy/build.mjs stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Windows application
if: runner.os == 'Windows'
run: node ./deploy/build.mjs stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.mjs stable
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
+30 -32
View File
@@ -3,12 +3,12 @@ name: Integration
on:
push:
branches:
- master
- develop
- master
- develop
pull_request:
branches:
- master
- develop
- master
- develop
jobs:
test:
@@ -16,36 +16,34 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 16.x
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Install Node.js dependencies
run: npm ci
- run: npm run re:build
- run: npm run ts:build
- run: npm test
env:
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile TypeScript files
run: npm run ts:build
- name: Run tests
run: npm test
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 16.x
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Install Node.js dependencies
run: npm ci
- run: npm run lint
env:
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Run linter
run: npm run lint
+3
View File
@@ -1,4 +1,7 @@
.DS_Store
node_modules/
/.webpack/**/*
!/.webpack/package.json
npm-debug.log*
.vs/
/data/
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "app/Database"]
path = app/Database
path = src/database/contents
url = https://github.com/elyukai/optolith-data.git
+6 -3
View File
@@ -61,15 +61,18 @@
},
{
"label": "create prerelease",
"command": "npm run release:pre"
"command": "npm run release:pre",
"problemMatcher": []
},
{
"label": "create release",
"command": "npm run release:main"
"command": "npm run release:main",
"problemMatcher": []
},
{
"label": "git push --follow-tags",
"command": "git push --follow-tags"
"command": "git push --follow-tags",
"problemMatcher": []
}
]
}
+3
View File
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
+70
View File
@@ -2,6 +2,76 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [1.5.2-alpha.4](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.3...v1.5.2-alpha.4) (2022-07-22)
### Bug Fixes
* improvement cost handling for some traditions ([c52fc26](https://github.com/elyukai/optolith-client/commit/c52fc26a1b1d6cccc1cfec758da8886be966233b))
* show improvement cost in tabular list ([c162931](https://github.com/elyukai/optolith-client/commit/c162931e74bce5f4fd1e42de6ebc92c71d15e81a))
### [1.5.2-alpha.3](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.2...v1.5.2-alpha.3) (2022-07-12)
### [1.5.2-alpha.2](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.1...v1.5.2-alpha.2) (2022-07-11)
### Features
* enable auto-update for macOS ([7c6e377](https://github.com/elyukai/optolith-client/commit/7c6e3776921fdc4f13c42ea5c6a4bf5d316856e1))
### [1.5.2-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.2...v1.5.2-alpha.1) (2022-04-29)
### Features
* add krallenkettenzauber as placeholder ([c987847](https://github.com/elyukai/optolith-client/commit/c987847c9b192a0528df52da33f55adf90164eaf))
## [1.5.1](https://github.com/elyukai/optolith-client/compare/v1.5.0...v1.5.1) (2022-03-20)
### Enhancements
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* **MapTool:** Add missing Italian translations for export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350)
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
### [1.5.1-alpha.2](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.1...v1.5.1-alpha.2) (2022-02-22)
### Features
* **maptool:** add project links ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* advantage Inspire Confidence could be bought with social Incompetence ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
### [1.5.1-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.0...v1.5.1-alpha.1) (2022-02-21)
### Bug Fixes
* **maptool:** no export possible without an avatar ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
### [1.5.1-alpha.0](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.9...v1.5.1-alpha.0) (2022-02-18)
### Bug Fixes
* add missing Italian translations for MapTool export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350)
* add more action types that should be ignored for undo history ([d2eca82](https://github.com/elyukai/optolith-client/commit/d2eca82ea5fd1d65f234363d2700c80f37afe653))
* **maptool:** format change for 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* markdown parser ignores strikethrough ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## [1.5.0](https://github.com/elyukai/optolith-client/compare/v1.4.2...v1.5.0) (2022-02-09)
### Features
+5 -5
View File
@@ -28,7 +28,7 @@ You can suggest features either in the issues tracker or in one of the [listed f
### Important note
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. Please join my [Discord Server](https://discord.gg/uDyR4yr) if you want to contribute and thus need to access them. Just text me in a channel on the server or PN me (@elyukai).
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. If you only plan to contribute something independent of the database, you can just get the database from an alpha installation. On Windows, for example, the database is available under `Resources/app.asar.unpacked/app/Data` inside the installation folder. If you plan to contribute anything to the database itself and thus need to access its source, please join my [Discord Server](https://discord.gg/uDyR4yr) and text me in a channel on the server or PN me (@elyukai).
### Basic development rules
@@ -42,9 +42,9 @@ Due to licensing, the YAML files containing the crunch elements from the books a
### Install required software
- **Git** &mdash; https://git-scm.com/downloads or via a package manager
- **Node.js** with **npm** &mdash; https://nodejs.org/en/ or via [`nvm`](https://github.com/nvm-sh/nvm)
- *Optional:* **Visual Studio Code** &mdash; https://code.visualstudio.com/ (you can use your own editor as well, there are project-specific VSCode settings within this repository, though)
- **Git** &mdash; <https://git-scm.com/downloads> or via a package manager
- **Node.js** with **npm** &mdash; <https://nodejs.org/en/> or via [`nvm`](https://github.com/nvm-sh/nvm)
- *Optional:* **Visual Studio Code** &mdash; <https://code.visualstudio.com/> (you can use your own editor as well, there are project-specific VSCode settings within this repository, though)
### Prepare the repo
@@ -69,7 +69,7 @@ Compile the source code. `js:` is for TypeScript/Webpack, `re:` for Reason/OCaml
You have to run the Reason build first as it generates TypeScript files...
```sh
npm run re:build
npm run ts:build
npm run css:build
npm run js:build
```
Submodule app/Database updated: 7478a7a057...fe41061524
+13
View File
@@ -1,3 +1,16 @@
## 1.5.1
### Verbesserungen
* **MapTool:** unter dem Exportbutton sind nun Links zu der MapTool-Erweiterung ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Fehlerbehebungen
* **MapTool:** ohne Avatar konnte nicht exportiert werden ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), schließt [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** für MapTool Version 1.11.4 wurde das Exportformat angepasst ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Vorteil *Vertrauenerweckend* konnte selbst mit einem aktiven Nachteil *Inkompetent* in einem Gesellschaftstalent gekauft werden ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), schließt [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Voraussetzungen, die hätten durchgestrichen werden sollen, wurden stattdessen mit umgebenen Tilden dargestellt ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), schließt [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
+14
View File
@@ -1,3 +1,17 @@
## 1.5.1
### Enhancements
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
<!-- * **MapTool:** Add missing Italian translations for export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350) -->
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
+45 -32
View File
@@ -1,44 +1,57 @@
## 1.5.1
### Améliorations
* **MapTool:** ajout de liens vers l'extension près du bouton d'export ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bugs corrigés
* **MapTool:** sans avatar aucun export n'était possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), fermeture [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** modification du format d'export pour MapTool en version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* L'avantage *Rassurant* pouvait être acheté malgré un désavantage *Incompétent* dans un des talents sociaux ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), fermeture [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Les prérequis à ne pas remplir étaient affichés avec des tirets autour au lieu d'être rayés ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), fermeture [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Fonctionnalités
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
* Export MapTool ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Traductions en portugais ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Support natif Apple M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
### Améliorations
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
* Sécurité ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
### Bugs rectifiés
### Bugs corrigés
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Bornlander cultural package had Leatherworking instead of Prepare Food ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
* Des PV supplémentaires fixaient une valeur minimale requise de FO au lieu de CN. ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Les indicateurs d'armes à deux mains (2M) et d'armes improvisées (i) manquaient sur la feuille de personnage. ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Les armes de bagarre n'avaient pas de parade sur la feuille de personnage. ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* Une entrée qui dépend d'une seule activation d'une autre entrée désactive la suppression de toutes les activations de cette entrée si des activations multiples sont présentes. ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Les entrées affectant les sorts de façon à ce qu'ils ne soient pas "non familiers" pouvaient être supprimées si des améliorations de sorts étaient achetées. ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* La zone d'information sur l'équipement pouvait planter ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Les professions qui accordaient une valeur de technique de combat supérieure à celle autorisée par le niveau d'expérience sélectionné n'étaient pas filtrées. ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* Les modificateurs INI/VIT sur les armures étaient traités comme des pénalités. ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Les spécialisations linguistiques ne coûtaient pas toujours 1 PA et ne pouvaient pas être activées plusieurs fois pour une même langue. ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Les portraits en transparence avaient un fond noir ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Le bagage culturel Sourcelandais avait Cuisine au lieu de Travail du cuir. ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Les changements d'attributs primaires des objets n'étaient pas appliqués dans la fenêtre d'édition, mais uniquement sur la feuille de personnage. ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Les professions avec des valeurs d'attributs impossibles à sélectionner en raison du niveau d'expérience peuvent être sélectionnées. ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Les sorts d'invocation des professions n'enregistraient pas les dépendances des prérequis. ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Le poids des Elfes n'était pas généré correctement ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Les attributs ayant une valeur minimale (8) ne permettaient pas d'obtenir une valeur de technique de combat supérieure à 6 si l'attribut était l'attribut principal de la technique de combat. ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Sortie PDF trop grande lors de l'utilisation d'un fond de feuille. ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Auto-updater ne fonctionne pas dans AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* Certains prérequis d'attributs primaires n'étaient pas appliqués. ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Les champs de saisie entre parenthèses influençaient les autres champs entre parenthèses. ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* L'exigence d'une seule langue et d'une seule écriture correspondante exigeait toutes les langues à la place ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Les écritures ne requièrent pas qu'une langue correspondante soit active. ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Certaines propriétés d'objets n'étaient pas sauvegardées ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* La sélection des sorts non familiers dans la profession était facultative. ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* Les techniques de combat n'influencent pas le minimum de leurs attributs primaires. ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* La sauvegarde d'un héros efface l'historique d'annulation de plusieurs personnages. ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Les lignes de la deuxième colonne du tableau des compétences de la fiche de personnage ont été élargies. ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
### Remerciements
+14
View File
@@ -1,3 +1,17 @@
## 1.5.1
### Miglioramenti
* **MapTool:** aggiunto collegamento allestensione accanto al pulsante di esportazione ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Correzioni
* **MapTool:** non era possibile esportare senza avatar ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), corregge [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** modificato il formato di esportazione alla versione 1.11.4 di MapTool ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* **MapTool:** aggiunte traduzioni italiane per lesportazione ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), corregge [#1350](https://github.com/elyukai/optolith-client/issues/1350)
* Il vantaggio *Affabilità* poteva essere acquistato con lo svantaggio *Incompetenza* su una competenza sociale ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), corregge [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Prerequisiti barrati venivano renderizzati con delle tilde prima e dopo ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), corregge [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
+13
View File
@@ -1,3 +1,16 @@
## 1.5.1
### Enhancements
* **MapTool:** voeg links toe naar extensie naast export knop ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** zonder avatar kon je niet exporteren ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), sluit [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** export formaat voor MapTool versie 1.11.4 is aangepast ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Voordeel *Inspireer Vertrouwen* kon gekocht worden met een actieve *incompetent* in een sociale vaardigheid ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), sluit [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Doorstreepte vereisten werden gerenderd met omsluitende tildes ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), sluit [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
+13
View File
@@ -1,3 +1,16 @@
## 1.5.1
### Enhancements
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
Lançamento inicial.
-131
View File
@@ -1,131 +0,0 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "Schema/Config/Config.l10n.schema.json",
"$ref": "#/definitions/Config",
"definitions": {
"Config": {
"title": "RawConfig",
"type": "object",
"properties": {
"herolistSortOrder": {
"enum": ["name", "datemodified", "dateModified"]
},
"herolistVisibilityFilter": {
"enum": ["all", "own", "shared"]
},
"racesSortOrder": {
"enum": ["name", "cost"]
},
"racesValueVisibility": {
"type": "boolean"
},
"culturesSortOrder": {
"enum": ["name", "cost"]
},
"culturesVisibilityFilter": {
"enum": ["all", "common"]
},
"culturesValueVisibility": {
"type": "boolean"
},
"professionsSortOrder": {
"enum": ["name", "cost"]
},
"professionsVisibilityFilter": {
"enum": ["all", "common"]
},
"professionsFromExpansionsVisibility": {
"type": "boolean"
},
"professionsGroupVisibilityFilter": {
"enum": [0, 1, 2, 3]
},
"advantagesDisadvantagesCultureRatingVisibility": {
"type": "boolean"
},
"talentsSortOrder": {
"enum": ["name", "group", "ic"]
},
"talentsCultureRatingVisibility": {
"type": "boolean"
},
"combatTechniquesSortOrder": {
"enum": ["name", "group", "ic"]
},
"specialAbilitiesSortOrder": {
"enum": ["name", "group", "groupname"]
},
"spellsSortOrder": {
"enum": ["name", "group", "property", "ic"]
},
"spellsUnfamiliarVisibility": {
"type": "boolean"
},
"liturgiesSortOrder": {
"enum": ["name", "group", "ic"]
},
"equipmentSortOrder": {
"enum": ["name", "groupname", "where", "weight"]
},
"equipmentGroupVisibilityFilter": {
"type": "integer"
},
"sheetCheckAttributeValueVisibility": {
"type": "boolean"
},
"sheetUseParchment": {
"type": "boolean"
},
"sheetZoomFactor": {
"type": "number"
},
"enableActiveItemHints": {
"type": "boolean"
},
"locale": {
"type": "string"
},
"fallbackLocale": {
"type": "string"
},
"theme": {
"enum": ["light", "dark"]
},
"enableEditingHeroAfterCreationPhase": {
"type": "boolean"
},
"meleeItemTemplatesCombatTechniqueFilter": {
"type": "string"
},
"rangedItemTemplatesCombatTechniqueFilter": {
"type": "string"
},
"enableAnimations": {
"type": "boolean"
}
},
"required": [
"herolistSortOrder",
"herolistVisibilityFilter",
"racesSortOrder",
"culturesSortOrder",
"culturesVisibilityFilter",
"professionsSortOrder",
"professionsVisibilityFilter",
"professionsGroupVisibilityFilter",
"advantagesDisadvantagesCultureRatingVisibility",
"talentsSortOrder",
"talentsCultureRatingVisibility",
"combatTechniquesSortOrder",
"specialAbilitiesSortOrder",
"spellsSortOrder",
"spellsUnfamiliarVisibility",
"liturgiesSortOrder",
"equipmentSortOrder",
"equipmentGroupVisibilityFilter",
"enableActiveItemHints"
],
"additionalProperties": false
}
}
}
+52
View File
@@ -0,0 +1,52 @@
// @ts-check
/**
* @param {"prerelease" | "stable"} channel
*/
const channelSuffix = channel => {
switch (channel) {
case "prerelease": return "Insider"
case "stable": return ""
}
}
/**
* @param {import("./platform.mjs").System} os
* @param {"prerelease" | "stable"} channel
*/
const prefix = (os, channel) => {
switch (os) {
case "win": return `Optolith${channelSuffix(channel)}Setup`
case "linux":
case "mac": return `Optolith${channelSuffix(channel)}`
}
}
/**
* @param {import("./platform.mjs").System} os
*/
const extensions = os => {
switch (os) {
case "win": return [".exe", ".exe.blockmap"]
case "linux": return [".AppImage", ".tar.gz"]
case "mac": return [".dmg", ".dmg.blockmap", ".zip", ".zip.blockmap"]
}
}
/**
* @param {import("./platform.mjs").System} os
* @param {"prerelease" | "stable"} channel
* @param {string} version
*/
export const getApplicationFileNames = (os, channel, version) =>
extensions(os).map(ext => `${prefix(os, channel)}_${version}${ext}`)
/**
* @param {"win" | "mac" | "linux"} os
*/
export const getUpdateFileName = os => {
switch (os) {
case "win": return "latest.yml"
case "linux": return "latest-linux.yml"
default: return "latest-mac.yml"
}
}
-78
View File
@@ -1,78 +0,0 @@
/**
* @type {import ("electron-builder") .Configuration}
*/
module.exports = {
appId: "com.lukasobermann.optolith",
productName: "Optolith",
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
directories: {
output: "dist"
},
files: [
"app/**/*",
"LICENSE"
],
win: {
target: [
{
target: "nsis",
arch: [
"x64",
"ia32"
]
}
],
icon: "app/icon.ico",
artifactName: "OptolithSetup_${version}.${ext}"
},
nsis: {
perMachine: true,
differentialPackage: true,
deleteAppDataOnUninstall: false,
},
linux: {
category: "RolePlaying",
executableName: "Optolith",
icon: "app",
target: [
{
target: "AppImage",
arch: [
"x64"
]
},
{
target: "tar.gz",
arch: [
"x64"
]
}
],
artifactName: "Optolith_${version}.${ext}"
},
mac: {
category: "public.app-category.role-playing-games",
type: "distribution",
icon: "app/icon.icns",
target: [
{
target: "default",
arch: "universal"
}
],
artifactName: "Optolith_${version}.${ext}",
hardenedRuntime: true,
// entitlements: "deploy/entitlements.mac.plist",
// entitlementsInherit: "deploy/entitlements.mac.plist",
gatekeeperAssess: false,
},
dmg: {
sign: false,
},
publish: {
"provider": "generic",
"url": `${process.env.UPDATE_URL}/\${os}`,
"channel": "latest"
},
// afterSign: notarize,
}
+83
View File
@@ -0,0 +1,83 @@
// @ts-check
import { notarize } from "./notarize.mjs"
/**
* @type {import("electron-builder").Configuration}
*/
const config = {
appId: "com.lukasobermann.optolith",
productName: "Optolith",
copyright: "© 2017present Lukas Obermann. This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
directories: {
output: "dist"
},
files: [
"app/**/*",
"LICENSE"
],
win: {
target: [
{
target: "nsis",
arch: [
"x64",
"ia32"
]
}
],
icon: "app/icon.ico",
artifactName: "OptolithSetup_${version}.${ext}"
},
nsis: {
perMachine: true,
differentialPackage: true,
deleteAppDataOnUninstall: false,
},
linux: {
category: "RolePlaying",
executableName: "Optolith",
icon: "app",
target: [
{
target: "AppImage",
arch: [
"x64"
]
},
{
target: "tar.gz",
arch: [
"x64"
]
}
],
artifactName: "Optolith_${version}.${ext}"
},
mac: {
category: "public.app-category.role-playing-games",
type: "distribution",
icon: "app/icon.icns",
target: [
{
target: "default",
arch: "universal"
}
],
artifactName: "Optolith_${version}.${ext}",
entitlements: "deploy/entitlements.mac.plist",
entitlementsInherit: "deploy/entitlements.mac.plist",
hardenedRuntime: true,
gatekeeperAssess: false,
},
dmg: {
sign: false
},
publish: {
"provider": "generic",
"url": `${process.env.UPDATE_URL}/\${os}`,
"channel": "latest"
},
afterSign: notarize,
}
export default config
+10 -7
View File
@@ -1,6 +1,6 @@
// @ts-check
const builder = require("electron-builder")
const { getSystem } = require("./platform")
import builder from "electron-builder"
import { getSystem } from "./platform.mjs"
const [channel] = process.argv.slice(2)
@@ -10,15 +10,18 @@ if (channel !== "stable" && channel !== "prerelease") {
const config =
channel === "prerelease"
? require("./build.prerelease.config.js")
: require("./build.config.js")
? (await import("./build.prerelease.config.mjs")).default
: (await import("./build.config.mjs")).default
process.on ('unhandledRejection', error => {
throw new Error (`Unhandled promise rejection: ${error .toString ()}`);
});
throw new Error(`Unhandled promise rejection: ${/** @type {Error} */ (error).toString ()}`)
})
const os = getSystem()
const plaformKey = os === "linux" ? "LINUX" : os === "mac" ? "MAC" : "WINDOWS"
builder.build ({ config, targets: builder.Platform[plaformKey].createTarget () })
await builder.build({
config,
targets: builder.Platform[plaformKey].createTarget(),
})
@@ -1,10 +1,13 @@
// @ts-check
import { notarize } from "./notarize.mjs"
/**
* @type {import ("electron-builder") .Configuration}
*/
module.exports = {
const config = {
appId: "com.lukasobermann.optolithinsider",
productName: "Optolith Insider",
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
copyright: "© 2017present Lukas Obermann. This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
directories: {
output: "dist/insider"
},
@@ -62,18 +65,20 @@ module.exports = {
}
],
artifactName: "OptolithInsider_${version}.${ext}",
entitlements: "deploy/entitlements.mac.plist",
entitlementsInherit: "deploy/entitlements.mac.plist",
hardenedRuntime: true,
// entitlements: "deploy/entitlements.mac.plist",
// entitlementsInherit: "deploy/entitlements.mac.plist",
gatekeeperAssess: false,
},
dmg: {
sign: false,
sign: false
},
publish: {
"provider": "generic",
"url": `${process.env.UPDATE_URL}/insider/\${os}`,
"channel": "latest"
},
// afterSign: notarize,
afterSign: notarize,
}
export default config
-149
View File
@@ -1,149 +0,0 @@
// @ts-check
require("dotenv").config()
const Client = require ("ssh2-sftp-client")
const readline = require ("readline")
const fs = require ("fs")
const path = require ("path")
const semver = require ("semver");
const { getSystem, getSystemName } = require("./platform");
const [channel] = process.argv.slice(2)
const os = getSystem()
if (channel !== "stable" && channel !== "prerelease") {
throw new TypeError (`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
}
if (os !== "win" && os !== "mac" && os !== "linux") {
throw new TypeError (`publishToServer requires a specified OS ("win", "mac" or "linux"), but it received ${os}`)
}
/**
* Needed env variables:
* - `HOST`
* - `USERNAME`
* - `PASSWORD`
* - `ROOT`
*/
const uploadToServer = async () => {
console.log (`Preparing to upload update files for "${getSystemName(os)}" on "${channel}" channel...`)
const subFolder = os === "win" ? "win" : os === "linux" ? "linux" : "mac"
const updateYmlName =
os === "win"
? "latest.yml"
: os === "linux"
? "latest-linux.yml"
: "latest-mac.yml"
const distPath = channel === "prerelease" ? ["dist", "insider"] : ["dist"]
const serverPath = `${process.env.ROOT}${channel === "prerelease" ? "/insider" : ""}/${subFolder}`
const regex =
channel === "prerelease"
? os === "win"
? /^OptolithInsiderSetup_(.+)\.exe$/
: os === "linux"
? /^OptolithInsider_(.+)\.(?:AppImage|tar\.gz)$/
: /^OptolithInsider_(.+)\.(?:zip|dmg)$/
: os === "win"
? /^OptolithSetup_(.+)\.exe$/
: os === "linux"
? /^Optolith_(.+)\.(?:AppImage|tar\.gz)$/
: /^Optolith_(.+)\.(?:zip|dmg)$/
const recreateFileNames =
channel === "prerelease"
? os === "win"
? /**
* @param {string} v Version
*/ v => [`OptolithInsiderSetup_${v}.exe`, `OptolithInsiderSetup_${v}.exe.blockmap`]
: os === "linux"
? /**
* @param {string} v Version
*/ v => [`OptolithInsider_${v}.AppImage`, `OptolithInsider_${v}.tar.gz`]
: /**
* @param {string} v Version
*/ v => [`OptolithInsider_${v}.dmg`, `OptolithInsider_${v}.dmg.blockmap`, `OptolithInsider_${v}.zip`]
: os === "win"
? /**
* @param {string} v Version
*/ v => [`OptolithSetup_${v}.exe`, `OptolithSetup_${v}.exe.blockmap`]
: os === "linux"
? /**
* @param {string} v Version
*/ v => [`Optolith_${v}.AppImage`, `Optolith_${v}.tar.gz`]
: /**
* @param {string} v Version
*/ v => [`Optolith_${v}.dmg`, `Optolith_${v}.dmg.blockmap`, `Optolith_${v}.zip`]
const allFiles = await fs.promises.readdir (path.join (...distPath))
const allInstallerNames = allFiles .filter (fileName => regex .test (fileName))
const allInstallerVersionsSorted =
allInstallerNames .map (fileName => regex .exec (fileName) [1])
.sort (semver .rcompare)
if (allInstallerVersionsSorted .length < 1) {
throw new RangeError ("Array of sorted installer versions is empty")
}
const latestFileNames = recreateFileNames (allInstallerVersionsSorted [0])
console.log(`Files to upload: ${[updateYmlName, ...latestFileNames] .join (", ")}.`);
// Actual server connection
const client = new Client ()
console.log("Connecting to server ...");
await client.connect ({
host: process.env.HOST,
username: process.env.USERNAME,
password: process.env.PASSWORD,
})
console.log(`Server connection established.`);
for (const fileName of latestFileNames) {
console.log(`Uploading ${fileName}`);
await client.fastPut (
path.join (...distPath, fileName),
`${serverPath}/${fileName}`,
{
step: !process.env.CI ? (totalTransferred, _, total) => {
const percent = Math.floor (totalTransferred / total * 100)
console.log(`Progress: ${percent}%`);
} : undefined
}
)
console.log(`Upload done: ${fileName}.`);
}
console.log(`Uploading ${updateYmlName} ...`);
await client.fastPut (
path.join (...distPath, updateYmlName),
`${serverPath}/${updateYmlName}`,
{
step: !process.env.CI ? (totalTransferred, _, total) => {
const percent = Math.floor (totalTransferred / total * 100)
console.log(`Progress: ${percent}%`);
} : undefined
}
)
console.log(`Upload done: ${updateYmlName}.`);
await client.end ()
console.log("Closed server connection.");
}
uploadToServer()
+52
View File
@@ -0,0 +1,52 @@
// @ts-check
import packageJson from "../package.json" assert { type: "json" }
import { getApplicationFileNames, getUpdateFileName } from "./assetNames.mjs"
import { getLocalPath } from "./localPath.mjs"
import { getSystem, getSystemName } from "./platform.mjs"
import { run, upload } from "./remoteConnection.mjs"
import { getRemotePath } from "./remotePath.mjs"
/**
* Needed env variables:
* - `HOST`
* - `USERNAME`
* - `PASSWORD`
* - `ROOT`
*
* Optional env variables:
* - `CI`
*/
const {
HOST,
USERNAME,
PASSWORD,
ROOT = "/",
CI,
} = process.env
const [channel] = process.argv.slice(2)
const os = getSystem()
if (channel !== "stable" && channel !== "prerelease") {
throw new TypeError(`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
}
console.log(`Preparing to upload update files for "${getSystemName(os)}" on "${channel}" channel...`)
const localDir = getLocalPath(channel)
const remoteDir = getRemotePath(ROOT, channel, os)
const updateFileName = getUpdateFileName(os)
const applicationFileNames = getApplicationFileNames(os, channel, packageJson.version)
console.log(`Files to upload: ${[updateFileName, ...applicationFileNames] .join (", ")}.`)
await run({ host: HOST, username: USERNAME, password: PASSWORD }, async client => {
for (const applicationFileName of applicationFileNames) {
await upload(client, localDir, remoteDir, applicationFileName)
}
await upload(client, localDir, remoteDir, updateFileName)
})
console.log(`Uploading files finished successfully.`)
+3 -1
View File
@@ -2,7 +2,9 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
</dict>
</plist>
+12
View File
@@ -0,0 +1,12 @@
// @ts-check
import { join } from "path"
/**
* @param {"prerelease" | "stable"} channel
*/
export const getLocalPath = channel => {
switch (channel) {
case "prerelease": return join("dist", "insider")
case "stable": return join("dist")
}
}
-29
View File
@@ -1,29 +0,0 @@
// @ts-check
const { notarize } = require ('electron-notarize')
/**
* @param context {import("electron-builder").AfterPackContext}
*/
exports.notarize = async context => {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName === 'darwin') {
const appName = context.packager.appInfo.productFilename
console.log (`Notarizing "${appName}.app"...`)
await notarize ({
appBundleId: 'com.lukasobermann.optolith',
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLEID,
appleIdPassword: process.env.APPLEIDPASS,
})
console.log (`Notarization successful`)
return
}
return
}
+25
View File
@@ -0,0 +1,25 @@
// @ts-check
import { notarize as electronNotarize } from 'electron-notarize'
/**
* @param context {import("electron-builder").AfterPackContext}
*/
export const notarize = async (context) => {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName === 'darwin') {
const appName = context.packager.appInfo.productFilename
console.log(`Notarizing "${appName}.app"...`)
await electronNotarize({
tool: "notarytool",
appPath: `${appOutDir}/${appName}.app`,
appleId: /** @type {string} */ (process.env.APPLEID),
appleIdPassword: /** @type {string} */ (process.env.APPLEIDPASS),
teamId: /** @type {string} */ (process.env.TEAMID),
})
console.log(`Notarization successful`)
}
}
-32
View File
@@ -1,32 +0,0 @@
// @ts-check
const os = require ("os")
module.exports = {
/**
* @typedef {"win" | "mac" | "linux"} System
* @returns {System}
*/
getSystem: () => {
switch (os.platform()) {
case "win32":
return "win"
case "darwin":
return "mac"
default:
return "linux"
}
},
/**
* @param {System} system
*/
getSystemName: system => {
switch (system) {
case "win":
return "Windows"
case "mac":
return "macOS"
case "linux":
return "Linux"
}
}
}
+25
View File
@@ -0,0 +1,25 @@
// @ts-check
import { platform } from "os"
/**
* @typedef {"win" | "mac" | "linux"} System
* @returns {System}
*/
export const getSystem = () => {
switch (platform()) {
case "win32": return "win"
case "darwin": return "mac"
default: return "linux"
}
}
/**
* @param {System} system
*/
export const getSystemName = system => {
switch (system) {
case "win": return "Windows"
case "mac": return "macOS"
case "linux": return "Linux"
}
}
+41
View File
@@ -0,0 +1,41 @@
// @ts-check
import { join } from "path"
import { join as joinPosix } from "path/posix"
import Client from "ssh2-sftp-client"
/**
* @param {Client.ConnectOptions} options
* @param {(client: Client) => Promise<void>} action
*/
export const run = async (options, action) => {
const client = new Client()
console.log("Connecting to server ...")
await client.connect(options)
console.log(`Server connection established.`)
await action(client)
await client.end ()
console.log("Closed server connection.")
}
/**
* @param {Client} client
* @param {string} localDir
* @param {string} remoteDir
* @param {string} fileName
*/
export const upload = async (client, localDir, remoteDir, fileName) => {
console.log(`Uploading ${fileName} ...`);
await client.fastPut (
join (localDir, fileName),
joinPosix (remoteDir, fileName),
{
step: !process.env.CI ? (totalTransferred, _, total) => {
const percent = Math.floor (totalTransferred / total * 100)
console.log(`Progress: ${percent}%`);
} : undefined
}
)
console.log(`Upload done: ${fileName}.`);
}
+31
View File
@@ -0,0 +1,31 @@
// @ts-check
import { join } from "path/posix"
/**
* @param {"prerelease" | "stable"} channel
*/
const remoteChannelPath = channel => {
switch (channel) {
case "prerelease": return "insider"
case "stable": return "."
}
}
/**
* @param {import("./platform.mjs").System} os
*/
const remoteOsPath = os => {
switch (os) {
case "win": return "win"
case "linux": return "linux"
default: return "mac"
}
}
/**
* @param {string} root
* @param {"prerelease" | "stable"} channel
* @param {import("./platform.mjs").System} os
*/
export const getRemotePath = (root, channel, os) =>
join(root, remoteChannelPath(channel), remoteOsPath(os))
+16
View File
@@ -0,0 +1,16 @@
// @ts-check
import { join } from "node:path"
import { jsonSchema } from "optolith-tsjsonschemamd/renderers"
/** @type {import("optolith-tsjsonschemamd").GeneratorOptions} */
export default {
sourceDir: join("src", "shared", "schema"),
outputs: [
{
targetDir: join("src", "assets", "schema"),
renderer: jsonSchema({ spec: "Draft_07" }),
}
],
clean: true,
verbose: false
}
+10121 -8261
View File
File diff suppressed because it is too large Load Diff
+41 -57
View File
@@ -1,7 +1,7 @@
{
"name": "optolith",
"productName": "Optolith",
"version": "1.5.0",
"version": "2.0.0-alpha.1",
"description": "A generator for heroes for the P&P-RPG 'The Dark Eye'.",
"author": {
"name": "Lukas Obermann",
@@ -9,34 +9,28 @@
},
"homepage": "https://optolith.app",
"license": "MPL-2.0",
"main": "app/main.js",
"main": ".webpack/main.js",
"dependencies": {
"@electron/remote": "^2.0.4",
"@glennsl/bs-json": "5.0.2",
"@reduxjs/toolkit": "^1.9.5",
"adm-zip": "^0.5.1",
"ajv": "6.12.6",
"bs-platform": "8.3.2",
"electron-devtools-installer": "3.1.1",
"electron-log": "4.2.4",
"electron-updater": "^4.6.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
"electron-extension-installer": "^1.2.0",
"electron-log": "^4.4.8",
"electron-updater": "^5.0.5",
"electron-window-state": "5.0.3",
"moment": "2.25.3",
"moment": "^2.29.4",
"mousetrap": "1.6.5",
"react": "16.13.1",
"react-custom-scrollbars": "4.2.1",
"react-dom": "16.13.1",
"react-markdown": "^6.0.2",
"react-portal": "4.2.1",
"react-redux": "7.2.1",
"react-textfit": "1.1.0",
"reason-react": "0.9.1",
"reductive": "2.0.1",
"redux": "4.0.5",
"optolith-database-schema": "^0.12.0",
"react": "^18.2.0",
"react-custom-scrollbars-2": "^4.5.0",
"react-dom": "^18.2.0",
"react-markdown": "^8.0.0",
"react-redux": "^8.0.7",
"redux-devtools-extension": "2.13.8",
"redux-thunk": "2.3.0",
"rehype-raw": "^5.1.0",
"remark-breaks": "^2.0.2",
"reselect": "4.0.0",
"remark-gfm": "^3.0.1",
"semver": "7.3.2",
"tslib": "^2.3.1",
"yaml": "1.10.0"
@@ -44,41 +38,37 @@
"devDependencies": {
"@commitlint/cli": "11.0.0",
"@commitlint/config-conventional": "11.0.0",
"@glennsl/bs-jest": "^0.7.0",
"@types/classnames": "2.2.11",
"@types/jest": "26.0.15",
"@types/mousetrap": "1.6.4",
"@types/node": "14.14.7",
"@types/react": "16.9.56",
"@types/react-custom-scrollbars": "4.0.7",
"@types/react-dom": "16.9.9",
"@types/react-portal": "4.0.2",
"@types/node": "^20.2.5",
"@types/react": "^18.2.7",
"@types/react-dom": "^18.2.4",
"@types/react-redux": "7.1.11",
"@types/semver": "7.3.4",
"@typescript-eslint/eslint-plugin": "^5.10.0",
"@typescript-eslint/parser": "^5.10.0",
"custom-env": "2.0.1",
"dotenv": "8.2.0",
"electron": "^17.0.0",
"electron-builder": "^22.14.5",
"electron-notarize": "0.3.0",
"css-loader": "^6.8.1",
"electron": "^24.1.3",
"electron-builder": "^23.1.0",
"electron-notarize": "^1.2.1",
"eslint": "^8.7.0",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-tsdoc": "^0.2.14",
"fs-extra": "9.0.1",
"gentype": "3.38.0",
"html-webpack-plugin": "^5.5.0",
"husky": "^4.3.8",
"jest": "^26.6.3",
"sass": "1.29.0",
"ssh2-sftp-client": "^7.2.2",
"glob": "^10.2.6",
"html-webpack-plugin": "^5.5.1",
"mini-css-extract-plugin": "^2.7.6",
"optolith-tsjsonschemamd": "^0.9.3",
"resolve-url-loader": "^5.0.0",
"sass": "^1.62.1",
"sass-loader": "^13.3.1",
"ssh2-sftp-client": "^9.0.1",
"standard-version": "^9.3.1",
"ts-jest": "^26.5.6",
"ts-loader": "^9.2.6",
"typescript": "^4.5.5",
"webpack": "^5.67.0",
"webpack-cli": "^4.9.2"
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.2",
"tsx": "^3.12.7",
"typescript": "^5.0.4",
"webpack": "^5.84.1",
"webpack-cli": "^5.1.1"
},
"scripts": {
"prerelease:win": "set NODE_ENV=development && node ./deploy/buildInsiderWin.js",
@@ -89,25 +79,19 @@
"stable:mac": "NODE_ENV=production node ./deploy/buildMac.js",
"css:build": "sass --style=compressed src/Main.scss app/main.css",
"css:watch": "sass --watch --style=compressed src/Main.scss app/main.css",
"build": "npm run re:build && npm run css:build && npm run js:build",
"build": "npm run ts:build && npm run css:build && npm run js:build",
"js:build": "webpack",
"js:watch": "webpack -w",
"ts:build": "tsc",
"ts:watch": "tsc -w",
"re:build": "bsb -make-world",
"re:watch": "bsb -make-world -w",
"re:clean": "bsb -clean-world",
"createschemas": "otjsmd",
"lint": "eslint \"src/\" --ext \".ts\" --ext \".tsx\"",
"start": "electron .",
"test": "jest",
"test": "glob -c \"node --loader tsx --test\" \"./src/shared/**/*.test.ts\"",
"circ": "madge -c ./src",
"release:main": "standard-version --skip.commit --skip.tag",
"release:pre": "standard-version --prerelease=alpha"
},
"repository": "github:elyukai/optolith-client",
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
"type": "module"
}
+4 -4
View File
@@ -8,7 +8,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
import { getAddedArcaneEnergyPoints, getAddedKarmaPoints, getAddedLifePoints, getCurrentHeroPresent, getWikiAttributes } from "../Selectors/stateSelectors"
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
import { getAPForInc } from "../Utilities/IC.gen"
import { getAPForInc, ImprovementCost } from "../Utilities/ImprovementCost"
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
import { pipe, pipe_ } from "../Utilities/pipe"
import { ReduxAction } from "./Actions"
@@ -84,7 +84,7 @@ export const addLifePoint: ReduxAction<Promise<void>> =
liftM2 (pipe (
// get AP for added points
curryN (getAPForInc) ("D"),
curryN (getAPForInc) (ImprovementCost.D),
// AP are passed to result and result finally gets the available AP
getMissingAP (getIsInCharacterCreation (state))
@@ -120,7 +120,7 @@ export const addArcaneEnergyPoint: ReduxAction<Promise<void>> =
liftM2 (pipe (
// get AP for added points
curryN (getAPForInc) ("D"),
curryN (getAPForInc) (ImprovementCost.D),
// AP are passed to result and result finally gets the available AP
getMissingAP (getIsInCharacterCreation (state))
@@ -156,7 +156,7 @@ export const addKarmaPoint: ReduxAction<Promise<void>> =
liftM2 (pipe (
// get AP for added points
curryN (getAPForInc) ("D"),
curryN (getAPForInc) (ImprovementCost.D),
// AP are passed to result and result finally gets the available AP
getMissingAP (getIsInCharacterCreation (state))
+1 -3
View File
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
import { lookup } from "../../Data/OrderedMap"
import { Record } from "../../Data/Record"
import * as ActionTypes from "../Constants/ActionTypes"
import { icFromJs } from "../Constants/Groups"
import { ChantsSortOptions } from "../Models/Config"
import { HeroModel } from "../Models/Hero/HeroModel"
import { LiturgicalChant } from "../Models/Wiki/LiturgicalChant"
@@ -10,7 +9,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
import { getCurrentHeroPresent, getLiturgicalChants, getWikiLiturgicalChants } from "../Selectors/stateSelectors"
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
import { getAPForActivatation } from "../Utilities/IC.gen"
import { getAPForActivatation } from "../Utilities/ImprovementCost"
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
import { pipe_ } from "../Utilities/pipe"
import { ReduxAction } from "./Actions"
@@ -45,7 +44,6 @@ export const addLiturgicalChant =
(pipe_ (
staticLiturgicalChant,
LiturgicalChant.A.ic,
icFromJs,
getAPForActivatation
)))
)
+2 -3
View File
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
import { lookup } from "../../Data/OrderedMap"
import { Record } from "../../Data/Record"
import * as ActionTypes from "../Constants/ActionTypes"
import { icFromJs } from "../Constants/Groups"
import { SpellsSortOptions } from "../Models/Config"
import { HeroModel } from "../Models/Hero/HeroModel"
import { Cantrip } from "../Models/Wiki/Cantrip"
@@ -11,7 +10,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
import { getCurrentHeroPresent, getSpells, getWikiCantrips, getWikiSpells } from "../Selectors/stateSelectors"
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
import { getAPForActivatation } from "../Utilities/IC.gen"
import { getAPForActivatation } from "../Utilities/ImprovementCost"
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
import { pipe_ } from "../Utilities/pipe"
import { ReduxAction } from "./Actions"
@@ -43,7 +42,7 @@ export const addSpell =
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
join,
bindF (getMissingAP (getIsInCharacterCreation (state))
(pipe_ (staticSpell, Spell.A.ic, icFromJs, getAPForActivatation)))
(pipe_ (staticSpell, Spell.A.ic, getAPForActivatation)))
)
if (isNothing (missingAPForInc)) {
-2
View File
@@ -1,2 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
-97
View File
@@ -1,97 +0,0 @@
type heroListSortOptions =
| Name
| DateModified;
type heroListVisibilityFilter =
| All
| Own
| Shared;
type racesSortOptions =
| Name
| Cost;
type culturesSortOptions =
| Name
| Cost;
type culturesVisibilityFilter =
| All
| Common;
type professionsSortOptions =
| Name
| Cost;
type professionsVisibilityFilter =
| All
| Common;
type professionsGroupVisibilityFilter =
| All
| Mundane
| Magical
| Blessed;
type skillsSortOptions =
| Name
| Group
| IC;
type specialAbilitiesSortOptions =
| Name
| Group;
type combatTechniquesSortOptions =
| Name
| Group
| IC;
type spellsSortOptions =
| Name
| Group
| Property
| IC;
type liturgicalChantsSortOptions =
| Name
| Group
| IC;
type equipmentSortOptions =
| Name
| Group
| Where
| Weight;
type theme =
| Dark
| Light;
type tab =
| Herolist
| Grouplist
| Wiki
| Faq
| Imprint
| ThirdPartyLicenses
| LastChanges
| Profile
| PersonalData
| CharacterSheet
| Pact
| Rules
| Races
| Cultures
| Professions
| Attributes
| Advantages
| Disadvantages
| Skills
| CombatTechniques
| SpecialAbilities
| Spells
| LiturgicalChants
| Equipment
| ZoneArmor
| Pets;
-31
View File
@@ -1,4 +1,3 @@
import { t as _IC } from "../Utilities/IC.gen"
export enum ProfessionGroup {
Mundane = 1,
@@ -26,36 +25,6 @@ export enum ProfessionSubGroup {
BlessedOnesOfTheTwelveGods = 1,
}
export enum IC {
A = 1,
B,
C,
D,
E,
}
export const icFromJs = (x: IC): _IC => {
switch (x) {
case IC.A: return "A"
case IC.B: return "B"
case IC.C: return "C"
case IC.D: return "D"
case IC.E: return "E"
default: throw new TypeError (`icFromJs: ${x} is not an IC`)
}
}
export const icToJs = (x: _IC): IC => {
switch (x) {
case "A": return IC.A
case "B": return IC.B
case "C": return IC.C
case "D": return IC.D
case "E": return IC.E
default: throw new TypeError (`icToJs: ${x} is not an IC`)
}
}
export enum SkillGroup {
Physical = 1,
Social = 2,
File diff suppressed because it is too large Load Diff
-88
View File
@@ -1,88 +0,0 @@
/* TypeScript file generated from Id.re by genType. */
/* eslint-disable import/first */
// tslint:disable-next-line:interface-over-type-literal
export type t =
{ NAME: "ExperienceLevel"; VAL: number }
| { NAME: "Race"; VAL: number }
| { NAME: "Culture"; VAL: number }
| { NAME: "Profession"; VAL: number }
| { NAME: "Attribute"; VAL: number }
| { NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "Curse"; VAL: number }
| { NAME: "ElvenMagicalSong"; VAL: number }
| { NAME: "DominationRitual"; VAL: number }
| { NAME: "MagicalMelody"; VAL: number }
| { NAME: "MagicalDance"; VAL: number }
| { NAME: "RogueSpell"; VAL: number }
| { NAME: "AnimistForce"; VAL: number }
| { NAME: "GeodeRitual"; VAL: number }
| { NAME: "ZibiljaRitual"; VAL: number }
| { NAME: "Cantrip"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number }
| { NAME: "Blessing"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number }
| { NAME: "Item"; VAL: number }
| { NAME: "EquipmentPackage"; VAL: number }
| { NAME: "HitZoneArmor"; VAL: number }
| { NAME: "Familiar"; VAL: number }
| { NAME: "Animal"; VAL: number }
| { NAME: "FocusRule"; VAL: number }
| { NAME: "OptionalRule"; VAL: number }
| { NAME: "Condition"; VAL: number }
| { NAME: "State"; VAL: number };
export type Id = t;
// tslint:disable-next-line:interface-over-type-literal
export type activatable =
{ NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number };
export type ActivatableId = activatable;
// tslint:disable-next-line:interface-over-type-literal
export type activatableAndSkill =
{ NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number };
export type ActivatableAndSkillId = activatableAndSkill;
// tslint:disable-next-line:interface-over-type-literal
export type activatableSkill =
{ NAME: "Spell"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number };
export type ActivatableSkillId = activatableSkill;
// tslint:disable-next-line:interface-over-type-literal
export type permanentSkill =
{ NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number };
export type PermanentSkillId = permanentSkill;
// tslint:disable-next-line:interface-over-type-literal
export type selectOption =
{ NAME: "Generic"; VAL: number }
| { NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "Cantrip"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number }
| { NAME: "Blessing"; VAL: number };
export type SelectOptionId = selectOption;
// tslint:disable-next-line:interface-over-type-literal
export type hitZoneArmorZoneItem =
{ tag: "Template"; value: number }
| { tag: "Custom"; value: number };
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItem;
// tslint:disable-next-line:interface-over-type-literal
export type phase = "Outline" | "Definition" | "Advancement";
export type Phase = phase;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-956
View File
@@ -1,956 +0,0 @@
/* TypeScript file generated from Ids.re by genType. */
/* eslint-disable import/first */
// tslint:disable-next-line:no-var-requires
const IdsBS = require('./Ids.bs');
// tslint:disable-next-line:interface-over-type-literal
export type id =
{ NAME: "ExperienceLevel"; VAL: number }
| { NAME: "Race"; VAL: number }
| { NAME: "Culture"; VAL: number }
| { NAME: "Profession"; VAL: number }
| { NAME: "Attribute"; VAL: number }
| { NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "Curse"; VAL: number }
| { NAME: "ElvenMagicalSong"; VAL: number }
| { NAME: "DominationRitual"; VAL: number }
| { NAME: "MagicalMelody"; VAL: number }
| { NAME: "MagicalDance"; VAL: number }
| { NAME: "RogueSpell"; VAL: number }
| { NAME: "AnimistForce"; VAL: number }
| { NAME: "GeodeRitual"; VAL: number }
| { NAME: "ZibiljaRitual"; VAL: number }
| { NAME: "Cantrip"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number }
| { NAME: "Blessing"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number }
| { NAME: "Item"; VAL: number }
| { NAME: "EquipmentPackage"; VAL: number }
| { NAME: "HitZoneArmor"; VAL: number }
| { NAME: "Familiar"; VAL: number }
| { NAME: "Animal"; VAL: number }
| { NAME: "FocusRule"; VAL: number }
| { NAME: "OptionalRule"; VAL: number }
| { NAME: "Condition"; VAL: number }
| { NAME: "State"; VAL: number };
export type Id = id;
// tslint:disable-next-line:interface-over-type-literal
export type activatableId =
{ NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number };
export type ActivatableId = activatableId;
// tslint:disable-next-line:interface-over-type-literal
export type activatableAndSkillId =
{ NAME: "Advantage"; VAL: number }
| { NAME: "Disadvantage"; VAL: number }
| { NAME: "SpecialAbility"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number };
export type ActivatableAndSkillId = activatableAndSkillId;
// tslint:disable-next-line:interface-over-type-literal
export type activatableSkillId =
{ NAME: "Spell"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number };
export type ActivatableSkillId = activatableSkillId;
// tslint:disable-next-line:interface-over-type-literal
export type skillId =
{ NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number };
export type SkillId = skillId;
// tslint:disable-next-line:interface-over-type-literal
export type selectOptionId =
{ NAME: "Generic"; VAL: number }
| { NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "Cantrip"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number }
| { NAME: "Blessing"; VAL: number };
export type SelectOptionId = selectOptionId;
// tslint:disable-next-line:interface-over-type-literal
export type hitZoneArmorZoneItemId =
{ tag: "Template"; value: number }
| { tag: "Custom"; value: number };
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItemId;
// tslint:disable-next-line:interface-over-type-literal
export type Phase_t = "Outline" | "Definition" | "Advancement";
export type Phase = Phase_t;
export const Phase_rcp: number = IdsBS.Phase.rcp;
export const Phase_creation: number = IdsBS.Phase.creation;
export const Phase_inGame: number = IdsBS.Phase.inGame;
export const ExperienceLevelId_inexperienced: string = IdsBS.ExperienceLevelId.inexperienced;
export const ExperienceLevelId_ordinary: string = IdsBS.ExperienceLevelId.ordinary;
export const ExperienceLevelId_experienced: string = IdsBS.ExperienceLevelId.experienced;
export const ExperienceLevelId_competent: string = IdsBS.ExperienceLevelId.competent;
export const ExperienceLevelId_masterly: string = IdsBS.ExperienceLevelId.masterly;
export const ExperienceLevelId_brilliant: string = IdsBS.ExperienceLevelId.brilliant;
export const ExperienceLevelId_legendary: string = IdsBS.ExperienceLevelId.legendary;
export const RaceId_humans: string = IdsBS.RaceId.humans;
export const RaceId_elves: string = IdsBS.RaceId.elves;
export const RaceId_halfElves: string = IdsBS.RaceId.halfElves;
export const RaceId_dwarves: string = IdsBS.RaceId.dwarves;
export const CultureId_gladeElves: string = IdsBS.CultureId.gladeElves;
export const CultureId_firnelves: string = IdsBS.CultureId.firnelves;
export const CultureId_woodElves: string = IdsBS.CultureId.woodElves;
export const CultureId_steppenelfen: string = IdsBS.CultureId.steppenelfen;
export const ProfessionId_customProfession: string = IdsBS.ProfessionId.customProfession;
export const AttrId_courage: string = IdsBS.AttrId.courage;
export const AttrId_sagacity: string = IdsBS.AttrId.sagacity;
export const AttrId_intuition: string = IdsBS.AttrId.intuition;
export const AttrId_charisma: string = IdsBS.AttrId.charisma;
export const AttrId_dexterity: string = IdsBS.AttrId.dexterity;
export const AttrId_agility: string = IdsBS.AttrId.agility;
export const AttrId_constitution: string = IdsBS.AttrId.constitution;
export const AttrId_strength: string = IdsBS.AttrId.strength;
export const DCId_lifePoints: string = IdsBS.DCId.lifePoints;
export const DCId_arcaneEnergy: string = IdsBS.DCId.arcaneEnergy;
export const DCId_karmaPoints: string = IdsBS.DCId.karmaPoints;
export const DCId_spirit: string = IdsBS.DCId.spirit;
export const DCId_toughness: string = IdsBS.DCId.toughness;
export const DCId_dodge: string = IdsBS.DCId.dodge;
export const DCId_initiative: string = IdsBS.DCId.initiative;
export const DCId_movement: string = IdsBS.DCId.movement;
export const DCId_woundThreshold: string = IdsBS.DCId.woundThreshold;
export const AdvantageId_aptitude: string = IdsBS.AdvantageId.aptitude;
export const AdvantageId_nimble: string = IdsBS.AdvantageId.nimble;
export const AdvantageId_blessed: string = IdsBS.AdvantageId.blessed;
export const AdvantageId_luck: string = IdsBS.AdvantageId.luck;
export const AdvantageId_exceptionalSkill: string = IdsBS.AdvantageId.exceptionalSkill;
export const AdvantageId_exceptionalCombatTechnique: string = IdsBS.AdvantageId.exceptionalCombatTechnique;
export const AdvantageId_increasedAstralPower: string = IdsBS.AdvantageId.increasedAstralPower;
export const AdvantageId_increasedKarmaPoints: string = IdsBS.AdvantageId.increasedKarmaPoints;
export const AdvantageId_increasedLifePoints: string = IdsBS.AdvantageId.increasedLifePoints;
export const AdvantageId_increasedSpirit: string = IdsBS.AdvantageId.increasedSpirit;
export const AdvantageId_increasedToughness: string = IdsBS.AdvantageId.increasedToughness;
export const AdvantageId_immunityToPoison: string = IdsBS.AdvantageId.immunityToPoison;
export const AdvantageId_immunityToDisease: string = IdsBS.AdvantageId.immunityToDisease;
export const AdvantageId_magicalAttunement: string = IdsBS.AdvantageId.magicalAttunement;
export const AdvantageId_rich: string = IdsBS.AdvantageId.rich;
export const AdvantageId_sociallyAdaptable: string = IdsBS.AdvantageId.sociallyAdaptable;
export const AdvantageId_inspireConfidence: string = IdsBS.AdvantageId.inspireConfidence;
export const AdvantageId_weaponAptitude: string = IdsBS.AdvantageId.weaponAptitude;
export const AdvantageId_spellcaster: string = IdsBS.AdvantageId.spellcaster;
export const AdvantageId_unyielding: string = IdsBS.AdvantageId.unyielding;
export const AdvantageId_largeSpellSelection: string = IdsBS.AdvantageId.largeSpellSelection;
export const AdvantageId_hatredOf: string = IdsBS.AdvantageId.hatredOf;
export const AdvantageId_prediger: string = IdsBS.AdvantageId.prediger;
export const AdvantageId_visionaer: string = IdsBS.AdvantageId.visionaer;
export const AdvantageId_zahlreichePredigten: string = IdsBS.AdvantageId.zahlreichePredigten;
export const AdvantageId_zahlreicheVisionen: string = IdsBS.AdvantageId.zahlreicheVisionen;
export const AdvantageId_leichterGang: string = IdsBS.AdvantageId.leichterGang;
export const AdvantageId_einkommen: string = IdsBS.AdvantageId.einkommen;
export const DisadvantageId_afraidOf: string = IdsBS.DisadvantageId.afraidOf;
export const DisadvantageId_poor: string = IdsBS.DisadvantageId.poor;
export const DisadvantageId_slow: string = IdsBS.DisadvantageId.slow;
export const DisadvantageId_noFlyingBalm: string = IdsBS.DisadvantageId.noFlyingBalm;
export const DisadvantageId_noFamiliar: string = IdsBS.DisadvantageId.noFamiliar;
export const DisadvantageId_magicalRestriction: string = IdsBS.DisadvantageId.magicalRestriction;
export const DisadvantageId_decreasedArcanePower: string = IdsBS.DisadvantageId.decreasedArcanePower;
export const DisadvantageId_decreasedKarmaPoints: string = IdsBS.DisadvantageId.decreasedKarmaPoints;
export const DisadvantageId_decreasedLifePoints: string = IdsBS.DisadvantageId.decreasedLifePoints;
export const DisadvantageId_decreasedSpirit: string = IdsBS.DisadvantageId.decreasedSpirit;
export const DisadvantageId_decreasedToughness: string = IdsBS.DisadvantageId.decreasedToughness;
export const DisadvantageId_badLuck: string = IdsBS.DisadvantageId.badLuck;
export const DisadvantageId_personalityFlaw: string = IdsBS.DisadvantageId.personalityFlaw;
export const DisadvantageId_principles: string = IdsBS.DisadvantageId.principles;
export const DisadvantageId_badHabit: string = IdsBS.DisadvantageId.badHabit;
export const DisadvantageId_negativeTrait: string = IdsBS.DisadvantageId.negativeTrait;
export const DisadvantageId_stigma: string = IdsBS.DisadvantageId.stigma;
export const DisadvantageId_deaf: string = IdsBS.DisadvantageId.deaf;
export const DisadvantageId_incompetent: string = IdsBS.DisadvantageId.incompetent;
export const DisadvantageId_obligations: string = IdsBS.DisadvantageId.obligations;
export const DisadvantageId_maimed: string = IdsBS.DisadvantageId.maimed;
export const DisadvantageId_brittleBones: string = IdsBS.DisadvantageId.brittleBones;
export const DisadvantageId_smallSpellSelection: string = IdsBS.DisadvantageId.smallSpellSelection;
export const DisadvantageId_wenigePredigten: string = IdsBS.DisadvantageId.wenigePredigten;
export const DisadvantageId_wenigeVisionen: string = IdsBS.DisadvantageId.wenigeVisionen;
export const SkillId_flying: string = IdsBS.SkillId.flying;
export const SkillId_gaukelei: string = IdsBS.SkillId.gaukelei;
export const SkillId_climbing: string = IdsBS.SkillId.climbing;
export const SkillId_bodyControl: string = IdsBS.SkillId.bodyControl;
export const SkillId_featOfStrength: string = IdsBS.SkillId.featOfStrength;
export const SkillId_riding: string = IdsBS.SkillId.riding;
export const SkillId_swimming: string = IdsBS.SkillId.swimming;
export const SkillId_selfControl: string = IdsBS.SkillId.selfControl;
export const SkillId_singing: string = IdsBS.SkillId.singing;
export const SkillId_perception: string = IdsBS.SkillId.perception;
export const SkillId_dancing: string = IdsBS.SkillId.dancing;
export const SkillId_pickpocket: string = IdsBS.SkillId.pickpocket;
export const SkillId_stealth: string = IdsBS.SkillId.stealth;
export const SkillId_carousing: string = IdsBS.SkillId.carousing;
export const SkillId_persuasion: string = IdsBS.SkillId.persuasion;
export const SkillId_seduction: string = IdsBS.SkillId.seduction;
export const SkillId_intimidation: string = IdsBS.SkillId.intimidation;
export const SkillId_etiquette: string = IdsBS.SkillId.etiquette;
export const SkillId_streetwise: string = IdsBS.SkillId.streetwise;
export const SkillId_empathy: string = IdsBS.SkillId.empathy;
export const SkillId_fastTalk: string = IdsBS.SkillId.fastTalk;
export const SkillId_disguise: string = IdsBS.SkillId.disguise;
export const SkillId_willpower: string = IdsBS.SkillId.willpower;
export const SkillId_tracking: string = IdsBS.SkillId.tracking;
export const SkillId_ropes: string = IdsBS.SkillId.ropes;
export const SkillId_fishing: string = IdsBS.SkillId.fishing;
export const SkillId_orienting: string = IdsBS.SkillId.orienting;
export const SkillId_plantLore: string = IdsBS.SkillId.plantLore;
export const SkillId_animalLore: string = IdsBS.SkillId.animalLore;
export const SkillId_survival: string = IdsBS.SkillId.survival;
export const SkillId_gambling: string = IdsBS.SkillId.gambling;
export const SkillId_geography: string = IdsBS.SkillId.geography;
export const SkillId_history: string = IdsBS.SkillId.history;
export const SkillId_religions: string = IdsBS.SkillId.religions;
export const SkillId_warfare: string = IdsBS.SkillId.warfare;
export const SkillId_magicalLore: string = IdsBS.SkillId.magicalLore;
export const SkillId_mechanics: string = IdsBS.SkillId.mechanics;
export const SkillId_math: string = IdsBS.SkillId.math;
export const SkillId_law: string = IdsBS.SkillId.law;
export const SkillId_mythsAndLegends: string = IdsBS.SkillId.mythsAndLegends;
export const SkillId_sphereLore: string = IdsBS.SkillId.sphereLore;
export const SkillId_astronomy: string = IdsBS.SkillId.astronomy;
export const SkillId_alchemy: string = IdsBS.SkillId.alchemy;
export const SkillId_sailing: string = IdsBS.SkillId.sailing;
export const SkillId_driving: string = IdsBS.SkillId.driving;
export const SkillId_commerce: string = IdsBS.SkillId.commerce;
export const SkillId_treatPoison: string = IdsBS.SkillId.treatPoison;
export const SkillId_treatDisease: string = IdsBS.SkillId.treatDisease;
export const SkillId_treatSoul: string = IdsBS.SkillId.treatSoul;
export const SkillId_treatWounds: string = IdsBS.SkillId.treatWounds;
export const SkillId_woodworking: string = IdsBS.SkillId.woodworking;
export const SkillId_prepareFood: string = IdsBS.SkillId.prepareFood;
export const SkillId_leatherworking: string = IdsBS.SkillId.leatherworking;
export const SkillId_artisticAbility: string = IdsBS.SkillId.artisticAbility;
export const SkillId_metalworking: string = IdsBS.SkillId.metalworking;
export const SkillId_music: string = IdsBS.SkillId.music;
export const SkillId_pickLocks: string = IdsBS.SkillId.pickLocks;
export const SkillId_earthencraft: string = IdsBS.SkillId.earthencraft;
export const SkillId_clothworking: string = IdsBS.SkillId.clothworking;
export const CombatTechniqueId_crossbows: string = IdsBS.CombatTechniqueId.crossbows;
export const CombatTechniqueId_bows: string = IdsBS.CombatTechniqueId.bows;
export const CombatTechniqueId_daggers: string = IdsBS.CombatTechniqueId.daggers;
export const CombatTechniqueId_fencingWeapons: string = IdsBS.CombatTechniqueId.fencingWeapons;
export const CombatTechniqueId_impactWeapons: string = IdsBS.CombatTechniqueId.impactWeapons;
export const CombatTechniqueId_chainWeapons: string = IdsBS.CombatTechniqueId.chainWeapons;
export const CombatTechniqueId_lances: string = IdsBS.CombatTechniqueId.lances;
export const CombatTechniqueId_brawling: string = IdsBS.CombatTechniqueId.brawling;
export const CombatTechniqueId_shields: string = IdsBS.CombatTechniqueId.shields;
export const CombatTechniqueId_slings: string = IdsBS.CombatTechniqueId.slings;
export const CombatTechniqueId_swords: string = IdsBS.CombatTechniqueId.swords;
export const CombatTechniqueId_polearms: string = IdsBS.CombatTechniqueId.polearms;
export const CombatTechniqueId_thrownWeapons: string = IdsBS.CombatTechniqueId.thrownWeapons;
export const CombatTechniqueId_twoHandedImpactWeapons: string = IdsBS.CombatTechniqueId.twoHandedImpactWeapons;
export const CombatTechniqueId_twoHandedSwords: string = IdsBS.CombatTechniqueId.twoHandedSwords;
export const CombatTechniqueId_spittingFire: string = IdsBS.CombatTechniqueId.spittingFire;
export const CombatTechniqueId_blowguns: string = IdsBS.CombatTechniqueId.blowguns;
export const CombatTechniqueId_discuses: string = IdsBS.CombatTechniqueId.discuses;
export const CombatTechniqueId_faecher: string = IdsBS.CombatTechniqueId.faecher;
export const CombatTechniqueId_spiesswaffen: string = IdsBS.CombatTechniqueId.spiesswaffen;
export const SpecialAbilityId_skillSpecialization: string = IdsBS.SpecialAbilityId.skillSpecialization;
export const SpecialAbilityId_terrainKnowledge: string = IdsBS.SpecialAbilityId.terrainKnowledge;
export const SpecialAbilityId_craftInstruments: string = IdsBS.SpecialAbilityId.craftInstruments;
export const SpecialAbilityId_hunter: string = IdsBS.SpecialAbilityId.hunter;
export const SpecialAbilityId_areaKnowledge: string = IdsBS.SpecialAbilityId.areaKnowledge;
export const SpecialAbilityId_literacy: string = IdsBS.SpecialAbilityId.literacy;
export const SpecialAbilityId_language: string = IdsBS.SpecialAbilityId.language;
export const SpecialAbilityId_combatReflexes: string = IdsBS.SpecialAbilityId.combatReflexes;
export const SpecialAbilityId_improvedDodge: string = IdsBS.SpecialAbilityId.improvedDodge;
export const SpecialAbilityId_traditionGuildMages: number = IdsBS.SpecialAbilityId.traditionGuildMages;
export const SpecialAbilityId_propertyKnowledge: string = IdsBS.SpecialAbilityId.propertyKnowledge;
export const SpecialAbilityId_propertyFocus: string = IdsBS.SpecialAbilityId.propertyFocus;
export const SpecialAbilityId_aspectKnowledge: string = IdsBS.SpecialAbilityId.aspectKnowledge;
export const SpecialAbilityId_traditionChurchOfPraios: string = IdsBS.SpecialAbilityId.traditionChurchOfPraios;
export const SpecialAbilityId_feuerschlucker: string = IdsBS.SpecialAbilityId.feuerschlucker;
export const SpecialAbilityId_combatStyleCombination: string = IdsBS.SpecialAbilityId.combatStyleCombination;
export const SpecialAbilityId_adaptionZauber: string = IdsBS.SpecialAbilityId.adaptionZauber;
export const SpecialAbilityId_exorzist: string = IdsBS.SpecialAbilityId.exorzist;
export const SpecialAbilityId_favoriteSpellwork: string = IdsBS.SpecialAbilityId.favoriteSpellwork;
export const SpecialAbilityId_traditionWitches: string = IdsBS.SpecialAbilityId.traditionWitches;
export const SpecialAbilityId_magicStyleCombination: string = IdsBS.SpecialAbilityId.magicStyleCombination;
export const SpecialAbilityId_harmoniezauberei: string = IdsBS.SpecialAbilityId.harmoniezauberei;
export const SpecialAbilityId_matrixzauberei: string = IdsBS.SpecialAbilityId.matrixzauberei;
export const SpecialAbilityId_traditionElves: string = IdsBS.SpecialAbilityId.traditionElves;
export const SpecialAbilityId_traditionDruids: string = IdsBS.SpecialAbilityId.traditionDruids;
export const SpecialAbilityId_spellEnhancement: number = IdsBS.SpecialAbilityId.spellEnhancement;
export const SpecialAbilityId_forschungsgebiet: string = IdsBS.SpecialAbilityId.forschungsgebiet;
export const SpecialAbilityId_expertenwissen: string = IdsBS.SpecialAbilityId.expertenwissen;
export const SpecialAbilityId_wissensdurst: string = IdsBS.SpecialAbilityId.wissensdurst;
export const SpecialAbilityId_recherchegespuer: string = IdsBS.SpecialAbilityId.recherchegespuer;
export const SpecialAbilityId_predigtDerGemeinschaft: string = IdsBS.SpecialAbilityId.predigtDerGemeinschaft;
export const SpecialAbilityId_predigtDerZuversicht: string = IdsBS.SpecialAbilityId.predigtDerZuversicht;
export const SpecialAbilityId_predigtDesGottvertrauens: string = IdsBS.SpecialAbilityId.predigtDesGottvertrauens;
export const SpecialAbilityId_predigtDesWohlgefallens: string = IdsBS.SpecialAbilityId.predigtDesWohlgefallens;
export const SpecialAbilityId_predigtWiderMissgeschicke: string = IdsBS.SpecialAbilityId.predigtWiderMissgeschicke;
export const SpecialAbilityId_visionDerBestimmung: string = IdsBS.SpecialAbilityId.visionDerBestimmung;
export const SpecialAbilityId_visionDerEntrueckung: string = IdsBS.SpecialAbilityId.visionDerEntrueckung;
export const SpecialAbilityId_visionDerGottheit: string = IdsBS.SpecialAbilityId.visionDerGottheit;
export const SpecialAbilityId_visionDesSchicksals: string = IdsBS.SpecialAbilityId.visionDesSchicksals;
export const SpecialAbilityId_visionDesWahrenGlaubens: string = IdsBS.SpecialAbilityId.visionDesWahrenGlaubens;
export const SpecialAbilityId_hoheWeihe: string = IdsBS.SpecialAbilityId.hoheWeihe;
export const SpecialAbilityId_lieblingsliturgie: string = IdsBS.SpecialAbilityId.lieblingsliturgie;
export const SpecialAbilityId_zugvoegel: string = IdsBS.SpecialAbilityId.zugvoegel;
export const SpecialAbilityId_jaegerinnenDerWeissenMaid: string = IdsBS.SpecialAbilityId.jaegerinnenDerWeissenMaid;
export const SpecialAbilityId_anhaengerDesGueldenen: string = IdsBS.SpecialAbilityId.anhaengerDesGueldenen;
export const SpecialAbilityId_gebieterDesAspekts: string = IdsBS.SpecialAbilityId.gebieterDesAspekts;
export const SpecialAbilityId_chantEnhancement: number = IdsBS.SpecialAbilityId.chantEnhancement;
export const SpecialAbilityId_dunklesAbbildDerBuendnisgabe: string = IdsBS.SpecialAbilityId.dunklesAbbildDerBuendnisgabe;
export const SpecialAbilityId_traditionIllusionist: string = IdsBS.SpecialAbilityId.traditionIllusionist;
export const SpecialAbilityId_traditionArcaneBard: string = IdsBS.SpecialAbilityId.traditionArcaneBard;
export const SpecialAbilityId_traditionArcaneDancer: string = IdsBS.SpecialAbilityId.traditionArcaneDancer;
export const SpecialAbilityId_traditionIntuitiveMage: string = IdsBS.SpecialAbilityId.traditionIntuitiveMage;
export const SpecialAbilityId_traditionSavant: string = IdsBS.SpecialAbilityId.traditionSavant;
export const SpecialAbilityId_traditionQabalyaMage: string = IdsBS.SpecialAbilityId.traditionQabalyaMage;
export const SpecialAbilityId_traditionChurchOfRondra: string = IdsBS.SpecialAbilityId.traditionChurchOfRondra;
export const SpecialAbilityId_traditionChurchOfBoron: string = IdsBS.SpecialAbilityId.traditionChurchOfBoron;
export const SpecialAbilityId_traditionChurchOfHesinde: string = IdsBS.SpecialAbilityId.traditionChurchOfHesinde;
export const SpecialAbilityId_traditionChurchOfPhex: string = IdsBS.SpecialAbilityId.traditionChurchOfPhex;
export const SpecialAbilityId_traditionChurchOfPeraine: string = IdsBS.SpecialAbilityId.traditionChurchOfPeraine;
export const SpecialAbilityId_traditionChurchOfEfferd: string = IdsBS.SpecialAbilityId.traditionChurchOfEfferd;
export const SpecialAbilityId_traditionChurchOfTravia: string = IdsBS.SpecialAbilityId.traditionChurchOfTravia;
export const SpecialAbilityId_traditionChurchOfFirun: string = IdsBS.SpecialAbilityId.traditionChurchOfFirun;
export const SpecialAbilityId_traditionChurchOfTsa: string = IdsBS.SpecialAbilityId.traditionChurchOfTsa;
export const SpecialAbilityId_traditionChurchOfIngerimm: string = IdsBS.SpecialAbilityId.traditionChurchOfIngerimm;
export const SpecialAbilityId_traditionChurchOfRahja: string = IdsBS.SpecialAbilityId.traditionChurchOfRahja;
export const SpecialAbilityId_traditionCultOfTheNamelessOne: string = IdsBS.SpecialAbilityId.traditionCultOfTheNamelessOne;
export const SpecialAbilityId_traditionChurchOfAves: string = IdsBS.SpecialAbilityId.traditionChurchOfAves;
export const SpecialAbilityId_traditionChurchOfIfirn: string = IdsBS.SpecialAbilityId.traditionChurchOfIfirn;
export const SpecialAbilityId_traditionChurchOfKor: string = IdsBS.SpecialAbilityId.traditionChurchOfKor;
export const SpecialAbilityId_traditionChurchOfNandus: string = IdsBS.SpecialAbilityId.traditionChurchOfNandus;
export const SpecialAbilityId_traditionChurchOfSwafnir: string = IdsBS.SpecialAbilityId.traditionChurchOfSwafnir;
export const SpecialAbilityId_languageSpecializations: string = IdsBS.SpecialAbilityId.languageSpecializations;
export const SpecialAbilityId_traditionSchelme: string = IdsBS.SpecialAbilityId.traditionSchelme;
export const SpecialAbilityId_traditionZauberalchimisten: string = IdsBS.SpecialAbilityId.traditionZauberalchimisten;
export const SpecialAbilityId_grosseMeditation: string = IdsBS.SpecialAbilityId.grosseMeditation;
export const SpecialAbilityId_imitationszauberei: string = IdsBS.SpecialAbilityId.imitationszauberei;
export const SpecialAbilityId_kraftliniennutzung: string = IdsBS.SpecialAbilityId.kraftliniennutzung;
export const SpecialAbilityId_scholarDerHalleDesLebensZuNorburg: string = IdsBS.SpecialAbilityId.scholarDerHalleDesLebensZuNorburg;
export const SpecialAbilityId_scholarDesKreisesDerEinfuehlung: string = IdsBS.SpecialAbilityId.scholarDesKreisesDerEinfuehlung;
export const SpecialAbilityId_madaschwesternStil: string = IdsBS.SpecialAbilityId.madaschwesternStil;
export const SpecialAbilityId_garetherGossenStil: string = IdsBS.SpecialAbilityId.garetherGossenStil;
export const SpecialAbilityId_wegDerGelehrten: string = IdsBS.SpecialAbilityId.wegDerGelehrten;
export const SpecialAbilityId_traditionCultOfNuminoru: string = IdsBS.SpecialAbilityId.traditionCultOfNuminoru;
export const SpecialAbilityId_wegDerKuenstlerin: string = IdsBS.SpecialAbilityId.wegDerKuenstlerin;
export const SpecialAbilityId_wegDerSchreiberin: string = IdsBS.SpecialAbilityId.wegDerSchreiberin;
export const SpecialAbilityId_fachwissen: string = IdsBS.SpecialAbilityId.fachwissen;
export const SpecialAbilityId_handwerkskunst: string = IdsBS.SpecialAbilityId.handwerkskunst;
export const SpecialAbilityId_kindDerNatur: string = IdsBS.SpecialAbilityId.kindDerNatur;
export const SpecialAbilityId_koerperlichesGeschick: string = IdsBS.SpecialAbilityId.koerperlichesGeschick;
export const SpecialAbilityId_sozialeKompetenz: string = IdsBS.SpecialAbilityId.sozialeKompetenz;
export const SpecialAbilityId_universalgenie: string = IdsBS.SpecialAbilityId.universalgenie;
export const SpecialAbilityId_scholarDesMagierkollegsZuHoningen: string = IdsBS.SpecialAbilityId.scholarDesMagierkollegsZuHoningen;
export const SpecialAbilityId_traditionAnimisten: string = IdsBS.SpecialAbilityId.traditionAnimisten;
export const SpecialAbilityId_traditionGeoden: string = IdsBS.SpecialAbilityId.traditionGeoden;
export const SpecialAbilityId_traditionZibilijas: string = IdsBS.SpecialAbilityId.traditionZibilijas;
export const SpecialAbilityId_zaubervariabilitaet: string = IdsBS.SpecialAbilityId.zaubervariabilitaet;
export const SpecialAbilityId_traditionBrobimGeoden: string = IdsBS.SpecialAbilityId.traditionBrobimGeoden;
export const SocialStatusId_notFree: number = IdsBS.SocialStatusId.notFree;
export const SocialStatusId_free: number = IdsBS.SocialStatusId.free;
export const SocialStatusId_lesserNoble: number = IdsBS.SocialStatusId.lesserNoble;
export const SocialStatusId_noble: number = IdsBS.SocialStatusId.noble;
export const SocialStatusId_aristocracy: number = IdsBS.SocialStatusId.aristocracy;
export const OptionalRuleId_maximumAttributeScores: string = IdsBS.OptionalRuleId.maximumAttributeScores;
export const OptionalRuleId_languageSpecialization: string = IdsBS.OptionalRuleId.languageSpecialization;
export const OptionalRuleId_higherDefenseStats: string = IdsBS.OptionalRuleId.higherDefenseStats;
export const ConditionId_sikaryanVerlust: string = IdsBS.ConditionId.sikaryanVerlust;
export const ConditionId_daemonischeAuszehrung: string = IdsBS.ConditionId.daemonischeAuszehrung;
export const ExperienceLevelId: {
masterly: string;
inexperienced: string;
brilliant: string;
ordinary: string;
experienced: string;
competent: string;
legendary: string
} = IdsBS.ExperienceLevelId
export const ProfessionId: { customProfession: string } = IdsBS.ProfessionId
export const DCId: {
dodge: string;
movement: string;
initiative: string;
woundThreshold: string;
toughness: string;
karmaPoints: string;
arcaneEnergy: string;
spirit: string;
lifePoints: string
} = IdsBS.DCId
export const SkillId: {
sailing: string;
treatPoison: string;
metalworking: string;
etiquette: string;
commerce: string;
treatSoul: string;
prepareFood: string;
music: string;
plantLore: string;
driving: string;
pickLocks: string;
flying: string;
religions: string;
riding: string;
empathy: string;
gambling: string;
sphereLore: string;
singing: string;
stealth: string;
gaukelei: string;
dancing: string;
persuasion: string;
intimidation: string;
carousing: string;
animalLore: string;
bodyControl: string;
history: string;
earthencraft: string;
survival: string;
astronomy: string;
perception: string;
treatWounds: string;
seduction: string;
selfControl: string;
disguise: string;
ropes: string;
climbing: string;
willpower: string;
fastTalk: string;
streetwise: string;
fishing: string;
geography: string;
mechanics: string;
treatDisease: string;
orienting: string;
law: string;
warfare: string;
pickpocket: string;
artisticAbility: string;
clothworking: string;
featOfStrength: string;
tracking: string;
mythsAndLegends: string;
math: string;
leatherworking: string;
swimming: string;
magicalLore: string;
woodworking: string;
alchemy: string
} = IdsBS.SkillId
export const CultureId: {
woodElves: string;
gladeElves: string;
firnelves: string;
steppenelfen: string
} = IdsBS.CultureId
export const Phase: {
creation: number;
inGame: number;
rcp: number
} = IdsBS.Phase
export const AdvantageId: {
luck: string;
exceptionalSkill: string;
weaponAptitude: string;
largeSpellSelection: string;
hatredOf: string;
zahlreichePredigten: string;
einkommen: string;
aptitude: string;
prediger: string;
sociallyAdaptable: string;
immunityToDisease: string;
nimble: string;
increasedKarmaPoints: string;
visionaer: string;
inspireConfidence: string;
spellcaster: string;
exceptionalCombatTechnique: string;
increasedAstralPower: string;
zahlreicheVisionen: string;
leichterGang: string;
increasedLifePoints: string;
unyielding: string;
rich: string;
blessed: string;
increasedSpirit: string;
immunityToPoison: string;
increasedToughness: string;
magicalAttunement: string
} = IdsBS.AdvantageId
export const CombatTechniqueId: {
discuses: string;
swords: string;
faecher: string;
chainWeapons: string;
twoHandedSwords: string;
daggers: string;
crossbows: string;
brawling: string;
thrownWeapons: string;
lances: string;
impactWeapons: string;
slings: string;
spittingFire: string;
blowguns: string;
fencingWeapons: string;
twoHandedImpactWeapons: string;
spiesswaffen: string;
bows: string;
shields: string;
polearms: string
} = IdsBS.CombatTechniqueId
export const SocialStatusId: {
free: number;
aristocracy: number;
lesserNoble: number;
notFree: number;
noble: number
} = IdsBS.SocialStatusId
export const DisadvantageId: {
obligations: string;
slow: string;
wenigeVisionen: string;
badLuck: string;
maimed: string;
wenigePredigten: string;
decreasedLifePoints: string;
incompetent: string;
afraidOf: string;
deaf: string;
magicalRestriction: string;
decreasedSpirit: string;
noFlyingBalm: string;
poor: string;
smallSpellSelection: string;
noFamiliar: string;
decreasedArcanePower: string;
principles: string;
negativeTrait: string;
stigma: string;
badHabit: string;
decreasedKarmaPoints: string;
brittleBones: string;
decreasedToughness: string;
personalityFlaw: string
} = IdsBS.DisadvantageId
export const ConditionId: { sikaryanVerlust: string; daemonischeAuszehrung: string } = IdsBS.ConditionId
export const RaceId: {
humans: string;
elves: string;
dwarves: string;
halfElves: string
} = IdsBS.RaceId
export const AttrId: {
intuition: string;
charisma: string;
agility: string;
courage: string;
sagacity: string;
constitution: string;
dexterity: string;
strength: string
} = IdsBS.AttrId
export const SpecialAbilityId: {
universalgenie: string;
traditionChurchOfTravia: string;
imitationszauberei: string;
garetherGossenStil: string;
magicStyleCombination: string;
forschungsgebiet: string;
anhaengerDesGueldenen: string;
visionDerBestimmung: string;
visionDerEntrueckung: string;
languageSpecializations: string;
chantEnhancement: number;
traditionChurchOfPhex: string;
traditionChurchOfFirun: string;
traditionChurchOfNandus: string;
harmoniezauberei: string;
craftInstruments: string;
hoheWeihe: string;
wegDerKuenstlerin: string;
jaegerinnenDerWeissenMaid: string;
kraftliniennutzung: string;
sozialeKompetenz: string;
traditionDruids: string;
madaschwesternStil: string;
expertenwissen: string;
terrainKnowledge: string;
recherchegespuer: string;
visionDerGottheit: string;
traditionChurchOfBoron: string;
traditionGuildMages: number;
traditionGeoden: string;
dunklesAbbildDerBuendnisgabe: string;
grosseMeditation: string;
propertyKnowledge: string;
traditionCultOfTheNamelessOne: string;
areaKnowledge: string;
traditionArcaneDancer: string;
zugvoegel: string;
traditionChurchOfAves: string;
gebieterDesAspekts: string;
propertyFocus: string;
fachwissen: string;
adaptionZauber: string;
favoriteSpellwork: string;
traditionArcaneBard: string;
traditionSavant: string;
traditionZauberalchimisten: string;
wissensdurst: string;
language: string;
wegDerGelehrten: string;
feuerschlucker: string;
predigtDesGottvertrauens: string;
traditionChurchOfHesinde: string;
traditionChurchOfRahja: string;
traditionChurchOfIfirn: string;
traditionAnimisten: string;
lieblingsliturgie: string;
zaubervariabilitaet: string;
traditionChurchOfPraios: string;
predigtWiderMissgeschicke: string;
scholarDesKreisesDerEinfuehlung: string;
matrixzauberei: string;
predigtDesWohlgefallens: string;
exorzist: string;
predigtDerGemeinschaft: string;
kindDerNatur: string;
traditionBrobimGeoden: string;
traditionChurchOfPeraine: string;
traditionIntuitiveMage: string;
traditionElves: string;
visionDesWahrenGlaubens: string;
traditionWitches: string;
traditionChurchOfIngerimm: string;
literacy: string;
combatReflexes: string;
combatStyleCombination: string;
scholarDerHalleDesLebensZuNorburg: string;
traditionChurchOfEfferd: string;
traditionChurchOfSwafnir: string;
wegDerSchreiberin: string;
koerperlichesGeschick: string;
hunter: string;
visionDesSchicksals: string;
traditionCultOfNuminoru: string;
traditionZibilijas: string;
improvedDodge: string;
traditionQabalyaMage: string;
aspectKnowledge: string;
spellEnhancement: number;
traditionSchelme: string;
predigtDerZuversicht: string;
traditionChurchOfTsa: string;
scholarDesMagierkollegsZuHoningen: string;
skillSpecialization: string;
traditionChurchOfRondra: string;
traditionChurchOfKor: string;
traditionIllusionist: string;
handwerkskunst: string
} = IdsBS.SpecialAbilityId
export const OptionalRuleId: {
higherDefenseStats: string;
maximumAttributeScores: string;
languageSpecialization: string
} = IdsBS.OptionalRuleId
File diff suppressed because it is too large Load Diff
+45 -3
View File
@@ -1,5 +1,39 @@
import { List } from "../../Data/List"
export type Id =
| { tag: "ExperienceLevel"; value: number }
| { tag: "Race"; value: number }
| { tag: "Culture"; value: number }
| { tag: "Profession"; value: number }
| { tag: "Attribute"; value: number }
| { tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Curse"; value: number }
| { tag: "ElvenMagicalSong"; value: number }
| { tag: "DominationRitual"; value: number }
| { tag: "MagicalMelody"; value: number }
| { tag: "MagicalDance"; value: number }
| { tag: "RogueSpell"; value: number }
| { tag: "AnimistForce"; value: number }
| { tag: "GeodeRitual"; value: number }
| { tag: "ZibiljaRitual"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Item"; value: number }
| { tag: "EquipmentPackage"; value: number }
| { tag: "HitZoneArmor"; value: number }
| { tag: "Familiar"; value: number }
| { tag: "Animal"; value: number }
| { tag: "FocusRule"; value: number }
| { tag: "OptionalRule"; value: number }
| { tag: "Condition"; value: number }
| { tag: "State"; value: number }
/**
* Please keep enum members sorted by value and not by key!
*/
@@ -108,7 +142,7 @@ export enum AdvantageId {
/**
* Lists advantage IDs that have no influence on the AP maximum for advantages.
*/
export const AdvantageIdsNoMaxInfl = List<AdvantageId> (AdvantageId.Einkommen)
export const AdvantageIdsNoMaxInfl = List<string> (AdvantageId.Einkommen)
export enum DisadvantageId {
CustomDisadvantage = "DISADV_0",
@@ -287,6 +321,8 @@ export enum SpecialAbilityId {
FavoriteSpellwork = "SA_250",
TraditionWitches = "SA_255",
MagicStyleCombination = "SA_266",
Harmoniezauberei = "SA_296",
Matrixzauberei = "SA_303",
TraditionElves = "SA_345",
TraditionDruids = "SA_346",
SpellEnhancement = "SA_414",
@@ -300,14 +336,14 @@ export enum SpecialAbilityId {
PredigtDesWohlgefallens = "SA_547",
PredigtWiderMissgeschicke = "SA_548",
VisionDerBestimmung = "SA_549",
VisionDerEntrückung = "SA_550",
VisionDerEntrueckung = "SA_550",
VisionDerGottheit = "SA_551",
VisionDesSchicksals = "SA_552",
VisionDesWahrenGlaubens = "SA_553",
HoheWeihe = "SA_563",
Lieblingsliturgie = "SA_569",
Zugvoegel = "SA_623",
JaegerinnenDerWeißenMaid = "SA_625",
JaegerinnenDerWeissenMaid = "SA_625",
AnhaengerDesGueldenen = "SA_632",
GebieterDesAspekts = "SA_639",
ChantEnhancement = "SA_663",
@@ -348,6 +384,7 @@ export enum SpecialAbilityId {
TraditionZauberalchimisten = "SA_750",
GrosseMeditation = "SA_772",
Imitationszauberei = "SA_775",
Kraftliniennutzung = "SA_781",
ScholarDerHalleDesLebensZuNorburg = "SA_802",
ScholarDesKreisesDerEinfuehlung = "SA_808",
MadaschwesternStil = "SA_821",
@@ -387,3 +424,8 @@ export enum OptionalRuleId {
LanguageSpecialization = "OR_15",
HigherDefenseStats = "OR_17",
}
export enum ConditionId {
SikaryanVerlust = "COND_11",
DaemonischeAuszehrung = "COND_14",
}
-35
View File
@@ -1,35 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
function t(json) {
var scope = Json_decode.string(json);
switch (scope) {
case "SPI" :
Json_decode.$$int(json);
return /* SPI */0;
case "SPI/2" :
Json_decode.$$int(json);
return /* DOUBLE_SPI */1;
case "SPI/TOU" :
Json_decode.$$int(json);
return /* MAX_SPI_TOU */3;
case "TOU" :
Json_decode.$$int(json);
return /* TOU */2;
default:
throw {
RE_EXN_ID: Json_decode.DecodeError,
_1: "Unknown check modifier: " + scope,
Error: new Error()
};
}
}
var Decode = {
t: t
};
exports.Decode = Decode;
/* No side effect */
-23
View File
@@ -1,23 +0,0 @@
type t =
| SPI
| DOUBLE_SPI
| TOU
| MAX_SPI_TOU;
module Decode = {
open Json.Decode;
let t = json =>
json
|> string
|> (
scope =>
switch (scope) {
| "SPI" => json |> int |> (_ => SPI)
| "SPI/2" => json |> int |> (_ => DOUBLE_SPI)
| "TOU" => json |> int |> (_ => TOU)
| "SPI/TOU" => json |> int |> (_ => MAX_SPI_TOU)
| _ => raise(DecodeError("Unknown check modifier: " ++ scope))
}
);
};
-32
View File
@@ -1,32 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Rules = {};
var Activatable = {};
var Attribute = {};
var Energies = {};
var ActivatableSkill = {};
var Skill = {};
var Item = {};
var Pact = {};
var TransferUnfamiliar = {};
exports.Rules = Rules;
exports.Activatable = Activatable;
exports.Attribute = Attribute;
exports.Energies = Energies;
exports.ActivatableSkill = ActivatableSkill;
exports.Skill = Skill;
exports.Item = Item;
exports.Pact = Pact;
exports.TransferUnfamiliar = TransferUnfamiliar;
/* No side effect */
-407
View File
@@ -1,407 +0,0 @@
/* TypeScript file generated from Hero.re by genType. */
/* eslint-disable import/first */
import {activatableAndSkillId as Ids_activatableAndSkillId} from '../../../src/App/Constants/Ids.gen';
import {activatableId as Ids_activatableId} from '../../../src/App/Constants/Ids.gen';
import {hitZoneArmorZoneItemId as Ids_hitZoneArmorZoneItemId} from '../../../src/App/Constants/Ids.gen';
import {list} from '../../../src/shims/ReasonPervasives.shim';
import {maybe as Maybe_maybe} from '../../../src/Data/Maybe.gen';
import {oneOrMany as GenericHelpers_oneOrMany} from '../../../src/App/Utilities/GenericHelpers.gen';
import {selectOptionId as Ids_selectOptionId} from '../../../src/App/Constants/Ids.gen';
import {t as IntMap_t} from '../../../src/shims/IntMap.gen';
import {t as IntSet_t} from '../../../src/shims/IntSet.gen';
// tslint:disable-next-line:interface-over-type-literal
export type phase = "Outline" | "Definition" | "Advancement";
export type Phase = phase;
// tslint:disable-next-line:interface-over-type-literal
export type sex = "Male" | "Female";
export type Sex = sex;
// tslint:disable-next-line:interface-over-type-literal
export type baseOrWithVariant =
{ tag: "Base"; value: number }
| { tag: "WithVariant"; value: [number, number] };
export type BaseOrWithVariant = baseOrWithVariant;
// tslint:disable-next-line:interface-over-type-literal
export type Rules_activeRule = { readonly id: number; readonly options: list<number> };
export type ActiveRule = Rules_activeRule;
// tslint:disable-next-line:interface-over-type-literal
export type Rules_t = {
readonly areAllPublicationsActive: boolean;
readonly activePublications: list<string>;
readonly activeFocusRules: list<Rules_activeRule>;
readonly activeOptionalRules: list<Rules_activeRule>
};
export type Rules = Rules_t;
// tslint:disable-next-line:interface-over-type-literal
export type personalData = {
readonly family: Maybe_maybe<string>;
readonly placeOfBirth: Maybe_maybe<string>;
readonly dateOfBirth: Maybe_maybe<string>;
readonly age: Maybe_maybe<string>;
readonly hairColor: Maybe_maybe<number>;
readonly eyeColor: Maybe_maybe<number>;
readonly size: Maybe_maybe<string>;
readonly weight: Maybe_maybe<string>;
readonly title: Maybe_maybe<string>;
readonly socialStatus: Maybe_maybe<number>;
readonly characteristics: Maybe_maybe<string>;
readonly otherInfo: Maybe_maybe<string>;
readonly cultureAreaKnowledge: Maybe_maybe<string>
};
export type PersonalData = personalData;
// tslint:disable-next-line:interface-over-type-literal
export type Activatable_option =
{ NAME: "Generic"; VAL: number }
| { NAME: "Skill"; VAL: number }
| { NAME: "CombatTechnique"; VAL: number }
| { NAME: "Spell"; VAL: number }
| { NAME: "Cantrip"; VAL: number }
| { NAME: "LiturgicalChant"; VAL: number }
| { NAME: "Blessing"; VAL: number }
| { NAME: "CustomInput"; VAL: string };
// tslint:disable-next-line:interface-over-type-literal
export type Activatable_single = {
readonly options: list<Activatable_option>;
readonly level: Maybe_maybe<number>;
readonly customCost: Maybe_maybe<number>
};
export type ActivatableSingle = Activatable_single;
// tslint:disable-next-line:interface-over-type-literal
export type Activatable_dependency = {
readonly source: Ids_activatableId;
readonly target: GenericHelpers_oneOrMany<Ids_activatableId>;
readonly active: boolean;
readonly options: list<GenericHelpers_oneOrMany<Ids_selectOptionId>>;
readonly level: Maybe_maybe<number>
};
export type ActivatableDependency = Activatable_dependency;
// tslint:disable-next-line:interface-over-type-literal
export type Activatable_t = {
readonly id: number;
readonly active: list<Activatable_single>;
readonly dependencies: list<Activatable_dependency>
};
export type Activatable = Activatable_t;
// tslint:disable-next-line:interface-over-type-literal
export type Attribute_dependency = {
readonly source: Ids_activatableId;
readonly target: GenericHelpers_oneOrMany<number>;
readonly value: Maybe_maybe<number>
};
export type AttributeDependency = Attribute_dependency;
// tslint:disable-next-line:interface-over-type-literal
export type Attribute_t = {
readonly id: number;
readonly value: number;
readonly dependencies: list<Attribute_dependency>
};
export type Attribute = Attribute_t;
// tslint:disable-next-line:interface-over-type-literal
export type Energies_permanentEnergyLoss = { readonly lost: number };
export type PermanentEnergyLoss = Energies_permanentEnergyLoss;
// tslint:disable-next-line:interface-over-type-literal
export type Energies_permanentEnergyLossAndBoughtBack = { readonly lost: number; readonly boughtBack: number };
export type PermanentEnergyLossAndBoughtBack = Energies_permanentEnergyLossAndBoughtBack;
// tslint:disable-next-line:interface-over-type-literal
export type Energies_t = {
readonly addedLifePoints: number;
readonly addedArcaneEnergyPoints: number;
readonly addedKarmaPoints: number;
readonly permanentLifePoints: Energies_permanentEnergyLoss;
readonly permanentArcaneEnergyPoints: Energies_permanentEnergyLossAndBoughtBack;
readonly permanentKarmaPoints: Energies_permanentEnergyLossAndBoughtBack
};
export type Energies = Energies_t;
// tslint:disable-next-line:interface-over-type-literal
export type ActivatableSkill_value =
"Inactive"
| { tag: "Active"; value: number };
// tslint:disable-next-line:interface-over-type-literal
export type ActivatableSkill_dependency = {
readonly source: Ids_activatableAndSkillId;
readonly target: GenericHelpers_oneOrMany<number>;
readonly value: ActivatableSkill_value
};
export type ActivatableSkillDependency = ActivatableSkill_dependency;
// tslint:disable-next-line:interface-over-type-literal
export type ActivatableSkill_t = {
readonly id: number;
readonly value: ActivatableSkill_value;
readonly dependencies: list<ActivatableSkill_dependency>
};
export type ActivatableSkill = ActivatableSkill_t;
// tslint:disable-next-line:interface-over-type-literal
export type Skill_dependency = {
readonly source: Ids_activatableId;
readonly target: GenericHelpers_oneOrMany<number>;
readonly value: number
};
export type SkillDependency = Skill_dependency;
// tslint:disable-next-line:interface-over-type-literal
export type Skill_t = {
readonly id: number;
readonly value: number;
readonly dependencies: list<Skill_dependency>
};
export type Skill = Skill_t;
// tslint:disable-next-line:interface-over-type-literal
export type Item_mundaneItem = { readonly structurePoints: Maybe_maybe<GenericHelpers_oneOrMany<number>> };
export type MundaneItem = Item_mundaneItem;
// tslint:disable-next-line:interface-over-type-literal
export type Item_primaryAttributeDamageThreshold =
{ tag: "SameAttribute"; value: number }
| { tag: "AgilityStrength"; value: [number, number] }
| { tag: "DifferentAttribute"; value: [number, number] };
export type PrimaryAttributeDamageThreshold = Item_primaryAttributeDamageThreshold;
// tslint:disable-next-line:interface-over-type-literal
export type Item_damage = {
readonly amount: number;
readonly sides: number;
readonly flat: Maybe_maybe<number>
};
export type Damage = Item_damage;
// tslint:disable-next-line:interface-over-type-literal
export type Item_meleeWeapon = {
readonly combatTechnique: number;
readonly damage: Item_damage;
readonly primaryAttributeDamageThreshold: Maybe_maybe<Item_primaryAttributeDamageThreshold>;
readonly at: Maybe_maybe<number>;
readonly pa: Maybe_maybe<number>;
readonly reach: Maybe_maybe<number>;
readonly length: Maybe_maybe<number>;
readonly structurePoints: Maybe_maybe<GenericHelpers_oneOrMany<number>>;
readonly breakingPointRatingMod: Maybe_maybe<number>;
readonly isParryingWeapon: boolean;
readonly isTwoHandedWeapon: boolean;
readonly isImprovisedWeapon: boolean;
readonly damaged: Maybe_maybe<number>
};
export type MeleeWeapon = Item_meleeWeapon;
// tslint:disable-next-line:interface-over-type-literal
export type Item_rangedWeapon = {
readonly combatTechnique: number;
readonly damage: Maybe_maybe<Item_damage>;
readonly length: Maybe_maybe<number>;
readonly range: [number, number, number];
readonly reloadTime: GenericHelpers_oneOrMany<number>;
readonly ammunition: Maybe_maybe<number>;
readonly isImprovisedWeapon: boolean;
readonly damaged: Maybe_maybe<number>
};
export type RangedWeapon = Item_rangedWeapon;
// tslint:disable-next-line:interface-over-type-literal
export type Item_armor = {
readonly protection: number;
readonly encumbrance: number;
readonly hasAdditionalPenalties: boolean;
readonly iniMod: Maybe_maybe<number>;
readonly movMod: Maybe_maybe<number>;
readonly sturdinessMod: Maybe_maybe<number>;
readonly armorType: number;
readonly wear: Maybe_maybe<number>;
readonly isHitZoneArmorOnly: Maybe_maybe<boolean>
};
export type Armor = Item_armor;
// tslint:disable-next-line:interface-over-type-literal
export type Item_special =
{ tag: "MundaneItem"; value: Item_mundaneItem }
| { tag: "MeleeWeapon"; value: Item_meleeWeapon }
| { tag: "RangedWeapon"; value: Item_rangedWeapon }
| { tag: "CombinedWeapon"; value: [Item_meleeWeapon, Item_rangedWeapon] }
| { tag: "Armor"; value: Item_armor };
export type Special = Item_special;
// tslint:disable-next-line:interface-over-type-literal
export type Item_t = {
readonly id: number;
readonly amount: Maybe_maybe<number>;
readonly price: Maybe_maybe<number>;
readonly weight: Maybe_maybe<number>;
readonly template: Maybe_maybe<number>;
readonly isTemplateLocked: boolean;
readonly carriedWhere: Maybe_maybe<string>;
readonly special: Maybe_maybe<Item_special>;
readonly gr: number
};
export type Item = Item_t;
// tslint:disable-next-line:interface-over-type-literal
export type hitZoneArmor = {
readonly id: number;
readonly name: string;
readonly head: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly headWear: Maybe_maybe<number>;
readonly leftArm: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly leftArmWear: Maybe_maybe<number>;
readonly rightArm: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly rightArmWear: Maybe_maybe<number>;
readonly torso: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly torsoWear: Maybe_maybe<number>;
readonly leftLeg: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly leftLegWear: Maybe_maybe<number>;
readonly rightLeg: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
readonly rightLegWear: Maybe_maybe<number>
};
export type HitZoneArmor = hitZoneArmor;
// tslint:disable-next-line:interface-over-type-literal
export type purse = {
readonly ducats: number;
readonly silverthalers: number;
readonly halers: number;
readonly kreutzers: number
};
export type Purse = purse;
// tslint:disable-next-line:interface-over-type-literal
export type pet = {
readonly id: number;
readonly name: string;
readonly avatar: Maybe_maybe<string>;
readonly size: Maybe_maybe<string>;
readonly type: Maybe_maybe<string>;
readonly attack: Maybe_maybe<string>;
readonly dp: Maybe_maybe<string>;
readonly reach: Maybe_maybe<string>;
readonly actions: Maybe_maybe<string>;
readonly skills: Maybe_maybe<string>;
readonly abilities: Maybe_maybe<string>;
readonly notes: Maybe_maybe<string>;
readonly spentAp: Maybe_maybe<string>;
readonly totalAp: Maybe_maybe<string>;
readonly cou: Maybe_maybe<string>;
readonly sgc: Maybe_maybe<string>;
readonly int: Maybe_maybe<string>;
readonly cha: Maybe_maybe<string>;
readonly dex: Maybe_maybe<string>;
readonly agi: Maybe_maybe<string>;
readonly con: Maybe_maybe<string>;
readonly str: Maybe_maybe<string>;
readonly lp: Maybe_maybe<string>;
readonly ae: Maybe_maybe<string>;
readonly spi: Maybe_maybe<string>;
readonly tou: Maybe_maybe<string>;
readonly pro: Maybe_maybe<string>;
readonly ini: Maybe_maybe<string>;
readonly mov: Maybe_maybe<string>;
readonly at: Maybe_maybe<string>;
readonly pa: Maybe_maybe<string>
};
export type Pet = pet;
// tslint:disable-next-line:interface-over-type-literal
export type Pact_domain =
{ tag: "Predefined"; value: number }
| { tag: "Custom"; value: string };
export type PactDomain = Pact_domain;
// tslint:disable-next-line:interface-over-type-literal
export type Pact_t = {
readonly category: number;
readonly level: number;
readonly type: number;
readonly domain: Pact_domain;
readonly name: string
};
export type Pact = Pact_t;
// tslint:disable-next-line:interface-over-type-literal
export type styleDependency = {
readonly id: GenericHelpers_oneOrMany<number>;
readonly active: Maybe_maybe<number>;
readonly origin: number
};
export type StyleDependency = styleDependency;
// tslint:disable-next-line:interface-over-type-literal
export type TransferUnfamiliar_id =
"Spells"
| "LiturgicalChants"
| { tag: "Spell"; value: number }
| { tag: "LiturgicalChant"; value: number };
export type TransferUnfamiliarId = TransferUnfamiliar_id;
// tslint:disable-next-line:interface-over-type-literal
export type TransferUnfamiliar_t = { readonly id: TransferUnfamiliar_id; readonly srcId: number };
export type TransferUnfamiliar = TransferUnfamiliar_t;
// tslint:disable-next-line:interface-over-type-literal
export type t = {
readonly name: string;
readonly dateCreated: Date;
readonly dateModified: Date;
readonly adventurePointsTotal: number;
readonly experienceLevel: number;
readonly sex: sex;
readonly phase: phase;
readonly locale: string;
readonly avatar: Maybe_maybe<string>;
readonly race: Maybe_maybe<number>;
readonly raceVariant: Maybe_maybe<baseOrWithVariant>;
readonly culture: Maybe_maybe<number>;
readonly isCulturalPackageActive: boolean;
readonly profession: Maybe_maybe<baseOrWithVariant>;
readonly professionName: Maybe_maybe<string>;
readonly rules: Rules_t;
readonly personalData: personalData;
readonly advantages: IntMap_t<Activatable_t>;
readonly disadvantages: IntMap_t<Activatable_t>;
readonly specialAbilities: IntMap_t<Activatable_t>;
readonly attributes: IntMap_t<Attribute_t>;
readonly attributeAdjustmentSelected: number;
readonly energies: Energies_t;
readonly skills: IntMap_t<Skill_t>;
readonly combatTechniques: IntMap_t<Skill_t>;
readonly spells: IntMap_t<ActivatableSkill_t>;
readonly liturgicalChants: IntMap_t<ActivatableSkill_t>;
readonly cantrips: IntSet_t;
readonly blessings: IntSet_t;
readonly items: list<Item_t>;
readonly hitZoneArmors: list<hitZoneArmor>;
readonly purse: purse;
readonly pets: list<pet>;
readonly pact: Maybe_maybe<Pact_t>;
readonly combatStyleDependencies: list<styleDependency>;
readonly magicalStyleDependencies: list<styleDependency>;
readonly blessedStyleDependencies: list<styleDependency>;
readonly skillStyleDependencies: list<styleDependency>;
readonly socialStatusDependencies: list<number>;
readonly transferredUnfamiliarSpells: list<TransferUnfamiliar_t>
};
export type Hero = t;
-449
View File
@@ -1,449 +0,0 @@
open Maybe;
open GenericHelpers;
[@genType "Phase"]
type phase =
| Outline
| Definition
| Advancement;
[@genType "Sex"]
type sex =
| Male
| Female;
[@genType "BaseOrWithVariant"]
type baseOrWithVariant =
| Base(int)
| WithVariant(int, int);
module Rules = {
[@genType "ActiveRule"]
type activeRule = {
id: int,
options: list(int),
};
[@genType "Rules"]
type t = {
areAllPublicationsActive: bool,
activePublications: list(string),
activeFocusRules: list(activeRule),
activeOptionalRules: list(activeRule),
};
};
[@genType "PersonalData"]
type personalData = {
family: maybe(string),
placeOfBirth: maybe(string),
dateOfBirth: maybe(string),
age: maybe(string),
hairColor: maybe(int),
eyeColor: maybe(int),
size: maybe(string),
weight: maybe(string),
title: maybe(string),
socialStatus: maybe(int),
characteristics: maybe(string),
otherInfo: maybe(string),
cultureAreaKnowledge: maybe(string),
};
module Activatable = {
type option = [
| `Generic(int)
| `Skill(int)
| `CombatTechnique(int)
| `Spell(int)
| `Cantrip(int)
| `LiturgicalChant(int)
| `Blessing(int)
| `CustomInput(string)
];
[@genType "ActivatableSingle"]
type single = {
options: list(option),
level: maybe(int),
customCost: maybe(int),
};
[@genType "ActivatableDependency"]
type dependency = {
source: Ids.activatableId,
target: oneOrMany(Ids.activatableId),
active: bool,
options: list(oneOrMany(Ids.selectOptionId)),
level: maybe(int),
};
[@genType "Activatable"]
type t = {
id: int,
active: list(single),
dependencies: list(dependency),
};
};
module Attribute = {
[@genType "AttributeDependency"]
type dependency = {
source: Ids.activatableId,
target: oneOrMany(int),
value: maybe(int),
};
[@genType "Attribute"]
type t = {
id: int,
value: int,
dependencies: list(dependency),
};
};
module Energies = {
[@genType "PermanentEnergyLoss"]
type permanentEnergyLoss = {lost: int};
[@genType "PermanentEnergyLossAndBoughtBack"]
type permanentEnergyLossAndBoughtBack = {
lost: int,
boughtBack: int,
};
[@genType "Energies"]
type t = {
addedLifePoints: int,
addedArcaneEnergyPoints: int,
addedKarmaPoints: int,
permanentLifePoints: permanentEnergyLoss,
permanentArcaneEnergyPoints: permanentEnergyLossAndBoughtBack,
permanentKarmaPoints: permanentEnergyLossAndBoughtBack,
};
};
module ActivatableSkill = {
type value =
| Inactive
| Active(int);
[@genType "ActivatableSkillDependency"]
type dependency = {
source: Ids.activatableAndSkillId,
target: oneOrMany(int),
value,
};
[@genType "ActivatableSkill"]
type t = {
id: int,
value,
dependencies: list(dependency),
};
};
module Skill = {
[@genType "SkillDependency"]
type dependency = {
source: Ids.activatableId,
target: oneOrMany(int),
value: int,
};
[@genType "Skill"]
type t = {
id: int,
value: int,
dependencies: list(dependency),
};
};
module Item = {
[@genType "MundaneItem"]
type mundaneItem = {structurePoints: maybe(oneOrMany(int))};
[@genType "PrimaryAttributeDamageThreshold"]
type primaryAttributeDamageThreshold =
| SameAttribute(int)
| AgilityStrength(int, int)
| DifferentAttribute(int, int);
[@genType "Damage"]
type damage = {
amount: int,
sides: int,
flat: maybe(int),
};
[@genType "MeleeWeapon"]
type meleeWeapon = {
combatTechnique: int,
damage,
primaryAttributeDamageThreshold: maybe(primaryAttributeDamageThreshold),
at: maybe(int),
pa: maybe(int),
reach: maybe(int),
length: maybe(int),
structurePoints: maybe(oneOrMany(int)),
breakingPointRatingMod: maybe(int),
isParryingWeapon: bool,
isTwoHandedWeapon: bool,
isImprovisedWeapon: bool,
damaged: maybe(int),
};
[@genType "RangedWeapon"]
type rangedWeapon = {
combatTechnique: int,
damage: maybe(damage),
length: maybe(int),
range: (int, int, int),
reloadTime: oneOrMany(int),
ammunition: maybe(int),
isImprovisedWeapon: bool,
damaged: maybe(int),
};
[@genType "Armor"]
type armor = {
protection: int,
encumbrance: int,
hasAdditionalPenalties: bool,
iniMod: maybe(int),
movMod: maybe(int),
sturdinessMod: maybe(int),
armorType: int,
wear: maybe(int),
isHitZoneArmorOnly: maybe(bool),
};
[@genType "Special"]
type special =
| MundaneItem(mundaneItem)
| MeleeWeapon(meleeWeapon)
| RangedWeapon(rangedWeapon)
| CombinedWeapon(meleeWeapon, rangedWeapon)
| Armor(armor);
[@genType "Item"]
type t = {
id: int,
amount: maybe(int),
price: maybe(int),
weight: maybe(int),
template: maybe(int),
isTemplateLocked: bool,
carriedWhere: maybe(string),
special: maybe(special),
gr: int,
};
};
[@genType "HitZoneArmor"]
type hitZoneArmor = {
/**
* The hit zone armor's ID.
*/
id: int,
/**
* The name of the hit zone armor.
*/
name: string,
/**
* ID of the armor at zone *head*. Can be either a template ID or the ID of an
* armor from `items`.
*/
head: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *head*, if any. Ignores `wear` if custom armor is
* used, even if `headWear` is not defined.
*/
headWear: maybe(int),
/**
* ID of the armor at zone *left arm*. Can be either a template ID or the ID
* of an armor from `items`.
*/
leftArm: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *left arm*, if any. Ignores `wear` if custom
* armor is used, even if `leftArmWear` is not defined.
*/
leftArmWear: maybe(int),
/**
* ID of the armor at zone *right arm*. Can be either a template ID or the ID
* of an item from `items`.
*/
rightArm: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *right arm*, if any. Ignores `wear` if custom
* armor is used, even if `rightArmWear` is not defined.
*/
rightArmWear: maybe(int),
/**
* ID of the armor at zone *torso*. Can be either a template ID or the ID of
* an armor from `items`.
*/
torso: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *torso*, if any. Ignores `wear` if custom armor
* is used, even if `torsoWear` is not defined.
*/
torsoWear: maybe(int),
/**
* ID of the armor at zone *left leg*. Can be either a template ID or the ID
* of an armor from `items`.
*/
leftLeg: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *left leg*, if any. Ignores `wear` if custom
* armor is used, even if `leftLegWear` is not defined.
*/
leftLegWear: maybe(int),
/**
* ID of the armor at zone *right leg*. Can be either a template ID or the ID
* of an armor from `items`.
*/
rightLeg: maybe(Ids.hitZoneArmorZoneItemId),
/**
* The level of wear at zone *right leg*, if any. Ignores `wear` if custom
* armor is used, even if `rightLegWear` is not defined.
*/
rightLegWear: maybe(int),
};
[@genType "Purse"]
type purse = {
ducats: int,
silverthalers: int,
halers: int,
kreutzers: int,
};
[@genType "Pet"]
type pet = {
id: int,
name: string,
avatar: maybe(string),
size: maybe(string),
[@bs.as "type"]
type_: maybe(string),
attack: maybe(string),
dp: maybe(string),
reach: maybe(string),
actions: maybe(string),
skills: maybe(string),
abilities: maybe(string),
notes: maybe(string),
spentAp: maybe(string),
totalAp: maybe(string),
cou: maybe(string),
sgc: maybe(string),
int: maybe(string),
cha: maybe(string),
dex: maybe(string),
agi: maybe(string),
con: maybe(string),
str: maybe(string),
lp: maybe(string),
ae: maybe(string),
spi: maybe(string),
tou: maybe(string),
pro: maybe(string),
ini: maybe(string),
mov: maybe(string),
at: maybe(string),
pa: maybe(string),
};
module Pact = {
[@genType "PactDomain"]
type domain =
| Predefined(int)
| Custom(string);
[@genType "Pact"]
type t = {
category: int,
level: int,
[@bs.as "type"]
type_: int,
domain,
name: string,
};
};
[@genType "StyleDependency"]
type styleDependency = {
/**
* The extended special ability or list of available special abilities.
*/
id: oneOrMany(int),
/**
* If a ability meets a given id, then `Just id`, otherwise `Nothing`.
*/
active: maybe(int),
/**
* The style's id.
*/
origin: int,
};
module TransferUnfamiliar = {
[@genType "TransferUnfamiliarId"]
type id =
| Spell(int)
| Spells
| LiturgicalChant(int)
| LiturgicalChants;
[@genType "TransferUnfamiliar"]
type t = {
id,
srcId: int,
};
};
[@genType "Hero"]
type t = {
name: string,
dateCreated: Js.Date.t,
dateModified: Js.Date.t,
adventurePointsTotal: int,
experienceLevel: int,
sex,
phase,
locale: string,
avatar: maybe(string),
race: maybe(int),
raceVariant: maybe(baseOrWithVariant),
culture: maybe(int),
isCulturalPackageActive: bool,
profession: maybe(baseOrWithVariant),
professionName: maybe(string),
rules: Rules.t,
personalData,
advantages: IntMap.t(Activatable.t),
disadvantages: IntMap.t(Activatable.t),
specialAbilities: IntMap.t(Activatable.t),
attributes: IntMap.t(Attribute.t),
attributeAdjustmentSelected: int,
energies: Energies.t,
skills: IntMap.t(Skill.t),
combatTechniques: IntMap.t(Skill.t),
spells: IntMap.t(ActivatableSkill.t),
liturgicalChants: IntMap.t(ActivatableSkill.t),
cantrips: IntSet.t,
blessings: IntSet.t,
items: list(Item.t),
hitZoneArmors: list(hitZoneArmor),
purse,
pets: list(pet),
pact: maybe(Pact.t),
combatStyleDependencies: list(styleDependency),
magicalStyleDependencies: list(styleDependency),
blessedStyleDependencies: list(styleDependency),
skillStyleDependencies: list(styleDependency),
socialStatusDependencies: list(int),
transferredUnfamiliarSpells: list(TransferUnfamiliar.t),
};
-125
View File
@@ -1,125 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var SourceRef;
var Erratum;
var Prerequisites;
var Skill;
var SelectOption;
var Advantage;
var AnimistForce;
var Attribute;
var BlessedTradition;
var Blessing;
var Cantrip;
var CombatTechnique;
var Condition;
var Culture;
var Curse;
var DerivedCharacteristic;
var Disadvantage;
var DominationRitual;
var ElvenMagicalSong;
var EquipmentPackage;
var ExperienceLevel;
var FocusRule;
var GeodeRitual;
var Item;
var LiturgicalChant;
var MagicalDance;
var MagicalMelody;
var MagicalTradition;
var Messages;
var OptionalRule;
var PactCategory;
var Patron;
var Profession;
var Publication;
var Race;
var RogueSpell;
var SpecialAbility;
var Spell;
var State;
var ZibiljaRitual;
exports.SourceRef = SourceRef;
exports.Erratum = Erratum;
exports.Prerequisites = Prerequisites;
exports.Skill = Skill;
exports.SelectOption = SelectOption;
exports.Advantage = Advantage;
exports.AnimistForce = AnimistForce;
exports.Attribute = Attribute;
exports.BlessedTradition = BlessedTradition;
exports.Blessing = Blessing;
exports.Cantrip = Cantrip;
exports.CombatTechnique = CombatTechnique;
exports.Condition = Condition;
exports.Culture = Culture;
exports.Curse = Curse;
exports.DerivedCharacteristic = DerivedCharacteristic;
exports.Disadvantage = Disadvantage;
exports.DominationRitual = DominationRitual;
exports.ElvenMagicalSong = ElvenMagicalSong;
exports.EquipmentPackage = EquipmentPackage;
exports.ExperienceLevel = ExperienceLevel;
exports.FocusRule = FocusRule;
exports.GeodeRitual = GeodeRitual;
exports.Item = Item;
exports.LiturgicalChant = LiturgicalChant;
exports.MagicalDance = MagicalDance;
exports.MagicalMelody = MagicalMelody;
exports.MagicalTradition = MagicalTradition;
exports.Messages = Messages;
exports.OptionalRule = OptionalRule;
exports.PactCategory = PactCategory;
exports.Patron = Patron;
exports.Profession = Profession;
exports.Publication = Publication;
exports.Race = Race;
exports.RogueSpell = RogueSpell;
exports.SpecialAbility = SpecialAbility;
exports.Spell = Spell;
exports.State = State;
exports.ZibiljaRitual = ZibiljaRitual;
/* No side effect */
-104
View File
@@ -1,104 +0,0 @@
module SourceRef = Static_SourceRef;
module Erratum = Static_Erratum;
module Prerequisites = Static_Prerequisites;
module Skill = Static_Skill;
module SelectOption = Static_SelectOption;
module Advantage = Static_Advantage;
module AnimistForce = Static_AnimistForce;
module Attribute = Static_Attribute;
module BlessedTradition = Static_BlessedTradition;
module Blessing = Static_Blessing;
module Cantrip = Static_Cantrip;
module CombatTechnique = Static_CombatTechnique;
module Condition = Static_Condition;
module Culture = Static_Culture;
module Curse = Static_Curse;
module DerivedCharacteristic = Static_DerivedCharacteristic;
module Disadvantage = Static_Disadvantage;
module DominationRitual = Static_DominationRitual;
module ElvenMagicalSong = Static_ElvenMagicalSong;
module EquipmentPackage = Static_EquipmentPackage;
module ExperienceLevel = Static_ExperienceLevel;
module FocusRule = Static_FocusRule;
module GeodeRitual = Static_GeodeRitual;
module Item = Static_Item;
module LiturgicalChant = Static_LiturgicalChant;
module MagicalDance = Static_MagicalDance;
module MagicalMelody = Static_MagicalMelody;
module MagicalTradition = Static_MagicalTradition;
module Messages = Static_Messages;
module OptionalRule = Static_OptionalRule;
module PactCategory = Static_Pact;
module Patron = Static_Patron;
module Profession = Static_Profession;
module Publication = Static_Publication;
module Race = Static_Race;
module RogueSpell = Static_RogueSpell;
module SpecialAbility = Static_SpecialAbility;
module Spell = Static_Spell;
module State = Static_State;
module ZibiljaRitual = Static_ZibiljaRitual;
type t = {
advantages: IntMap.t(Advantage.t),
animistForces: IntMap.t(AnimistForce.t),
arcaneBardTraditions: IntMap.t(string),
arcaneDancerTraditions: IntMap.t(string),
armorTypes: IntMap.t(string),
aspects: IntMap.t(string),
attributes: IntMap.t(Attribute.t),
blessedTraditions: IntMap.t(BlessedTradition.t),
blessings: IntMap.t(Blessing.t),
brews: IntMap.t(string),
cantrips: IntMap.t(Cantrip.t),
combatSpecialAbilityGroups: IntMap.t(string),
combatTechniqueGroups: IntMap.t(string),
combatTechniques: IntMap.t(CombatTechnique.t),
conditions: IntMap.t(Condition.t),
cultures: IntMap.t(Culture.t),
curses: IntMap.t(Curse.t),
derivedCharacteristics: StrMap.t(DerivedCharacteristic.t),
disadvantages: IntMap.t(Disadvantage.t),
dominationRituals: IntMap.t(DominationRitual.t),
elvenMagicalSongs: IntMap.t(ElvenMagicalSong.t),
items: IntMap.t(Item.t),
equipmentGroups: IntMap.t(string),
equipmentPackages: IntMap.t(EquipmentPackage.t),
experienceLevels: IntMap.t(ExperienceLevel.t),
eyeColors: IntMap.t(string),
focusRules: IntMap.t(FocusRule.t),
geodeRituals: IntMap.t(GeodeRitual.t),
hairColors: IntMap.t(string),
liturgicalChantEnhancements: IntMap.t(SelectOption.t),
liturgicalChantGroups: IntMap.t(string),
liturgicalChants: IntMap.t(LiturgicalChant.t),
magicalDances: IntMap.t(MagicalDance.t),
magicalMelodies: IntMap.t(MagicalMelody.t),
magicalTraditions: IntMap.t(MagicalTradition.t),
messages: Messages.t,
optionalRules: IntMap.t(OptionalRule.t),
pacts: IntMap.t(PactCategory.t),
professions: IntMap.t(Profession.t),
properties: IntMap.t(string),
publications: StrMap.t(Publication.t),
races: IntMap.t(Race.t),
reaches: IntMap.t(string),
rogueSpells: IntMap.t(RogueSpell.t),
skillGroups: IntMap.t(Skill.group),
skills: IntMap.t(Skill.t),
socialStatuses: IntMap.t(string),
specialAbilities: IntMap.t(SpecialAbility.t),
specialAbilityGroups: IntMap.t(string),
spellEnhancements: IntMap.t(SelectOption.t),
spellGroups: IntMap.t(string),
spells: IntMap.t(Spell.t),
states: IntMap.t(State.t),
subjects: IntMap.t(string),
tribes: IntMap.t(string),
zibiljaRituals: IntMap.t(ZibiljaRitual.t),
};
type activatable =
| Advantage(Advantage.t)
| Disadvantage(Disadvantage.t)
| SpecialAbility(SpecialAbility.t);
-135
View File
@@ -1,135 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
var Static_SelectOption$OptolithClient = require("./Static_SelectOption.bs.js");
var Static_Prerequisites$OptolithClient = require("./Static_Prerequisites.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
nameInWiki: JsonStrict$OptolithClient.optionalField("nameInWiki", Json_decode.string, json),
rules: Json_decode.field("rules", Json_decode.string, json),
selectOptions: JsonStrict$OptolithClient.optionalField("selectOptions", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.tL10n, param);
}), json),
input: JsonStrict$OptolithClient.optionalField("input", Json_decode.string, json),
range: JsonStrict$OptolithClient.optionalField("range", Json_decode.string, json),
actions: JsonStrict$OptolithClient.optionalField("actions", Json_decode.string, json),
prerequisites: JsonStrict$OptolithClient.optionalField("prerequisites", Json_decode.string, json),
prerequisitesIndex: JsonStrict$OptolithClient.optionalField("prerequisitesIndex", Static_Prerequisites$OptolithClient.Decode.tIndexWithLevelL10n, json),
prerequisitesStart: JsonStrict$OptolithClient.optionalField("prerequisitesStart", Json_decode.string, json),
prerequisitesEnd: JsonStrict$OptolithClient.optionalField("prerequisitesEnd", Json_decode.string, json),
apValue: JsonStrict$OptolithClient.optionalField("apValue", Json_decode.string, json),
apValueAppend: JsonStrict$OptolithClient.optionalField("apValueAppend", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function partial_arg_0(json) {
return {
TAG: /* Flat */0,
_0: Json_decode.$$int(json)
};
}
var partial_arg_1 = {
hd: (function (json) {
return {
TAG: /* PerLevel */1,
_0: Json_decode.list(Json_decode.$$int, json)
};
}),
tl: /* [] */0
};
var partial_arg = {
hd: partial_arg_0,
tl: partial_arg_1
};
function cost(param) {
return Json_decode.oneOf(partial_arg, param);
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
cost: JsonStrict$OptolithClient.optionalField("cost", cost, json),
noMaxAPInfluence: JsonStrict$OptolithClient.optionalField("noMaxAPInfluence", Json_decode.bool, json),
isExclusiveToArcaneSpellworks: JsonStrict$OptolithClient.optionalField("isExclusiveToArcaneSpellworks", Json_decode.bool, json),
levels: JsonStrict$OptolithClient.optionalField("levels", Json_decode.$$int, json),
max: JsonStrict$OptolithClient.optionalField("max", Json_decode.$$int, json),
selectOptionCategories: JsonStrict$OptolithClient.optionalField("selectOptionCategories", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.categoryWithGroups, param);
}), json),
selectOptions: JsonStrict$OptolithClient.optionalField("selectOptions", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.tUniv, param);
}), json),
prerequisites: Static_Prerequisites$OptolithClient.Decode.tWithLevelDisAdv(json),
prerequisitesIndex: JsonStrict$OptolithClient.optionalField("prerequisitesIndex", Static_Prerequisites$OptolithClient.Decode.tIndexWithLevelUniv, json),
gr: Json_decode.field("gr", Json_decode.$$int, json)
};
}
function t(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
nameInWiki: l10n.nameInWiki,
noMaxAPInfluence: Maybe$OptolithClient.fromMaybe(false, univ.noMaxAPInfluence),
isExclusiveToArcaneSpellworks: Maybe$OptolithClient.fromMaybe(false, univ.isExclusiveToArcaneSpellworks),
levels: univ.levels,
max: univ.max,
rules: l10n.rules,
selectOptions: Static_SelectOption$OptolithClient.Decode.mergeSelectOptions(l10n.selectOptions, univ.selectOptions, Static_SelectOption$OptolithClient.Decode.resolveCategories(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, univ.selectOptionCategories)),
input: l10n.input,
range: l10n.range,
actions: l10n.actions,
prerequisites: univ.prerequisites,
prerequisitesText: l10n.prerequisites,
prerequisitesTextIndex: Static_Prerequisites$OptolithClient.Decode.tIndexWithLevel(univ.prerequisitesIndex, l10n.prerequisitesIndex),
prerequisitesTextStart: l10n.prerequisitesStart,
prerequisitesTextEnd: l10n.prerequisitesEnd,
apValue: univ.cost,
apValueText: l10n.apValue,
apValueTextAppend: l10n.apValueAppend,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, (function (param, param$1) {
return t(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, param, param$1);
}), (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.advantagesUniv), Json_decode.list(tL10n, yamlData.advantagesL10n)));
}
var Decode = {
tL10n: tL10n,
cost: cost,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-219
View File
@@ -1,219 +0,0 @@
type cost =
| Flat(int)
| PerLevel(list(int));
type t = {
id: int,
name: string,
nameInWiki: Maybe.t(string),
noMaxAPInfluence: bool,
isExclusiveToArcaneSpellworks: bool,
levels: Maybe.t(int),
max: Maybe.t(int),
rules: string,
selectOptions: Static_SelectOption.map,
input: Maybe.t(string),
range: Maybe.t(string),
actions: Maybe.t(string),
prerequisites: Static_Prerequisites.tWithLevelDisAdv,
prerequisitesText: Maybe.t(string),
prerequisitesTextIndex: Static_Prerequisites.tIndexWithLevel,
prerequisitesTextStart: Maybe.t(string),
prerequisitesTextEnd: Maybe.t(string),
apValue: Maybe.t(cost),
apValueText: Maybe.t(string),
apValueTextAppend: Maybe.t(string),
gr: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
nameInWiki: Maybe.t(string),
rules: string,
selectOptions: Maybe.t(list(Static_SelectOption.Decode.tL10n)),
input: Maybe.t(string),
range: Maybe.t(string),
actions: Maybe.t(string),
prerequisites: Maybe.t(string),
prerequisitesIndex:
Maybe.t(Static_Prerequisites.Decode.tIndexWithLevelL10n),
prerequisitesStart: Maybe.t(string),
prerequisitesEnd: Maybe.t(string),
apValue: Maybe.t(string),
apValueAppend: Maybe.t(string),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
nameInWiki: json |> optionalField("nameInWiki", string),
rules: json |> field("rules", string),
selectOptions:
json
|> optionalField(
"selectOptions",
list(Static_SelectOption.Decode.tL10n),
),
input: json |> optionalField("input", string),
range: json |> optionalField("range", string),
actions: json |> optionalField("actions", string),
prerequisites: json |> optionalField("prerequisites", string),
prerequisitesIndex:
json
|> optionalField(
"prerequisitesIndex",
Static_Prerequisites.Decode.tIndexWithLevelL10n,
),
prerequisitesStart: json |> optionalField("prerequisitesStart", string),
prerequisitesEnd: json |> optionalField("prerequisitesEnd", string),
apValue: json |> optionalField("apValue", string),
apValueAppend: json |> optionalField("apValueAppend", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
let cost =
oneOf([
json => json |> int |> (x => Flat(x)),
json => json |> list(int) |> (x => PerLevel(x)),
]);
type tUniv = {
id: int,
cost: Maybe.t(cost),
noMaxAPInfluence: Maybe.t(bool),
isExclusiveToArcaneSpellworks: Maybe.t(bool),
levels: Maybe.t(int),
max: Maybe.t(int),
selectOptionCategories:
Maybe.t(list(Static_SelectOption.Decode.categoryWithGroups)),
selectOptions: Maybe.t(list(Static_SelectOption.Decode.tUniv)),
prerequisites: Static_Prerequisites.tWithLevelDisAdv,
prerequisitesIndex:
Maybe.t(Static_Prerequisites.Decode.tIndexWithLevelUniv),
gr: int,
};
let tUniv = json => {
id: json |> field("id", int),
cost: json |> optionalField("cost", cost),
noMaxAPInfluence: json |> optionalField("noMaxAPInfluence", bool),
isExclusiveToArcaneSpellworks:
json |> optionalField("isExclusiveToArcaneSpellworks", bool),
levels: json |> optionalField("levels", int),
max: json |> optionalField("max", int),
selectOptionCategories:
json
|> optionalField(
"selectOptionCategories",
list(Static_SelectOption.Decode.categoryWithGroups),
),
selectOptions:
json
|> optionalField(
"selectOptions",
list(Static_SelectOption.Decode.tUniv),
),
prerequisites: json |> Static_Prerequisites.Decode.tWithLevelDisAdv,
prerequisitesIndex:
json
|> optionalField(
"prerequisitesIndex",
Static_Prerequisites.Decode.tIndexWithLevelUniv,
),
gr: json |> field("gr", int),
};
let t =
(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
univ,
l10n,
) => (
univ.id,
{
id: univ.id,
name: l10n.name,
nameInWiki: l10n.nameInWiki,
noMaxAPInfluence: univ.noMaxAPInfluence |> Maybe.fromMaybe(false),
isExclusiveToArcaneSpellworks:
univ.isExclusiveToArcaneSpellworks |> Maybe.fromMaybe(false),
levels: univ.levels,
max: univ.max,
rules: l10n.rules,
selectOptions:
univ.selectOptionCategories
|> Static_SelectOption.Decode.resolveCategories(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
)
|> Static_SelectOption.Decode.mergeSelectOptions(
l10n.selectOptions,
univ.selectOptions,
),
input: l10n.input,
range: l10n.range,
actions: l10n.actions,
prerequisites: univ.prerequisites,
prerequisitesText: l10n.prerequisites,
prerequisitesTextIndex:
Static_Prerequisites.Decode.tIndexWithLevel(
univ.prerequisitesIndex,
l10n.prerequisitesIndex,
),
prerequisitesTextStart: l10n.prerequisitesStart,
prerequisitesTextEnd: l10n.prerequisitesEnd,
apValue: univ.cost,
apValueText: l10n.apValue,
apValueTextAppend: l10n.apValueAppend,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata,
},
);
let all =
(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
yamlData: Yaml_Raw.yamlData,
) =>
Yaml_Zip.zipBy(
Int.show,
t(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
),
x => x.id,
x => x.id,
yamlData.advantagesUniv |> list(tUniv),
yamlData.advantagesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-86
View File
@@ -1,86 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var IC$OptolithClient = require("../Utilities/IC.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
aeCost: Json_decode.field("aeCost", Json_decode.string, json),
aeCostShort: Json_decode.field("aeCostShort", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
durationShort: Json_decode.field("durationShort", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
property: Json_decode.field("property", Json_decode.$$int, json),
tribes: Json_decode.field("tribes", (function (param) {
return JsonStrict$OptolithClient.maybe((function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), param);
}), json),
ic: Json_decode.field("ic", IC$OptolithClient.Decode.t, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
tribes: Maybe$OptolithClient.fromMaybe(/* [] */0, univ.tribes),
property: univ.property,
ic: univ.ic,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.animistForcesUniv), Json_decode.list(tL10n, yamlData.animistForcesL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-94
View File
@@ -1,94 +0,0 @@
type t = {
id: int,
name: string,
check: (int, int, int),
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
tribes: list(int),
property: int,
ic: IC.t,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
aeCost: json |> field("aeCost", string),
aeCostShort: json |> field("aeCostShort", string),
duration: json |> field("duration", string),
durationShort: json |> field("durationShort", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
property: int,
tribes: Maybe.t(list(int)),
ic: IC.t,
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
property: json |> field("property", int),
tribes: json |> field("tribes", maybe(list(int))),
ic: json |> field("ic", IC.Decode.t),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
tribes: univ.tribes |> Maybe.fromMaybe([]),
property: univ.property,
ic: univ.ic,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.animistForcesUniv |> list(tUniv),
yamlData.animistForcesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-32
View File
@@ -1,32 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var ListH$OptolithClient = require("../../Data/ListH.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
function t(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
short: Json_decode.field("short", Json_decode.string, json)
};
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, ListH$OptolithClient.map((function (x) {
return [
x.id,
x
];
}), Json_decode.list(t, yamlData.attributesL10n)));
}
var Decode = {
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-21
View File
@@ -1,21 +0,0 @@
type t = {
id: int,
name: string,
short: string,
};
module Decode = {
open Json.Decode;
let t = json => {
id: json |> field("id", int),
name: json |> field("name", string),
short: json |> field("short", string),
};
let all = (yamlData: Yaml_Raw.yamlData) =>
yamlData.attributesL10n
|> list(t)
|> ListH.map(x => (x.id, x))
|> IntMap.fromList;
};
@@ -1,58 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
numId: Json_decode.field("numId", Json_decode.$$int, json),
primary: Json_decode.field("primary", Json_decode.$$int, json),
aspects: JsonStrict$OptolithClient.optionalField("aspects", (function (param) {
return Json_decode.pair(Json_decode.$$int, Json_decode.$$int, param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
numId: univ.numId,
name: l10n.name,
primary: univ.primary,
aspects: univ.aspects
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.blessedTraditionsUniv), Json_decode.list(tL10n, yamlData.blessedTraditionsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-58
View File
@@ -1,58 +0,0 @@
type t = {
id: int,
numId: int,
name: string,
primary: int,
aspects: Maybe.t((int, int)),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
};
type tUniv = {
id: int,
numId: int,
primary: int,
aspects: Maybe.t((int, int)),
};
let tUniv = json => {
id: json |> field("id", int),
numId: json |> field("numId", int),
primary: json |> field("primary", int),
aspects: json |> optionalField("aspects", pair(int, int)),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
numId: univ.numId,
name: l10n.name,
primary: univ.primary,
aspects: univ.aspects,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.blessedTraditionsUniv |> list(tUniv),
yamlData.blessedTraditionsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-68
View File
@@ -1,68 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var IntSet$OptolithClient = require("../../Data/IntSet.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
range: Json_decode.field("range", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
target: Json_decode.field("target", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
traditions: Json_decode.field("traditions", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
effect: l10n.effect,
range: l10n.range,
duration: l10n.duration,
target: l10n.target,
traditions: Curry._1(IntSet$OptolithClient.fromList, univ.traditions),
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.blessingsUniv), Json_decode.list(tL10n, yamlData.blessingsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-73
View File
@@ -1,73 +0,0 @@
type t = {
id: int,
name: string,
effect: string,
range: string,
duration: string,
target: string,
traditions: IntSet.t,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
type tL10n = {
id: int,
name: string,
effect: string,
range: string,
duration: string,
target: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
range: json |> field("range", string),
duration: json |> field("duration", string),
target: json |> field("target", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
traditions: list(int),
};
let tUniv = json => {
id: json |> field("id", int),
traditions: json |> field("traditions", list(int)),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
effect: l10n.effect,
range: l10n.range,
duration: l10n.duration,
target: l10n.target,
traditions: IntSet.fromList(univ.traditions),
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.blessingsUniv |> list(tUniv),
yamlData.blessingsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-76
View File
@@ -1,76 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var IntSet$OptolithClient = require("../../Data/IntSet.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
var Static_Prerequisites$OptolithClient = require("./Static_Prerequisites.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
range: Json_decode.field("range", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
target: Json_decode.field("target", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
property: Json_decode.field("property", Json_decode.$$int, json),
traditions: Json_decode.field("traditions", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
activatablePrerequisites: JsonStrict$OptolithClient.optionalField("activatablePrerequisites", (function (param) {
return Json_decode.list(Static_Prerequisites$OptolithClient.Decode.activatable, param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
effect: l10n.effect,
range: l10n.range,
duration: l10n.duration,
target: l10n.target,
property: univ.property,
traditions: Curry._1(IntSet$OptolithClient.fromList, univ.traditions),
activatablePrerequisites: univ.activatablePrerequisites,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.cantripsUniv), Json_decode.list(tL10n, yamlData.cantripsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-88
View File
@@ -1,88 +0,0 @@
type t = {
id: int,
name: string,
effect: string,
range: string,
duration: string,
target: string,
property: int,
traditions: IntSet.t,
activatablePrerequisites: Maybe.t(list(Static_Prerequisites.activatable)),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
range: string,
duration: string,
target: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
range: json |> field("range", string),
duration: json |> field("duration", string),
target: json |> field("target", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
property: int,
traditions: list(int),
activatablePrerequisites:
Maybe.t(list(Static_Prerequisites.activatable)),
};
let tUniv = json => {
id: json |> field("id", int),
property: json |> field("property", int),
traditions: json |> field("traditions", list(int)),
activatablePrerequisites:
json
|> optionalField(
"activatablePrerequisites",
list(Static_Prerequisites.Decode.activatable),
),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
effect: l10n.effect,
range: l10n.range,
duration: l10n.duration,
target: l10n.target,
property: univ.property,
traditions: IntSet.fromList(univ.traditions),
activatablePrerequisites: univ.activatablePrerequisites,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.cantripsUniv |> list(tUniv),
yamlData.cantripsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
@@ -1,72 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var IC$OptolithClient = require("../Utilities/IC.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
special: JsonStrict$OptolithClient.optionalField("special", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
ic: Json_decode.field("ic", IC$OptolithClient.Decode.t, json),
primary: Json_decode.field("primary", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
bpr: Json_decode.field("bpr", Json_decode.$$int, json),
hasNoParry: JsonStrict$OptolithClient.optionalField("hasNoParry", Json_decode.bool, json),
gr: Json_decode.field("gr", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
ic: univ.ic,
primary: univ.primary,
special: l10n.special,
hasNoParry: Maybe$OptolithClient.fromMaybe(false, univ.hasNoParry),
bpr: univ.bpr,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.combatTechniquesUniv), Json_decode.list(tL10n, yamlData.combatTechniquesL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-78
View File
@@ -1,78 +0,0 @@
type t = {
id: int,
name: string,
ic: IC.t,
primary: list(int),
special: Maybe.t(string),
hasNoParry: bool,
bpr: int,
gr: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
special: Maybe.t(string),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
special: json |> optionalField("special", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
ic: IC.t,
primary: list(int),
bpr: int,
hasNoParry: Maybe.t(bool),
gr: int,
};
let tUniv = json => {
id: json |> field("id", int),
ic: json |> field("ic", IC.Decode.t),
primary: json |> field("primary", list(int)),
bpr: json |> field("bpr", int),
hasNoParry: json |> optionalField("hasNoParry", bool),
gr: json |> field("gr", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
ic: univ.ic,
primary: univ.primary,
special: l10n.special,
hasNoParry: Maybe.fromMaybe(false, univ.hasNoParry),
bpr: univ.bpr,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.combatTechniquesUniv |> list(tUniv),
yamlData.combatTechniquesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-44
View File
@@ -1,44 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var ListH$OptolithClient = require("../../Data/ListH.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function t(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
description: JsonStrict$OptolithClient.optionalField("description", Json_decode.string, json),
levelColumnDescription: JsonStrict$OptolithClient.optionalField("levelDescription", Json_decode.string, json),
levelDescriptions: [
Json_decode.field("level1", Json_decode.string, json),
Json_decode.field("level2", Json_decode.string, json),
Json_decode.field("level3", Json_decode.string, json),
Json_decode.field("level4", Json_decode.string, json)
],
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, ListH$OptolithClient.map((function (x) {
return [
x.id,
x
];
}), Json_decode.list(t, yamlData.conditionsL10n)));
}
var Decode = {
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-35
View File
@@ -1,35 +0,0 @@
type t = {
id: int,
name: string,
description: Maybe.t(string),
levelColumnDescription: Maybe.t(string),
levelDescriptions: (string, string, string, string),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
let t = json => {
id: json |> field("id", int),
name: json |> field("name", string),
description: json |> optionalField("description", string),
levelDescriptions: (
json |> field("level1", string),
json |> field("level2", string),
json |> field("level3", string),
json |> field("level4", string),
),
levelColumnDescription: json |> optionalField("levelDescription", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
let all = (yamlData: Yaml_Raw.yamlData) =>
yamlData.conditionsL10n
|> list(t)
|> ListH.map(x => (x.id, x))
|> IntMap.fromList;
};
-155
View File
@@ -1,155 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
areaKnowledge: Json_decode.field("areaKnowledge", Json_decode.string, json),
areaKnowledgeShort: Json_decode.field("areaKnowledgeShort", Json_decode.string, json),
commonMundaneProfessions: JsonStrict$OptolithClient.optionalField("commonMundaneProfessions", Json_decode.string, json),
commonMagicalProfessions: JsonStrict$OptolithClient.optionalField("commonMagicalProfessions", Json_decode.string, json),
commonBlessedProfessions: JsonStrict$OptolithClient.optionalField("commonBlessedProfessions", Json_decode.string, json),
commonAdvantages: JsonStrict$OptolithClient.optionalField("commonAdvantages", Json_decode.string, json),
commonDisadvantages: JsonStrict$OptolithClient.optionalField("commonDisadvantages", Json_decode.string, json),
uncommonAdvantages: JsonStrict$OptolithClient.optionalField("uncommonAdvantages", Json_decode.string, json),
uncommonDisadvantages: JsonStrict$OptolithClient.optionalField("uncommonDisadvantages", Json_decode.string, json),
commonNames: Json_decode.field("commonNames", Json_decode.string, json)
};
}
function frequencyException(json) {
var str = Json_decode.field("scope", Json_decode.string, json);
switch (str) {
case "Group" :
return {
TAG: /* Group */1,
_0: Json_decode.field("value", Json_decode.$$int, json)
};
case "Single" :
return {
TAG: /* Single */0,
_0: Json_decode.field("value", Json_decode.$$int, json)
};
default:
throw {
RE_EXN_ID: Json_decode.DecodeError,
_1: "Unknown frequency exception: " + str,
Error: new Error()
};
}
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
languages: Json_decode.field("languages", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
literacy: JsonStrict$OptolithClient.optionalField("literacy", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
social: Json_decode.field("social", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
commonMundaneProfessionsAll: Json_decode.field("commonMundaneProfessionsAll", Json_decode.bool, json),
commonMundaneProfessionsExceptions: JsonStrict$OptolithClient.optionalField("commonMundaneProfessionsExceptions", (function (param) {
return Json_decode.list(frequencyException, param);
}), json),
commonMagicalProfessionsAll: Json_decode.field("commonMagicalProfessionsAll", Json_decode.bool, json),
commonMagicalProfessionsExceptions: JsonStrict$OptolithClient.optionalField("commonMagicalProfessionsExceptions", (function (param) {
return Json_decode.list(frequencyException, param);
}), json),
commonBlessedProfessionsAll: Json_decode.field("commonBlessedProfessionsAll", Json_decode.bool, json),
commonBlessedProfessionsExceptions: JsonStrict$OptolithClient.optionalField("commonBlessedProfessionsExceptions", (function (param) {
return Json_decode.list(frequencyException, param);
}), json),
commonAdvantages: JsonStrict$OptolithClient.optionalField("commonAdvantages", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
commonDisadvantages: JsonStrict$OptolithClient.optionalField("commonDisadvantages", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
uncommonAdvantages: JsonStrict$OptolithClient.optionalField("uncommonAdvantages", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
uncommonDisadvantages: JsonStrict$OptolithClient.optionalField("uncommonDisadvantages", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
commonSkills: Json_decode.field("commonSkills", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
uncommonSkills: JsonStrict$OptolithClient.optionalField("uncommonSkills", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
culturalPackageCost: Json_decode.field("culturalPackageCost", Json_decode.$$int, json),
culturalPackageSkills: Json_decode.field("culturalPackageSkills", (function (param) {
return Json_decode.list((function (param) {
return Json_decode.pair(Json_decode.$$int, Json_decode.$$int, param);
}), param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
language: univ.languages,
script: univ.literacy,
areaKnowledge: l10n.areaKnowledge,
areaKnowledgeShort: l10n.areaKnowledgeShort,
socialStatus: univ.social,
commonMundaneProfessionsAll: univ.commonMundaneProfessionsAll,
commonMundaneProfessionsExceptions: univ.commonMundaneProfessionsExceptions,
commonMundaneProfessionsText: l10n.commonMundaneProfessions,
commonMagicProfessionsAll: univ.commonMagicalProfessionsAll,
commonMagicProfessionsExceptions: univ.commonMagicalProfessionsExceptions,
commonMagicProfessionsText: l10n.commonMagicalProfessions,
commonBlessedProfessionsAll: univ.commonBlessedProfessionsAll,
commonBlessedProfessionsExceptions: univ.commonBlessedProfessionsExceptions,
commonBlessedProfessionsText: l10n.commonBlessedProfessions,
commonAdvantages: univ.commonAdvantages,
commonAdvantagesText: l10n.commonAdvantages,
commonDisadvantages: univ.commonDisadvantages,
commonDisadvantagesText: l10n.commonDisadvantages,
uncommonAdvantages: univ.uncommonAdvantages,
uncommonAdvantagesText: l10n.uncommonAdvantages,
uncommonDisadvantages: univ.uncommonDisadvantages,
uncommonDisadvantagesText: l10n.uncommonDisadvantages,
commonSkills: univ.commonSkills,
uncommonSkills: univ.uncommonSkills,
commonNames: l10n.commonNames,
culturalPackageCost: univ.culturalPackageCost,
culturalPackageSkills: Curry._1(IntMap$OptolithClient.fromList, univ.culturalPackageSkills)
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.culturesUniv), Json_decode.list(tL10n, yamlData.culturesL10n)));
}
var Decode = {
tL10n: tL10n,
frequencyException: frequencyException,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-199
View File
@@ -1,199 +0,0 @@
type frequencyException =
| Single(int)
| Group(int);
type t = {
id: int,
name: string,
language: list(int),
script: Maybe.t(list(int)),
areaKnowledge: string,
areaKnowledgeShort: string,
socialStatus: list(int),
commonMundaneProfessionsAll: bool,
commonMundaneProfessionsExceptions: Maybe.t(list(frequencyException)),
commonMundaneProfessionsText: Maybe.t(string),
commonMagicProfessionsAll: bool,
commonMagicProfessionsExceptions: Maybe.t(list(frequencyException)),
commonMagicProfessionsText: Maybe.t(string),
commonBlessedProfessionsAll: bool,
commonBlessedProfessionsExceptions: Maybe.t(list(frequencyException)),
commonBlessedProfessionsText: Maybe.t(string),
commonAdvantages: Maybe.t(list(int)),
commonAdvantagesText: Maybe.t(string),
commonDisadvantages: Maybe.t(list(int)),
commonDisadvantagesText: Maybe.t(string),
uncommonAdvantages: Maybe.t(list(int)),
uncommonAdvantagesText: Maybe.t(string),
uncommonDisadvantages: Maybe.t(list(int)),
uncommonDisadvantagesText: Maybe.t(string),
commonSkills: list(int),
uncommonSkills: Maybe.t(list(int)),
commonNames: string,
culturalPackageCost: int,
culturalPackageSkills: IntMap.t(int),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
areaKnowledge: string,
areaKnowledgeShort: string,
commonMundaneProfessions: Maybe.t(string),
commonMagicalProfessions: Maybe.t(string),
commonBlessedProfessions: Maybe.t(string),
commonAdvantages: Maybe.t(string),
commonDisadvantages: Maybe.t(string),
uncommonAdvantages: Maybe.t(string),
uncommonDisadvantages: Maybe.t(string),
commonNames: string,
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
areaKnowledge: json |> field("areaKnowledge", string),
areaKnowledgeShort: json |> field("areaKnowledgeShort", string),
commonMundaneProfessions:
json |> optionalField("commonMundaneProfessions", string),
commonMagicalProfessions:
json |> optionalField("commonMagicalProfessions", string),
commonBlessedProfessions:
json |> optionalField("commonBlessedProfessions", string),
commonAdvantages: json |> optionalField("commonAdvantages", string),
commonDisadvantages: json |> optionalField("commonDisadvantages", string),
uncommonAdvantages: json |> optionalField("uncommonAdvantages", string),
uncommonDisadvantages:
json |> optionalField("uncommonDisadvantages", string),
commonNames: json |> field("commonNames", string),
};
let frequencyException = json =>
json
|> field("scope", string)
|> (
str =>
switch (str) {
| "Single" => Single(json |> field("value", int))
| "Group" => Group(json |> field("value", int))
| _ => raise(DecodeError("Unknown frequency exception: " ++ str))
}
);
type tUniv = {
id: int,
languages: list(int),
literacy: Maybe.t(list(int)),
social: list(int),
commonMundaneProfessionsAll: bool,
commonMundaneProfessionsExceptions: Maybe.t(list(frequencyException)),
commonMagicalProfessionsAll: bool,
commonMagicalProfessionsExceptions: Maybe.t(list(frequencyException)),
commonBlessedProfessionsAll: bool,
commonBlessedProfessionsExceptions: Maybe.t(list(frequencyException)),
commonAdvantages: Maybe.t(list(int)),
commonDisadvantages: Maybe.t(list(int)),
uncommonAdvantages: Maybe.t(list(int)),
uncommonDisadvantages: Maybe.t(list(int)),
commonSkills: list(int),
uncommonSkills: Maybe.t(list(int)),
culturalPackageCost: int,
culturalPackageSkills: list((int, int)),
};
let tUniv = json => {
id: json |> field("id", int),
languages: json |> field("languages", list(int)),
literacy: json |> optionalField("literacy", list(int)),
social: json |> field("social", list(int)),
commonMundaneProfessionsAll:
json |> field("commonMundaneProfessionsAll", bool),
commonMundaneProfessionsExceptions:
json
|> optionalField(
"commonMundaneProfessionsExceptions",
list(frequencyException),
),
commonMagicalProfessionsAll:
json |> field("commonMagicalProfessionsAll", bool),
commonMagicalProfessionsExceptions:
json
|> optionalField(
"commonMagicalProfessionsExceptions",
list(frequencyException),
),
commonBlessedProfessionsAll:
json |> field("commonBlessedProfessionsAll", bool),
commonBlessedProfessionsExceptions:
json
|> optionalField(
"commonBlessedProfessionsExceptions",
list(frequencyException),
),
commonAdvantages: json |> optionalField("commonAdvantages", list(int)),
commonDisadvantages:
json |> optionalField("commonDisadvantages", list(int)),
uncommonAdvantages:
json |> optionalField("uncommonAdvantages", list(int)),
uncommonDisadvantages:
json |> optionalField("uncommonDisadvantages", list(int)),
commonSkills: json |> field("commonSkills", list(int)),
uncommonSkills: json |> optionalField("uncommonSkills", list(int)),
culturalPackageCost: json |> field("culturalPackageCost", int),
culturalPackageSkills:
json |> field("culturalPackageSkills", list(pair(int, int))),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
language: univ.languages,
script: univ.literacy,
areaKnowledge: l10n.areaKnowledge,
areaKnowledgeShort: l10n.areaKnowledgeShort,
socialStatus: univ.social,
commonMundaneProfessionsAll: univ.commonMundaneProfessionsAll,
commonMundaneProfessionsExceptions:
univ.commonMundaneProfessionsExceptions,
commonMundaneProfessionsText: l10n.commonMundaneProfessions,
commonMagicProfessionsAll: univ.commonMagicalProfessionsAll,
commonMagicProfessionsExceptions:
univ.commonMagicalProfessionsExceptions,
commonMagicProfessionsText: l10n.commonMagicalProfessions,
commonBlessedProfessionsAll: univ.commonBlessedProfessionsAll,
commonBlessedProfessionsExceptions:
univ.commonBlessedProfessionsExceptions,
commonBlessedProfessionsText: l10n.commonBlessedProfessions,
commonAdvantages: univ.commonAdvantages,
commonAdvantagesText: l10n.commonAdvantages,
commonDisadvantages: univ.commonDisadvantages,
commonDisadvantagesText: l10n.commonDisadvantages,
uncommonAdvantages: univ.uncommonAdvantages,
uncommonAdvantagesText: l10n.uncommonAdvantages,
uncommonDisadvantages: univ.uncommonDisadvantages,
uncommonDisadvantagesText: l10n.uncommonDisadvantages,
commonSkills: univ.commonSkills,
uncommonSkills: univ.uncommonSkills,
commonNames: l10n.commonNames,
culturalPackageCost: univ.culturalPackageCost,
culturalPackageSkills: univ.culturalPackageSkills |> IntMap.fromList,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.culturesUniv |> list(tUniv),
yamlData.culturesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-79
View File
@@ -1,79 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var CheckModifier$OptolithClient = require("./CheckModifier.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
aeCost: Json_decode.field("aeCost", Json_decode.string, json),
aeCostShort: Json_decode.field("aeCostShort", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
durationShort: Json_decode.field("durationShort", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
checkMod: JsonStrict$OptolithClient.optionalField("checkMod", CheckModifier$OptolithClient.Decode.t, json),
property: Json_decode.field("property", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
property: univ.property,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.cursesUniv), Json_decode.list(tL10n, yamlData.cursesL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-90
View File
@@ -1,90 +0,0 @@
type t = {
id: int,
name: string,
check: (int, int, int),
checkMod: Maybe.t(CheckModifier.t),
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
property: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
aeCost: json |> field("aeCost", string),
aeCostShort: json |> field("aeCostShort", string),
duration: json |> field("duration", string),
durationShort: json |> field("durationShort", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
checkMod: Maybe.t(CheckModifier.t),
property: int,
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
checkMod: json |> optionalField("checkMod", CheckModifier.Decode.t),
property: json |> field("property", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
property: univ.property,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.cursesUniv |> list(tUniv),
yamlData.cursesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
@@ -1,36 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var ListH$OptolithClient = require("../../Data/ListH.bs.js");
var StrMap$OptolithClient = require("../../Data/StrMap.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
function t(json) {
return {
id: Json_decode.field("id", Json_decode.string, json),
name: Json_decode.field("name", Json_decode.string, json),
short: Json_decode.field("short", Json_decode.string, json),
calc: Json_decode.field("calc", Json_decode.string, json),
calcHalfPrimary: JsonStrict$OptolithClient.optionalField("calcHalfPrimary", Json_decode.string, json),
calcNoPrimary: JsonStrict$OptolithClient.optionalField("calcNoPrimary", Json_decode.string, json)
};
}
function all(yamlData) {
return Curry._1(StrMap$OptolithClient.fromList, ListH$OptolithClient.map((function (x) {
return [
x.id,
x
];
}), Json_decode.list(t, yamlData.derivedCharacteristicsL10n)));
}
var Decode = {
t: t,
all: all
};
exports.Decode = Decode;
/* StrMap-OptolithClient Not a pure module */
@@ -1,28 +0,0 @@
type t = {
id: string,
name: string,
short: string,
calc: string,
calcHalfPrimary: Maybe.t(string),
calcNoPrimary: Maybe.t(string),
};
module Decode = {
open Json.Decode;
open JsonStrict;
let t = json => {
id: json |> field("id", string),
name: json |> field("name", string),
short: json |> field("short", string),
calc: json |> field("calc", string),
calcHalfPrimary: json |> optionalField("calcHalfPrimary", string),
calcNoPrimary: json |> optionalField("calcNoPrimary", string),
};
let all = (yamlData: Yaml_Raw.yamlData) =>
yamlData.derivedCharacteristicsL10n
|> list(t)
|> ListH.map(x => (x.id, x))
|> StrMap.fromList;
};
-112
View File
@@ -1,112 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_Advantage$OptolithClient = require("./Static_Advantage.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
var Static_SelectOption$OptolithClient = require("./Static_SelectOption.bs.js");
var Static_Prerequisites$OptolithClient = require("./Static_Prerequisites.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
nameInWiki: JsonStrict$OptolithClient.optionalField("nameInWiki", Json_decode.string, json),
rules: Json_decode.field("rules", Json_decode.string, json),
selectOptions: JsonStrict$OptolithClient.optionalField("selectOptions", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.tL10n, param);
}), json),
input: JsonStrict$OptolithClient.optionalField("input", Json_decode.string, json),
range: JsonStrict$OptolithClient.optionalField("range", Json_decode.string, json),
actions: JsonStrict$OptolithClient.optionalField("actions", Json_decode.string, json),
prerequisites: JsonStrict$OptolithClient.optionalField("prerequisites", Json_decode.string, json),
prerequisitesIndex: JsonStrict$OptolithClient.optionalField("prerequisitesIndex", Static_Prerequisites$OptolithClient.Decode.tIndexWithLevelL10n, json),
prerequisitesStart: JsonStrict$OptolithClient.optionalField("prerequisitesStart", Json_decode.string, json),
prerequisitesEnd: JsonStrict$OptolithClient.optionalField("prerequisitesEnd", Json_decode.string, json),
apValue: JsonStrict$OptolithClient.optionalField("apValue", Json_decode.string, json),
apValueAppend: JsonStrict$OptolithClient.optionalField("apValueAppend", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
var cost = Static_Advantage$OptolithClient.Decode.cost;
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
cost: JsonStrict$OptolithClient.optionalField("cost", cost, json),
noMaxAPInfluence: JsonStrict$OptolithClient.optionalField("noMaxAPInfluence", Json_decode.bool, json),
isExclusiveToArcaneSpellworks: JsonStrict$OptolithClient.optionalField("isExclusiveToArcaneSpellworks", Json_decode.bool, json),
levels: JsonStrict$OptolithClient.optionalField("levels", Json_decode.$$int, json),
max: JsonStrict$OptolithClient.optionalField("max", Json_decode.$$int, json),
selectOptionCategories: JsonStrict$OptolithClient.optionalField("selectOptionCategories", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.categoryWithGroups, param);
}), json),
selectOptions: JsonStrict$OptolithClient.optionalField("selectOptions", (function (param) {
return Json_decode.list(Static_SelectOption$OptolithClient.Decode.tUniv, param);
}), json),
prerequisites: Static_Prerequisites$OptolithClient.Decode.tWithLevelDisAdv(json),
prerequisitesIndex: JsonStrict$OptolithClient.optionalField("prerequisitesIndex", Static_Prerequisites$OptolithClient.Decode.tIndexWithLevelUniv, json),
gr: Json_decode.field("gr", Json_decode.$$int, json)
};
}
function t(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
nameInWiki: l10n.nameInWiki,
noMaxAPInfluence: Maybe$OptolithClient.fromMaybe(false, univ.noMaxAPInfluence),
isExclusiveToArcaneSpellworks: Maybe$OptolithClient.fromMaybe(false, univ.isExclusiveToArcaneSpellworks),
levels: univ.levels,
max: univ.max,
rules: l10n.rules,
selectOptions: Static_SelectOption$OptolithClient.Decode.mergeSelectOptions(l10n.selectOptions, univ.selectOptions, Static_SelectOption$OptolithClient.Decode.resolveCategories(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, univ.selectOptionCategories)),
input: l10n.input,
range: l10n.range,
actions: l10n.actions,
prerequisites: univ.prerequisites,
prerequisitesText: l10n.prerequisites,
prerequisitesTextIndex: Static_Prerequisites$OptolithClient.Decode.tIndexWithLevel(univ.prerequisitesIndex, l10n.prerequisitesIndex),
prerequisitesTextStart: l10n.prerequisitesStart,
prerequisitesTextEnd: l10n.prerequisitesEnd,
apValue: univ.cost,
apValueText: l10n.apValue,
apValueTextAppend: l10n.apValueAppend,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, (function (param, param$1) {
return t(blessings, cantrips, combatTechniques, liturgicalChants, skills, spells, param, param$1);
}), (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.disadvantagesUniv), Json_decode.list(tL10n, yamlData.disadvantagesL10n)));
}
var Decode = {
tL10n: tL10n,
cost: cost,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-211
View File
@@ -1,211 +0,0 @@
type t = {
id: int,
name: string,
nameInWiki: Maybe.t(string),
noMaxAPInfluence: bool,
isExclusiveToArcaneSpellworks: bool,
levels: Maybe.t(int),
max: Maybe.t(int),
rules: string,
selectOptions: Static_SelectOption.map,
input: Maybe.t(string),
range: Maybe.t(string),
actions: Maybe.t(string),
prerequisites: Static_Prerequisites.tWithLevelDisAdv,
prerequisitesText: Maybe.t(string),
prerequisitesTextIndex: Static_Prerequisites.tIndexWithLevel,
prerequisitesTextStart: Maybe.t(string),
prerequisitesTextEnd: Maybe.t(string),
apValue: Maybe.t(Static_Advantage.cost),
apValueText: Maybe.t(string),
apValueTextAppend: Maybe.t(string),
gr: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
nameInWiki: Maybe.t(string),
rules: string,
selectOptions: Maybe.t(list(Static_SelectOption.Decode.tL10n)),
input: Maybe.t(string),
range: Maybe.t(string),
actions: Maybe.t(string),
prerequisites: Maybe.t(string),
prerequisitesIndex:
Maybe.t(Static_Prerequisites.Decode.tIndexWithLevelL10n),
prerequisitesStart: Maybe.t(string),
prerequisitesEnd: Maybe.t(string),
apValue: Maybe.t(string),
apValueAppend: Maybe.t(string),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
nameInWiki: json |> optionalField("nameInWiki", string),
rules: json |> field("rules", string),
selectOptions:
json
|> optionalField(
"selectOptions",
list(Static_SelectOption.Decode.tL10n),
),
input: json |> optionalField("input", string),
range: json |> optionalField("range", string),
actions: json |> optionalField("actions", string),
prerequisites: json |> optionalField("prerequisites", string),
prerequisitesIndex:
json
|> optionalField(
"prerequisitesIndex",
Static_Prerequisites.Decode.tIndexWithLevelL10n,
),
prerequisitesStart: json |> optionalField("prerequisitesStart", string),
prerequisitesEnd: json |> optionalField("prerequisitesEnd", string),
apValue: json |> optionalField("apValue", string),
apValueAppend: json |> optionalField("apValueAppend", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
let cost = Static_Advantage.Decode.cost;
type tUniv = {
id: int,
cost: Maybe.t(Static_Advantage.cost),
noMaxAPInfluence: Maybe.t(bool),
isExclusiveToArcaneSpellworks: Maybe.t(bool),
levels: Maybe.t(int),
max: Maybe.t(int),
selectOptionCategories:
Maybe.t(list(Static_SelectOption.Decode.categoryWithGroups)),
selectOptions: Maybe.t(list(Static_SelectOption.Decode.tUniv)),
prerequisites: Static_Prerequisites.tWithLevelDisAdv,
prerequisitesIndex:
Maybe.t(Static_Prerequisites.Decode.tIndexWithLevelUniv),
gr: int,
};
let tUniv = json => {
id: json |> field("id", int),
cost: json |> optionalField("cost", cost),
noMaxAPInfluence: json |> optionalField("noMaxAPInfluence", bool),
isExclusiveToArcaneSpellworks:
json |> optionalField("isExclusiveToArcaneSpellworks", bool),
levels: json |> optionalField("levels", int),
max: json |> optionalField("max", int),
selectOptionCategories:
json
|> optionalField(
"selectOptionCategories",
list(Static_SelectOption.Decode.categoryWithGroups),
),
selectOptions:
json
|> optionalField(
"selectOptions",
list(Static_SelectOption.Decode.tUniv),
),
prerequisites: json |> Static_Prerequisites.Decode.tWithLevelDisAdv,
prerequisitesIndex:
json
|> optionalField(
"prerequisitesIndex",
Static_Prerequisites.Decode.tIndexWithLevelUniv,
),
gr: json |> field("gr", int),
};
let t =
(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
univ,
l10n,
) => (
univ.id,
{
id: univ.id,
name: l10n.name,
nameInWiki: l10n.nameInWiki,
noMaxAPInfluence: univ.noMaxAPInfluence |> Maybe.fromMaybe(false),
isExclusiveToArcaneSpellworks:
univ.isExclusiveToArcaneSpellworks |> Maybe.fromMaybe(false),
levels: univ.levels,
max: univ.max,
rules: l10n.rules,
selectOptions:
univ.selectOptionCategories
|> Static_SelectOption.Decode.resolveCategories(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
)
|> Static_SelectOption.Decode.mergeSelectOptions(
l10n.selectOptions,
univ.selectOptions,
),
input: l10n.input,
range: l10n.range,
actions: l10n.actions,
prerequisites: univ.prerequisites,
prerequisitesText: l10n.prerequisites,
prerequisitesTextIndex:
Static_Prerequisites.Decode.tIndexWithLevel(
univ.prerequisitesIndex,
l10n.prerequisitesIndex,
),
prerequisitesTextStart: l10n.prerequisitesStart,
prerequisitesTextEnd: l10n.prerequisitesEnd,
apValue: univ.cost,
apValueText: l10n.apValue,
apValueTextAppend: l10n.apValueAppend,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata,
},
);
let all =
(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
yamlData: Yaml_Raw.yamlData,
) =>
Yaml_Zip.zipBy(
Int.show,
t(
blessings,
cantrips,
combatTechniques,
liturgicalChants,
skills,
spells,
),
x => x.id,
x => x.id,
yamlData.disadvantagesUniv |> list(tUniv),
yamlData.disadvantagesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
@@ -1,79 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var CheckModifier$OptolithClient = require("./CheckModifier.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
aeCost: Json_decode.field("aeCost", Json_decode.string, json),
aeCostShort: Json_decode.field("aeCostShort", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
durationShort: Json_decode.field("durationShort", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
checkMod: JsonStrict$OptolithClient.optionalField("checkMod", CheckModifier$OptolithClient.Decode.t, json),
property: Json_decode.field("property", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
property: univ.property,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.dominationRitualsUniv), Json_decode.list(tL10n, yamlData.dominationRitualsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-90
View File
@@ -1,90 +0,0 @@
type t = {
id: int,
name: string,
check: (int, int, int),
checkMod: Maybe.t(CheckModifier.t),
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
property: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
aeCost: string,
aeCostShort: string,
duration: string,
durationShort: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
aeCost: json |> field("aeCost", string),
aeCostShort: json |> field("aeCostShort", string),
duration: json |> field("duration", string),
durationShort: json |> field("durationShort", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
checkMod: Maybe.t(CheckModifier.t),
property: int,
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
checkMod: json |> optionalField("checkMod", CheckModifier.Decode.t),
property: json |> field("property", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
property: univ.property,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.dominationRitualsUniv |> list(tUniv),
yamlData.dominationRitualsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
@@ -1,80 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var IC$OptolithClient = require("../Utilities/IC.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var CheckModifier$OptolithClient = require("./CheckModifier.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
aeCost: Json_decode.field("aeCost", Json_decode.string, json),
aeCostShort: Json_decode.field("aeCostShort", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
checkMod: JsonStrict$OptolithClient.optionalField("checkMod", CheckModifier$OptolithClient.Decode.t, json),
skill: JsonStrict$OptolithClient.optionalField("skill", Json_decode.$$int, json),
property: Json_decode.field("property", Json_decode.$$int, json),
ic: Json_decode.field("ic", IC$OptolithClient.Decode.t, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
skill: univ.skill,
property: univ.property,
ic: univ.ic,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.elvenMagicalSongsUniv), Json_decode.list(tL10n, yamlData.elvenMagicalSongsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-90
View File
@@ -1,90 +0,0 @@
type t = {
id: int,
name: string,
check: (int, int, int),
checkMod: Maybe.t(CheckModifier.t),
effect: string,
aeCost: string,
aeCostShort: string,
skill: Maybe.t(int),
property: int,
ic: IC.t,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
aeCost: string,
aeCostShort: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
aeCost: json |> field("aeCost", string),
aeCostShort: json |> field("aeCostShort", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
checkMod: Maybe.t(CheckModifier.t),
skill: Maybe.t(int),
property: int,
ic: IC.t,
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
checkMod: json |> optionalField("checkMod", CheckModifier.Decode.t),
skill: json |> optionalField("skill", int),
property: json |> field("property", int),
ic: json |> field("ic", IC.Decode.t),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
checkMod: univ.checkMod,
effect: l10n.effect,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
skill: univ.skill,
property: univ.property,
ic: univ.ic,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.elvenMagicalSongsUniv |> list(tUniv),
yamlData.elvenMagicalSongsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
@@ -1,70 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function item(json) {
return [
Json_decode.field("id", Json_decode.$$int, json),
JsonStrict$OptolithClient.optionalField("amount", Json_decode.$$int, json)
];
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
items: Json_decode.field("items", (function (param) {
return Json_decode.list(item, param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
items: Curry._2(IntMap$OptolithClient.map, (function (param) {
return Maybe$OptolithClient.fromMaybe(1, param);
}), Curry._1(IntMap$OptolithClient.fromList, univ.items)),
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.equipmentPackagesUniv), Json_decode.list(tL10n, yamlData.equipmentPackagesL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-63
View File
@@ -1,63 +0,0 @@
type t = {
id: int,
name: string,
items: IntMap.t(int),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
let%private item = json => (
json |> field("id", int),
json |> optionalField("amount", int),
);
type tUniv = {
id: int,
items: list((int, Maybe.t(int))),
};
let tUniv = json => {
id: json |> field("id", int),
items: json |> field("items", list(item)),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
items: IntMap.fromList(univ.items) |> IntMap.map(Maybe.fromMaybe(1)),
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.equipmentPackagesUniv |> list(tUniv),
yamlData.equipmentPackagesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-27
View File
@@ -1,27 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
function t(json) {
return {
date: Json_decode.field("id", Json_decode.date, json),
description: Json_decode.field("id", Json_decode.string, json)
};
}
function list(json) {
return Maybe$OptolithClient.fromMaybe(/* [] */0, JsonStrict$OptolithClient.maybe((function (param) {
return Json_decode.list(t, param);
}), json));
}
var Decode = {
t: t,
list: list
};
exports.Decode = Decode;
/* No side effect */
-7
View File
@@ -1,7 +0,0 @@
/* TypeScript file generated from Static_Erratum.re by genType. */
/* eslint-disable import/first */
// tslint:disable-next-line:interface-over-type-literal
export type t = { readonly date: Date; readonly description: string };
export type Erratum = t;
-18
View File
@@ -1,18 +0,0 @@
[@genType "Erratum"]
type t = {
date: Js.Date.t,
description: string,
};
module Decode = {
open Json.Decode;
open JsonStrict;
let t = json => {
date: json |> field("id", date),
description: json |> field("id", string),
};
let list = json =>
json |> maybe(Json.Decode.list(t)) |> Maybe.fromMaybe([]);
};
@@ -1,63 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
ap: Json_decode.field("ap", Json_decode.$$int, json),
maxAttributeValue: Json_decode.field("maxAttributeValue", Json_decode.$$int, json),
maxSkillRating: Json_decode.field("maxSkillRating", Json_decode.$$int, json),
maxCombatTechniqueRating: Json_decode.field("maxCombatTechniqueRating", Json_decode.$$int, json),
maxTotalAttributeValues: Json_decode.field("maxTotalAttributeValues", Json_decode.$$int, json),
maxSpellsLiturgicalChants: Json_decode.field("maxSpellsLiturgicalChants", Json_decode.$$int, json),
maxUnfamiliarSpells: Json_decode.field("maxUnfamiliarSpells", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
ap: univ.ap,
maxAttributeValue: univ.maxAttributeValue,
maxSkillRating: univ.maxSkillRating,
maxCombatTechniqueRating: univ.maxCombatTechniqueRating,
maxTotalAttributeValues: univ.maxTotalAttributeValues,
maxSpellsLiturgicalChants: univ.maxSpellsLiturgicalChants,
maxUnfamiliarSpells: univ.maxUnfamiliarSpells
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.experienceLevelsUniv), Json_decode.list(tL10n, yamlData.experienceLevelsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-74
View File
@@ -1,74 +0,0 @@
type t = {
id: int,
name: string,
ap: int,
maxAttributeValue: int,
maxSkillRating: int,
maxCombatTechniqueRating: int,
maxTotalAttributeValues: int,
maxSpellsLiturgicalChants: int,
maxUnfamiliarSpells: int,
};
module Decode = {
open Json.Decode;
type tL10n = {
id: int,
name: string,
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
};
type tUniv = {
id: int,
ap: int,
maxAttributeValue: int,
maxSkillRating: int,
maxCombatTechniqueRating: int,
maxTotalAttributeValues: int,
maxSpellsLiturgicalChants: int,
maxUnfamiliarSpells: int,
};
let tUniv = json => {
id: json |> field("id", int),
ap: json |> field("ap", int),
maxAttributeValue: json |> field("maxAttributeValue", int),
maxSkillRating: json |> field("maxSkillRating", int),
maxCombatTechniqueRating: json |> field("maxCombatTechniqueRating", int),
maxTotalAttributeValues: json |> field("maxTotalAttributeValues", int),
maxSpellsLiturgicalChants:
json |> field("maxSpellsLiturgicalChants", int),
maxUnfamiliarSpells: json |> field("maxUnfamiliarSpells", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
ap: univ.ap,
maxAttributeValue: univ.maxAttributeValue,
maxSkillRating: univ.maxSkillRating,
maxCombatTechniqueRating: univ.maxCombatTechniqueRating,
maxTotalAttributeValues: univ.maxTotalAttributeValues,
maxSpellsLiturgicalChants: univ.maxSpellsLiturgicalChants,
maxUnfamiliarSpells: univ.maxUnfamiliarSpells,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.experienceLevelsUniv |> list(tUniv),
yamlData.experienceLevelsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-61
View File
@@ -1,61 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
description: Json_decode.field("description", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
level: Json_decode.field("level", Json_decode.$$int, json),
subject: Json_decode.field("subject", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
level: univ.level,
subject: univ.subject,
description: l10n.description,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.focusRulesUniv), Json_decode.list(tL10n, yamlData.focusRulesL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-65
View File
@@ -1,65 +0,0 @@
type t = {
id: int,
name: string,
level: int,
subject: int,
description: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
type tL10n = {
id: int,
name: string,
description: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
description: json |> field("description", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
level: int,
subject: int,
};
let tUniv = json => {
id: json |> field("id", int),
level: json |> field("level", int),
subject: json |> field("subject", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
level: univ.level,
subject: univ.subject,
description: l10n.description,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.focusRulesUniv |> list(tUniv),
yamlData.focusRulesL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-94
View File
@@ -1,94 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var CheckModifier$OptolithClient = require("./CheckModifier.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
var Static_Prerequisites$OptolithClient = require("./Static_Prerequisites.bs.js");
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
ritualTime: Json_decode.field("ritualTime", Json_decode.string, json),
ritualTimeShort: Json_decode.field("ritualTimeShort", Json_decode.string, json),
aeCost: Json_decode.field("aeCost", Json_decode.string, json),
aeCostShort: Json_decode.field("aeCostShort", Json_decode.string, json),
range: Json_decode.field("range", Json_decode.string, json),
rangeShort: Json_decode.field("rangeShort", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
durationShort: Json_decode.field("durationShort", Json_decode.string, json),
target: Json_decode.field("target", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
checkMod: JsonStrict$OptolithClient.optionalField("checkMod", CheckModifier$OptolithClient.Decode.t, json),
property: Json_decode.field("property", Json_decode.$$int, json),
activatablePrerequisites: JsonStrict$OptolithClient.optionalField("activatablePrerequisites", (function (param) {
return Json_decode.list(Static_Prerequisites$OptolithClient.Decode.activatable, param);
}), json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
checkMod: univ.checkMod,
effect: l10n.effect,
ritualTime: l10n.ritualTime,
ritualTimeShort: l10n.ritualTimeShort,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
range: l10n.range,
rangeShort: l10n.rangeShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
target: l10n.target,
property: univ.property,
activatablePrerequisites: univ.activatablePrerequisites,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.geodeRitualsUniv), Json_decode.list(tL10n, yamlData.geodeRitualsL10n)));
}
var Decode = {
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-120
View File
@@ -1,120 +0,0 @@
type t = {
id: int,
name: string,
check: (int, int, int),
checkMod: Maybe.t(CheckModifier.t),
effect: string,
ritualTime: string,
ritualTimeShort: string,
aeCost: string,
aeCostShort: string,
range: string,
rangeShort: string,
duration: string,
durationShort: string,
target: string,
property: int,
activatablePrerequisites: Maybe.t(list(Static_Prerequisites.activatable)),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type tL10n = {
id: int,
name: string,
effect: string,
ritualTime: string,
ritualTimeShort: string,
aeCost: string,
aeCostShort: string,
range: string,
rangeShort: string,
duration: string,
durationShort: string,
target: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
ritualTime: json |> field("ritualTime", string),
ritualTimeShort: json |> field("ritualTimeShort", string),
aeCost: json |> field("aeCost", string),
aeCostShort: json |> field("aeCostShort", string),
range: json |> field("range", string),
rangeShort: json |> field("rangeShort", string),
duration: json |> field("duration", string),
durationShort: json |> field("durationShort", string),
target: json |> field("target", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
checkMod: Maybe.t(CheckModifier.t),
property: int,
activatablePrerequisites:
Maybe.t(list(Static_Prerequisites.activatable)),
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
checkMod: json |> optionalField("checkMod", CheckModifier.Decode.t),
property: json |> field("property", int),
activatablePrerequisites:
json
|> optionalField(
"activatablePrerequisites",
list(Static_Prerequisites.Decode.activatable),
),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
checkMod: univ.checkMod,
effect: l10n.effect,
ritualTime: l10n.ritualTime,
ritualTimeShort: l10n.ritualTimeShort,
aeCost: l10n.aeCost,
aeCostShort: l10n.aeCostShort,
range: l10n.range,
rangeShort: l10n.rangeShort,
duration: l10n.duration,
durationShort: l10n.durationShort,
target: l10n.target,
property: univ.property,
activatablePrerequisites: univ.activatablePrerequisites,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.geodeRitualsUniv |> list(tUniv),
yamlData.geodeRitualsL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-270
View File
@@ -1,270 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var GenericHelpers$OptolithClient = require("../Utilities/GenericHelpers.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function info(json) {
return {
note: JsonStrict$OptolithClient.optionalField("note", Json_decode.string, json),
rules: JsonStrict$OptolithClient.optionalField("rules", Json_decode.string, json),
advantage: JsonStrict$OptolithClient.optionalField("advantage", Json_decode.string, json),
disadvantage: JsonStrict$OptolithClient.optionalField("disadvantage", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tL10n(json) {
var partial_arg_0 = function (json) {
return {
hd: info(json),
tl: /* [] */0
};
};
var partial_arg_1 = {
hd: (function (json) {
return Json_decode.list(info, json);
}),
tl: /* [] */0
};
var partial_arg = {
hd: partial_arg_0,
tl: partial_arg_1
};
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
info: Json_decode.field("versions", (function (param) {
return Json_decode.oneOf(partial_arg, param);
}), json)
};
}
function mundaneItem(json) {
return {
structurePoints: JsonStrict$OptolithClient.optionalField("structurePoints", GenericHelpers$OptolithClient.Decode.oneOrMany(Json_decode.$$int), json)
};
}
function newAttribute(json) {
return {
attribute: Json_decode.field("attribute", Json_decode.$$int, json),
threshold: Json_decode.field("threshold", Json_decode.$$int, json)
};
}
function agilityStrength(json) {
var x = Json_decode.pair(Json_decode.$$int, Json_decode.$$int, json);
return {
agility: x[0],
strength: x[1]
};
}
function partial_arg_0(json) {
return {
TAG: /* DefaultAttribute */0,
_0: Json_decode.$$int(json)
};
}
var partial_arg_1 = {
hd: (function (json) {
return {
TAG: /* DifferentAttribute */1,
_0: newAttribute(json)
};
}),
tl: {
hd: (function (json) {
return {
TAG: /* AgilityStrength */2,
_0: agilityStrength(json)
};
}),
tl: /* [] */0
}
};
var partial_arg = {
hd: partial_arg_0,
tl: partial_arg_1
};
function primaryAttributeDamageThreshold(param) {
return Json_decode.oneOf(partial_arg, param);
}
function meleeWeapon(json) {
return {
combatTechnique: Json_decode.field("combatTechnique", Json_decode.$$int, json),
damage: {
amount: Json_decode.field("damageDiceNumber", Json_decode.$$int, json),
sides: Json_decode.field("damageDiceSides", Json_decode.$$int, json),
flat: JsonStrict$OptolithClient.optionalField("damageFlat", Json_decode.$$int, json)
},
primaryAttributeDamageThreshold: JsonStrict$OptolithClient.optionalField("damageThreshold", primaryAttributeDamageThreshold, json),
at: JsonStrict$OptolithClient.optionalField("at", Json_decode.$$int, json),
pa: JsonStrict$OptolithClient.optionalField("pa", Json_decode.$$int, json),
reach: JsonStrict$OptolithClient.optionalField("reach", Json_decode.$$int, json),
length: JsonStrict$OptolithClient.optionalField("length", Json_decode.$$int, json),
structurePoints: JsonStrict$OptolithClient.optionalField("structurePoints", Json_decode.$$int, json),
isParryingWeapon: Json_decode.field("isParryingWeapon", Json_decode.bool, json),
isTwoHandedWeapon: Json_decode.field("isTwoHandedWeapon", Json_decode.bool, json),
isImprovisedWeapon: Json_decode.field("isImprovisedWeapon", Json_decode.bool, json)
};
}
function rangedWeapon(json) {
return {
combatTechnique: Json_decode.field("combatTechnique", Json_decode.$$int, json),
damage: Maybe$OptolithClient.Monad.liftM2((function (amount, sides) {
return {
amount: amount,
sides: sides,
flat: JsonStrict$OptolithClient.optionalField("damageFlat", Json_decode.$$int, json)
};
}), JsonStrict$OptolithClient.optionalField("damageDiceNumber", Json_decode.$$int, json), JsonStrict$OptolithClient.optionalField("damageDiceSides", Json_decode.$$int, json)),
length: JsonStrict$OptolithClient.optionalField("length", Json_decode.$$int, json),
range: [
Json_decode.field("closeRange", Json_decode.$$int, json),
Json_decode.field("mediumRange", Json_decode.$$int, json),
Json_decode.field("farRange", Json_decode.$$int, json)
],
reloadTime: Json_decode.field("reloadTime", GenericHelpers$OptolithClient.Decode.oneOrMany(Json_decode.$$int), json),
ammunition: JsonStrict$OptolithClient.optionalField("ammunition", Json_decode.$$int, json),
isImprovisedWeapon: Json_decode.field("isImprovisedWeapon", Json_decode.bool, json)
};
}
function combinedWeapon(json) {
return [
Json_decode.field("melee", meleeWeapon, json),
Json_decode.field("ranged", rangedWeapon, json)
];
}
function armor(json) {
return {
protection: Json_decode.field("protection", Json_decode.$$int, json),
encumbrance: Json_decode.field("encumbrance", Json_decode.$$int, json),
hasAdditionalPenalties: Json_decode.field("hasAdditionalPenalties", Json_decode.bool, json),
armorType: Json_decode.field("armorType", Json_decode.$$int, json)
};
}
function partial_arg_0$1(json) {
return {
TAG: /* MundaneItem */0,
_0: mundaneItem(json)
};
}
var partial_arg_1$1 = {
hd: (function (json) {
return {
TAG: /* MeleeWeapon */1,
_0: meleeWeapon(json)
};
}),
tl: {
hd: (function (json) {
return {
TAG: /* RangedWeapon */2,
_0: rangedWeapon(json)
};
}),
tl: {
hd: (function (json) {
var param = combinedWeapon(json);
return {
TAG: /* CombinedWeapon */3,
_0: param[0],
_1: param[1]
};
}),
tl: {
hd: (function (json) {
return {
TAG: /* Armor */4,
_0: armor(json)
};
}),
tl: /* [] */0
}
}
}
};
var partial_arg$1 = {
hd: partial_arg_0$1,
tl: partial_arg_1$1
};
function special(param) {
return Json_decode.oneOf(partial_arg$1, param);
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
price: JsonStrict$OptolithClient.optionalField("price", Json_decode.$$int, json),
weight: JsonStrict$OptolithClient.optionalField("weight", Json_decode.$$int, json),
special: JsonStrict$OptolithClient.optionalField("special", (function (param) {
return Json_decode.oneOf(/* [] */0, param);
}), json),
gr: Json_decode.field("gr", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
price: univ.price,
weight: univ.weight,
special: univ.special,
info: l10n.info,
gr: univ.gr
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.equipmentUniv), Json_decode.list(tL10n, yamlData.equipmentL10n)));
}
var Decode = {
info: info,
tL10n: tL10n,
mundaneItem: mundaneItem,
newAttribute: newAttribute,
agilityStrength: agilityStrength,
primaryAttributeDamageThreshold: primaryAttributeDamageThreshold,
meleeWeapon: meleeWeapon,
rangedWeapon: rangedWeapon,
combinedWeapon: combinedWeapon,
armor: armor,
special: special,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-238
View File
@@ -1,238 +0,0 @@
open GenericHelpers;
type info = {
note: Maybe.t(string),
rules: Maybe.t(string),
advantage: Maybe.t(string),
disadvantage: Maybe.t(string),
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
type mundaneItem = {structurePoints: Maybe.t(oneOrMany(int))};
type newAttribute = {
attribute: int,
threshold: int,
};
type agilityStrength = {
agility: int,
strength: int,
};
type primaryAttributeDamageThreshold =
| DefaultAttribute(int)
| DifferentAttribute(newAttribute)
| AgilityStrength(agilityStrength);
type damage = {
amount: int,
sides: int,
flat: Maybe.t(int),
};
type meleeWeapon = {
combatTechnique: int,
damage,
primaryAttributeDamageThreshold: Maybe.t(primaryAttributeDamageThreshold),
at: Maybe.t(int),
pa: Maybe.t(int),
reach: Maybe.t(int),
length: Maybe.t(int),
structurePoints: Maybe.t(int),
isParryingWeapon: bool,
isTwoHandedWeapon: bool,
isImprovisedWeapon: bool,
};
type rangedWeapon = {
combatTechnique: int,
damage: Maybe.t(damage),
length: Maybe.t(int),
range: (int, int, int),
reloadTime: oneOrMany(int),
ammunition: Maybe.t(int),
isImprovisedWeapon: bool,
};
type armor = {
protection: int,
encumbrance: int,
hasAdditionalPenalties: bool,
armorType: int,
};
type special =
| MundaneItem(mundaneItem)
| MeleeWeapon(meleeWeapon)
| RangedWeapon(rangedWeapon)
| CombinedWeapon(meleeWeapon, rangedWeapon)
| Armor(armor);
type t = {
id: int,
name: string,
price: Maybe.t(int),
weight: Maybe.t(int),
special: Maybe.t(special),
info: list(info),
gr: int,
};
module Decode = {
open Json.Decode;
open JsonStrict;
open GenericHelpers.Decode;
let info = json => {
note: json |> optionalField("note", string),
rules: json |> optionalField("rules", string),
advantage: json |> optionalField("advantage", string),
disadvantage: json |> optionalField("disadvantage", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tL10n = {
id: int,
name: string,
info: list(info),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
info:
json
|> field(
"versions",
oneOf([
json => json |> info |> (x => [x]),
json => json |> list(info),
]),
),
};
let mundaneItem = json => {
structurePoints:
json |> optionalField("structurePoints", oneOrMany(int)),
};
let newAttribute = json => {
attribute: json |> field("attribute", int),
threshold: json |> field("threshold", int),
};
let agilityStrength = json =>
json |> pair(int, int) |> (x => {agility: fst(x), strength: snd(x)});
let primaryAttributeDamageThreshold =
oneOf([
json => json |> int |> (x => DefaultAttribute(x)),
json => json |> newAttribute |> (x => DifferentAttribute(x)),
json => json |> agilityStrength |> (x => AgilityStrength(x)),
]);
let meleeWeapon = json => {
combatTechnique: json |> field("combatTechnique", int),
damage: {
amount: json |> field("damageDiceNumber", int),
sides: json |> field("damageDiceSides", int),
flat: json |> optionalField("damageFlat", int),
},
primaryAttributeDamageThreshold:
json
|> optionalField("damageThreshold", primaryAttributeDamageThreshold),
at: json |> optionalField("at", int),
pa: json |> optionalField("pa", int),
reach: json |> optionalField("reach", int),
length: json |> optionalField("length", int),
structurePoints: json |> optionalField("structurePoints", int),
isParryingWeapon: json |> field("isParryingWeapon", bool),
isTwoHandedWeapon: json |> field("isTwoHandedWeapon", bool),
isImprovisedWeapon: json |> field("isImprovisedWeapon", bool),
};
let rangedWeapon = json =>
Maybe.Monad.{
combatTechnique: json |> field("combatTechnique", int),
damage:
liftM2(
(amount, sides) =>
{amount, sides, flat: json |> optionalField("damageFlat", int)},
json |> optionalField("damageDiceNumber", int),
json |> optionalField("damageDiceSides", int),
),
length: json |> optionalField("length", int),
range: (
json |> field("closeRange", int),
json |> field("mediumRange", int),
json |> field("farRange", int),
),
reloadTime: json |> field("reloadTime", oneOrMany(int)),
ammunition: json |> optionalField("ammunition", int),
isImprovisedWeapon: json |> field("isImprovisedWeapon", bool),
};
let combinedWeapon = json => (
json |> field("melee", meleeWeapon),
json |> field("ranged", rangedWeapon),
);
let armor = json => {
protection: json |> field("protection", int),
encumbrance: json |> field("encumbrance", int),
hasAdditionalPenalties: json |> field("hasAdditionalPenalties", bool),
armorType: json |> field("armorType", int),
};
let special =
oneOf([
json => json |> mundaneItem |> (x => MundaneItem(x)),
json => json |> meleeWeapon |> (x => MeleeWeapon(x)),
json => json |> rangedWeapon |> (x => RangedWeapon(x)),
json => json |> combinedWeapon |> (((m, r)) => CombinedWeapon(m, r)),
json => json |> armor |> (x => Armor(x)),
]);
type tUniv = {
id: int,
price: Maybe.t(int),
weight: Maybe.t(int),
special: Maybe.t(special),
gr: int,
};
let tUniv = json => {
id: json |> field("id", int),
price: json |> optionalField("price", int),
weight: json |> optionalField("weight", int),
special: json |> optionalField("special", oneOf([])),
gr: json |> field("gr", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
price: univ.price,
weight: univ.weight,
special: univ.special,
info: l10n.info,
gr: univ.gr,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.equipmentUniv |> list(tUniv),
yamlData.equipmentL10n |> list(tL10n),
)
|> IntMap.fromList;
};
-232
View File
@@ -1,232 +0,0 @@
// Generated by ReScript, PLEASE EDIT WITH CARE
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
var IC$OptolithClient = require("../Utilities/IC.bs.js");
var Int$OptolithClient = require("../../Data/Int.bs.js");
var Maybe$OptolithClient = require("../../Data/Maybe.bs.js");
var IntMap$OptolithClient = require("../../Data/IntMap.bs.js");
var Yaml_Zip$OptolithClient = require("../Utilities/Yaml_Zip.bs.js");
var JsonStrict$OptolithClient = require("../Utilities/JsonStrict.bs.js");
var CheckModifier$OptolithClient = require("./CheckModifier.bs.js");
var Static_Erratum$OptolithClient = require("./Static_Erratum.bs.js");
var Static_SourceRef$OptolithClient = require("./Static_SourceRef.bs.js");
function enhancementLevelL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json)
};
}
function enhancementL10n(json) {
return {
target: Json_decode.field("target", Json_decode.$$int, json),
level1: Json_decode.field("level1", enhancementLevelL10n, json),
level2: Json_decode.field("level2", enhancementLevelL10n, json),
level3: Json_decode.field("level3", enhancementLevelL10n, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function enhancementLevel1Univ(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
cost: Json_decode.field("cost", Json_decode.$$int, json)
};
}
function level3Prerequisite(json) {
var x = Json_decode.$$int(json);
if (x === 1) {
return 1;
}
throw {
RE_EXN_ID: Json_decode.DecodeError,
_1: "Unknown level 2 prerequisite: " + Int$OptolithClient.show(x),
Error: new Error()
};
}
function enhancementLevel2Univ(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
cost: Json_decode.field("cost", Json_decode.$$int, json),
requireLevel1: Maybe$OptolithClient.isJust(JsonStrict$OptolithClient.optionalField("previousRequirement", level3Prerequisite, json))
};
}
function level3Prerequisite$1(json) {
var x = Json_decode.$$int(json);
if (x === 1) {
return /* First */0;
}
if (x === 2) {
return /* Second */1;
}
throw {
RE_EXN_ID: Json_decode.DecodeError,
_1: "Unknown level 3 prerequisite: " + Int$OptolithClient.show(x),
Error: new Error()
};
}
function enhancementLevel3Univ(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
cost: Json_decode.field("cost", Json_decode.$$int, json),
requirePrevious: JsonStrict$OptolithClient.optionalField("previousRequirement", level3Prerequisite$1, json)
};
}
function enhancementUniv(json) {
return {
target: Json_decode.field("target", Json_decode.$$int, json),
level1: Json_decode.field("level1", enhancementLevel1Univ, json),
level2: Json_decode.field("level2", enhancementLevel2Univ, json),
level3: Json_decode.field("level3", enhancementLevel3Univ, json)
};
}
function enhancement(univ, l10n) {
return {
target: univ.target,
level1: {
id: univ.level1.id,
name: l10n.level1.name,
effect: l10n.level1.effect,
cost: univ.level1.cost
},
level2: {
id: univ.level2.id,
name: l10n.level2.name,
effect: l10n.level2.effect,
cost: univ.level2.cost,
requireLevel1: univ.level2.requireLevel1
},
level3: {
id: univ.level3.id,
name: l10n.level3.name,
effect: l10n.level3.effect,
cost: univ.level3.cost,
requirePrevious: univ.level3.requirePrevious
},
src: l10n.src,
errata: l10n.errata
};
}
function enhancements(yamlData) {
return Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, enhancement, (function (x) {
return x.target;
}), (function (x) {
return x.target;
}), Json_decode.list(enhancementUniv, yamlData.liturgicalChantEnhancementsUniv), Json_decode.list(enhancementL10n, yamlData.liturgicalChantEnhancementsL10n));
}
function tL10n(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
name: Json_decode.field("name", Json_decode.string, json),
effect: Json_decode.field("effect", Json_decode.string, json),
castingTime: Json_decode.field("castingTime", Json_decode.string, json),
castingTimeShort: Json_decode.field("castingTimeShort", Json_decode.string, json),
kpCost: Json_decode.field("kpCost", Json_decode.string, json),
kpCostShort: Json_decode.field("kpCostShort", Json_decode.string, json),
range: Json_decode.field("range", Json_decode.string, json),
rangeShort: Json_decode.field("rangeShort", Json_decode.string, json),
duration: Json_decode.field("duration", Json_decode.string, json),
durationShort: Json_decode.field("durationShort", Json_decode.string, json),
target: Json_decode.field("target", Json_decode.string, json),
src: Json_decode.field("src", Static_SourceRef$OptolithClient.Decode.list, json),
errata: Json_decode.field("errata", Static_Erratum$OptolithClient.Decode.list, json)
};
}
function tUniv(json) {
return {
id: Json_decode.field("id", Json_decode.$$int, json),
check1: Json_decode.field("check1", Json_decode.$$int, json),
check2: Json_decode.field("check2", Json_decode.$$int, json),
check3: Json_decode.field("check3", Json_decode.$$int, json),
checkMod: JsonStrict$OptolithClient.optionalField("checkMod", CheckModifier$OptolithClient.Decode.t, json),
castingTimeNoMod: Json_decode.field("castingTimeNoMod", Json_decode.bool, json),
kpCostNoMod: Json_decode.field("kpCostNoMod", Json_decode.bool, json),
rangeNoMod: Json_decode.field("rangeNoMod", Json_decode.bool, json),
durationNoMod: Json_decode.field("durationNoMod", Json_decode.bool, json),
traditions: Json_decode.field("traditions", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
aspects: JsonStrict$OptolithClient.optionalField("traditions", (function (param) {
return Json_decode.list(Json_decode.$$int, param);
}), json),
ic: Json_decode.field("ic", IC$OptolithClient.Decode.t, json),
gr: Json_decode.field("gr", Json_decode.$$int, json)
};
}
function t(univ, l10n) {
return [
univ.id,
{
id: univ.id,
name: l10n.name,
check: [
univ.check1,
univ.check2,
univ.check3
],
checkMod: univ.checkMod,
effect: l10n.effect,
castingTime: l10n.castingTime,
castingTimeShort: l10n.castingTimeShort,
castingTimeNoMod: univ.castingTimeNoMod,
kpCost: l10n.kpCost,
kpCostShort: l10n.kpCostShort,
kpCostNoMod: univ.kpCostNoMod,
range: l10n.range,
rangeShort: l10n.rangeShort,
rangeNoMod: univ.rangeNoMod,
duration: l10n.duration,
durationShort: l10n.durationShort,
durationNoMod: univ.durationNoMod,
target: l10n.target,
traditions: univ.traditions,
aspects: Maybe$OptolithClient.fromMaybe(/* [] */0, univ.aspects),
ic: univ.ic,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata
}
];
}
function all(yamlData) {
return Curry._1(IntMap$OptolithClient.fromList, Yaml_Zip$OptolithClient.zipBy(Int$OptolithClient.show, t, (function (x) {
return x.id;
}), (function (x) {
return x.id;
}), Json_decode.list(tUniv, yamlData.liturgicalChantsUniv), Json_decode.list(tL10n, yamlData.liturgicalChantsL10n)));
}
var Decode = {
enhancementLevelL10n: enhancementLevelL10n,
enhancementL10n: enhancementL10n,
enhancementLevel1Univ: enhancementLevel1Univ,
enhancementLevel2Univ: enhancementLevel2Univ,
level3Prerequisite: level3Prerequisite$1,
enhancementLevel3Univ: enhancementLevel3Univ,
enhancementUniv: enhancementUniv,
enhancement: enhancement,
enhancements: enhancements,
tL10n: tL10n,
tUniv: tUniv,
t: t,
all: all
};
exports.Decode = Decode;
/* IntMap-OptolithClient Not a pure module */
-321
View File
@@ -1,321 +0,0 @@
type enhancementLevel1 = {
id: int,
name: string,
effect: string,
cost: int,
};
type enhancementLevel2 = {
id: int,
name: string,
effect: string,
cost: int,
requireLevel1: bool,
};
type level3Prerequisite =
| First
| Second;
type enhancementLevel3 = {
id: int,
name: string,
effect: string,
cost: int,
requirePrevious: Maybe.t(level3Prerequisite),
};
type enhancement = {
target: int,
level1: enhancementLevel1,
level2: enhancementLevel2,
level3: enhancementLevel3,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
type t = {
id: int,
name: string,
check: (int, int, int),
checkMod: Maybe.t(CheckModifier.t),
effect: string,
castingTime: string,
castingTimeShort: string,
castingTimeNoMod: bool,
kpCost: string,
kpCostShort: string,
kpCostNoMod: bool,
range: string,
rangeShort: string,
rangeNoMod: bool,
duration: string,
durationShort: string,
durationNoMod: bool,
target: string,
traditions: list(int),
aspects: list(int),
ic: IC.t,
gr: int,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
module Decode = {
open Json.Decode;
open JsonStrict;
type enhancementLevelL10n = {
id: int,
name: string,
effect: string,
};
let enhancementLevelL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
};
type enhancementL10n = {
target: int,
level1: enhancementLevelL10n,
level2: enhancementLevelL10n,
level3: enhancementLevelL10n,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let enhancementL10n = json => {
target: json |> field("target", int),
level1: json |> field("level1", enhancementLevelL10n),
level2: json |> field("level2", enhancementLevelL10n),
level3: json |> field("level3", enhancementLevelL10n),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type enhancementLevel1Univ = {
id: int,
cost: int,
};
let enhancementLevel1Univ = json => {
id: json |> field("id", int),
cost: json |> field("cost", int),
};
type enhancementLevel2Univ = {
id: int,
cost: int,
requireLevel1: bool,
};
let level3Prerequisite = json =>
json
|> int
|> (
x =>
switch (x) {
| 1 => 1
| y =>
raise(
DecodeError("Unknown level 2 prerequisite: " ++ Int.show(y)),
)
}
);
let enhancementLevel2Univ = json => {
id: json |> field("id", int),
cost: json |> field("cost", int),
requireLevel1:
json
|> optionalField("previousRequirement", level3Prerequisite)
|> Maybe.isJust,
};
type enhancementLevel3Univ = {
id: int,
cost: int,
requirePrevious: Maybe.t(level3Prerequisite),
};
let level3Prerequisite = json =>
json
|> int
|> (
x =>
switch (x) {
| 1 => First
| 2 => Second
| y =>
raise(
DecodeError("Unknown level 3 prerequisite: " ++ Int.show(y)),
)
}
);
let enhancementLevel3Univ = json => {
id: json |> field("id", int),
cost: json |> field("cost", int),
requirePrevious:
json |> optionalField("previousRequirement", level3Prerequisite),
};
type enhancementUniv = {
target: int,
level1: enhancementLevel1Univ,
level2: enhancementLevel2Univ,
level3: enhancementLevel3Univ,
};
let enhancementUniv = json => {
target: json |> field("target", int),
level1: json |> field("level1", enhancementLevel1Univ),
level2: json |> field("level2", enhancementLevel2Univ),
level3: json |> field("level3", enhancementLevel3Univ),
};
let enhancement = (univ, l10n: enhancementL10n): enhancement => {
target: univ.target,
level1: {
id: univ.level1.id,
name: l10n.level1.name,
effect: l10n.level1.effect,
cost: univ.level1.cost,
},
level2: {
id: univ.level2.id,
name: l10n.level2.name,
effect: l10n.level2.effect,
cost: univ.level2.cost,
requireLevel1: univ.level2.requireLevel1,
},
level3: {
id: univ.level3.id,
name: l10n.level3.name,
effect: l10n.level3.effect,
cost: univ.level3.cost,
requirePrevious: univ.level3.requirePrevious,
},
src: l10n.src,
errata: l10n.errata,
};
let enhancements = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
enhancement,
x => x.target,
x => x.target,
yamlData.liturgicalChantEnhancementsUniv |> list(enhancementUniv),
yamlData.liturgicalChantEnhancementsL10n |> list(enhancementL10n),
);
type tL10n = {
id: int,
name: string,
effect: string,
castingTime: string,
castingTimeShort: string,
kpCost: string,
kpCostShort: string,
range: string,
rangeShort: string,
duration: string,
durationShort: string,
target: string,
src: list(Static_SourceRef.t),
errata: list(Static_Erratum.t),
};
let tL10n = json => {
id: json |> field("id", int),
name: json |> field("name", string),
effect: json |> field("effect", string),
castingTime: json |> field("castingTime", string),
castingTimeShort: json |> field("castingTimeShort", string),
kpCost: json |> field("kpCost", string),
kpCostShort: json |> field("kpCostShort", string),
range: json |> field("range", string),
rangeShort: json |> field("rangeShort", string),
duration: json |> field("duration", string),
durationShort: json |> field("durationShort", string),
target: json |> field("target", string),
src: json |> field("src", Static_SourceRef.Decode.list),
errata: json |> field("errata", Static_Erratum.Decode.list),
};
type tUniv = {
id: int,
check1: int,
check2: int,
check3: int,
checkMod: Maybe.t(CheckModifier.t),
castingTimeNoMod: bool,
kpCostNoMod: bool,
rangeNoMod: bool,
durationNoMod: bool,
traditions: list(int),
aspects: Maybe.t(list(int)),
ic: IC.t,
gr: int,
};
let tUniv = json => {
id: json |> field("id", int),
check1: json |> field("check1", int),
check2: json |> field("check2", int),
check3: json |> field("check3", int),
checkMod: json |> optionalField("checkMod", CheckModifier.Decode.t),
castingTimeNoMod: json |> field("castingTimeNoMod", bool),
kpCostNoMod: json |> field("kpCostNoMod", bool),
rangeNoMod: json |> field("rangeNoMod", bool),
durationNoMod: json |> field("durationNoMod", bool),
traditions: json |> field("traditions", list(int)),
aspects: json |> optionalField("traditions", list(int)),
ic: json |> field("ic", IC.Decode.t),
gr: json |> field("gr", int),
};
let t = (univ, l10n) => (
univ.id,
{
id: univ.id,
name: l10n.name,
check: (univ.check1, univ.check2, univ.check3),
checkMod: univ.checkMod,
effect: l10n.effect,
castingTime: l10n.castingTime,
castingTimeShort: l10n.castingTimeShort,
castingTimeNoMod: univ.castingTimeNoMod,
kpCost: l10n.kpCost,
kpCostShort: l10n.kpCostShort,
kpCostNoMod: univ.kpCostNoMod,
range: l10n.range,
rangeShort: l10n.rangeShort,
rangeNoMod: univ.rangeNoMod,
duration: l10n.duration,
durationShort: l10n.durationShort,
durationNoMod: univ.durationNoMod,
target: l10n.target,
traditions: univ.traditions,
aspects: univ.aspects |> Maybe.fromMaybe([]),
ic: univ.ic,
gr: univ.gr,
src: l10n.src,
errata: l10n.errata,
},
);
let all = (yamlData: Yaml_Raw.yamlData) =>
Yaml_Zip.zipBy(
Int.show,
t,
x => x.id,
x => x.id,
yamlData.liturgicalChantsUniv |> list(tUniv),
yamlData.liturgicalChantsL10n |> list(tL10n),
)
|> IntMap.fromList;
};

Some files were not shown because too many files have changed in this diff Show More