Compare commits

..

1 commit

Author SHA1 Message Date
cc7cb4a01d feat: wip work on making classes configurable 2022-04-06 01:14:07 +02:00
1748 changed files with 69380 additions and 82348 deletions

View file

@ -3,5 +3,6 @@
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
/dist /dist
client /.pnp.cjs
common /.pnp.loader.mjs
/.yarn/

View file

@ -3,13 +3,39 @@
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
module.exports = { module.exports = {
parser: "@typescript-eslint/parser", parser: "@typescript-eslint/parser",
parserOptions: { ecmaVersion: 2020, sourceType: "module" },
env: { browser: true }, parserOptions: {
extends: ["plugin:@typescript-eslint/recommended", "prettier"], ecmaVersion: 2020,
plugins: ["@typescript-eslint"], sourceType: "module",
overrides: [ },
{ files: ["./*.cjs"], rules: { "@typescript-eslint/no-var-requires": "off" } },
{ files: ["./spec/**/*"], env: { browser: false } }, env: {
], browser: true,
},
extends: ["plugin:@typescript-eslint/recommended", "plugin:jest/recommended", "plugin:prettier/recommended"],
plugins: ["@typescript-eslint", "jest"],
rules: {
// Specify any specific ESLint rules.
},
overrides: [
{
files: ["./*.cjs", "./*.js"],
rules: {
"@typescript-eslint/no-var-requires": "off",
},
},
{
files: ["./spec/**/*"],
env: {
browser: false,
},
extends: ["plugin:jest/recommended"],
plugins: ["jest"],
},
],
}; };

View file

@ -1,99 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
name: Bug Report
about: File a bug report
labels: ["bug", "to be confirmed"]
body:
- type: markdown
attributes:
value: |
Your issue may already have been reported! Please search on the [issue tracker](https://git.f3l.de/dungeonslayers/ds4/issues) before submitting a new one.
Thanks for taking the time to fill out this bug report! In order to make it effective, please provide the following information.
- type: markdown
attributes:
value: |
## Issue Description
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: What is the behavior that you expected?
validations:
required: true
- type: textarea
id: current
attributes:
label: Current Behavior
description: What is the current behavior, i.e., what happens actually?
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to Reproduce
description: What are the steps to reproduce the problem?
placeholder: |
1.
2.
3.
4.
validations:
required: true
- type: textarea
id: context
attributes:
label: Context
description: Please provide any additional context that might be helpful, e.g. log messages, screenshots, videos, or exports of problematic scenes or worlds.
validations:
required: false
- type: markdown
attributes:
value: |
## Environment Details
- type: input
id: version
attributes:
label: Version
description: Which version(s) of DS4 are you seeing the problem on?
validations:
required: true
- type: input
id: foundry-version
attributes:
label: Foundry VTT Version
description: Which version(s) and build of Foundry VTT are you seeing the problem on?
validations:
required: true
- type: input
id: os
attributes:
label: Operating System
description: Which operating system are you using? (Windows, OS X, Linux (which distro))
placeholder: Windows
validations:
required: true
- type: dropdown
id: browser
attributes:
label: Browser / App
description: Are you using a Browser or the native Electron application? (Select all that apply)
multiple: true
options:
- Native Electron App
- Chrome
- Firefox
- Microsoft Edge
- Safari
- Other
validations:
required: true
- type: input
id: modules
attributes:
label: Relevant Modules
description: Please list any other active modules (including their versions) that you think might be relevant.
validations:
required: false

View file

@ -1,5 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
blank_issues_enabled: false

View file

@ -1,28 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
name: Feature Request
description: Submit a feature request
labels: ["feature"]
body:
- type: markdown
attributes:
value: |
Your issue may already have been reported! Please search on the [issue tracker](https://git.f3l.de/dungeonslayers/ds4/issues) before submitting a new one.
In order to submit an effective feature request, please provide the following information.
- type: textarea
id: description
attributes:
label: Description
description: Please describe the proposal in as much detail as you feel is necessary.
validations:
required: true
- type: textarea
id: context
attributes:
label: Context
description: Is there anything else you can add about the proposal? You might want to link to related issues here if you haven't already.
validations:
required: false

12
.gitignore vendored
View file

@ -25,8 +25,10 @@ dist
results.xml results.xml
junit.xml junit.xml
# foundry # yarn
/client .yarn/*
/common !.yarn/releases
!.yarn/plugins
.pnpm-store/ !.yarn/sdks
!.yarn/versions
.pnp.*

184
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,184 @@
# SPDX-FileCopyrightText: 2021 Johannes Loher
# SPDX-FileCopyrightText: 2021 Oliver Rümpelein
#
# SPDX-License-Identifier: MIT
image: node:lts
stages:
- check
- build
- prepare-release
- release
- publish
cache: &global_cache
paths:
- .yarn/cache
lint:
stage: check
before_script:
- yarn install --immutable
script:
- yarn lint
cache:
<<: *global_cache
typecheck:
stage: check
before_script:
- yarn install --immutable
script:
- yarn typecheck
cache:
<<: *global_cache
test:
stage: check
before_script:
- yarn install --immutable
script:
- yarn test:ci
cache:
<<: *global_cache
artifacts:
when: always
reports:
junit:
- junit.xml
reuse:
stage: check
image:
name: fsfe/reuse:latest
entrypoint: [""]
script:
- reuse lint
build:
stage: build
before_script:
- yarn install --immutable
- if [[ ! -z ${CI_COMMIT_TAG+x} ]]; then export NODE_ENV=production; fi
script:
- yarn build
- mv dist ds4
cache:
<<: *global_cache
artifacts:
paths:
- ds4
expire_in: 1 week
publish-artifacts:
stage: prepare-release
image: alpine:latest
before_script:
- apk update
- apk add zip curl
script: |
zip -r ds4.zip ds4/*
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ds4.zip "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ds4/$CI_COMMIT_TAG/ds4.zip"
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ds4/system.json "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ds4/$CI_COMMIT_TAG/system.json"
rules:
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
changelog:
stage: prepare-release
before_script:
- yarn install --immutable
script:
- yarn changelog
cache:
<<: *global_cache
artifacts:
paths:
- CHANGELOG.md
rules:
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
.release-template: &release-template
stage: release
before_script:
- yarn install
- apt update
- apt install --yes jq
- REPOSITORY_URL=$(echo "${CI_REPOSITORY_URL}" | sed -e "s|gitlab-ci-token:.*@|${RELEASE_TOKEN}:${RELEASE_TOKEN_SECRET}@|g")
- git remote set-url origin $REPOSITORY_URL
- git config user.name $GITLAB_USER_LOGIN
- git config user.email $GITLAB_USER_EMAIL
- git branch -D ci-processing || true
- git checkout -b ci-processing
cache:
<<: *global_cache
script: |
yarn bump-version --release=${RELEASE_TYPE}
RELEASE_VERSION=$(jq -r '.version' < package.json)
git add package.json system.json
git --no-pager diff
git commit -m "chore(release): ${RELEASE_VERSION}"
git tag -f ${RELEASE_VERSION}
git push origin ci-processing:${CI_BUILD_REF_NAME} -o ci.skip
git push origin ${RELEASE_VERSION}
only:
- master
when: manual
release-patch:
variables:
RELEASE_TYPE: patch
<<: *release-template
release-minor:
variables:
RELEASE_TYPE: minor
<<: *release-template
release-major:
variables:
RELEASE_TYPE: major
<<: *release-template
release:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- echo 'release job'
rules:
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
release:
tag_name: $CI_COMMIT_TAG
description: "./CHANGELOG.md"
assets:
links:
- name: "ds4.zip"
url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ds4/$CI_COMMIT_TAG/ds4.zip"
filepath: /ds4.zip
link_type: package
- name: "system.json"
url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ds4/$CI_COMMIT_TAG/system.json"
filepath: /system.json
link_type: other
publish-latest-manifest:
stage: publish
image: alpine:latest
before_script:
- apk update
- apk add zip curl
script: |
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ds4/system.json "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ds4/latest/system.json"
rules:
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
publish-to-foundry-admin:
stage: publish
image: johannesloher/foundry-publish
variables:
FVTT_MANIFEST_PATH: ds4/system.json
FVTT_MANIFEST_URL: ${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}/downloads/system.json
FVTT_DELETE_OBSOLETE_VERSIONS: "true"
script: foundry-publish
rules:
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'

View file

@ -0,0 +1,48 @@
Your issue may already have been reported! Please search on the issue tracker (https://git.f3l.de/dungeonslayers/ds4/-/issues) before submitting a new one.
Thanks for taking the time to fill out this bug report! In order to make it effective, please provide the following information.
# Issue Description
## Expected Behavior
(What is the behavior that you expected?)
## Current Behavior
(What is the current behavior, i.e., what happens actually?)
## Steps to Reproduce
(What are the steps to reproduce the problem?)
1. ...
2. ...
3. ...
## Context
(Please provide any additional context that might be helpful, e.g. log messages,
screenshots, videos, or exports of problematic scenes or worlds.)
# Environment Details
## Version
(Which version(s) of DS4 are you seeing the problem on?)
## Foundry VTT Version
(Which version(s) and build of Foundry VTT are you seeing the problem on?)
## Operating System
(Which operating system are you using? (Windows, OS X, Linux (which distro)))
## Browser / App
(Are you using a Browser or the native Electron application?)
## Relevant Modules
(Please list any active modules (including their versions) that you think might be relevant.)

View file

@ -0,0 +1,11 @@
Your issue may already have been reported! Please search on the issue tracker (https://git.f3l.de/dungeonslayers/ds4/-/issues) before submitting a new one.
In order to submit an effective feature request, please provide the following information.
# Description
(Please describe the proposal in as much detail as you feel is necessary.)
# Context
(Is there anything else you can add about the proposal? You might want to link to related issues here if you haven't already.)

View file

@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2022 Johannes Loher
SPDX-License-Identifier: MIT

1
.husky/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
_

9
.husky/commit-msg Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2021 Johannes Loher
#
# SPDX-License-Identifier: MIT
. "$(dirname "$0")/_/husky.sh"
yarn run commitlint --edit "$1"

9
.husky/pre-commit Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2021 Johannes Loher
#
# SPDX-License-Identifier: MIT
. "$(dirname "$0")/_/husky.sh"
yarn run lint-staged

View file

@ -4,8 +4,7 @@
/dist /dist
/package-lock.json /package-lock.json
/node_modules/ /.pnp.cjs
/.pnp.loader.mjs
/.yarn/
/.vscode/ /.vscode/
client
common
pnpm-lock.yaml

11
.prettierrc.cjs Normal file
View file

@ -0,0 +1,11 @@
// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT
module.exports = {
semi: true,
trailingComma: "all",
singleQuote: false,
printWidth: 120,
tabWidth: 4,
};

View file

@ -1,11 +0,0 @@
// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT
export default {
semi: true,
trailingComma: "all",
singleQuote: false,
printWidth: 120,
tabWidth: 2,
};

View file

@ -3,6 +3,10 @@ Upstream-Name: ds4
Upstream-Contact: Johannes Loher <johannes.loher@fg4f.de> Upstream-Contact: Johannes Loher <johannes.loher@fg4f.de>
Source: https://git.f3l.de/dungeonslayers/ds4 Source: https://git.f3l.de/dungeonslayers/ds4
Files: .yarn/**
Copyright: Copyright (c) 2016-present, Yarn Contributors. All rights reserved.
License: BSD-2-Clause
Files: assets/icons/official/* Files: assets/icons/official/*
Copyright: 2021 Johannes Loher Copyright: 2021 Johannes Loher
License: CC-BY-NC-SA-4.0 License: CC-BY-NC-SA-4.0
@ -46,32 +50,3 @@ License: CC-BY-3.0
Files: assets/tokens/devin-night/* Files: assets/tokens/devin-night/*
Copyright: Devin Night, https://immortalnights.com/ Copyright: Devin Night, https://immortalnights.com/
License: LicenseRef-DevinNightTokenUsageRights License: LicenseRef-DevinNightTokenUsageRights
Files: packs/creatures/*
Copyright: 2021 Sascha Martens
2021 Johannes Loher
License: CC-BY-NC-SA-4.0
Files: packs/items/*
Copyright: 2021 Johannes Loher
License: CC-BY-NC-SA-4.0
Files: packs/languages-and-scripts/*
Copyright: 2021 Johannes Loher
License: CC-BY-NC-SA-4.0
Files: packs/racial-abilities/*
Copyright: 2021 Johannes Loher
License: CC-BY-NC-SA-4.0
Files: packs/special-creature-abilities/*
Copyright: 2021 Johannes Loher
License: CC-BY-NC-SA-4.0
Files: packs/spells/*
Copyright: 2021 Sascha Martens
License: CC-BY-NC-SA-4.0
Files: packs/talents/*
Copyright: 2022 Johannes Loher
License: CC-BY-NC-SA-4.0

6
.vscode/launch.json vendored
View file

@ -5,14 +5,12 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"type": "chrome", "type": "pwa-chrome",
"request": "launch", "request": "launch",
"runtimeExecutable": "/usr/bin/chromium", "runtimeExecutable": "/usr/bin/chromium",
"name": "Launch Chrome against localhost", "name": "Launch Chrome against localhost",
"url": "http://localhost:30000/game", "url": "http://localhost:30000/game",
"pathMapping": { "webRoot": "${workspaceFolder}/dist"
"/systems/ds4": "${workspaceFolder}/dist"
}
} }
] ]
} }

14
.vscode/settings.json vendored
View file

@ -1,4 +1,16 @@
{ {
"typescript.tsdk": "node_modules/typescript/lib", "search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"eslint.nodePath": ".yarn/sdks",
"prettier.prettierPath": ".yarn/sdks/prettier/index.js",
"typescript.tsdk": ".yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true, "typescript.enablePromptUseWorkspaceTsdk": true,
"importSorter.generalConfiguration.sortOnBeforeSave": true,
"importSorter.importStringConfiguration.maximumNumberOfImportExpressionsPerLine.type": "newLineEachExpressionAfterCountLimitExceptIfOnlyOne",
"importSorter.importStringConfiguration.maximumNumberOfImportExpressionsPerLine.count": 120,
"importSorter.importStringConfiguration.tabSize": 4,
"importSorter.importStringConfiguration.quoteMark": "double",
"importSorter.importStringConfiguration.trailingComma": "multiLine"
} }

View file

@ -1,70 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
variables:
- &node_image node:lts
- &enable_pnpm
- corepack enable
- corepack prepare pnpm@latest --activate
when:
- event: push
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: pull_request
- event: tag
- event: manual
steps:
install:
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm install --frozen-lockfile
lint:
group: check
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm lint
formatcheck:
group: check
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm format:check
typecheck:
group: check
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm typecheck
test:
group: check
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm test
reuse:
group: check
image: fsfe/reuse:latest
commands:
- reuse lint
commitlint:
group: check
image: *node_image
commands:
- <<: *enable_pnpm
- git fetch origin ${CI_COMMIT_TARGET_BRANCH}
- pnpm exec commitlint --from origin/${CI_COMMIT_TARGET_BRANCH}
when:
event: pull_request
build:
group: build
image: *node_image
commands:
- export APPDATA=$(pwd)
- <<: *enable_pnpm
- pnpm build

View file

@ -1,114 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
variables:
- &node_image node:lts
- &enable_pnpm
- corepack enable
- corepack prepare pnpm@latest --activate
- &is_latest_channel
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$"
- &is_beta_channel
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-[0-9]+$"
- &release_plugin woodpeckerci/plugin-gitea-release
- &release_base_settings
base_url: ${CI_FORGE_URL}
title: ${CI_COMMIT_TAG}
note: CHANGELOG.md
files:
- ${CI_REPO_NAME}.zip
- ${CI_REPO_NAME}/system.json
api_key:
from_secret: forge_token
when:
event: tag
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9]+)?$"
depends_on:
- checks
steps:
install:
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm install --frozen-lockfile
build:
image: *node_image
environment:
NODE_ENV: production
commands:
- export APPDATA=$(pwd)
- <<: *enable_pnpm
- pnpm build
package:
group: prepare-release
image: alpine:latest
commands:
- apk update
- apk add zip curl
- mv dist ${CI_REPO_NAME}
- zip -r ${CI_REPO_NAME}.zip ${CI_REPO_NAME}/*
changelog:
group: prepare-release
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm changelog
choose-latest-channel:
group: prepare-release
image: alpine:latest
commands:
- echo latest > .RELEASE_CHANNEL
when:
<<: *is_latest_channel
choose-beta-channel:
group: prepare-release
image: alpine:latest
commands:
- echo beta > .RELEASE_CHANNEL
when:
<<: *is_beta_channel
release-latest:
image: *release_plugin
settings:
<<: *release_base_settings
when:
<<: *is_latest_channel
release-beta:
image: *release_plugin
settings:
<<: *release_base_settings
prerelease: true
when:
<<: *is_beta_channel
publish-manifest:
group: publish
image: alpine:latest
commands:
- apk update
- apk add curl
- export RELEASE_CHANNEL=$(cat .RELEASE_CHANNEL)
- 'curl --header "Authorization: token $${FORGE_TOKEN}" -X "DELETE" "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
- 'curl --fail --header "Authorization: token $${FORGE_TOKEN}" --upload-file ${CI_REPO_NAME}/system.json "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
secrets:
- forge_token
publish-to-foundry-admin:
group: publish
image: johannesloher/foundry-publish
environment:
FVTT_DELETE_OBSOLETE_VERSIONS: "true"
commands:
- export FVTT_MANIFEST_PATH=${CI_REPO_NAME}/system.json
- export FVTT_MANIFEST_URL=${CI_REPO_URL}/releases/download/${CI_COMMIT_TAG}/system.json
- foundry-publish
secrets:
- fvtt_package_id
- fvtt_username
- fvtt_password
when:
<<: *is_latest_channel

View file

@ -1,47 +0,0 @@
# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
variables:
- &node_image node:lts
- &enable_pnpm
- corepack enable
- corepack prepare pnpm@latest --activate
when:
event: manual
branch: ${CI_REPO_DEFAULT_BRANCH}
depends_on:
- checks
steps:
install:
image: *node_image
commands:
- <<: *enable_pnpm
- pnpm install --frozen-lockfile
release:
image: *node_image
commands:
- <<: *enable_pnpm
- apt-get update
- apt-get install --yes jq
- export REPOSITORY_URL=$(echo "${CI_REPO_CLONE_URL}" | sed -e "s|://|://$${FORGE_TOKEN_NAME}:$${FORGE_TOKEN}@|g")
- git remote set-url origin $${REPOSITORY_URL}
- git config user.name woodpecker[bot]
- git config user.email woodpecker[bot]@${CI_SYSTEM_HOST}
- pnpm bump-version --release=${RELEASE_TYPE}
- pnpm exec prettier --write package.json system.json
- export RELEASE_VERSION=$(jq -r '.version' < package.json)
- git --no-pager diff
- git add package.json system.json
- 'git commit -m "chore(release): $${RELEASE_VERSION}"'
- git tag -f $${RELEASE_VERSION}
- git push origin ${CI_COMMIT_BRANCH}
- git push origin $${RELEASE_VERSION}
secrets:
- forge_token_name
- forge_token

File diff suppressed because one or more lines are too long

785
.yarn/releases/yarn-3.2.0.cjs vendored Executable file

File diff suppressed because one or more lines are too long

20
.yarn/sdks/eslint/bin/eslint.js vendored Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/bin/eslint.js
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint/bin/eslint.js your application uses
module.exports = absRequire(`eslint/bin/eslint.js`);

20
.yarn/sdks/eslint/lib/api.js vendored Normal file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint your application uses
module.exports = absRequire(`eslint`);

6
.yarn/sdks/eslint/package.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"name": "eslint",
"version": "8.11.0-sdk",
"main": "./lib/api.js",
"type": "commonjs"
}

5
.yarn/sdks/integrations.yml vendored Normal file
View file

@ -0,0 +1,5 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode

20
.yarn/sdks/prettier/index.js vendored Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/index.js
require(absPnpApiPath).setup();
}
}
// Defer to the real prettier/index.js your application uses
module.exports = absRequire(`prettier/index.js`);

6
.yarn/sdks/prettier/package.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"name": "prettier",
"version": "2.6.0-sdk",
"main": "./index.js",
"type": "commonjs"
}

20
.yarn/sdks/typescript/bin/tsc vendored Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsc
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsc your application uses
module.exports = absRequire(`typescript/bin/tsc`);

20
.yarn/sdks/typescript/bin/tsserver vendored Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsserver
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsserver your application uses
module.exports = absRequire(`typescript/bin/tsserver`);

20
.yarn/sdks/typescript/lib/tsc.js vendored Normal file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsc.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsc.js your application uses
module.exports = absRequire(`typescript/lib/tsc.js`);

196
.yarn/sdks/typescript/lib/tsserver.js vendored Normal file
View file

@ -0,0 +1,196 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// Update Oct 8 2021: VSCode changed their format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return process.platform === `win32`
? str.replace(/^\^?(zip:|\/zip)\/+/, ``)
: str.replace(/^\^?(zip:|\/zip)\/+/, `/`);
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK && process.env.VSCODE_IPC_HOOK.match(/Code\/1\.([1-5][0-9]|60)\./)) {
hostInfo += ` <1.61`;
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserver.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserver.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`));

View file

@ -0,0 +1,196 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// Update Oct 8 2021: VSCode changed their format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return process.platform === `win32`
? str.replace(/^\^?(zip:|\/zip)\/+/, ``)
: str.replace(/^\^?(zip:|\/zip)\/+/, `/`);
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK && process.env.VSCODE_IPC_HOOK.match(/Code\/1\.([1-5][0-9]|60)\./)) {
hostInfo += ` <1.61`;
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserverlibrary.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserverlibrary.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`));

20
.yarn/sdks/typescript/lib/typescript.js vendored Normal file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/typescript.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/typescript.js your application uses
module.exports = absRequire(`typescript/lib/typescript.js`);

6
.yarn/sdks/typescript/package.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"name": "typescript",
"version": "4.6.2-sdk",
"main": "./lib/typescript.js",
"type": "commonjs"
}

7
.yarnrc.yml Normal file
View file

@ -0,0 +1,7 @@
nodeLinker: pnp
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.2.0.cjs

3
.yarnrc.yml.license Normal file
View file

@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2021 Johannes Loher
SPDX-License-Identifier: MIT

View file

@ -0,0 +1,9 @@
Copyright (c) <year> <owner> All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -7,13 +7,6 @@ SPDX-License-Identifier: MIT
# DS4 # DS4
[![status-badge](https://ci.f3l.de/api/badges/5/status.svg)](https://ci.f3l.de/repos/5)
[![REUSE status](https://api.reuse.software/badge/git.f3l.de/dungeonslayers/ds4)](https://api.reuse.software/info/git.f3l.de/dungeonslayers/ds4)
[![Forge installs](https://img.shields.io/badge/dynamic/json?label=Forge%20Installs&query=package.installs&suffix=%25&url=https%3A%2F%2Fforge-vtt.com%2Fapi%2Fbazaar%2Fpackage%2Fds4&colorB=4aa94a)](https://forge-vtt.com/bazaar#package=ds4)
[![Supported foundry versions](https://img.shields.io/endpoint?url=https://foundryshields.com/version?url=https%3A%2F%2Fgit.f3l.de%2Fapi%2Fpackages%2Fdungeonslayers%2Fgeneric%2Fds4%2Flatest%2Fsystem.json)](https://git.f3l.de/dungeonslayers/ds4)
[![Matrix](https://img.shields.io/matrix/ds4%3Aim.f3l.de?server_fqdn=im.f3l.de&logo=matrix&color=0DBD8B)](https://matrix.to/#/#ds4:im.f3l.de)
[![Ko-fi](https://img.shields.io/badge/Ko--fi-ghostfvtt-00B9FE?logo=kofi)](https://ko-fi.com/ghostfvtt)
An implementation of the [Dungeonslayers] 4 game system for [Foundry Virtual An implementation of the [Dungeonslayers] 4 game system for [Foundry Virtual
Tabletop]. Tabletop].
@ -26,16 +19,16 @@ To install and use the Dungeonslayers 4 system for Foundry Virtual Tabletop,
find it in the list in the **Install System** dialog on the Setup menu of the find it in the list in the **Install System** dialog on the Setup menu of the
application. Alternatively, paste the following Manifest URL in that dialog: application. Alternatively, paste the following Manifest URL in that dialog:
https://git.f3l.de/api/packages/dungeonslayers/generic/ds4/latest/system.json https://git.f3l.de/api/v4/projects/dungeonslayers%2Fds4/packages/generic/ds4/latest/system.json
## Development ## Development
### Prerequisites ### Prerequisites
In order to build this system, recent versions of `node` and `pnpm` are In order to build this system, recent versions of `node` and `yarn` are
required. Most likely using `npm` or `yarn` also works but only `pnpm` is required. Most likely using `npm` also works but only `yarn` is officially
officially supported. We recommend using the latest lts version of `node`. If supported. We recommend using the latest lts version of `node`. If you use `nvm`
you use `nvm` to manage your `node` versions, you can simply run to manage your `node` versions, you can simply run
``` ```
nvm install nvm install
@ -46,7 +39,7 @@ in the project's root directory.
You also need to install the project's dependencies. To do so, run You also need to install the project's dependencies. To do so, run
``` ```
pnpm install yarn install
``` ```
### Building ### Building
@ -54,13 +47,13 @@ pnpm install
You can build the project by running You can build the project by running
``` ```
pnpm build yarn build
``` ```
Alternatively, you can run Alternatively, you can run
``` ```
pnpm watch yarn watch
``` ```
to watch for changes and automatically build as necessary. to watch for changes and automatically build as necessary.
@ -83,7 +76,7 @@ On platforms other than Linux you need to adjust the path accordingly.
Then run Then run
``` ```
pnpm link-package yarn link-package
``` ```
### Running the tests ### Running the tests
@ -91,12 +84,14 @@ pnpm link-package
You can run the tests with the following command: You can run the tests with the following command:
``` ```
pnpm test yarn test
``` ```
## Contributing ## Contributing
Code and content contributions are accepted. To report issues, please contact us in [Matrix](https://matrix.to/#/#ds4:im.f3l.de). Code and content contributions are accepted. Please feel free to submit issues
to the issue tracker or submit merge requests for code changes. To create an
issue, send a mail to [git+dungeonslayers-ds4-155-issue-@git.f3l.de].
## Licensing ## Licensing
@ -112,6 +107,7 @@ author(s). You can find these attributions in [ATTRIBUTION.md](ATTRIBUTION.md).
[Dungeonslayers]: https://www.dungeonslayers.net/ [Dungeonslayers]: https://www.dungeonslayers.net/
[Foundry Virtual Tabletop]: http://foundryvtt.com/ [Foundry Virtual Tabletop]: http://foundryvtt.com/
[git+dungeonslayers-ds4-155-issue-@git.f3l.de]: mailto:git+dungeonslayers-ds4-155-issue-@git.f3l.de
[LIMITED LICENSE AGREEMENT FOR MODULE DEVELOPMENT]: https://foundryvtt.com/article/license/ [LIMITED LICENSE AGREEMENT FOR MODULE DEVELOPMENT]: https://foundryvtt.com/article/license/
[REUSE]: https://reuse.software/ [REUSE]: https://reuse.software/
[.reuse/dep5]: .reuse/dep5 [.reuse/dep5]: .reuse/dep5

16
jest.config.js Normal file
View file

@ -0,0 +1,16 @@
// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
const config = {
preset: "ts-jest",
globals: {
"ts-jest": {
tsconfig: "<rootDir>/spec/tsconfig.json",
},
},
setupFiles: ["<rootDir>/spec/setup.ts"],
};
export default config;

View file

@ -1,8 +0,0 @@
{
"compilerOptions": {
"module": "es2022",
"target": "ES2022"
},
"exclude": ["node_modules", "dist"],
"include": ["src", "client", "common"]
}

View file

@ -1,391 +1,386 @@
{ {
"DS4.UserInteractionAdd": "Neu", "DS4.UserInteractionAdd": "Neu",
"DS4.UserInteractionAddItemTitle": "Item Erstellen", "DS4.UserInteractionAddItemTitle": "Item Erstellen",
"DS4.UserInteractionEditItemTitle": "Item Bearbeiten", "DS4.UserInteractionEditItemTitle": "Item Bearbeiten",
"DS4.UserInteractionDeleteItemTitle": "Item Löschen", "DS4.UserInteractionDeleteItemTitle": "Item Löschen",
"DS4.UserInteractionAddEffectTitle": "Effekt Erstellen", "DS4.UserInteractionAddEffectTitle": "Effekt Erstellen",
"DS4.UserInteractionEditEffectTitle": "Effekt Bearbeiten", "DS4.UserInteractionEditEffectTitle": "Effekt Bearbeiten",
"DS4.UserInteractionDeleteEffectTitle": "Effekt Löschen", "DS4.UserInteractionDeleteEffectTitle": "Effekt Löschen",
"DS4.DocumentImageAltText": "Bild von {name}", "DS4.DocumentImageAltText": "Bild von {name}",
"DS4.RollableImageRollableTitle": "Für {name} würfeln", "DS4.RollableImageRollableTitle": "Für {name} würfeln",
"DS4.DiceOverlayImageAltText": "Bild eines W20", "DS4.DiceOverlayImageAltText": "Bild eines W20",
"DS4.HeadingValues": "Werte", "DS4.HeadingValues": "Werte",
"DS4.HeadingBiography": "Biografie", "DS4.HeadingBiography": "Biografie",
"DS4.HeadingProperties": "Eigenschaften", "DS4.HeadingProperties": "Eigenschaften",
"DS4.HeadingEffects": "Effekte", "DS4.HeadingEffects": "Effekte",
"DS4.HeadingInventory": "Inventar", "DS4.HeadingInventory": "Inventar",
"DS4.HeadingAbilities": "Fähigkeiten", "DS4.HeadingAbilities": "Fähigkeiten",
"DS4.HeadingSpells": "Zaubersprüche", "DS4.HeadingSpells": "Zaubersprüche",
"DS4.HeadingDescription": "Beschreibung", "DS4.HeadingDescription": "Beschreibung",
"DS4.AttackType": "Angriffsart", "DS4.AttackType": "Angriffsart",
"DS4.AttackTypeAbbr": "AA", "DS4.AttackTypeAbbr": "AA",
"DS4.SortByAttackType": "Nach Angriffsart sortieren", "DS4.SortByAttackType": "Nach Angriffsart sortieren",
"DS4.DialogAttackTypeSelection": "Welche Angriffsart?", "DS4.DialogAttackTypeSelection": "Welche Angriffsart?",
"DS4.DialogAttributeTraitSelection": "Welches Attribut und welche Eigenschaft?", "DS4.DialogAttributeTraitSelection": "Welches Attribut und welche Eigenschaft?",
"DS4.WeaponBonus": "Waffenbonus", "DS4.WeaponBonus": "Waffenbonus",
"DS4.WeaponBonusAbbr": "WB", "DS4.WeaponBonusAbbr": "WB",
"DS4.SortByWeaponBonus": "Nach Waffenbonus sortieren", "DS4.SortByWeaponBonus": "Nach Waffenbonus sortieren",
"DS4.OpponentDefense": "Gegnerabwehr", "DS4.OpponentDefense": "Gegnerabwehr",
"DS4.OpponentDefenseAbbr": "GA", "DS4.OpponentDefenseAbbr": "GA",
"DS4.SortByOpponentDefense": "Nach Gegnerabwehr sortieren", "DS4.SortByOpponentDefense": "Nach Gegnerabwehr sortieren",
"DS4.OpponentDefenseMelee": "Gegnerabwehr für Schlagen", "DS4.AttackTypeMelee": "Schlagen",
"DS4.OpponentDefenseRanged": "Gegnerabwehr für Schießen", "DS4.AttackTypeRanged": "Schießen",
"DS4.AttackTypeMelee": "Schlagen", "DS4.AttackTypeMeleeRanged": "Schlagen + Schießen",
"DS4.AttackTypeRanged": "Schießen", "DS4.Description": "Beschreibung",
"DS4.AttackTypeMeleeRanged": "Schlagen + Schießen", "DS4.SortByDescription": "Nach Beschreibung sortieren",
"DS4.Description": "Beschreibung", "DS4.Quantity": "Menge",
"DS4.SortByDescription": "Nach Beschreibung sortieren", "DS4.SortByQuantity": "Nach Menge sortieren",
"DS4.Quantity": "Menge", "DS4.PriceGold": "Preis (Gold)",
"DS4.SortByQuantity": "Nach Menge sortieren", "DS4.StorageLocation": "Wo gelagert",
"DS4.PriceGold": "Preis (Gold)", "DS4.SortByStorageLocation": "Nach Lagerungsort sortieren",
"DS4.StorageLocation": "Wo gelagert", "DS4.ItemEquipped": "Ausgerüstet",
"DS4.SortByStorageLocation": "Nach Lagerungsort sortieren", "DS4.ItemEquippedAbbr": "A",
"DS4.ItemEquipped": "Ausgerüstet", "DS4.SortByItemEquipped": "Nach Ausgerüstet sortieren",
"DS4.ItemEquippedAbbr": "A", "DS4.ItemAvailability": "Verfügbarkeit",
"DS4.SortByItemEquipped": "Nach Ausgerüstet sortieren", "DS4.ItemAvailabilityHamlet": "Dorf",
"DS4.ItemAvailability": "Verfügbarkeit", "DS4.ItemAvailabilityVilage": "Kleinstadt",
"DS4.ItemAvailabilityHamlet": "Dorf", "DS4.ItemAvailabilityCity": "Großstadt",
"DS4.ItemAvailabilityVilage": "Kleinstadt", "DS4.ItemAvailabilityElves": "Elfen",
"DS4.ItemAvailabilityCity": "Großstadt", "DS4.ItemAvailabilityDwarves": "Zwerge",
"DS4.ItemAvailabilityElves": "Elfen", "DS4.ItemAvailabilityUnset": "nicht gesetzt",
"DS4.ItemAvailabilityDwarves": "Zwerge", "DS4.ItemAvailabilityNowhere": "nirgendwo",
"DS4.ItemAvailabilityUnset": "nicht gesetzt", "DS4.ItemName": "Name",
"DS4.ItemAvailabilityNowhere": "nirgendwo", "DS4.SortByItemName": "Nach Name sortieren",
"DS4.ItemName": "Name", "DS4.ItemTypeWeapon": "Waffe",
"DS4.SortByItemName": "Nach Name sortieren", "DS4.ItemTypeWeaponPlural": "Waffen",
"DS4.ItemTypeWeapon": "Waffe", "DS4.ItemTypeArmor": "Panzerung",
"DS4.ItemTypeWeaponPlural": "Waffen", "DS4.ItemTypeArmorPlural": "Panzerungen",
"DS4.ItemTypeArmor": "Panzerung", "DS4.ItemTypeShield": "Schild",
"DS4.ItemTypeArmorPlural": "Panzerungen", "DS4.ItemTypeShieldPlural": "Schilde",
"DS4.ItemTypeShield": "Schild", "DS4.ItemTypeSpell": "Zauberspruch",
"DS4.ItemTypeShieldPlural": "Schilde", "DS4.ItemTypeSpellPlural": "Zaubersprüche",
"DS4.ItemTypeSpell": "Zauberspruch", "DS4.ItemTypeEquipment": "Ausrüstung",
"DS4.ItemTypeSpellPlural": "Zaubersprüche", "DS4.ItemTypeEquipmentPlural": "Ausrüstung",
"DS4.ItemTypeEquipment": "Ausrüstung", "DS4.ItemTypeLoot": "Beute",
"DS4.ItemTypeEquipmentPlural": "Ausrüstung", "DS4.ItemTypeLootPlural": "Beute",
"DS4.ItemTypeLoot": "Beute", "DS4.ItemTypeTalent": "Talent",
"DS4.ItemTypeLootPlural": "Beute", "DS4.ItemTypeTalentPlural": "Talente",
"DS4.ItemTypeTalent": "Talent", "DS4.ItemTypeRacialAbility": "Volksfähigkeit",
"DS4.ItemTypeTalentPlural": "Talente", "DS4.ItemTypeRacialAbilityPlural": "Volksfähigkeiten",
"DS4.ItemTypeRacialAbility": "Volksfähigkeit", "DS4.ItemTypeLanguage": "Sprache",
"DS4.ItemTypeRacialAbilityPlural": "Volksfähigkeiten", "DS4.ItemTypeLanguagePlural": "Sprachen",
"DS4.ItemTypeLanguage": "Sprache", "DS4.ItemTypeAlphabet": "Schriftzeichen",
"DS4.ItemTypeLanguagePlural": "Sprachen", "DS4.ItemTypeAlphabetPlural": "Schriftzeichen",
"DS4.ItemTypeAlphabet": "Schriftzeichen", "DS4.ItemTypeSpecialCreatureAbility": "Besondere Kreaturenfähigkeit",
"DS4.ItemTypeAlphabetPlural": "Schriftzeichen", "DS4.ItemTypeSpecialCreatureAbilityPlural": "Besondere Kreaturenfähigkeiten",
"DS4.ItemTypeSpecialCreatureAbility": "Besondere Kreaturenfähigkeit", "DS4.ItemWeaponCheckFlavor": "{actor} greift mit {weapon} an.",
"DS4.ItemTypeSpecialCreatureAbilityPlural": "Besondere Kreaturenfähigkeiten", "DS4.ItemSpellCheckFlavor": "{actor} wirkt {spell}.",
"DS4.ItemWeaponCheckFlavor": "{actor} greift mit {weapon} an.", "DS4.ItemPropertiesArmor": "Panzerungseigenschaften",
"DS4.ItemWeaponCheckFlavorWithOpponentDefense": "{actor} greift mit {weapon} an.<br>Gegnerabwehr: {opponentDefense}", "DS4.ItemPropertiesEquipable": "Ausrüstungseigenschaften",
"DS4.ItemSpellCheckFlavor": "{actor} wirkt {spell}.", "DS4.ItemPropertiesPhysical": "Physische Eigenschaften",
"DS4.ItemSpellCheckFlavorWithOpponentDefense": "{actor} wirkt {spell}.<br>Gegnerabwehr: {opponentDefense}", "DS4.ItemPropertiesProtective": "Schützende Eigenschaften",
"DS4.ItemPropertiesArmor": "Panzerungseigenschaften", "DS4.ItemPropertiesSpecialCreatureAbility": "Besondere Kreaturenfähigkeitseigenschaften",
"DS4.ItemPropertiesEquipable": "Ausrüstungseigenschaften", "DS4.ItemPropertiesSpell": "Zaubereigenschaften",
"DS4.ItemPropertiesPhysical": "Physische Eigenschaften", "DS4.ItemPropertiesTalent": "Talenteigenschaften",
"DS4.ItemPropertiesProtective": "Schützende Eigenschaften", "DS4.ItemPropertiesWeapon": "Waffeneigenschaften",
"DS4.ItemPropertiesSpecialCreatureAbility": "Besondere Kreaturenfähigkeitseigenschaften", "DS4.ArmorType": "Panzerungstyp",
"DS4.ItemPropertiesSpell": "Zaubereigenschaften", "DS4.ArmorTypeAbbr": "PAT",
"DS4.ItemPropertiesTalent": "Talenteigenschaften", "DS4.SortByArmorType": "Nach Panzerungstyp sortieren",
"DS4.ItemPropertiesWeapon": "Waffeneigenschaften", "DS4.ArmorMaterialType": "Materialtyp",
"DS4.ArmorType": "Panzerungstyp", "DS4.ArmorMaterialTypeAbbr": "Mat.",
"DS4.ArmorTypeAbbr": "PAT", "DS4.SortByArmorMaterialType": "Nach Materialtyp sortieren",
"DS4.SortByArmorType": "Nach Panzerungstyp sortieren", "DS4.ArmorValue": "Panzerungswert",
"DS4.ArmorMaterialType": "Materialtyp", "DS4.ArmorValueAbbr": "PA",
"DS4.ArmorMaterialTypeAbbr": "Mat.", "DS4.SortByArmorValue": "Nach Panzerungswert sortieren",
"DS4.SortByArmorMaterialType": "Nach Materialtyp sortieren", "DS4.ArmorTypeBody": "Körper",
"DS4.ArmorValue": "Panzerungswert", "DS4.ArmorTypeBodyAbbr": "Körper",
"DS4.ArmorValueAbbr": "PA", "DS4.ArmorTypeHelmet": "Helm",
"DS4.SortByArmorValue": "Nach Panzerungswert sortieren", "DS4.ArmorTypeHelmetAbbr": "Helm",
"DS4.ArmorTypeBody": "Körper", "DS4.ArmorTypeVambrace": "Armschienen",
"DS4.ArmorTypeBodyAbbr": "Körper", "DS4.ArmorTypeVambraceAbbr": "Arm",
"DS4.ArmorTypeHelmet": "Helm", "DS4.ArmorTypeGreaves": "Beinschienen",
"DS4.ArmorTypeHelmetAbbr": "Helm", "DS4.ArmorTypeGreavesAbbr": "Bein",
"DS4.ArmorTypeVambrace": "Armschienen", "DS4.ArmorTypeVambraceGreaves": "Armschienen + Beinschienen",
"DS4.ArmorTypeVambraceAbbr": "Arm", "DS4.ArmorTypeVambraceGreavesAbbr": "A+B",
"DS4.ArmorTypeGreaves": "Beinschienen", "DS4.ArmorMaterialTypeCloth": "Stoff",
"DS4.ArmorTypeGreavesAbbr": "Bein", "DS4.ArmorMaterialTypeClothAbbr": "Stoff",
"DS4.ArmorTypeVambraceGreaves": "Armschienen + Beinschienen", "DS4.ArmorMaterialTypeLeather": "Leder",
"DS4.ArmorTypeVambraceGreavesAbbr": "A+B", "DS4.ArmorMaterialTypeLeatherAbbr": "Leder",
"DS4.ArmorMaterialTypeCloth": "Stoff", "DS4.ArmorMaterialTypeChain": "Ketten",
"DS4.ArmorMaterialTypeClothAbbr": "Stoff", "DS4.ArmorMaterialTypeChainAbbr": "Ketten",
"DS4.ArmorMaterialTypeLeather": "Leder", "DS4.ArmorMaterialTypePlate": "Platten",
"DS4.ArmorMaterialTypeLeatherAbbr": "Leder", "DS4.ArmorMaterialTypePlateAbbr": "Platten",
"DS4.ArmorMaterialTypeChain": "Ketten", "DS4.ArmorMaterialTypeNatural": "Natürlich",
"DS4.ArmorMaterialTypeChainAbbr": "Ketten", "DS4.ArmorMaterialTypeNaturalAbbr": "Natürlich",
"DS4.ArmorMaterialTypePlate": "Platten", "DS4.SpellType": "Zauberspruchtyp",
"DS4.ArmorMaterialTypePlateAbbr": "Platten", "DS4.SpellTypeAbbr": "T",
"DS4.ArmorMaterialTypeNatural": "Natürlich", "DS4.SpellTypeDescription": "Der Typ des Zauberspruchs.",
"DS4.ArmorMaterialTypeNaturalAbbr": "Natürlich", "DS4.SortBySpellType": "Nach Zauberspruchtyp sortieren",
"DS4.SpellType": "Zauberspruchtyp", "DS4.SpellTypeSpellcasting": "Zaubern",
"DS4.SpellTypeAbbr": "T", "DS4.SpellTypeTargetedSpellcasting": "Zielzaubern",
"DS4.SpellTypeDescription": "Der Typ des Zauberspruchs.", "DS4.SpellCategory": "Kategorie",
"DS4.SortBySpellType": "Nach Zauberspruchtyp sortieren", "DS4.SpellCategoryDescription": "Eine Kategorie, der der Zauberspruch zugehörig ist.",
"DS4.SpellTypeSpellcasting": "Zaubern", "DS4.SpellCategoryHealing": "Heilung",
"DS4.SpellTypeTargetedSpellcasting": "Zielzaubern", "DS4.SpellCategoryFire": "Feuer",
"DS4.SpellGroups": "Zaubergruppen", "DS4.SpellCategoryIce": "Eis",
"DS4.SpellGroupsDescription": "Zaubergruppen, denen der Zauberspruch zugehörig ist.", "DS4.SpellCategoryLight": "Licht",
"DS4.SpellGroupLightning": "Blitz", "DS4.SpellCategoryDarkness": "Schatten",
"DS4.SpellGroupEarth": "Erde, Fels, Stein", "DS4.SpellCategoryMindAffecting": "Geistesbeeinflussend",
"DS4.SpellGroupWater": "Wasser", "DS4.SpellCategoryElectricity": "Elektrizität",
"DS4.SpellGroupIce": "Eis, Frost", "DS4.SpellCategoryNone": "Keine",
"DS4.SpellGroupFire": "Feuer", "DS4.SpellCategoryUnset": "Nicht gesetzt",
"DS4.SpellGroupHealing": "Heilung", "DS4.SpellModifier": "Zauberbonus",
"DS4.SpellGroupLight": "Licht", "DS4.SpellModifierAbbr": "ZB",
"DS4.SpellGroupAir": "Luft", "DS4.SpellModifierDescription": "Der Zauberbonus auf die Probe.",
"DS4.SpellGroupTransport": "Transport", "DS4.SortBySpellModifier": "Nach Zauberbonus sortieren",
"DS4.SpellGroupDamage": "Schaden", "DS4.SpellDistance": "Distanz",
"DS4.SpellGroupShadow": "Schatten", "DS4.SpellDistanceDescription": "Die maximale Entfernung zum Ziel. „Selbst“ bedeutet, dass nur der Zauberwirker selbst das Ziel des Zaubers sein kann.",
"DS4.SpellGroupProtection": "Schutz", "DS4.SpellEffectRadius": "Wirkungsradius",
"DS4.SpellGroupMindAffecting": "Geistesbeeinflussend", "DS4.SpellEffectRadiusDescription": "Der Wirkungsradius des Zaubers.",
"DS4.SpellGroupDemonology": "Dämonologie", "DS4.SpellDuration": "Dauer",
"DS4.SpellGroupNecromancy": "Nekromantie", "DS4.SpellDurationDescription": "Die Wirkungszeit des Zaubers.",
"DS4.SpellGroupTransmutation": "Verwandlung", "DS4.CooldownDuration": "Abklingzeit",
"DS4.SpellGroupArea": "Fläche", "DS4.CooldownDurationDescription": "Die Dauer, die der Zauber nach erfolgreichem Wirken nicht einsetzbar ist.",
"DS4.SpellModifier": "Zauberbonus", "DS4.CooldownDuration0R": "0 Kampfrunden",
"DS4.SpellModifierNumerical": "Zauberbonus (numerisch)", "DS4.CooldownDuration1R": "1 Kampfrunde",
"DS4.SpellModifierComplex": "Zauberbonus (komplex)", "DS4.CooldownDuration2R": "2 Kampfrunden",
"DS4.SpellModifierAbbr": "ZB", "DS4.CooldownDuration5R": "5 Kampfrunden",
"DS4.SpellModifierNumericalDescription": "Der numerische Zauberbonus auf die Probe.", "DS4.CooldownDuration10R": "10 Kampfrunden",
"DS4.SpellModifierComplexDescription": "Ein komplexer Zauberbonus auf die Probe (zum Beispiel abhängig von Werten des Ziels). Wenn diese Art von Zauberbonus angegeben ist, wird der numerische ignoriert.", "DS4.CooldownDuration100R": "100 Kampfrunden",
"DS4.SortBySpellModifier": "Nach Zauberbonus sortieren", "DS4.CooldownDuration1D": "1 Tag",
"DS4.SpellDistance": "Distanz", "DS4.CooldownDurationD20D": "W20 Tage",
"DS4.SpellDistanceDescription": "Die maximale Entfernung zum Ziel. „Selbst“ bedeutet, dass nur der Zauberwirker selbst das Ziel des Zaubers sein kann.", "DS4.SpellMinimumLevel": "Zugangsstufe",
"DS4.SpellEffectRadius": "Wirkungsradius", "DS4.SpellMinimumLevelDescription": "Die minimale Stufe, ab der ein Zauberwirker den Zauberspruch erlernen kann.",
"DS4.SpellEffectRadiusDescription": "Der Wirkungsradius des Zaubers.", "DS4.SpellCasterClassHealer": "Heiler",
"DS4.SpellDuration": "Dauer", "DS4.SpellCasterClassSorcerer": "Schwarzmagier",
"DS4.SpellDurationDescription": "Die Wirkungszeit des Zaubers.", "DS4.SpellCasterClassWizard": "Zauberer",
"DS4.CooldownDuration": "Abklingzeit", "DS4.SpellPrice": "Preis (Gold)",
"DS4.CooldownDurationDescription": "Die Dauer, die der Zauber nach erfolgreichem Wirken nicht einsetzbar ist.", "DS4.SpellPriceDescription": "Der Kaufpreis des Zauberspruchs.",
"DS4.CooldownDuration0R": "0 Kampfrunden", "DS4.EffectEnabled": "Aktiv",
"DS4.CooldownDuration1R": "1 Kampfrunde", "DS4.EffectEnabledAbbr": "A",
"DS4.CooldownDuration2R": "2 Kampfrunden", "DS4.EffectEffectivelyEnabled": "Effektiv Aktiv (unter Betrachtung, ob ein eventuelles Quellen-Item ausgerüstet ist usw.)",
"DS4.CooldownDuration5R": "5 Kampfrunden", "DS4.EffectEffectivelyEnabledAbbr": "E",
"DS4.CooldownDuration10R": "10 Kampfrunden", "DS4.EffectLabel": "Bezeichnung",
"DS4.CooldownDuration100R": "100 Kampfrunden", "DS4.EffectSourceName": "Quelle",
"DS4.CooldownDuration1D": "1 Tag", "DS4.EffectFactor": "Faktor (wie oft der Effekt angewendet wird)",
"DS4.CooldownDurationD20D": "W20 Tage", "DS4.EffectFactorAbbr": "F",
"DS4.SpellAllowsDefense": "Erlaubt Abwehr", "DS4.ActorName": "Name",
"DS4.SpellAllowsDefenseDescription": "Ist eine Abwehren-Probe gegen diesen Zauber erlaubt?", "DS4.ActorImageAltText": "Bild des Aktors",
"DS4.SpellMinimumLevel": "Zugangsstufe", "DS4.ActorTypeCharacter": "Charakter",
"DS4.SpellMinimumLevelDescription": "Die minimale Stufe, ab der ein Zauberwirker den Zauberspruch erlernen kann.", "DS4.ActorTypeCreature": "Kreatur",
"DS4.SpellCasterClassHealer": "Heiler", "DS4.Attribute": "Attribut",
"DS4.SpellCasterClassSorcerer": "Schwarzmagier", "DS4.AttributeBody": "Körper",
"DS4.SpellCasterClassWizard": "Zauberer", "DS4.AttributeMobility": "Agilität",
"DS4.SpellPrice": "Preis (Gold)", "DS4.AttributeMind": "Geist",
"DS4.SpellPriceDescription": "Der Kaufpreis des Zauberspruchs.", "DS4.Trait": "Eigenschaft",
"DS4.EffectEnabled": "Eingeschaltet", "DS4.TraitStrength": "Stärke",
"DS4.EffectEnabledAbbr": "E", "DS4.TraitConstitution": "Härte",
"DS4.EffectActive": "Aktiv (unter Betrachtung, ob ein eventuelles Quellen-Item ausgerüstet ist usw.)", "DS4.TraitAgility": "Bewegung",
"DS4.EffectActiveAbbr": "A", "DS4.TraitDexterity": "Geschick",
"DS4.EffectName": "Name", "DS4.TraitIntellect": "Verstand",
"DS4.EffectSourceName": "Quelle", "DS4.TraitAura": "Aura",
"DS4.EffectFactor": "Faktor (wie oft der Effekt angewendet wird)", "DS4.CombatValuesHitPoints": "Lebenskraft",
"DS4.EffectFactorAbbr": "F", "DS4.CombatValuesHitPointsCurrent": "Aktuelle Lebenskraft",
"DS4.ActorName": "Name", "DS4.CombatValuesHitPointsCurrentAbbr": "LK",
"DS4.ActorImageAltText": "Bild des Aktors", "DS4.CombatValuesDefense": "Abwehr",
"DS4.ActorTypeCharacter": "Charakter", "DS4.CombatValuesInitiative": "Initiative",
"DS4.ActorTypeCreature": "Kreatur", "DS4.CombatValuesMovement": "Laufen",
"DS4.Attribute": "Attribut", "DS4.CombatValuesMeleeAttack": "Schlagen",
"DS4.AttributeBody": "Körper", "DS4.CombatValuesRangedAttack": "Schießen",
"DS4.AttributeMobility": "Agilität", "DS4.CombatValuesSpellcasting": "Zaubern",
"DS4.AttributeMind": "Geist", "DS4.CombatValuesTargetedSpellcasting": "Zielzaubern",
"DS4.Trait": "Eigenschaft", "DS4.CombatValuesHitPointsSheet": "Lebenskraft",
"DS4.TraitStrength": "Stärke", "DS4.CombatValuesDefenseSheet": "Abwehr",
"DS4.TraitConstitution": "Härte", "DS4.CombatValuesInitiativeSheet": "Initiative",
"DS4.TraitAgility": "Bewegung", "DS4.CombatValuesMovementSheet": "Laufen",
"DS4.TraitDexterity": "Geschick", "DS4.CombatValuesMeleeAttackSheet": "Schlagen",
"DS4.TraitIntellect": "Verstand", "DS4.CombatValuesRangedAttackSheet": "Schießen",
"DS4.TraitAura": "Aura", "DS4.CombatValuesSpellcastingSheet": "Zaubern",
"DS4.CombatValuesHitPoints": "Lebenskraft", "DS4.CombatValuesTargetedSpellcastingSheet": "Zielzaubern",
"DS4.CombatValuesHitPointsCurrent": "Aktuelle Lebenskraft", "DS4.CharacterBaseInfoRace": "Volk",
"DS4.CombatValuesHitPointsCurrentAbbr": "LK", "DS4.CharacterBaseInfoClass": "Klasse",
"DS4.CombatValuesDefense": "Abwehr", "DS4.CharacterBaseInfoHeroClass": "Heldenklasse",
"DS4.CombatValuesInitiative": "Initiative", "DS4.CharacterBaseInfoCulture": "Kultur",
"DS4.CombatValuesMovement": "Laufen", "DS4.CharacterProgressionLevel": "Stufe",
"DS4.CombatValuesMeleeAttack": "Schlagen", "DS4.CharacterProgressionLevelAbbr": "ST",
"DS4.CombatValuesRangedAttack": "Schießen", "DS4.CharacterProgressionExperiencePoints": "Erfahrungspunkte",
"DS4.CombatValuesSpellcasting": "Zaubern", "DS4.CharacterProgressionExperiencePointsAbbr": "EP",
"DS4.CombatValuesTargetedSpellcasting": "Zielzaubern", "DS4.CharacterProgressionTalentPoints": "Talentpunkte",
"DS4.CombatValuesHitPointsSheet": "Lebenskraft", "DS4.CharacterProgressionProgressPoints": "Lernpunkte",
"DS4.CombatValuesDefenseSheet": "Abwehr", "DS4.CharacterSlayerPoints": "Slayerpunkte",
"DS4.CombatValuesInitiativeSheet": "Initiative", "DS4.CharacterSlayerPointsAbbr": "SP",
"DS4.CombatValuesMovementSheet": "Laufen", "DS4.ClassNone": "Keine",
"DS4.CombatValuesMeleeAttackSheet": "Schlagen", "DS4.ClassFighter": "Krieger",
"DS4.CombatValuesRangedAttackSheet": "Schießen", "DS4.ClassScout": "Späher",
"DS4.CombatValuesSpellcastingSheet": "Zaubern", "DS4.ClassHealer": "Heiler",
"DS4.CombatValuesTargetedSpellcastingSheet": "Zielzaubern", "DS4.ClassWizard": "Zauberer",
"DS4.CharacterBaseInfoRace": "Volk", "DS4.ClassSorcerer": "Schwarzmagier",
"DS4.CharacterBaseInfoClass": "Klasse", "DS4.HeroClassNone": "Keine",
"DS4.CharacterBaseInfoHeroClass": "Heldenklasse", "DS4.HeroClassBerserker": "Berserker",
"DS4.CharacterBaseInfoCulture": "Kultur", "DS4.HeroClassWeaponMaster": "Waffenmeister",
"DS4.CharacterProgressionLevel": "Stufe", "DS4.HeroClassPaladin": "Paladin",
"DS4.CharacterProgressionLevelAbbr": "ST", "DS4.HeroClassAssassin": "Attentäter",
"DS4.CharacterProgressionExperiencePoints": "Erfahrungspunkte", "DS4.HeroClassRanger": "Waldläufer",
"DS4.CharacterProgressionExperiencePointsAbbr": "EP", "DS4.HeroClassRogue": "Meisterdieb",
"DS4.CharacterProgressionTalentPoints": "Talentpunkte", "DS4.HeroClassCleric": "Kleriker",
"DS4.CharacterProgressionProgressPoints": "Lernpunkte", "DS4.HeroClassDruid": "Druide",
"DS4.CharacterSlayerPoints": "Slayerpunkte", "DS4.HeroClassMonk": "Kampfmönch",
"DS4.CharacterSlayerPointsAbbr": "SP", "DS4.HeroClassArchmage": "Erzmagier",
"DS4.TalentRank": "Rang", "DS4.HeroClassElementalist": "Elementarist",
"DS4.SortByTalentRank": "Nach Rang sortieren", "DS4.HeroClassBattleMage": "Kriegszauberer",
"DS4.TalentRankBase": "Erworben", "DS4.HeroClassBloodMage": "Blutmagier",
"DS4.TalentRankMax": "Maximum", "DS4.HeroClassDemonologist": "Dämonologe",
"DS4.TalentRankMod": "Zusätzlich", "DS4.HeroClassNecromancer": "Nekromant",
"DS4.TalentRankTotal": "Gesamt", "DS4.TalentRank": "Rang",
"DS4.CharacterLanguageLanguages": "Sprachen", "DS4.SortByTalentRank": "Nach Rang sortieren",
"DS4.CharacterLanguageAlphabets": "Schriftzeichen", "DS4.TalentRankBase": "Erworben",
"DS4.SpecialCreatureAbilityExperiencePoints": "Erfahrungspunkte", "DS4.TalentRankMax": "Maximum",
"DS4.CharacterProfileBiography": "Biographie", "DS4.TalentRankMod": "Zusätzlich",
"DS4.CharacterProfileGender": "Geschlecht", "DS4.TalentRankTotal": "Gesamt",
"DS4.CharacterProfileBirthday": "Geburtstag", "DS4.TalentRankOf": "von",
"DS4.CharacterProfileBirthplace": "Geburtsort", "DS4.CharacterLanguageLanguages": "Sprachen",
"DS4.CharacterProfileAge": "Alter", "DS4.CharacterLanguageAlphabets": "Schriftzeichen",
"DS4.CharacterProfileHeight": "Größe [cm]", "DS4.SpecialCreatureAbilityExperiencePoints": "Erfahrungspunkte",
"DS4.CharacterProfileHairColor": "Haarfarbe", "DS4.CharacterProfileBiography": "Biographie",
"DS4.CharacterProfileWeight": "Gewicht [kg]", "DS4.CharacterProfileGender": "Geschlecht",
"DS4.CharacterProfileEyeColor": "Augenfarbe", "DS4.CharacterProfileBirthday": "Geburtstag",
"DS4.CharacterProfileSpecialCharacteristics": "Besondere Eigenschaften", "DS4.CharacterProfileBirthplace": "Geburtsort",
"DS4.CharacterCurrencyGold": "Gold", "DS4.CharacterProfileAge": "Alter",
"DS4.CharacterCurrencySilver": "Silber", "DS4.CharacterProfileHeight": "Größe [cm]",
"DS4.CharacterCurrencyCopper": "Kupfer", "DS4.CharacterProfileHairColor": "Haarfarbe",
"DS4.CharacterCurrency": "Währung", "DS4.CharacterProfileWeight": "Gewicht [kg]",
"DS4.CreatureTypeAnimal": "Tier", "DS4.CharacterProfileEyeColor": "Augenfarbe",
"DS4.CreatureTypeConstruct": "Konstrukt", "DS4.CharacterProfileSpecialCharacteristics": "Besondere Eigenschaften",
"DS4.CreatureTypeHumanoid": "Humanoid", "DS4.CharacterCurrencyGold": "Gold",
"DS4.CreatureTypeMagicalEntity": "Magisches Wesen", "DS4.CharacterCurrencySilver": "Silber",
"DS4.CreatureTypePlantBeing": "Pflanzenwesen", "DS4.CharacterCurrencyCopper": "Kupfer",
"DS4.CreatureTypeUndead": "Untot", "DS4.CharacterCurrency": "Währung",
"DS4.CreatureSizeCategoryTiny": "Winzig", "DS4.CreatureTypeAnimal": "Tier",
"DS4.CreatureSizeCategorySmall": "Klein", "DS4.CreatureTypeConstruct": "Konstrukt",
"DS4.CreatureSizeCategoryNormal": "Normal", "DS4.CreatureTypeHumanoid": "Humanoid",
"DS4.CreatureSizeCategoryLarge": "Groß", "DS4.CreatureTypeMagicalEntity": "Magisches Wesen",
"DS4.CreatureSizeCategoryHuge": "Riesig", "DS4.CreatureTypePlantBeing": "Pflanzenwesen",
"DS4.CreatureSizeCategoryColossal": "Gewaltig", "DS4.CreatureTypeUndead": "Untot",
"DS4.CreatureBaseInfoLoot": "Beute", "DS4.CreatureSizeCategoryTiny": "Winzig",
"DS4.CreatureBaseInfoFoeFactor": "Gegnerhärte", "DS4.CreatureSizeCategorySmall": "Klein",
"DS4.CreatureBaseInfoCreatureType": "Kreaturengruppe", "DS4.CreatureSizeCategoryNormal": "Normal",
"DS4.CreatureBaseInfoSizeCategory": "Größenkategorie", "DS4.CreatureSizeCategoryLarge": "Groß",
"DS4.CreatureBaseInfoExperiencePoints": "Erfahrungspunkte", "DS4.CreatureSizeCategoryHuge": "Riesig",
"DS4.CreatureBaseInfoDescription": "Beschreibung", "DS4.CreatureSizeCategoryColossal": "Gewaltig",
"DS4.WarningActorCannotOwnItem": "Der Aktor '{actorName}' vom Typ '{actorType}' kann das Item '{itemName}' vom Typ '{itemType}' nicht besitzen.", "DS4.CreatureBaseInfoLoot": "Beute",
"DS4.ErrorDiceCoupFumbleOverlap": "Es gibt eine Überlappung zwischen Patzern und Immersiegen.", "DS4.CreatureBaseInfoFoeFactor": "Gegnerhärte",
"DS4.ErrorSlayingDiceRecursionLimitExceeded": "Die maximale Rekursionstiefe für slayende Würfelwürfe wurde überschritten.", "DS4.CreatureBaseInfoCreatureType": "Kreaturengruppe",
"DS4.ErrorInvalidNumberOfDice": "Ungültige Anzahl an Würfeln.", "DS4.CreatureBaseInfoSizeCategory": "Größenkategorie",
"DS4.ErrorInvalidActorType": "Ungültiger Aktortyp '{type}'.", "DS4.CreatureBaseInfoExperiencePoints": "Erfahrungspunkte",
"DS4.ErrorInvalidItemType": "Ungültiger Itemtyp '{type}'.", "DS4.CreatureBaseInfoDescription": "Beschreibung",
"DS4.ErrorDuringMigration": "Fehler während der Aktualisierung des DS4 Systems von Migrationsversion {currentVersion} auf {targetVersion}. Der Fehler trat während der Ausführung des Migrationsskripts mit der Version {migrationVersion} auf. Spätere Migrationsskripte wurden nicht ausgeführt. Mehr Details finden Sie in der Entwicklerkonsole (F12).", "DS4.WarningManageActiveEffectOnOwnedItem": "Das Verwalten von aktiven Effekten innerhalb eines besessen Items wird derzeit nicht unterstützt und wird in einem nachfolgenden Update hinzugefügt. Falls Sie eigentlich den auf den Aktor übertragenen Effekt verwalten wollen, können Sie dies im 'Effekte'-Tab des Aktorbogens tun.",
"DS4.ErrorDuringCompendiumMigration": "Fehler während der Aktualisierung Kompendiums '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion}. Der Fehler trat während der Ausführung des Migrationsskripts mit der Version {migrationVersion} auf. Spätere Migrationsskripte wurden nicht ausgeführt. Mehr Details finden Sie in der Entwicklerkonsole (F12).", "DS4.WarningActorCannotOwnItem": "Der Aktor '{actorName}' vom Typ '{actorType}' kann das Item '{itemName}' vom Typ '{itemType}' nicht besitzen.",
"DS4.ErrorCannotRollUnownedItem": "Für das Item '{name}' ({id}) kann nicht gewürfelt werden, da es keinem Aktor gehört.", "DS4.ErrorDiceCoupFumbleOverlap": "Es gibt eine Überlappung zwischen Patzern und Immersiegen.",
"DS4.ErrorRollingForItemTypeNotPossible": "Würfeln ist für Items vom Typ '{type}' nicht möglich.", "DS4.ErrorSlayingDiceRecursionLimitExceeded": "Die maximale Rekursionstiefe für slayende Würfelwürfe wurde überschritten.",
"DS4.ErrorUnexpectedAttackType": "Unerwartete Angriffsart '{actualType}', erwartete Angriffsarten: {expectedTypes}", "DS4.ErrorInvalidNumberOfDice": "Ungültige Anzahl an Würfeln.",
"DS4.ErrorUnexpectedAttribute": "Unerwartetes Attribut '{actualAttribute}', erwartete Attribute: {expectedTypes}", "DS4.ErrorInvalidActorType": "Ungültiger Aktortyp '{type}'.",
"DS4.ErrorUnexpectedTrait": "Unerwartete Eigenschaft '{actualTrait}', erwartete Eigenschaften: {expectedTypes}", "DS4.ErrorInvalidItemType": "Ungültiger Itemtyp '{type}'.",
"DS4.ErrorCanvasIsNotInitialized": "Canvas ist noch nicht initialisiert.", "DS4.ErrorDuringMigration": "Fehler während der Aktualisierung des DS4 Systems von Migrationsversion {currentVersion} auf {targetVersion}. Der Fehler trat während der Ausführung des Migrationsskripts mit der Version {migrationVersion} auf. Spätere Migrationsskripte wurden nicht ausgeführt. Mehr Details finden Sie in der Entwicklerkonsole (F12).",
"DS4.ErrorCannotDragMissingCheck": "Die Probe '{check}' per Drag & Drop zu ziehen ist nicht möglich, denn sie existiert nicht.", "DS4.ErrorDuringCompendiumMigration": "Fehler während der Aktualisierung Kompendiums '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion}. Der Fehler trat während der Ausführung des Migrationsskripts mit der Version {migrationVersion} auf. Spätere Migrationsskripte wurden nicht ausgeführt. Mehr Details finden Sie in der Entwicklerkonsole (F12).",
"DS4.WarningItemMustBeEquippedToBeRolled": "Um für das Item '{name}' ({id}) vom Typ '{type}' zu würfeln, muss es ausgerüstet sein.", "DS4.ErrorCannotRollUnownedItem": "Für das Item '{name}' ({id}) kann nicht gewürfelt werden, da es keinem Aktor gehört.",
"DS4.WarningMustControlActorToUseRollItemMacro": "Um ein Item-Würfel-Makro zu nutzen muss ein Aktor kontrolliert werden.", "DS4.ErrorRollingForItemTypeNotPossible": "Würfeln ist für Items vom Typ '{type}' nicht möglich.",
"DS4.WarningMustControlActorToUseRollCheckMacro": "Um ein Proben-Würfel-Makro zu nutzen muss ein Aktor kontrolliert werden.", "DS4.ErrorUnexpectedAttackType": "Unerwartete Angriffsart '{actualType}', erwartete Angriffsarten: {expectedTypes}",
"DS4.WarningControlledActorDoesNotHaveItem": "Der kontrollierte Aktor '{actorName}' ({actorId}) hat kein Item mit der ID '{itemId}'.", "DS4.ErrorUnexpectedAttribute": "Unerwartetes Attribut '{actualAttribute}', erwartete Attribute: {expectedTypes}",
"DS4.WarningItemIsNotRollable": "Für das Item '{name}' ({id}) vom Typ '{type}' kann nicht gewürfelt werden.", "DS4.ErrorUnexpectedTrait": "Unerwartete Eigenschaft '{actualTrait}', erwartete Eigenschaften: {expectedTypes}",
"DS4.WarningMacrosCanOnlyBeCreatedForOwnedItems": "Makros können nur für besessene Items angelegt werden.", "DS4.ErrorCanvasIsNotInitialized": "Canvas ist noch nicht initialisiert.",
"DS4.WarningInvalidCheckDropped": "Eine ungültige Probe wurde auf die Hotbar gezogen.", "DS4.ErrorCannotDragMissingCheck": "Die Probe '{check}' per Drag & Drop zu ziehen ist nicht möglich, denn sie existiert nicht.",
"DS4.WarningSystemUpdateCompletedWithErrors": "Aktualisierung des DS4 Systems von Migrationsversion {currentVersion} auf {targetVersion} abgeschlossen, aber es sind Fehler aufgetreten. Bitte prüfen Sie in der Entwicklerkonsole, ob es sich um relevante Fehler handelt, oder ob sie ignoriert werden können. Insbesondere kann https://github.com/foundryvtt/foundryvtt/issues/9672 zu Fehlern führen, die ignoriert werden können.", "DS4.WarningItemMustBeEquippedToBeRolled": "Um für das Item '{name}' ({id}) vom Typ '{type}' zu würfeln, muss es ausgerüstet sein.",
"DS4.InfoManuallyEnterSpellModifier": "Der korrekte Wert für den Zauberbonus '{spellModifier}' des Zaubers '{name}' muss manuell angegeben werden.", "DS4.WarningMustControlActorToUseRollItemMacro": "Um ein Item-Würfel-Makro zu nutzen muss ein Aktor kontrolliert werden.",
"DS4.InfoSystemUpdateStart": "Aktualisiere DS4 System von Migrationsversion {currentVersion} auf {targetVersion}. Bitte haben Sie etwas Geduld, schließen Sie nicht das Spiel und fahren Sie nicht den Server herunter.", "DS4.WarningMustControlActorToUseRollCheckMacro": "Um ein Proben-Würfel-Makro zu nutzen muss ein Aktor kontrolliert werden.",
"DS4.InfoSystemUpdateCompletedSuccessfully": "Aktualisierung des DS4 Systems von Migrationsversion {currentVersion} auf {targetVersion} erfolgreich!", "DS4.WarningControlledActorDoesNotHaveItem": "Der kontrollierte Aktor '{actorName}' ({actorId}) hat kein Item mit der ID '{itemId}'.",
"DS4.InfoCompendiumMigrationStart": "Aktualisiere Kompendium '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion}. Bitte haben Sie etwas Geduld, schließen Sie nicht das Spiel und fahren Sie nicht den Server herunter.", "DS4.WarningItemIsNotRollable": "Für das Item '{name}' ({id}) vom Typ '{type}' kann nicht gewürfelt werden.",
"DS4.InfoCompendiumMigrationCompleted": "Aktualisierung des Kompendiums '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion} erfolgreich!", "DS4.WarningMacrosCanOnlyBeCreatedForOwnedItems": "Makros können nur für besessene Items angelegt werden.",
"DS4.UnitRounds": "Runden", "DS4.WarningInvalidCheckDropped": "Eine ungültige Probe wurde auf die Hotbar gezogen.",
"DS4.UnitRoundsAbbr": "Rnd", "DS4.InfoManuallyEnterSpellModifier": "Der korrekte Wert für den Zauberbonus '{spellModifier}' des Zaubers '{name}' muss manuell angegeben werden.",
"DS4.UnitMinutes": "Minuten", "DS4.InfoSystemUpdateStart": "Aktualisiere DS4 System von Migrationsversion {currentVersion} auf {targetVersion}. Bitte haben Sie etwas Geduld, schließen Sie nicht das Spiel und fahren Sie nicht den Server herunter.",
"DS4.UnitMinutesAbbr": "min", "DS4.InfoSystemUpdateCompleted": "Aktualisierung des DS4 Systems von Migrationsversion {currentVersion} auf {targetVersion} erfolgreich!",
"DS4.UnitHours": "Stunden", "DS4.InfoCompendiumMigrationStart": "Aktualisiere Kompendium '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion}. Bitte haben Sie etwas Geduld, schließen Sie nicht das Spiel und fahren Sie nicht den Server herunter.",
"DS4.UnitHoursAbbr": "h", "DS4.InfoCompendiumMigrationCompleted": "Aktualisierung des Kompendiums '{pack}' für DS4 von Migrationsversion {currentVersion} auf {targetVersion} erfolgreich!",
"DS4.UnitDays": "Tage", "DS4.UnitRounds": "Runden",
"DS4.UnitDaysAbbr": "d", "DS4.UnitRoundsAbbr": "Rnd",
"DS4.UnitMeters": "Meter", "DS4.UnitMinutes": "Minuten",
"DS4.UnitMetersAbbr": "m", "DS4.UnitMinutesAbbr": "min",
"DS4.UnitKilometers": "Kilometer", "DS4.UnitHours": "Stunden",
"DS4.UnitKilometersAbbr": "km", "DS4.UnitHoursAbbr": "h",
"DS4.UnitCustom": "individuell", "DS4.UnitDays": "Tage",
"DS4.UnitCustomAbbr": " ", "DS4.UnitDaysAbbr": "d",
"DS4.GenericOkButton": "OK", "DS4.UnitMeters": "Meter",
"DS4.GenericCancelButton": "Abbrechen", "DS4.UnitMetersAbbr": "m",
"DS4.DialogRollOptionsDefaultTitle": "Proben-Optionen", "DS4.UnitKilometers": "Kilometer",
"DS4.ErrorUnexpectedHtmlType": "Typfehler: Erwartet wurde '{exType}', tatsächlich erhalten wurde '{realType}'.", "DS4.UnitKilometersAbbr": "km",
"DS4.ErrorCouldNotFindForm": "Konnte HTML Element '{htmlElement}' nicht finden.", "DS4.UnitCustom": "individuell",
"DS4.ErrorActorDoesNotHaveItem": "Der Aktor '{actor}' hat kein Item mit der UUID '{uuid}'.", "DS4.UnitCustomAbbr": " ",
"DS4.ErrorUnexpectedError": "Es gab einen unerwarteten Fehler im Dungeonslayers 4 System. Für mehr Details schauen Sie bitte in die Konsole (F12).", "DS4.GenericOkButton": "OK",
"DS4.ErrorItemDoesNotHaveEffect": "Das Item '{item}' hat keinen Effekt mit der ID '{id}'.", "DS4.GenericCancelButton": "Abbrechen",
"DS4.ErrorActorDoesNotHaveEffect": "Der Aktor '{actor}' hat keinen Effekt mit der UUID '{uuid}'.", "DS4.DialogRollOptionsDefaultTitle": "Proben-Optionen",
"DS4.DialogRollOptionsCheckTargetNumberLabel": "Probenwert", "DS4.ErrorUnexpectedHtmlType": "Typfehler: Erwartet wurde '{exType}', tatsächlich erhalten wurde '{realType}'.",
"DS4.DialogRollOptionsCheckModifierLabel": "Modifikator", "DS4.ErrorCouldNotFindForm": "Konnte HTML Element '{htmlElement}' nicht finden.",
"DS4.DialogRollOptionsCheckModifierCustomLabel": "Individueller Modifikator", "DS4.ErrorActorDoesNotHaveItem": "Der Aktor '{actor}' hat kein Item mit der ID '{id}'.",
"DS4.DialogRollOptionsMaximumCoupResultLabel": "Immersieg bis", "DS4.ErrorUnexpectedError": "Es gab einen unerwarteten Fehler im Dungeonslayers 4 System. Für mehr Details schauen Sie bitte in die Konsole (F12).",
"DS4.DialogRollOptionsMinimumFumbleResultLabel": "Patzer ab", "DS4.ErrorItemDoesNotHaveEffect": "Das Item '{item}' hat keinen Effekt mit der ID '{id}'.",
"DS4.DialogRollOptionsRollModeLabel": "Sichtbarkeit", "DS4.ErrorActorDoesNotHaveEffect": "Der Aktor '{actor}' hat keinen Effekt mit der ID '{id}'.",
"DS4.CheckModifierRoutine": "Routine", "DS4.DialogRollOptionsCheckTargetNumberLabel": "Probenwert",
"DS4.CheckModifierVeryEasy": "Sehr Leicht", "DS4.DialogRollOptionsGMModifierLabel": "SL-Modifikator",
"DS4.CheckModifierEasy": "Leicht", "DS4.DialogRollOptionsMaximumCoupResultLabel": "Immersieg bis",
"DS4.CheckModifierMormal": "Normal", "DS4.DialogRollOptionsMinimumFumbleResultLabel": "Patzer ab",
"DS4.CheckModifierDifficult": "Schwer", "DS4.DialogRollOptionsRollModeLabel": "Sichtbarkeit",
"DS4.CheckModifierVeryDifficult": "Sehr Schwer", "DS4.TooltipBaseValue": "Basiswert",
"DS4.CheckModifierExtremelyDifficult": "Äußerst Schwer", "DS4.TooltipModifier": "Modifikator",
"DS4.CheckModifierCustom": "Individuell", "DS4.TooltipEffects": "Effekte",
"DS4.TooltipBaseValue": "Basiswert", "DS4.SettingUseSlayingDiceForAutomatedChecksName": "Slayende Würfel",
"DS4.TooltipModifier": "Modifikator", "DS4.SettingUseSlayingDiceForAutomatedChecksHint": "Benutze Slayende Würfel bei automatisierten Proben.",
"DS4.TooltipEffects": "Effekte", "DS4.SettingShowSlayerPointsName": "Slayerpunkte",
"DS4.SettingUseSlayingDiceForAutomatedChecksName": "Slayende Würfel", "DS4.SettingShowSlayerPointsHint": "Zeige Slayerpunkte im Charakterbogen an.",
"DS4.SettingUseSlayingDiceForAutomatedChecksHint": "Benutze Slayende Würfel bei automatisierten Proben.", "DS4.MenuClassesName": "Klassenkonfiguration",
"DS4.SettingShowSlayerPointsName": "Slayerpunkte", "DS4.MenuClassesHint": "Konfiguriere welche Klassen und Heldenklassen verwendet werden können.",
"DS4.SettingShowSlayerPointsHint": "Zeige Slayerpunkte im Charakterbogen an.", "DS4.MenuClassesLabel": "Klassen Konfigurieren",
"DS4.Checks": "Proben", "DS4.Checks": "Proben",
"DS4.ChecksAppraise": "Schätzen", "DS4.ChecksAppraise": "Schätzen",
"DS4.ChecksChangeSpell": "Zauber Wechseln", "DS4.ChecksChangeSpell": "Zauber Wechseln",
"DS4.ChecksClimb": "Klettern", "DS4.ChecksClimb": "Klettern",
"DS4.ChecksCommunicate": "Verständigen", "DS4.ChecksCommunicate": "Verständigen",
"DS4.ChecksDecipherScript": "Inschrift Entziffern", "DS4.ChecksDecipherScript": "Inschrift Entziffern",
"DS4.ChecksDefend": "Abwehren", "DS4.ChecksDefend": "Abwehren",
"DS4.ChecksDefyPoison": "Gift Trotzen", "DS4.ChecksDefyPoison": "Gift Trotzen",
"DS4.ChecksDisableTraps": "Fallen Entschärfen", "DS4.ChecksDisableTraps": "Fallen Entschärfen",
"DS4.ChecksFeatOfStrength": "Kraftakt", "DS4.ChecksFeatOfStrength": "Kraftakt",
"DS4.ChecksFlirt": "Flirten", "DS4.ChecksFlirt": "Flirten",
"DS4.ChecksHaggle": "Feilschen", "DS4.ChecksHaggle": "Feilschen",
"DS4.ChecksHide": "Verbergen", "DS4.ChecksHide": "Verbergen",
"DS4.ChecksIdentifyMagic": "Magie Erkennen", "DS4.ChecksIdentifyMagic": "Magie Erkennen",
"DS4.ChecksJump": "Springen", "DS4.ChecksJump": "Springen",
"DS4.ChecksKnowledge": "Wissen", "DS4.ChecksKnowledge": "Wissen",
"DS4.ChecksOpenLock": "Schlösser Öffnen", "DS4.ChecksOpenLock": "Schlösser Öffnen",
"DS4.ChecksPerception": "Bemerken", "DS4.ChecksPerception": "Bemerken",
"DS4.ChecksPickPocket": "Taschendiebstahl", "DS4.ChecksPickPocket": "Taschendiebstahl",
"DS4.ChecksReadTracks": "Spuren Lesen", "DS4.ChecksReadTracks": "Spuren Lesen",
"DS4.ChecksResistDisease": "Krankheit Trotzen", "DS4.ChecksResistDisease": "Krankheit Trotzen",
"DS4.ChecksRide": "Reiten", "DS4.ChecksRide": "Reiten",
"DS4.ChecksSearch": "Suchen", "DS4.ChecksSearch": "Suchen",
"DS4.ChecksSenseMagic": "Magie Erspüren", "DS4.ChecksSenseMagic": "Magie Erspüren",
"DS4.ChecksSneak": "Schleichen", "DS4.ChecksSneak": "Schleichen",
"DS4.ChecksStartFire": "Feuer Machen", "DS4.ChecksStartFire": "Feuer Machen",
"DS4.ChecksSwim": "Schwimmen", "DS4.ChecksSwim": "Schwimmen",
"DS4.ChecksWakeUp": "Erwachen", "DS4.ChecksWakeUp": "Erwachen",
"DS4.ChecksWorkMechanism": "Mechanismus Öffnen", "DS4.ChecksWorkMechanism": "Mechanismus Öffnen",
"DS4.ActorCheckFlavor": "{actor} würfelt eine {check} Probe.", "DS4.ActorCheckFlavor": "{actor} würfelt eine {check} Probe.",
"DS4.ActorGenericCheckFlavor": "{actor} würfelt eine Probe gegen {attribute} + {trait}.", "DS4.ActorGenericCheckFlavor": "{actor} würfelt eine Probe gegen {attribute} + {trait}.",
"DS4.CheckTooltip": "{check} Probe würfeln", "DS4.CheckTooltip": "{check} Probe würfeln",
"DS4.NewWeaponName": "Neue Waffe", "DS4.NewWeaponName": "Neue Waffe",
"DS4.NewArmorName": "Neue Panzerung", "DS4.NewArmorName": "Neue Panzerung",
"DS4.NewShieldName": "Neuer Schild", "DS4.NewShieldName": "Neuer Schild",
"DS4.NewSpellName": "Neuer Zauberspruch", "DS4.NewSpellName": "Neuer Zauberspruch",
"DS4.NewEquipmentName": "Neue Ausrüstung", "DS4.NewEquipmentName": "Neue Ausrüstung",
"DS4.NewLootName": "Neue Beute", "DS4.NewLootName": "Neue Beute",
"DS4.NewTalentName": "Neues Talent", "DS4.NewTalentName": "Neues Talent",
"DS4.NewRacialAbilityName": "Neue Volksfähigkeit", "DS4.NewRacialAbilityName": "Neue Volksfähigkeit",
"DS4.NewLanguageName": "Neue Sprache", "DS4.NewLanguageName": "Neue Sprache",
"DS4.NewAlphabetName": "Neue Schriftzeichen", "DS4.NewAlphabetName": "Neue Schriftzeichen",
"DS4.NewSpecialCreatureAbilityName": "Neue Besondere Kreaturenfähigkeit", "DS4.NewSpecialCreatureAbilityName": "Neue Besondere Kreaturenfähigkeit",
"DS4.NewEffectName": "Neuer Effekt", "DS4.NewEffectLabel": "Neuer Effekt"
"DS4.ActiveEffectApplyToItems": "Auf Items Anwenden",
"DS4.ActiveEffectItemName": "Itemname",
"DS4.ActiveEffectItemCondition": "Bedingung",
"DS4.TooltipNotEditableDueToEffects": "Feld nicht bearbeitbar, weil von Aktiven Effekten beeinflusst"
} }

View file

@ -1,391 +1,386 @@
{ {
"DS4.UserInteractionAdd": "Add", "DS4.UserInteractionAdd": "Add",
"DS4.UserInteractionAddItemTitle": "Create Item", "DS4.UserInteractionAddItemTitle": "Create Item",
"DS4.UserInteractionEditItemTitle": "Edit Item", "DS4.UserInteractionEditItemTitle": "Edit Item",
"DS4.UserInteractionDeleteItemTitle": "Delete Item", "DS4.UserInteractionDeleteItemTitle": "Delete Item",
"DS4.UserInteractionAddEffectTitle": "Create Effect", "DS4.UserInteractionAddEffectTitle": "Create Effect",
"DS4.UserInteractionEditEffectTitle": "Edit Effect", "DS4.UserInteractionEditEffectTitle": "Edit Effect",
"DS4.UserInteractionDeleteEffectTitle": "Delete Effect", "DS4.UserInteractionDeleteEffectTitle": "Delete Effect",
"DS4.DocumentImageAltText": "Image of {name}", "DS4.DocumentImageAltText": "Image of {name}",
"DS4.RollableImageRollableTitle": "Roll for {name}", "DS4.RollableImageRollableTitle": "Roll for {name}",
"DS4.DiceOverlayImageAltText": "Image of a d20", "DS4.DiceOverlayImageAltText": "Image of a d20",
"DS4.HeadingValues": "Values", "DS4.HeadingValues": "Values",
"DS4.HeadingBiography": "Biography", "DS4.HeadingBiography": "Biography",
"DS4.HeadingProperties": "Properties", "DS4.HeadingProperties": "Properties",
"DS4.HeadingEffects": "Effects", "DS4.HeadingEffects": "Effects",
"DS4.HeadingInventory": "Inventory", "DS4.HeadingInventory": "Inventory",
"DS4.HeadingAbilities": "Abilities", "DS4.HeadingAbilities": "Abilities",
"DS4.HeadingSpells": "Spells", "DS4.HeadingSpells": "Spells",
"DS4.HeadingDescription": "Description", "DS4.HeadingDescription": "Description",
"DS4.AttackType": "Attack Type", "DS4.AttackType": "Attack Type",
"DS4.AttackTypeAbbr": "AT", "DS4.AttackTypeAbbr": "AT",
"DS4.SortByAttackType": "Sort by Attack Type", "DS4.SortByAttackType": "Sort by Attack Type",
"DS4.DialogAttackTypeSelection": "Which Attack Type?", "DS4.DialogAttackTypeSelection": "Which Attack Type?",
"DS4.DialogAttributeTraitSelection": "Which Attribute and Trait?", "DS4.DialogAttributeTraitSelection": "Which Attribute and Trait?",
"DS4.WeaponBonus": "Weapon Bonus", "DS4.WeaponBonus": "Weapon Bonus",
"DS4.WeaponBonusAbbr": "WB", "DS4.WeaponBonusAbbr": "WB",
"DS4.SortByWeaponBonus": "Sort by Weapon Bonus", "DS4.SortByWeaponBonus": "Sort by Weapon Bonus",
"DS4.OpponentDefense": "Opponent Defense", "DS4.OpponentDefense": "Opponent Defense",
"DS4.OpponentDefenseAbbr": "OD", "DS4.OpponentDefenseAbbr": "OD",
"DS4.SortByOpponentDefense": "Sort by Opponent Defense", "DS4.SortByOpponentDefense": "Sort by Opponent Defense",
"DS4.OpponentDefenseMelee": "Opponent Defense for melee attacks", "DS4.AttackTypeMelee": "Melee",
"DS4.OpponentDefenseRanged": "Opponent Defense for ranged attacks", "DS4.AttackTypeRanged": "Ranged",
"DS4.AttackTypeMelee": "Melee", "DS4.AttackTypeMeleeRanged": "Melee / Ranged",
"DS4.AttackTypeRanged": "Ranged", "DS4.Description": "Description",
"DS4.AttackTypeMeleeRanged": "Melee / Ranged", "DS4.SortByDescription": "Sort by Description",
"DS4.Description": "Description", "DS4.Quantity": "Quantity",
"DS4.SortByDescription": "Sort by Description", "DS4.SortByQuantity": "Sort by Quantity",
"DS4.Quantity": "Quantity", "DS4.PriceGold": "Price (Gold)",
"DS4.SortByQuantity": "Sort by Quantity", "DS4.StorageLocation": "Stored at",
"DS4.PriceGold": "Price (Gold)", "DS4.SortByStorageLocation": "Sort by Storage Location",
"DS4.StorageLocation": "Stored at", "DS4.ItemEquipped": "Equipped",
"DS4.SortByStorageLocation": "Sort by Storage Location", "DS4.ItemEquippedAbbr": "E",
"DS4.ItemEquipped": "Equipped", "DS4.SortByItemEquipped": "Sort by Equipped",
"DS4.ItemEquippedAbbr": "E", "DS4.ItemAvailability": "Availability",
"DS4.SortByItemEquipped": "Sort by Equipped", "DS4.ItemAvailabilityHamlet": "Hamlet",
"DS4.ItemAvailability": "Availability", "DS4.ItemAvailabilityVilage": "Village",
"DS4.ItemAvailabilityHamlet": "Hamlet", "DS4.ItemAvailabilityCity": "City",
"DS4.ItemAvailabilityVilage": "Village", "DS4.ItemAvailabilityElves": "Elves",
"DS4.ItemAvailabilityCity": "City", "DS4.ItemAvailabilityDwarves": "Dwarves",
"DS4.ItemAvailabilityElves": "Elves", "DS4.ItemAvailabilityUnset": "Unset",
"DS4.ItemAvailabilityDwarves": "Dwarves", "DS4.ItemAvailabilityNowhere": "Nowhere",
"DS4.ItemAvailabilityUnset": "Unset", "DS4.ItemName": "Name",
"DS4.ItemAvailabilityNowhere": "Nowhere", "DS4.SortByItemName": "Sort by Name",
"DS4.ItemName": "Name", "DS4.ItemTypeWeapon": "Weapon",
"DS4.SortByItemName": "Sort by Name", "DS4.ItemTypeWeaponPlural": "Weapons",
"DS4.ItemTypeWeapon": "Weapon", "DS4.ItemTypeArmor": "Armor",
"DS4.ItemTypeWeaponPlural": "Weapons", "DS4.ItemTypeArmorPlural": "Armor",
"DS4.ItemTypeArmor": "Armor", "DS4.ItemTypeShield": "Shield",
"DS4.ItemTypeArmorPlural": "Armor", "DS4.ItemTypeShieldPlural": "Shields",
"DS4.ItemTypeShield": "Shield", "DS4.ItemTypeSpell": "Spell",
"DS4.ItemTypeShieldPlural": "Shields", "DS4.ItemTypeSpellPlural": "Spells",
"DS4.ItemTypeSpell": "Spell", "DS4.ItemTypeEquipment": "Equipment",
"DS4.ItemTypeSpellPlural": "Spells", "DS4.ItemTypeEquipmentPlural": "Equipment",
"DS4.ItemTypeEquipment": "Equipment", "DS4.ItemTypeLoot": "Loot",
"DS4.ItemTypeEquipmentPlural": "Equipment", "DS4.ItemTypeLootPlural": "Loot",
"DS4.ItemTypeLoot": "Loot", "DS4.ItemTypeTalent": "Talent",
"DS4.ItemTypeLootPlural": "Loot", "DS4.ItemTypeTalentPlural": "Talents",
"DS4.ItemTypeTalent": "Talent", "DS4.ItemTypeRacialAbility": "Racial Ability",
"DS4.ItemTypeTalentPlural": "Talents", "DS4.ItemTypeRacialAbilityPlural": "Racial Abilities",
"DS4.ItemTypeRacialAbility": "Racial Ability", "DS4.ItemTypeLanguage": "Language",
"DS4.ItemTypeRacialAbilityPlural": "Racial Abilities", "DS4.ItemTypeLanguagePlural": "Languages",
"DS4.ItemTypeLanguage": "Language", "DS4.ItemTypeAlphabet": "Alphabet",
"DS4.ItemTypeLanguagePlural": "Languages", "DS4.ItemTypeAlphabetPlural": "Alphabets",
"DS4.ItemTypeAlphabet": "Alphabet", "DS4.ItemTypeSpecialCreatureAbility": "Special Creature Ability",
"DS4.ItemTypeAlphabetPlural": "Alphabets", "DS4.ItemTypeSpecialCreatureAbilityPlural": "Special Creature Abilities",
"DS4.ItemTypeSpecialCreatureAbility": "Special Creature Ability", "DS4.ItemWeaponCheckFlavor": "{actor} attacks with {weapon}.",
"DS4.ItemTypeSpecialCreatureAbilityPlural": "Special Creature Abilities", "DS4.ItemSpellCheckFlavor": "{actor} casts {spell}.",
"DS4.ItemWeaponCheckFlavor": "{actor} attacks with {weapon}.", "DS4.ItemPropertiesArmor": "Armor Properties",
"DS4.ItemWeaponCheckFlavorWithOpponentDefense": "{actor} attacks with {weapon}<br>Opponent defense: {opponentDefense}", "DS4.ItemPropertiesEquipable": "Equipment Properties",
"DS4.ItemSpellCheckFlavor": "{actor} casts {spell}.", "DS4.ItemPropertiesPhysical": "Physical Properties",
"DS4.ItemSpellCheckFlavorWithOpponentDefense": "{actor} casts {spell}.<br>Opponent Defense: {opponentDefense}", "DS4.ItemPropertiesProtective": "Protective Properties",
"DS4.ItemPropertiesArmor": "Armor Properties", "DS4.ItemPropertiesSpecialCreatureAbility": "Special Creature Ability Properties",
"DS4.ItemPropertiesEquipable": "Equipment Properties", "DS4.ItemPropertiesSpell": "Spell Properties",
"DS4.ItemPropertiesPhysical": "Physical Properties", "DS4.ItemPropertiesTalent": "Talent Properties",
"DS4.ItemPropertiesProtective": "Protective Properties", "DS4.ItemPropertiesWeapon": "Weapon Properties",
"DS4.ItemPropertiesSpecialCreatureAbility": "Special Creature Ability Properties", "DS4.ArmorType": "Armor Type",
"DS4.ItemPropertiesSpell": "Spell Properties", "DS4.ArmorTypeAbbr": "AT",
"DS4.ItemPropertiesTalent": "Talent Properties", "DS4.SortByArmorType": "Sort by Armor Type",
"DS4.ItemPropertiesWeapon": "Weapon Properties", "DS4.ArmorMaterialType": "Material Type",
"DS4.ArmorType": "Armor Type", "DS4.ArmorMaterialTypeAbbr": "Mat.",
"DS4.ArmorTypeAbbr": "AT", "DS4.SortByArmorMaterialType": "Sort by Material Type",
"DS4.SortByArmorType": "Sort by Armor Type", "DS4.ArmorValue": "Armor Value",
"DS4.ArmorMaterialType": "Material Type", "DS4.ArmorValueAbbr": "AV",
"DS4.ArmorMaterialTypeAbbr": "Mat.", "DS4.SortByArmorValue": "Sort by Armor Value",
"DS4.SortByArmorMaterialType": "Sort by Material Type", "DS4.ArmorTypeBody": "Body",
"DS4.ArmorValue": "Armor Value", "DS4.ArmorTypeBodyAbbr": "Body",
"DS4.ArmorValueAbbr": "AV", "DS4.ArmorTypeHelmet": "Helmet",
"DS4.SortByArmorValue": "Sort by Armor Value", "DS4.ArmorTypeHelmetAbbr": "Helm",
"DS4.ArmorTypeBody": "Body", "DS4.ArmorTypeVambrace": "Vambrace",
"DS4.ArmorTypeBodyAbbr": "Body", "DS4.ArmorTypeVambraceAbbr": "Vambr",
"DS4.ArmorTypeHelmet": "Helmet", "DS4.ArmorTypeGreaves": "Greaves",
"DS4.ArmorTypeHelmetAbbr": "Helm", "DS4.ArmorTypeGreavesAbbr": "Greav",
"DS4.ArmorTypeVambrace": "Vambrace", "DS4.ArmorTypeVambraceGreaves": "Vambrace + Greaves",
"DS4.ArmorTypeVambraceAbbr": "Vambr", "DS4.ArmorTypeVambraceGreavesAbbr": "V+G",
"DS4.ArmorTypeGreaves": "Greaves", "DS4.ArmorMaterialTypeCloth": "Cloth",
"DS4.ArmorTypeGreavesAbbr": "Greav", "DS4.ArmorMaterialTypeClothAbbr": "Cloth",
"DS4.ArmorTypeVambraceGreaves": "Vambrace + Greaves", "DS4.ArmorMaterialTypeLeather": "Leather",
"DS4.ArmorTypeVambraceGreavesAbbr": "V+G", "DS4.ArmorMaterialTypeLeatherAbbr": "Leath",
"DS4.ArmorMaterialTypeCloth": "Cloth", "DS4.ArmorMaterialTypeChain": "Chain",
"DS4.ArmorMaterialTypeClothAbbr": "Cloth", "DS4.ArmorMaterialTypeChainAbbr": "Chain",
"DS4.ArmorMaterialTypeLeather": "Leather", "DS4.ArmorMaterialTypePlate": "Plate",
"DS4.ArmorMaterialTypeLeatherAbbr": "Leath", "DS4.ArmorMaterialTypePlateAbbr": "Plate",
"DS4.ArmorMaterialTypeChain": "Chain", "DS4.ArmorMaterialTypeNatural": "Natural",
"DS4.ArmorMaterialTypeChainAbbr": "Chain", "DS4.ArmorMaterialTypeNaturalAbbr": "Natural",
"DS4.ArmorMaterialTypePlate": "Plate", "DS4.SpellType": "Spell Type",
"DS4.ArmorMaterialTypePlateAbbr": "Plate", "DS4.SpellTypeAbbr": "T",
"DS4.ArmorMaterialTypeNatural": "Natural", "DS4.SpellTypeDescription": "The type of the spell.",
"DS4.ArmorMaterialTypeNaturalAbbr": "Natural", "DS4.SortBySpellType": "Sort by Spell Type",
"DS4.SpellType": "Spell Type", "DS4.SpellTypeSpellcasting": "Spellcasting",
"DS4.SpellTypeAbbr": "T", "DS4.SpellTypeTargetedSpellcasting": "Targeted Spellcasting",
"DS4.SpellTypeDescription": "The type of the spell.", "DS4.SpellCategory": "Category",
"DS4.SortBySpellType": "Sort by Spell Type", "DS4.SpellCategoryDescription": "A category which the spell belongs to.",
"DS4.SpellTypeSpellcasting": "Spellcasting", "DS4.SpellCategoryHealing": "Healing",
"DS4.SpellTypeTargetedSpellcasting": "Targeted Spellcasting", "DS4.SpellCategoryFire": "Fire",
"DS4.SpellGroups": "Spell Groups", "DS4.SpellCategoryIce": "Ice",
"DS4.SpellGroupsDescription": "Spell groups which the spell belongs to.", "DS4.SpellCategoryLight": "Light",
"DS4.SpellGroupLightning": "Lightning", "DS4.SpellCategoryDarkness": "Darkness",
"DS4.SpellGroupEarth": "Earth, Rock, Stone", "DS4.SpellCategoryMindAffecting": "Mind Affecting",
"DS4.SpellGroupWater": "Water", "DS4.SpellCategoryElectricity": "Electricity",
"DS4.SpellGroupIce": "Ice, Frost", "DS4.SpellCategoryNone": "None",
"DS4.SpellGroupFire": "Fire", "DS4.SpellCategoryUnset": "Unset",
"DS4.SpellGroupHealing": "Healing", "DS4.SpellModifier": "Spell Modifier",
"DS4.SpellGroupLight": "Light", "DS4.SpellModifierAbbr": "SM",
"DS4.SpellGroupAir": "Air", "DS4.SpellModifierDescription": "The spell modifier for the corresponding check.",
"DS4.SpellGroupTransport": "Transport", "DS4.SortBySpellModifier": "Sort by Spell Modifier",
"DS4.SpellGroupDamage": "Damage", "DS4.SpellDistance": "Distance",
"DS4.SpellGroupShadow": "Shadow", "DS4.SpellDistanceDescription": "The maximum distance to the target, “Self” meaning that only the caster can be the target of this spell.",
"DS4.SpellGroupProtection": "Protection", "DS4.SpellEffectRadius": "Area of Effect Radius",
"DS4.SpellGroupMindAffecting": "Mind Affecting", "DS4.SpellEffectRadiusDescription": "The radius of the area of effect of the spell.",
"DS4.SpellGroupDemonology": "Demonologie", "DS4.SpellDuration": "Duration",
"DS4.SpellGroupNecromancy": "Necromancy", "DS4.SpellDurationDescription": "The spells duration.",
"DS4.SpellGroupTransmutation": "Transmutation", "DS4.CooldownDuration": "Cooldown Period",
"DS4.SpellGroupArea": "Area", "DS4.CooldownDurationDescription": "The length of time to wait after a successful casting before the spell can be cast again.",
"DS4.SpellModifier": "Spell Modifier", "DS4.CooldownDuration0R": "0 Rounds",
"DS4.SpellModifierNumerical": "Spell Modifier (numerical)", "DS4.CooldownDuration1R": "1 Round",
"DS4.SpellModifierComplex": "Spell Modifier (complex)", "DS4.CooldownDuration2R": "2 Rounds",
"DS4.SpellModifierAbbr": "SM", "DS4.CooldownDuration5R": "5 Rounds",
"DS4.SpellModifierNumericalDescription": "The numerical spell modifier for the corresponding check.", "DS4.CooldownDuration10R": "10 Rounds",
"DS4.SpellModifierComplexDescription": "A complex spell modifier for the corresponding check (for example, dependent on the targets values). If given, the numerical spell bonus is ignored.", "DS4.CooldownDuration100R": "100 Rounds",
"DS4.SortBySpellModifier": "Sort by Spell Modifier", "DS4.CooldownDuration1D": "1 Day",
"DS4.SpellDistance": "Distance", "DS4.CooldownDurationD20D": "D20 Days",
"DS4.SpellDistanceDescription": "The maximum distance to the target, “Self” meaning that only the caster can be the target of this spell.", "DS4.SpellMinimumLevel": "Minimum Level",
"DS4.SpellEffectRadius": "Area of Effect Radius", "DS4.SpellMinimumLevelDescription": "The minimum level at which a spell caster may learn the spell.",
"DS4.SpellEffectRadiusDescription": "The radius of the area of effect of the spell.", "DS4.SpellCasterClassHealer": "Healer",
"DS4.SpellDuration": "Duration", "DS4.SpellCasterClassSorcerer": "Sorcerer",
"DS4.SpellDurationDescription": "The spells duration.", "DS4.SpellCasterClassWizard": "Wizard",
"DS4.CooldownDuration": "Cooldown Period", "DS4.SpellPrice": "Price (Gold)",
"DS4.CooldownDurationDescription": "The length of time to wait after a successful casting before the spell can be cast again.", "DS4.SpellPriceDescription": "The price to purchase the spell.",
"DS4.CooldownDuration0R": "0 Rounds", "DS4.EffectEnabled": "Enabled",
"DS4.CooldownDuration1R": "1 Round", "DS4.EffectEnabledAbbr": "E",
"DS4.CooldownDuration2R": "2 Rounds", "DS4.EffectEffectivelyEnabled": "Effectively Enabled (taking into account whether a potential source item is equipped etc.)",
"DS4.CooldownDuration5R": "5 Rounds", "DS4.EffectEffectivelyEnabledAbbr": "EE",
"DS4.CooldownDuration10R": "10 Rounds", "DS4.EffectLabel": "Label",
"DS4.CooldownDuration100R": "100 Rounds", "DS4.EffectSourceName": "Source",
"DS4.CooldownDuration1D": "1 Day", "DS4.EffectFactor": "Factor (the number of times the effect is being applied)",
"DS4.CooldownDurationD20D": "D20 Days", "DS4.EffectFactorAbbr": "F",
"DS4.SpellAllowsDefense": "Allows Defense", "DS4.ActorName": "Name",
"DS4.SpellAllowsDefenseDescription": "Is it alowed to perform a defense check against this spell?", "DS4.ActorImageAltText": "Image of the Actor",
"DS4.SpellMinimumLevel": "Minimum Level", "DS4.ActorTypeCharacter": "Character",
"DS4.SpellMinimumLevelDescription": "The minimum level at which a spell caster may learn the spell.", "DS4.ActorTypeCreature": "Creature",
"DS4.SpellCasterClassHealer": "Healer", "DS4.Attribute": "Attribute",
"DS4.SpellCasterClassSorcerer": "Sorcerer", "DS4.AttributeBody": "Body",
"DS4.SpellCasterClassWizard": "Wizard", "DS4.AttributeMobility": "Mobility",
"DS4.SpellPrice": "Price (Gold)", "DS4.AttributeMind": "Mind",
"DS4.SpellPriceDescription": "The price to purchase the spell.", "DS4.Trait": "Trait",
"DS4.EffectEnabled": "Enabled", "DS4.TraitStrength": "Strength",
"DS4.EffectEnabledAbbr": "E", "DS4.TraitConstitution": "Constitution",
"DS4.EffectActive": "Active (taking into account whether a potential source item is equipped etc.)", "DS4.TraitAgility": "Agility",
"DS4.EffectActiveAbbr": "A", "DS4.TraitDexterity": "Dexterity",
"DS4.EffectName": "Name", "DS4.TraitIntellect": "Intellect",
"DS4.EffectSourceName": "Source", "DS4.TraitAura": "Aura",
"DS4.EffectFactor": "Factor (the number of times the effect is being applied)", "DS4.CombatValuesHitPoints": "Hit Points",
"DS4.EffectFactorAbbr": "F", "DS4.CombatValuesHitPointsCurrent": "Current Hit Points",
"DS4.ActorName": "Name", "DS4.CombatValuesHitPointsCurrentAbbr": "HP",
"DS4.ActorImageAltText": "Image of the Actor", "DS4.CombatValuesDefense": "Defense",
"DS4.ActorTypeCharacter": "Character", "DS4.CombatValuesInitiative": "Initiative",
"DS4.ActorTypeCreature": "Creature", "DS4.CombatValuesMovement": "Movement",
"DS4.Attribute": "Attribute", "DS4.CombatValuesMeleeAttack": "Melee Attack",
"DS4.AttributeBody": "Body", "DS4.CombatValuesRangedAttack": "Ranged Attack",
"DS4.AttributeMobility": "Mobility", "DS4.CombatValuesSpellcasting": "Spellcasting",
"DS4.AttributeMind": "Mind", "DS4.CombatValuesTargetedSpellcasting": "Targeted Spellcasting",
"DS4.Trait": "Trait", "DS4.CombatValuesHitPointsSheet": "Hit Points",
"DS4.TraitStrength": "Strength", "DS4.CombatValuesDefenseSheet": "Defense",
"DS4.TraitConstitution": "Constitution", "DS4.CombatValuesInitiativeSheet": "Initiative",
"DS4.TraitAgility": "Agility", "DS4.CombatValuesMovementSheet": "Movement",
"DS4.TraitDexterity": "Dexterity", "DS4.CombatValuesMeleeAttackSheet": "Melee Attack",
"DS4.TraitIntellect": "Intellect", "DS4.CombatValuesRangedAttackSheet": "RAT",
"DS4.TraitAura": "Aura", "DS4.CombatValuesSpellcastingSheet": "Spellcasting",
"DS4.CombatValuesHitPoints": "Hit Points", "DS4.CombatValuesTargetedSpellcastingSheet": "TSC",
"DS4.CombatValuesHitPointsCurrent": "Current Hit Points", "DS4.CharacterBaseInfoRace": "Race",
"DS4.CombatValuesHitPointsCurrentAbbr": "HP", "DS4.CharacterBaseInfoClass": "Class",
"DS4.CombatValuesDefense": "Defense", "DS4.CharacterBaseInfoHeroClass": "Hero Class",
"DS4.CombatValuesInitiative": "Initiative", "DS4.CharacterBaseInfoCulture": "Culture",
"DS4.CombatValuesMovement": "Movement", "DS4.CharacterProgressionLevel": "Level",
"DS4.CombatValuesMeleeAttack": "Melee Attack", "DS4.CharacterProgressionLevelAbbr": "LVL",
"DS4.CombatValuesRangedAttack": "Ranged Attack", "DS4.CharacterProgressionExperiencePoints": "Experience Points",
"DS4.CombatValuesSpellcasting": "Spellcasting", "DS4.CharacterProgressionExperiencePointsAbbr": "XP",
"DS4.CombatValuesTargetedSpellcasting": "Targeted Spellcasting", "DS4.CharacterProgressionTalentPoints": "Talent Points",
"DS4.CombatValuesHitPointsSheet": "Hit Points", "DS4.CharacterProgressionProgressPoints": "Progress Points",
"DS4.CombatValuesDefenseSheet": "Defense", "DS4.CharacterSlayerPoints": "Slayer Points",
"DS4.CombatValuesInitiativeSheet": "Initiative", "DS4.CharacterSlayerPointsAbbr": "SP",
"DS4.CombatValuesMovementSheet": "Movement", "DS4.ClassNone": "None",
"DS4.CombatValuesMeleeAttackSheet": "Melee Attack", "DS4.ClassFighter": "Fighter",
"DS4.CombatValuesRangedAttackSheet": "RAT", "DS4.ClassScout": "Scout",
"DS4.CombatValuesSpellcastingSheet": "Spellcasting", "DS4.ClassHealer": "Healer",
"DS4.CombatValuesTargetedSpellcastingSheet": "TSC", "DS4.ClassWizard": "Wizard",
"DS4.CharacterBaseInfoRace": "Race", "DS4.ClassSorcerer": "Sorcerer",
"DS4.CharacterBaseInfoClass": "Class", "DS4.HeroClassNone": "None",
"DS4.CharacterBaseInfoHeroClass": "Hero Class", "DS4.HeroClassBerserker": "Berserker",
"DS4.CharacterBaseInfoCulture": "Culture", "DS4.HeroClassWeaponMaster": "Weapon Master",
"DS4.CharacterProgressionLevel": "Level", "DS4.HeroClassPaladin": "Paladin",
"DS4.CharacterProgressionLevelAbbr": "LVL", "DS4.HeroClassAssassin": "Assasin",
"DS4.CharacterProgressionExperiencePoints": "Experience Points", "DS4.HeroClassRanger": "Ranger",
"DS4.CharacterProgressionExperiencePointsAbbr": "XP", "DS4.HeroClassRogue": "Rogue",
"DS4.CharacterProgressionTalentPoints": "Talent Points", "DS4.HeroClassCleric": "Cleric",
"DS4.CharacterProgressionProgressPoints": "Progress Points", "DS4.HeroClassDruid": "Druid",
"DS4.CharacterSlayerPoints": "Slayer Points", "DS4.HeroClassMonk": "Monk",
"DS4.CharacterSlayerPointsAbbr": "SP", "DS4.HeroClassArchmage": "Archmage",
"DS4.TalentRank": "Rank", "DS4.HeroClassElementalist": "Elementalist",
"DS4.SortByTalentRank": "Sort by Rank", "DS4.HeroClassBattleMage": "Battle Mage",
"DS4.TalentRankBase": "Acquired", "DS4.HeroClassBloodMage": "Blood Mage",
"DS4.TalentRankMax": "Maximum", "DS4.HeroClassDemonologist": "Demonologist",
"DS4.TalentRankMod": "Additional", "DS4.HeroClassNecromancer": "Necromancer",
"DS4.TalentRankTotal": "Total", "DS4.TalentRank": "Rank",
"DS4.CharacterLanguageLanguages": "Languages", "DS4.SortByTalentRank": "Sort by Rank",
"DS4.CharacterLanguageAlphabets": "Alphabets", "DS4.TalentRankBase": "Acquired",
"DS4.SpecialCreatureAbilityExperiencePoints": "Experience Points", "DS4.TalentRankMax": "Maximum",
"DS4.CharacterProfileBiography": "Biography", "DS4.TalentRankMod": "Additional",
"DS4.CharacterProfileGender": "Gender", "DS4.TalentRankTotal": "Total",
"DS4.CharacterProfileBirthday": "Birthday", "DS4.TalentRankOf": "of",
"DS4.CharacterProfileBirthplace": "Birthplace", "DS4.CharacterLanguageLanguages": "Languages",
"DS4.CharacterProfileAge": "Age", "DS4.CharacterLanguageAlphabets": "Alphabets",
"DS4.CharacterProfileHeight": "Height [m]", "DS4.SpecialCreatureAbilityExperiencePoints": "Experience Points",
"DS4.CharacterProfileHairColor": "Hair Color", "DS4.CharacterProfileBiography": "Biography",
"DS4.CharacterProfileWeight": "Weight [kg]", "DS4.CharacterProfileGender": "Gender",
"DS4.CharacterProfileEyeColor": "Eye Color", "DS4.CharacterProfileBirthday": "Birthday",
"DS4.CharacterProfileSpecialCharacteristics": "Special Characteristics", "DS4.CharacterProfileBirthplace": "Birthplace",
"DS4.CharacterCurrencyGold": "Gold", "DS4.CharacterProfileAge": "Age",
"DS4.CharacterCurrencySilver": "Silver", "DS4.CharacterProfileHeight": "Height [m]",
"DS4.CharacterCurrencyCopper": "Copper", "DS4.CharacterProfileHairColor": "Hair Color",
"DS4.CharacterCurrency": "Currency", "DS4.CharacterProfileWeight": "Weight [kg]",
"DS4.CreatureTypeAnimal": "Animal", "DS4.CharacterProfileEyeColor": "Eye Color",
"DS4.CreatureTypeConstruct": "Construct", "DS4.CharacterProfileSpecialCharacteristics": "Special Characteristics",
"DS4.CreatureTypeHumanoid": "Humanoid", "DS4.CharacterCurrencyGold": "Gold",
"DS4.CreatureTypeMagicalEntity": "Magical Entity", "DS4.CharacterCurrencySilver": "Silver",
"DS4.CreatureTypePlantBeing": "Plant Being", "DS4.CharacterCurrencyCopper": "Copper",
"DS4.CreatureTypeUndead": "Undead", "DS4.CharacterCurrency": "Currency",
"DS4.CreatureSizeCategoryTiny": "Tiny", "DS4.CreatureTypeAnimal": "Animal",
"DS4.CreatureSizeCategorySmall": "Small", "DS4.CreatureTypeConstruct": "Construct",
"DS4.CreatureSizeCategoryNormal": "Normal", "DS4.CreatureTypeHumanoid": "Humanoid",
"DS4.CreatureSizeCategoryLarge": "Large", "DS4.CreatureTypeMagicalEntity": "Magical Entity",
"DS4.CreatureSizeCategoryHuge": "Huge", "DS4.CreatureTypePlantBeing": "Plant Being",
"DS4.CreatureSizeCategoryColossal": "Colossal", "DS4.CreatureTypeUndead": "Undead",
"DS4.CreatureBaseInfoLoot": "Loot", "DS4.CreatureSizeCategoryTiny": "Tiny",
"DS4.CreatureBaseInfoFoeFactor": "Foe Factor", "DS4.CreatureSizeCategorySmall": "Small",
"DS4.CreatureBaseInfoCreatureType": "Creature Type", "DS4.CreatureSizeCategoryNormal": "Normal",
"DS4.CreatureBaseInfoSizeCategory": "Size Category", "DS4.CreatureSizeCategoryLarge": "Large",
"DS4.CreatureBaseInfoExperiencePoints": "Experience Points", "DS4.CreatureSizeCategoryHuge": "Huge",
"DS4.CreatureBaseInfoDescription": "Description", "DS4.CreatureSizeCategoryColossal": "Colossal",
"DS4.WarningActorCannotOwnItem": "The actor '{actorName}' of type '{actorType}' cannot own the item '{itemName}' of type '{itemType}'.", "DS4.CreatureBaseInfoLoot": "Loot",
"DS4.ErrorDiceCoupFumbleOverlap": "There is an overlap between Fumbles and Coups.", "DS4.CreatureBaseInfoFoeFactor": "Foe Factor",
"DS4.ErrorSlayingDiceRecursionLimitExceeded": "Maximum recursion depth for slaying dice roll exceeded.", "DS4.CreatureBaseInfoCreatureType": "Creature Type",
"DS4.ErrorInvalidNumberOfDice": "Invalid number of dice.", "DS4.CreatureBaseInfoSizeCategory": "Size Category",
"DS4.ErrorInvalidActorType": "Invalid actor type '{type}'.", "DS4.CreatureBaseInfoExperiencePoints": "Experience Points",
"DS4.ErrorInvalidItemType": "Invalid item type '{type}'.", "DS4.CreatureBaseInfoDescription": "Description",
"DS4.ErrorDuringMigration": "Error while migrating DS4 system from migration version {currentVersion} to {targetVersion}. The error occurred during execution of migration script with version {migrationVersion}. Later migrations have not been executed. For more details, please look at the development console (F12).", "DS4.WarningManageActiveEffectOnOwnedItem": "Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update. If you actually want to manage the effect that has been transferred to the actor, you can do so in the 'Effects' tab in the actor sheet.",
"DS4.ErrorDuringCompendiumMigration": "Error while migrating compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion}. The error occurred during execution of migration script with version {migrationVersion}. Later migrations have not been executed. For more details, please look at the development console (F12).", "DS4.WarningActorCannotOwnItem": "The actor '{actorName}' of type '{actorType}' cannot own the item '{itemName}' of type '{itemType}'.",
"DS4.ErrorCannotRollUnownedItem": "Rolling for item '{name}' ({id})is not possible because it is not owned.", "DS4.ErrorDiceCoupFumbleOverlap": "There is an overlap between Fumbles and Coups.",
"DS4.ErrorRollingForItemTypeNotPossible": "Rolling is not possible for items of type '{type}'.", "DS4.ErrorSlayingDiceRecursionLimitExceeded": "Maximum recursion depth for slaying dice roll exceeded.",
"DS4.ErrorUnexpectedAttackType": "Unexpected attack type '{actualType}', expected it to be one of: {expectedTypes}", "DS4.ErrorInvalidNumberOfDice": "Invalid number of dice.",
"DS4.ErrorUnexpectedAttribute": "Unexpected attribute '{actualAttribute}', expected it to be one of: {expectedTypes}", "DS4.ErrorInvalidActorType": "Invalid actor type '{type}'.",
"DS4.ErrorUnexpectedTrait": "Unexpected trait '{actualTrait}', expected it to be one of: {expectedTypes}", "DS4.ErrorInvalidItemType": "Invalid item type '{type}'.",
"DS4.ErrorCanvasIsNotInitialized": "Canvas is not initialized yet.", "DS4.ErrorDuringMigration": "Error while migrating DS4 system from migration version {currentVersion} to {targetVersion}. The error occurred during execution of migration script with version {migrationVersion}. Later migrations have not been executed. For more details, please look at the development console (F12).",
"DS4.ErrorCannotDragMissingCheck": "Trying to drag the check '{check}' but no such check exists.", "DS4.ErrorDuringCompendiumMigration": "Error while migrating compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion}. The error occurred during execution of migration script with version {migrationVersion}. Later migrations have not been executed. For more details, please look at the development console (F12).",
"DS4.WarningItemMustBeEquippedToBeRolled": "To roll for item '{name}' ({id}) of type '{type}', it needs to be equipped.", "DS4.ErrorCannotRollUnownedItem": "Rolling for item '{name}' ({id})is not possible because it is not owned.",
"DS4.WarningMustControlActorToUseRollItemMacro": "You must control an actor to be able to use a roll item macro.", "DS4.ErrorRollingForItemTypeNotPossible": "Rolling is not possible for items of type '{type}'.",
"DS4.WarningMustControlActorToUseRollCheckMacro": "You must control an actor to be able to use a roll check macro.", "DS4.ErrorUnexpectedAttackType": "Unexpected attack type '{actualType}', expected it to be one of: {expectedTypes}",
"DS4.WarningControlledActorDoesNotHaveItem": "Your controlled actor '{actorName}' ({actorId}) does not have any item with the id '{itemId}'.", "DS4.ErrorUnexpectedAttribute": "Unexpected attribute '{actualAttribute}', expected it to be one of: {expectedTypes}",
"DS4.WarningItemIsNotRollable": "Item '{name}' ({id}) of type '{type}' is not rollable.", "DS4.ErrorUnexpectedTrait": "Unexpected trait '{actualTrait}', expected it to be one of: {expectedTypes}",
"DS4.WarningMacrosCanOnlyBeCreatedForOwnedItems": "Macros can only be created for owned items.", "DS4.ErrorCanvasIsNotInitialized": "Canvas is not initialized yet.",
"DS4.WarningInvalidCheckDropped": "An invalid check was dropped on the Hotbar.", "DS4.ErrorCannotDragMissingCheck": "Trying to drag the check '{check}' but no such check exists.",
"DS4.WarningSystemUpdateCompletedWithErrors": "Migration of DS4 system from migration version {currentVersion} to {targetVersion} completed with errors. Please check the development console (F12) to see whether the errors have significant impact or can be ignored. In particular, https://github.com/foundryvtt/foundryvtt/issues/9672 may cause issues that simply can be ignored.", "DS4.WarningItemMustBeEquippedToBeRolled": "To roll for item '{name}' ({id}) of type '{type}', it needs to be equipped.",
"DS4.InfoManuallyEnterSpellModifier": "The correct value of the spell modifier '{spellModifier}' of the spell '{name}' needs to be entered by manually.", "DS4.WarningMustControlActorToUseRollItemMacro": "You must control an actor to be able to use a roll item macro.",
"DS4.InfoSystemUpdateStart": "Migrating DS4 system from migration version {currentVersion} to {targetVersion}. Please be patient and do not close your game or shut down your server.", "DS4.WarningMustControlActorToUseRollCheckMacro": "You must control an actor to be able to use a roll check macro.",
"DS4.InfoSystemUpdateCompletedSuccessfully": "Migration of DS4 system from migration version {currentVersion} to {targetVersion} successful!", "DS4.WarningControlledActorDoesNotHaveItem": "Your controlled actor '{actorName}' ({actorId}) does not have any item with the id '{itemId}'.",
"DS4.InfoCompendiumMigrationStart": "Migrating compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion}. Please be patient and do not close your game or shut down your server.", "DS4.WarningItemIsNotRollable": "Item '{name}' ({id}) of type '{type}' is not rollable.",
"DS4.InfoCompendiumMigrationCompleted": "Migration of compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion} successful!", "DS4.WarningMacrosCanOnlyBeCreatedForOwnedItems": "Macros can only be created for owned items.",
"DS4.UnitRounds": "Rounds", "DS4.WarningInvalidCheckDropped": "An invalid check was dropped on the Hotbar.",
"DS4.UnitRoundsAbbr": "rnd", "DS4.InfoManuallyEnterSpellModifier": "The correct value of the spell modifier '{spellModifier}' of the spell '{name}' needs to be entered by manually.",
"DS4.UnitMinutes": "Minutes", "DS4.InfoSystemUpdateStart": "Migrating DS4 system from migration version {currentVersion} to {targetVersion}. Please be patient and do not close your game or shut down your server.",
"DS4.UnitMinutesAbbr": "min", "DS4.InfoSystemUpdateCompleted": "Migration of DS4 system from migration version {currentVersion} to {targetVersion} successful!",
"DS4.UnitHours": "Hours", "DS4.InfoCompendiumMigrationStart": "Migrating compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion}. Please be patient and do not close your game or shut down your server.",
"DS4.UnitHoursAbbr": "h", "DS4.InfoCompendiumMigrationCompleted": "Migration of compendium '{pack}' for DS4 from migration version {currentVersion} to {targetVersion} successful!",
"DS4.UnitDays": "Days", "DS4.UnitRounds": "Rounds",
"DS4.UnitDaysAbbr": "d", "DS4.UnitRoundsAbbr": "rnd",
"DS4.UnitMeters": "Meters", "DS4.UnitMinutes": "Minutes",
"DS4.UnitMetersAbbr": "m", "DS4.UnitMinutesAbbr": "min",
"DS4.UnitKilometers": "Kilometers", "DS4.UnitHours": "Hours",
"DS4.UnitKilometersAbbr": "km", "DS4.UnitHoursAbbr": "h",
"DS4.UnitCustom": "Custom Unit", "DS4.UnitDays": "Days",
"DS4.UnitCustomAbbr": " ", "DS4.UnitDaysAbbr": "d",
"DS4.GenericOkButton": "Ok", "DS4.UnitMeters": "Meters",
"DS4.GenericCancelButton": "Cancel", "DS4.UnitMetersAbbr": "m",
"DS4.DialogRollOptionsDefaultTitle": "Roll Options", "DS4.UnitKilometers": "Kilometers",
"DS4.ErrorUnexpectedHtmlType": "Type Error: Expected '{exType}' but got '{realType}'.", "DS4.UnitKilometersAbbr": "km",
"DS4.ErrorCouldNotFindForm": "Could not find HTML element '{htmlElement}'.", "DS4.UnitCustom": "Custom Unit",
"DS4.ErrorActorDoesNotHaveItem": "The actor '{actor}' does not have any item with the UUID '{uuid}'.", "DS4.UnitCustomAbbr": " ",
"DS4.ErrorUnexpectedError": "There was an unexpected error in the Dungeonslayers 4 system. For more details, please take a look at the console (F12).", "DS4.GenericOkButton": "Ok",
"DS4.ErrorItemDoesNotHaveEffect": "The item '{item}' does not have any effect with the ID '{id}'.", "DS4.GenericCancelButton": "Cancel",
"DS4.ErrorActorDoesNotHaveEffect": "The actor '{actor}' does not have any effect with the UUID '{uuid}'.", "DS4.DialogRollOptionsDefaultTitle": "Roll Options",
"DS4.DialogRollOptionsCheckTargetNumberLabel": "Check Target Number", "DS4.ErrorUnexpectedHtmlType": "Type Error: Expected '{exType}' but got '{realType}'.",
"DS4.DialogRollOptionsCheckModifierLabel": "Modifier", "DS4.ErrorCouldNotFindForm": "Could not find HTML element '{htmlElement}'.",
"DS4.DialogRollOptionsCheckModifierCustomLabel": "Custom Modifier", "DS4.ErrorActorDoesNotHaveItem": "The actor '{actor}' does not have any item with the id '{id}'.",
"DS4.DialogRollOptionsMaximumCoupResultLabel": "Coup to", "DS4.ErrorUnexpectedError": "There was an unexpected error in the Dungeonslayers 4 system. For more details, please take a look at the console (F12).",
"DS4.DialogRollOptionsMinimumFumbleResultLabel": "Fumble from", "DS4.ErrorItemDoesNotHaveEffect": "The item '{item}' does not have any effect with the id '{id}'.",
"DS4.DialogRollOptionsRollModeLabel": "Visibility", "DS4.ErrorActorDoesNotHaveEffect": "The actor '{actor}' does not have any effect with the id '{id}'.",
"DS4.CheckModifierRoutine": "Routine", "DS4.DialogRollOptionsCheckTargetNumberLabel": "Check Target Number",
"DS4.CheckModifierVeryEasy": "Very Easy", "DS4.DialogRollOptionsGMModifierLabel": "Game Master Modifier",
"DS4.CheckModifierEasy": "Easy", "DS4.DialogRollOptionsMaximumCoupResultLabel": "Coup to",
"DS4.CheckModifierMormal": "Normal", "DS4.DialogRollOptionsMinimumFumbleResultLabel": "Fumble from",
"DS4.CheckModifierDifficult": "Difficult", "DS4.DialogRollOptionsRollModeLabel": "Visibility",
"DS4.CheckModifierVeryDifficult": "Very Difficult", "DS4.TooltipBaseValue": "Base Value",
"DS4.CheckModifierExtremelyDifficult": "Extremely Difficult", "DS4.TooltipModifier": "Modifier",
"DS4.CheckModifierCustom": "Custom", "DS4.TooltipEffects": "Effects",
"DS4.TooltipBaseValue": "Base Value", "DS4.SettingUseSlayingDiceForAutomatedChecksName": "Slaying Dice",
"DS4.TooltipModifier": "Modifier", "DS4.SettingUseSlayingDiceForAutomatedChecksHint": "Use Slaying Dice for automated checks.",
"DS4.TooltipEffects": "Effects", "DS4.SettingShowSlayerPointsName": "Slayer Points",
"DS4.SettingUseSlayingDiceForAutomatedChecksName": "Slaying Dice", "DS4.SettingShowSlayerPointsHint": "Show Slayer Points in the character sheet.",
"DS4.SettingUseSlayingDiceForAutomatedChecksHint": "Use Slaying Dice for automated checks.", "DS4.MenuClassesName": "Class Configuration",
"DS4.SettingShowSlayerPointsName": "Slayer Points", "DS4.MenuClassesHint": "Configure which classes and hero classes can be used.",
"DS4.SettingShowSlayerPointsHint": "Show Slayer Points in the character sheet.", "DS4.MenuClassesLabel": "Configure Classes",
"DS4.Checks": "Checks", "DS4.Checks": "Checks",
"DS4.ChecksAppraise": "Appraise", "DS4.ChecksAppraise": "Appraise",
"DS4.ChecksChangeSpell": "Change Spell", "DS4.ChecksChangeSpell": "Change Spell",
"DS4.ChecksClimb": "Climb", "DS4.ChecksClimb": "Climb",
"DS4.ChecksCommunicate": "Communicate", "DS4.ChecksCommunicate": "Communicate",
"DS4.ChecksDecipherScript": "Decipher Script", "DS4.ChecksDecipherScript": "Decipher Script",
"DS4.ChecksDefend": "Defend", "DS4.ChecksDefend": "Defend",
"DS4.ChecksDefyPoison": "Defy Poison", "DS4.ChecksDefyPoison": "Defy Poison",
"DS4.ChecksDisableTraps": "Disable Traps", "DS4.ChecksDisableTraps": "Disable Traps",
"DS4.ChecksFeatOfStrength": "Feat of Strength", "DS4.ChecksFeatOfStrength": "Feat of Strength",
"DS4.ChecksFlirt": "Flirt", "DS4.ChecksFlirt": "Flirt",
"DS4.ChecksHaggle": "Haggle", "DS4.ChecksHaggle": "Haggle",
"DS4.ChecksHide": "Hide", "DS4.ChecksHide": "Hide",
"DS4.ChecksIdentifyMagic": "Identify Magic", "DS4.ChecksIdentifyMagic": "Identify Magic",
"DS4.ChecksJump": "Jump", "DS4.ChecksJump": "Jump",
"DS4.ChecksKnowledge": "Knowledge", "DS4.ChecksKnowledge": "Knowledge",
"DS4.ChecksOpenLock": "Open Lock", "DS4.ChecksOpenLock": "Open Lock",
"DS4.ChecksPerception": "Perception", "DS4.ChecksPerception": "Perception",
"DS4.ChecksPickPocket": "Pick Pocket", "DS4.ChecksPickPocket": "Pick Pocket",
"DS4.ChecksReadTracks": "Read Tracks", "DS4.ChecksReadTracks": "Read Tracks",
"DS4.ChecksResistDisease": "Resist Disease", "DS4.ChecksResistDisease": "Resist Disease",
"DS4.ChecksRide": "Ride", "DS4.ChecksRide": "Ride",
"DS4.ChecksSearch": "Search", "DS4.ChecksSearch": "Search",
"DS4.ChecksSenseMagic": "Sense Magic", "DS4.ChecksSenseMagic": "Sense Magic",
"DS4.ChecksSneak": "Sneak", "DS4.ChecksSneak": "Sneak",
"DS4.ChecksStartFire": "Start Fire", "DS4.ChecksStartFire": "Start Fire",
"DS4.ChecksSwim": "Swim", "DS4.ChecksSwim": "Swim",
"DS4.ChecksWakeUp": "Wake Up", "DS4.ChecksWakeUp": "Wake Up",
"DS4.ChecksWorkMechanism": "Work Mechanism", "DS4.ChecksWorkMechanism": "Work Mechanism",
"DS4.ActorCheckFlavor": "{actor} rolls a {check} check.", "DS4.ActorCheckFlavor": "{actor} rolls a {check} check.",
"DS4.ActorGenericCheckFlavor": "{actor} rolls a check against {attribute} + {trait}.", "DS4.ActorGenericCheckFlavor": "{actor} rolls a check against {attribute} + {trait}.",
"DS4.CheckTooltip": "Roll a {check} check", "DS4.CheckTooltip": "Roll a {check} check",
"DS4.NewWeaponName": "New Weapon", "DS4.NewWeaponName": "New Weapon",
"DS4.NewArmorName": "New Armor", "DS4.NewArmorName": "New Armor",
"DS4.NewShieldName": "New Shield", "DS4.NewShieldName": "New Shield",
"DS4.NewSpellName": "New Spell", "DS4.NewSpellName": "New Spell",
"DS4.NewEquipmentName": "New Equipment", "DS4.NewEquipmentName": "New Equipment",
"DS4.NewLootName": "New Loot", "DS4.NewLootName": "New Loot",
"DS4.NewTalentName": "New Talent", "DS4.NewTalentName": "New Talent",
"DS4.NewRacialAbilityName": "New Racial Ability", "DS4.NewRacialAbilityName": "New Racial Ability",
"DS4.NewLanguageName": "New Language", "DS4.NewLanguageName": "New Language",
"DS4.NewAlphabetName": "New Alphabet", "DS4.NewAlphabetName": "New Alphabet",
"DS4.NewSpecialCreatureAbilityName": "New Special Creature Ability", "DS4.NewSpecialCreatureAbilityName": "New Special Creature Ability",
"DS4.NewEffectName": "New Effect", "DS4.NewEffectLabel": "New Effect"
"DS4.ActiveEffectApplyToItems": "Apply to Items",
"DS4.ActiveEffectItemName": "Item Name",
"DS4.ActiveEffectItemCondition": "Condition",
"DS4.TooltipNotEditableDueToEffects": "field not editable, because affected by Active Effects"
} }

View file

@ -1,97 +1,100 @@
{ {
"private": true, "private": true,
"name": "dungeonslayers4", "name": "dungeonslayers4",
"description": "An implementation of the Dungeonslayers 4 game system for Foundry Virtual Tabletop.", "description": "An implementation of the Dungeonslayers 4 game system for Foundry Virtual Tabletop.",
"version": "1.21.1", "version": "1.12.6",
"license": "https://git.f3l.de/dungeonslayers/ds4#licensing", "license": "https://git.f3l.de/dungeonslayers/ds4#licensing",
"homepage": "https://git.f3l.de/dungeonslayers/ds4", "homepage": "https://git.f3l.de/dungeonslayers/ds4",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git.f3l.de/dungeonslayers/ds4" "url": "https://git.f3l.de/dungeonslayers/ds4"
},
"bugs": {
"url": "https://git.f3l.de/dungeonslayers/ds4/issues"
},
"contributors": [
{
"name": "Johannes Loher",
"email": "johannes.loher@fg4f.de"
}, },
{ "bugs": {
"name": "Gesina Schwalbe", "url": "https://git.f3l.de/dungeonslayers/ds4/-/issues"
"email": "gesina.schwalbe@pheerai.de"
}, },
{ "contributors": [
"name": "Oliver Rümpelein", {
"email": "foundryvtt@pheerai.de" "name": "Johannes Loher",
"email": "johannes.loher@fg4f.de"
},
{
"name": "Gesina Schwalbe",
"email": "gesina.schwalbe@pheerai.de"
},
{
"name": "Oliver Rümpelein",
"email": "foundryvtt@pheerai.de"
},
{
"name": "Siegfried Krug",
"email": "foundryvtt@asdil1991.de"
},
{
"name": "Max Tharr"
},
{
"name": "Sascha Martens"
}
],
"type": "module",
"scripts": {
"build": "run-s clean:files build:files",
"build:files": "rollup -c",
"watch": "rollup -c -w",
"link-package": "node ./tools/link-package.js",
"clean": "run-p clean:files clean:link",
"clean:files": "rimraf dist",
"clean:link": "node ./tools/link-package.js --clean",
"lint": "eslint --ext .ts,.js,.cjs,.mjs .",
"lint:fix": "eslint --ext .ts,.js,.cjs,.mjs --fix .",
"test": "jest",
"test:watch": "jest --watch",
"test:ci": "jest --ci --reporters=default --reporters=jest-junit",
"format": "prettier --write \"./**/*.(ts|js|cjs|mjs|json|scss|yml)\"",
"typecheck": "tsc --noEmit",
"bump-version": "node ./tools/bump-version.js",
"convert-packs-to-json": "node ./tools/convert-packs-to-json.js",
"postinstall": "husky install",
"changelog": "conventional-changelog -p conventionalcommits -o CHANGELOG.md -r 2"
}, },
{ "devDependencies": {
"name": "Siegfried Krug", "@commitlint/cli": "16.2.3",
"email": "foundryvtt@asdil1991.de" "@commitlint/config-conventional": "16.2.1",
"@guanghechen/rollup-plugin-copy": "1.9.2",
"@league-of-foundry-developers/foundry-vtt-types": "9.255.3",
"@rollup/plugin-typescript": "8.3.1",
"@seald-io/nedb": "3.0.0",
"@types/fs-extra": "9.0.13",
"@types/jest": "27.4.1",
"@typescript-eslint/eslint-plugin": "5.18.0",
"@typescript-eslint/parser": "5.18.0",
"conventional-changelog-cli": "2.2.2",
"conventional-changelog-conventionalcommits": "4.6.3",
"eslint": "8.12.0",
"eslint-config-prettier": "8.5.0",
"eslint-plugin-jest": "26.1.3",
"eslint-plugin-prettier": "4.0.0",
"fs-extra": "10.0.1",
"husky": "7.0.4",
"jest": "27.5.1",
"jest-junit": "13.1.0",
"lint-staged": "12.3.7",
"npm-run-all": "4.1.5",
"prettier": "2.6.2",
"rimraf": "3.0.2",
"rollup": "2.70.1",
"rollup-plugin-styles": "4.0.0",
"rollup-plugin-terser": "7.0.2",
"sass": "1.49.11",
"semver": "7.3.5",
"ts-jest": "27.1.4",
"tslib": "2.3.1",
"typescript": "4.6.3",
"yargs": "17.4.0"
}, },
{ "lint-staged": {
"name": "Max Tharr" "*.(ts|js|cjs|mjs)": "eslint --cache --fix",
"*.(json|scss|yml)": "prettier --write"
}, },
{ "packageManager": "yarn@3.2.0"
"name": "Sascha Martens"
}
],
"type": "module",
"scripts": {
"build": "run-s clean:files build:files",
"build:files": "run-p build:rollup build:packs",
"build:rollup": "rollup -c",
"build:packs": "./tools/packs.sh pack",
"watch": "rollup -c -w",
"link-package": "node ./tools/link-package.js",
"clean": "run-p clean:files clean:link",
"clean:files": "rimraf dist",
"clean:link": "node ./tools/link-package.js --clean",
"lint": "pnpm eslint",
"lint:fix": "pnpm eslint --fix",
"eslint": "eslint --ext .ts,.js,.cjs,.mjs .",
"format": "pnpm prettier --write",
"format:check": "pnpm prettier --check",
"prettier": "prettier './**/*.(ts|js|cjs|mjs|json|scss|yml|yaml)'",
"test": "run-p test:vitest test:typecheck",
"test:vitest": "vitest run",
"test:typecheck": "tsc --noEmit --project spec/tsconfig.json",
"test:watch": "vitest",
"typecheck": "tsc --noEmit",
"typecheck:watch": "tsc --noEmit --watch",
"bump-version": "node ./tools/bump-version.js",
"changelog": "conventional-changelog -p conventionalcommits -o CHANGELOG.md -r 2"
},
"devDependencies": {
"@commitlint/cli": "19.5.0",
"@commitlint/config-conventional": "19.5.0",
"@foundryvtt/foundryvtt-cli": "0.0.9",
"@guanghechen/rollup-plugin-copy": "6.0.2",
"@ironkinoko/rollup-plugin-styles": "4.0.3",
"@swc/core": "1.7.39",
"@types/fs-extra": "11.0.4",
"@types/jquery": "3.5.31",
"@types/node": "18.19.3",
"@typescript-eslint/eslint-plugin": "7.18.0",
"@typescript-eslint/parser": "7.18.0",
"conventional-changelog-cli": "5.0.0",
"conventional-changelog-conventionalcommits": "8.0.0",
"eslint": "8.57.1",
"eslint-config-prettier": "9.1.0",
"fs-extra": "11.2.0",
"handlebars": "4.7.8",
"npm-run-all": "4.1.5",
"prettier": "3.3.3",
"rimraf": "6.0.1",
"rollup": "4.24.0",
"rollup-plugin-swc3": "0.12.1",
"sass": "1.80.3",
"semver": "7.6.3",
"tslib": "2.8.0",
"typescript": "5.5.4",
"vite": "4.5.5",
"vitest": "0.34.6",
"yargs": "17.7.2"
},
"packageManager": "pnpm@9.12.2"
} }

32355
packs/creatures.json Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
SPDX-FileCopyrightText: 2021 Sascha Martens
SPDX-FileCopyrightText: 2021 Johannes Loher
SPDX-License-Identifier: CC-BY-NC-SA-4.0

View file

@ -1,166 +0,0 @@
{
"_id": "HjpxMlpyjPr3hd3r",
"name": "Adler",
"type": "creature",
"img": "systems/ds4/assets/tokens/devin-night/eagle.png",
"items": ["9vJL3lyC4RTQCZ7e", "zYQAanmjVsNytqBl", "ysyoJA3dYTu4XXvt", "k9Ng7RdfvSRN5JVW", "zUXT2ZkY12TAu5CU"],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 3,
"mod": 0
},
"mobility": {
"base": 8,
"mod": 0
},
"mind": {
"base": 1,
"mod": 0
}
},
"traits": {
"strength": {
"base": 1,
"mod": 0
},
"constitution": {
"base": 0,
"mod": 0
},
"agility": {
"base": 3,
"mod": 0
},
"dexterity": {
"base": 1,
"mod": 0
},
"intellect": {
"base": 0,
"mod": 0
},
"aura": {
"base": 1,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": -6,
"value": 7
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 0
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "Trophäe (BW 1A:11)",
"foeFactor": 1,
"creatureType": "animal",
"sizeCategory": "small",
"experiencePoints": 52,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Adler",
"displayName": 20,
"width": 1,
"height": 1,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": false,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "systems/ds4/assets/tokens/devin-night/eagle.png",
"scaleX": 0.7,
"scaleY": 0.7,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346489,
"modifiedTime": 1688934880952,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!HjpxMlpyjPr3hd3r"
}

View file

@ -1,166 +0,0 @@
{
"_id": "ttzlBKtMWz981WF3",
"name": "Alligator",
"type": "creature",
"img": "systems/ds4/assets/tokens/devin-night/alligator-green.png",
"items": ["Z4ZEuB2l0vo2dJcK", "ACGvtQk97Udg1rih", "Buv9Nzqx0hpPPsew", "ree4HN3j8tv7b18k", "8Aq23UcNNFecGbk9"],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 12,
"mod": 0
},
"mobility": {
"base": 10,
"mod": 0
},
"mind": {
"base": 1,
"mod": 0
}
},
"traits": {
"strength": {
"base": 2,
"mod": 0
},
"constitution": {
"base": 4,
"mod": 0
},
"agility": {
"base": 5,
"mod": 0
},
"dexterity": {
"base": 0,
"mod": 0
},
"intellect": {
"base": 0,
"mod": 0
},
"aura": {
"base": 0,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 52,
"value": 78
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 3
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "Trophäe (BW 1A:14)",
"foeFactor": 10,
"creatureType": "animal",
"sizeCategory": "large",
"experiencePoints": 151,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Alligator",
"displayName": 20,
"width": 2,
"height": 2,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": true,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "systems/ds4/assets/tokens/devin-night/alligator*.png",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995347112,
"modifiedTime": 1688934881499,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!ttzlBKtMWz981WF3"
}

View file

@ -1,30 +0,0 @@
{
"_id": "U6mQ5sQwMjdLgUww",
"name": "Alterung (1 Jahr pro Schadenspunkt)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.mVs6A48mWnfV9hcL"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/aging.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Bei einem Treffer altert das Ziel pro erlittenen Schadenspunkt um 1 Jahr.</p>",
"experiencePoints": -1
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!6KmAeL9lVxWXIeU6.U6mQ5sQwMjdLgUww"
}

View file

@ -1,30 +0,0 @@
{
"_id": "U95WXWQaKfIPiJZK",
"name": "Alterung (1 Jahr pro Schadenspunkt)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.mVs6A48mWnfV9hcL"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/aging.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Bei einem Treffer altert das Ziel pro erlittenen Schadenspunkt um 1 Jahr.</p>",
"experiencePoints": -1
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!cE5kI3uqXWQrCaI5.U95WXWQaKfIPiJZK"
}

View file

@ -1,30 +0,0 @@
{
"_id": "gfZuHfJiCyZUskwn",
"name": "Alterung (1 Jahr pro Treffer)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.e9F812racwKeZPgR"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/aging.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Bei einem Treffer altert das Ziel um 1 Jahr.</p>",
"experiencePoints": 1
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!T9YRYe0vnR4Qg4UM.gfZuHfJiCyZUskwn"
}

View file

@ -1,30 +0,0 @@
{
"_id": "wqzMhcBGP8qbClRW",
"name": "Anfällig (Erde)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.mAWyVCfTFH6JiEIu"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Erd-, Fels- und Steinangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!wYVw1a5UjPS09YxS.wqzMhcBGP8qbClRW"
}

View file

@ -1,30 +0,0 @@
{
"_id": "Kf2kAdMidDaK1SVD",
"name": "Anfällig (Feuer)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.XhAfEVVoSADC880C"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Feuerangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!P3mlpN2JrbnDtLwJ.Kf2kAdMidDaK1SVD"
}

View file

@ -1,30 +0,0 @@
{
"_id": "NKUKD1KfNTpKZygj",
"name": "Anfällig (Feuer)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.XhAfEVVoSADC880C"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Feuerangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!dlrDPQ3is4NkzZJB.NKUKD1KfNTpKZygj"
}

View file

@ -1,30 +0,0 @@
{
"_id": "X9jyAzrnyxuikyg3",
"name": "Anfällig (Feuer)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.XhAfEVVoSADC880C"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Feuerangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!WboyONCY2UZildi9.X9jyAzrnyxuikyg3"
}

View file

@ -1,30 +0,0 @@
{
"_id": "XBYL6p6Lh2di3cL0",
"name": "Anfällig (Licht)",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.aOsmsf7jIK7hU9U8"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Lichtangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!EItxqEiDUOmJdy4n.XBYL6p6Lh2di3cL0"
}

View file

@ -1,30 +0,0 @@
{
"_id": "23wk4FP7dNTkLgB5",
"name": "Anfällig (Luft)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.ImVvi7XqDvf6D2vY"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Blitz-, Sturm- und Windangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!mOQ21HFNisTfu7ve.23wk4FP7dNTkLgB5"
}

View file

@ -1,30 +0,0 @@
{
"_id": "ur7rgX6JTOwscpm5",
"name": "Anfällig (Luft)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.ImVvi7XqDvf6D2vY"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Blitz-, Sturm- und Windangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!GnW2ELzTtLoJmUQ1.ur7rgX6JTOwscpm5"
}

View file

@ -1,30 +0,0 @@
{
"_id": "MPb5ZrTIutJ291XD",
"name": "Anfällig (Wasser)",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.E5WqX3Em2HOAkP2e"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Eis-, Frost- und Wasserangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!O2maANGDJHPLX8aE.MPb5ZrTIutJ291XD"
}

View file

@ -1,30 +0,0 @@
{
"_id": "c95cnrJtMG20InKV",
"name": "Anfällig (Wasser)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.E5WqX3Em2HOAkP2e"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/susceptible.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Erh&auml;lt doppelten Schaden durch Eis-, Frost- und Wasserangriffe.</p>",
"experiencePoints": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!tYcKw69Feoy3B6hG.c95cnrJtMG20InKV"
}

View file

@ -1,30 +0,0 @@
{
"_id": "4JCW7iKb2e9I2ZSj",
"name": "Angst (1)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.rUA7XVCeDkREYfi8"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -1 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!wqgUDJc7Qb28hBBo.4JCW7iKb2e9I2ZSj"
}

View file

@ -1,30 +0,0 @@
{
"_id": "J2eP8hBIWtgayfhH",
"name": "Angst (1)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.rUA7XVCeDkREYfi8"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -1 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!oVKL6zJ2kYMmBuYx.J2eP8hBIWtgayfhH"
}

View file

@ -1,30 +0,0 @@
{
"_id": "k4syi7gvtjmG6yVt",
"name": "Angst (1)",
"type": "specialCreatureAbility",
"sort": 200000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.rUA7XVCeDkREYfi8"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -1 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!SQv63FQBjA5jW5xv.k4syi7gvtjmG6yVt"
}

View file

@ -1,30 +0,0 @@
{
"_id": "yUtiK9PSMcNcvXfr",
"name": "Angst (1)",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.rUA7XVCeDkREYfi8"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -1 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!P3mlpN2JrbnDtLwJ.yUtiK9PSMcNcvXfr"
}

View file

@ -1,30 +0,0 @@
{
"_id": "IolX9qsFGSxYN38o",
"name": "Angst (2)",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.3LGUHTPC3tbVC13X"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -2 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 20
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!6KmAeL9lVxWXIeU6.IolX9qsFGSxYN38o"
}

View file

@ -1,30 +0,0 @@
{
"_id": "QkZT7930qdhuLFxw",
"name": "Angst (2)",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.3LGUHTPC3tbVC13X"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -2 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 20
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!cE5kI3uqXWQrCaI5.QkZT7930qdhuLFxw"
}

View file

@ -1,30 +0,0 @@
{
"_id": "tWwaC91MGIR4k3Uy",
"name": "Angst (2)",
"type": "specialCreatureAbility",
"sort": 200000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.3LGUHTPC3tbVC13X"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -2 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 20
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!vsIywRHMnJM7u4ts.tWwaC91MGIR4k3Uy"
}

View file

@ -1,30 +0,0 @@
{
"_id": "pX6BSfPqftBLxuhf",
"name": "Angst (3)",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.blDuh7uVVhaNSUVU"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/fear.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Kann einmal pro Kampf auf Sicht aktionsfrei Angst erzeugen. Wer GEI + VE + Stufe nicht schafft, ist eingesch&uuml;chert und erh&auml;lt bis zum Ende des Kampfes -3 auf alle Proben. Bei einem Patzer ergreift man die Flucht.</p>",
"experiencePoints": 30
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!e1oy4levSO4VOQx8.pX6BSfPqftBLxuhf"
}

View file

@ -1,30 +0,0 @@
{
"_id": "z3o1FUNSKhEWkcpX",
"name": "Antimagie (10 Meter)",
"type": "specialCreatureAbility",
"sort": 200000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.oUR6JglLxmJZduZz"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/anti-magic.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>S&auml;mtliche Magie in einem Radius von 10 Metern um die Kreatur herum ist wirkungslos. Dies gilt nicht f&uuml;r die eigene Magie der Kreatur oder deren Zauber.</p>",
"experiencePoints": 50
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!8E7Mm0LsiqFm6syY.z3o1FUNSKhEWkcpX"
}

View file

@ -1,73 +0,0 @@
{
"_id": "quDuDAGeMVUvF3WD",
"name": "Arkanes Schwert",
"type": "spell",
"img": "systems/ds4/assets/icons/game-icons/lorc/sword-wound.svg",
"effects": [],
"folder": null,
"sort": 0,
"flags": {
"core": {
"sourceId": "Compendium.ds4.spells.VjvrapwDmBvGYmfj"
}
},
"system": {
"description": "<p>Ein Schwert aus hellem (oder je nach Belieben auch dunklem) Licht erscheint innerhalb eines Radius von VE in Metern um den Zauberwirker herum.</p>\n<p>Innerhalb dieses Wirkungsbereiches k&auml;mpft es v&ouml;llig selbstst&auml;ndig, h&ouml;rt jedoch auf gedankliche Kampfkommandos seines Beschw&ouml;reres wie &bdquo;Greif den gro&szlig;en Troll an&ldquo; oder &bdquo;Sch&uuml;tze mich&ldquo;.</p>\n<p>Bewegt sich der Zauberwirker, wandert der Wirkungsbereich des Schwertes mit ihm mit, so dass die magische Klinge niemals mehr als VE in Metern von ihm getrennt sein kann.</p>\n<p>Das Schwert l&ouml;st sich in seine arkanen Bestandteile auf, sobald seine (nicht heilbaren) LK auf Null oder niedriger sinken bzw. die Zauberdauer verstrichen ist.</p>\n<p>S&auml;mtliche Kampfwerte des Schwertes entsprechen der Stufe des Zauberwirkers +10.</p>\n<p>Die einzige Ausnahme bildet der Laufen-Wert, der dem doppelten Laufen-Wert des Zauberwirkers entspricht.</p>",
"equipped": false,
"spellType": "spellcasting",
"spellModifier": {
"numerical": 0,
"complex": ""
},
"allowsDefense": false,
"spellGroups": {
"lightning": false,
"earth": false,
"water": false,
"ice": false,
"fire": false,
"healing": false,
"light": true,
"air": false,
"transport": false,
"damage": false,
"shadow": false,
"protection": false,
"mindAffecting": false,
"demonology": false,
"necromancy": false,
"transmutation": false,
"area": false
},
"maxDistance": {
"value": "",
"unit": "meter"
},
"effectRadius": {
"value": "VE",
"unit": "meter"
},
"duration": {
"value": "VE x 2",
"unit": "rounds"
},
"cooldownDuration": "1d",
"minimumLevels": {
"healer": null,
"wizard": 10,
"sorcerer": 8
}
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!oVKL6zJ2kYMmBuYx.quDuDAGeMVUvF3WD"
}

View file

@ -1,33 +0,0 @@
{
"_id": "joNh3JSsqfqXk4lU",
"name": "Ast",
"type": "weapon",
"sort": 100000,
"flags": {},
"effects": [],
"img": "icons/svg/item-bag.svg",
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": false,
"attackType": "melee",
"weaponBonus": 0,
"opponentDefense": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!vXmTcBUKZkB2UBD7.joNh3JSsqfqXk4lU"
}

View file

@ -1,33 +0,0 @@
{
"_id": "CM1yKVLm6mhG2eQE",
"name": "Asthiebe",
"type": "weapon",
"sort": 100000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"attackType": "melee",
"weaponBonus": 2,
"opponentDefense": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!WboyONCY2UZildi9.CM1yKVLm6mhG2eQE"
}

View file

@ -1,184 +0,0 @@
{
"_id": "8E7Mm0LsiqFm6syY",
"name": "Augenball",
"type": "creature",
"img": "icons/svg/mystery-man.svg",
"items": [
"V7Qw97Fk5MJgijNs",
"z3o1FUNSKhEWkcpX",
"tKiwh730ZOGMICdg",
"SZ8rvHDbY67EqjDN",
"v6ojDNs7V5QqwKgT",
"coIsPp1V166g8IAm",
"kY4uQF3t99ANzx5T",
"JMp5LjImHvoKsbGo",
"K3QPHlqz66xolbzw",
"16dN0fMIjJwdhvGF",
"u3CLqxahFyF7kVpa",
"BkokuzUTP9U6LtBp",
"lIchGK1m7Y7fMcKG",
"f0MedvERq1s8hy4z",
"cnl7AuqByHHjW1zd",
"D3McezCJz6afqzmR",
"bKyT6b0j4wLXbL7O"
],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 8,
"mod": 0
},
"mobility": {
"base": 4,
"mod": 0
},
"mind": {
"base": 10,
"mod": 0
}
},
"traits": {
"strength": {
"base": 0,
"mod": 0
},
"constitution": {
"base": 4,
"mod": 0
},
"agility": {
"base": 0,
"mod": 0
},
"dexterity": {
"base": 2,
"mod": 0
},
"intellect": {
"base": 2,
"mod": 0
},
"aura": {
"base": 3,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 66,
"value": 88
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 0
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "BW #5A:20, #5M:20",
"foeFactor": 23,
"creatureType": "magicalEntity",
"sizeCategory": "large",
"experiencePoints": 255,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Augenball",
"displayName": 20,
"width": 2,
"height": 2,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": false,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "icons/svg/mystery-man.svg",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346257,
"modifiedTime": 1688934880746,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!8E7Mm0LsiqFm6syY"
}

View file

@ -1,166 +0,0 @@
{
"_id": "InLjj4RGxfkDrtXr",
"name": "Bär",
"type": "creature",
"img": "systems/ds4/assets/tokens/devin-night/bear-1.png",
"items": ["qZayWokGcZreHpfI", "ayDGYJevUkbQ3N0c", "PKewYpkEmAWTc1j5", "WbEsNLQpzoWJlJyj"],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 12,
"mod": 0
},
"mobility": {
"base": 8,
"mod": 0
},
"mind": {
"base": 1,
"mod": 0
}
},
"traits": {
"strength": {
"base": 3,
"mod": 0
},
"constitution": {
"base": 3,
"mod": 0
},
"agility": {
"base": 4,
"mod": 0
},
"dexterity": {
"base": 0,
"mod": 0
},
"intellect": {
"base": 0,
"mod": 0
},
"aura": {
"base": 0,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 50,
"value": 75
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 3
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "Trophäe (BW 1A:16)",
"foeFactor": 9,
"creatureType": "animal",
"sizeCategory": "large",
"experiencePoints": 139,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Bär",
"displayName": 20,
"width": 2,
"height": 2,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": true,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "systems/ds4/assets/tokens/devin-night/bear*.png",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346499,
"modifiedTime": 1688934880959,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!InLjj4RGxfkDrtXr"
}

View file

@ -1,33 +0,0 @@
{
"_id": "Icq7W8YrjXTIlb7C",
"name": "Bandagen",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 1,
"armorMaterialType": "cloth",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!P3mlpN2JrbnDtLwJ.Icq7W8YrjXTIlb7C"
}

View file

@ -1,173 +0,0 @@
{
"_id": "GVLSLNSoMybeWhBP",
"name": "Basilisk",
"type": "creature",
"img": "systems/ds4/assets/tokens/devin-night/basilisk-green.png",
"items": [
"y5i2zrZBp74DKQrQ",
"3CFakJA3eQJYSFN7",
"x7vdeybwnlRnlqTu",
"kQZnCtDlaCaKc38S",
"cZa7Ms69DWYg8Pgz",
"Hn8EIElYWelAKxiD"
],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 14,
"mod": 0
},
"mobility": {
"base": 7,
"mod": 0
},
"mind": {
"base": 1,
"mod": 0
}
},
"traits": {
"strength": {
"base": 3,
"mod": 0
},
"constitution": {
"base": 4,
"mod": 0
},
"agility": {
"base": 3,
"mod": 0
},
"dexterity": {
"base": 0,
"mod": 0
},
"intellect": {
"base": 0,
"mod": 0
},
"aura": {
"base": 1,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 140,
"value": 168
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 2.5
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "Trophäe (BW 2A:20)",
"foeFactor": 18,
"creatureType": "magicalEntity",
"sizeCategory": "large",
"experiencePoints": 206,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Basilisk",
"displayName": 20,
"width": 2,
"height": 2,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": true,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "systems/ds4/assets/tokens/devin-night/basilisk*.png",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346388,
"modifiedTime": 1688934880889,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!GVLSLNSoMybeWhBP"
}

View file

@ -1,174 +0,0 @@
{
"_id": "WboyONCY2UZildi9",
"name": "Baumherr",
"type": "creature",
"img": "icons/svg/mystery-man.svg",
"items": [
"CM1yKVLm6mhG2eQE",
"sZw8glq3cnPHu6yq",
"X9jyAzrnyxuikyg3",
"B1Sw09kZopPZB8ys",
"x0mAm5abWWHlKJLz",
"2bA1MnqkTTwKtMoS",
"fKCcOlyaebvj1HuL"
],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 20,
"mod": 0
},
"mobility": {
"base": 1,
"mod": 0
},
"mind": {
"base": 1,
"mod": 0
}
},
"traits": {
"strength": {
"base": 5,
"mod": 0
},
"constitution": {
"base": 5,
"mod": 0
},
"agility": {
"base": 0,
"mod": 0
},
"dexterity": {
"base": 0,
"mod": 0
},
"intellect": {
"base": 0,
"mod": 0
},
"aura": {
"base": 0,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 35,
"value": 70
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 2
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "Lediglich Brennholz",
"foeFactor": 23,
"creatureType": "plantBeing",
"sizeCategory": "large",
"experiencePoints": 158,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Baumherr",
"displayName": 20,
"width": 2,
"height": 2,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": false,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "icons/svg/mystery-man.svg",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346710,
"modifiedTime": 1688934881181,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!WboyONCY2UZildi9"
}

View file

@ -1,33 +0,0 @@
{
"_id": "ndjWMSfPfmPY9AUY",
"name": "Baumstamm",
"type": "weapon",
"sort": 100000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"attackType": "melee",
"weaponBonus": 4,
"opponentDefense": -4
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!rULL0cHbyACJsHDC.ndjWMSfPfmPY9AUY"
}

View file

@ -1,30 +0,0 @@
{
"_id": "VXyznv68DT2Guc0A",
"name": "Bezaubern",
"type": "specialCreatureAbility",
"img": "systems/ds4/assets/icons/official/special-creature-abilities/charm.png",
"effects": [],
"folder": null,
"sort": 0,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.HMCFkxVzU2b3KkSA"
}
},
"system": {
"description": "<p>Kann Gegner mit einem &bdquo;Lockruf&ldquo; bezaubern. Dieser Zauber funktioniert wie der Zauberspruch @Compendium[ds4.spells.wZYElRaDmhqgzUvQ]{Gehorche}. Abklingzeit des <em>Lockrufs</em>: 10 Kampfrunden</p>",
"experiencePoints": 25
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!s56U2LeRInrje3xh.VXyznv68DT2Guc0A"
}

View file

@ -1,33 +0,0 @@
{
"_id": "8Um85s0Ayigqse3B",
"name": "Biss",
"type": "weapon",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"attackType": "melee",
"weaponBonus": 2,
"opponentDefense": -1
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!PVuNoFILDAHpqGsa.8Um85s0Ayigqse3B"
}

View file

@ -1,33 +0,0 @@
{
"_id": "9olbXmWVzPkmPhvu",
"name": "Biss",
"type": "weapon",
"sort": 100000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"attackType": "melee",
"weaponBonus": 1,
"opponentDefense": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!O2maANGDJHPLX8aE.9olbXmWVzPkmPhvu"
}

View file

@ -1,33 +0,0 @@
{
"_id": "j0NbwyhdJPipL7Rl",
"name": "Biss",
"type": "weapon",
"sort": 100000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"attackType": "melee",
"weaponBonus": 1,
"opponentDefense": 0
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!Qm2toXbf6EVmvRS1.j0NbwyhdJPipL7Rl"
}

View file

@ -1,73 +0,0 @@
{
"_id": "16dN0fMIjJwdhvGF",
"name": "Blenden",
"type": "spell",
"img": "systems/ds4/assets/icons/game-icons/lorc/laser-sparks.svg",
"effects": [],
"folder": null,
"sort": 100000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.spells.JldAx8a91vVO2wUf"
}
},
"system": {
"description": "<p>Ein glei&szlig;ender Lichtstrahl schie&szlig;t aus der Hand des Zauberwirkers und blendet bei Erfolg das Ziel (welches dagegen keine Abwehr w&uuml;rfeln darf).</p><p>Ein geblendetes Ziel hat -8 auf alle Handlungen, bei denen es sehen k&ouml;nnen sollte.</p><p>Selbst augenlose Untote, wie beispielsweise Skelette, werden durch das magische Licht geblendet. Blinde Lebewesen sind dagegen nicht betroffen.</p>",
"equipped": true,
"spellType": "targetedSpellcasting",
"spellModifier": {
"numerical": 0,
"complex": "-(AGI+AU)/2 des Ziels"
},
"allowsDefense": false,
"spellGroups": {
"lightning": false,
"earth": false,
"water": false,
"ice": false,
"fire": false,
"healing": false,
"light": true,
"air": false,
"transport": false,
"damage": false,
"shadow": false,
"protection": false,
"mindAffecting": false,
"demonology": false,
"necromancy": false,
"transmutation": false,
"area": false
},
"maxDistance": {
"value": "VE x 5",
"unit": "meter"
},
"effectRadius": {
"value": "",
"unit": "meter"
},
"duration": {
"value": "Prb.",
"unit": "rounds"
},
"cooldownDuration": "5r",
"minimumLevels": {
"healer": 1,
"wizard": 5,
"sorcerer": null
}
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!8E7Mm0LsiqFm6syY.16dN0fMIjJwdhvGF"
}

View file

@ -1,30 +0,0 @@
{
"_id": "MuXvP2TjwvevxLpo",
"name": "Blickangriff",
"type": "specialCreatureAbility",
"sort": 400000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.l4ewILWP2zbiSM97"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/gaze-attack.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Greift mit seinem Blick aktionsfrei jeden an, dem GEI+AU misslingt. Wer gegen die Kreatur vorgeht, ohne ihr in die Augen zu sehen, erh&auml;lt -4 auf alle Proben, ist aber nicht mehr Ziel ihrer Blickangriffe.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!F3zJ4xbHwN9syuK8.MuXvP2TjwvevxLpo"
}

View file

@ -1,30 +0,0 @@
{
"_id": "x7vdeybwnlRnlqTu",
"name": "Blickangriff",
"type": "specialCreatureAbility",
"sort": 300000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.l4ewILWP2zbiSM97"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/gaze-attack.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Greift mit seinem Blick aktionsfrei jeden an, dem GEI+AU misslingt. Wer gegen die Kreatur vorgeht, ohne ihr in die Augen zu sehen, erh&auml;lt -4 auf alle Proben, ist aber nicht mehr Ziel ihrer Blickangriffe.</p>",
"experiencePoints": 10
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!GVLSLNSoMybeWhBP.x7vdeybwnlRnlqTu"
}

View file

@ -1,30 +0,0 @@
{
"_id": "yjkoipelFXEzcy1x",
"name": "Blitz-Odem",
"type": "specialCreatureAbility",
"sort": 800000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.special-creature-abilities.sDffbUUXg88Vn2Pq"
}
},
"img": "systems/ds4/assets/icons/official/special-creature-abilities/breath-weapon.png",
"effects": [],
"folder": null,
"system": {
"description": "<p>Nur alle W20 Runden einsetzbar. Erzeugt nicht abwehrbaren Schaden (Schie&szlig;en-Angriff) &ndash; nur f&uuml;r magische Abwehrboni wird gew&uuml;rfelt (PW: Bonush&ouml;he). GE x 5 m langer Kegel (am Ende GE x 3 m breit).</p>",
"experiencePoints": -1
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!nDRdljcZzkonbU0s.yjkoipelFXEzcy1x"
}

View file

@ -1,73 +0,0 @@
{
"_id": "aa8a89EaVy8fjgLn",
"name": "Blitz",
"type": "spell",
"sort": 900000,
"flags": {
"core": {
"sourceId": "Compendium.ds4.spells.Senq5ub2Cx0agJgi"
}
},
"img": "systems/ds4/assets/icons/game-icons/delapouite/bolt-spell-cast.svg",
"effects": [],
"folder": null,
"system": {
"description": "<p>Der Zauberwirker schie&szlig;t einen Blitz auf einen Feind. Gegner in Metallr&uuml;stung d&uuml;rfen keine Abwehr gegen Blitze w&uuml;rfeln.</p>",
"equipped": false,
"spellType": "targetedSpellcasting",
"spellModifier": {
"numerical": 3,
"complex": ""
},
"allowsDefense": true,
"spellGroups": {
"lightning": true,
"earth": false,
"water": false,
"ice": false,
"fire": false,
"healing": false,
"light": false,
"air": false,
"transport": false,
"damage": true,
"shadow": false,
"protection": false,
"mindAffecting": false,
"demonology": false,
"necromancy": false,
"transmutation": false,
"area": false
},
"maxDistance": {
"value": "VE x 10",
"unit": "meter"
},
"effectRadius": {
"value": "",
"unit": "meter"
},
"duration": {
"value": "Sofort",
"unit": "custom"
},
"cooldownDuration": "1r",
"minimumLevels": {
"healer": 10,
"wizard": 7,
"sorcerer": 7
}
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!sCBrVIDh2umWr63g.aa8a89EaVy8fjgLn"
}

View file

@ -1,33 +0,0 @@
{
"_id": "hcB5LcidhVSW5rI7",
"name": "Brennendes Fell",
"type": "armor",
"sort": 300000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 1,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!O2maANGDJHPLX8aE.hcB5LcidhVSW5rI7"
}

View file

@ -1,33 +0,0 @@
{
"_id": "b1YoPObYAlp0qgLo",
"name": "Chitinpanzer",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 3,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!WYvb8G0z5GuNi7kO.b1YoPObYAlp0qgLo"
}

View file

@ -1,173 +0,0 @@
{
"_id": "PKPmkOMLDGwS9QZJ",
"name": "Dämonenfürst",
"type": "creature",
"img": "icons/svg/mystery-man.svg",
"items": [
"bXEiQJc7aJmLW1K4",
"N6MfjihlDL9hfse6",
"BDsxMEuEKfjEgFk3",
"AHJhJgRCvw2dKx78",
"DURD01IkVxPAwlxf",
"hvOFruV5fmieLXnk"
],
"effects": [],
"folder": null,
"sort": 0,
"flags": {},
"system": {
"attributes": {
"body": {
"base": 20,
"mod": 0
},
"mobility": {
"base": 20,
"mod": 0
},
"mind": {
"base": 10,
"mod": 0
}
},
"traits": {
"strength": {
"base": 10,
"mod": 0
},
"constitution": {
"base": 10,
"mod": 0
},
"agility": {
"base": 10,
"mod": 0
},
"dexterity": {
"base": 10,
"mod": 0
},
"intellect": {
"base": 5,
"mod": 0
},
"aura": {
"base": 5,
"mod": 0
}
},
"combatValues": {
"hitPoints": {
"mod": 360,
"value": 400
},
"defense": {
"mod": 0
},
"initiative": {
"mod": 0
},
"movement": {
"mod": 5
},
"meleeAttack": {
"mod": 0
},
"rangedAttack": {
"mod": 0
},
"spellcasting": {
"mod": 0
},
"targetedSpellcasting": {
"mod": 0
}
},
"baseInfo": {
"loot": "-",
"foeFactor": 42,
"creatureType": "magicalEntity",
"sizeCategory": "colossal",
"experiencePoints": 579,
"description": ""
}
},
"ownership": {
"default": 0
},
"prototypeToken": {
"flags": {},
"name": "Dämonenfürst",
"displayName": 20,
"width": 4,
"height": 4,
"lockRotation": false,
"rotation": 0,
"actorLink": false,
"disposition": -1,
"displayBars": 40,
"bar1": {
"attribute": "combatValues.hitPoints"
},
"bar2": {
"attribute": null
},
"randomImg": false,
"alpha": 1,
"light": {
"alpha": 0.5,
"angle": 360,
"bright": 0,
"coloration": 1,
"dim": 0,
"luminosity": 0.5,
"saturation": 0,
"contrast": 0,
"shadows": 0,
"animation": {
"speed": 5,
"intensity": 5,
"reverse": false,
"type": null
},
"darkness": {
"min": 0,
"max": 1
},
"attenuation": 0.5,
"color": null
},
"texture": {
"src": "icons/svg/mystery-man.svg",
"scaleX": 1,
"scaleY": 1,
"offsetX": 0,
"offsetY": 0,
"rotation": 0,
"tint": null
},
"sight": {
"angle": 360,
"enabled": false,
"range": 0,
"brightness": 1,
"visionMode": "basic",
"color": null,
"attenuation": 0.1,
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"appendNumber": false,
"prependAdjective": false
},
"_stats": {
"systemId": "ds4",
"systemVersion": "1.19.4",
"coreVersion": "11.305",
"createdTime": 1668995346629,
"modifiedTime": 1688934881055,
"lastModifiedBy": "DS4BuildSystem00"
},
"_key": "!actors!PKPmkOMLDGwS9QZJ"
}

View file

@ -1,33 +0,0 @@
{
"_id": "N6MfjihlDL9hfse6",
"name": "Dämonenhaut",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 2,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!RxSUSzQBSTFYHOlV.N6MfjihlDL9hfse6"
}

View file

@ -1,33 +0,0 @@
{
"_id": "DDaq3xgZrGuEl4Dc",
"name": "Dicke Borstenhaut",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 2,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!FxGhbznQbwd0jRUT.DDaq3xgZrGuEl4Dc"
}

View file

@ -1,33 +0,0 @@
{
"_id": "pSQjVkwbjngPoEPZ",
"name": "Dicke Borstenhaut",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 2,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!GWNFUkgxocfKchIQ.pSQjVkwbjngPoEPZ"
}

View file

@ -1,33 +0,0 @@
{
"_id": "sZw8glq3cnPHu6yq",
"name": "Dicke Rinde",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 2,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!WboyONCY2UZildi9.sZw8glq3cnPHu6yq"
}

View file

@ -1,33 +0,0 @@
{
"_id": "b80BR5n1f6WvGavG",
"name": "Dicke Spinnenhaut",
"type": "armor",
"sort": 300000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 1,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!4276kgAddflo3bwN.b80BR5n1f6WvGavG"
}

View file

@ -1,33 +0,0 @@
{
"_id": "OehvVDNjDg4xbsW7",
"name": "Dickhäuter",
"type": "armor",
"sort": 200000,
"flags": {},
"img": "icons/svg/mystery-man.svg",
"effects": [],
"folder": null,
"system": {
"description": "",
"quantity": 1,
"price": 0,
"availability": "unset",
"storageLocation": "-",
"equipped": true,
"armorValue": 2,
"armorMaterialType": "natural",
"armorType": "body"
},
"ownership": {
"default": 0
},
"_stats": {
"systemId": null,
"systemVersion": null,
"coreVersion": null,
"createdTime": null,
"modifiedTime": null,
"lastModifiedBy": null
},
"_key": "!actors.items!BIyY1wlxWtJ5FRQJ.OehvVDNjDg4xbsW7"
}

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