Идея игры Third Life
Jun. 12th, 2008 11:39 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Уже очень давно жду, не могу дождаться, игру Spore.
А тем временем у меня появилась идея игры, которая немного напоминает Spore, но при этом вполне может быть запрограммирована очень небольшими силами. Игра эта - некая смесь Second Life, Core Wars, клеточного автомата, Википедии и Твиттера. (Звучит безумно, я понимаю).
Название игры Third Life образовано так: Conway's Life + Second Life = Third Life.
Идея ещё далеко не до конца продумана, но в первом приближении её можно описать так:
На бесконечном двухмерном поле, разделённом на клетки, живут точки. (Всё это, конечно, web-based, так что любой пользователь, зашедший на сайт, видит поле и может принимать участие в игре).
Точки создаются пользователями, которые дают им имена. Кроме того, пользователи создают множество различных "поведений", которые описываются на некоем примитивном языке с помощью набора изначально заданных basic commands. Все поведения хранятся в единой базе данных, которую можно редактировать, то есть "поведение" - это как бы статья в Википедии - любой пользователь может всегда изменить поведение, но все версии сохраняются.
Кроме того, у точек есть "эмоции" (которые можно обозначать разными цветами). "Эмоции" тоже создаются пользователями и хранятся в базе данных эмоций.
Эмоции влияют на поведения, то есть поведение может меняться под воздействием текущей эмоции, а сами эмоции меняются в зависимости от контекста. Контекст - это внешние обстоятельства: встреча с другой точкой, разговор с соседней точкой, эмоция или поведение соседней точки и т.п.
Точки могут вести блог (нечто вроде Твиттера), где они коротко описывают происходящие с ними события. Таким образом, пользователи, могут следить за точками как самом поле, так и просто читая их "блог".
(Комическое расширение идеи - социальная сеть точек, где у каждой точки есть страница в Фейсбуке, и друзья-точки, которые повстречались на поле).
Идея "поведений" и "эмоций" в общих чертах такова. Изначально задан набор из нескольких примитивных команд (например, random walk, stay, go to, set emotion, say, blog). Поведения можно составлять из примитивных команд и из других поведений, постепенно создавая сложные, многоступенчатые поведения. Чтобы все точки не вели себя одинаково, игроки могут разрешать или запрещать своим точкам пользоваться теми или иными поведениями из базы данных. Кроме того, в каждое поведение можно ввести фактор случайности.
Простое поведение можно описать, например, так (жирным шрифтом выделены ключевые слова):
behavior A:
on meeting:
if neighbor is happy:
say "hello"
blog "I've met a very happy person today named <имя соседней точки>..."
if neighbor is angry:
run away
set emotion scared
Здесь:
- on meeting - это событие "встреча с другой точкой". У каждой точки есть набор событий, на которые она реагирует.
- neighbor - это обозначение соседней точки.
- happy, angry - это эмоции, которые существуют в базе данных. Сама по себе эмоция ничего не обозначает, но смысл ей придают те поведения, которые основываются на значении слова.
- say - это основная команда, которая просто выводит на экран данные слова (около произносящей их точки).
- blog - это основная команда, которая помещает данный текст в блог точки.
- run away - может быть командой, составленной из более примитивного набора go + направление движения + скорость.
- set emotion - это основная команда, которая меняет эмоцию (и цвет) точки.
Заметим также, что переключение эмоции может служить триггером к произведению какого-то нового дейтствия. Например, set emotion scared, может вызвать следующее:
on my emotion set to scared:
sleep 5 hours
где sleep - это ещё какое-то поведение, описанное в базе данных.
Из нескольких поведений можно составлять ещё более сложные поведения, например:
behavior ABC:
if my emotion is sad:
use behavior A
if my emotion is cool:
use behavior B
else:
use behavior C
Постепенно поведения и их взаимосвязи становятся настолько сложными, что пользователь уже перестаёт управлять и вообще следить за "правильностью исполнения", а просто наблюдает за событиями, происходящими с точками, или ограничивается чтением блога.
Избежать совсем уж хаотичного и непредсказуемого поведения должен помочь "эффект Википедии": коллективный разум пользователей должен изменять или удалять нерациональное поведение. Таким образом, семантика эмоций и поведений должна постепенно возникать из постоянно уточняемой базы данных. Очень важно подчеркнуть, что изначально заданный набор основных команд должен быть как можно более примитивным.
Мы получаем некий клеточный автомат, которые подчиняется очень сложным правилам (в отличие от обычного клеточного автомата). Кроме того, правила эти постоянно уточняются пользователями (то есть, "автомат" разрешает вмешательство извне), а также этот автомат умеет рассказывать наблюдателям о происходящих событиях человеческим языком.
Можно даже сказать, что симбиоз клеточного автомата с пользователями постепенно создаёт семантическую сеть, которая этим автоматом и управляет.
Проблема, которую я здесь сразу вижу, такова: очень сложно, если вообще возможно, реализовать действительно интересное поведение на основе единственного значимого события в жизни точки - то есть, на встречах с другими точками. Для того, чтобы разнообразить жизнь точек, нужны ещё и объекты другого мира, а именно - предметы, поселения и, возможно, деньги. Тогда точки могут обмениваться предметами (которые также влияют на их поведение), строить города и дома (закрашивать области доски разными цветами и давать им названия), а также предлагать друг другу работу и платить друг другу деньги, на которые, в свою очередь, можно покупать предметы, дома и земли.
Опять же, всё это должно быть не заранее задано, а постепенно вноситься пользователями в базу данных. Всё, что здесь требуется - это несколько новых примитивных команд, например: build, create, name, give, take.
Но всё равно, такое расширение очень усложняет игру.
В общем, вот такая идея. Буду рад любым мыслям по этому поводу.
no subject
Date: 2008-06-12 04:23 am (UTC)no subject
Date: 2008-06-12 06:58 am (UTC)- слишком сложно.
надо просто сделать кучу разных опций с чекбоксами и позволять их включать и тогда разные их комбинации будут задавать поведение.
если таких обций штук 20-30, то вариантов будет очень много.
а с учётом что ещё и соседние точки будут влиять друг на друга, то тогда вариатов будет ещё больше, особенно если влиять может несколько точек сразу.
no subject
Date: 2008-06-12 07:11 am (UTC)no subject
Date: 2008-06-12 07:17 am (UTC)но только язык нельзя
no subject
Date: 2008-06-12 07:21 pm (UTC)no subject
Date: 2008-06-13 09:33 am (UTC)я тебе тут мальнькую штучку нарисовал
http://setupmac.com/images2/hbcatpad.mov
no subject
Date: 2008-06-13 12:09 pm (UTC)Приезжай давай скорей в гости.
no subject
Date: 2008-06-12 07:31 am (UTC)no subject
Date: 2008-06-12 07:37 am (UTC)ну что-то вроде этого.
no subject
Date: 2008-06-12 07:44 am (UTC)Или наоборот сделать кривой прототип на чем-нибудь вроде Лиспа, чтобы можно было язык не придумывать пока, а проверить, что в нем должно быть. Только все равно это все для программистов.
Кстати, неужели ты в этот Спор будешь играть? Все равно лучше ְAOE ничего нет. Я вот думаю, не купить ли Арьке.
no subject
Date: 2008-06-12 07:54 am (UTC)Буду играть в Спор, обязательно - во всяком случае, пока не пойму, что это ерунда.
Я согласен, что лучше АОЕ ничего не было и нет, только мне играть не с кем. Если у вас дома два компьютера - купи конечно же. Сейчас его, правда, уже вряд ли найдёшь, но скачать где-нибудь можно.
no subject
Date: 2008-06-12 07:57 am (UTC)no subject
Date: 2008-06-12 08:03 am (UTC)А чтобы точка реагировала на смысл слов - ну, тут мне тебе не нужно объяснять, чем это пахнет.
no subject
Date: 2008-06-12 08:08 am (UTC)Так у тебя же есть отдельно say и blog.
no subject
Date: 2008-06-12 08:14 am (UTC)no subject
Date: 2008-06-12 07:35 pm (UTC)no subject
Date: 2008-06-13 07:58 am (UTC)no subject
Date: 2008-06-16 01:42 pm (UTC)только героями надо делать не точки, ну или придумать как сделать точки симпатичными :)
и обязательно уже в базовой модели какие-то параметры, которые можно качать, пусть даже статистические, а не влияющие на дальнейший прогресс
ну типа: моя точка распугала сегодня 100 других точек (я стремлюсь отыгрывать хищника)
или моя точка сегодня подружилась с 10 точками (я социализируюсь) и тд
no subject
Date: 2008-06-16 02:09 pm (UTC)Там есть глава Properties of Organic Systems. Пока читал её, возникло желание повозиться с моделированием организмов.
Только у меня задумка немного в другую сторону была, хотелось взять язык, в котором можно гарантировать необходимые свойства ботов. Т.е. написание бота может стать нетривиальной задачей (а может и нет). Зато среда, в которой боты будут жить, получится максимально простой в реализации.
no subject
Date: 2008-06-20 11:26 am (UTC)Бота можно описать такой функцией:
Дружественные боты могут друг с другом общаться: либо прямым доступом к user defined состоянию, либо через сообщения в BotAction. Т.е. можно создавать команды.
Бонусы такие:
- игроки получают в распоряжение выразительный язык для описания поведения ботов;
- при этом (теоретически) можно получить гарантии того, что боты ничего деструктивного с системой сделать не смогут (надо только подумать, что делать c unsafePerformIO);
- очень быстро можно написать прототип и постепенно дорабатывать его.
Самое сложное придумать хороший геймплей.
А самое интересное -- написать способный держать кучу ботов движок на хаскелле.
no subject
Date: 2008-06-20 11:14 pm (UTC)no subject
Date: 2008-06-23 08:41 am (UTC)Я попробую сначала накидать немного кода, что бы было что предложить, а потом напишу.
no subject
Date: 2008-07-14 07:20 pm (UTC)