generated from DNDs/dnd-template
Compare commits
53 Commits
9a82d8c1f3
...
eebb03b3e4
Author | SHA1 | Date | |
---|---|---|---|
eebb03b3e4 | |||
8716b13f83 | |||
e696ea82fc | |||
4d903684c4 | |||
193b26e3ca | |||
c901d30e75 | |||
bcb083d03c | |||
1787a5250a | |||
6f01507629 | |||
f6c63245d6 | |||
5a5af751a3 | |||
9e3a402f95 | |||
935a33dfde | |||
7f889db8b9 | |||
49e0d1e3af | |||
ce9a1c8ef5 | |||
9a77b933c5 | |||
3ff7289bf0 | |||
3b5241d572 | |||
da2ebf2c53 | |||
25eccba389 | |||
309c40c451 | |||
cc1cdaf1a4 | |||
648e7784e9 | |||
3f08a28309 | |||
44a8774030 | |||
5a2ed1a43b | |||
69c8a28cde | |||
66a4b19be4 | |||
b6a1324e8e | |||
b79f9a681e | |||
9a83ce385b | |||
f567e8ce7c | |||
7755c2d9f2 | |||
c3b1a5c2ef | |||
eb236a440c | |||
1e29e57aec | |||
ccc17b9248 | |||
d7d1c01eb8 | |||
cc425c9000 | |||
e0f35881fc | |||
aa0d07c2cf | |||
79d3ea4a09 | |||
04ab2d8198 | |||
360bcdacdd | |||
6d9a29cf47 | |||
523615cb2a | |||
e79cc0423c | |||
df6a75a93a | |||
857b4b4611 | |||
18d5ff1248 | |||
e037f81d2b | |||
350248b4d4 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
.obsidian/workspace
|
.obsidian
|
||||||
|
.trash
|
||||||
|
.obsidian/*
|
||||||
|
11
.obsidian/app.json
vendored
11
.obsidian/app.json
vendored
@ -6,10 +6,17 @@
|
|||||||
"promptDelete": false,
|
"promptDelete": false,
|
||||||
"alwaysUpdateLinks": true,
|
"alwaysUpdateLinks": true,
|
||||||
"showLineNumber": true,
|
"showLineNumber": true,
|
||||||
"spellcheck": true,
|
"spellcheck": false,
|
||||||
"spellcheckLanguages": [
|
"spellcheckLanguages": [
|
||||||
"de",
|
"de",
|
||||||
"en-GB"
|
"en-GB"
|
||||||
],
|
],
|
||||||
"showUnsupportedFiles": true
|
"showUnsupportedFiles": true,
|
||||||
|
"pdfExportSettings": {
|
||||||
|
"pageSize": "A4",
|
||||||
|
"landscape": false,
|
||||||
|
"margin": "0",
|
||||||
|
"downscalePercent": 100
|
||||||
|
},
|
||||||
|
"communityThemeSortOrder": "download"
|
||||||
}
|
}
|
7
.obsidian/appearance.json
vendored
7
.obsidian/appearance.json
vendored
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"translucency": true,
|
"translucency": false,
|
||||||
"baseFontSize": 16,
|
"baseFontSize": 18,
|
||||||
"cssTheme": "Deep Work"
|
"cssTheme": "Willemstad",
|
||||||
|
"theme": "moonstone"
|
||||||
}
|
}
|
7
.obsidian/community-plugins.json
vendored
7
.obsidian/community-plugins.json
vendored
@ -1,8 +1,11 @@
|
|||||||
[
|
[
|
||||||
"obsidian-git",
|
"obsidian-git",
|
||||||
"table-editor-obsidian",
|
"table-editor-obsidian",
|
||||||
"obsidian-image-toolkit",
|
|
||||||
"obsidian-icons-plugin",
|
"obsidian-icons-plugin",
|
||||||
"obsidian-reading-time",
|
"obsidian-reading-time",
|
||||||
"dataview"
|
"dataview",
|
||||||
|
"obsidian-dialogue-plugin",
|
||||||
|
"obsidian-image-toolkit",
|
||||||
|
"obsidian-pandoc",
|
||||||
|
"obsidian-languagetool-plugin"
|
||||||
]
|
]
|
1
.obsidian/core-plugins.json
vendored
1
.obsidian/core-plugins.json
vendored
@ -15,7 +15,6 @@
|
|||||||
"markdown-importer",
|
"markdown-importer",
|
||||||
"outline",
|
"outline",
|
||||||
"word-count",
|
"word-count",
|
||||||
"open-with-default-app",
|
|
||||||
"workspaces",
|
"workspaces",
|
||||||
"file-recovery"
|
"file-recovery"
|
||||||
]
|
]
|
8
.obsidian/graph.json
vendored
8
.obsidian/graph.json
vendored
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"collapse-filter": true,
|
"collapse-filter": false,
|
||||||
"search": "",
|
"search": "",
|
||||||
"showTags": false,
|
"showTags": true,
|
||||||
"showAttachments": false,
|
"showAttachments": true,
|
||||||
"hideUnresolved": false,
|
"hideUnresolved": false,
|
||||||
"showOrphans": true,
|
"showOrphans": true,
|
||||||
"collapse-color-groups": true,
|
"collapse-color-groups": true,
|
||||||
@ -17,6 +17,6 @@
|
|||||||
"repelStrength": 10,
|
"repelStrength": 10,
|
||||||
"linkStrength": 1,
|
"linkStrength": 1,
|
||||||
"linkDistance": 250,
|
"linkDistance": 250,
|
||||||
"scale": 0.41599798120350023,
|
"scale": 0.6346285676930677,
|
||||||
"close": true
|
"close": true
|
||||||
}
|
}
|
21
.obsidian/hotkeys.json
vendored
21
.obsidian/hotkeys.json
vendored
@ -1 +1,20 @@
|
|||||||
{}
|
{
|
||||||
|
"editor:swap-line-up": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "ArrowUp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:swap-line-down": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "ArrowDown"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
340
.obsidian/plugins/obsidian-dialogue-plugin/main.js
vendored
Normal file
340
.obsidian/plugins/obsidian-dialogue-plugin/main.js
vendored
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __create = Object.create;
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __getProtoOf = Object.getPrototypeOf;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
||||||
|
var __export = (target, all) => {
|
||||||
|
__markAsModule(target);
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __reExport = (target, module2, desc) => {
|
||||||
|
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||||
|
for (let key of __getOwnPropNames(module2))
|
||||||
|
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||||
|
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
var __toModule = (module2) => {
|
||||||
|
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
||||||
|
};
|
||||||
|
var __async = (__this, __arguments, generator) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var fulfilled = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.next(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var rejected = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.throw(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||||
|
step((generator = generator.apply(__this, __arguments)).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
__export(exports, {
|
||||||
|
default: () => DialoguePlugin
|
||||||
|
});
|
||||||
|
var import_obsidian2 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/types/dialogueTitleMode.ts
|
||||||
|
var DialogueTitleMode;
|
||||||
|
(function(DialogueTitleMode2) {
|
||||||
|
DialogueTitleMode2["Disabled"] = "disabled";
|
||||||
|
DialogueTitleMode2["First"] = "first";
|
||||||
|
DialogueTitleMode2["All"] = "all";
|
||||||
|
})(DialogueTitleMode || (DialogueTitleMode = {}));
|
||||||
|
|
||||||
|
// src/constants/classes.ts
|
||||||
|
var CLASSES = class {
|
||||||
|
};
|
||||||
|
CLASSES.DIALOGUE_WRAPPER = "dialogue-plugin-wrapper";
|
||||||
|
CLASSES.BLOCK_WRAPPER = "dialogue-plugin-block-wrapper";
|
||||||
|
CLASSES.MESSAGE_WRAPPER_LEFT = "dialogue-plugin-message-wrapper-left";
|
||||||
|
CLASSES.MESSAGE_WRAPPER_RIGHT = "dialogue-plugin-message-wrapper-right";
|
||||||
|
CLASSES.MESSAGE = "dialogue-plugin-message";
|
||||||
|
CLASSES.MESSAGE_TITLE = "dialogue-plugin-message-title";
|
||||||
|
CLASSES.MESSAGE_CONTENT = "dialogue-plugin-message-content";
|
||||||
|
CLASSES.DELIMITER_WRAPPER = "dialogue-plugin-delimiter-wrapper";
|
||||||
|
CLASSES.DELIMITER = "dialogue-plugin-delimiter";
|
||||||
|
CLASSES.DELIMITER_DOT = "dialogue-plugin-delimiter-dot";
|
||||||
|
CLASSES.COMMENT_WRAPPER = "dialogue-plugin-comment-wrapper";
|
||||||
|
CLASSES.COMMENT = "dialogue-plugin-comment";
|
||||||
|
|
||||||
|
// src/components/message.ts
|
||||||
|
var SIDES = class {
|
||||||
|
};
|
||||||
|
SIDES.LEFT = "left";
|
||||||
|
SIDES.RIGHT = "right";
|
||||||
|
var Message = class {
|
||||||
|
constructor(content, side, dialogueSettings) {
|
||||||
|
this.content = content;
|
||||||
|
this.side = side;
|
||||||
|
this.dialogueSettings = dialogueSettings;
|
||||||
|
this.participant = this.side == SIDES.LEFT ? this.dialogueSettings.leftParticipant : this.dialogueSettings.rightParticipant;
|
||||||
|
this.renderMessage();
|
||||||
|
}
|
||||||
|
renderMessage() {
|
||||||
|
const messageEl = this.createMessageEl();
|
||||||
|
if (this.titleShouldRender()) {
|
||||||
|
messageEl.createDiv({ cls: CLASSES.MESSAGE_TITLE, text: this.participant.title });
|
||||||
|
}
|
||||||
|
messageEl.createDiv({ cls: CLASSES.MESSAGE_CONTENT, text: this.content });
|
||||||
|
}
|
||||||
|
createMessageEl() {
|
||||||
|
var _a;
|
||||||
|
const sideClass = this.side == SIDES.LEFT ? CLASSES.MESSAGE_WRAPPER_LEFT : CLASSES.MESSAGE_WRAPPER_RIGHT;
|
||||||
|
const messageWrapperEl = this.dialogueSettings.parent.createDiv({
|
||||||
|
cls: `${CLASSES.BLOCK_WRAPPER} ${sideClass}`
|
||||||
|
});
|
||||||
|
return messageWrapperEl.createDiv({
|
||||||
|
cls: CLASSES.MESSAGE,
|
||||||
|
attr: {
|
||||||
|
style: `max-width: ${this.dialogueSettings.messageMaxWidth};`,
|
||||||
|
"data-participant-name": this.participant.title,
|
||||||
|
"data-participant-id": (_a = this.participant.enforcedId) != null ? _a : this.dialogueSettings.participants.get(this.participant.title)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
titleShouldRender() {
|
||||||
|
if (this.participant.title.length < 1)
|
||||||
|
return false;
|
||||||
|
switch (this.dialogueSettings.titleMode) {
|
||||||
|
case DialogueTitleMode.Disabled:
|
||||||
|
return false;
|
||||||
|
case DialogueTitleMode.All:
|
||||||
|
return true;
|
||||||
|
case DialogueTitleMode.First: {
|
||||||
|
if (this.participant.renderedOnce)
|
||||||
|
return false;
|
||||||
|
this.participant.renderedOnce = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/components/delimiter.ts
|
||||||
|
var Delimiter = class {
|
||||||
|
constructor(dialogueSettings) {
|
||||||
|
this.dialogueSettings = dialogueSettings;
|
||||||
|
this.renderDelimiter();
|
||||||
|
}
|
||||||
|
renderDelimiter() {
|
||||||
|
const delimiterWrapperEl = this.dialogueSettings.parent.createDiv({
|
||||||
|
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.DELIMITER_WRAPPER}`
|
||||||
|
});
|
||||||
|
const delimiterEl = delimiterWrapperEl.createDiv({ cls: CLASSES.DELIMITER });
|
||||||
|
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
|
||||||
|
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
|
||||||
|
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/components/comment.ts
|
||||||
|
var Comment = class {
|
||||||
|
constructor(content, dialogueSettings) {
|
||||||
|
this.content = content;
|
||||||
|
this.dialogueSettings = dialogueSettings;
|
||||||
|
this.renderComment();
|
||||||
|
}
|
||||||
|
renderComment() {
|
||||||
|
const commentEl = this.dialogueSettings.parent.createDiv({
|
||||||
|
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.COMMENT_WRAPPER}`
|
||||||
|
});
|
||||||
|
return commentEl.createDiv({
|
||||||
|
cls: CLASSES.COMMENT,
|
||||||
|
text: this.content,
|
||||||
|
attr: {
|
||||||
|
style: `max-width: ${this.dialogueSettings.commentMaxWidth};`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/dialogue.ts
|
||||||
|
var KEYWORDS = class {
|
||||||
|
};
|
||||||
|
KEYWORDS.LEFT_PATTERN = /^l(?:eft)?(?:-(\d+))?:/i;
|
||||||
|
KEYWORDS.RIGHT_PATTERN = /^r(?:ight)?(?:-(\d+))?:/i;
|
||||||
|
KEYWORDS.TITLE_MODE = "titleMode:";
|
||||||
|
KEYWORDS.MESSAGE_MAX_WIDTH = "messageMaxWidth:";
|
||||||
|
KEYWORDS.COMMENT_MAX_WIDTH = "commentMaxWidth:";
|
||||||
|
KEYWORDS.DELIMITER = /^-|delimiter/;
|
||||||
|
KEYWORDS.COMMENT = "#";
|
||||||
|
KEYWORDS.MESSAGE_LEFT = "<";
|
||||||
|
KEYWORDS.MESSAGE_RIGHT = ">";
|
||||||
|
var DialogueRenderer = class {
|
||||||
|
constructor(src, parent, settings) {
|
||||||
|
this.src = src;
|
||||||
|
this.dialogueWrapperEl = parent.createDiv({ cls: CLASSES.DIALOGUE_WRAPPER });
|
||||||
|
this.dialogueSettings = {
|
||||||
|
parent: this.dialogueWrapperEl,
|
||||||
|
leftParticipant: {
|
||||||
|
title: settings.defaultLeftTitle,
|
||||||
|
renderedOnce: false,
|
||||||
|
enforcedId: null
|
||||||
|
},
|
||||||
|
rightParticipant: {
|
||||||
|
title: settings.defaultRightTitle,
|
||||||
|
renderedOnce: false,
|
||||||
|
enforcedId: null
|
||||||
|
},
|
||||||
|
titleMode: settings.defaultTitleMode,
|
||||||
|
messageMaxWidth: settings.defaultMessageMaxWidth,
|
||||||
|
commentMaxWidth: settings.defaultCommentMaxWidth,
|
||||||
|
participants: new Map()
|
||||||
|
};
|
||||||
|
this.renderDialogue();
|
||||||
|
}
|
||||||
|
registerParticipant(participant) {
|
||||||
|
if (!this.dialogueSettings.participants.has(participant)) {
|
||||||
|
this.dialogueSettings.participants.set(participant, this.dialogueSettings.participants.size + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getEnforcedId(pattern, line) {
|
||||||
|
let enforcedId = null;
|
||||||
|
const result = pattern.exec(line);
|
||||||
|
if (result != null && result.length > 1) {
|
||||||
|
enforcedId = result[1];
|
||||||
|
}
|
||||||
|
return enforcedId;
|
||||||
|
}
|
||||||
|
renderDialogue() {
|
||||||
|
const lines = this.src.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
|
||||||
|
for (const line of lines) {
|
||||||
|
if (KEYWORDS.LEFT_PATTERN.test(line)) {
|
||||||
|
this.dialogueSettings.leftParticipant.title = line.split(":").splice(1).join(":").trim();
|
||||||
|
this.dialogueSettings.leftParticipant.renderedOnce = false;
|
||||||
|
this.dialogueSettings.leftParticipant.enforcedId = this.getEnforcedId(KEYWORDS.LEFT_PATTERN, line);
|
||||||
|
} else if (KEYWORDS.RIGHT_PATTERN.test(line)) {
|
||||||
|
this.dialogueSettings.rightParticipant.title = line.split(":").splice(1).join(":").trim();
|
||||||
|
this.dialogueSettings.rightParticipant.renderedOnce = false;
|
||||||
|
this.dialogueSettings.rightParticipant.enforcedId = this.getEnforcedId(KEYWORDS.RIGHT_PATTERN, line);
|
||||||
|
} else if (line.startsWith(KEYWORDS.TITLE_MODE)) {
|
||||||
|
const modeName = line.substr(KEYWORDS.TITLE_MODE.length).trim().toLowerCase();
|
||||||
|
if (Object.values(DialogueTitleMode).some((mode) => mode == modeName)) {
|
||||||
|
this.dialogueSettings.titleMode = modeName;
|
||||||
|
}
|
||||||
|
} else if (line.startsWith(KEYWORDS.MESSAGE_MAX_WIDTH)) {
|
||||||
|
this.dialogueSettings.messageMaxWidth = line.substr(KEYWORDS.MESSAGE_MAX_WIDTH.length).trim();
|
||||||
|
} else if (line.startsWith(KEYWORDS.COMMENT_MAX_WIDTH)) {
|
||||||
|
this.dialogueSettings.commentMaxWidth = line.substr(KEYWORDS.COMMENT_MAX_WIDTH.length).trim();
|
||||||
|
} else if (KEYWORDS.DELIMITER.test(line)) {
|
||||||
|
new Delimiter(this.dialogueSettings);
|
||||||
|
} else if (line.startsWith(KEYWORDS.COMMENT)) {
|
||||||
|
const content = line.substr(KEYWORDS.COMMENT.length);
|
||||||
|
new Comment(content, this.dialogueSettings);
|
||||||
|
} else if (line.startsWith(KEYWORDS.MESSAGE_LEFT)) {
|
||||||
|
const content = line.substr(KEYWORDS.MESSAGE_LEFT.length);
|
||||||
|
this.registerParticipant(this.dialogueSettings.leftParticipant.title);
|
||||||
|
new Message(content, SIDES.LEFT, this.dialogueSettings);
|
||||||
|
} else if (line.startsWith(KEYWORDS.MESSAGE_RIGHT)) {
|
||||||
|
const content = line.substr(KEYWORDS.MESSAGE_RIGHT.length);
|
||||||
|
this.registerParticipant(this.dialogueSettings.rightParticipant.title);
|
||||||
|
new Message(content, SIDES.RIGHT, this.dialogueSettings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/settings.ts
|
||||||
|
var import_obsidian = __toModule(require("obsidian"));
|
||||||
|
var DEFAULT_SETTINGS = {
|
||||||
|
defaultLeftTitle: "",
|
||||||
|
defaultRightTitle: "",
|
||||||
|
defaultTitleMode: DialogueTitleMode.First,
|
||||||
|
defaultMessageMaxWidth: "60%",
|
||||||
|
defaultCommentMaxWidth: "60%"
|
||||||
|
};
|
||||||
|
var DialogueSettingTab = class extends import_obsidian.PluginSettingTab {
|
||||||
|
constructor(app, plugin) {
|
||||||
|
super(app, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
containerEl.createEl("h2", { text: "Dialogue Settings" });
|
||||||
|
const coffeeEl = containerEl.createEl("div", {
|
||||||
|
attr: {
|
||||||
|
style: "text-align: center; margin-bottom: 10px;"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const coffeeLinkEl = coffeeEl.createEl("a", { href: "https://www.buymeacoffee.com/holubj" });
|
||||||
|
coffeeLinkEl.createEl("img", {
|
||||||
|
attr: {
|
||||||
|
src: "https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png",
|
||||||
|
alt: "Buy Me A Coffee",
|
||||||
|
style: "height: 60px; width: 217px;"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Default left title").setDesc("Default value for left title in all dialogues.").addText((text) => text.setPlaceholder("Enter default left title").setValue(this.plugin.settings.defaultLeftTitle).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.defaultLeftTitle = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Default right title").setDesc("Default value for right title in all dialogues.").addText((text) => text.setPlaceholder("Enter default right title").setValue(this.plugin.settings.defaultRightTitle).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.defaultRightTitle = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Default title mode").setDesc("Default title mode in all dialogues.").addDropdown((cb) => {
|
||||||
|
Object.values(DialogueTitleMode).forEach((titleMode) => {
|
||||||
|
const mode = titleMode.toString();
|
||||||
|
cb.addOption(mode, mode.charAt(0).toUpperCase() + mode.slice(1));
|
||||||
|
});
|
||||||
|
cb.setValue(this.plugin.settings.defaultTitleMode).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.defaultTitleMode = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Default max message width").setDesc("Default max message width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max message width").setValue(this.plugin.settings.defaultMessageMaxWidth).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.defaultMessageMaxWidth = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Default max comment width").setDesc("Default max comment width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max comment width").setValue(this.plugin.settings.defaultCommentMaxWidth).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.defaultCommentMaxWidth = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var DialoguePlugin = class extends import_obsidian2.Plugin {
|
||||||
|
onload() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.loadSettings();
|
||||||
|
this.registerMarkdownCodeBlockProcessor(`dialogue`, (src, el, ctx) => {
|
||||||
|
new DialogueRenderer(src, el, this.settings);
|
||||||
|
});
|
||||||
|
this.addSettingTab(new DialogueSettingTab(this.app, this));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
loadSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.saveData(this.settings);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
10
.obsidian/plugins/obsidian-dialogue-plugin/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-dialogue-plugin/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-dialogue-plugin",
|
||||||
|
"name": "Dialogue",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"minAppVersion": "0.12.0",
|
||||||
|
"description": "Create dialogues in Markdown.",
|
||||||
|
"author": "Jakub Holub",
|
||||||
|
"authorUrl": "https://github.com/holubj",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
58
.obsidian/plugins/obsidian-dialogue-plugin/styles.css
vendored
Normal file
58
.obsidian/plugins/obsidian-dialogue-plugin/styles.css
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
.dialogue-plugin-wrapper {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-block-wrapper {
|
||||||
|
display: flex;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-message-wrapper-left {
|
||||||
|
justify-content: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-message-wrapper-right {
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-message {
|
||||||
|
overflow: hidden;
|
||||||
|
max-width: 60%;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-message-title {
|
||||||
|
padding: 5px 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-message-content {
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-delimiter-wrapper {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-delimiter {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-delimiter-dot {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
margin: 0 3px;
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-comment-wrapper {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialogue-plugin-comment {
|
||||||
|
margin: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
6
.obsidian/plugins/obsidian-git/data.json
vendored
6
.obsidian/plugins/obsidian-git/data.json
vendored
@ -2,9 +2,9 @@
|
|||||||
"commitMessage": "vault backup: {{date}}",
|
"commitMessage": "vault backup: {{date}}",
|
||||||
"autoCommitMessage": "vault auto-backup: {{date}}",
|
"autoCommitMessage": "vault auto-backup: {{date}}",
|
||||||
"commitDateFormat": "DD.MM.YYYY - HH:mm:ss",
|
"commitDateFormat": "DD.MM.YYYY - HH:mm:ss",
|
||||||
"autoSaveInterval": 3,
|
"autoSaveInterval": 5,
|
||||||
"autoPushInterval": 30,
|
"autoPushInterval": 0,
|
||||||
"autoPullInterval": 5,
|
"autoPullInterval": 0,
|
||||||
"autoPullOnBoot": true,
|
"autoPullOnBoot": true,
|
||||||
"disablePush": false,
|
"disablePush": false,
|
||||||
"pullBeforePush": true,
|
"pullBeforePush": true,
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"viewImageInCPB": true,
|
"viewImageInCPB": true,
|
||||||
"viewImageWithALink": true,
|
"viewImageWithALink": true,
|
||||||
"viewImageOther": true,
|
"viewImageOther": true,
|
||||||
"pinMode": true,
|
"pinMode": false,
|
||||||
"pinMaximum": 3,
|
"pinMaximum": 3,
|
||||||
"pinCoverMode": true,
|
"pinCoverMode": true,
|
||||||
"imageMoveSpeed": 10,
|
"imageMoveSpeed": 10,
|
||||||
|
15
.obsidian/plugins/obsidian-pandoc/data.json
vendored
Normal file
15
.obsidian/plugins/obsidian-pandoc/data.json
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"showCLICommands": false,
|
||||||
|
"addExtensionsToInternalLinks": "html",
|
||||||
|
"injectAppCSS": "current",
|
||||||
|
"injectThemeCSS": false,
|
||||||
|
"customCSSFile": null,
|
||||||
|
"displayYAMLFrontmatter": false,
|
||||||
|
"linkStrippingBehaviour": "text",
|
||||||
|
"highDPIDiagrams": true,
|
||||||
|
"pandoc": null,
|
||||||
|
"pdflatex": null,
|
||||||
|
"outputFolder": null,
|
||||||
|
"extraArguments": "",
|
||||||
|
"exportFrom": "html"
|
||||||
|
}
|
11327
.obsidian/plugins/obsidian-pandoc/main.js
vendored
Normal file
11327
.obsidian/plugins/obsidian-pandoc/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/obsidian-pandoc/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-pandoc/manifest.json
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-pandoc",
|
||||||
|
"name": "Pandoc Plugin",
|
||||||
|
"version": "0.2.5",
|
||||||
|
"minAppVersion": "0.12.5",
|
||||||
|
"description": "This is a Pandoc export plugin for Obsidian. It provides commands to export to formats like DOCX, ePub and PDF.",
|
||||||
|
"author": "Oliver Balfour",
|
||||||
|
"authorUrl": "https://github.com/OliverBalfour/obsidian-pandoc",
|
||||||
|
"isDesktopOnly": true
|
||||||
|
}
|
4
.obsidian/plugins/obsidian-pandoc/styles.css
vendored
Normal file
4
.obsidian/plugins/obsidian-pandoc/styles.css
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
.pandoc-plugin-error {
|
||||||
|
color: red;
|
||||||
|
}
|
1166
.obsidian/themes/Deep Work.css
vendored
1166
.obsidian/themes/Deep Work.css
vendored
File diff suppressed because it is too large
Load Diff
1
Der Zweite Kontinent/Zum Ruhigen Start.md
Normal file
1
Der Zweite Kontinent/Zum Ruhigen Start.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
#PlaceOfInterest
|
3
Global/Personen/Ench.md
Normal file
3
Global/Personen/Ench.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#Person
|
||||||
|
|
||||||
|
Banker
|
2
Global/Personen/Onic.md
Normal file
2
Global/Personen/Onic.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#Person
|
||||||
|
Main Assist
|
1
Global/Quests/Q_1 Alte Freunde vergisst man nie.md
Normal file
1
Global/Quests/Q_1 Alte Freunde vergisst man nie.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
#Quest #Easy
|
0
Parallel Woods/Paralell Woods.md
Normal file
0
Parallel Woods/Paralell Woods.md
Normal file
198
Regelungen.md
198
Regelungen.md
@ -1,43 +1,187 @@
|
|||||||
|
*Version 1.2*
|
||||||
# Änderungen am Basisregelwerk
|
# Änderungen am Basisregelwerk
|
||||||
Im generellen belege ich alles auf dem Basisregelwerk, welches hier schnell eingesehen werden kann; [Crobis quickref](https://crobi.github.io/dnd5e-quickref/preview/quickref.html)
|
Im generellen belege ich alles auf dem Basisregelwerk, welches hier schnell eingesehen werden kann; [Crobis quickref](https://crobi.github.io/dnd5e-quickref/preview/quickref.html)
|
||||||
|
|
||||||
Ich versuche mich daran zu halten, diese Regelungen so gut wie möglich ein zu halten.
|
Ja, das ist ein ganzer Batzen an Regeländerungen, aber damit sich niemand beschissen fühlt, wie ich meine DNDs leite, so
|
||||||
|
|
||||||
## Regelablauf
|
Der GM geht von fairem verhalten der Spieler aus. Spieler sind eigenständig dafür verantwortlich die Regeln zu ihren Charactern zu kennen.
|
||||||
Der GM geht von fairem verhalten der Spieler aus.
|
|
||||||
Ich erlaube ebenfalls leichte Regelverbiegungen. Diese sind aber meist einmalig
|
Da mein Wissen nicht mehr auf dem neusten Stand ist, lass ich mich gerne belehren.
|
||||||
|
|
||||||
|
## PC Wechsel
|
||||||
|
Dies ist für mich noch eine Grauzone... keine Ahnung wie ich das momentan lösen soll.
|
||||||
|
|
||||||
|
## Geworfen ist gezogen
|
||||||
|
Wer eine Aktion spricht, und seine Würfel dazu sprechen lässt, ist an diese gebunden. No Backsies.
|
||||||
|
*Konsequenzen sind stetig ein Teil der Spannung. Wer sich nicht mit seinem Wurf sicher fühlt, so soll er nicht werfen.*
|
||||||
|
|
||||||
|
## Schtelf und Licht-Level / Sicht
|
||||||
|
> [!info] Obscured === Darkness
|
||||||
|
> Ich stelle "Light obscured" und "Dim Light" gleich, ebenfalls "Heavily Obscured" und "Darkness"
|
||||||
|
> Die Jeweiligen Regeln können natürlich auch abweichen.
|
||||||
|
|
||||||
|
Stealth geht vom Gesunden Goblin-Verstand aus; Das Heisst, dass im Puren Offenen keinerlei Versteckmöglichkeiten gibt; Dim Light gibt aber Advantage und Total darkness... well... bist du praktisch immer versteckt. Der Stealth Wurf entscheidet lediglich WIE gut du versteckt bist, falls es zu einer Konfrontation kommen sollte.
|
||||||
|
|
||||||
|
Bei Einer Konfrontation wird Folgendermassen der "Stealth" ausgewürfelt.
|
||||||
|
|
||||||
|
Wird in Bright light patrulliert, und du bist versteckt, wird normal die Passive Perception gegengeprüft. Wird aktiv nach dir gesucht, so kann ein Perception Wurf durchgeführt werden. Ist dieser höher als die Passive Perception, so zählt dieser. Investigation fällt dabei aus, ausser es wird effektiv auf einen Gegenstand geprüft. (Beispielsweise, wenn eine Wache eine Box mit "Puppen" überprüft. Dies kann aber dann auch variieren)
|
||||||
|
|
||||||
|
In Dim-Light wird der Perception Wurf mit disadvantage geworfen. Die Passive Perception ist in Dim-Light um 5 tiefer.
|
||||||
|
|
||||||
|
In Darkness kann ein Gegner nicht gesehen werden, ausser eine der oberen Ausnahmen tritt ein.
|
||||||
|
|
||||||
|
## Kenkus
|
||||||
|
Kenkus müssen leider draussen bleiben. Die sind zwar eine geniale Rasse, aber funktionieren nicht fürs Roleplay. Eventuell wenn mit einer Kamera gespielt wird, kann man darüber nachdenken.
|
||||||
|
|
||||||
|
## Rassen
|
||||||
|
Im generellen gehe ich von den 9 Standard 5E Rassen aus, ohne Zusatzinhalt. Man kann mich gerne daran überzeugen, dass eine spezifische Rasse unbedingt als PC genommen werden muss, weil sie “oh doch so perfekt zu dem Charakter passt”.
|
||||||
|
|
||||||
|
Ebenfalls dürfen keine Rassen genommen werden, welche fliegen können.
|
||||||
|
|
||||||
|
Ich erlaube [diese Rasse](https://homebrewery.naturalcrit.com/share/Hyj68ZHhM), weil sie toll ist.
|
||||||
|
|
||||||
|
> [!hint] Begründung
|
||||||
|
> Meine selbst erstellte Kampagne ist dafür ausgelegt, dass Spells für das Erreichen gewisser Orten benötigt werden, damit die Leveling-Gap geschlossen werden kann.
|
||||||
|
|
||||||
|
## Änderung der aktiven Spells
|
||||||
|
Wenn Ihr eure Spells für eure Klasse Ändern wollt, so ist das JEDERZEIT möglich, sofern Ihr euch für einen halben Tag in einer euch Nahen “Bildungseinrichtung” sitzt. Das “Umlernen” benötigt concentration. Folgende Möglichkeiten sind akzeptabel:
|
||||||
|
|
||||||
|
| Klasse | Ort |
|
||||||
|
| --------- | ---------------------------------------------------------- |
|
||||||
|
| Artificer | Schmiede |
|
||||||
|
| barde | Taverne |
|
||||||
|
| Cleric | Kirche |
|
||||||
|
| Druid | Lokaler Druiden Tempel |
|
||||||
|
| Paladin | Trainingshallen |
|
||||||
|
| Ranger | Wald |
|
||||||
|
| Sourcerer | An einem Ruhigen Ort, um mit seiner Kraft zu kommunizieren |
|
||||||
|
| Warlock | Wenn sie mit dem Dämon alleine sind |
|
||||||
|
| Wizard | Bibliothek |
|
||||||
|
|
||||||
|
## Inspiration
|
||||||
|
Inspiration wird für gutes Roleplay ausgeteilt. Wer die Session am Anfang (freiwillig) zusammenfässt erhällt ebenfalls eine Inspiration.
|
||||||
|
|
||||||
## Exhaustion
|
## Exhaustion
|
||||||
|
Es gibt spezifische Orte an welchen die Exhaustion stärker ausschlägt. Die Rede dabei ist von Extrem Gebieten wie beispielsweise eine Wüste, in welcher es über die Dauer der Nacht trotzdem zu einer extremen Kälte kommen kann. Jeh nach Ausrüstung kann dann trotzdem eine Exhaustion getriggert werden. Informationen zum richtigen ausharren in den jeweiligen Wildgebieten können von den Einheimischen eingeholt werden.
|
||||||
|
|
||||||
### Orte mit Exhaustion
|
> [!info] Ebenfalls gillt:
|
||||||
Es gibt spezifische Orte an welchen die Exhaustion stärker ausschlägt. Die Rede dabei ist von Extrem Gebieten wie beispielsweise eine Wüste, in welcher es über die Dauer der Nacht trotzdem zu einer extremen Kälte kommen kann. Jeh nach ausrüstung kann dann trotzdem eine Exhaustion getriggert werden. Informationen zum richtigen ausharren in den jeweiligen Wildgebieten können von den Einheimischen eingeholt werden.
|
[[#Wiederauferstehung]]
|
||||||
|
|
||||||
|
## Sicht
|
||||||
|
Der Spieler hat einen Sichtkegel von 120°, dieser kann mit CTRL + Mausrad gedreht werden. Ausserdem wird automatisch die Sicht in die Laufrichtung gedreht, falls man sein Token bewegen sollte. Auch können die Spieler die Sicht mittels "Targeting" drehen. Steht jemand 5ft um einen Gegner/Verbündeten/Selbst herum, so zählt dies **NICHT** als "unseen attack". Natürlich wenn man gestealtht ist, oder eine Fähigkeit hat, welche darauf basiert NICHT gesehen zu werden, zählen diese. Man kann das wie diesen 9. Sinn vorstellen, dass man trotzdem bemerkt, wenn jemand hinter einem steht. (Das Atmen des Beholders in deinem Nacken, erstarrt deinen Bewegungsapparat.)
|
||||||
|
|
||||||
|
| Gamemaster Ansicht | Gamemaster Ansicht (Bearbeitet) | Spieler Ansicht |
|
||||||
|
| -------------------------------------------- | -------------------------------------------------- | ---------------------------------------- |
|
||||||
|
| ![[attachment/Rules/ruleGamemasterView.png]] | ![[attachment/Rules/ruleGamemasterViewEdited.png]] | ![[attachment/Rules/rulePlayerView.png]] |
|
||||||
|
|
||||||
|
## Distanzen
|
||||||
|
Ich gehe nach den [optionalen Diagonalen Distanzregeln aus dem Dungeonmasters Guide](https://www.dndbeyond.com/sources/dmg/running-the-game#OptionalRuleDiagonals)
|
||||||
|
Zusammengefasst: Abwechselnd werden über die Diagonalen Achsen 5 und 10 Fuss gezogen.
|
||||||
|
Über die Horizontale und Vertikalen Achsen werden weiterhin 5ft pro Quadrat verwendet.
|
||||||
|
Dies macht das berechnen von distanzen realistischer
|
||||||
|
![[attachment/Rules/ruleDistanceMove.png]]
|
||||||
|
## Templates
|
||||||
|
Spell Reichweiten werden nicht wie [im Dungeonmasters Guide ](https://www.dndbeyond.com/sources/dmg/running-the-game#AreasofEffect) abgehandelt, sondern nach einem eigenen System.
|
||||||
|
|
||||||
|
Getroffen wird nur, wenn der in der Tabelle erwähnte Punkt geschnitten wird.
|
||||||
|
Entweder, wenn das Zentrum eines Gitter-Quadrats geschnitten wird, oder das Quadrat selber.
|
||||||
|
|
||||||
|
| Kreis | Kegel | Rechteck | BEAM |
|
||||||
|
| ------- | ------- | -------- | ------- |
|
||||||
|
| Zentrum | Quadrat | Quadrat | Quadrat |
|
||||||
|
|
||||||
|
Zur Veranschaulichung:
|
||||||
|
![[ruleTemplate.png]]
|
||||||
|
> [!Info] Automatisches Targeting
|
||||||
|
> Wird ein Spell ausgewählt, so wird man aufgefordert, einen Gegner zu selektieren. Templates selektieren die Gegner automatisch!
|
||||||
|
|
||||||
|
|
||||||
|
## ~~Charaktererstellung~~
|
||||||
|
~~Bei der Charaktererstellung gibt es für euch die Möglichkeit, stärker zu sein, als sonst! Es gilt folgendes Vorgehen: Es werde 4 Monopoly Würfel gewürfelt JEDER Würfel, welcher eine 1 zeigt, kann neu geworfen werden. Jetzt entfernt man den niedrigsten Würfel Nun rechnet man alles zusammen~~
|
||||||
|
|
||||||
|
> [!note] Too op
|
||||||
|
> Too op
|
||||||
|
> > Too op
|
||||||
|
|
||||||
|
## Party splitting
|
||||||
|
Es kann durchaus mal vorkommen, dass die Party gesplittet wird. Das ist unabdingbar, aber nervig. Bitte habt geduld mit der subparty. ~~Oder nutzt das Modul "Walkie Talkie". Ich werde noch darauf eingehen, wie das genutzt wird.~~
|
||||||
|
|
||||||
## Pistolen
|
## Pistolen
|
||||||
Misfire kann immernoch gleich triggern wie immer. ABER wenn man sich mit einer Waffe Attuned (Durch Waffentraining für einen Tag) so kann man den Misfire stat ignorieren
|
Misfire kann ohne ein Waffenkit mit einer Aktion überbrückt werden. Das Waffenkit kann aber als Bonusaktion verwendet werden, um die Waffe schneller betriebstauglich zu machen, und mit einer Aktion nachzusetzen.
|
||||||
|
> [!tip] Begründung
|
||||||
|
> Willkommen im Wilden Westen, die Waffentechnik wurde weiterentwickelt und die Funktionsweise besser unter Kontrolle gebracht.
|
||||||
|
|
||||||
## Death Saves
|
## Bewegung
|
||||||
|
|
||||||
Jegliche Abilities welche die “Save Checks” manipulieren funktionieren auch in den Death Saves. Death Saves sind privat an den GM zu rollen, weder der Spieler, noch die Truppe wissen dann, welches Unheil den Spieler erwarten. (Und nicht Linsen bei dem Character Sheet ^^)
|
|
||||||
|
|
||||||
## Weniger bekannte Möglichkeiten
|
|
||||||
|
|
||||||
### Bewegung
|
|
||||||
Im PHB (Englisch), Seite. 190. Steht, dass das Überqueren einer Kreatur jeweils difficult terrain ist. Auch können nicht-hostile Plätze automatisch (ohne fragen) überquert werden. Dies kann vom Spieler, der gerade "überquert" wird aber mit einer Reaction abgefangen werden, solange noch keine Würfel Aktion durchgeführt wurde.
|
Im PHB (Englisch), Seite. 190. Steht, dass das Überqueren einer Kreatur jeweils difficult terrain ist. Auch können nicht-hostile Plätze automatisch (ohne fragen) überquert werden. Dies kann vom Spieler, der gerade "überquert" wird aber mit einer Reaction abgefangen werden, solange noch keine Würfel Aktion durchgeführt wurde.
|
||||||
|
|
||||||
### Zauberklassen (Hinweis)
|
# Experimentelle-Regeln
|
||||||
|
Regeln, welche ich einführe, zum Testen von spiel Stilen. Rückmeldung erwünscht!
|
||||||
|
|
||||||
|
Es kann sein, dass diese wegfallen oder geändert werden!
|
||||||
|
|
||||||
|
## Offene DM Rolls -
|
||||||
|
DM Rolls werden per-se offen gerollt. Ausnahme dafür sind Rolls, welche in die Zukunft gerollt werden, um das Gameplay zu beschleunigen. (Beispielsweise Random Encounter oder Schaden von Fallen.)
|
||||||
|
> [!tip] Begründung
|
||||||
|
> Schaden, und allgemeine Angriffe sind immer Fair. Diese Transparenz will ich beim Spieler anbehalten
|
||||||
|
|
||||||
|
## Gratis Sucess pro Session
|
||||||
|
Jede Session beginnt damit, dass jeder Spieler einen gratis "Sucess" bekommt. Dies gilt für Saves, Death Saves und Checks. Der Gratis Sucess muss VOR dem Wurf ausgesprochen werden, ansonsten zählt [[#Geworfen ist gezogen]]
|
||||||
|
|
||||||
|
> [!tip] Begründung
|
||||||
|
Dies gibt den Charactern eine möglichkeit sich in der Session einzfügen und auch wenn [RNGesus](https://static.wikia.nocookie.net/joke-battles/images/b/b6/Fc%2C800x800%2Cnavy.u1.jpg/revision/latest?cb=20170501121628) heute keinen Bock hat.
|
||||||
|
|
||||||
|
## Flanking
|
||||||
|
Flankieren gib es nicht. Okay... zumindest nicht auf der Herkömmlichen Variante.
|
||||||
|
|
||||||
|
Advantage wird nur gegeben, sofern mehr Personen als Waffen-haltende Gliedmassen in einem 5 ft. Radius um den zu flankierenden Gegner stehen.
|
||||||
|
|
||||||
|
> [!tip] Begründung
|
||||||
|
> Flanking soll nicht der Hauptfokus in einem Kampf geben. Geht man in die Nähe eines Gegners, so setzt man sich selbst in Gefahr.
|
||||||
|
> >[!danger] Kontra:
|
||||||
|
> >Zu viele Spieler... Andererseits kann man das mit mehreren Gegnern gegenkontern.
|
||||||
|
|
||||||
|
## Wiederauferstehung
|
||||||
|
Okay, das benötigt eine kurze Erklärung.
|
||||||
|
|
||||||
|
Jedes mal, wenn man aus den Deathsaves zurück kommt, wird 1 Exhaustion Level hinzugefügt. Brutal? Möglich, aber dafür geht ja 1x Exhaustion wieder weg, wenn man geschlafen hat. :)
|
||||||
|
|
||||||
|
> [!Warning] Zu testen...
|
||||||
|
> Ausnahmen für eine Auferstehung OHNE Exhaustion beinhalten jegliche Heilung welche den Character mindestens [X](https://g.co/kgs/Ud1b97)% Heilt.
|
||||||
|
> >*(Ja, ich habe selber noch keine Ahnung wieviel Prozent...)*
|
||||||
|
|
||||||
|
> [!tip] Begründung
|
||||||
|
> MOMENTAN:
|
||||||
|
> Fällt ein Spieler auf 0 HP, so gibt es keine Konsequenz, einfach wieder 5 HP vom nächsten Druiden zu erhalten. Diese können natürlich genau so schnell wieder heraus geprügelt werden. Das macht dann wenig Spass für den Spieler selbst.
|
||||||
|
>
|
||||||
|
> Sterben tut weh... wer häts gedacht? Aber wenn man die ganze Zeit vor den Toren der Höheren Macht steht und immer wieder ins Leben gerufen wird, so ist das auch sehr Anstrengend für den Körper.
|
||||||
|
> >[!danger] Kontra:
|
||||||
|
> > Man kann zu schnell exhaustion erhalten. Aber dafür lebt man eher :)
|
||||||
|
|
||||||
|
## Death Saves
|
||||||
|
Jegliche Abilities welche die “Save Checks” manipulieren funktionieren auch in den Death Saves. Dies beinhaltet auch Disadvantage auf Saving Throws durch Exhaustion! Death Saves sind privat an den GM zu rollen, sodass nur der Spie.
|
||||||
|
|
||||||
|
Während den Death saves kann man jeweils noch 5ft "kriechen" und *minimal* reden.
|
||||||
|
|
||||||
|
Hat man die Death-Saves bestanden, so kann ist der Spieler nicht mehr für 1d4 Stunden Ohnmächtig sondern bleibt für diese 1d4 Stunden in einem "Halbtot" Modus. Er kann weiterhin noch 5ft Kriechen und minimal reden, aber keine Aktionen, Reaktionen und Bonusaktionen verwenden. Wird man während diesen 1d4 Stunden Aufgeheilt, so erhällt man ein Exhaustion Level. Siehe dazu [[Regelungen#Wiederauferstehung]]
|
||||||
|
> [!tip] Begründung
|
||||||
|
> Dies gibt gedownten Spielern mehr Möglichkeit, während des Kampfes weiter zu Spielen. Klar, wer redet und bewegt, kann weiter angegriffen werden; Dafür können Teammates informiert werden, dass der Spieler bald ausblutet.
|
||||||
|
> *Bitte... helft... miiir*...
|
||||||
|
> >[!danger] Kontra:
|
||||||
|
> > Gewisse Spells gehen davon aus, nicht "Unconcious" zu sein; Diese funktionieren in diesem "Halbtot" Modus nicht.
|
||||||
|
|
||||||
|
## Die "Lach" Regel. (SEHR EXPERIMENTELL)
|
||||||
|
Macht ihr im RP irgendwas, was den DM zum Lachen bringt, so wird dies auch geschehen, mit gewissem Masse, natürlich.
|
||||||
|
|
||||||
|
> [!tip] Begründung
|
||||||
|
> *Dies soll das RP ein wenig auflockern und Fantasie wird öfters verwendet*
|
||||||
|
|
||||||
|
# Unbekantere Regeln von 5E
|
||||||
|
Nicht explizit regeln, aber nice to know.
|
||||||
|
## Zauberklassen (Hinweis)
|
||||||
Ihr könnt eure Spells auch mit einer Ready Action benutzen! Das benötigt aber Concentration und der Spell darf maximal eine Casting Time von einer Action haben.
|
Ihr könnt eure Spells auch mit einer Ready Action benutzen! Das benötigt aber Concentration und der Spell darf maximal eine Casting Time von einer Action haben.
|
||||||
|
|
||||||
### Death Saves (Hinweis)
|
## Death Saves (Hinweis)
|
||||||
Wird man in den Death Saves angegriffen, so wird mit Advantage angegriffen. Treffer addieren einen negativen Punkt zum death save.
|
Wird man in den Death Saves angegriffen, so wird mit Advantage angegriffen. Treffer addieren einen negativen Punkt zum death save.
|
||||||
|
|
||||||
## Hausregeln
|
## Obscured und Heavily Obscured
|
||||||
| Nr. | Name | Beschreibung |
|
Wer sich versteckt, der darf auch nicht gesehen werden.
|
||||||
|:---:|:-----------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
||||||
| 1 | Kenkus | Kenkus müssen leider draussen bleiben. Die sind zwar eine geniale Rasse, aber funktionieren nicht fürs Roleplay. |
|
|
||||||
| 2 | Rassen | Im generellen gehe ich von den 9 Standard 5E Rassen aus, ohne Zusatzinhalt. Man kann mich gerne daran überzeugen, dass diese Rasse unbedingt genommen werden muss, weil sie “oh doch so perfekt zu dem Charakter passen”. (Standardmässig, mach einfach einen anderen.) Ebenfalls dürfen keine Rassen genommen werden, welche fliegen können. Ich erlaube aber [diese Klasse](https://homebrewery.naturalcrit.com/share/Hyj68ZHhM), weil sie toll ist. Begründung: Da dies ein komplettes BUCH wird als DND, wird es schwierig für alle Klassen eine spassige Inszenierung darzustellen. Ich gehe von einer Party of 4 aus. Das bedeutet, dass ich von einem Fighter, einem Barbarian, einem Druid und einem Rogue. Alle haben einen +1 Modifier auf allen Ability Scores. |
|
|
||||||
| 3 | Party splitting | Es kann durchaus mal vorkommen, dass die Party gesplittet wird. Das ist unabdingbar, aber nervig. Bitte habt geduld mit der subparty oder nutzt das Modul "Walkie Talkie". Ich werde noch darauf eingehen, wie das genutzt wird. |
|
|
||||||
| 4 | Der GM hat immer Recht | Und sollte er mal nicht recht haben, so ist das dem GM egal. (Ich hatte die Ehre, ihn selbst zu fragen!) Scherz beiseite, WENN mal irgendwas nicht stimmt, so bitte ich euch den Regelbruch oder was auch immer aufzuschreiben und am ENDE der Runde beizutragen. Ich kenn bedauerlicherweise nicht das ganze Regelwerk auswendig. |
|
|
||||||
| 5 | PC Wechsel | Ich sags schon mal vorab, ihr kommt von dem Hauptort nicht so einfach weg in ein anderes Land. Wenn ihr euren PC aufgebt und ihn “Cool in den Sonnenuntergang reiten” lässt, sodass ihr einen neuen Character erstellen könnt, so wird dieser den Fluch der unendlich fallenden Steine erleiden (50d100 stupidity damage, dagegen könnt ihr nicht mal resistent sein!) |
|
|
||||||
| 6 | Charakter erstellung | Bei der Charaktererstellung gibt es für euch die Möglichkeit, stärker zu sein, als sonst! Es gilt folgendes Vorgehen: Es werde 4 Monopoly Würfel gewürfelt JEDER Würfel, welcher eine 1 zeigt, kann neu geworfen werden. Jetzt entfernt man den niedrigsten Würfel Nun rechnet man alles zusammen |
|
|
||||||
| 7 | Inspiration | Ihr werdet über die Sessions hinweg inspiriert, jedoch funktioniert die Inspiration nicht einfach als Notlösung, wenn ihr mal eine 1 gewürfelt habt. Benutzt ihr eure Inspiration, so wird der gewünschte Wurf, auf welchen ihr Inspiration verwendet automatisch eine NAT 20. Dies geht NICHT bei death saves, dort kann nur der misslungene Wurf neu gerollt werden. |
|
|
||||||
| 8 | Spelländerungen | Wenn Ihr eure Spells für eure Klasse Ändern wollt, so ist das JEDERZEIT möglich, sofern Ihr euch für einen halben Tag in einer euch Nahen “Bildungseinrichtung” sitzt. Das “Umlernen” benötigt concentration. Folgende Möglichkeiten sind akzeptabel: Artificer -> Schmiede Bard -> Taverne Cleric -> Kirche Druid -> Beim Trankhändler Paladin -> In den Trainingshallen Ranger -> Im Wald Sorcerer -> Warlock -> Irgendwo, wo sie mit ihrem Dämonen alleine sind. Wizard -> Bibliotheke |
|
|
BIN
RegelungenV1.2.pdf
Normal file
BIN
RegelungenV1.2.pdf
Normal file
Binary file not shown.
BIN
RegelungenV1.pdf
Normal file
BIN
RegelungenV1.pdf
Normal file
Binary file not shown.
@ -78,7 +78,7 @@ Er scheint zu warten, bis du den Brief gelesen hast.
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
# Der Brief
|
# Der Brief
|
||||||
[[Jenkins Abschiedsbrief]]
|
[[0.1.1.1 Jenkins Abschiedsbrief]]
|
||||||
|
|
||||||
# Abreise des Kutschers
|
# Abreise des Kutschers
|
||||||
|
|
||||||
@ -108,4 +108,4 @@ Und der Kutscher reist mit seinem Pferd gleich schnell ab, wie er ankam.
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@JournalEntry[Zp8RiX4U2mnqZbGB]{Ankunft in Rogueport}
|
[[0.2.1 Ankunft in Rogueport]]
|
@ -3,6 +3,6 @@ Werte Freunde
|
|||||||
|
|
||||||
Falls Ihr dies lesen sollt, so ist es, dass ich nicht mehr auf derselben Ebene wie ihr wandel. Ich bitte euch, an meine Bestattung in [[Rogueport]] zu kommen, und dort danach mit meinem alten Freund Kelvin auf gute Zeiten anzustossen.
|
Falls Ihr dies lesen sollt, so ist es, dass ich nicht mehr auf derselben Ebene wie ihr wandel. Ich bitte euch, an meine Bestattung in [[Rogueport]] zu kommen, und dort danach mit meinem alten Freund Kelvin auf gute Zeiten anzustossen.
|
||||||
|
|
||||||
Reist zuerst nach [[Rogueport]], dort werdet ihr auf die Crew der Lightseeker treffen. Das Schiff läuft am 18.09. um exakt 08:00 aus. also bitte ich euch pünktlich zu sein. Es gibt ein gemütliches Wirtshaus, [[Session 0/Akt 2 - Rogueport/Zum Ruhigen Start]], so hiess es. Dort könnt ihr euch am Vortag verpflegen lassen und die Nacht verweilen. Sagt einfach, dass Ihr freunde des alten Jenkins seid, und euch wird die Nacht nichts kosten.
|
Reist zuerst nach [[Rogueport]], dort werdet ihr auf die Crew der Lightseeker treffen. Das Schiff läuft am 18.09. um exakt 08:00 aus. also bitte ich euch pünktlich zu sein. Es gibt ein gemütliches Wirtshaus, [[Zum Ruhigen Start]], so hiess es. Dort könnt ihr euch am Vortag verpflegen lassen und die Nacht verweilen. Sagt einfach, dass Ihr freunde des alten Jenkins seid, und euch wird die Nacht nichts kosten.
|
||||||
|
|
||||||
Auch bitte euch, werter Leser, dass einzig und allein dieser Brief, alle meine Freunde erreicht. Der Kutscher hällt eine Liste, von denen, welche dieser Brief zu erreichen hat, mit deren ungefähren Adressen.
|
Auch bitte euch, werter Leser, dass einzig und allein dieser Brief, alle meine Freunde erreicht. Der Kutscher hällt eine Liste, von denen, welche dieser Brief zu erreichen hat, mit deren ungefähren Adressen.
|
@ -1,3 +0,0 @@
|
|||||||
<!---
|
|
||||||
TYPE: QUEST
|
|
||||||
-->
|
|
1
Session 1/Jerome Belfried.md
Normal file
1
Session 1/Jerome Belfried.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Der lokale Schmied von [[Blackwyche]]
|
11
Session 1/Wildes Erwachen.md
Normal file
11
Session 1/Wildes Erwachen.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#Note
|
||||||
|
|
||||||
|
[[Jerome Belfried]] wirft einen [[Onic|Tiefling]] auf den Tisch
|
||||||
|
|
||||||
|
```dialogue
|
||||||
|
left: Jerome Belfried
|
||||||
|
right: Onic
|
||||||
|
|
||||||
|
< Ich frag dich jetzt zum Letzten verdammten mal; Wo sind die Steine?!
|
||||||
|
> Wie ich dir schon öfters
|
||||||
|
```
|
@ -14,12 +14,15 @@ Jesse James Isler
|
|||||||
|
|
||||||
"Im Wandel der Zeit" spielt in der Welt von Talos, einem Erden ähnlichen Planeten. Das Ganze im Western von Karika dem westlichen Kontinent. Vor langer Zeit lebten hier die Liau, ein Folk, welches auf die Modernisierung der neuen Kreaturen kein Interesse legt. Die Liau wurden aus Talos praktisch herausgedrängt, und mussten in den Wüsten überleben, während sich Tieflinge, Orcs, Menschen und andere Spezies eingenistet haben. Die Liaus aber liessen sich das nicht gefallen, dass Aussenseiter sich in ihrem Land breit machten. Mehr und mehr begannen die Leute miteinander zu Kriegen. Aber die Liau wurden schnell mit dem technischen Fortschritt der Menschen und Dragonborn überholt und mussten sich zurückziehen, da mehr und mehr ihrer Kolonien welche aus der wilden Wüste regiert wird von den “Aussenseitern” eingenommen wurden.
|
"Im Wandel der Zeit" spielt in der Welt von Talos, einem Erden ähnlichen Planeten. Das Ganze im Western von Karika dem westlichen Kontinent. Vor langer Zeit lebten hier die Liau, ein Folk, welches auf die Modernisierung der neuen Kreaturen kein Interesse legt. Die Liau wurden aus Talos praktisch herausgedrängt, und mussten in den Wüsten überleben, während sich Tieflinge, Orcs, Menschen und andere Spezies eingenistet haben. Die Liaus aber liessen sich das nicht gefallen, dass Aussenseiter sich in ihrem Land breit machten. Mehr und mehr begannen die Leute miteinander zu Kriegen. Aber die Liau wurden schnell mit dem technischen Fortschritt der Menschen und Dragonborn überholt und mussten sich zurückziehen, da mehr und mehr ihrer Kolonien welche aus der wilden Wüste regiert wird von den “Aussenseitern” eingenommen wurden.
|
||||||
|
|
||||||
|
## Balancing der Kampagne
|
||||||
|
Ich gehe von einer Party of 4 aus. Das bedeutet, dass ich von einem Fighter, einem Barbarian, einem Druid und einem Rogue. Alle haben einen +1 Modifier auf allen Ability Scores.
|
||||||
|
|
||||||
## Setting
|
## Setting
|
||||||
|
|
||||||
Wir reden hier von einem asiatischen Western setting Matsch. Alte, mittelalterliche Waffen treffen auf die Neumodischen Pewpews.
|
Wir reden hier von einem asiatischen Western setting Matsch. Alte, mittelalterliche Waffen treffen auf die Neumodischen Pewpews.
|
||||||
|
|
||||||
[[Regelungen]]
|
[[Regelungen]]
|
||||||
# [[Intro]]
|
# [[0.1.1 Intro]]
|
||||||
//DRAFT!!!
|
//DRAFT!!!
|
||||||
Ein Freund von euch hat ins Grass gebissen, nach der Beerdiung bleibt ihr noch kurz und stösst aufeinander. Ihr merkt, dass ihr alle gut miteinander auskommt und entscheidet euch, noch einen auf den alten Kauz zu trinken.
|
Ein Freund von euch hat ins Grass gebissen, nach der Beerdiung bleibt ihr noch kurz und stösst aufeinander. Ihr merkt, dass ihr alle gut miteinander auskommt und entscheidet euch, noch einen auf den alten Kauz zu trinken.
|
||||||
|
|
||||||
|
@ -2,3 +2,4 @@
|
|||||||
- [ ] Teleporter
|
- [ ] Teleporter
|
||||||
- [ ] Encounters
|
- [ ] Encounters
|
||||||
- [ ] Maps
|
- [ ] Maps
|
||||||
|
- [ ] Rules
|
BIN
attachment/Rules/ruleDistanceMove.png
(Stored with Git LFS)
Normal file
BIN
attachment/Rules/ruleDistanceMove.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
attachment/Rules/ruleGamemasterView.png
(Stored with Git LFS)
Normal file
BIN
attachment/Rules/ruleGamemasterView.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
attachment/Rules/ruleGamemasterViewEdited.png
(Stored with Git LFS)
Normal file
BIN
attachment/Rules/ruleGamemasterViewEdited.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
attachment/Rules/rulePlayerView.png
(Stored with Git LFS)
Normal file
BIN
attachment/Rules/rulePlayerView.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
attachment/Rules/ruleTemplate.png
(Stored with Git LFS)
Normal file
BIN
attachment/Rules/ruleTemplate.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
attachment/titleimg.gif
(Stored with Git LFS)
BIN
attachment/titleimg.gif
(Stored with Git LFS)
Binary file not shown.
Loading…
Reference in New Issue
Block a user