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

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

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

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

Shadows of Old

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

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


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


Mythra | human

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

1

МИТРА | MYTHRA
контрабандист, убийца, помощник и ученик стража Амад Зарра

https://upforme.ru/uploads/001c/03/d9/308/t423656.jpg
Ann Kuleshova

20 | человек | Пустоши Амадии, Амад Зарр

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

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

Митра — рабыня из Костяных холмов.
Когда девочке было 12, на ее деревню напали работорговцы, перебили всех, кто мог сражаться и охотиться, а остальных уволокли с собой силой. Всё произошло слишком быстро. Родители не успели ни спрятать понадёжнее, ни убить. Старшую сестру изнасиловали и растерзали прямо на кровати, под которой пряталась Митра. Убили, потому что она сопротивлялась, ударила первого ворвавшегося к ней ублюдка по голове подвернувшейся под руку масляной лампой, а тот ею же забил ее насмерть. Прямо в лицо. Аве было пятнадцать. За день до этого она впервые поговорила с мальчишкой из соседней деревни, который давно ей нравился. Митра не смогла сдержать крик, ее выволокли за ноги и с омерзительным причмокиванием из вонючего рта бросили на изувеченный труп сестры. Пока Мирта искала, чем убить себя (ведь кинжал свой нательный они с Авой надевали только покидая дом), к насильнику сзади подкрался брат... Ему было восемь лет, и он был очень храбрый мужчина.
Изнасиловали Митру позже, не на трупах любимых людей. Только поэтому не вся голова поседела в тот день у двенадцатилетней девчонки. Год от года её ужасного взросления седые волосинки отвоевывали себе у черных новые территории, но с шестнадцати лет их стало гораздо меньше: Митра обрела надежду.

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

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

Он приставил ее к своему делу и принялся учить и магии, и навыкам боя, и всему тому, что он умеет делать хорошо, и ей может пригодиться в жизни. Слушаться его Митра начала не сразу — какое-то время брыкалась по привычке, сопротивляясь каждому указанию нового хозяина, пока не сообразила, что его уроки позволят ей избавиться от своих врагов и получить свободу. После этого осознания дело пошло полегче, а отношения выровнялись до доверительных.

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

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

• В отношениях не хватает мягкости, но Лотар стал для Митры самым надежным взрослым из тех, что у нее были рядом с момента похищения из деревни. Он ее не предавал, защищал и учил, пусть уроки его и бывали порой жестоки, но это было нормой для дикарки из суровых краев. Однако, он все еще остается ее хозяином — он когда-то ее купил и до сих пор официально не дал волю. Впрочем, и Митра отчего-то все еще не собралась, чтобы прийти к нему с выкупом своей стоимости, на который накопила уже давно.

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

Куда хотите вести персонажа, какие отыгрыши в приоритете, к каким сюжетным веткам хотели бы присоединиться
Как сказано в заявке, и она полностью соответствует моим запросам - "странную связь двух людей, которые вроде бы хотят тепла и любви, но не слишком представляют, как его принимать и дарить: мешают старые травмы, да и жизнь вокруг не располагает к нежностям".
В приоритете бои, вылазки, приключения и знакомство с другими персонажами через игровые события.
• Какие темы категорически не играете
Сатанинские

Пример поста

Моя любимая девочка. Такая хрупкая и такая временами дикая, ветреная, себе на уме. Никогда не знаешь, что вычудит в следующую секунду. С одной стороны, это, конечно, плюс: всегда есть элемент неожиданности, нужно постоянно быть готовым к любому сюрпризу и уметь нейтрализовать любое его последствие. И я всегда готов к этому, как во время тяжёлой смены на пляже, только не 10/10 минут в течение 4-5 часов, а круглосуточно в течение всех дней недели. А что она? Она то свернётся в мягкую пушистую кошечку и урчит, растворяя тебя в неге, то вдруг начинает фонтанировать несуразными весёлыми идеями, искрами вылетающими из ее пухлых сексуальных губ, и подчиняет своему фейерверку чувств, и это всё соединяется в такой опьяняющий коктейль, что может превратиться в зависимость, которую, я знаю, точно нужно избегать, чтобы с ума не сойти. Я справляюсь с этим, но опасаюсь, что мой волевой бастион продержится не так долго, как мне бы хотелось. Смотрю на нее и ору про себя "хелп!", а она это видит и снова смеётся надо мной, засранка!
Со стороны мы так молоды, так похожи на Ромео и Джульетту, что ставилась не так давно в нашей школе, и уже человек десять, включая моих родственников, коллег и знакомых, сказали мне об этом. Но мне не нравится это сравнение, и я неизменно отвечаю им всем: "Надеюсь, что нет. Они плохо кончили..." Даже - теперь я отчётливо понимаю это - оттягивал момент знакомства с "леди Капулетти", когда видел ее в компании Аби и, естественно, догадывался о том, кто она моей девушке. Получается, что урывал её себе, как вор, как трус, как слабак. А она поверила мне, захотела связать со мной жизнь - навсегда. И я был уверен, что готов жениться... А теперь, когда я вижу перед собой прямо направленный на меня взгляд ее матери, открытый, но холодный и ясный, как луч сканера, вся моя правда, мне кажется, вылезает наружу, открывается ей, как на ладони. Аби вряд ли понимает это, весело и беззаботно пробегает вперёд, сейчас ещё больше напоминая мне наивную и светлую, как дитя, принцессу Ариэль, с которой, при всех составляющих, она схожа даже больше, чем моя кузина - и моё сердце сжимается стыдом за ту ложь, в которую я невольно вовлек столь красивую и крылатую девочку, ни в чем передо мной не виноватую.
Я, конечно, уговорил себя довести это дело до логического конца, отреагировал, как надо, на ее шутку про "fucking Sorry", ведь она надушилась моими любимыми духами и пришла ко мне домой за два часа до назначенного ужина и именно тогда, когда мои предки были на работе, а брат у себя в студии... Нет, другой, материальный подарок, у меня тоже был. Ну, как материальный. Скорее, памятный. Ее акварельный портрет в стиле любимого портретиста бабушки, Александра Брюлло. Она видела, что я временами делаю зарисовки в блокноте, но не всегда уговаривала меня показать их ей, так что частично этот подарок можно назвать неожиданным. Особенно головной убор в его контексте. Надеюсь только, что она не ждала от меня каких-нибудь бриллиантов...
Так или иначе, Аби приняла подарок и завернула его так же бережно, как разворачивал я при торжественном вручении, и собственноручно несла домой подмышкой, благо, его формат не превышал привычного любому студенту-первокурснику А-3 и не весил больше одного килограмма. Мне показалось, что ее удовольствие от подарка было искренним, и я успокоился хотя бы на этот счёт.
Как же хорошо выглядела ее мать! И представилась так многословно, с вступлением. Я выдохнул. "Мисс, значит"... Губы пересохли. Я пожалел, что не отреагировал на возникшую паузу перед звонком на лестничной площадке и не поцеловал Аби. Это придало бы мне сил. Возможно, она ждала моей инициативы, но я был слишком занят своим волнением и попытками его скрыть. И вот теперь этот взгляд ее матери, эта улыбка и "можно просто Элеонора". Что ж. Я зашёл. Зашла и Аби. Стройная моложавая мама закрыла дверь и отправила нас мыть руки. Как ей идёт это платье, эта прическа. Всё будто для фотосъемки или позирования. Я ловлю себя на глупой мысли, что могу ее нарисовать. Удивительно! Рисовать свою мать мне никогда не хотелось. А тут первая встречная не натурщица - и я уже думаю не как архитектор.... Хотя и строение ее не по возрасту утонченной фигуры, коварно подчёркнутой приталенным черным платьем, тоже привлекло мой рандомный нечаянный интерес.
- Да, запах чудесный... - только и нашелся, что сказать я вслед за беззаботной репликой Абигайль прежде, чем послушно отправиться за ней в ванную, путь к которой элегантно указала мне ручка мисс Элеоноры.
В ванной встретил меня душ из мелких брызг с уже вымытых пальчиков Аби.
Я тихо рассмеялся и притянул к себе хулиганку.
- Не провоцируй меня, - шепнул я ей на ушко, а, заметив в глазах тех самых чертей, издевательски запечатлел ей смачный чмок в щёчку и, освобождая из объятий, отвернулся к раковине.

Отредактировано Mythra (2026-05-03 20:08:43)

Подпись автора

https://upforme.ru/uploads/001c/03/d9/308/t37369.gif

+5

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]

+1


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


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