ШИННАХ | SIONNACH
ученик некроманта, бродячий маг-недоучка
Louis Partridge16 лет | человек | Аравель, Вальден
••••••••••••••••••••••••••••••••••••••••••••
Образ персонажа
• Все просто: хочу кого-то в игре усыновить, чтобы раскрыть сторону персонажа, которой так и не довелось состояться. Классическая история о том, кто не ожидал найти в себе отеческое начало, и о том, кому оно было очень сильно нужно.
Приючу, воспитаю, научу магии.В голове у меня был такой вариант: юноша лет 15-16, который всех потерял, но где-то научился запретной магии, некромантии, и по глупости попытался вернуть к жизни своих родных. С этого может начаться наша игра.
Дополнительная информация
• Родился и вырос в семье лекаря, который обитал на окраине небольшого городка Линдара, близ границы Эйдина и Аравеля и горя не знал.
• Старший из трёх детей: кроме Шиннаха, в семье были дочь и ещё один сын.
• С возрастом должен был пойти по стопам отца, поэтому уже с 12 лет помогал ему в работе, а попутно изучал всевозможные ядовитые и целебные свойства растений, анатомию и понемногу -- практику хирургии. В учёбе был весьма прилежен, увлекался отцовским делом вполне искренне и среди сверстников в округе заслужил репутацию странноватого заучки и "любителя резать лягушек".
• Несмотря на недоверие сверстников поначалу, со временем сумел заслужить их своеобразное уважение, поскольку довольно быстро завёл привычку отчаянно драться с обидчиками, сперва защищал так брата и сестру, если думал, что их задевают, а потом, немного озверев, стал драться и за себя самого. Обзавёлся понемногу приятелями, у них научился немного научился тому, как ориентироваться не только в городе, но и в лесу, и тому, что делать с ножом, если на тебя нападают.
• Некоторое время назад потерял семью: по поручению отца ездил с парой соседей в Каэр Лаэду на местный рынок, а вернулся к порогу разрушенной Линдары. Соседи, кузнец и шорник, сильные люди не робкого десятка, попытались было войти в разрушенное предместье и -- едва унесли ноги столкнувшись там с нежитью, которая Линдару и разорила. После этого они наотрез отказались и сами возвращаться, и ждать Шиннаха, если он вздумает туда сунуться, пообещали только отвезти его куда-нибудь, если найдётся тот, у кого он пожелает искать приют.
• Отвезли в итоге в Горион. Там жил давний друг отца, с которым тот вроде как некогда учился и почему-то перестал общаться лет восемь назад. Измученный Шиннах отыскал его в Горионе, рассказал о случившемся и упросил о хотя бы временном приюте.
• Новый покровитель выразил сочувствие и приютил. Он тоже оказался медиком, только куда более успешным и зажиточным, и даже согласился учить Шиннах лекарскому делу дальше. А постепенно, слово за слово, слушая как ученик горюет о семье, грезит местью и мечтает о возвращении родных, стал учить и некромантии.
• Шиннах учился самозабвенно, демонстрировал способности к учению и стал некромантией буквально одержим. Чтобы там ни говорили все законы магии, богов и людей, а он твёрдо взял себе в голову, что если станет хорошим некромантом, однажды сможет родных вернуть.
• Своими замыслами с учителем не делился, зато тот постепенно стал делиться с ним -- своей верой в Безымянного и намерением принести миру обновление по воле этого бога. Чем дальше шли разговоры, тем неуютнее Шиннах себя чувствовал: ему совсем не нравилась мысль о нежизни и гниении как колыбели новой жизни, это казалось одновременно отвратительным и бесплодным. Со временем учитель стал говорить об этом всё больше и чаще, втягивать его в эти обсуждения всё настойчивее, и Шиннах не выдержал -- сбежал. Рассудил, что лучше им с почтенным мастером идти разными дорогами.
• Сбежав, побежал в разорённую Линдару воскрешать погибших родных, и именно здесь всё пошло наперекосяк.Планы на игру, пожелания по сюжетам и игровые табу
• Хотел бы играть драму, содержательные разговоры, психологически непростое взаимодействие. С удовольствием впишусь в сюжеты про магические эксперименты, исследования, противостояния и всякую хтонь. Ничего не имею против романтических веток. Готов включаться в приключения, но с учётом того, что персонаж так себе боец.
Хотелось бы сполна сыграть тему "обретённой семьи" и попутно сделать персонажа настоящим некромантом, ответственным магом и вообще всяческим "хранителем человеков".
• Не играю жестокое обращение с животными, детьми, беременными.Пример постаДаврин вырезал грифона. Очень красивого, на его взгляд, грифона: из розоватого дерева, с аккуратными и точными пропорциями, с тщательно сработанным клювом и, конечно, с перьями - прорисованными до мелочей и отлично узнаваемыми. То есть, перья были такими запланированы, но пока ещё не начали так выглядеть, Даврин за них только взялся.
Ничто его так не умиротворяло, как вот эта работа над фигурками, и с тех пор, как он перебрался на Маяк, фигурок, выставленных на сундуке с одеждой и прочим барахлом, изрядно прибавилось. Дело тут было совсем не в том, что Даврин как-то особенно нервничал рядом со здешними обитателями - хоть и смотрел косо на Ворона - просто в последнее время слишком много всего навалилось. Гибель соратников-Стражей, похищение грифонов непонятным чудовищем, похожих на которое он даже в книжках не видел, Ассан, замечательный во всех отношениях, но нуждавшийся чуть ли не в родителе, надобность то и дело пересекаться с долийцами вроде Страйфа, рядом с которыми он всегда чувствовал себя мальчишкой. Одним словом, всего этого было слишком много на одного-единственного Стража, который привык заниматься самым простым и очевидным делом на свете - убивать монстров. Даврин непременно бы сбежал и вернулся к своему любимому занятию, если бы не три важных вещи. Во-первых, Ассану нравилось в этом странном месте, во-вторых, вся эта пёстрая компания явно взялась за важное, хоть и какое-то сумасшедшее дело и к тому же была полна знающих людей, способных помочь Даврину с ценными сведениями. Наконец, в-третьих, ему нравился Айви. Очень нравился, если честно. И расставаться, только-только познакомившись, он точно не собирался. А вот что собирался, пока понимал не очень хорошо. Поэтому вырезал грифона. Очень красивого грифона из розового дерева. А другой грифон, настоящий, с шерстью и перьями, сидел рядом и деловито трепал игрушку-мячик, сделанную для него из старых тряпок и украшенную корой и пухом каких-то арлатанских деревьев.
Семейную идиллию нарушил Айви. Он ворвался в комнату так неожиданно и громко, что Даврин невольно вздрогнул и вместо фигурки резанул ножом себя, прямо по запястью. И немедленно принялся слизывать кровь и зализывать руку, как напоровшийся на что-то острое зверь - лапу. При этом он не переставал возмущённо наблюдать за бурной встречей Айви и Ассана и вклинился при первой возможности:
- Никто его не морит голодом! Ямс, между прочим, полезный, я сам его ем. И галеты, - немного невнятно заявил Даврин, по-прежнему посасывая пострадавшее запястье и не уточняя, он или Ассан едят галеты. - А насчёт рыбы я не уверен, даже из Тревизо. По-моему, когда Ланцид его ею накормила, он потом чихал целый и вечер и ненадолго потерял аппетит. А осьминоги разве не ядовитые? - он с сомнением покосился на Айви, потом критически оглядел результаты "зализывания раны" и на всякий случай ещё раз прошёлся по ней длинным движением языка.
Sionnach | human
Сообщений 1 страница 2 из 2
Поделиться12025-10-22 19:50:15
Поделиться22025-10-23 16:57:38
Вы приняты, добро пожаловать!
Коды для заполнения (следующим сообщением в теме анкеты):
Заполните поля во вкладках "Основа", "Профиль", "Плашка", "Фон" и нажмите на кнопку "Скопировать код" ниже, чтобы скопировать заполненные шаблоны.
[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}"> </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}`;
if (document.getElementById('hrAdd').checked) {
profileForm += '<hr>';
} else {
profileForm += '<br>';
}
const profileAdd = document.getElementById('addDescr').value;
const profileAddNotFilled = profileAdd == '' || profileAdd == `любое описание на ваш вкус <a href='ссылка на анкету персонажа'>имя на кириллице</a>`;
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}`;
if (document.getElementById('hrAdd').checked) {
profileForm += '<hr>';
} else {
profileForm += '<br>';
}
const profileAdd = document.getElementById('addDescr').value;
const profileAddNotFilled = profileAdd == '' || profileAdd == `любое описание на ваш вкус <a href='ссылка на анкету персонажа'>имя на кириллице</a>`;
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;
$("body").attr("class", event.data.style);
});
</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 {
display: flex;
flex-wrap: wrap;
align-items: baseline;
}</style>
[/html]







