Архив рубрики ‘проекты’
Arena. Командный AI.
Воскресенье, 25/04/2010Пишу “игрушку” с командным взаимодействием между управляемыми компом человечками. Основной принцип заключается в том, что логика для каждого персонажа выполняется функцией, получающей в качестве аргументов список клеток, на которые он может сходить, и список всех видимых ему других персонажей. Он может ходить и стрелять, все просто как кирпич ) Обзор сделан маленьким - круг радиусом в ~2.5 клетки.
Взаимодействие и память реализуются простым, но достаточно эффективным способом: у каждого персонажа есть параметр сообщение типа string, которое могут прочитать он сам и все те, кто его видит. Свое сообщение можно невозбранно обновлять на каждом ходу.
Интересно проверить, на сколько сложного поведения удастся добиться от этих не особо многофункциональных человечков )
Возможно, что я допишу-таки свой интерпретатор ML-подобного скриптового языка на ocamllex/ocamlyacc, тогда можно будет даже распространять гаму по интернетам на радость фанатам OCaml/SML/etc. %)
Yet another stupid dream
Суббота, 20/03/2010Я русский бы выучил только за то что им разговаривал Ленин. То есть, хочу научиться играть на пианинке как он.
Small steps, the long way.. ( crap
Project Jealousy #1. Генерация портретов персонажей.
Воскресенье, 6/09/2009Новости
Как я уже писал в “Project Jealousy #0“, я программирую 2D Tactical RPG. Основная механика хождения группы по пещерам, стрельба и освещение работают почти хорошо, поэтому теперь первостепенной задачей стал моск/разум существ. Сейчас я пишу скриптовый язык (NV-script) для программирования логики мобов, мувиков + кое-каких дополнительных возможностей (программируемый игроком робот !! А-а-а !!). Ботаю книжку Programming Language Pragmatics. Иногда хочется просто отвлечься от постоянного переписывания парсеров и лексеров, и сделать что-то существенное и интересное.
Портреты персонажей
Очевидно, маленькие персонажики 16 на 16 пикселей, пусть и увеличенные (x2) - это несколько недостаточно для создания атмосферы игры. Конечно, можно привести в пример rogue-like игры, но навязанный минимализм и культура рогаликов - это несколько не мое, поэтому я решил сделать портреты персонажей. Идея отличная, но чтобы нарисовать десятки или даже сотни портретов, надо искать художников, которых у меня наберется всего-то в количестве 0.25 человек. Что делать?
Кстати, три классических вопроса русской интеллигенции: Что делать? Кто виноват? И кто взял мои очки?
Итак, поскольку я планирую генерировать максимально возможное число игровых сущностей, почему бы не генерировать и портреты за одно? Предположим, что портрет должен выглядеть так:
Основная идея - это разделение картинки на составные части: 1) овал лица, 2) глаза, 3) нос, 4) губы 5) волосы (прическа). Заменяя любую из частей лица, мы получаем уже другой внешний вид, другого персонажа. Достаточно даже всего четырех вариантов лиц, глаз, носов и т.д., которые дадут 4^5 = 1024 разных лица. Может быть, они и будут не сильно одушевленно и выразительно выглядеть, но в качестве фотографии на паспорт сойдут. Плюс, наличие персональных лиц позволяет сделать дополнительные приколы с полицией, ищущей опасных преступников по фотке, баунти-хантинг и т.п.
Не забываем, что цвет кожи, волос, губ, глаз можно так же сделать переменными. Это позволяет сделать число вариантов практически бесконечным.
Механика
Каждая черта лица представляет собой последоватльное наложение белой основы, (если надо: лицо, прическа, губы), тени и контура (опять же, если надо). В показанных в этой статье картинках такой контур используется для глаз, бровей и носа, а обводка на лице - это часть “белой основы” (методика пока не отработана и изменения еще будут).
Каждая картинка обрабатывается фильтром (red, green, blue, alpha) и наклеивается на идущую перед ней. Полный нераскрашенный портрет выглядит так:
Отдельные части лица приведены на следующем рисунке в порядке их наложения. Пометка “shadow” означает, что картинка является тенью - как правило он выводится полупрозрачной (0.0 < alpha < 1.0).
Последовательным раскрашиванием и наложением картинок, можно достигнуть достаточно разнообразных результатов. От цвета кожи (первый ряд следующего рисунка), до макияжа и анимешно-вижуалкейных цветных волос (второй ряд). Различную степень затененности (и резкости тени) можно использовать в зависимости от типа освещения окружения (день-солнце, пещера). Добавление красно-оранжевого фильтра создаст эффект закатного солнца и т.п. Есть где развернуться.
Пока показан только один тип лица, и все различие сведено к раскашиванию.
В целом, кажется, что получается довольно неплохо.
Из плюсов таких портретов:
- Разнообразие лиц
- Похожий стиль каждого изображения
- Меньше работы художника
- ?
- Профит
Из минусов, очевидно:
- Разнообразие возможно только в допустимых перделах
- Шаблонные лица - отсутсвие уникальности героев
- Дополнительная сложность рисования, необходима совместимость различных черт лица между собой
- Что-то еще, что может пофейлить идею
В общем, видимо, это хороший вариант, если нужно добиться максимального эффекта при минимуме усилий. Посмотрим, как получится это все реализовать… Пока размышляю над реализацией бород/щетины у мужчин - для разных размеров подбородков и двойных подбородков… Пока кажется интересным.
Electronic Music #1
Вторник, 18/08/2009Поставил на комп программу LMMS (Linux MultiMedia Studio), это что-то вроде Fruity Loops. Результат трудов кажется довольно неплох, по моим меркам:







