Шрифт в постах

Стиль оформления

Дополнительно

Размер элементов форума
вверх
вниз

Shadows of Old

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Shadows of Old » Анкетирование » Yarrow Therynvale | human


Yarrow Therynvale | human

Сообщений 1 страница 3 из 3

1

ЯРРОУ ТЕРИНВЕЙЛ | YARROW THERYNVALE
соглядатай на службе Игана Маравина

https://i.pinimg.com/originals/93/e4/6e/93e46e0936a13d0e3afee7f4d6811e00.gif
Emma Appleton

ок 29 | человек | Вальден (Эйдин)

••••••••••••••••••••••••••••••••••••••••••••

Образ персонажа

Что произошло почти двадцать лет назад в долине Терина - маленького притока Темноводной? Ярроу не помнит. Там, где нищие деревни облепили реку, где плодородные земли потонули в болоте, жизнь не стоила ни гроша, а о законе ином, кроме закона силы, никто не слышал. Ярроу было десять, она умела одно - прятаться и убегать. Но тогда от нее потребовали остаться и слушаться, хотя все ее существо кричало, что нужно бежать. Кто-то был там, на кого ее мать смотрела заискивающим взглядом, и кому кричала потом вслед мольбы, пока крик не оборвался. События мешаются, путаются. Может, и не нужно ей вспоминать. С теми людьми покончено, сказал ей господин Маравин, усмехнувшись. А если она захочет вспомнить, на шее есть шрам от ошейника.

Дальше события она не помнит, но знает по рассказам. Их нашли люди Маравинов. Эта банда кошмарила не одно графство, и было правильно перевешать их, чем Иган Маравин уже тогда занимался с большим наслаждением. Им же, спасенным, было некуда деться. Но быстрая мелкая девчонка, прячущая страх за яростью, показалась полезной брату княгини, и ее оставили при дворце - работать на конюшне, жить со слугами, питаться на общей кухне и выполнять мелкие поручения там, где удобнее было послать ребенка, а не взрослого. Цель была ясна ей даже тогда - господин Маравин ищет себе людей, которые будут преданы лично ему. И Ярроу была. Осознавая необходимость в жестокости и жесткости, осознавая отсутствие доброты за решениями и движениями своего повелителя, Ярроу все же считала, что обязана ему жизнью, а кроме того, у нее не было лучшего места, чтобы быть - так близко к тем, кто принимает решения, но на достаточном расстоянии, чтобы убежать.

Или так казалось.

К своим почти-тридцати годам Ярроу подчиняется Игану Маравину много лет, курируя сеть его шпионов в разных уголках Эйдина. Власть княгини здесь все еще непрочна, несмотря на то, сколько лет прошло с гибели прошлой династии, но Ярроу плевать на династии, пока у нее есть кров и хлеб. Люди, попавшие под жестокое наблюдение Игана, а после и в тиски его расправы - не волнуют Ярроу. Или ей так кажется.

Дополнительная информация

Магией не владеет, владеет короткими клинками, в открытую схватку предпочитает не вступать, убивает эффективнее исподтишка. Умеет читать и писать. Обладает некоторыми общими знаниями о ядах и их действии.
Знает множество хороших и не очень людей в Эйдине.
Имеет несколько имен и прозвищ. В среде соглядатаев ее знают под именем Шив.

Планы игру, пожелания по сюжетам и игровые табу

Триггернуться об происходящее в Селлии, поссориться с боссом, сменить взгляды на жизнь, возможно поковыряться в прошлых травмах.
Подробные описания насилия - нет.

Что делать с вашим персонажем в случае ухода с проекта

Считать, что пропала на задании.

Пример поста

— М, — отвечает он. — Не ты.

Он не думает, о чем она говорит, не рефлексирует, правдивы ли ее слова, не оценивает, насколько естественна ее интонация для того, кто попался на месте преступления, которое не совершал. Он сосредоточен на других проблемах, одна из них — внизу, другая перед ним. Кэс окидывает ее взглядом, задерживает на светлых волосах. Да, та еще проблема. Он перехватывает ее запястья одной рукой и убирает кинжал. Обыскивает ее, запихивает пальцы между ее стройной ногой и голенищем сапога и извлекает спрятанный клинок. Отправляет его себе за пояс, рядом со своими ножнами. Потом продаст.

Кэс подталкивает ее к люку вниз. Знал бы, что поймает кого-то — подготовился бы. Он тянется к одному из пыльных ящиков и достает моток веревки. Связывает ее запястья, потом оборачивает вокруг шеи. Не туго: достаточно, чтобы она не смогла быстро вывернуться и сбежать. Конечно, она все еще может это сделать. Чародейка? Уже использовала бы магию.

Будь перед ним кто-то другой, он сломал бы ему пальцы. На всякий случай, чтобы не получить в лицо огненным мячом.

— Не дури и все будет нормально, — негромко говорит он ей, чуть дергая за конец веревки, которая остается поводком в его руке. На самом деле, будет она дурить или нет, это никакого значения для нее не имеет. Если бы не Ирво… если бы с ним был кто-то другой, кто не любит тратить время зря и не испытывает удовольствия от причинения боли другим. Но ей не повезло, и Кэс думает мельком о том, что и ему не повезло, раз сейчас он чувствует толику непривычного сожаления от этой мысли. Айре, к тому же родом из Дал Ри. Кто бы мог подумать.

Но ей об этом знать не надо. Будет лучше, если она будет считать, что ее хорошее поведение что-то изменит.

— Спускайся, – он тянет ее к лестнице, ведущей вниз. – Ты первая, я следом. И не дури.

Он слышит голос Ирво, который перехватывает ее. Кэс спускается следом, поводок в его руке натягивается. Ирво рассматривает ее с голодным блеском в глазах, Кэс внимательно смотрит на ее лицо. Тела никуда не делись, вот они, и она их тоже видит, но ее лицо не нравится ему. Да и какая разница, с каким лицом она смотрит. Он повидал и тех, кто плачет над телами жертв, и тех, кто убивает с сожалением. Высокие моральные принципы.

— Не увлекайся там, — хмуро говорит он, передавая поводок Ирво. Замечает холодный и напряженный взгляд. У Ирво одна страсть, и он ненавидит, когда его за нее попрекают. Но сейчас он слишком рад своей добыче. Что не означает, что он не припомнит ему это после.

— А что? Сестра твоя? — Ирво ухмыляется, разворачивая футляр со своими инструментами.

Кэс смотрит через его плечо на женщину и выходит на кухню. Остывшие лепешки на столе, пучки трав и чеснока под потолком.  Кэс приоткрывает заднюю дверь. Внутренний двор. Маленький огород. Он садится в дверном проеме. Душно, несмотря на свежий ветер. Он сжимает и разжимает ладони.

Отредактировано Yarrow Therynvale (2026-04-19 15:15:23)

+9

2

Вы приняты, добро пожаловать!

Коды для заполнения (следующим сообщением в теме анкеты):
Заполните поля во вкладках "Основа", "Профиль", "Плашка", "Фон" и нажмите на кнопку "Скопировать код" ниже, чтобы скопировать заполненные шаблоны.

[html]
<script>
// --------- FILL BACKGROUNDS ------------

function labelBg(className, nameCategory, src) {
    return `<label class="${className}"><input type="radio" name="${nameCategory}" id="${src}" onchange="updateProfilePreview()"><img src="${src}" loading="lazy"> </label>`;
}

function fillBgs(bgs) {
    document.getElementById('bgContainer').innerHTML = bgs
        .map(bg => labelBg("profileBgLabel", "profileBg", bg)).join('');
}

// --------- FILL STRIPES ------------

function labelStripe(className, nameCategory, src) {
    return `<label class="${className}"><input type="radio" name="${nameCategory}" id="${src}" onchange="updateProfilePreview()"><img src="${src}"> </label>`;
}

function fillStripes(stripes) {
    document.getElementById('stripeContainer').innerHTML = stripes
        .map(stripe => labelStripe("profileStripeLabel", "profileStripe", stripe)).join('');
}

// --------- USER DATA ------------

let userLatinName = '';
let userProfileUrl = '';
let userApplicationFormUrl = '';

window.addEventListener("message", (event) => {
    if (!event.origin.match(/oldshadows\.rusff\.me$/)) return;
    if (event.data.eventName != 'profileFillingResponce') return;
    userLatinName = event.data.userLatinName;
    userProfileUrl = event.data.userProfileUrl;
    userApplicationFormUrl = event.data.userApplicationFormUrl;
    fillStripes(event.data.stripes);
    fillBgs(event.data.backgrounds);
});

window.addEventListener("message", (event) => {
    if (!event.origin.match(/oldshadows\.rusff\.me$/)) return;
    if (event.data.eventName != 'fontChange') return;
    $('.post-content p, .post-content div').css('font-size', event.data.fontSize + 'px');
});

const sendProfileRequest = () => {
    window.parent.postMessage({ eventName: 'profileFillingRequest' }, "*");
};
sendProfileRequest();
const intervalId = setInterval(sendProfileRequest, 1000);
window.addEventListener("message", (event) => {
    if (!event.origin.match(/oldshadows\.rusff\.me$/)) return;
    if (event.data.eventName === 'profileFillingResponce') {
        clearInterval(intervalId);
    }
});

function copyResults() {
    let copyContent = '';
   
    // -- форма внешности --
    const actorName = document.getElementById('actor').value;
    if (actorName) {
        const actorForm = `${actorName} — ${String.fromCharCode(91)}url=${userProfileUrl}${String.fromCharCode(93)}${userLatinName}${String.fromCharCode(91)}/url${String.fromCharCode(93)}`;
        copyContent += `Форма внешности: 
${String.fromCharCode(91)}code${String.fromCharCode(93)}${actorForm}${String.fromCharCode(91)}/code${String.fromCharCode(93)}`;
    }

    // -- форма заполнения профиля --
    const cyrillicName = document.getElementById('cyrillicName').value;
    if (cyrillicName) {
        const profileDescrName = document.getElementById('mainDescr').value;
        let profileForm = `<a href='${userApplicationFormUrl}'>${cyrillicName}</a>, ${profileDescrName}`;
       
    const profileAdd = document.getElementById('addDescr').value;
        const profileAddNotFilled = profileAdd == '' || profileAdd == `любое описание на ваш вкус <a href='ссылка на анкету персонажа'>имя на кириллице</a>`;
        if (document.getElementById('hrAdd').checked) {
            profileForm += '<hr>';
        } else if (!profileAddNotFilled) {
            profileForm += '<br>';
        }
        if (!profileAddNotFilled) {
            profileForm += profileAdd;
        }
       
        copyContent += `\n\nФорма профиля:
${String.fromCharCode(91)}code${String.fromCharCode(93)}${profileForm}${String.fromCharCode(91)}/code${String.fromCharCode(93)}\n\n`;
    }

    // -- форма плашки --
    const stripeForm = Array.from(document.getElementsByName('profileStripe'))
        .filter(element => element.checked)
        .map(element => element.id)
        .join('');

    if (stripeForm) {
        copyContent += `Плашка:
${String.fromCharCode(91)}img${String.fromCharCode(93)}${stripeForm}${String.fromCharCode(91)}/img${String.fromCharCode(93)}\n\n`;
    }

        // -- форма фона --
    const bgForm = Array.from(document.getElementsByName('profileBg'))
        .filter(element => element.checked)
        .map(element => element.id)
        .join('');

    if (bgForm) {
        copyContent += `Фон:
${String.fromCharCode(91)}img${String.fromCharCode(93)}${bgForm}${String.fromCharCode(91)}/img${String.fromCharCode(93)}\n\n`;
    }

    // -- форма списка ролей --
    const listsDescription = document.getElementById('listsDescription').value;
    if (cyrillicName && listsDescription) {
        const listsForm = `${String.fromCharCode(91)}url=${userProfileUrl}${String.fromCharCode(93)}${cyrillicName}${String.fromCharCode(91)}/url${String.fromCharCode(93)} — ${listsDescription}`;
        copyContent += `Список ролей:
${String.fromCharCode(91)}code${String.fromCharCode(93)}${listsForm}${String.fromCharCode(91)}/code${String.fromCharCode(93)}\n\n`;
    }

    window.parent.postMessage({
        eventName: 'profileCopyInfoRequest',
        copyData: copyContent.trim() // Удаляем лишние переносы в конце
    }, "*");
};

document.getElementById('instructionResult').onclick = copyResults;

// --------- post user profile update ------------
function updateProfilePreview() {
    const cyrillicName = document.getElementById('cyrillicName').value ?? userLatinName;
    const profileDescrName = document.getElementById('mainDescr').value;
    let profileForm = `<a href='${userApplicationFormUrl}'>${cyrillicName}</a>, ${profileDescrName}`;
   
    const profileAdd = document.getElementById('addDescr').value;
        const profileAddNotFilled = profileAdd == '' || profileAdd == `любое описание на ваш вкус <a href='ссылка на анкету персонажа'>имя на кириллице</a>`;
        if (document.getElementById('hrAdd').checked) {
            profileForm += '<hr>';
        } else if (!profileAddNotFilled) {
            profileForm += '<br>';
        }
        if (!profileAddNotFilled) {
            profileForm += profileAdd;
        }

    const stripeForm = Array.from(document.getElementsByName('profileStripe'))
        .filter(element => element.checked)
        .map(element => element.id)
        .join('');

    const bgForm = Array.from(document.getElementsByName('profileBg'))
        .filter(element => element.checked)
        .map(element => element.id)
        .join('');

    window.parent.postMessage({
        eventName: 'profileDemo',
        profileDescr: profileForm,
        stripe: stripeForm,
        background: bgForm
    }, "*");
}

updateProfilePreview();

window.addEventListener("message", (event) => {
    if (!event.origin.match(/oldshadows\.rusff\.me$/)) return;
    if (event.data.eventName != 'fontChange') return;
    $('.post-content p, .post-content div').css('font-size', event.data.fontSize + 'px');
});

window.addEventListener("message", (event) => {
    if (!event.origin.match(/oldshadows\.rusff\.me$/)) return;
    if (event.data.eventName != 'styleChange') return;
    const style = event.data.style === 'system'
        ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
        : event.data.style;
    $("body").attr("class", style);
});

window.parent.postMessage({ eventName: 'askStyle' }, "*");

</script>

<div class="fillingForm">
<label class="fillingCategoryRadio"><input type="radio" id="main" name="fillingCategoryRadio" checked /> <span>Основа</span></label>
<label class="fillingCategoryRadio"><input type="radio" id="profileF" name="fillingCategoryRadio" /> <span>Профиль</span></label>
<label class="fillingCategoryRadio"><input type="radio" id="stripesF" name="fillingCategoryRadio" /> <span>Плашка</span></label>
<label class="fillingCategoryRadio"><input type="radio" id="bgsF" name="fillingCategoryRadio" /> <span>Фон</span></label>

<div class="instructionBlock mainInstruction">
<h2 class="instructionHeading">Основа</h2>
<label for="cyrillicName" class="labelDescr">Имя (кирилица):</label>
<input type="text" id="cyrillicName" name="cyrillicName" placeholder="кириллица" oninput="updateProfilePreview()">

<label for="actor" class="labelDescr">Внешность (латиница):</label>
<input type="text" id="actor" name="actor" placeholder="если не нужно, оставьте поле пустым">

<label for="listsDescription" class="labelDescr">Описание для списка ролей:</label>
<input type="text" id="listsDescription" name="listsDescription" placeholder="род деятельности, занятость">
</div>

<div class="instructionBlock profileInstruction">
<h2 class="instructionHeading">Описание в профиль</h2>
<label for="mainDescr" class="labelDescr">Описание в профиль:</label>
<input type="text" id="mainDescr" name="mainDescr" value="возраст, раса, род деятельности" oninput="updateProfilePreview()">

<label for="hrAdd" class="hrAdd">
<input type="checkbox" id="hrAdd" name="hrAdd" onchange="updateProfilePreview()" />
<span>Добавить полосу между секциями</span>
</label>

<label for="addDescr" class="labelDescr">При желании можете добавить в профиль пару, красивую цитату, важного родственника, врага и тому подобное через это поле. Если не нужно, оставьте его пустым или не меняйте:</label>
<textarea id="addDescr" oninput="updateProfilePreview()" name="addDescr" rows="4">любое описание на ваш вкус <a href='ссылка на анкету персонажа'>имя на кириллице</a></textarea>
</div>

<div class="instructionBlock stripeInstruction">
<h2 class="instructionHeading">Плашки</h2>
<div id="stripeContainer"></div>
</div>

<div class="instructionBlock bgInstruction">
<h2 class="instructionHeading">Фоны</h2>
<div id="bgContainer"></div>
</div>

<div class="formButtons">
<input type="button" id="instructionResult" value="Скопировать код">
</div>
</div>

<style>
body { color: var(--text1); }

h2.instructionHeading {
    font-size: 16px;
    font-family: 'Palatino Linotype';
    font-weight: bold;
    letter-spacing: 1px;
}

.labelDescr {
    display: block;
    margin: 9px 0px 1px 0px;
}

.fillingForm { text-align: center; }

.instructionBlock {
    text-align: left;
    margin: 10px 0 !important;
    padding: 14px 14px 12px 14px !important;
    border: 1px solid var(--borders);
    background: var(--qBG);
    border-radius: 4px;
}

.instructionBlock input[type="text"] {
    width: calc(100% - 10px);
}

label.hrAdd {
    margin: 10px 0 0 0;
    display: block;
}

input#hrAdd  {
    accent-color: var(--darkpinkText);
}

label.fillingCategoryRadio {
    border-radius: 16px;
    border: 1px solid var(--borders);
    background: var(--beg300);
    padding: 2px 6px;
    display: inline-block;
    margin: 0px 4px 5px 0px;
}

.instructionBlock textarea {
    width: calc(100% - 10px);
    resize: vertical;
}

label.fillingCategoryRadio:has(input:checked) {
    background: var(--borders);
    color: var(--text1);
}

.fillingCategoryRadio input[type="radio"] {
    display: none;
}

label.fillingCategoryRadio {
    cursor: pointer;
}

.mainInstruction, .profileInstruction, .stripeInstruction, .bgInstruction { display: none; }
.fillingCategoryRadio:has(#main:checked) ~ .mainInstruction { display: block !important; }
.fillingCategoryRadio:has(#profileF:checked) ~ .profileInstruction { display: block !important; }
.fillingCategoryRadio:has(#stripesF:checked) ~ .stripeInstruction { display: block !important; }
.fillingCategoryRadio:has(#bgsF:checked) ~ .bgInstruction { display: block !important; }

.profileStripeLabel, .profileBgLabel {
    margin: 5px 5px;
    display: inline-block;
    width: 180px;
    border-radius: 5px;
    padding: 5px;
    background: rgb(255 255 255 / 17%);
}

.profileStripeLabel img, .profileBgLabel img { border-radius: 3px; }
.profileBgLabel img {
    width: 180px;
    height: 40px;
    object-fit: cover;
    object-position: top;
}

.profileStripeLabel input, .profileBgLabel input { display: none; }

.profileStripeLabel:has(input:checked), .profileBgLabel:has(input:checked) {
    background: rgb(0 0 0 / 12%);
}

div#stripeContainer, div#bgContainer  {
    align-items: baseline;
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    align-content: flex-start;
    height: 190px;
    overflow-x: auto;
    overflow-y: hidden;
}

</style>
[/html]

0

3

Хроно

Прошлое

Once upon a time [15.06.584]

0


Вы здесь » Shadows of Old » Анкетирование » Yarrow Therynvale | human


Рейтинг форумов | Создать форум бесплатно