понедельник, 17 марта 2014 г.

Модель реакций персонажа ТВР

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

Встречайте первую пробу пера: "Модуль поведенческих реакций".
!! Ещё раз подчеркну. Это не игра и даже не демка. Это никогда не станет игрой. Там нету сцен секса или какого-либо геймплея. Так что скачивать её имеет смысл только тем кто хочет погонять модуль, попытаться разобраться в нём и обсудить со мной его работу.

Пак для Win/Linux/OSX:
ЯндексДиск
MediaFire

Приложение Андроид:
ЯндексДиск
MediaFire

!!! Я проверял только сборку под windows. Не знаю будет ли работать пингвин и макось. А особенно я сомневаюсь в ондроеде, потому что не уверен что всё сделал правильно и android-девайса для тестирования у меня нет. Так что огромная просьба тех у кого есть попробовать запустить версию под андроид и сказать что-как.
Для андроида вам вероятно придётся найти и скачать приложение RenPy которым вы будете запускать программу. Пак для дескотопов содержит уже готовую к запуску программу, ничего дополнительно к ней качать не надо. Просто запустите исполняемый файл.

Ниже многабукаф про то что же это за программа:

Модуль поведенческих реакций делает ровно одну штуку: выдаёт тип реакции девушки на ваше действие в зависимости от характера этого действия, текущей обстановки, потребностей и особенностей личности девушки, её моральных установок и взаимоотношений с вашим персонажем.
При этом типов ("стратегий") реагирования есть всего четырнадцать:
Физическая агрессия
Вербальная агрессия первого типа (угрозы)
Вербальная агрессия второго типа (спор / ссора)
Стоическое превозмогание
Бежать и прятаться
Давление на жалость
Истерика
Фрустрация (подчинение со слезами)
Отказ
Игнорирование
Пассивное поведение
Вежливое поведение
Заинтересованность
Энтузиазм

Я так же думаю добавить схемы "абструкция" и "рабская покорность", но это в будущем. Может быть ещё какие-то варианты, если кто-то придумает чего тут явно не хватает.
Учтите что одна и та же девушка в одной и той же ситуации будет вероятно использовать более бедный набор реакций. Т.е. если она самелая и кругом её друзья, на все жесткие неприятные воздействия она может реагировать однотипно физической агрессией. А если трусиха в глухом месте, то так же однотипно убегать и прятаться. Это нормально.
Тем не менее, хочется чтобы эти реакции были достаточно адекватны, и вот это я и попрошу вас протестировать. Если в ответ на ваше действие модель реагирует неадекватно пожалуйста напишите мне об этом.

Для оценки адекватности поведения модели вы можете посмотреть закладки "Аура" и "Мораль", где расписана подробная информация обо всех психологических факторов которые влияют на принятие решения моделью. Ну плюс учитывайте какой типаж модели вы собрали сами. Например если это "ваша дочь" с современным этическим кодексом, не удивляйтесь что она будет испытывать бурно негативные эмоции на предложения сексуального характера, так как это противоречит её отношению к инцесту.
Немного об этической матрице или "морали". У сгенерированной девушки будет своё отношение к следующим темам:
Агрессия
Вандализм
Воровство
Гомосексуализм
Грубость
Жестокость
Подаяние
Ксенофилия
Инцест
Каннибализм
Ложь
Наркотики
Неподчинение
Обнажение
Пассивность (сексуальная)
Подлость
Промискуитет
Рабство
Смерть
Трупы
Убийство

Экскременты

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

Есть несколько заранее настроенных этических шаблонов, но вы можете сами раскидать моральный кодекс модели выбрав пункт "воспитана мной". Попробуйте начать с тестирования модели, моральные устои которой близки к вашим, чтобы проще было оценивать адекватность её реакций.

Окружение в котором вы находитесь, помимо картинки задника определяет так же некоторые реакции. Возможно четыре варианта:
Безразличие - либо вы одни и наблюдателей нет, либо наблюдатели абсолютно индифферентны к тому что между вами происходит.
Поддержка - окружающие хорошо относятся к девушке и готовы её поддержать
Оценка - окружающие настроены нейтрально к вам обоим, но наблюдают
Давление - невыгодное для модели окружение. Например с вами ваши союзники или она заперта в страшном подвале

У персонажа существуют следующие потребности:
Голод - она хочет есть
Безопасность - она чувствует тревогу, неуверенность или чего-то опасается
Секс - ей хочется сексуального удовлетворения
Комфорт - хочется уюта, удобства
Признание - хочется чтобы её любили, хвалили и уважали
Познание - хочется получать знания, удовлетворять любопытство
Достижение - хочется добиться каких-то результатов или получить денег
Эстетическая - потребность в развлечениях и красоте
Самоактуализация - потребность в смысле жизни и духовном росте

Потребность может принимать одно из трёх значений: не выражена, выражена или сильно выражена. Например если нивелировать остальные факторы, то от приглашения в ресторан не голодная девушка откажется, а очень голодная примет его с энтузиазмом. С другой стороны если вы отнимаете у неё пирожок, то если девушка не голодна ей его не будет жалко, а вот если голодна мотивация к сотрудничеству будет ниже.

У модели так же существует десять личностных факторов:
Эгоизм / Альтуизм
Самодостаточность / Конформизм
Доминантность / Субмиссивность
Сознательность / Безответственность
Доверчивость / Подозрительность
Рассудительность / Беспечность
Храбрость / Трусость
Склочность / Дружелюбие
Дипломатичность / Прямолинейность
Общительность / Замкнутость

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

У модели будет отношение к вашему персонажу, зависящее от того какой тип взаимоотношений  вы выбрали (например "дочь", "начальница" или "незнакомка"):
Любовь/ненависть
Уважение/презрение
Доверие/недоверие
Эмоциональная значимость отношений (булевое, да/нет)
Уровень зависимости от вас
Уровень признания вашей силы и способности наказать её
Уровень признания ваших законных прав командовать
Привычка к подчинению

В зависимости от уровня любви и уважения модель будет занимать одну из ролевых позиций в общении: агрессор, соперник, жертва, доминатор, собеседник, раб, покровитель, союзник или любимец.

Действие которое вы выберите, вызовет какие-то эмоции, влияющие на мотивацию и выбор стратегии модели. Все вызванные эмоции будут перечислены.

Я пока не ввёл влияние характеристик персонажа игрока. По умолчанию мы считаем что у вас средние навыки общения, внешность и т.п.

В игре есть баг, из-за которого после самостоятельного определения этического кодекса вновь созданная девушка "клонированая работрговцами" вместо полной аморальности будет принимать назначенную вами этику. Перезапустите игру если хотите создать аморальную модель. Причину этого бага я понять не могу. Вроде бы словарь отвечающий за определяемую мораль не ссылается на базовую версию а создаёт отдельную копию. Но что то я видимо напутал. Кто разбирается в питоне, пожалуйста гляньте и скажите где я накосячил, если несложно.

Вообще со времени когда я кодил на QSP мои навыки программиста несколько возросли, но я всё ещё слаб в этом аспекте и к тому же только начинаю изучать python и RenPy. Так что мне бы очень пригодились советы и поддержка опытных программистов знакомых с этими платформами. В игре должны были сохраниться исходные файлы со скриптами. Если кто-то хочет вызваться мне помогать, то просьба сделать следующее: посмотрите мой код и найдите что там можно оптимизировать. И напишите мне письмо об этом. С объяснением почему так лучше и как это работает. Возможно это позволит избежать очень неприятных граблей в коде в будущем и ускорит разработку моих игр.

Wall of text mode off...

59 комментариев:

  1. Да там нечему нравиться. Нужно просто посмотреть адекватность реакций модели.

    ОтветитьУдалить
  2. Было бы интересно использовать эту модель для всех персонажей. Включая врагов, нейтралов и протагониста.

    ОтветитьУдалить
    Ответы
    1. Ну, протагонист в любом случае будет играть по другим правилам - ведь игрок сам выбирает свою модель поведения. Но да, я хочу универсальую модель персонажа которая будет одна для всех. Это сулит изрядные выгоды, хотя сделать так чтобы всё было учтено и непротиворечиво будет трудновато.

      Удалить
    2. Обыгрывание индивидуальности протагониста через ограниченный спектр выбора - модель довольно распространённая.
      При этом она активно используется в применении к физическим особенностям, таким как те же атрибуты и навыки, но редко реализуется в моральном аспекте.
      Я у себя ввёл понятие "воли". Если для достижения результата необходимо сделать что-то противоречащее устоявшейся модели поведения протагониста, это можно реализовать с затратой "воли". Решение позволяет сделать один нужный выбор, но не позволяя всегда поступать руководствуясь метаигровыми реалиями.
      Таким образом я ушёл от образа циничного и расчётливого персонажа, управляемого игроком, который поступает всегда из соображений лишь собственной (или иной другой) выгоды.

      Удалить
  3. Особо времени потестировать пока не было, но отпишусь, что на пингвине нормально работает.

    ОтветитьУдалить
  4. работает все норм только вот понят не могу (толи мышка глючит или ты по 2 одинаковых фразы вставил когда обучаешь свою девушку сам)
    ну понятно что игра не доработана но я думаю надо изменить немного вот я допустим хочу дочь а она к вороству относится нетрально ( или не как ) вот почему бы не сделать что она наоборот положительно относится и допустим как я ее отец и она у меня типа ворует деньги , ну в общем я бы предложил тебе сделать еще положительные отношения вот на пример начальница могда быть извращенной и сама типа на меня нападать с сексом или там рабыня не сдержанная которая типа там умоляет ее взять, ну еще я бы нареное добавил шкалу типа дружба если гг дружит с девушкой или наоботот нет те или иные действия сказывались по другому ( типа я с ней дружу она влюблена в меня по уши и готова типа там даже в парке отсосать) вот еще наверное от окружающей местности типа в парке она боится тебя обнять а в дома наоборот готова на все (тоже из серий скрытая извращенка положительная характеристика)
    но это все мое мнения в общем все отлично вот не понял нафига цифры ( думаю это зависит от гг и его убедительная речи типа уговорить с ней переспать хотя она не знакомка и вообще нечего об вас не зная)
    вот еще охотник тебе сылка на 40тыс картинок (кажись) там есть много серийных девушек ( украл с какой то игры) http://yadi.sk/d/Unv0jtgmKj66z
    еще раз скажу что все нормально работает как часы ,а вот насчет реакций я тебе сказал свое мнения ну еще много чево хочется сказать но писаьт лень ну во общем 7из10
    жду еще обновлений и дополнений об этой игре

    ОтветитьУдалить
    Ответы
    1. Это не игра. Это модель реакций. К этому не будет никаких дополнений и обновлений. Я просто буду использовать наработки в следующих проектах.

      Удалить
    2. не ну понятно я имел в виду такие действия в игре я понял что это вообще просто так типа картинка))

      Удалить
  5. во еще охотник извини что сюда пишу но ты уже все полностью закрыл игру Валет? или еще что там поправишь?

    ОтветитьУдалить
    Ответы
    1. Вероятно ещё патчик придётся сделать. Набралась там парочка неприятных багов. Но спешить с этим я не собираюсь пока.

      Удалить
  6. С поиском RenPy на андроид возникли некоторые проблемки, но я, всё-таки, нашёл. Правда, запустить модуль так и не удалось(программа тупо не видит файлы). Если есть ссылка на рабочий ренпай для андрюши, то прошу скинуть сюда, а я обязательно потестирую.

    ОтветитьУдалить
  7. По поводу "бага": http://docs.python.org/2/library/copy.html.
    В принципе, все разъяснено довольно внятно, но на случай если вы не знаете английского: ".copy" создает копию объекта со _ссылками_ на вложенные объекты. Полагаю, для того, чтобы создать _полную_ копию объекта нужно либо использовать ".deepcopy()", либо объявлять:

    $ my_girl['moral']['agression'] = basic_moral['agression'].copy()
    <..>
    $ my_girl['moral']['excrements'] = basic_moral['excrements'].copy()

    "Полагаю" потому, что "python" не знаю (разве что "monty").

    ОтветитьУдалить
    Ответы
    1. Хм... судя по описанию дело должно быть действительно в этом. Но deepcopy не помогает (
      Всё-равно работает с той же ошибкой. Копировать все вложенные словари по одному явно не выход =\

      Удалить
    2. Хотя нет. Это я протупил. Всё правильно работает.

      Спасибо, Оля!

      Удалить
  8. Интересный модуль... надо разобраться...
    1-Будет ли модуль показывающий взаимодействие с миром(Римом, домом, туманом) с базовыми действиями такие как сделать, сломать,взять, украсть и т. д.
    2-на какой стадии сейчас проект ТВР?
    3-Будет ли "спаивание в одно целое" проекта ТВР с КО или ВП?(сюжетом или геймплеем)
    Ну раз проект громоздкий, то помогу чем $могу )

    ОтветитьУдалить
    Ответы
    1. 1) Не планировал пока
      2) На стадии разработки
      3) Геймплейно элементы КО и ВП присутствовать будут

      Проект громоздкий дальше некуда. $пасибо

      Удалить
  9. очень надеюсь что в ближайшие пару месяцев мы увидим хотя бы концепцию нового проекта и подробную)

    ОтветитьУдалить
    Ответы
    1. На словах? Вероятно увидите )

      Удалить
    2. ну не в виде демки же. Для этого еще слишком много работы)

      Удалить
  10. Упустил название... как аббревиатура ТВР расшивровывается?

    ОтветитьУдалить
  11. Охотник, привет. Как с тобой можно связаться? На какое мыло можно написать?

    ОтветитьУдалить
    Ответы
    1. Алексей, old_huntsman@yahoo.com вроде как.
      Охотник, ну Вы бы хоть в шапку мыльце сбросьте, рядом с кошельками, а то народ FAQ читать не любит)))

      Удалить
    2. FAQ, в игре самой тоже есть.
      Если человек не способен даже сам посмотреть мою почту, у меня возникают сомнения что мне интересно будет с ним о чем то общаться.

      Удалить
    3. FAQ - непосредственно у меня в избранном, через него захожу на сайт. Я просто хотел уточнить актуальность почты, меня смутило отсутствие контактов в шапке, хотел уточнить. Неприятно удивлен негативной реакций на простой вопрос.

      Удалить
    4. Ты не представляешь как часто этот вопрос мне задают. Задрало.

      Удалить
    5. Алексей, ты где негатив увидел то? Меня скорее позабавило и удивило))

      Удалить
    6. Денис, я отвечал Охотнику) но он уже объяснил что его достали этим вопросом. Спасибо за ответ.

      Удалить
  12. Вот что думаю: раз на девушку влияют разные обстоятельства на действия, то почему же не наделить протогониста сей истории то же каким то "отмазками" или "воодушевлениями" для выполнения действий?(например: на действия "поговорить" отказывается мол "нет желания/настроения", "сначала надо задарить << предмет>>" или "я обижен")

    ОтветитьУдалить
    Ответы
    1. Пропагандист просто очень волевой. Нет, конечно было бы интересно посмотреть как умирая с голоду герой не захотел кушать, потому что устал, расстроен и вообще нет настроения. Лёг спать и умер =) весело, но не более одного раза.

      Удалить
    2. Я думаю, в этом есть смысл. Конечно, с одной стороны, ГГ управляется игроком и должен послушно выполнять его волю. Но с другой стороны, у ГГ могут быть некоторые ограничения по допустимым действиям (как по физическим возможностям, так и по психоэмоциональным). И в зависимости от действий игрока в процессе игры, эти ограничения будут сдвигаться в ту или иную сторону.

      Удалить
  13. Иван,
    1) не пропагандист(агитатор), а протагонист(главный герой) - не путай!!!
    2) Есть такое понятие как ФОБИЯ (боязнь чего либо) То есть ГлавГерой(далее ГГ) с гидрофобией ясен пень не прыгнет спасать тонущую красавицу из озера, какой бы красавицей она не была))
    3) А на счёт "лёг спать и умер" есть логично объяснение: Эметофобия(боязнь рвоты в результате несвежих продуктов) то есть отказ ГГ вполне логичен для него...
    Охотник, прекрасно Вас понимаю, но мы не ищем лёгких путей, правда ведь?)))
    antage, согласен с тобой.... Но если бы ГГ выполнял бы всё на 100%, то это была бы не "Туманы", а Contra на Денди =)

    ОтветитьУдалить
  14. Сложно, по-моему, для одного разработчика такое с ходу мутить. Я бы предложил сделать на основе хорошего движка с большим потенциалом основу игры, а на неё уже докручивать всё остальное, по мере появления сил и времени, а то так можно получить какой-нибудь HL3.

    ОтветитьУдалить
    Ответы
    1. Конкретику давай. Какого движка, например?

      Удалить
    2. Construct 2, игры пиляться на html 5, потенциал большой, даже мульт запилить можно, но там в основном 2d игры пилят, но и текстовые теоретически сделать можно.
      А так же там теоретически просто портировать на андроид, айфоны и тд.
      Скриптов там вроде нет, все пилится на условиях и событиях.
      P.s. Могу подогнать ключ, если заинтересует.
      P.P.S Поздравляю с завершением Валета и началом новой разработки!

      Удалить
    3. Хм.... и зачем мне движок не заточенный на текст да ещё и неспособный в скрипты?

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
    5. Там есть питон. Всё что есть в питоне есть в RenPy

      Удалить
  15. структурно же однако мыслишь. респект.
    предлагаю еще один тип реагирования для скажем покорных в общем-то персонажей, которым слишком стыдно или не интересно делать то, что ты им говоришь - предложить замену. Например - не буду мыть посуду, давай лучше займемся сексом ) ой, для секса у меня болит голова, давайте я вам на скрипке сыграю) ну и тд )

    ОтветитьУдалить
    Ответы
    1. Я предполагал изначально вариант под названием "торговля", но он реализуется в два раза сложнее чем остальные. Посмотрим.

      Удалить
  16. Мне нравится Охотник =) Недавно говорил, что Шарп - это сложно и долго,и, Вуаля! , сегодня мы всерьёз смотрим на Python-based язык =)

    Nothing is ever simple with the OldHuntsman , huh ? :)

    Больших успехов и чистого кода !

    ОтветитьУдалить
    Ответы
    1. 1) Я не уверен насколько сложен С# я знаю что C++ точно сложный и мыслю по аналогии. Отсюда можно судить о степени моих познаний в языках )))
      2) Про питон как раз все говорят что он легкий и оптимален для обучения новых программистов. И хотя мне вообще-то тяжело его осваивать, значительно тяжелее чем QSP, но зато виден и больший потенциал. Я бы не стал с этим связываться если бы не прижало.

      Удалить
    2. ХЗ) Не занимался питоном) Но из моего личного опыта - чем проще , тем сложнее =) Я буду с большим интересом следить за развитием твоего нового творения)

      Удалить
    3. Чем проще тем сложнее? Это что какой то коан в стиле хлопка одной ладошей?

      Удалить
  17. Я в огромном восторге, что Охотник стал изучать RenPy - это просто замечательно. На радостях отправил очередной скромный донат на Яндекс Деньги, чтобы всецело поддержать данную инициативу! :)

    Так как сам я девелопер, через пару недель вернусь с отдыха домой и с удовольствием устрою ревью кода, а так же подскажу, как можно реализовать ту или иную фитчу, если потребуется.

    Удачи в разработке!

    ОтветитьУдалить
    Ответы
    1. Круто. Пиши на почту как вернёшся.
      Тут всплыла идея делать всё через GithHub коллективно

      Удалить
    2. очень хорошая идея, особенно для выполнения массовых работ, например написания случайных событий в игре.

      Удалить
    3. Идея действительно классная. Только вот использовать сам git может быть затруднительно, потому что это штука у которой есть порог входа, но на том же ГитХабе можно SVN поднять. Или если охота именно распределенной системы контроля версий, то Mercurial на SourceForge.

      Удалить
    4. +1 за github.

      > Только вот использовать сам git может быть затруднительно, потому что это штука у которой есть порог входа, но на том же ГитХабе можно SVN поднять.

      -1 за SVN. SVN тормозной до невозможности.
      На гитхабе сейчас можно делать правки и засылать pull request прям из веб-интерфейса. Куда уж проще?

      Удалить
    5. TortoiseGit вам в помощь. https://code.google.com/p/tortoisegit/

      Удалить
  18. Довольно интересно)
    Я кстати хотел бы попросить исходники "черного безумия" хотел бы доделать сырую игру если конечно автор не против

    ОтветитьУдалить
    Ответы
    1. Вообще-то там все отлично извлекается любым нормальным архиватором вроде винрара,севензипа. Просто открываете файл с расширением aqsp в проге и извлекаете. Затем работаете как с обычным qsp

      Удалить
  19. Хм... в этом модуле тестируется исключительно реакция или общение? Потому как реакции вроде бы правильные, а вот общение выходит неадекватным, когда после угрозы зарезать, девушка тепло реагирует на анекдот. Выходит, пока никакого представления о ситуации в целом не формируется?

    ОтветитьУдалить
    Ответы
    1. Там статичная модель. Она не запоминает никаких предыдущих событий.

      Удалить
  20. Самое главное - развивай тему с беременностью, а то в валете печалька. Либо труп, либо отбирают детишек. И конечно инцеста добавь! И сюжета с персонажами, к которым привязываешься

    ОтветитьУдалить
    Ответы
    1. SypSvary, согласен, но в "Вальте" я сам спрашивал про беременность, оказалось тяжело реализовать: Как смоделировать, так искать подходящий арт...

      Удалить
    2. В принципе всё возможно, но так как у меня нету особого фетиша не беременных и инцест это не первый приоритет

      Удалить