Александр Яковлев a.k.a. Oreolek

27 Март 2010 г.

Моделирование битв в текстовых приключениях

Filed under: текстовые квесты — Александр Яковлев @ 12:54

Итак, в середине (начале,конце) игры вы решили сделать боёвку. Кто-то с кем-то дерётся.

Первый вопрос: зачем? Что даёт нам введение боевой сцены?

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

Но если копнуть поглубже, то выкапывать придётся только недостатки такого решения. Во-первых, это сбивает темп игры. Если в игре всего одна боевая сцена, то она должна быть хорошо продумана. Вы не можете просто так вставить её посреди…например, мелодрамы. Битва – это всегда выброс накала страстей, то есть, страсти должны накалиться до предела. Если игра напичкана боевыми сценами, то накалить страсти как следует не удаётся.А держать напряжение всю игру ни у кого не получится, не говоря уже о том,что это вредно.

Чем ещё плохи битвы? Да, они дают риск и угрозу для игрока. Но есть опасность того,что ваш главный герой попросту погибнет в одной из таких сцен. Герой погиб. Всё, игра закончена. Истории конец. В зависимости от реализации битвы это может стать очень и очень огорчающим.

Третье. В ходе обычной игры поражение является прямым последствием действий игрока. Скажем, игрок пошёл в пещеру, и его всё-таки загрызли волки. В боевой сцене чаще всего включается Великий Случай, и это,конечно, вносит элемент реализма и удачи, но также делает поражение ужасно несправедливым. Сейчас я рассматриваю в первую очередь компьютерные игры. Скажем, если запустить игру 10 раз и все 10 раз погибнуть по воле функции random() – это очень несправедливо. Но реальность такова, что это возможно. Поверьте, редкий игрок захочет запускать игру в одиннадцатый раз.

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

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

Отсюда вытекает очень простое правило. Если вы пишете компьютерное приключение – лучше откажитесь от боевой сцены.Текстовые компьютерные игры не предназначены для боёв. Бой требует как минимум изображения, иначе каждое действие игрока и его противника вам придётся описывать двумя-тремя абзацами. Это действительно слишком много,чтобы прочитать, переварить и представить. Даже само представление в виде текста очень снижает скорость игры. Вы никогда не приблизитесь к нужной динамичности.

Допустим,вы всё-таки решили сделать бой. Тогда нужно составить его правила.

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

Но как быть с боями в компьютерных играх, где там нет мастера? Для компьютера нет персонажа и мостика, есть набор параметров и Уровень Сложности Препятствия. Он оценивает, складывает два и два и выдаёт результат: погиб. Справедливо? Разум подсказвает, что справедливо. Прекрасно! Значит, можно брать ролевую систему и ставить её в компьютерную игру?

Не всё так просто. Да, это очень удобно и в меру справедливо. Но ролевая игра подразумевает разграничение по параметрам, их повышение или понижение. Какой смысл делать мост, если по нему может пройти каждый персонаж? Или наоборот, непроходимый мост?

Итак, что мы имеем? Если есть бой, то есть ролевая система. Если есть ролевая система, есть повышение параметров (опыт, +1 Сила, +1 Ловкость и т.д.). Что получается? Чтобы пройти мост, персонажу необходимо тупо прокачаться. Получить +1 к Силе, +1 к Ловкости или 700 XP. Где это можно сделать? Скажем, стоит спортзал. Зашёл, покачался – получил +1 к Силе. Верно?

НЕТ! Нет, нет и нет! Что мы за схему получили? Герой заходит в спортзал, качает мышцы, затем подходит к мосту и пробегает по нему быстрее, чем он падает. На что это похоже? Правильно – это обыкновенная игровая загадка. Она не требует вообще никаких параметров, случайных бросков или опыта. Если герой зашёл в спортзал, то он может пройти по мосту. Всё просто, и не требует больших усилий по реализации.

Далее. О формулах. Я рекомендую использовать только стандартные функции random(). Почему?

Вспомним теорию вероятности. Кубик, который используется в настольных играх (4-100 гранный) – это генератор случайных чисел с равномерным распределением. Что означает: каждое число имеет равные шансы выпадения. Замечу, что сумма двух кубиков уже имеет нормальное распределение, то есть, среднее арифметическое обоих кубов будет выпадать чаще (так, на двух шестигранниках это будут числа 6 и 7). Генератор в компьютере – псевдослучайный. Он имеет нормальное распределение, максимально приближенное к равномерному. Если часто вызывать такой генератор, то вы заметите,что всё-таки он перекошен в сторону каких-нибудь чисел – но перекос всё-таки заметен только при частом использовании.

К чему я веду? Что бы вы ни делали с генератором случайных чисел – складывали бы с параметрами, делили, корректировали – у него всё равно будет перекос. У него всё равно будет нормальное распределение чисел. Это закон из той же теории вероятности: если вы используете только последовательности с нормальными законами распределения (а других у вас нет), то вы получите последовательность тоже с нормальным законом распределения. Что бы вы ни делали, намного проще и выгоднее написать rand() и не мучиться.

Главная проблема компьютерных генераторов случайностей – их перекос. Что бы вы ни делали, игрок может запустить 6 раз подряд игру и все 6 раз проиграть. С этим нельзя бороться (настоящий генератор должен быть аппаратным, а каждому игроку не выдашь огромный модуль с подключением по USB). Поэтому это будет нечестно.

Пусть так. Идём дальше. Я уже сказал о скорости боя (она зависит от насыщенности описаний действий).Теперь – Повторимость. Дерутся двое. Один делает удар левой в живот, второй уворачивается и пытается выкинуть удар левой. Первый кидает правую в бок противника,а левой отбивает руку в сторону.Интересно? Интересно. Возможно ли реализовать в тексте? Ни в коем случае – это слишком сложно для управления. Хорошо. Тогда так: Один ударяет второго, второй уворачивается и пытается ударить первого. Первый отбивает удар и наносит свой. Это можно реализовать? Да. Но это довольно скучно читается, особенно после пятого хода.

Ну, вот вроде всё и разобрал. Вывод? Лучше не делать бои в квестах. Либо заменяйте их на какие-нибудь мини-игры (тетрис на скорость, карточная игра), либо убирайте вовсе. А ролевые системы в квестах так и вообще не нужны.

23 Март 2010 г.

Популярные ошибки в ИЛ

Filed under: Ролевые игры,текстовые квесты — Александр Яковлев @ 13:06

На основе обсуждения в rec.arts.int-fiction.

Эти особенности обычно присущи новичкам в ИЛ. Каждая из них словно бы сигнализирует игрокам: «Осторожно! Неопытный автор!» и раздражает их. Тем не менее, от подобных ошибок не застрахован и мэтр.

Малое количество решений\действий

У игрока есть нож, замок и отмычка. Автор говорит: замок можно открыть отмычкой. Хорошо. Но можно ли открыть замок ножом? И если нет, то почему?

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

Также здесь очень, очень помогают тест-прогоны игр на кроликах…то есть,на игроках. Записывайте все действия игрока и попросите его объяснять, чего он хочет. Вы даже себе не представляете, насколько могут быть изобретательны игроки. Они могут попытаться взломать дверь заточенной костью, которую нашли на кладбище. Они могут попытаться выломать дверь, или снять её с петель. В ролевых играх эта проблема не так велика, потому что автор может мгновенно отреагировать на бурную фантазию игрока (то есть, позволить снять дверь с петель), но нужно быть всегда готовым к неожиданностям.

«Рельсы» сюжета

Эта беда поражает не только интерактивную, но и обычную литературу. Скажем, у героя есть ключ от замка. Есть запертый замок. Герой пробует открыть замок ключом – это не получается. Герой спускается на этаж ниже, находит там труп. Герой поднимается обратно и опять пробует открыть замок ключом – замок чудесным образом открывается!

Каждая реакция игры на действие игрока должна быть объяснена. Причём объяснение должно быть логичным внутри игры. Почему в первый раз замок не открывался? Если объяснить это тем, что герой ещё не нашёл труп – вы буквально раскрываете границы игры, и игрок выходит из неё. Он не может более воспринимать игру изнутри,ему приходится помнить о том,что это – игра, и у неё есть сюжет. Иначе он просто не имеет никакого шанса выиграть.

Использовать «рельсы» – это очень, очень плохая практика. Что бы ни сделал игрок, сюжет един и отступать от него нельзя. Да, конечно, если игрок может одним действием раскрыть всю интригу – это плохо, очень плохо. Но если он не может сделать это действие, потому что он раскроет всю интригу – это ещё хуже. Любой запрет игры должен быть обоснован.

Лень

Вы входите в зал.
Вы видите перед собой лорда Вудстока.
Здесь лежит нож.

Начинающим авторам просто лень прописывать каждое описание. На этапе разработки игры фраза «Вы видите перед собой лорда Вудстока» не вызывает никакого отторжения и понятна для автора. Но если уже в готовой игре игрок войдёт в комнату и увидит перед собой лорда Вудстока, он ничего не поймёт. Подобное описание предмета или персонажа ничего не говорит о нём. Да, это лорд Вудсток. Как он выглядит? Что мне от него ждать? Может быть, мне не надо с ним разговаривать? А вдруг он окажется очень злым?

Мало того,что приведённое мной в качестве примера описание очень кратко, оно ещё и некорректно. Вы входите в комнату и видите человека. В нормальной жизни вы не знаете его имени (если с ним не знакомы, конечно). Но вы можете осмотреть его, узнать как он выглядит и сделать какие-нибудь выводы из этого. Или в вашей игре все незнакомцы ходят с бейджиками на груди? К тому же, описание комнаты тоже недостаточно полно. Зал может быть каким угодно большим и обставленным. Может быть, это зал для пыток. То же самое относится к ножу. Где он лежит? На полу? На лорде Вудстоке? У стены? Может быть, он свисает с потолка на верёвочке? Игрок может вытерпеть одну или две локации в таком ультра-лаконичном стиле, но когда вся игра – это просто лабиринт с разбросанными по непонятным комнатам ножами, лордами и прочими эфемерными сущностями, воображение просто отказывается работать за автора.

Лаконичность описаний персонажей, предметов и локаций – это всё последствия обыкновенной лени. Попробуйте описать вещи кому-то,или пусть он объяснит это вам. Попробуйте нарисовать в голове то,что хотите описать. Стимулируйте воображение.

Оскорбления игрока

>вырезать надпись
Вы уже это сделали! БУДЬТЕ ВНИМАТЕЛЬНЫ!!!

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

>выкопать яму
Вы стучите лопатой по мраморному полу. До земли остаётся ещё три этажа и подвал.

Такой ответ скромно указывает на бессмысленность поступка. Игрок – человек предположительно интеллектуальный, и обращаться с ним нужно соответствующе. Если вы будете орать на него: «КАКУЮ ЯМУ?! ТЫ НА ТРЕТЬЕМ ЭТАЖЕ, ПРИДУРОК!!!», он обидится.

Помните, что игроки – ваши клиенты. Да, вы скорее всего не получите денег от игры, но вы заинтересованы в том,чтобы она получила хорошую оценку в сообществе. Если в обзоре вашей игры будет написано: «У меня создалось впечатление,что со мной обращаются как с идиотом», она не найдёт достаточно много поклонников.

Долгое введение

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

Этот недуг тоже поражает не только авторов игр. Неопытные авторы рассказов и повестей тоже падают его жертвами.

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

Одно из главных правил в обычной литературе гласит: не следует начинать издалека. Чем ближе к действию, тем лучше. «Властелин Колец» – это прекрасная книга, но её очень скучно читать с самого начала (я имею в виду пролог), где досконально расписываются хоббиты, эльфы и прочее.Я охотнее перечитаю всего «Хоббита», чем это нудное введение.

К чему я клоню? Да всё к тому же. Чтобы рассказать историю, совсем необязательно нагружать игрока тоннами информации.Если вы делаете игру по какому-нибудь миру со сложными правилами – упростите правила. Пусть это не будет верно по законам мира, но это позволит играть в вашу игру любому желающему.

Пролог имеет единственную цель: после его прочтения игрок должен начать игру и не чувствовать себя в ней совершенно чужим. Для этого нужно всего лишь знание четырёх ответов: Кто, Что, Где и Когда. При этом самым развёрнутым обычно оказывается ответ «Где?», так как он описывает весь окружающий мир. Не затягивайте пролог – игроки хотят начать игру моментально, а не после прочтения трёх страниц текста. Прежде всего ваша задача – заинтересовать игрока, а уж потом – объяснить ему всё от начала до конца. Часть информации можно дать и по ходу игры. Лучше показать,чем рассказать.

К слову: вы можете дать дополнительную информацию, краткую справку по миру и прочее, не приостанавливая для этого игру. Хорошим способом будет предоставить игроку меню, где он сможет выбрать интересующую его тему. Это можно сделать в самой игре (что-то вроде «Путеводителя автостопом по Галактике»), либо в главном меню игры. Если игрок захочет, он с радостью воспользуется этой возможностью, и чтение не помешает прохождению. Также можно сделать какую-нибудь кнопку «Пропустить пролог».

Отвратителнайа орфокрафийа

Есть одна вещь, которую нужно сделать в обязательном порядке перед выходом игры. Это проверить её на орфографические ошибки. Конечно, это всё-таки исходный код, и он не совсем легко поддаётся автоматической проверке – но поддаётся. Ещё лучше,если вы проверите игру на грамматические ошибки (автоматически или с помощью знакомого филолога). Да,конечно, есть игры с «уникальным» стилем «орфокрафийи», но их ничтожно мало. Поверьте, игроку очень неприятно читать про взлом «нависного» замка и разговор с «интелигентом». Это говорит об уровне образования автора.

Излишняя эмоциональность

Вы стоите в банке. На вас несётся СУМАСШЕДШИЙ человек!!!
Сумасшедший человек заносит топор и ударяет вас по голове!!! Вы убиты!!!

Эмоциональность – это хорошо, но во всём надо знать меру. Жанр приключения – это жанр логичный и рассудительный. Совсем не обязательно расставлять акценты с помощью восклицательных знаков и ОГРОМНЫХ БУКВ. Если ситуация в игре действительно очень эмоциональна, то игрок сам это поймёт и прочувствует всю важность его решения. Подобное выражение эмоций автора выглядит необоснованным.

Слишком Много Сюжета В Описаниях

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

Иногда автор пишет в описаниях отсылки к сюжету. Почему это плохо? Игрок читает эти отсылки к сюжету каждый раз, когда он осматривается или попадает в комнату. Нет, серьёзно. В первый раз эта отсылка не нужна, потому что игрок прекрасно помнит, как он сюда попал – он сюда попал только что. Во второй раз эта отсылка не нужна, потому что игрок всё ещё помнит это. А так ли уж надо напоминать о том,как он сюда попал, во все последующие разы? Это только раздражает. А если игрок проходит игру в третий раз и уже наизусть помнит, откуда и куда он попал? Слава Богу, что подобная практика встречается довольно редко.

Раскрывание мимезиса

Вы стоите на трупе дракона. Автор игры был бы доволен вами.

Любое упоминание в игре о том,что это – игра, автоматически разрушает её рамки. Игрок вылетает за рамки игры и вспоминает о том,что это -всего лишь игра. Худшей подлянки для игрока придумать невозможно.

Мир игры имеет свою логику, и эта логика должна объяснять всё в нём. Скажем, вы не можете ходить по Острову Сокровищ и найти свежий номер «Cosmopolitan». Каждая вещь, поступок и поворот сюжета должны быть объяснены в игре. Почему на современном космическом корабле нельзя найти абак? А почему на нём находится вот этот железный прут? Для чего он там?

В ролевых играх к этому относятся прежде всего отсылки к системе. Говорить «Вы видите меч +5″ – это очень, очень грубая ошибка.

Невнятные личности

>позвать Тома за собой
Я не вернусь в этот ад!
>предложить Тому деньги
Конечно, пошли.

Каждый персонаж – это Личность. У него\неё есть прошлое,настоящее и будущее. Свои суждения, мысли, логика, действия, правила. К примеру, если один персонаж падает в обморок при виде трупа, второй будет стоять и спокойно жевать булочку. Каждый персонаж игры должен быть хотя бы не реалистичным, но прописанным. Если кто-то отказывается что-то сделать, у него есть на то причина. Если кто-то соглашается что-то сделать, у него есть на то причина. Если кто-то хочет что-то сделать, он хочет этого – и он этого хочет не только в данную минуту. Даже если персонаж стоит в этой комнате – он зачем-то туда пришёл или как-то там появился. Почему он не хочет уйти в другую комнату?

Да,это тоже относится к мимезису и логике игры. Игрок спасает человека от чудовища, и человек спокойно уходит прочь, даже не обмолвившись словечком со спасителем. Видимо, его спасают от чудовища каждый день. Знакомо? А как вам такой оборот: девушка кидается на шею главному герою (игроку) и целует его, игрок спокойно уходит прочь, даже не обмолвившись словечком с ней.

Невнятные действия

Здесь я приведу конкретный пример, который заставляет меня плеваться каждый раз, когда я вспоминаю его. The Sinking Island – знаете такую игру? Сейчас опишу. Главный герой – это следователь, который расследует убийство человека, который упал со скалы. Он осматривает тело (которое лежит лицом вверх), находит кусочки земли под его ногтями и опрашивает всех подозреваемых. Тело отправляют на экспертизу, на следующий день приходит вердикт: убит ударом ножа в спину. То есть, когда главный герой осматривал труп, он не заметил огромной дырки в спине у трупа? Простите, но кого вы пытаетесь накормить этой ахинеей?

Что я пытаюсь сказать – действия главного героя должны быть прозрачными для игрока. Я отдал команду осмотреть тело – я ожидаю, что герой осмотрит его тщательно и досконально, и если он говорит мне, что больше там нечего смотреть – значит, так и есть. Я доверяю игре и своему альтер-эго, потому что верю в то,что они делают всё так,как я хочу.Если что-то делается иначе, то я жду объяснений, почему.

Слава Богу, что я не встречал других примеров такого поверхностного подхода к квестам.

Ну, вот вроде и всё. Список этот не полон – так, он не охватывает проблемы парсерных игр (недостача синонимов, активных объектов и избыток очков), но очень рекомендуется к изучению.

А.Я.

22 Март 2010 г.

Основные сюжеты для текстового приключения

Filed under: Ролевые игры,текстовые квесты — Александр Яковлев @ 23:56

Сначала я хотел сделать перевод вот этой темы и последующих, но потом решил, что проще и понятнее будет написать статью самому – тем более что материал есть.

Основное правило – выбрав сюжет, проявите креативность.

  1. Просьба
    Две соперничающие стороны подают жалобу кому-то, имеющему авторитет, чтобы он их рассудил. Это может быть любой вид судебного дела или любая вариация этой темы.
  2. Освобождение
    Герой спасает неудачника или группу неудачников от угрозы.Это – один из классических сюжетов в фольклоре. Угрожать может как какой-нибудь конкретный персонаж, так и окружающий мир.Героем-спасателем не обязательно должен быть игрок – ему можно дать даже роль неудачника, лишь бы это достойно объяснялось сюжетом и игрок не чувствовал,что действие проходит мимо.
  3. Месть
    Междусобойчик мстителя и преступника. Как вариант, возможна вендетта между двумя кланами.
  4. Погоня
    Преследуемый убегает от преследователя. Преследуемый может быть беглецом от наказания, дезертиром, жертвой (это уже какая-то охота на людей получается). Игрок может занять роль любого из участников погони.
  5. Жертва жестокости или неудач
    Жертва жестокости – это прежде всего раб. Он – мученик, он не имеет никаких прав, его не считают за человека. Куда бы он ни пошёл, его будут гнобить и жестоко над ним издеваться.Жертва неудач…это неудачник. Куда бы он ни пошёл, судьба будет его гнобить и…ну, вы поняли. В таком сюжете нет реального антагониста,есть только жертва.
  6. Катастрофа
    Игра-катастрофа. Некая сила свыше, которая неумолимо движется на игрока. Игрок может бороться с ней, пытаться предотвратить катастрофу или убегать от неё. Он может быть пожарным на пожаре, или пилотом спасательного вертолёта. Катастрофа – это всегда жертвы; возможно, от решения игрока зависит их жизнь.
  7. Мятеж
    Для этого понадобятся некий Тиран и тайное сообщество. Злые заговоры, интриги и классовая борьба. Возможно, игрок старается совершить мятеж, и руководит им; возможно,он хочет предотвратить его; возможно, он участвует в нём. К этому виду сюжетов относится даже история про инопланетян, которые хотят немного подкорректировать земное правительство.
  8. Похищение
    Если игрок – не похититель, то сюжет подразумевает побег или спасение. Но тогда это сильно становится похожим на сюжет №2. Вывод? Дать игроку второстепенную роль. Скажем, охранника.
  9. Загадка
    Три составляющих: 1 – тот, кто знает секрет, 2 – тот, кто его не знает, 3 – собственно секрет. Это может быть следователь  и заключённый. В упрощённом варианте объекта 1 нет – такой сюжет описывается простым словом «амнезия». Сюжет требует очень, очень хорошего продумывания. Его завязка и развязка должны быть очень быстры.
  10. Поиски или соперничество
    Одна или несколько групп ищут что-то. Иди и добудь кольцо, Бильбо. Слишком избито и прямолинейно, но простота тоже может быть привлекательной. Фактически, расширенная версия этого сюжета – это соперничество. Несколько претендентов на одну награду. Скажем, семь женихов и одна девушка. Или пять семей и место монарха (это реально было, и не раз в мировой истории).
  11. Адюльтер
    Говоря по-русски – измена. Изменник (изменница), его жена и любовница. При желании здесь можно ввернуть таинственное убийство. Например, кто-то узнал об измене, и его убили. Ну или просто сцена ревности.
  12. Сумасшествие
    Безумец и жертва. Между прочим, жертвой может быть сам безумец. Сюжет предполагает хорошее путешествие в глубины мозга главного героя.
  13. Опрометчивость
    Некто совершил Очень Большую Глупость, и теперь её последствия надо исправлять. Скажем, охранник заснул на посту или посол Африки не надел орден Ленина, собираясь на парад. В результате – есть жертва чьей-либо глупости, Страшные Последствия (вплоть до скандала) и виновник всего. Расхлёбывать события будет конечно же игрок – в качестве жертвы или виновника, решать вам.
  14. Убийство неизвестного
    Убийца, неопознанный труп и тот, кто будет распутывать эту тайну. Хороший мистический сюжет.
  15. Самопожертвование
    Оно может идти во имя идеала или на благо какой-то персоны. Скажем, «я не хочу, чтобы вы выбирали между мной и ним, и поэтому я умираю». Или история о войне. Самопожертвование лучше расценивать как героический шаг, хотя в реальной жизни это спорно – соответственно, цель тоже должна быть высокой (честь родственника\любимой девушки). Это может быть жертва ради игрока, в том числе. И она не обязательно должна заканчиваться смертью.
  16. Соперничество между неравными
    Если в сюжете №10 каждый имел равные шансы получить Главный Приз, то здесь кто-то имеет очевидное преимущество. Скажем, начальник и подчинённый хотят купить одну и ту же машину, или богатый и бедный спорят из-за красивой девушки. Между неравными не может быть дуэли. Этот сюжет может быть приведён к сюжету №1, в том числе.
  17. Препятствие между влюблёнными
    Препятствия другого рода укладываются в уже описанные сюжеты; это же стоит рассмотреть отдельно. Чем не Ромео и Джульетта? Он, она, и огромное расстояние между ними. Романтично до жути. На мой взгляд, главное здесь – не переборщить. Ему 46, ей 14 – это тоже препятствие, но его, пожалуй, не надо ставить целью для преодоления.
  18. Возлюбленный враг
    Опять же Ромео и Джульетта, но это толкование имеет другие просторы для раскрытия. К врагу необязательно должна быть любовь, подойдёт и просто дружба…может быть, давнее товарищество. Проблема выбора,однако.
  19. Амбиции
    Этот сюжет начинается с фразы «Я хочу…». Дальше идёт что угодно: деньги, власть, любовь, не работать по воскресеньям, стать лучшим писателем-квестовиком в мире… Это должна быть короткая ясная цель. Способы её достижения тоже должны быть довольно ясными: скажем, чтобы стать лучшим квестовиком, нужно написать лучшую игру…а как? Непонятно. Тупик. А чтобы не работать по воскресеньям, нужно пойти к боссу и заявить о своём желании – вот и есть первая маленькая цель.
  20. Конфликт титанов
    Это могут быть Бог и Дьявол, Смерть и Жизнь, Зевс и Прометей, Ленин и Сталин, Солнце и Луна… Важно чётко определить,какую роль в этом конфликте сыграет игрок. Вспомните «Фауста» – это действительно многообещающее начало.
  21. Зависть по ошибке
    Скажем, если вам ВДРУГ начнут завидовать,что у вас есть крутое кольцо с синим камнем. Но у вас нету этого кольца. Сюжет довольно слабенький и далее нескольких шуток не вытянет.
  22. Ошибка суждения
    Это может быть неверный судебный приговор, какое-то неправильное назначение на пост, неверное предсказание. Я знаю не один хороший детективный рассказ с таким сюжетом. Скажем, если человека направили работать по распределению не в Петербург,а в Урюпинск.
  23. Совесть
    Угрызения совести – это лучшие друзья следователя. Преступник может испытывать непреодолимую жажду поделиться своей бедой. Здесь есть огромный простор для фантазии.
  24. Возвращение потерянного
    Будулай и Карлсон. Потерянная фотография. То-что-давно-должно-было-быть-уничтожено-и-на-это-все-надеялись. Его не было – оно появилось. В самой простой инкарнации это выглядит как «Смотри, какую карту сокровищ я нашёл!»

Вроде всё. В моём списке всего 25 сюжетов,а не 36, как в оригинале – но зато они довольно сильны и хорошо организованы.

19 Март 2010 г.

PulpCore: начало

Filed under: Веб-программирование — Александр Яковлев @ 18:10

Решил немного отдохнуть и посмотреть фреймворк PulpCore для Явы. Судя по этому бенчмарку, это отличная платформа для любого графического веб-приложения.

Русской документации по движку нету, единственная лежит тут,  лучший способ научиться самому это учить других, поэтому начнём, пожалуй.

Скачать движок можно по этой ссылке. Это просто набор необходимых jar-ов, его нужно распаковать куда угодно и строить программу с его помощью. Для настройки и сборки своих апплетов он использует Apache Ant, так что его тоже нужно поставить.

Перед началом немного интересностей. Движок предоставляет два вида заготовок для программ: быструю и тщательную. Первая используется для всех примеров, таких как этот; вторая подходит уже для более серьёзных проектов – например, игр. Примеры игр на PulpCore лежат здесь. Я буду пользоваться простой заготовкой.

Начать лучше с разбора Hello,World. Пример уже написан и лежит в templates/quick/src. Привожу его текст (в урезанном виде) здесь с пояснениями:

import pulpcore.scene.Scene2D;
import pulpcore.sprite.FilledSprite;
import pulpcore.sprite.ImageSprite;
import pulpcore.sprite.Label;
import pulpcore.image.Colors;

public class HelloWorld extends Scene2D {

@Override
public void load() {
add(new FilledSprite(Colors.WHITE));
add(new ImageSprite("success.png", 5, 5));
add(new Label("Hello World!", 26, 6));
}

}

Строка add(new FilledSprite(Colors.WHITE)); задаёт белый фон апплета. Вместо Colors.WHITE можно писать просто WHITE. Метод add применяется вообще ко всем производным класса pulpcore.sprite.Sprite.

Строка add(new ImageSprite("success.png", 5, 5)); получает изображение и выводит его на x=5, y=5. Какие точно форматы поддерживает PulpCore, выяснить мне не удалось, но во всех примерах используется исключительно PNG. Почему бы и нет, действительно? С третьей строкой (Label) всё ясно, я думаю.

Слово @Override служит просто индикатором того, что метод переопределяет этот же метод класса-родителя; если метод помечен таким образом, он обязан переопределить метод родительского класса, иначе компилятор выдаст ошибку. Тем не менее, это имеет права индикатора и писать его в своих программах необязательно (если, конечно, вы не хотите помочь компилятору).

Чтобы скомпилировать и тут же просмотреть апплет (выскочит PulpCore-версия appletviewer), нужно подать команду ant в каталоге, где лежит build.xml.

Пока что не будем создавать ничего нового, будет извращаться над тем,что есть. Например, почему надпись ничего не делает? Я хочу анимацию! Добавим в импорт пакетов строку import pulpcore.animation.Easing;, а в главной функции напишем:
Label Hello = new Label("Hello World!", 26, 6);
add(Hello);
Hello.numDisplayChars.set(0);
Hello.numDisplayChars.animateTo(0,12, 30*12, Easing.NONE, 1000);

Нетрудно понять по результату, что поле numDisplayChars отвечает за количество видимых символов. Метод animateTo берёт текущее состояние объекта и плавно его меняет до нужного – в нашем случае, медленно увеличивает с 0 до 12. Первый его параметр – нужное значение, второй параметр – это длительность изменения (то есть, во сколько миллисекунд должна уложиться вся анимация), третий – это Easing (специальный класс всех эффектов…их слишком много чтобы описывать, смотрите маны), четвёртый – это задержка анимации (чтобы она начиналась не сразу, а через 1000 миллисекунд). Чтобы ещё раз продемонстрировать удобство этого метода, можно заставить картинку исчезнуть. Я не буду приводить весь код, просто дам ключевую строку: check.alpha.animateTo(0, 255*2, Easing.NONE, 0); – если вы внимательно читаете, воспользоваться ею будет просто.

Ладно,сейчас мне уже пора собираться…думаю, что-то уже я в этом деле начал понимать. Если будет время, то в следующий раз попробую разобраться с такой штукой, как Timeline.

11 Март 2010 г.

Летний день

Filed under: музыка,сочинительство — Александр Яковлев @ 17:20

Это хорошая композиция,но в записи есть огрехи. Вырезано из четвёртого подхода..после записи сил вообще не осталось.

Летний день

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

01 Март 2010 г.

Небольшой казус

Filed under: музыка,сочинительство — Александр Яковлев @ 17:32

Только что на скрипке поехала струна «соль», и встала она по странному стечению обстоятельств ровно на октаву ниже «ре».
Я воспользовался таким случаем и записал одну композицию, которую назвал «левой ре». Это третий дубль (первый я не записывал, на втором меня прервали телефонным звонком), чистая импровизация, всё ужасно глючно и я понял, откуда идёт этот механический звук – так бывает,если я передвигаю звукосниматели параллельно эфам, а не на края деки. Мой смычок лысеет со страшной скоростью, на середине записи он опять порвал один из волос и очень сильно меня начал щекотать им.
Вообще,за последние дни я записал довольно много хороших штук, но их не выкладываю. Когда буду делать какую-нибудь новую игру, сделаю для неё саундтрек и тогда уже выложу полным альбомом.
Алсо, сегодня выяснилось,что вроде как у нас практика идёт до 8го. Так как нас уже отпустили, то получаются каникулы (наконец-то!). Ну,не совсем каникулы,конечно, ещё есть курсовая – но тем не менее. Жизнь прекрасна.

Powered by WordPress