A little bit of cleanup

This commit is contained in:
Lucas 2023-07-18 12:43:49 +02:00
parent 55b276df64
commit 63abcc878a
93 changed files with 27305 additions and 18631 deletions

7
.obsidian/app.json vendored
View file

@ -2,7 +2,7 @@
"legacyEditor": false,
"livePreview": true,
"spellcheck": true,
"alwaysUpdateLinks": false,
"alwaysUpdateLinks": true,
"promptDelete": true,
"attachmentFolderPath": "Illustrations",
"userIgnoreFilters": [
@ -11,7 +11,7 @@
],
"newFileLocation": "root",
"newLinkFormat": "relative",
"useMarkdownLinks": true,
"useMarkdownLinks": false,
"mobileToolbarCommands": [
"editor:insert-wikilink",
"editor:insert-embed",
@ -43,5 +43,6 @@
"fr",
"fr-FR"
],
"defaultViewMode": "preview"
"defaultViewMode": "preview",
"showUnsupportedFiles": true
}

14
.obsidian/bookmarks.json vendored Normal file
View file

@ -0,0 +1,14 @@
{
"items": [
{
"type": "file",
"path": "Excalidraw/Chapitre 1 - Assassinat.md",
"ctime": 1683199765814
},
{
"type": "file",
"path": "Dashboard.md",
"ctime": 1683199765814
}
]
}

View file

@ -12,9 +12,11 @@
"templater-obsidian",
"metaedit",
"obsidian-git",
"consistent-attachments-and-links",
"homepage",
"better-word-count",
"obsidian-style-settings",
"longform"
"remember-cursor-position",
"alx-folder-note",
"folder-note-core",
"alx-folder-note-folderv"
]

View file

@ -25,5 +25,6 @@
"file-recovery": true,
"publish": false,
"sync": false,
"canvas": true
"canvas": true,
"bookmarks": true
}

View file

@ -12,7 +12,7 @@
"note-composer",
"command-palette",
"slash-command",
"starred",
"bookmarks",
"outline",
"file-recovery"
]

BIN
.obsidian/desktop.ini vendored

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.55",
"version": "0.5.56",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",

View file

@ -1,17 +1,22 @@
{
"version": 2,
"defaultNote": "Dashboard",
"useMoment": false,
"momentFormat": "YYYY-MM-DD",
"workspace": "Home",
"workspaceEnabled": false,
"hasRibbonIcon": true,
"openMode": "Replace all open notes",
"manualOpenMode": "Keep open notes",
"view": "Reading view",
"revertView": true,
"refreshDataview": true,
"autoCreate": true,
"autoScroll": false,
"pin": true
"version": 3,
"homepages": {
"Main Homepage": {
"version": 2,
"hasRibbonIcon": true,
"openMode": "Replace all open notes",
"manualOpenMode": "Keep open notes",
"view": "Reading view",
"revertView": true,
"refreshDataview": true,
"autoCreate": true,
"autoScroll": false,
"pin": true,
"value": "Dashboard",
"kind": "File",
"commands": [],
"openWhenEmpty": true
}
},
"separateMobile": false
}

File diff suppressed because one or more lines are too long

View file

@ -1,9 +1,9 @@
{
"id": "homepage",
"name": "Homepage",
"version": "2.8.2",
"version": "3.3.3",
"minAppVersion": "1.0",
"description": "Open a specified note, canvas, or workspace on startup.",
"description": "Open a specified note, canvas, or workspace on startup, or set it for quick access later.",
"author": "novov",
"authorUrl": "https://novov.me",
"isDesktopOnly": false

135
.obsidian/plugins/homepage/styles.css vendored Normal file
View file

@ -0,0 +1,135 @@
.setting-item[nv-greyed] {
opacity: .5;
pointer-events: none !important;
}
#nv-main-setting {
flex-wrap: wrap;
margin-bottom: 30px;
}
#nv-main-setting .setting-item-control {
padding-top: var(--size-4-2);
flex-basis: 100%;
align-items: stretch;
}
#nv-main-setting .setting-item-control input, #nv-main-setting .setting-item-control select {
font-size: var(--font-ui-medium);
font-weight: 600;
}
#nv-main-setting .setting-item-control select {
padding: var(--size-4-3) var(--size-4-4);
padding-right: var(--size-4-8);
height: auto;
}
#nv-main-setting .setting-item-control input {
flex-grow: 1;
padding: var(--size-4-5) var(--size-4-4);
}
#nv-main-setting .setting-item-control input[disabled] {
opacity: 0.3;
}
#nv-main-setting #nv-desc, #nv-main-setting #nv-info {
flex-basis: 100%;
}
#nv-main-setting #nv-desc {
font-weight: 500;
color: var(--text-normal);
font-size: var(--font-ui-small);
padding: 10px 0 0;
}
#nv-main-setting #nv-desc code {
font-family: var(--font-monospace);
font-size: var(--font-smaller);
border-radius: var(--radius-s);
}
#nv-main-setting #nv-desc small {
display: block;
font-weight: 400;
color: var(--text-muted);
font-size: calc(var(--font-ui-smaller) * 0.9);
padding: 5px 0 0;
}
.nv-command-desc {
padding: 1.2em 0 0;
border-top: 1px solid var(--background-modifier-border);
}
.nv-command-box {
margin: 1em 0 1.75em;
display: flex;
flex-wrap: wrap;
gap: 12px;
align-items: center;
}
.nv-command-pill {
background-color: var(--background-secondary);
border: 1px solid var(--background-modifier-border-hover);
border-radius: var(--radius-s);
font-size: var(--font-ui-small);
padding: var(--size-2-1) var(--size-2-3);
}
.nv-command-pill button {
display: inline-block;
padding: 0;
margin: 0 0 0 var(--size-2-3);
vertical-align: bottom;
}
.nv-command-pill button svg {
height: 1em;
width: 1em;
}
.nv-command-add-button {
font-size: var(--font-ui-small);
padding: var(--size-2-2) var(--size-4-2);
height: auto;
}
#nv-main-setting + .setting-item, .nv-command-desc + .setting-item {
padding-top: 20px;
border-top: none !important;
}
.nv-debug-button {
margin: 3em 0 -0.2em;
font-size: var(--font-ui-smaller);
padding: 0;
height: auto;
float: right;
box-shadow: none !important;
background: none !important;
color: var(--text-accent);
font-weight: 600;
cursor: pointer;
}
.nv-debug-button:hover, .nv-debug-button:active {
text-decoration: underline;
}
.is-phone #nv-main-setting .setting-item-control {
flex-wrap: wrap;
justify-content: flex-start;
}
.is-phone #nv-main-setting .setting-item-control select {
width: auto;
max-width: auto;
}
.is-phone .nv-command-pill button, .is-phone .nv-command-add-button {
width: auto;
}

View file

@ -132,6 +132,9 @@
}
]
},
"sort": {
"criteria": []
},
"id": "abe285ba-ef0c-48f8-9b1e-947d7b45fc83",
"name": "Table",
"type": "table"
@ -160,6 +163,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "63645eb2-4562-4c61-842f-b7a5dd4e3d17",
"name": "Board",
"type": "board"
@ -175,6 +181,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "01f7e93f-eae0-45d9-b8e9-e2390d99593a",
"name": "Gallery",
"type": "gallery"
@ -215,6 +224,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "f8a8c207-7a4e-43ed-b688-24c130d7c36e",
"name": "Table",
"type": "table"
@ -229,6 +241,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "eebb97fd-6a92-4e58-b47b-f10f1c269043",
"name": "Board",
"type": "board"
@ -257,6 +272,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "88e6a45b-648f-4a7c-b0ff-18ee0c78128a",
"name": "Board 1",
"type": "board"
@ -288,6 +306,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "fc505f4f-5c5e-41fd-8d8c-a24d26cd43b5",
"name": "Table",
"type": "table"
@ -325,6 +346,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "4dc257c7-7fbd-43f6-a2ce-6fa1121ece84",
"name": "Table",
"type": "table"
@ -376,6 +400,9 @@
"colors": {
"conditions": []
},
"sort": {
"criteria": []
},
"id": "71c6b47a-9b3d-4023-be85-35b9e3a96ef5",
"name": "Table",
"type": "table"
@ -390,6 +417,7 @@
"frontmatter": {
"quoteStrings": "PLAIN"
},
"commands": []
"commands": [],
"linkBehavior": "open-editor"
}
}

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,11 @@
{
"id": "obsidian-projects",
"name": "Projects",
"version": "1.13.0",
"version": "1.16.3",
"minAppVersion": "1.0.0",
"description": "Plain text project planning.",
"author": "Marcus Olsson",
"authorUrl": "https://marcus.se.net",
"fundingUrl": "https://www.buymeacoffee.com/marcusolsson",
"isDesktopOnly": true
"isDesktopOnly": false
}

View file

@ -1,7 +1,80 @@
.workspace-leaf-content[data-type="obsidian-projects"] .view-content {
.projects--board {
display: grid;
column-gap: 8px;
align-items: flex-start;
margin: 8px;
}
.projects--board--column {
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-m);
background-color: var(--background-secondary);
display: flex;
gap: var(--size-4-2);
flex-direction: column;
padding: var(--size-4-2);
}
.projects--board--card {
background-color: var(--background-primary);
border-radius: var(--radius-s);
border: 1px solid var(--background-modifier-border);
padding: var(--size-4-2);
}
.projects--board--card:hover {
border: 1px solid var(--background-modifier-border-hover);
}
.projects--board--card-list {
display: flex;
flex-direction: column;
gap: var(--size-4-2);
min-height: 35px;
transition: all 150ms ease-in-out;
}
.projects--gallery--grid {
display: grid;
gap: 24px;
}
.projects--gallery--card {
background-color: var(--background-secondary);
border-radius: var(--radius-s);
border: 1px solid var(--background-modifier-border);
padding: 0;
margin: 0;
}
.projects--gallery--card:hover {
border: 1px solid var(--background-modifier-border-hover);
}
.projects--gallery--card__body {
padding: 8px;
}
.projects--gallery--card__media {
height: 180px;
border-top-left-radius: var(--radius-s);
border-top-right-radius: var(--radius-s);
display: flex;
align-items: center;
justify-content: center;
border-bottom: 1px solid var(--background-modifier-border);
}
.projects--gallery--card__media img {
width: 100%;
height: 100%;
border-top-left-radius: var(--radius-s);
border-top-right-radius: var(--radius-s);
}
.workspace-leaf-content[data-type=obsidian-projects] .view-content {
padding: 0;
}
.sortable-drag {
opacity: 0 !important;
}
/*# sourceMappingURL=styles.css.map */

View file

@ -22,5 +22,6 @@
"sanctum@@table-single-rows": false,
"sanctum@@table-sticky-headers": false,
"sanctum@@table-tabular-figures": false,
"sanctum@@table-nums": false
"sanctum@@table-nums": false,
"sanctum@@clean-embeds": true
}

View file

@ -3737,9 +3737,18 @@ class CSSSettingsManager {
Object.keys(config).forEach((settingId) => {
const setting = config[settingId];
if (setting.type === SettingType.CLASS_TOGGLE) {
if (this.getSetting(section, settingId)) {
document.body.classList.remove(setting.id);
}
document.body.classList.remove(setting.id);
}
else if (setting.type === SettingType.CLASS_SELECT) {
const multiToggle = setting;
multiToggle.options.forEach((v) => {
if (typeof v === 'string') {
document.body.classList.remove(v);
}
else {
document.body.classList.remove(v.value);
}
});
}
});
});
@ -3747,26 +3756,27 @@ class CSSSettingsManager {
setCSSVariables() {
const [vars, themedLight, themedDark] = getCSSVariables(this.settings, this.config, this.gradients, this);
this.styleTag.innerText = `
body.css-settings-manager {
${vars.reduce((combined, current) => {
body.css-settings-manager {
${vars.reduce((combined, current) => {
return combined + `--${current.key}: ${current.value}; `;
}, '')}
}
}
body.theme-light.css-settings-manager {
${themedLight.reduce((combined, current) => {
body.theme-light.css-settings-manager {
${themedLight.reduce((combined, current) => {
return combined + `--${current.key}: ${current.value}; `;
}, '')}
}
}
body.theme-dark.css-settings-manager {
${themedDark.reduce((combined, current) => {
body.theme-dark.css-settings-manager {
${themedDark.reduce((combined, current) => {
return combined + `--${current.key}: ${current.value}; `;
}, '')}
}
`
}
`
.trim()
.replace(/[\r\n\s]+/g, ' ');
this.plugin.app.workspace.trigger('css-change', { source: 'style-settings' });
}
setConfig(settings) {
this.config = {};
@ -3819,16 +3829,22 @@ class CSSSettingsManager {
setSetting(sectionId, settingId, value) {
this.settings[`${sectionId}@@${settingId}`] = value;
this.save();
this.removeClasses();
this.initClasses();
}
setSettings(settings) {
Object.keys(settings).forEach((id) => {
this.settings[id] = settings[id];
});
this.removeClasses();
this.initClasses();
return this.save();
}
clearSetting(sectionId, settingId) {
delete this.settings[`${sectionId}@@${settingId}`];
this.save();
this.removeClasses();
this.initClasses();
}
clearSection(sectionId) {
Object.keys(this.settings).forEach((key) => {
@ -3838,6 +3854,8 @@ class CSSSettingsManager {
}
});
this.save();
this.removeClasses();
this.initClasses();
}
export(section, config) {
new ExportModal(this.plugin.app, this.plugin, section, config).open();
@ -8027,13 +8045,6 @@ function createDescription(description, def, defLabel) {
}
return fragment;
}
let timer;
function customDebounce(cb, timeout = 300) {
clearTimeout(timer);
timer = setTimeout(() => {
cb();
}, timeout);
}
var fuzzysort = createCommonjsModule(function (module) {
((root, UMD) => {
@ -8579,16 +8590,28 @@ var fuzzysort = createCommonjsModule(function (module) {
// TODO: (perf) prepareSearch seems slow
});
class AbstractSettingComponent {
constructor(sectionId, sectionName, setting, settingsManager, isView) {
class AbstractSettingComponent extends obsidian.Component {
constructor(parent, sectionId, sectionName, setting, settingsManager, isView) {
super();
this.childEl = null;
this.parent = parent;
this.sectionId = sectionId;
this.sectionName = sectionName;
this.setting = setting;
this.settingsManager = settingsManager;
this.isView = isView;
this.onInit();
}
onInit() { }
get containerEl() {
return this.parent instanceof HTMLElement
? this.parent
: this.parent.childEl;
}
onload() {
this.render();
}
onunload() {
this.destroy();
}
/**
* Matches the Component against `str`. A perfect match returns 0, no match returns negative infinity.
*
@ -8614,10 +8637,10 @@ class AbstractSettingComponent {
const resetTooltip = 'Restore default';
class ClassToggleSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(description !== null && description !== void 0 ? description : '');
this.settingEl.addToggle((toggle) => {
@ -8625,12 +8648,6 @@ class ClassToggleSettingComponent extends AbstractSettingComponent {
toggle.setValue(value !== undefined ? !!value : !!this.setting.default);
toggle.onChange((value) => {
this.settingsManager.setSetting(this.sectionId, this.setting.id, value);
if (value) {
document.body.classList.add(this.setting.id);
}
else {
document.body.classList.remove(this.setting.id);
}
});
this.toggleComponent = toggle;
});
@ -8639,12 +8656,6 @@ class ClassToggleSettingComponent extends AbstractSettingComponent {
b.onClick(() => {
const value = !!this.setting.default;
this.toggleComponent.setValue(value);
if (value) {
document.body.classList.add(this.setting.id);
}
else {
document.body.classList.remove(this.setting.id);
}
this.settingsManager.clearSetting(this.sectionId, this.setting.id);
});
b.setTooltip(resetTooltip);
@ -8658,7 +8669,7 @@ class ClassToggleSettingComponent extends AbstractSettingComponent {
}
class ClassMultiToggleSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting.default !== 'string') {
@ -8666,7 +8677,7 @@ class ClassMultiToggleSettingComponent extends AbstractSettingComponent {
}
let prevValue = this.getPreviousValue();
const defaultLabel = this.getDefaultOptionLabel();
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default, defaultLabel));
this.settingEl.addDropdown((dropdown) => {
@ -8684,12 +8695,6 @@ class ClassMultiToggleSettingComponent extends AbstractSettingComponent {
dropdown.setValue(prevValue);
dropdown.onChange((value) => {
this.settingsManager.setSetting(this.sectionId, this.setting.id, value);
if (value !== 'none') {
document.body.classList.add(value);
}
if (prevValue) {
document.body.classList.remove(prevValue);
}
prevValue = value;
});
this.dropdownComponent = dropdown;
@ -8697,14 +8702,7 @@ class ClassMultiToggleSettingComponent extends AbstractSettingComponent {
this.settingEl.addExtraButton((b) => {
b.setIcon('reset');
b.onClick(() => {
const value = this.setting.default || 'none';
this.dropdownComponent.setValue(this.setting.default || 'none');
if (value !== 'none') {
document.body.classList.add(value);
}
if (prevValue) {
document.body.classList.remove(prevValue);
}
this.settingsManager.clearSetting(this.sectionId, this.setting.id);
});
b.setTooltip(resetTooltip);
@ -8749,13 +8747,13 @@ class ClassMultiToggleSettingComponent extends AbstractSettingComponent {
}
class VariableTextSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting.default !== 'string') {
return console.error(`${t('Error:')} ${title} ${t('missing default value')}`);
}
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default));
this.settingEl.addText((text) => {
@ -8787,13 +8785,13 @@ class VariableTextSettingComponent extends AbstractSettingComponent {
}
class VariableNumberSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting.default !== 'number') {
return console.error(`${t('Error:')} ${title} ${t('missing default value')}`);
}
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default.toString(10)));
this.settingEl.addText((text) => {
@ -8823,13 +8821,13 @@ class VariableNumberSettingComponent extends AbstractSettingComponent {
}
class VariableNumberSliderSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting.default !== 'number') {
return console.error(`${t('Error:')} ${title} ${t('missing default value')}`);
}
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default.toString(10)));
this.settingEl.addSlider((slider) => {
@ -8860,14 +8858,14 @@ class VariableNumberSliderSettingComponent extends AbstractSettingComponent {
}
class VariableSelectSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting.default !== 'string') {
return console.error(`${t('Error:')} ${title} ${t('missing default value')}`);
}
const defaultLabel = this.getDefaultOptionLabel();
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default, defaultLabel));
this.settingEl.addDropdown((dropdown) => {
@ -8932,7 +8930,7 @@ var pickr_min = createCommonjsModule(function (module, exports) {
var Pickr = /*@__PURE__*/getDefaultExportFromCjs(pickr_min);
class VariableColorSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
var _a;
const title = getTitle(this.setting);
const description = getDescription(this.setting);
@ -8954,16 +8952,16 @@ class VariableColorSettingComponent extends AbstractSettingComponent {
if (value !== undefined) {
swatches.push(value);
}
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
this.settingEl.setDesc(createDescription(description, this.setting.default));
// fix, so that the color is correctly shown before the color picker has been opened
const defaultColor = value !== undefined ? value : this.setting.default;
containerEl.style.setProperty('--pcr-color', defaultColor);
this.containerEl.style.setProperty('--pcr-color', defaultColor);
this.pickr = Pickr.create(getPickrSettings({
isView: this.isView,
el: this.settingEl.controlEl.createDiv({ cls: 'picker' }),
containerEl: containerEl,
containerEl: this.containerEl,
swatches: swatches,
opacity: this.setting.opacity,
defaultColor: defaultColor,
@ -8977,7 +8975,9 @@ class VariableColorSettingComponent extends AbstractSettingComponent {
});
this.pickr.on('show', () => {
const { result } = this.pickr.getRoot().interaction;
requestAnimationFrame(() => requestAnimationFrame(() => result.select()));
activeWindow.requestAnimationFrame(() => {
activeWindow.requestAnimationFrame(() => result.select());
});
});
this.pickr.on('cancel', onPickrCancel);
this.settingEl.addExtraButton((b) => {
@ -8999,7 +8999,7 @@ class VariableColorSettingComponent extends AbstractSettingComponent {
}
class VariableThemedColorSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
if (typeof this.setting['default-light'] !== 'string' ||
@ -9028,7 +9028,7 @@ class VariableThemedColorSettingComponent extends AbstractSettingComponent {
if (valueDark !== undefined) {
swatchesDark.push(valueDark);
}
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setName(title);
// Construct description
this.settingEl.descEl.createSpan({}, (span) => {
@ -9051,9 +9051,9 @@ class VariableThemedColorSettingComponent extends AbstractSettingComponent {
cls: 'themed-color-wrapper',
});
// Create light color picker
this.createColorPickerLight(wrapper, containerEl, swatchesLight, valueLight, idLight);
this.createColorPickerLight(wrapper, this.containerEl, swatchesLight, valueLight, idLight);
// Create dark color picker
this.createColorPickerDark(wrapper, containerEl, swatchesDark, valueDark, idDark);
this.createColorPickerDark(wrapper, this.containerEl, swatchesDark, valueDark, idDark);
this.settingEl.settingEl.dataset.id = this.setting.id;
}
destroy() {
@ -9081,7 +9081,7 @@ class VariableThemedColorSettingComponent extends AbstractSettingComponent {
}));
this.pickrLight.on('show', () => {
const { result } = this.pickrLight.getRoot().interaction;
requestAnimationFrame(() => requestAnimationFrame(() => result.select()));
activeWindow.requestAnimationFrame(() => activeWindow.requestAnimationFrame(() => result.select()));
});
this.pickrLight.on('save', (color, instance) => this.onSave(idLight, color, instance));
this.pickrLight.on('cancel', onPickrCancel);
@ -9110,7 +9110,7 @@ class VariableThemedColorSettingComponent extends AbstractSettingComponent {
}));
this.pickrDark.on('show', () => {
const { result } = this.pickrDark.getRoot().interaction;
requestAnimationFrame(() => requestAnimationFrame(() => result.select()));
activeWindow.requestAnimationFrame(() => activeWindow.requestAnimationFrame(() => result.select()));
});
this.pickrDark.on('save', (color, instance) => this.onSave(idDark, color, instance));
this.pickrDark.on('cancel', onPickrCancel);
@ -9132,17 +9132,17 @@ class VariableThemedColorSettingComponent extends AbstractSettingComponent {
}
class InfoTextSettingComponent extends AbstractSettingComponent {
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setClass('style-settings-info-text');
if (title) {
this.settingEl.setName(title);
}
if (description) {
if (this.setting.markdown) {
obsidian.MarkdownRenderer.renderMarkdown(description, this.settingEl.descEl, '', undefined);
obsidian.MarkdownRenderer.renderMarkdown(description, this.settingEl.descEl, '', this);
this.settingEl.descEl.addClass('style-settings-markdown');
}
else {
@ -9157,52 +9157,84 @@ class InfoTextSettingComponent extends AbstractSettingComponent {
}
}
function createSettingComponent(sectionId, sectionName, setting, settingsManager, isView) {
function createSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView) {
if (setting.type === SettingType.HEADING) {
return new HeadingSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new HeadingSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.INFO_TEXT) {
return new InfoTextSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new InfoTextSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.CLASS_TOGGLE) {
return new ClassToggleSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new ClassToggleSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.CLASS_SELECT) {
return new ClassMultiToggleSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new ClassMultiToggleSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_TEXT) {
return new VariableTextSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableTextSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_NUMBER) {
return new VariableNumberSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableNumberSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_NUMBER_SLIDER) {
return new VariableNumberSliderSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableNumberSliderSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_SELECT) {
return new VariableSelectSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableSelectSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_COLOR) {
return new VariableColorSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableColorSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else if (setting.type === SettingType.VARIABLE_THEMED_COLOR) {
return new VariableThemedColorSettingComponent(sectionId, sectionName, setting, settingsManager, isView);
return new VariableThemedColorSettingComponent(parent, sectionId, sectionName, setting, settingsManager, isView);
}
else {
return undefined;
}
}
function buildSettingComponentTree(opts) {
const { containerEl, isView, sectionId, settings, settingsManager, sectionName, } = opts;
const root = new HeadingSettingComponent(containerEl, sectionId, sectionName, settings[0], settingsManager, isView);
let currentHeading = root;
for (const setting of settings.splice(1)) {
if (setting.type === 'heading') {
const newHeading = setting;
if (newHeading.level < currentHeading.setting.level) {
while (newHeading.level < currentHeading.setting.level) {
currentHeading = currentHeading.parent;
}
if (currentHeading.setting.id === root.setting.id) {
currentHeading = currentHeading.addSettingChild(newHeading);
}
else {
currentHeading = currentHeading.parent.addSettingChild(newHeading);
}
}
else if (newHeading.level === currentHeading.setting.level) {
currentHeading = currentHeading.parent.addSettingChild(newHeading);
}
else {
currentHeading = currentHeading.addSettingChild(newHeading);
}
}
else {
currentHeading.addSettingChild(setting);
}
}
return root;
}
class HeadingSettingComponent extends AbstractSettingComponent {
onInit() {
constructor() {
super(...arguments);
this.children = [];
this.filteredChildren = [];
this.filterMode = false;
this.filterResultCount = 0;
}
render(containerEl) {
render() {
const title = getTitle(this.setting);
const description = getDescription(this.setting);
this.settingEl = new obsidian.Setting(containerEl);
this.settingEl = new obsidian.Setting(this.containerEl);
this.settingEl.setHeading();
this.settingEl.setClass('style-settings-heading');
this.settingEl.setName(title);
@ -9214,28 +9246,28 @@ class HeadingSettingComponent extends AbstractSettingComponent {
});
obsidian.setIcon(iconContainer, 'right-triangle');
this.settingEl.nameEl.prepend(iconContainer);
if (this.filterMode) {
this.settingEl.nameEl.createSpan({
cls: 'style-settings-filter-result-count',
text: `${this.filterResultCount} Results`,
});
}
this.resultsEl = this.settingEl.nameEl.createSpan({
cls: 'style-settings-filter-result-count',
text: this.filterMode ? `${this.filterResultCount} Results` : undefined,
});
this.settingEl.settingEl.addEventListener('click', () => {
this.toggleVisible();
});
this.addResetButton();
this.addExportButton();
this.childEl = containerEl.createDiv({ cls: 'style-settings-container' });
this.childEl = this.containerEl.createDiv({
cls: 'style-settings-container',
});
this.setCollapsed(this.setting.collapsed);
}
destroy() {
var _a;
if (!this.setting.collapsed) {
this.destroyChildren();
}
this.removeChildren();
(_a = this.settingEl) === null || _a === void 0 ? void 0 : _a.settingEl.remove();
this.childEl.remove();
}
filter(filterString) {
var _a;
this.filteredChildren = [];
this.filterResultCount = 0;
for (const child of this.children) {
@ -9254,10 +9286,18 @@ class HeadingSettingComponent extends AbstractSettingComponent {
}
}
this.filterMode = true;
this.setting.collapsed = false;
if (this.filterResultCount) {
this.setCollapsed(false);
}
else {
this.setCollapsed(true);
}
this.renderChildren();
(_a = this.resultsEl) === null || _a === void 0 ? void 0 : _a.setText(`${this.filterResultCount} Results`);
return this.filterResultCount;
}
clearFilter() {
var _a;
this.filteredChildren = [];
for (const child of this.children) {
if (child.setting.type === SettingType.HEADING) {
@ -9265,36 +9305,37 @@ class HeadingSettingComponent extends AbstractSettingComponent {
}
}
this.filterMode = false;
this.setting.collapsed = true;
this.setCollapsed(true);
this.renderChildren();
(_a = this.resultsEl) === null || _a === void 0 ? void 0 : _a.empty();
}
renderChildren() {
this.destroyChildren();
this.removeChildren();
if (this.filterMode) {
for (const child of this.filteredChildren) {
child.render(this.childEl);
this.addChild(child);
}
}
else {
for (const child of this.children) {
child.render(this.childEl);
this.addChild(child);
}
}
}
destroyChildren() {
var _a;
removeChildren() {
for (const child of this.children) {
child.destroy();
this.removeChild(child);
}
(_a = this.childEl) === null || _a === void 0 ? void 0 : _a.empty();
}
toggleVisible() {
this.setCollapsed(!this.setting.collapsed);
}
setCollapsed(collapsed) {
var _a;
this.setting.collapsed = collapsed;
this.settingEl.settingEl.toggleClass('is-collapsed', collapsed);
(_a = this.settingEl) === null || _a === void 0 ? void 0 : _a.settingEl.toggleClass('is-collapsed', collapsed);
if (collapsed) {
this.destroyChildren();
this.removeChildren();
}
else {
this.renderChildren();
@ -9322,14 +9363,11 @@ class HeadingSettingComponent extends AbstractSettingComponent {
});
});
}
addChild(child) {
const newSettingComponent = createSettingComponent(this.sectionId, this.sectionName, child, this.settingsManager, this.isView);
addSettingChild(child) {
const newSettingComponent = createSettingComponent(this, this.sectionId, this.sectionName, child, this.settingsManager, this.isView);
if (!newSettingComponent) {
return undefined;
}
if (newSettingComponent.setting.type === SettingType.HEADING) {
newSettingComponent.parent = this;
}
this.children.push(newSettingComponent);
return newSettingComponent;
}
@ -9344,40 +9382,10 @@ class HeadingSettingComponent extends AbstractSettingComponent {
return children;
}
}
function buildSettingComponentTree(opts) {
const { isView, sectionId, settings, settingsManager, sectionName } = opts;
const root = new HeadingSettingComponent(sectionId, sectionName, settings[0], settingsManager, isView);
let currentHeading = root;
for (const setting of settings.splice(1)) {
if (setting.type === 'heading') {
const newHeading = setting;
if (newHeading.level < currentHeading.setting.level) {
while (newHeading.level < currentHeading.setting.level) {
currentHeading = currentHeading.parent;
}
if (currentHeading.setting.id === root.setting.id) {
currentHeading = currentHeading.addChild(newHeading);
}
else {
currentHeading = currentHeading.parent.addChild(newHeading);
}
}
else if (newHeading.level === currentHeading.setting.level) {
currentHeading = currentHeading.parent.addChild(newHeading);
}
else {
currentHeading = currentHeading.addChild(newHeading);
}
}
else {
currentHeading.addChild(setting);
}
}
return root;
}
class SettingsMarkup {
class SettingsMarkup extends obsidian.Component {
constructor(app, plugin, containerEl, isView) {
super();
this.settingsComponentTrees = [];
this.filterString = '';
this.settings = [];
@ -9387,23 +9395,31 @@ class SettingsMarkup {
this.containerEl = containerEl;
this.isView = !!isView;
}
onload() {
this.display();
}
onunload() {
this.settingsComponentTrees = [];
}
display() {
this.generate(this.settings);
}
removeChildren() {
for (const settingsComponentTree of this.settingsComponentTrees) {
this.removeChild(settingsComponentTree);
}
}
/**
* Recursively destroys all setting elements.
*/
cleanup() {
var _a;
for (const settingsComponentTree of this.settingsComponentTrees) {
settingsComponentTree.destroy();
}
this.removeChildren();
(_a = this.settingsContainerEl) === null || _a === void 0 ? void 0 : _a.empty();
}
setSettings(settings, errorList) {
this.settings = settings;
this.errorList = errorList;
this.plugin.settingsManager.setConfig(settings);
if (this.containerEl.parentNode) {
this.generate(settings);
}
@ -9479,17 +9495,15 @@ class SettingsMarkup {
// move the search component from the back to the front
setting.nameEl.appendChild(setting.controlEl.lastChild);
searchComponent.setValue(this.filterString);
searchComponent.onChange((value) => {
customDebounce(() => {
this.filterString = value;
if (value) {
this.filter();
}
else {
this.clearFilter();
}
}, 250);
});
searchComponent.onChange(obsidian.debounce((value) => {
this.filterString = value;
if (value) {
this.filter();
}
else {
this.clearFilter();
}
}, 250, true));
searchComponent.setPlaceholder('Search Style Settings...');
});
this.settingsContainerEl = containerEl.createDiv();
@ -9504,20 +9518,21 @@ class SettingsMarkup {
collapsed: (_a = s.collapsed) !== null && _a !== void 0 ? _a : true,
resetFn: () => {
plugin.settingsManager.clearSection(s.id);
this.generate(this.settings);
this.rerender();
},
},
...s.settings,
];
try {
const settingsComponentTree = buildSettingComponentTree({
containerEl: this.settingsContainerEl,
isView: this.isView,
sectionId: s.id,
sectionName: s.name,
settings: options,
settingsManager: plugin.settingsManager,
});
settingsComponentTree.render(this.settingsContainerEl);
this.addChild(settingsComponentTree);
this.settingsComponentTrees.push(settingsComponentTree);
}
catch (e) {
@ -9529,39 +9544,45 @@ class SettingsMarkup {
* Recursively filter all setting elements based on `filterString` and then re-renders.
*/
filter() {
this.cleanup();
for (const settingsComponentTree of this.settingsComponentTrees) {
settingsComponentTree.filter(this.filterString);
settingsComponentTree.render(this.settingsContainerEl);
}
}
/**
* Recursively clears the filter and then re-renders.
*/
clearFilter() {
this.cleanup();
for (const settingsComponentTree of this.settingsComponentTrees) {
settingsComponentTree.clearFilter();
settingsComponentTree.render(this.settingsContainerEl);
}
}
rerender() {
for (const settingsComponentTree of this.settingsComponentTrees) {
settingsComponentTree.render(this.settingsContainerEl);
}
this.cleanup();
this.display();
}
}
class CSSSettingsTab extends obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.settingsMarkup = new SettingsMarkup(app, plugin, this.containerEl);
this.plugin = plugin;
}
setSettings(settings, errorList) {
this.settings = settings;
this.errorList = errorList;
if (this.settingsMarkup) {
this.settingsMarkup.setSettings(settings, errorList);
}
}
display() {
this.settingsMarkup.display();
this.settingsMarkup = this.plugin.addChild(new SettingsMarkup(this.app, this.plugin, this.containerEl));
if (this.settings) {
this.settingsMarkup.setSettings(this.settings, this.errorList);
}
}
hide() {
this.settingsMarkup.cleanup();
this.plugin.removeChild(this.settingsMarkup);
this.settingsMarkup = null;
}
}
@ -9570,7 +9591,22 @@ class SettingsView extends obsidian.ItemView {
constructor(plugin, leaf) {
super(leaf);
this.plugin = plugin;
this.settingsMarkup = new SettingsMarkup(plugin.app, plugin, this.contentEl, true);
}
setSettings(settings, errorList) {
this.settings = settings;
this.errorList = errorList;
if (this.settingsMarkup) {
this.settingsMarkup.setSettings(settings, errorList);
}
}
onload() {
this.settingsMarkup = this.addChild(new SettingsMarkup(this.plugin.app, this.plugin, this.contentEl, true));
if (this.settings) {
this.settingsMarkup.setSettings(this.settings, this.errorList);
}
}
onunload() {
this.settingsMarkup = null;
}
getViewType() {
return viewType;
@ -9581,16 +9617,6 @@ class SettingsView extends obsidian.ItemView {
getDisplayText() {
return 'Style Settings';
}
onOpen() {
return __awaiter(this, void 0, void 0, function* () {
return this.settingsMarkup.display();
});
}
onClose() {
return __awaiter(this, void 0, void 0, function* () {
return this.settingsMarkup.cleanup();
});
}
}
class CSSSettingsPlugin extends obsidian.Plugin {
@ -9615,8 +9641,10 @@ class CSSSettingsPlugin extends obsidian.Plugin {
this.activateView();
},
});
this.registerEvent(this.app.workspace.on('css-change', () => {
this.parseCSS();
this.registerEvent(this.app.workspace.on('css-change', (data) => {
if ((data === null || data === void 0 ? void 0 : data.source) !== 'style-settings') {
this.parseCSS();
}
}));
this.registerEvent(this.app.workspace.on('parse-style-settings', () => {
this.parseCSS();
@ -9625,6 +9653,13 @@ class CSSSettingsPlugin extends obsidian.Plugin {
this.darkEl = document.body.createDiv('theme-dark style-settings-ref');
document.body.classList.add('css-settings-manager');
this.parseCSS();
this.app.workspace.onLayoutReady(() => {
if (this.settingsList) {
this.app.workspace.getLeavesOfType(viewType).forEach((leaf) => {
leaf.view.setSettings(this.settingsList, this.errorList);
});
}
});
});
}
getCSSVar(id) {
@ -9635,15 +9670,16 @@ class CSSSettingsPlugin extends obsidian.Plugin {
}
parseCSS() {
clearTimeout(this.debounceTimer);
this.settingsList = [];
this.errorList = [];
// remove registered theme commands (sadly undocumented API)
for (const command of this.commandList) {
// @ts-ignore
this.app.commands.removeCommand(command.id);
}
this.commandList = [];
this.debounceTimer = window.setTimeout(() => {
this.debounceTimer = activeWindow.setTimeout(() => {
this.settingsList = [];
this.errorList = [];
// remove registered theme commands (sadly undocumented API)
for (const command of this.commandList) {
// @ts-ignore
this.app.commands.removeCommand(command.id);
}
this.commandList = [];
this.settingsManager.removeClasses();
const styleSheets = document.styleSheets;
for (let i = 0, len = styleSheets.length; i < len; i++) {
const sheet = styleSheets.item(i);
@ -9651,10 +9687,11 @@ class CSSSettingsPlugin extends obsidian.Plugin {
}
// compatability with Settings Search Plugin
this.registerSettingsToSettingsSearch();
this.settingsTab.settingsMarkup.setSettings(this.settingsList, this.errorList);
this.settingsTab.setSettings(this.settingsList, this.errorList);
this.app.workspace.getLeavesOfType(viewType).forEach((leaf) => {
leaf.view.settingsMarkup.setSettings(this.settingsList, this.errorList);
leaf.view.setSettings(this.settingsList, this.errorList);
});
this.settingsManager.setConfig(this.settingsList);
this.settingsManager.initClasses();
this.registerSettingCommands();
}, 100);
@ -9775,12 +9812,6 @@ class CSSSettingsPlugin extends obsidian.Plugin {
callback: () => {
const value = !this.settingsManager.getSetting(section.id, setting.id);
this.settingsManager.setSetting(section.id, setting.id, value);
if (value) {
document.body.classList.add(setting.id);
}
else {
document.body.classList.remove(setting.id);
}
this.settingsTab.settingsMarkup.rerender();
for (const leaf of this.app.workspace.getLeavesOfType(viewType)) {
leaf.view.settingsMarkup.rerender();
@ -9795,7 +9826,6 @@ class CSSSettingsPlugin extends obsidian.Plugin {
this.darkEl = null;
document.body.classList.remove('css-settings-manager');
this.settingsManager.cleanup();
this.settingsTab.settingsMarkup.cleanup();
this.deactivateView();
this.unregisterSettingsFromSettingsSearch();
}
@ -9810,7 +9840,7 @@ class CSSSettingsPlugin extends obsidian.Plugin {
type: viewType,
active: true,
});
leaf.view.settingsMarkup.setSettings(this.settingsList, this.errorList);
leaf.view.setSettings(this.settingsList, this.errorList);
});
}
}

View file

@ -1,7 +1,7 @@
{
"id": "obsidian-style-settings",
"name": "Style Settings",
"version": "1.0.3",
"version": "1.0.6",
"minAppVersion": "0.11.5",
"description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.",
"author": "mgmeyers",

View file

@ -17,4 +17,8 @@
zoom: 70%;
}
}
.embed-title {
display: none;
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@ org_goals:
- Dominer la contrebande de poison et de faussaire
- Maitriser toutes les autres guildes criminelles
org_parent: ""
org_leader: "[Erulissen](../PNJ/Erulissen.md)"
org_leader: "[Erulissen](../Personnages/PNJ/Erulissen.md)"
signature: Une fleur de cerisier
status: WIP
---

View file

@ -58,10 +58,10 @@ Installés en permanence dans les bâtiments officiels, les membres sont les pre
Le dernier vote pour le conseil a eu lieu l'année dernière
### Membres actuels
- [Lunarion Agnadelle](../PNJ/Lunarion%20Agnadelle.md) Membre depuis 8ans (deuxième mandat), il succède a son père.
- [Malvina Ceréel](../PNJ/Malvina%20Ceréel.md), halfeline de la famille Ceréel, entame sa 13e année (3eme mandat) et ne compte pas partir.
- [Artistophane Ipato](../PNJ/Artistophane%20Ipato.md). La famille Ipato est dans son premier mandat, et c'est la première fois qu'une famille Cyrillane arrive au conseil de la main.
- [Zerka Valtor](../PNJ/Zerka%20Valtor.md), placée dans l'institution de la Steinbank.
- Le [Baron de l'Éther](../PNJ/Baron%20de%20l'Éther.md), possède la majorité des transports de la villes. Compagnie de barques, [[néfélytres]] et [[boursoufleuses]]. Il siège au conseil du [quartier des inventions](../Locations/Quartier%20éolien.md)
- [Lunarion Agnadelle](../Personnages/PNJ/Lunarion%20Agnadelle.md) Membre depuis 8ans (deuxième mandat), il succède a son père.
- [Malvina Ceréel](../Personnages/PNJ/Malvina%20Ceréel.md), halfeline de la famille Ceréel, entame sa 13e année (3eme mandat) et ne compte pas partir.
- [Artistophane Ipato](../Personnages/PNJ/Artistophane%20Ipato.md). La famille Ipato est dans son premier mandat, et c'est la première fois qu'une famille Cyrillane arrive au conseil de la main.
- [Zerka Valtor](../Personnages/PNJ/Zerka%20Valtor.md), placée dans l'institution de la Steinbank.
- Le [Baron de l'Éther](../Personnages/PNJ/Baron%20de%20l'Éther.md), possède la majorité des transports de la villes. Compagnie de barques, [[néfélytres]] et [[boursoufleuses]]. Il siège au conseil du [quartier des inventions](../Locations/Quartier%20éolien.md)

View file

@ -50,7 +50,7 @@ status: TODO
>```
Secte radicale honorant [Tamerakh](../PNJ/Dieux/Tamerakh.md) en tant que Libérateur par la destruction.
Secte radicale honorant [Tamerakh](../Personnages/PNJ/Dieux/Tamerakh.md) en tant que Libérateur par la destruction.
Elle est connu pour avoir précipité la guerre civile en Cyrillane et contribué à provoquer la chute de la dynastie Kadméïde

Binary file not shown.

View file

@ -0,0 +1,2 @@
```folderv
````

Binary file not shown.

Binary file not shown.

BIN
Illustrations/Pasted Image 20230718110057_207.jpg (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -11,4 +11,4 @@ Il est plus facile de briser un vase que de le réparer. Se libérer de la corru
La corruption permanente ne peut être guéri que par un rituel secret des druides arolaves et des aldarons, l'Oravamassë, et seulement si la corruption n'est pas critique.
#### Dans la campagne
Dans le cas d'[Hrysanthéïs](PNJ/Hrysanthéïs.md), seul un _souhait_ permettrait de le soigner. L'intrigue principale de la campagne est motivé par le côté irréversible de la corruption du dragon, aussi je recommande de jour avec l'option Intrigue. En cas de sort souhait lancé, un portail vers Éternité s'ouvrirait afin de permettre aux aventuriers de traverser le labyrinthe et de faire un vœux a la forge du destin.
Dans le cas d'[Hrysanthéïs](Personnages/PNJ/Hrysanthéïs.md), seul un _souhait_ permettrait de le soigner. L'intrigue principale de la campagne est motivé par le côté irréversible de la corruption du dragon, aussi je recommande de jour avec l'option Intrigue. En cas de sort souhait lancé, un portail vers Éternité s'ouvrirait afin de permettre aux aventuriers de traverser le labyrinthe et de faire un vœux a la forge du destin.

View file

@ -6,7 +6,7 @@ encoutered: false
type: Cité
found_in: Cyrillane
short_desc: "Tête de pont de [Kartaçöl](Factions/Empire%20de%20Kartaçöl.md) en Cyrillane"
short_desc: "Tête de pont de [Kartaçöl](../Factions/Empire%20de%20Kartaçöl.md) en Cyrillane"
image: "../Illustrations/sasha-beliaev-sasha-beliaev-cam-back-22-final-s.jpg"
source:
map:

View file

@ -6,7 +6,7 @@ encoutered: false
type: Bar
found_in: Quartier du Vieux Port
short_desc: "Un bar dans le [Quartier du Vieux Port](Quartier%20du%20Vieux%20Port.md), appartenant à [Derlynn Boyau-Gravier](../PNJ/Derlynn%20Boyau-Gravier.md)"
short_desc: "Un bar dans le [Quartier du Vieux Port](Quartier%20du%20Vieux%20Port.md), appartenant à [Derlynn Boyau-Gravier](../Personnages/PNJ/Derlynn%20Boyau-Gravier.md)"
image: "../Illustrations/somewhere.png"
map:

View file

@ -5,7 +5,7 @@ found_in: "Terrasse du Palais"
type: Résidence
encoutered: false
short_desc: "Manoir d'[Althéa](../PNJ/Althéa%20Temperenza.md)"
short_desc: "Manoir d'[Althéa](../Personnages/PNJ/Althéa%20Temperenza.md)"
image: "../Illustrations/Maps/Manoir Temperenza.png"
source: "[Grimm Tales - House Manor](https://boardgamegeek.com/rpgitem/113500/grimm-tales) by [Jonathan Roberts](http://www.fantasticmaps.com/indoor-battlemaps/manor-2/)"
map: "[Manoir d'Althéa](../Illustrations/Maps/Manoir Temperenza.png"

View file

@ -37,4 +37,4 @@ status: TODO
- Le quartier gnome est le plus moderne de la ville. Après avoir racheté les bâtisses et hôtels particuliers vieillissants du secteur, les gnomes des îles Éoliennes qui sy installèrent forgèrent petit à petit une solide réputation pour ce « quartier des inventions » où circulent les néfélytres sous léclairage public au gaz.
- Le conseil de quartier est signalé par une tour dhorloge ornée dun carillon qui chante lheure chaque fois sur un air différent. La plupart des visiteurs doivent faire attention à leur tête car beaucoup dinstallations et constructions sont ici de petite taille.
- Un autre lieu qui attire lattention est limprimerie de la gnome [Baltusia Nodil](../PNJ/Baltusia%20Nodil.md). Elle a racheté un ancien scriptorium et en a radicalement changé laspect. Il est aujourdhui occupé par les grandes presses hydrauliques de son entreprise, qui impriment toute la journée et toute la nuit des livres, des affiches et des gazettes à destination de la ville entière
- Un autre lieu qui attire lattention est limprimerie de la gnome [Baltusia Nodil](../Personnages/PNJ/Baltusia%20Nodil.md). Elle a racheté un ancien scriptorium et en a radicalement changé laspect. Il est aujourdhui occupé par les grandes presses hydrauliques de son entreprise, qui impriment toute la journée et toute la nuit des livres, des affiches et des gazettes à destination de la ville entière

View file

@ -2,7 +2,7 @@ Arène clandestine, près de [Nemea](Nemea). Anciennement l'arène du Lion, les
C'est le rendez vous des contrebandiers, des parieurs, et de la pègre.
C'est la qu'est né [L'Ombre](PNJ/L'Ombre.md)
C'est la qu'est né [L'Ombre](../Personnages/PNJ/L'Ombre.md)

44
Meta/Notes-Structure.md Normal file
View file

@ -0,0 +1,44 @@
---
tags : ["wip"]
status: WIP
---
# Glossaire
## Noeud
Scène ou lieu, voir personnage si c'est un "informateur" (Dîner avec Althéa, Hydre Cristalline ). Les noeuds peuvent avoir des sous-noeud (comme un PNJ dans un lieu) si les noeuds et sous-noeuds peuvent :
- Etre décorrélé (un pnj peut bouger)
- Avoir chacun des indices pointant différent (voir [Règle des 3 indices](../Notes/Aides%20à%20la%20création.md#Liens))
Les sous-noeuds sont noté noeud/sous-noeuds ci-dessous
## Indices
Éléments permettant de naviguer entre les noeuds ( objets, actions, pnj)
## Aventure/Quête
Ensemble de noeud ayant un noeud de début (Start) et un noeud de fin (End).
## Chapitre
Ensemble de quêtes formant un arc narratif avec un début et une fin. Cependant, certaines quêtes peuvent être commencé dans un chapitre et terminé ou non dans un autre.
Un chapitre se clos sur la fin d'une quête.
# Synthèse
### Chapitre 1
**Thème** : enquête urbaine, intrigues politiques
#### Nœuds
##### Manoir d'Althéa
- Boite d'Allumette de l'Hydre Cristalline ( -> Hydre Cristalline )
- Lettre de Mahira ( -> [L'Arène/Mahira](#Mahira)]
- Interrogatoire de Gustavio ( -> Les Jumeaux )
- Interrogatoire de Gustavio ( -> La Léproserie de Sheena )
- Interrogatoire d'Althéa ( -> Verndrimund )
- Interrogatoire d'Althéa ( -> Aïpio/[Zefyris](../Personnages/PNJ/Zefyris.md) )
##### L'Arène
-
-
-
###### Mahira
- Interrogatoire de Mahira (-> [[Lunarion]])
- Interrogatoire de Mahira (-> Lysandre)
-
##### Léproserie de Sheena
-
-
-

View file

@ -8,4 +8,4 @@
2. La quête de l'antidote : les joueurs devront trouver un moyen de soigner les lépreux transformés en ravageurs. Cela pourrait les amener à parcourir des contrées lointaines, à rencontrer des guérisseurs expérimentés ou à faire face à des choix difficiles.
3. La quête de l'information : les joueurs devront rassembler des preuves pour prouver que Milles-visages et Althéa sont responsables de la contamination de la Cité franche. Cela pourrait les amener à infiltrer des organisations secrètes, à déjouer des pièges mortels ou à affronter des ennemis redoutables.
4. La quête de l'alliance : les joueurs devront convaincre des groupes différents de les aider dans leur combat final contre les ravageurs. Cela pourrait les amener à négocier avec des criminels, à rallier des communautés opprimées ou à affronter des rivalités ancestrales.
5. La quête d'[Hrysanthéïs](../PNJ/Hrysanthéïs.md) : Les joueurs devront aider et sauver le dragon enfermé sous la Cité.
5. La quête d'[Hrysanthéïs](../Personnages/PNJ/Hrysanthéïs.md) : Les joueurs devront aider et sauver le dragon enfermé sous la Cité.

View file

@ -22,7 +22,7 @@
| Faction | But profond des machinations en Cyrillane | Militaire | Légitimité | Commercial |
|---|---|---|---|---|
| [Kartaçöl](../Factions/Empire%20de%20Kartaçöl.md) | Les yeux de l'immortel sont rivé sur l'Arolavie. La Cyrillanne n'est qu'une étape, et le contrôle d'une petite région lui donnant accès a la Mer Ustalva lui suffira. <br>L'essentiel est de nouer de bonnes relations avec le vainqueur | Une flotte puissante et le quasi contrôle de la Mer Ustalva; il y a aussi l'Egilmez, l'armée proffessionnelle et entrainée de l'Empire | Ils fournissent soin et services aux loyalistes, et des relations commerciales équitables. Aimé de ses sujets, l'Ikral pronent l'union des peuples sous une seule bannière | Le bois d'Ündsenoin et les mines d'argents| |
| [Mégare](../PNJ/Mégare%20de%20Cyrillanne.md) | D'une lignée d'anciens rois, Mégare convoite le trone. | Elle contrôle une cinquantaine de chimère puissantes | Elle est la descendante de la famille #toWrite , la deuxième famille noble la plus puissante après les Kadméïde. | | |
| [Mégare](../Personnages/PNJ/Mégare%20de%20Cyrillanne.md) | D'une lignée d'anciens rois, Mégare convoite le trone. | Elle contrôle une cinquantaine de chimère puissantes | Elle est la descendante de la famille #toWrite , la deuxième famille noble la plus puissante après les Kadméïde. | | |
| Dragons noirs | | Ce sont des dragons noirs. Bien que puissant, ils ne sont pas particulièrement agressif, sauf pour manger. Par contre, ils collaborent volontiers avec des ravageurs. | Aucune | | |
| Kadméïde | | | | | |
| [Mille-Visages](../PNJ/Mille-Visages.md) | Surveiller de loin | A des [[anostheni]] infiltré un peu partout dans chaque factions. | | | |
| [Mille-Visages](../Personnages/PNJ/Mille-Visages.md) | Surveiller de loin | A des [[anostheni]] infiltré un peu partout dans chaque factions. | | | |

View file

@ -1,6 +1,6 @@
- Le Minotaure : Les joueurs sont envoyé par [Kartaçöl](../Factions/Empire%20de%20Kartaçöl.md) explorer des ruines, et tombent sur un vieux labyrinthe de l'[Empire de Bail](Empire%20de%20Bail) gardé par un vieux **minotaure**. Dans le labyrinthe, ils peuvent trouver des informations succinctes sur la [[Forge du Destin]], sous forme de graffiti sanglants et morceaux de chairs. Une énigme scellerait l'entrée "*Elle rentre toujours la première, Et sort toujours la dernière.*" (la clé);
- Le guerrier millénaire : [Lykos](../PNJ/Lykos.md)
- Le guerrier millénaire : [Lykos](../Personnages/PNJ/Lykos.md)
- La Dracoliche raté : [Le Temple Bucolique](../Locations/Le%20Temple%20Bucolique.md)
- Lions
- Lynx

3
Notes/Notes.md Normal file
View file

@ -0,0 +1,3 @@
```folderv
```

View file

@ -16,7 +16,7 @@
- Les PJ dont invités à un concert avec toute la noblesse pour fêter la nomination de l'absolue et la salle se fait attaquer ( mage opposé au fichages des éveillé ?). Althéa récupère l'attentat pour faire renforcer la garde et instaurer un état totalitaire. La piste de l'attentat peut apporter une pièce de puzzle pour Althéa= Lysandre.
- le chef du cercle de sel est un père solo, qui est animé par un idéal de justice implacable. Pour lui, la fin justifie les moyens Il aidera les PJ mais au prix de méthodes douteuse.
- Après l'ascension d'Althéa, les joueurs devront enquêter sur des éveillé non déclaré #fichage-mage
- Une suite de quête "annexe" mènera aux grottes de [Hrysanthéïs](../PNJ/Hrysanthéïs.md) #ch3
- Une suite de quête "annexe" mènera aux grottes de [Hrysanthéïs](../Personnages/PNJ/Hrysanthéïs.md) #ch3
- couronne des Drae sous le cimetière de la plaine (conflit avec le clergé de Mort ??)
@ -34,7 +34,7 @@
## #Kuma
- N'aura pas trouvé l'équipage de Galila pendant le timeskip, mais les trouvera après la tridentine
- Sa troupe gagne en réputation et c'est un problème pour [Althéa](../PNJ/Althéa%20Temperenza.md) #troupe-dent-brisée
- Sa troupe gagne en réputation et c'est un problème pour [Althéa](../Personnages/PNJ/Althéa%20Temperenza.md) #troupe-dent-brisée
- Mariage avec Aklhitol ? Choix a faire à faire entre Aklhitol et Cléo. Cléo barbare, tendance animiste ? Malédiction de Gegaor, Ours garou ? -> Clerc ou Paladin pour essayer de contrer son côté animal #kuma
- Retrouvailles avec Nerva, colère ou soulagement ? Vas elle essayer de le capturer ? (Scène de retrouvailles, demande de revenir dans la légion. Si il refuse, tentative de capture et cour martiale) #kuma
- Les patrouilleurs ont disparus depuis la chronocatastrophe et la troupe de la dents-brisée prend la relève du maintien de l'ordre dans la Ouestrie #troupe-dent-brisée #patrouilleurs #chronolithe

Binary file not shown.

View file

@ -3,13 +3,21 @@
{"type":"file","file":"Objets/Venin de Ver Pourpre.md","id":"efa69e1a75c11242","x":-1791,"y":-684,"width":250,"height":255},
{"type":"text","text":"## Fleche empoisonnée","id":"f063283a8f46019a","x":-1791,"y":40,"width":250,"height":88},
{"type":"text","text":"Une fiole de Venin de Ver Pourpre a été volé/interceptée récemment à l'[[Aïpio]].\n\nLysandre a fait le coup.\n\n\n\n","id":"8297aa460c243d4e","x":-2477,"y":-642,"width":289,"height":286,"color":"3"},
{"type":"file","file":"PNJ/Lysandre.md","id":"df4579e227933786","x":-3037,"y":-556,"width":400,"height":545,"color":"5"},
{"type":"file","file":"Personnages/PNJ/Lysandre.md","id":"df4579e227933786","x":-3037,"y":-556,"width":400,"height":545,"color":"5"},
{"type":"file","file":"Locations/Manoir Temperenza.md","id":"b55861629f131367","x":-679,"y":-854,"width":296,"height":74,"color":"1"},
{"type":"text","text":"[[Un garde]] qui fait partie du groupe qui rackettait Derlynn","id":"f03039fca12d72ac","x":-56,"y":1131,"width":250,"height":110,"color":"5"},
{"type":"file","file":"PNJ/Derlynn Boyau-Gravier.md","id":"71420cf4712c3653","x":-698,"y":-231,"width":343,"height":607,"color":"5"},
{"type":"file","file":"PNJ/Erulissen.md","id":"2874d622a3967f33","x":-3196,"y":128,"width":471,"height":693,"color":"5"},
{"type":"file","file":"Illustrations/Portraits/Erulissen.png","id":"283bdba515f063ae","x":-2590,"y":198,"width":null,"height":null},
{"type":"file","file":"PNJ/Erulissen.md","id":"0bdcdbd86ac0310f","x":-2533,"y":598,"width":201,"height":65},
{"type":"file","file":"Personnages/PNJ/Derlynn Boyau-Gravier.md","id":"71420cf4712c3653","x":-698,"y":-231,"width":343,"height":607,"color":"5"},
{"type":"file","file":"Personnages/PNJ/Erulissen.md","id":"2874d622a3967f33","x":-3196,"y":128,"width":471,"height":693,"color":"5"},
{
"type":"file",
"file":"Illustrations/Portraits/Erulissen.png",
"id":"283bdba515f063ae",
"x":-2590,
"y":198,
"width":null,
"height":null
},
{"type":"file","file":"Personnages/PNJ/Erulissen.md","id":"0bdcdbd86ac0310f","x":-2533,"y":598,"width":201,"height":65},
{"type":"file","file":"Lieux/L'Arène.md","id":"04e76aef18bfeef5","x":737,"y":-559,"width":400,"height":328,"color":"1"},
{"type":"file","file":"Locations/Hydre Cristalline.md","id":"2a80d183af397d63","x":-6,"y":792,"width":340,"height":66,"color":"1"},
{"type":"file","file":"Organisations/Illégal/La Tridentine.md","id":"76c6b1c219665e55","x":880,"y":303,"width":400,"height":386,"color":"4"},

View file

@ -1,4 +1,4 @@
La maison [Ceréel](../PNJ/Malvina%20Ceréel.md) possède les plus grandes vignes de la Myétée et fait le meilleur vin de l'Ouest du Cyfandir. Seul les vins de [Cyrillane](Cyrillane) surpassent
La maison [Ceréel](../Personnages/PNJ/Malvina%20Ceréel.md) possède les plus grandes vignes de la Myétée et fait le meilleur vin de l'Ouest du Cyfandir. Seul les vins de [Cyrillane](Cyrillane) surpassent
- "*L'Intemporel*", un vin rouge élégant et puissant, produit à partir de raisins cultivés sur les collines ensoleillées de la [[Myétée]]
- "*Le Rêveur*", un vin blanc sec et rafraîchissant, issus de vignes plantées sur des terrains calcaires et bénéficiant d'un climat doux et ensoleillé.
- "*L'Esprit Libre*", un vin rosé pétillant et fruité, élaboré à partir de cépages uniques cultivés dans les jardins halfelins.

View file

@ -8,16 +8,16 @@ ethnicity:
short_desc: Une politicienne qui a le soutien populaire, et la principale commanditaire des personnages
image: ../Illustrations/Portraits/Althéa.png
goals:
- Acceder au [Conseil de la ville](../Factions/La%20Main.md)
- Acceder au [Conseil de la ville](../../Factions/La%20Main.md)
- Se faire élire en tant qu'Absolue
- Installer des nids chancreux dans le [Taudis d'Asoif](../Locations/Taudis%20d'Asoif.md)
- Installer des nids chancreux dans le [Taudis d'Asoif](../../Locations/Taudis%20d'Asoif.md)
likes:
- Le Vin et notamment L'Intemporel, un vin de prestige de la famille Ceréel
- La Philosophie
hates:
- La Violence
organisations:
- "[l'Assemblée](../Factions/Assemblée.md)"
- "[l'Assemblée](../../Factions/Assemblée.md)"
status: DONE
source: Studio Agate, Créatures vol.1
---
@ -52,13 +52,13 @@ source: Studio Agate, Créatures vol.1
- Est un avatar de [Mille-Visages](Mille-Visages.md)
#### Historique
Qui ne connaît pas Althéa Temperanza dans la [Cité Franche](../Locations/Cité%20Franche.md) ? Cette humaine est limage du succès et de lespoir pour les plus pauvres. Jeune orpheline du [Taudis d'Asoif](../Locations/Taudis%20d'Asoif.md), elle à gravi les échelons et a fait fortune dans le commerce maritime
Qui ne connaît pas Althéa Temperanza dans la [Cité Franche](../../Locations/Cité%20Franche.md) ? Cette humaine est limage du succès et de lespoir pour les plus pauvres. Jeune orpheline du [Taudis d'Asoif](../../Locations/Taudis%20d'Asoif.md), elle à gravi les échelons et a fait fortune dans le commerce maritime
La découverte de prodigieux trésors lui a permis de sinstaller dans une riche demeure dominant la cité. Aujourdhui, Althéa est députée pour la seconde fois. Son premier mandat fut un succès populaire, lui assurant malgré le système de tirage au sort [malgré le système de tirage au sort](../Factions/Assemblée.md#Le%20pouvoir%20a%20tout%20prix) lobtention aisée dun second mandat.
La découverte de prodigieux trésors lui a permis de sinstaller dans une riche demeure dominant la cité. Aujourdhui, Althéa est députée pour la seconde fois. Son premier mandat fut un succès populaire, lui assurant malgré le système de tirage au sort [malgré le système de tirage au sort](../../Factions/Assemblée.md#Le%20pouvoir%20a%20tout%20prix) lobtention aisée dun second mandat.
#### Réputation
Il est de renommée publique quAlthéa est une femme pieuse pratiquant la méditation et les études spirituelles et philosophiques dans les pièces les plus élevées de sa demeure. En réalité, il sagit dun subterfuge pratique pour disparaître durant plusieurs heures sans témoin. [Mille-Visages](Mille-Visages.md) peut ainsi partir à sa guise à laide dun passage dérobé. Un réseau descaliers et de passages secrets lui permet de se rendre discrètement ou ouvertement au [Grand Palais](../Locations/Grand%20Palais.md), dans les terrasses proches, dans la basse-ville ou dans les catacombes.
Il est de renommée publique quAlthéa est une femme pieuse pratiquant la méditation et les études spirituelles et philosophiques dans les pièces les plus élevées de sa demeure. En réalité, il sagit dun subterfuge pratique pour disparaître durant plusieurs heures sans témoin. [Mille-Visages](Mille-Visages.md) peut ainsi partir à sa guise à laide dun passage dérobé. Un réseau descaliers et de passages secrets lui permet de se rendre discrètement ou ouvertement au [Grand Palais](../../Locations/Grand%20Palais.md), dans les terrasses proches, dans la basse-ville ou dans les catacombes.

View file

@ -14,7 +14,7 @@ goals:
likes: []
hates: []
organisations:
- "[La Main](../Factions/La%20Main.md)"
- "[La Main](../../Factions/La%20Main.md)"
status: TODO
---
> [!infobox]+ `= this.file.name`

View file

@ -16,7 +16,7 @@ goals:
likes: []
hates: []
organisations:
- "[La Main](../Factions/La%20Main.md)"
- "[La Main](../../Factions/La%20Main.md)"
status: TODO
---
> [!infobox]+ `= this.file.name`

View file

@ -7,7 +7,7 @@ encoutered: false
race: Gnome
class: Prolétariat
ethnicity: Ouestrien
short-desc: Une ancienne membre de [La Tridentine](../Factions/La%20Tridentine.md), tenancière du bar l'[Hydre Cristalline](../Locations/Hydre%20Cristalline.md). Harcelée et rançonnée par les gardes de la vigence du vieux port, elle a fini par accepter un la mission d'assassinat pour payer ses dettes.
short-desc: Une ancienne membre de [La Tridentine](../../Factions/La%20Tridentine.md), tenancière du bar l'[Hydre Cristalline](../../Locations/Hydre%20Cristalline.md). Harcelée et rançonnée par les gardes de la vigence du vieux port, elle a fini par accepter un la mission d'assassinat pour payer ses dettes.
image: ../Illustrations/Portraits/Derlynn Gravelgut.jpg
goals:
- Protéger sa fille
@ -18,7 +18,7 @@ likes:
- La Bière
hates:
- La Cité Franche
organisations: ["[La Tridentine](../Factions/La%20Tridentine.md)"]
organisations: ["[La Tridentine](../../Factions/La%20Tridentine.md)"]
status: DONE
---
@ -52,7 +52,7 @@ status: DONE
# Histoire
Derlynn est la propriétaire de l'[Hydre Cristalline](../Locations/Hydre%20Cristalline.md). Une gnome au caractère bien trempé. Membre de [La Tridentine](../Factions/La%20Tridentine.md), elle a une fille de 6ans, Blirely "Blirette".
Derlynn est la propriétaire de l'[Hydre Cristalline](../../Locations/Hydre%20Cristalline.md). Une gnome au caractère bien trempé. Membre de [La Tridentine](../../Factions/La%20Tridentine.md), elle a une fille de 6ans, Blirely "Blirette".
Le père de l'enfant est mort sur son lieu de travail, il bossait pour la [[Compagnie Temperenza]]
Depuis la naissance de sa fille, elle s'est retirée des affaires mais a acceptée une dernière mission pour sauver son bar.
@ -62,5 +62,5 @@ Derlynn a des problèmes d'argent. En effet, des Gardes de la vigence épuisent
C'était la goutte d'eau de trop. Elle qui déteste cette ville, elle a décidé de tenter sa chance dans les îles éoliennes. Après avoir hésité longuement, et devant l'insistance des gardes, elle a décidé d'en parler à son ancien réseau de la Tridentine, malgré qu'elle s'était jurée de ne plus y avoir recours.
C'est lors d'une soirée à [La Petite Sirène](../Locations/La%20Petite%20Sirène.md) qu'elle a entendu le discours d'un homme et la somme d'or proposée. C'etait assez pour assurer une nouvelle vie pour elle et sa fille !
C'est lors d'une soirée à [La Petite Sirène](../../Locations/La%20Petite%20Sirène.md) qu'elle a entendu le discours d'un homme et la somme d'or proposée. C'etait assez pour assurer une nouvelle vie pour elle et sa fille !

View file

@ -42,7 +42,7 @@ status: TODO
## Notes
- Les [Nihilistes](../../Factions/Nihilistes.md) de Cyrillan l'appel le Libérateur, et tente #todo
- Les [Nihilistes](../../../Factions/Nihilistes.md) de Cyrillan l'appel le Libérateur, et tente #todo
-
## Histoire

View file

@ -8,17 +8,17 @@ encoutered: false
race: Elenion
class: Pègre
ethnicity: Ellerìnien
short-desc: Un jeune élénion tres ambitieux, à la tête de [Aïpio](../Factions/Aïpio.md)
short-desc: Un jeune élénion tres ambitieux, à la tête de [Aïpio](../../Factions/Aïpio.md)
image: ../Illustrations/Portraits/Erulissen.png
source: Studio Agate, Créatures vol.1
goals:
- Étendre l'influence de [Aïpio](../Factions/Aïpio.md)
- Étendre l'influence de [Aïpio](../../Factions/Aïpio.md)
- Surpasser son père
likes: []
hates: []
status: TODO
organisations:
- "[Aïpio](../Factions/Aïpio.md)"
- "[Aïpio](../../Factions/Aïpio.md)"
---
> [!infobox]+ `= this.file.name`
> `$= "<a class='internal-link' data-href=" + dv.current().image + "><img src='app://local/" + this.app.vault.adapter.basePath + "/" + this.app.vault.config.attachmentFolderPath + "/" + dv.current().image + "'> </img></a>"`
@ -52,6 +52,6 @@ organisations:
- Il a une soeur, [Liréa Arinwe](Liréa%20Arinwe.md)
# Histoire
- Erulissen est un élégant et fort jeune elenion du quartier de lÉtoile. Ce gracieux dandy au sourire doux et au regard froid est lun des membres de plus haut rang d[Aïpio](../Factions/Aïpio.md), la guilde criminelle qui contrôle ce secteur.
- Les elfes natifs de la Cité Franche sont rares   la plupart y viennent lors de leur grand voyage visant à découvrir le monde , mais Erulissen est lun deux. Il connaît le palais depuis son enfance, et ses parents, de la maison Arinwe, désormais retournés en [Ellerìna](../Locations/Ellerìna.md), sont également impliqués dans les activités dAïpio.
- Erulissen est un élégant et fort jeune elenion du quartier de lÉtoile. Ce gracieux dandy au sourire doux et au regard froid est lun des membres de plus haut rang d[Aïpio](../../Factions/Aïpio.md), la guilde criminelle qui contrôle ce secteur.
- Les elfes natifs de la Cité Franche sont rares   la plupart y viennent lors de leur grand voyage visant à découvrir le monde , mais Erulissen est lun deux. Il connaît le palais depuis son enfance, et ses parents, de la maison Arinwe, désormais retournés en [Ellerìna](../../Locations/Ellerìna.md), sont également impliqués dans les activités dAïpio.
- Le jeune homme se distingue par son ambition dévorante, une capacité de travail rare, et un perfectionnisme de la planification qui fait de lui un marionnettiste désireux de conquérir tout léchiquier des ombres de la ville.

View file

@ -6,7 +6,7 @@ encoutered: false
race: Humain
class: Prolétariat
ethnicity: Ouestrien
short-desc: Medecin de la [Léproserie de Sheena](../Locations/Léproserie%20de%20Sheena.md)
short-desc: Medecin de la [Léproserie de Sheena](../../Locations/Léproserie%20de%20Sheena.md)
image: ../Illustrations/Portraits/anton-nazarenko-viper-witcher-alchemist.jpg
source: "[viper-witcher-alchemist](https://www.artstation.com/artwork/mDn5Ay) by Anton Nazarenko"
goals:

View file

@ -48,4 +48,4 @@ status: TODO
## Histoire
- Les Mëlessë sont réputés pour leur beauté, mais celui ci a une nez tordu et la partie gauche de son visage s'affaisse légèrement et les dernières phalanges de son auriculaire et de son annulaire droit manquent.
- C'est un ancien lépreux de la [Léproserie de Sheena](../Locations/Léproserie%20de%20Sheena.md), qu'il a contracté lors de l'épidémie de (date de l'épidémie cachée ??) #todo . Aujourd'hui guéri grâce à son sang elfique, beaucoup de ses camarades n'ont pas eu cette chance. Vêtu d'une redingote noire et de gants blancs, il sert [Althéa](Althéa%20Temperenza.md) dans toutes ses tâches et croit en son combat contre la corruption des institutions.
- C'est un ancien lépreux de la [Léproserie de Sheena](../../Locations/Léproserie%20de%20Sheena.md), qu'il a contracté lors de l'épidémie de (date de l'épidémie cachée ??) #todo . Aujourd'hui guéri grâce à son sang elfique, beaucoup de ses camarades n'ont pas eu cette chance. Vêtu d'une redingote noire et de gants blancs, il sert [Althéa](Althéa%20Temperenza.md) dans toutes ses tâches et croit en son combat contre la corruption des institutions.

View file

@ -14,8 +14,8 @@ goals: ["Obéir à Lysandre"]
likes: ["Son maître, [Lysandre](Lysandre.md)"]
hates: ["La Cité Franche", "Les humains"]
organisations:
- "[La Raqisa](../Factions/La%20Raqisa.md)"
- "[Nihiliens](../Factions/Nihilistes.md)"
- "[La Raqisa](../../Factions/La%20Raqisa.md)"
- "[Nihiliens](../../Factions/Nihilistes.md)"
status: TODO
@ -45,22 +45,22 @@ status: TODO
>LIST WHERE contains(file.outlinks, this.file.link) SORT file.name
>```
- Elle est L'assassin avec le plus de missions a son actif dans [La Raqisa](../Factions/La%20Raqisa.md).
- C'est à elle que [Lysandre](Lysandre.md) confie les flèches au [Venin de Ver Pourpre](../Objets/Venin%20de%20Ver%20Pourpre.md).
- Elle est membre de la secte [Nihilistes](../Factions/Nihilistes.md) qui organisent des attentats (les joueurs pourraient la retrouver lors d'une des réunions )
- Elle est L'assassin avec le plus de missions a son actif dans [La Raqisa](../../Factions/La%20Raqisa.md).
- C'est à elle que [Lysandre](Lysandre.md) confie les flèches au [Venin de Ver Pourpre](../../Objets/Venin%20de%20Ver%20Pourpre.md).
- Elle est membre de la secte [Nihilistes](../../Factions/Nihilistes.md) qui organisent des attentats (les joueurs pourraient la retrouver lors d'une des réunions )
- Et si c'était une Sang-Eveillé de Cyrillanne (Vallée exaltée)? Avec le don Goût du sang.
- L'élixir qui cree les [anostheni](../anostheni.md) est fait à partir de son sang plus des fluides chancreux. C'est un indice pour faire le lien entre Lysandre et Althéa !
- L'élixir qui cree les [anostheni](../../Anostheni.md) est fait à partir de son sang plus des fluides chancreux. C'est un indice pour faire le lien entre Lysandre et Althéa !
- Modification de l'historique : Né du sable et du sang de l'arène illégale des [[Sables Rouges]] de [[Ganelon]].
![](../Illustrations/L'Ombre-enfant.jpg)
![](../../Illustrations/L'Ombre-enfant.jpg)
# Histoire
Une tieffline venant de Ghardat. Une paria, qui a vu ses parents sa mère se faire lapider a mort. Elle a grandi dans un quartier marchand, en écoutant les rumeurs a propos de la Cité Franche, de la terre de libertée et d'égalité des chances qu'elle etait.
Elle a fui le royaume clandestinement, a bord d'un bateau marchand pour pouvoir vivre normalement. Mais la réalité fut rude, et elle s'est retrouvée confronté au même racisme que dans son pays.
Désabusées, elle a perdu goût à la vie elle même, et est devenue cynique et cruelle. Repérée par Lysandre, il l'a prise sous son aile et l'a entraînée. Aujourd'hui, elle a renié son nom, se faisait seulement appelé "Ombre". Elle fait partie du premier cercle de [La Raqisa](../Factions/La%20Raqisa.md) et les membres des cercles inférieur l'appelle "L'Ombre"
Désabusées, elle a perdu goût à la vie elle même, et est devenue cynique et cruelle. Repérée par Lysandre, il l'a prise sous son aile et l'a entraînée. Aujourd'hui, elle a renié son nom, se faisait seulement appelé "Ombre". Elle fait partie du premier cercle de [La Raqisa](../../Factions/La%20Raqisa.md) et les membres des cercles inférieur l'appelle "L'Ombre"
- Elle s'exprime peu et rempli toujours ses missions dans la plus grande discrétion et précision.
- Elle a récemment compris le lien de son maître avec Althéa. Elle pense qu'il entretient une relation privilégiée avec elle et qu'il planifie une prise de pouvoir majeur dans la Cité.

View file

@ -18,7 +18,7 @@ likes: []
hates: []
status: TODO
todo:
- Leur créer une backstory interessante. Peut-etre les utiliser pour justifier les travaux du [Taudis d'Asoif](../Locations/Taudis%20d'Asoif.md)
- Leur créer une backstory interessante. Peut-etre les utiliser pour justifier les travaux du [Taudis d'Asoif](../../Locations/Taudis%20d'Asoif.md)
---
> [!infobox]+ `= this.file.name`
> `$= "<img src='app://local/" + this.app.vault.adapter.basePath + "/" + this.app.vault.config.attachmentFolderPath + "/" + dv.current().image + "'> </img>"`

View file

@ -10,7 +10,7 @@ ethnicity:
short-desc: |-
Lunarion est l'héritier de l'ancienne famille Agnadelle, des nobles d'avant la République
Lunarion est membre de [La Main](../Factions/La%20Main.md) depuis 8 ans et un membre éminent du Conseil des guildes.
Lunarion est membre de [La Main](../../Factions/La%20Main.md) depuis 8 ans et un membre éminent du Conseil des guildes.
image: ../Illustrations/Portraits/lunarion.jpg
goals:
- Tuer [Althéa](Althéa%20Temperenza.md)
@ -20,7 +20,7 @@ likes: []
hates: []
status: TODO
organisations:
- "[La Main](../Factions/La%20Main.md)"
- "[La Main](../../Factions/La%20Main.md)"
---
> [!infobox]+ `= this.file.name`
> `$= "<img src='app://local/" + this.app.vault.adapter.basePath + "/" + this.app.vault.config.attachmentFolderPath + "/" + dv.current().image + "'> </img>"`
@ -49,7 +49,7 @@ organisations:
# Notes
- Lunarion est membre de [La Main](../Factions/La%20Main.md) depuis 8 ans et un membre éminent du conseil des guildes. 
- Lunarion est membre de [La Main](../../Factions/La%20Main.md) depuis 8 ans et un membre éminent du conseil des guildes. 
- Il est l'exemple typique de la corruption institutionnelle qui ronge la cité. Cumul de mandat, sentiment d'impunité, conflits d'intérêts, pot de vins… 
- Son père est mort depuis 6ans, et il dispose désormais de l'héritage familial ainsi que de la responsabilité de chef de famille. 
- La montée en popularité d'[Althéa](Althéa%20Temperenza.md)] lui est insupportable

View file

@ -43,7 +43,7 @@ status: TODO
# Notes
- Avec ses frères, il a combattu et triomphé du Chancre lors de la Guerre de l'Aube. Seul survivant, il vit maintenant en spectateur du monde, en Cyrillane.
- Il est le premier roi de la dynastie Kadméïde. #toreview
- Lui et ses frères sont vraiment anciens, et ont bu dans l'[Ambroisie](../Objets/Ambroisie.md), ce qui les rend immortel (pas invulnérable).
- Lui et ses frères sont vraiment anciens, et ont bu dans l'[Ambroisie](../../Objets/Ambroisie.md), ce qui les rend immortel (pas invulnérable).
# Histoire

View file

@ -7,7 +7,7 @@ encoutered: false
race: Humain
class: Criminel
ethnicity:
short-desc: Lysandre est un assassin et une des tête pensante de [La Raqisa](../Factions/La%20Raqisa.md)
short-desc: Lysandre est un assassin et une des tête pensante de [La Raqisa](../../Factions/La%20Raqisa.md)
image: ../Illustrations/Portraits/Lysandre.png
source: Studio Agate, Créatures vol.1
goals:
@ -16,7 +16,7 @@ goals:
likes:
- Le sang
hates: []
organisations: ["[La Raqisa](../Factions/La%20Raqisa.md)",]
organisations: ["[La Raqisa](../../Factions/La%20Raqisa.md)",]
status: TODO
---
> [!infobox]+ `= this.file.name`
@ -49,7 +49,7 @@ status: TODO
- Linsaisissable et sinistre Lysandre est limage altière de la mort impitoyable. Pour ne pas laisser deviner lintérêt d[Althéa](Althéa%20Temperenza.md) dans les actions de Lysandre, ce dernier accepte régulièrement des contrats qui nont aucun lien avec ses projets, afin de dissimuler dans la masse les actions véritablement importantes quil mène. 
- Est un avatar de [Mille-Visages](Mille-Visages.md)
Aujourdhui, Lysandre a des relations dans la truanderie, et il se tient informé de ce qui se passe dans lombre à la faveur de son statut élevé au sein de la guilde de voleurs de [La Raqisa](../Factions/La%20Raqisa.md). Il a choisi ce groupe pour son ambition, et il laide à renverser léquilibre ancien que [La Tridentine](../Factions/La%20Tridentine.md) maintenait avec les puissants de la [[Cité Franche]].
Aujourdhui, Lysandre a des relations dans la truanderie, et il se tient informé de ce qui se passe dans lombre à la faveur de son statut élevé au sein de la guilde de voleurs de [La Raqisa](../../Factions/La%20Raqisa.md). Il a choisi ce groupe pour son ambition, et il laide à renverser léquilibre ancien que [La Tridentine](../../Factions/La%20Tridentine.md) maintenait avec les puissants de la [[Cité Franche]].
À la discrétion du meneur, il est tout à fait possible quune partie des actions audacieuses et violentes entreprises par les malfrats de [Ghardat](https://www.worldanvil.com/w/eana-lucasdlk/a/ghardat-organization?preview=true) soit inspirée par [Mille-Visages](Mille-Visages.md).

View file

@ -6,17 +6,17 @@ encoutered: false
race: Humain
class: Prolétariat
ethnicity: Ghardat
short-desc: Mahira est une immigré de Ghardat, danseuse dans [L'Arène](../Locations/L'Arène.md) et membre du premier cercle de [La Raqisa](../Factions/La%20Raqisa.md)
short-desc: Mahira est une immigré de Ghardat, danseuse dans [L'Arène](../../Locations/L'Arène.md) et membre du premier cercle de [La Raqisa](../../Factions/La%20Raqisa.md)
image: ../Illustrations/Portraits/Mahira_par_irina-bilanovych-.jpg
source: "[Reya](https://www.artstation.com/artwork/g2W5qG), par [Irina Bilanovych](https://www.artstation.com/bilanovych)"
goals:
- Quitter [La Raqisa](../Factions/La%20Raqisa.md)
- Quitter [La Raqisa](../../Factions/La%20Raqisa.md)
- Devenir Citoyenne
- Sauver les danseuses de [L'Arène](../Locations/L'Arène.md)
- Sauver les danseuses de [L'Arène](../../Locations/L'Arène.md)
likes:
- Les plats épicés
- "[La Tempête](Tamerakh.md)"
organisations: ["[La Raqisa](../Factions/La%20Raqisa.md)","[Nihiliens](../Factions/Nihilistes.md)"]
organisations: ["[La Raqisa](../../Factions/La%20Raqisa.md)","[Nihiliens](../../Factions/Nihilistes.md)"]
status: WIP
---
> [!infobox]+ `= this.file.name`
@ -45,13 +45,13 @@ status: WIP
# Notes
- Elle partage les croyances des [Nihilistes](../Factions/Nihilistes.md) venu de [Cyrillanne](../Locations/Cyrillane.md)
- Elle partage les croyances des [Nihilistes](../../Factions/Nihilistes.md) venu de [Cyrillanne](../../Locations/Cyrillane.md)
-
# Histoire
Mahira est une jeune fille d'immigré de [[Ghardat]], ayant fuit la corruption des Royaumes des Sables pour la paisible Cité Franche. 
Ayant grandi dans les rues de la Cité, elle a noué des contacts avec les organisateurs de combats clandestins et à longtemps servis de recruteuse pour [L'Arène](../Locations/L'Arène.md). Discrète, mais ambitieuse, elle à récemment rejoint les rangs [La Raqisa](../Factions/La%20Raqisa.md) afin d'offrir une meilleure vie a ses parents. Elle se sert des ses contacts dans l'Arène pour danser dans les balcons VIP et écouter les conversations des gros bonnets de la ville.
Ayant grandi dans les rues de la Cité, elle a noué des contacts avec les organisateurs de combats clandestins et à longtemps servis de recruteuse pour [L'Arène](../../Locations/L'Arène.md). Discrète, mais ambitieuse, elle à récemment rejoint les rangs [La Raqisa](../../Factions/La%20Raqisa.md) afin d'offrir une meilleure vie a ses parents. Elle se sert des ses contacts dans l'Arène pour danser dans les balcons VIP et écouter les conversations des gros bonnets de la ville.
Elle reste néanmoins optimiste, et croit en la République. Elle soutien fermement la candidature d'[Althéa](Althéa%20Temperenza.md) et crois en un avenir meilleur.

View file

@ -8,13 +8,13 @@ ethnicity:
short-desc: "La matriarche halfeline de la famille Ceréel, entame sa 13e année (3eme mandat) au [[La Main|Conseil de la ville]] et ne compte pas partir. "
image: ../Illustrations/Portraits/Cereel.jpg
goals:
- Rester au [Conseil de la ville](../Factions/La%20Main.md)
- Rester au [Conseil de la ville](../../Factions/La%20Main.md)
- Proteger ses interets financiers
likes: []
hates:
- Paradoxalement, le vin
organisations:
- "[La Main](../Factions/La%20Main.md)"
- "[La Main](../../Factions/La%20Main.md)"
status: TODO
---
> [!infobox]+ `= this.file.name`
@ -44,8 +44,8 @@ status: TODO
## Notes
- La maison Ceréel est la seule maison halfeline dimportance. Elle tire ses revenus du commerce en lien avec les productions de la [Myetée](../Locations/Myetée.md), notamment de mais aussi par une intense activité de négociateurs, dintermédiaires et dinformateurs pour ne pas dire despions.
- Actuellement, les fermes halfelines fournissent en majorité [Ellerìna](../Locations/Ellerìna.md), malgré la hausse des prix du grains dans la Cité. En effet, les fermes Cyrillanne ont commencé a arrêter de vendre leurs grains. Malvina sait bien que la situation est a son avantage, et veut continuer a fournir les terres elfiques pour faire monter les prix. Elle sait néanmoins que la situation peut vite dégénérer si jamais
- La maison Ceréel est la seule maison halfeline dimportance. Elle tire ses revenus du commerce en lien avec les productions de la [Myetée](../../Locations/Myetée.md), notamment de mais aussi par une intense activité de négociateurs, dintermédiaires et dinformateurs pour ne pas dire despions.
- Actuellement, les fermes halfelines fournissent en majorité [Ellerìna](../../Locations/Ellerìna.md), malgré la hausse des prix du grains dans la Cité. En effet, les fermes Cyrillanne ont commencé a arrêter de vendre leurs grains. Malvina sait bien que la situation est a son avantage, et veut continuer a fournir les terres elfiques pour faire monter les prix. Elle sait néanmoins que la situation peut vite dégénérer si jamais

View file

@ -47,13 +47,13 @@ banner_y: 0.65714
# Notes
- Il réside actuellement au [Temple de Forgeron](../Locations/Temple%20de%20Forgeron.md)
- Il réside actuellement au [Temple de Forgeron](../../Locations/Temple%20de%20Forgeron.md)
-
# Histoire
- Âgé de 202 ans, Verndrimund, héritier dune longue lignée de nains gardiens, a passé lessentiel de son existence à lutter contre [Le Chancre](Dieux/Le%20Chancre.md) sous le regard du [Forgeron](https://www.worldanvil.com/w/eana-lucasdlk/a/forgeron-person) [](https://www.worldanvil.com/world/person/5b5fe2aa-28c1-4bae-9430-2f4850705f7b/edit). Durant toutes ces années, il a béni les guerriers, les a libérés de la corruption qui cherchait à semparer deux et a aidé les dirigeants des cités souterraines à lutter contre des manigances plus sournoises. 
- Officiellement, le haut forgeur est venu à la [Cité Franche](../Locations/Cité%20Franche.md)pour raffermir les liens entre adeptes du Forgeron, quils lhonorent selon le rite franc ou le rite dvaerg. Cest vrai, mais il ne sest porté volontaire pour cette mission qui aurait pu revenir à un autre que parce quil était particulièrement troublé par une vision qui linclinait à craindre une corruption grave et croissante dans la Cité Franche.
- Officiellement, le haut forgeur est venu à la [Cité Franche](../../Locations/Cité%20Franche.md)pour raffermir les liens entre adeptes du Forgeron, quils lhonorent selon le rite franc ou le rite dvaerg. Cest vrai, mais il ne sest porté volontaire pour cette mission qui aurait pu revenir à un autre que parce quil était particulièrement troublé par une vision qui linclinait à craindre une corruption grave et croissante dans la Cité Franche.
#### La Vision
Verndrimund a reçu une vision qu'il interprète comme une divination de Forgeron. En réalité, c'est un appel au secours d'[[Hrysanthéïs]], masqué par le Cauchemar. Par chance, Verndrimund a une résistance hors du commun au Chancre et cela l'a assez inquiété pour mener l'enquête.

View file

@ -19,8 +19,8 @@ likes:
hates:
- Soi-même
organisations:
- "[Aïpio](../Factions/Aïpio.md)"
- "[l'Assemblée](../Factions/Assemblée.md)"
- "[Aïpio](../../Factions/Aïpio.md)"
- "[l'Assemblée](../../Factions/Assemblée.md)"
status: DONE
---
> [!infobox]+ `= this.file.name`
@ -50,7 +50,7 @@ status: DONE
## Notes
- N'a jamais mis les pieds en [Ellerìna](../Locations/Ellerìna.md), et ne l'avouera jamais ! Il fantasme complétement la grandeur de sa race.
- N'a jamais mis les pieds en [Ellerìna](../../Locations/Ellerìna.md), et ne l'avouera jamais ! Il fantasme complétement la grandeur de sa race.
- Est un mëlessë, mais ne supporte pas ce fait. Il sur-compense cet héritage en prônant la cause elfique jusqu'à l'extreme. Il rêve d'avoir un nom, et est secretement amoureux de la soeur d'[Erulissen](Erulissen.md) : [Liréa Arinwe](Liréa%20Arinwe.md) . Il espere qu'apres tout ces services rendus, il pourra lui demander sa main.
- Les autres Elenions, et en particulier [Erulissen](Erulissen.md), ne veulent pas trop attirer l'attention. Aussi, avoir un elfe au sang chaud comme Zefyris est une aubaine, car tout les regards sont porté sur lui.
## Histoire

View file

@ -6,7 +6,7 @@ encoutered: false
race: Nain
class: Politique
ethnicity:
short-desc: Zerka est une des maîtresses de la monnaie de la Steinbank et une membre du [Conseil de la ville](../Factions/La%20Main.md)
short-desc: Zerka est une des maîtresses de la monnaie de la Steinbank et une membre du [Conseil de la ville](../../Factions/La%20Main.md)
image: ../Illustrations/Portraits/zerka.png
source:
goals:
@ -15,7 +15,7 @@ goals:
likes: []
hates: []
organisations:
- "[La Main](../Factions/La%20Main.md)"
- "[La Main](../../Factions/La%20Main.md)"
status: TODO
---
> [!infobox]+ `= this.file.name`

View file

@ -1,160 +0,0 @@
module.exports = {
// object that describes the step and its configuration
description: {
// the name of your step
name: "Replace links",
// short description of what it does
description: "Replaces wikilinks with the linked content",
// array. valid options are "Scene", "Manuscript", "Join". "Join" must be the only member if present.
availableKinds: ["Scene"],
// array of step options, or an empty array if step has no options
options: [
// a boolean option follows as another example
{
id: "removeH1",
name: "Remove h1 of linked content",
description: "If checked, the h1 headers of the linked content will be removed.",
type: "Boolean",
default: true,
},
{
id: "removeFrontmatter",
name: "Remove frontmatter of linked content",
description: "If checked, the frontmatter of the linked content will be removed.",
type: "Boolean",
default: true,
},
],
},
/**
Function that is executed during compilation. It may be `async`.
Errors encountered during execution should be thrown and will
be handled by Longform.
@param input If the step is of kind Scene or Join (see context),
this will be *an array* containing elements of type:
{
path: string; // path to scene
name: string; // file name of scene
contents: string; // text contents of scene
metadata: CachedMetadata; // Obsidian metadata of scene
indentationLevel?: number; // The indent level (starting at zero) of the scene
}
where each element corresponds to a scene (and thus the step has access to all scenes at once in `input`).
If the step is of kind Manuscript (see context), this will be of type:
{
// text contents of manuscript
contents: string;
}
@param context The execution context of the step, including the step
kind and option values:
{
kind: string; // "Scene" | "Join" | "Manuscript"
optionValues: { [id: string]: unknown } // Map of option IDs to values
projectPath: string; // path in vault to compiling project
draft: Draft; // The Draft type describing your project
app: App; // Obsidian app
}
@note For an example of using `context` to determine the shape of `input`, see
https://github.com/kevboh/longform/blob/main/src/compile/steps/strip-frontmatter.ts
@returns If of kind "Scene" or "Manuscript", the same shape as `input`
with the appropriate changes made to `contents`. If of kind "Join",
the same shape as a "Manuscript" step input.
*/
compile
};
async function compile(input, context) {
const files = await getAllFiles(context.app);
console.info("All files: ", files);
return Promise.all(
input.map(async scene => ({
...scene,
contents: await replaceLinksWithContent(scene.contents, scene.metadata, context, files, 0)
}))
)
}
function getAllFiles(app) {
return app.vault.getFiles();
}
async function replaceLinksWithContent(content, metadata, context, files, deep) {
if (deep > 1) {
return content;
}
console.info("Current file: ", metadata, "deep: ", deep);
const allLinks = [...(metadata.links || []), ...(metadata.embeds || [])];
return allLinks.reduce(async (accProm, item) => {
const acc = await accProm;
const [linkedFile, linkedContent] = await getLinkedContent(item.link, context.app, files);
if (!linkedContent) {
return acc;
}
const linkedMetadata = getMetadata(linkedFile, context.app);
let contentArray = Array.from(linkedContent);
contentArray = removeFrontmatter(contentArray, linkedMetadata.frontmatter, context.optionValues);
contentArray = removeHeaders(contentArray, linkedMetadata.headings, context.optionValues)
const cleanedContent = contentArray.filter(val => val !== null)
.join("")
.trim();
const processedLinkedContent = await replaceLinksWithContent(cleanedContent, linkedMetadata, context, files, deep + 1)
return acc.replaceAll(item.original, processedLinkedContent)
}, Promise.resolve(content));
}
async function getLinkedContent(linkText, app, files) {
const file = files.find(file => file.basename === linkText);
if(!file){
const file = files.find(file => file.path === linkText);
}
if(!file){
const fileext = getFilenameWithoutExtension(linkText);
const file = files.find(file => file.basename === fileext);
}
return file
? [file, await app.vault.read(file)]
: [];
}
function getMetadata(file, app) {
return app.metadataCache.getFileCache(file)
}
function removeHeaders(content, headers, optionValues) {
if (optionValues.removeH1 && headers) {
return headers
.filter(header => header.level === 1)
.reduce((acc, header) => {
return removeFromTextArray(acc, header.position)
}, content)
} else {
return content;
}
}
function removeFrontmatter(content, frontmatter, optionValues) {
if (frontmatter && optionValues.removeFrontmatter) {
return removeFromTextArray(content, frontmatter.position);
} else {
return content;
}
}
function removeFromTextArray(text, position) {
return text.map((val, i) => i >= position.start.offset && i < position.end.offset ? null : val)
}
function getFilenameWithoutExtension(filePath) {
const fileName = filePath.split('/').pop();
return fileName.split('.').slice(0, -1).join('.');
}

View file

@ -1,52 +1,52 @@
{
"nodes":[
{"type":"group","id":"bac06a276a73330f","x":-2014,"y":-4506,"width":2050,"height":3101,"label":"Enquete"},
{"type":"text","text":"Contrat entre Lunarion et Derlynn ","id":"9106654884bc782d","x":-1961,"y":-3566,"width":276,"height":99},
{"type":"text","text":"##### Enquête sur Althéa\nDocuments révelant des incohérences sur son discours","id":"ecee4819946ec510","x":-869,"y":-2686,"width":250,"height":176,"color":"1"},
{"type":"text","text":"[La Petite Sirène](Locations/La%20Petite%20Sirène.md)","id":"487245560d15e160","x":-1877,"y":-3802,"width":250,"height":60},
{"type":"file","file":"PNJ/Mahira.md","id":"94cda37acc139dab","x":-1548,"y":-3342,"width":321,"height":400},
{"type":"file","file":"Personnages/PNJ/Mahira.md","id":"94cda37acc139dab","x":-1548,"y":-3342,"width":321,"height":400},
{"type":"text","text":"Combat dans l'arène","id":"0d6c8bc7f3c68952","x":-1513,"y":-3482,"width":250,"height":60,"color":"4"},
{"type":"text","text":"Une place est vacante au conseil, Althéa la prend","id":"952d2e95eec491ec","x":-1080,"y":-1553,"width":250,"height":102},
{"type":"text","text":"#### [L'Arène](Locations/L'Arène.md)","id":"77d5dba97c4653f9","x":-1460,"y":-3593,"width":144,"height":54},
{"type":"file","file":"Illustrations/Portraits/Althéa.png","id":"9885ce124ab774ce","x":-1000,"y":-4961,"width":0,"height":0},
{"type":"text","text":"Assassinat raté","id":"a3904ad29417095a","x":-1746,"y":-4961,"width":250,"height":60,"color":"4"},
{"type":"text","text":"# Manoir d'Althéa","id":"9d7ed1c98dcd94a9","x":-1388,"y":-5303,"width":362,"height":70},
{"type":"file","file":"Illustrations/Portraits/Derlynn Gravelgut.jpg","id":"2e6bcfd8b207dd70","x":-1729,"y":-4842,"width":0,"height":0},
{"type":"text","text":"TODO: Information utile (récompense)","id":"383582c81605638c","x":-2173,"y":-4693,"width":199,"height":76},
{"type":"text","text":"Les conversations entre Lunarion et Lysandre","id":"621599fb2cd2b81c","x":-1522,"y":-2823,"width":250,"height":74},
{"type":"text","text":"Chateau de Lunarion","id":"fd26dba1e8860ecc","x":-1522,"y":-2628,"width":250,"height":60},
{"type":"text","text":"[La Petite Sirène](Locations/La%20Petite%20Sirène.md)","id":"487245560d15e160","x":-1877,"y":-3802,"width":250,"height":60},
{"type":"text","text":"#### [L'Arène](Locations/L'Arène.md)","id":"77d5dba97c4653f9","x":-1460,"y":-3593,"width":144,"height":54},
{"type":"text","text":"Gardes","id":"cce4fba89332d69c","x":-1877,"y":-3970,"width":250,"height":60},
{"type":"text","text":"Boite d'Allumette de l'[Hydre Cristalline](Locations/Hydre%20Cristalline.md)","id":"1580c9a1abcdfede","x":-1746,"y":-4309,"width":250,"height":83},
{"type":"text","text":"[Hydre Cristalline](Locations/Hydre%20Cristalline.md)","id":"20903fc794e64d28","x":-1871,"y":-4114,"width":250,"height":60},
{"type":"text","text":"Quartier du Vieux Port","id":"74c6540e049f3610","x":-1460,"y":-4309,"width":250,"height":50},
{"type":"text","text":"La Lettre de Mahira","id":"5069aabd4a13c1dc","x":-1125,"y":-4298,"width":250,"height":60},
{"type":"file","file":"Personnages/PNJ/Les Jumeaux.md","id":"944c34000ed08be6","x":-1139,"y":-4054,"width":279,"height":371},
{"type":"file","file":"Illustrations/Portraits/lunarion.jpg","id":"1b68c9c93d34e74c","x":-1243,"y":-2290,"width":0,"height":0},
{"type":"text","text":"Une place est vacante au conseil, Althéa la prend","id":"952d2e95eec491ec","x":-1080,"y":-1553,"width":250,"height":102},
{"type":"text","text":"Quartier des épices","id":"2c552327b8764ac5","x":-635,"y":-3898,"width":250,"height":60},
{"type":"file","file":"PNJ/Les Jumeaux.md","id":"944c34000ed08be6","x":-1139,"y":-4054,"width":279,"height":371},
{"type":"text","text":"Lunarion s'enfuit avec la complicité des joueurs, en échange d'informations cachées sur Althéa","id":"168d50a00f8e671d","x":-1082,"y":-1778,"width":250,"height":165},
{"type":"text","text":"Lunarion est capturé et traduit en justice","id":"49c40b60ee3dc205","x":-1522,"y":-1778,"width":342,"height":83},
{"type":"text","text":"#### Althéa est élue au [Conseil de la ville](Factions/La%20Main.md)","id":"4feee060245e3a8d","x":-1274,"y":-1272,"width":237,"height":118},
{"type":"text","text":"Elle envoie les joueurs en Cyrillane","id":"89d325540742cf98","x":-1283,"y":-1099,"width":250,"height":93},
{"type":"text","text":"Les conversations entre Lunarion et Lysandre","id":"621599fb2cd2b81c","x":-1522,"y":-2823,"width":250,"height":74},
{"type":"text","text":"#### Althéa devient Absolue\n","id":"80e21f0b4ae0985e","x":-866,"y":-1252,"width":250,"height":78},
{"type":"text","text":"Elle proclame le fichage des mages et unifie la garde vigente.","id":"39b5e4b46b31622f","x":-866,"y":-1069,"width":250,"height":125},
{"type":"text","text":"#### Sauvetage de [Hrysanthéïs](PNJ/Hrysanthéïs.md)","id":"3822cb7518f31007","x":-333,"y":-1222,"width":369,"height":96},
{"type":"text","text":"### Les Prêtresses des Soeurs\nCertaines prêtresses des Soeurs préparent une expédition pour se rendre à [Kratéïra](Locations/Kratéïra.md)","id":"d4f6287077a14ec2","x":-417,"y":-480,"width":320,"height":243,"color":"4"},
{"type":"text","text":"","id":"af2cbe8025d8714f","x":260,"y":-1898,"width":250,"height":60},
{"type":"text","text":"#### Sauvetage de [Hrysanthéïs](PNJ/Hrysanthéïs.md)","id":"3822cb7518f31007","x":-333,"y":-1222,"width":369,"height":96},
{"type":"text","text":"# Aider les réfugié\nLes joueurs doivent se rendre a Vivépine pour aider les réfugié et la communauté locale a calmer les troubles","id":"6bffee0c04d42118","x":173,"y":-310,"width":337,"height":310},
{"type":"text","text":"Fleche empoisonnée","id":"125f5c73a54806d9","x":-3171,"y":-4537,"width":250,"height":60},
{"type":"text","text":"#### [Venin de Ver Pourpre](Objets/Venin%20de%20Ver%20Pourpre.md)","id":"cb7686443486f000","x":-3171,"y":-4273,"width":250,"height":94},
{"type":"text","text":"Etude du venin","id":"9f0116da3c0101c5","x":-3169,"y":-4379,"width":250,"height":60},
{"type":"file","file":"Illustrations/Portraits/Erulissen.png","id":"b8c84d482914db2d","x":-3451,"y":-3887,"width":null,"height":null,"color":"2"},
{"type":"text","text":"### [Aïpio](Factions/Aïpio.md)","id":"f689e7da734b41d9","x":-3419,"y":-4022,"width":250,"height":60},
{"type":"text","text":"Dague empoisonnée","id":"084f3a2b66ca1b4b","x":-3561,"y":-4682,"width":250,"height":60},
{"type":"text","text":"### [Le Cercle de sel](Factions/Le%20Cercle%20de%20sel.md)","id":"5e350a7c7d9c461d","x":-3059,"y":-4022,"width":250,"height":60},
{"type":"text","text":"Chateau de Lunarion","id":"fd26dba1e8860ecc","x":-1522,"y":-2628,"width":250,"height":60},
{"type":"text","text":"Accroches","id":"3aedf2b288b99311","x":1158,"y":-627,"width":176,"height":60,"color":"4"},
{"type":"text","text":"","id":"7f4eff1c273961be","x":938,"y":-237,"width":250,"height":60},
{"type":"text","text":"##### Quelques rapports sur les lépreux de Sheena","id":"d9979ad4882a0edd","x":-869,"y":-2452,"width":250,"height":119,"color":"1"},
{"type":"text","text":"#### CLIMAX \nAffrontement entre les joueurs et Mille-Visages, dans une Cité envahie par les ravageurs.","id":"cd209aa92b601e18","x":52,"y":-1052,"width":298,"height":208},
{"type":"text","text":"### Althéa\nAlthéa demande aux joueurs de jouer les ambassadeurs pour trouver une solution aux problèmes d'importation des grains, d'immigration et de commerce. \n\nElle ne fait pas appel a des ambassadeurs, car le but secret de la mission est surtout d'espionner ce qui se passe dans le pays, afin de savoir si la Cyrillanne prépare une guerre ou non.\n\n","id":"973e6ae9e09f0fe5","x":-417,"y":-207,"width":320,"height":466,"color":"4"},
{"type":"file","file":"Illustrations/Portraits/Lysandre.png","id":"26583f64e922f598","x":-1922,"y":-2208,"width":null,"height":null},
{"type":"text","text":"##### Les lettres entre Lunarion et \"La Danseuse\"","id":"19ca4279126cddad","x":-1522,"y":-2510,"width":250,"height":116,"color":"1"},
{"type":"file","file":"Illustrations/Portraits/lunarion.jpg","id":"1b68c9c93d34e74c","x":-1243,"y":-2290,"width":null,"height":null},
{"type":"text","text":"","id":"af2cbe8025d8714f","x":260,"y":-1898,"width":250,"height":60}
{"type":"text","text":"Contrat entre Lunarion et Derlynn ","id":"9106654884bc782d","x":-1961,"y":-3566,"width":276,"height":99},
{"type":"file","file":"Illustrations/Portraits/Erulissen.png","id":"b8c84d482914db2d","x":-3451,"y":-3887,"width":0,"height":0,"color":"2"},
{"type":"text","text":"Dague empoisonnée","id":"084f3a2b66ca1b4b","x":-3561,"y":-4682,"width":250,"height":60},
{"type":"text","text":"### [Le Cercle de sel](Factions/Le%20Cercle%20de%20sel.md)","id":"5e350a7c7d9c461d","x":-3059,"y":-4022,"width":250,"height":60},
{"type":"text","text":"##### Quelques rapports sur les lépreux de Sheena","id":"d9979ad4882a0edd","x":-869,"y":-2452,"width":250,"height":119,"color":"1"},
{"type":"file","file":"Illustrations/Portraits/Lysandre.png","id":"26583f64e922f598","x":-1922,"y":-2208,"width":0,"height":0},
{"type":"text","text":"##### Les lettres entre Lunarion et \"La Danseuse\"","id":"19ca4279126cddad","x":-1522,"y":-2510,"width":250,"height":116,"color":"1"}
],
"edges":[
{"id":"a373fdb3488f5002","fromNode":"6bffee0c04d42118","fromSide":"right","toNode":"7f4eff1c273961be","toSide":"left","label":"Permet De"},

1
Sans titre 1.canvas Normal file
View file

@ -0,0 +1 @@
{}

1
Sans titre.canvas Normal file
View file

@ -0,0 +1 @@
{}

View file

@ -33,8 +33,8 @@ Une fois en Cyrillane, les aventuriers découvrent que l'Empire Kadméïde, qui
Une fois revenu dans la Cité Franche, ils seront contacté par une voix mystérieuse : un dragon est enfermé sous la ville. Ils devront s'engouffrer dans l'Inframonde afin de libérer le dragon qui révèlera le rebondissement final : Althéa n'est autre que Mille-Visages, un serviteur du Chancre qui manigance pour prendre le contrôle de la région. Ils devront trouver un moyen de vaincre cet ennemi redoutable ou sinon, le continent entier pourrait sombrer.
## Structure de l'aventure
![Structure](Structure.md)
- [ ] < Structure > #todo
## Niveaux de personnages
@ -54,13 +54,13 @@ Quand les PJ se rendent à l'invitation, lisez ou paraphez ceci :
> _Vous toquez a la porte d'une superbe demeure à colombages, qui ne dénote avec les autres maisons du quartier que part une petite tour qui s'élance sur la façade nord.
> Un melessë vous accueille, dans une tunique en cuir noire et brodée d'épi dorées, le visage fermé. Vous décelez aux oreilles une ascendance elfique, mais contrairement a la norme, celui ci arbore des traits déformé, cabossé, voir fondu par endroits. Avec ses gants blancs, il vous fait signe d'entrer et vous escorte jusqu'à un petit salon situé sur votre gauche._
[Gustavio](../PNJ/Gustavio.md) est un demi-elfe, guéri d'une lèpre sévère qui a rencontré Althéa dans la [Léproserie de Sheena](../Locations/Léproserie%20de%20Sheena.md) et qui la suit depuis ce jour la. Un test de Sagesse (Perception) DD 15 permet de voir que certaines de ses phalanges manque et une test de Sagesse (Médecine) DD 15 que les marques de son visage sont des reliquat de son ancienne maladie.
[Gustavio](../Personnages/PNJ/Gustavio.md) est un demi-elfe, guéri d'une lèpre sévère qui a rencontré Althéa dans la [Léproserie de Sheena](../Locations/Léproserie%20de%20Sheena.md) et qui la suit depuis ce jour la. Un test de Sagesse (Perception) DD 15 permet de voir que certaines de ses phalanges manque et une test de Sagesse (Médecine) DD 15 que les marques de son visage sont des reliquat de son ancienne maladie.
#### P3. Petit salon
> _Vous entrez dans la pièce, et apercevez une femme aux traits tiré, aux cheveux noirs de jais et a la robe noire, brodée elle aussi d'épis dorées. Quand elle vous aperçois, elle se lève de son fauteuil en cuir vermeil et lâche sa tasse de thé pour vous saluer._
[Althéa](../PNJ/Althéa%20Temperenza.md) accueille les aventuriers avec beaucoup de dignité dans le petit salon.
[Althéa](../Personnages/PNJ/Althéa%20Temperenza.md) accueille les aventuriers avec beaucoup de dignité dans le petit salon.
Elle parle volontiers de son passé et retardera au maximum le moment d'entrer dans le vif du sujet, éludant le sujet en posant des questions sur le passé des personnages, proposant des collations et rebondissant sur chaque anecdotes croustillantes. Le but ici de Milles visages et d'en apprendre le plus possible sur ces héros, afin de pouvoir s'en débarrasser si les choses tournent mal.
@ -68,7 +68,7 @@ Si plus personne ne trouve de sujet de conversation ou que les personnages sont
Elle voudrait donc engager les personnages afin de la protéger jusqu'au vote. En récompense, en plus de les loger gratuitement dans son manoir, elle offrira a chacun d'entre eux quelque chose qu'il désire et qui soit dans ses moyens ou ceux de la République. Si les joueurs n'ont pas d'idées, elle peut proposer a tous de devenir citoyen à part entière de la Cité, et de pouvoir être tiré au sort a l'Assemblée et d'acheter des biens dans la Cité.
Suite a ces agréables conversations, les PJ seront invités à rejoindre la salle a manger où un dîner les attend. [Gustavio](../PNJ/Gustavio.md)) les rejoindra pour manger. Si ces manières ressemblait a un domestique au premier abord, ici il est mis sur un pied d'égalité et mange a la droite de la députée.
Suite a ces agréables conversations, les PJ seront invités à rejoindre la salle a manger où un dîner les attend. [Gustavio](../Personnages/PNJ/Gustavio.md)) les rejoindra pour manger. Si ces manières ressemblait a un domestique au premier abord, ici il est mis sur un pied d'égalité et mange a la droite de la députée.
Il sera plus loquace et répondra volontiers aux questions des PJ pendant le repas, sans jamais sourire néanmoins.
Althéa, après le repas, montrera aux PJ leurs chambres, puis répondra à leurs questions. Une fois la conversation terminée, elle ira dans ses quartiers, laissant les aventuriers entre les mains de Gustavio.
@ -89,7 +89,7 @@ A l'assemblée, les débats sont monopolisé par 5 groupes majoritaires. Aucun n
| ------ |:-- |
| Royalistes | Cherchent la couronne des Drae pour remettre l'héritier légitime, prétextant que la démocratie a échoué |
| Francs | Ils prennent un virage autoritaire depuis la crise en [Cyrillane](../Locations/Cyrillane.md) et veulent renvoyer les réfugiés chez eux. Ils un bon soutien de la population vu le passé guerrier de la Cyrillane. |
| Citoyens | Mené par [Althéa](../PNJ/Althéa%20Temperenza.md), ils proposent un grand plan de réhabilitation et de logement du [Taudis d'Asoif](../Locations/Taudis%20d'Asoif.md). Le financement se ferait en réduisant le budget de lutte contre le Chancre ou de défense militaire. |
| Citoyens | Mené par [Althéa](../Personnages/PNJ/Althéa%20Temperenza.md), ils proposent un grand plan de réhabilitation et de logement du [Taudis d'Asoif](../Locations/Taudis%20d'Asoif.md). Le financement se ferait en réduisant le budget de lutte contre le Chancre ou de défense militaire. |
| Démocrates | Ils sont surtout des leaders de guildes marchandes qui cherchent avant tout a faire fructifier leurs business, et ne s'encombrent pas de convictions morales. |
| Élénions | restent entre eux et votent un peu trop de mesures qui favorisent [Ellerìna](../Locations/Ellerìna.md) |

View file

@ -1,4 +1,4 @@
L'arme légendaire en question s'appelle la Flamme Eternelle. Selon la légende, elle a été forgée par les dragons eux-mêmes, à l'aide de leur propre feu, pour être utilisée contre le Chancre lors de sa première invasion. Elle a été confiée à un groupe de héros qui ont réussi à vaincre le Chancre : Les frères Lykos, Iolaos, Nauplios, Ankaios et Kreios. Ils sont tous mort lors de la bataille, sauf [Lykos](../../PNJ/Lykos.md).
L'arme légendaire en question s'appelle la Flamme Eternelle. Selon la légende, elle a été forgée par les dragons eux-mêmes, à l'aide de leur propre feu, pour être utilisée contre le Chancre lors de sa première invasion. Elle a été confiée à un groupe de héros qui ont réussi à vaincre le Chancre : Les frères Lykos, Iolaos, Nauplios, Ankaios et Kreios. Ils sont tous mort lors de la bataille, sauf [Lykos](../../Personnages/PNJ/Lykos.md).
Malheureusement, l'arme a été brisée lors d'une bataille contre des ravageurs, il y a de cela 5000 ans. Depuis, elle n'a plus été utilisée, et son emplacement est tombé dans l'oubli. C'est l'arme que les joueurs doivent retrouver.
@ -6,7 +6,7 @@ Au cours de leur quête, ils découvriront que l'arme est liée au Chancre de ma
En effet, la réparation de l'épée nécessitera une [Gemme déternite](../../Objets/Gemme%20déternite.md), aussi appelé "fragment dÉternité", un fragment de la lune Éternité. Ces gemmes sont extrêmement rares et les joueurs devront avoir acquis des contacts bien placé ou avoir amassé un joli pactole avoir de pouvoir mettre la main dessus.
Une fois qu'ils ont réussi à trouver et à réparer l'arme, ils découvriront qu'elle a un pouvoir particulier : elle est capable de vaincre Mille-Visages une fois pour toutes, sans tuer [Hrysanthéïs](../../PNJ/Hrysanthéïs.md). Cependant, ils devront être prêts à affronter des dangers inimaginables et à faire des sacrifices pour arriver jusqu'à lui et utiliser l'arme contre lui.
Une fois qu'ils ont réussi à trouver et à réparer l'arme, ils découvriront qu'elle a un pouvoir particulier : elle est capable de vaincre Mille-Visages une fois pour toutes, sans tuer [Hrysanthéïs](../../Personnages/PNJ/Hrysanthéïs.md). Cependant, ils devront être prêts à affronter des dangers inimaginables et à faire des sacrifices pour arriver jusqu'à lui et utiliser l'arme contre lui.

View file

@ -6,7 +6,7 @@ previous-quest:
status: TODO
---
---
Pour accéder au coin VIP de [L'Arène](../../Locations/L'Arène.md), les joueurs peuvent envisager de gagner une place en participant aux combats clandestins. Pour la finale, la championne [[Ustaolë]] affrontera l'adversaire qui sortira vainqueurs des arènes. S'ils gagnent, le groupe gagnera des accès aux balcons VIP ou travaille [Mahira](../../PNJ/Mahira.md)
Pour accéder au coin VIP de [L'Arène](../../Locations/L'Arène.md), les joueurs peuvent envisager de gagner une place en participant aux combats clandestins. Pour la finale, la championne [[Ustaolë]] affrontera l'adversaire qui sortira vainqueurs des arènes. S'ils gagnent, le groupe gagnera des accès aux balcons VIP ou travaille [Mahira](../../Personnages/PNJ/Mahira.md)
## Résumé

View file

@ -7,7 +7,7 @@ previous-quest: "[[Combat d'Arene]]"
---
# Résumé
[Mahira](../../PNJ/Mahira.md) a écouté une conversation entre Lysandre et Lunarion a propos de [[L'Assassinat d'Althéa]]. Mais ces informations ne seront pas gratuites, car elle prendrait un gros risque.
[Mahira](../../Personnages/PNJ/Mahira.md) a écouté une conversation entre Lysandre et Lunarion a propos de [[L'Assassinat d'Althéa]]. Mais ces informations ne seront pas gratuites, car elle prendrait un gros risque.
# Description

View file

@ -5,7 +5,7 @@ action: false
complete: false
sceneType: Rencontre
scene_index: 1
short_desc: "[Althéa](../../PNJ/Althéa%20Temperenza.md) peut renseigner les personnages sur ses ennemis potentiels."
short_desc: "[Althéa](../../Personnages/PNJ/Althéa%20Temperenza.md) peut renseigner les personnages sur ses ennemis potentiels."
storyCircleStage: Retour
status: DONE
---
@ -14,7 +14,7 @@ Apres l'assassinat raté de Derlynn, les joueurs auront surement beaucoup de que
Elle fera la listes de groupuscules politiques opposé au sien :
![[Groupuscules et conflits politiques à l'Assemblée#Conflits politiques]]
Si les joueurs insistent, 3 noms ressortiront :
- [Lunarion Agnadelle](../../PNJ/Lunarion%20Agnadelle.md), bien qu'amis, c'est son concurrent commercial direct.
- [Verndrimund](../../PNJ/Verndrimund.md), le haut-forgeur. Pour une raison qu'elle ne connait pas, elle sait qu'il ne l'apprécie pas. Voila déjà un mois qu'il est arrivé en ville mais il fait tout l'éviter, mais de la à payer un assassin...
- [Zefyris](../../PNJ/Zefyris.md) et son groupe politique, qui considère comme une quasi-insulte qu'aucun Elenion ne soit au conseil de la ville. Récemment, elle a remarqué que durant les séances a l'assemblée il n'est pas rare qu'ils la fixe du regard.
- [Lunarion Agnadelle](../../Personnages/PNJ/Lunarion%20Agnadelle.md), bien qu'amis, c'est son concurrent commercial direct.
- [Verndrimund](../../Personnages/PNJ/Verndrimund.md), le haut-forgeur. Pour une raison qu'elle ne connait pas, elle sait qu'il ne l'apprécie pas. Voila déjà un mois qu'il est arrivé en ville mais il fait tout l'éviter, mais de la à payer un assassin...
- [Zefyris](../../Personnages/PNJ/Zefyris.md) et son groupe politique, qui considère comme une quasi-insulte qu'aucun Elenion ne soit au conseil de la ville. Récemment, elle a remarqué que durant les séances a l'assemblée il n'est pas rare qu'ils la fixe du regard.

5
Scénario/Scénario.md Normal file
View file

@ -0,0 +1,5 @@
# Résumé
```folderv
```

View file

@ -27,15 +27,15 @@ LIST WHERE type = "Scénario"
## Squelette
### [Chapitre 1 - Révolution](Aventures/Chapitre%201%20-%20Révolution.md)
Les joueurs sont engagés par [Althéa Temperenza](../PNJ/Althéa%20Temperenza.md), une députée populaire parmi le peuple, fraichement réélue à [LAssemblée](../Factions/Assemblée.md)de la [Cité Franche](../Locations/Cité%20Franche.md). Elle soupçonne quelques bourgeois de fomenter un tentative d'assassinat et engage les joueurs pour la protéger[^1].
Les joueurs sont engagés par [Althéa Temperenza](../Personnages/PNJ/Althéa%20Temperenza.md), une députée populaire parmi le peuple, fraichement réélue à [LAssemblée](../Factions/Assemblée.md)de la [Cité Franche](../Locations/Cité%20Franche.md). Elle soupçonne quelques bourgeois de fomenter un tentative d'assassinat et engage les joueurs pour la protéger[^1].
Les joueurs auront donc plusieurs missions :
- Enquêter sur le commanditaire de l'Assassinat
- Trouver et révéler les actions du/des commanditaires
- Faire élire [Althéa](../PNJ/Althéa%20Temperenza.md) au conseil de [La Main](../Factions/La%20Main.md)
Cette nouvelle pourrait briser l'équilibre précaire de [LAssemblée](../Factions/Assemblée.md) et [Althéa](../PNJ/Althéa%20Temperenza.md) en récolterait les lauriers. La nouvelle de la chute de l'empire Kadméïde en [Cyrillanne](../Locations/Cyrillane.md) se répandra et les réfugiées afflueront dans la capitale de la République. Dans un contexte de crise institutionnelle, Althéa sera propulsée *[Absolue](Factions/L'Assemblée#Les%20pleins%20pouvoirs)* (dans un tonnerre d'applaudissement 😉 ).
- Faire élire [Althéa](../Personnages/PNJ/Althéa%20Temperenza.md) au conseil de [La Main](../Factions/La%20Main.md)
Cette nouvelle pourrait briser l'équilibre précaire de [LAssemblée](../Factions/Assemblée.md) et [Althéa](../Personnages/PNJ/Althéa%20Temperenza.md) en récolterait les lauriers. La nouvelle de la chute de l'empire Kadméïde en [Cyrillanne](../Locations/Cyrillane.md) se répandra et les réfugiées afflueront dans la capitale de la République. Dans un contexte de crise institutionnelle, Althéa sera propulsée *[Absolue](Factions/L'Assemblée#Les%20pleins%20pouvoirs)* (dans un tonnerre d'applaudissement 😉 ).
### [Chapitre 2 - Mensonges](Chapitre%202%20-%20Mensonges.md)
Sous couvert dassurer lharmonie, lAbsolue [Althéa](../PNJ/Althéa%20Temperenza.md) entreprendra de paralyser les forces de la [Cité Franche](../Locations/Cité%20Franche.md) : arrêter lopposition ; placer des incompétents (ou des corrompus) à des postes clefs ; envoyer au loin, dans des missions suicidaires, les aventuriers qui pourraient sauver la ville de ce qui sannonce, et le pire de tout, le fichage des éveillé.
Sous couvert dassurer lharmonie, lAbsolue [Althéa](../Personnages/PNJ/Althéa%20Temperenza.md) entreprendra de paralyser les forces de la [Cité Franche](../Locations/Cité%20Franche.md) : arrêter lopposition ; placer des incompétents (ou des corrompus) à des postes clefs ; envoyer au loin, dans des missions suicidaires, les aventuriers qui pourraient sauver la ville de ce qui sannonce, et le pire de tout, le fichage des éveillé.
Dans le même temps, des nids chancreux pourront se développer dans les sous-sols, idéalement en grand nombre et sans adversité sérieuse pour les éliminer
Que des rebelles sen prennent à Althéa nest pas impossible à ce stade.
@ -43,7 +43,7 @@ Ils peuvent la tuer : elle renaîtra la nuit suivante. Les habitants de la Cité
Les joueurs devront comprendre au fur et à mesure que quelque chose cloche. Les rebelles éveillé opposé au fichages démente les accusations d'attentat, les réfugiés Cyrillan disparaissent mystérieusement, la garde vigente est renforcée, aucun travaux de réhabilitation ne semble avancer et la Cité resplendissante devient un lieu de terreur pour les habitants.
Althéa/Milles visages étant bien occupée, [Hrysanthéïs](../PNJ/Hrysanthéïs.md) pourra enfin se montrer sous sa vraie forme. En songe, il tentera d'appeler a l'aide.
Althéa/Milles visages étant bien occupée, [Hrysanthéïs](../Personnages/PNJ/Hrysanthéïs.md) pourra enfin se montrer sous sa vraie forme. En songe, il tentera d'appeler a l'aide.
Que ce soit en s'alliant aux mages rebelles, en menant une révolte populaire ou une meilleure idée des joueurs, les PJ devraient apprendre la vérité. Althéa renaît, elle n'a rien d'humain, et le chancre va ravager la Cité.
@ -51,8 +51,8 @@ Ils découvriront alors le vrai but du projet de réhabilitation, et devront com
### [[Chapitre 3 - Invasion]]
Les joueurs explorent l'Inframonde a la recherche d'[Hrysanthéïs](../PNJ/Hrysanthéïs.md) . Ils peuvent se mettre à détruire
Pour abattre [Mille-Visages](../PNJ/Mille-Visages.md), il faudrait tuer le jumeau et [Hrysanthéïs](../PNJ/Hrysanthéïs.md) le même jour. Une autre solution consisterait à purifier Hrysanthéïs , mais les méthodes permettant de libérer une créature dune corruption critique sont [très difficiles à mettre en œuvre](../La%20Corruption.md#Guérison).
Les joueurs explorent l'Inframonde a la recherche d'[Hrysanthéïs](../Personnages/PNJ/Hrysanthéïs.md) . Ils peuvent se mettre à détruire
Pour abattre [Mille-Visages](../Personnages/PNJ/Mille-Visages.md), il faudrait tuer le jumeau et [Hrysanthéïs](../Personnages/PNJ/Hrysanthéïs.md) le même jour. Une autre solution consisterait à purifier Hrysanthéïs , mais les méthodes permettant de libérer une créature dune corruption critique sont [très difficiles à mettre en œuvre](../La%20Corruption.md#Guérison).
Le pire serait en définitive de tuer Hrystanthéïs seulement. Ce dernier possédant actuellement 19 points de corruption, le dragon dagate reprendrait vie dans lenveloppe charnelle de son jumeau maléfique en gagnant le dernier point de corruption permanente qui le sépare de la transformation en prince chancreux.
### [[Le Crépuscule]]

View file

@ -1,44 +1 @@
---
tags : ["wip"]
status: WIP
---
# Glossaire
## Noeud
Scène ou lieu, voir personnage si c'est un "informateur" (Dîner avec Althéa, Hydre Cristalline ). Les noeuds peuvent avoir des sous-noeud (comme un PNJ dans un lieu) si les noeuds et sous-noeuds peuvent :
- Etre décorrélé (un pnj peut bouger)
- Avoir chacun des indices pointant différent (voir [Règle des 3 indices](../Notes/Aides%20à%20la%20création.md#Liens))
Les sous-noeuds sont noté noeud/sous-noeuds ci-dessous
## Indices
Éléments permettant de naviguer entre les noeuds ( objets, actions, pnj)
## Aventure/Quête
Ensemble de noeud ayant un noeud de début (Start) et un noeud de fin (End).
## Chapitre
Ensemble de quêtes formant un arc narratif avec un début et une fin. Cependant, certaines quêtes peuvent être commencé dans un chapitre et terminé ou non dans un autre.
Un chapitre se clos sur la fin d'une quête.
# Synthèse
### Chapitre 1
**Thème** : enquête urbaine, intrigues politiques
#### Nœuds
##### Manoir d'Althéa
- Boite d'Allumette de l'Hydre Cristalline ( -> Hydre Cristalline )
- Lettre de Mahira ( -> [L'Arène/Mahira](Structure.md#Mahira)]
- Interrogatoire de Gustavio ( -> Les Jumeaux )
- Interrogatoire de Gustavio ( -> La Léproserie de Sheena )
- Interrogatoire d'Althéa ( -> Verndrimund )
- Interrogatoire d'Althéa ( -> Aïpio/[Zefyris](../PNJ/Zefyris.md) )
##### L'Arène
-
-
-
###### Mahira
- Interrogatoire de Mahira (-> [[Lunarion]])
- Interrogatoire de Mahira (-> Lysandre)
-
##### Léproserie de Sheena
-
-
-
- [ ] < Structure > #todo

Binary file not shown.

View file

@ -1,6 +0,0 @@
[.ShellClassInfo]
IconResource=C:\Users\lpeter\Downloads\Obsidian_Dark.ico,0
[ViewState]
Mode=
Vid=
FolderType=Generic