понедельник, 7 сентября 2015 г.

Немного об играх на платформе ChoiceScript.

Что? Простой язык для написания интерактивных мультиплатформенных книг-игр.


Почему? Вот статистика Choice of Robots в Стиме. 21722 +/- 3573 купивших эту игру при цене для стран первого мира в 4.99 $. И это только Стим - без учета App Store, Google play и Amazon kindle. Разумеется, все дело не только в деньгах - но кому не хочется иметь денюжку со свое хобби + неплохое количество тех, кто оценит вашу текстовую игру...?

Итак что такое ChoicScript с точки зрения Pros/Cons (за и против).

Pros:

  • Мультиплатформенность - игра идет на любом устройстве на котором идут современные браузеры (правда, вашу игру вы сможете запустить только на Мозилле, Хром и Опера не могут запустить ее, однако сами чойсы как-то компилируют свои игры так, что им уже не нужен браузер, как посредник для запуска игры).
  • Простота - все что вам нужно это написать сюжет и преобразовать его в код. Вам не нужна графика и музыка. Сам по себе язык довольно простой.
  • Достаточно разработанная-развитая среда ("экосистема") вокруг "языка" - развитый форум с большим количеством тем, дружелюбное комьюнити, высокий шанс, что на ваш пост ответит кто-то из разрабов "языка", вики по языку, IDE прямо в браузере и т.д.
  • Уже раскрученная франшиза-лейбл-бренд Choice of Games - ваша игра на этом движке уже будет иметь некоторые преимущества за счет только принадлежности к этому "языку".
Cons:

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


Идейно-творческая часть.


ДВЕ КОНЦЕПЦИИ – ДВА ИГРОВОСПРИЯТИЯ

В этой короткой статье я бы хотел сделать сравнительный обзор двух концепций написания интерактивных текстовых игр. Это концепция классических книг-игр и концепция текстовых игр под брендом Choice of games.



Принципиальное отличие этих двух концепций в том, что книги-игры пишут в виде разветвляющихся параллельных сюжетных линий. А Текстовые игры Choice of games пишутся в рамках одной сюжетной линии с небольшими отступлениями от главного повествования.


Структура параграфов



Схема структуры параграфов Книги-игры


Книги-игры могут иметь весьма запутанную структуру – древовидно-кустовую. Автор иногда делает переходы между разными сюжетными ветками. Часто используется зацикливание – т.е. возврат в уже пройденные параграфы (игровые локации).
Структура нарастает в ходе написания игры вокруг игровых локаций или игровых событий.
Неопытные авторы при написании большой книги-игры часто настолько запутываются во всех этих сложных переходах, что даже после многочисленных тестов не всегда удается выловить ошибки и логические нестыковки.


Схема структуры параграфов Интерактивной текстовой игры Choice of games


Текстовые игры Choice of games имеют более строгую линейную структуру с минимальным количеством расходящихся сюжетных веток или не иметь таковых вообще (т.е. имеют лишь одну сюжетную ветку). Переходы(ссылки) между разными сюжетными линиями встречаются, но редко.
Авторам гораздо проще писать игру по такой схеме. В ней не запутаешься.
Главной особенностью этой структуры является схема «бутылочного горлышка». Когда в параграфе игроку дается выбор из 5-7 вариантов, а затем от любого выбранного варианта игрок переходит к следующему ключевому параграфу, который снова предлагает игроку 5-7 выборов и т.д.


Размер игры и время прохождения
Книги-игры, как правило, имеют размер около 300-500 параграфов. Этого размера достаточно, чтобы развернуть некое приключение и при этом не слишком утомить игрока. Поскольку древовидная система параграфов может быть очень запутанной (за счет зацикливаний/возвратов на прошлые уже пройденные параграфы), время прохождения такой по размеру игры колеблется в среднем от 30 минут до часа.

В среднем Текстовые игры Choice of games могут иметь такое же количество или чуть больше параграфов, чем книги-игры. Время для одного прохождения игры тратится гораздо больше, чем при прохождении одной сюжетной ветки в книге-игре. Время прохождения игры может доходить до 2 часов и более. Это отчасти еще объясняется тем, что в играх Choice of games размер текста в одном параграфе в среднем больше чем в параграфе книги-игры.


Реиграбельность
При одном прохождении книги-игры игрок прочитывает от 30% до 60% всех имеющихся параграфов (это зависит от конкретной структуры параграфов). Поэтому при переигрывании игрок может читать довольно много параграфов, которые он не посетил при первом прохождении игры.


При одном прохождении Текстовой игры Choice of games  игрок прочитывает около 90-95% имеющегося в игре текста. Реиграбельность здесь тоже есть, но она построена не на чтении новых сюжетных веток, а на попытке пройти тот же сюжет, но делая другие выборы, чтобы прийти к другому финалу.


Ролевая система и отыгрыш
В книгах-играх ролевая система основывается на системах типа АДиД в виде набора параметров Героя (Сила, Ловкость, Навыки и пр.). Параметры иногда выражены числами, а иногда просто названиями имеющихся у героя Навыков.
Эти параметры, как правило, касаются физических данных героя. Вся активность героя крутится вокруг, совершаемых им, физических действий (запрыгнуть на скалу, взломать замок, прокрасться мимо стражи, убежать от врага, атаковать врага разным оружием, и пр.).
Эту ролевую систему можно сравнить с театром кукол, когда актер стоит за ширмой и на его руку насажена кукла-петрушка. Игрок управляет, прежде всего, физическими Действиями куклы. Эта система держит игрока несколько отстраненно от играемого им персонажа.

Если игрок сделал за своего героя верное по сюжету действие, то часто получает за это какой-то бонус в виде находки или ценной информации по игровому миру.

Пример:
Вы оказались в небольшой комнате. У стены стоит сундук. В дальнем углу виднеется люк в полу. Что вы сделаете?

Откроете сундук - ???
Поднимите люк - ???
Или покинете комнату, пока сюда не вернулись гоблины - ???


Текстовые игры Choice of games  герой так же может иметь числовые параметры, касающиеся физических характеристик (Сила, Ловкость и пр.), но кроме них очень часто герой имеет так же набор морально-психологических показателей (Агрессивность, Доброта, Жадность, Религиозность, Коллективизм, Эгоизм и пр.). Суть ролевой системы сводится в большей степени именно к этим морально-психологическим показателям. И именно от этих показателей в конце игры зависит, к какому из многочисленных финалов придет ваш герой.

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

Пример игрового выбора:

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

Я делаю это ради того чтобы избавить мир от подонков - ???

Я делаю это ради денег. Это просто моя работа - ???

Убивать нехорошо. Но это меньшее зло, чем то, что делает этот монстр, распространяя наркотики по всему миру - ???

Мне нужно убить его, чтобы заработать деньги на операцию моему отцу - ????

Независимо от того какой из вариантов выберет игрок, дальше будет параграф описывающий как жертва убита метким выстрелом героя. Но в разделе статистики параметров героя могут по разному изменяться его морально-психологические показатели (Человечность, Страх, Эгоизм, Жестокость, Самоконтроль,  и пр.)
Например – игрок выбрал вариант «Убивать нехорошо. Но это меньшее зло, чем то, что делает этот монстр, распространяя наркотики по всему миру» - параметр Цинизм вырос на 10%.

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

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

В играх Choice of games генерация героя не выведена как отдельный подготовительный к игре этап. Сюжет начинается сразу и по ходу развертывания этого сюжета игроку дают варианты выборов, которые постепенно формируют характеристики героя. Таким образом, генерация вашего героя гармонично вписана в сам сюжет.

Например:

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

Холеное лицо аристократа с тонким носом, аккуратно подстриженной бородкой и циничным взглядом - ???

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

 Перед зеркалом прихорашивалась симпатичная блондинка с пышным бюстом и полными губами. Когда она улыбалась, на ее щеках появлялись милые «ямочки», но ее глаза говорили «Я очень опасна!» - ???
*Примечание – выбор описания героя так же немного изменяет параметры психотипа,  стартовый уровень Здоровья и прочее (если автор это заложил в игромеханику).

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


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

Преждевременная смерть героя в играх Choice of games почти не используется, ибо задача игры состоит не в цели Выиграть в игру или выполнить некую Задачу, а в том чтобы получить удовольствие от ролевого соучастия в сюжете и прийти к благоприятному финалу (судьбе).


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

В играх Choice of games довольно много диалогов с разными персонажами. В игре герой очень часто по многу раз встречается с одними и теми же персонажами и вступает с ними в диалоги. И эти диалоги требуют от героя(игрока) делать выборы ответных реплик, которые по разному могут сформировать отношение этих персонажей к герою.
Для того, чтобы игрок мог отслеживать - как относятся к его герою те или иные персонажи в специальном разделе (Лист героя) отмечается симпатия или антипатия персонажей.
Это привносит в игру дополнительную интригу. И игровые персонажи воспринимаются игроком не картонные статисты, а как живые и реальные личности. Ведь игрок от лица героя уже установил с ними отношения, а порой  и узнал их весьма драматичную личную историю. Если один из персонажей является в сюжете игры спутником героя и в ходе приключения этот персонаж погибает, то это воспринимается игроком более эмоционально.

Бои и оружие
В книгах-играх авторы часто придумывают свои правила боев (с кубиком или без) и свой набор оружия и их боевые параметры.
В книгах-играх особенно по теме фэнтези встречается много боев. Это требует от игрока вести на Листике Героя учет уровню Здоровья, Ловкости, Силы и пр. Бои проходят с использованием бросков кубиков, и бой может занять несколько игровых ходов. А если герой сражается с несколькими врагами одновременно, то боевые ходы(броски кубиков за героя и за врагов) сильно удлиняются по времени.


В играх Choice of games бои встречаются, но они происходят не по какой-то заранее описанной в разделе Правил системе (с кубиками или без), а в виде выбора описания вашей атаки текстом. Выбрав верный тип атаки, вы сразу получаете описание исхода боя в виде текста. Если выбор не верный, ваш герой теряет часть Здоровья и затем благодаря сюжетной задумке автора игры – избегает смертельной опасности. Это позволяет продолжит сюжетное повествование, а не преждевременно убить героя и заставить игрока начинать игру заново. Продолжительность боя обычно в  один или два хода.

Пример:
Вы монах из монастыря Шаолинь. Ваш наставник послал вас разобраться с бандитами у реки. Когда вы подошли к мосту. Вас тут же окружило четверо вооруженных копьями и дубинками бандитов.

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

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


Интерактивность
В книгах-играх интерактивность в большинстве случаев выражается или в выборе сюжетной ветки или в ходе проведения боя с врагами.
Например - Неудачная атака тут же приводит к отклику в виде получения вашим героем ранения.
А выбор героем одного из возможных путей (пойти к реке или идти через лес) меняет сюжетную ветку, но никак не отражается на статусе вашего героя. В книгах-играх много выборов, которые тут же никак не изменяют параметров героя и потому интерактивность таких выборов почти нулевая. Результат выбора, который вы сделали в данный момент, отразится на вашем герое, лишь спустя несколько игровых ходов. Здесь интерактивность игрового мира отложена во времени и порой не всегда очевидна для игрока.

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





Выводы

1)      Если вы чувствуете у себя талант литератора и хорошо владеете слогом и стилем, то вам лучше писать в рамках концепции Choice of games. Если с художественными описаниями у вас не очень хорошо, то лучше писать в концепции книг-игр, где предложения более лаконичны.
2)      Если вы хотите написать драматически насыщенную игру, где у героя несколько спутников-персонажей, то лучше писать в рамках концепции Choice of games.
3)      Если вы хотите написать игру с высокой реиграбельностью игровых событий, то лучше выбирать концепцию книг-игр.
4)      Если вы хотите глубоко погрузить игрока в атмосферу вашего игрового мира и во внутренний мир вашего героя, то лучше писать в рамках концепции Choice of games.
5)      Если вы создали игру со свободным перемещением героя по разным локациям открытого Мира и возможностью повторно посещать эти локации, то вам лучше писать в концепции книг-игр.
6)      Если вы решили написать небольшую по размеру игру(около 200 параграфов), то лучше выбрать концепцию книг-игр. Особенность концепции Choice of games требует довольно длинного по размеру приключения, чтобы игрок успел вжиться в психотип своего героя и стал ему сопереживать.
7)      Если вы хотите чтобы ваш герой в игровом Мире находил много разных предметов, занимался их куплей/продажей, участвовал в большом количестве боев с разными типами врагов, то лучше выбрать концепцию книг-игр.

Дотошный читатель может меня спросить – А можно ли объединить две эти концепции в одной игре?
Мой ответ – Да, можно. Но с оговорками. Эти ограничения я перечислил выше.

Нежелательно делать симбиоз из громоздкого списка параметров героя заимствованного из концепции книг-игр и так же довольно обширного списка параметров психотипа героя используемого в играх Choice of games. Иначе вы получите перечень из 30-40 параметров и игровых ресурсов с которыми игроку будет трудно оперировать вручную (записывать/вычеркивать числа и слова).
Вам придется пожертвовать какими-то игровыми параметрами, чтобы ужать их количество до приемлемого уровня.

Желаю вам удачи и творческого запала в написании ваших текстовых интерактивных игр! Не бойтесь экспериментировать. 






Техническая часть.


Как перестать писать про "лист персонажа" и кубики и начать писать текстовые игры.

Предположим у вас уже есть сюжет в текстовой форме с расписанной механикой, со сценами-параграфами и всем таки прочем. Как все это запихнуть в язык чойсов? Изи бризи!

1. Качаем файлики, которые нужны для запуска вашей первой игры с сайта чойсов (Trying it out и первая ссылка под ней).

2. Сама игра будет находится в скаченной нами папке по адресу web\mygame\scenes. Для игры обязательно наличие 2 файлов в этой папке. Сама игра будет в файлике startup, а окно статистики будет редактироваться изменениями в файлике choicescript_stats. Игра запускается через файлик index в папке mygame.

3. Все изменения будут проводиться в файле startup, через любой текстовый редактор (notepad ++, например).


Самый верх файла startup - переменные. Например у вас в игре есть предмет "меч" - его можно представить как переменную "sword". Переменная объявляется только в самом начале текстового файла startup через *create. Полностью строчка с мечом в коде игры будет выглядеть как *create sword 0. 0 означает, что у игрока с самого начала еще нет меча, однако, он может появиться в будущем.

Дальше идут 2 обязательные строчки - *title и *author. Первая - название игры, вторая - автор. Они обязательно должны быть между первой сценой игры и переменными и должны быть заполнены.

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

Конец сцены - код кнопки. Начало кода кнопки - *choice. затем делайте переход на строчку вниз, делаете отступ через 1 нажатие кнопки Tab. Дальше идет символ # и текст, который будет в самой кнопке, например Start the game. Дальше опять спускаемся на строчку вниз и уже 2 раза жмем Tab. Здесь уже функция перехода на другой параграф *goto - например, если вы хотите, чтобы после нажатия на кнопку игрок переносился на параграф № 20 вам нужно написать *goto 20p, если вы уже обозначили параграф № 20 до этого как *label 20p.

Каждая новая кнопка начинается с символа #. Кнопок может быть бесконечное количество (вроде бы, хотя лично я видел максимум 6-7).

Табуляция очень важна в этом языке - если она будет не правильной прога выдаст ошибку при обработке вашего кода!

Фактически так вы можете перенести все параграфы из вашей игры. В начале *label и название вашего параграфа, например *label 1 для первого параграфа. Затем идет текст самого параграфа, потом *choice и кнопки.


Как реализовать шестигранный кубик и условные ветвления в игре? Сначала вам нужно создать переменную в вашей игре (например dice1 для первого кубика и dice2 для второго). Сама же кнопка будет выглядит так:

*choice
#Check your luck.
*rand dice1 1 6
*if dice1 >= 3
*goto 68p
*if dice1 < 3
*goto 56p

Функция *rand сама делает всю работу - рандомно выбирает цифру от 1 до 6 и присваивает ее переменной dice1. Это - бросок кубика. Дальше прога через оператор *if сама проверяет значения переменной. Если ее значение больше или равно 3, то игрок переместится на 68 параграф, если же меньше 3 - на 56. Можно реализовать и характеристики + прибавление к ним значений бросков 2 кубиков + прочие бафф-дебаффы, но принципиально код все равно останется таким (он врет).


В игре кнопки можно сделать скрытыми или не скрытыми, в зависимости от условий игры. Например, сцена - сражение с монстром. У игрока может быть волшебный меч, который может убить монстра одним ударом - а может и не быть. Как тогда оформить кнопку "Ударить монстра волшебным мечом"?

Здесь есть два пути.

*choice
*if (magic_sword = 1) #Рубануть монстра волшебным мечом.
*goto 252p

*choice
*selectable_if (magic_sword = 1) #Рубануть монстра волшебным мечом.
*goto 252p

Верхний вариант *if - кнопка не будет показана игроку, если не выполнено условие в скобках. Например у героя нет магического меча или magic_sword, то есть переменная magic_sword = 0 в памяти программы. Он не нашел этот предмет в процессе игры. Второй вариант *selectable_if - кнопка будет показана в любом случае, но если у героя нет предмета (или характеристика не позволяет или что-то еще, что указано в скобках), но если условие не выполнено, то кнопка и текст в ней будут серые, и кнопку нельзя будет нажать. Что выбрать - дело вкуса. Кто-то решит оставить игрока в полном неведении (первый вариант), а кто-то решит дать стимул на повторное прохождение (второй вариант).


В игру также можно вставлять изображения - просто вставьте в текст параграфа строчку *image 1.jpg. При этом у вас в папке игры. а именно в папке mygame должна лежать картинка в формате jpg с именем 1.


В условных ветвлениях модно вставить различные проверки, например.

 #Run for class president
    *if leadership > 25
      You win the election by a landslide!
      *finish
> - характеристика должна быть больше значения проверки,
>= - характеристика должна быть больше или равна значению проверки,
< - характеристика должна быть меньше значения проверки,
<= - характеристика должна быть меньше или равна значению проверки.

В языке чойсов есть панель Show stats, которая показывает характеристики, взаимоотношение и прочее игрока на данный момент. Все это меняется в процессе игры через изменение переменных. А как указать какие именно переменные должны отображаться в этом меню? через редактирование файлика choicescript_stats
*stat_chart
 text strength
 text dexterity
 text wisdom
В этом случае игрок будет видеть состояние трех характеристик на данный момент - силы, ловкости  и мудрости.

Самое главное! Как изменять ваши характеристики-переменные по ходу пьесы? Через функцию *set.
*label 183p

Вы идете по дороге и вдруг замечаете у обочины дороги кошель, туго набитый золотыми монетами!

*choice
#Заграбастать золото себе (+ 25 золотых монет).
*set gold + 25
*goto 290p
#Пройти мимо.
*goto 290p

*set gold + 25 - этой строчкой вы увеличиваете значение переменной gold на 25 единиц. Если ваш персонаж захочет что-то купить в магазине то это уже *set gold - 25 (не забудьте в кнопке покупки вставить условие на проверку наличия у игрока достаточного количества золота для покупки). Также осуществляются и операции умножения и деления - через * и /.

*label 183p

Ушлый торговец предлагает вам свое добро - что купите?

*choice
*selectable_if (gold >= 30) #Купить себе меч за 30 золотых монет.
*set gold - 30
*set sword 1
*goto 290p
#Выйти из лавки торговца.

*goto 290p

*set sword 1 - изначально для всех предметов в переделанных мною играх я присваивал значение 0 (типа предмета нет), а когда игрок получает предмет, то просто меняю значение переменной предмета на 1. Дело вкуса, не более.


Еще один важный момент - игру надо сохранять в кодировке Unicode. иначе игра не воспримет русские буквы! Все переменные же нужно, к сожалению, писать на английском.


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

В чойсе также есть одно неприятное ограничение. В кнопке можно проверять только два условия одновременно.
  • And: (leadership > 30) and (strength > 40)
  • Or: (leadership > 60) or (strength > 70)
Но не 3 и более. Помните об этом. 


Вроде все. Коротенько вышло, правда? )) За бортом много чего осталось - комментирование, перенос строк, временные переменные и прочее... Но для написания первой игры это и не нужно (автор же как-то живет без всего этого, значит и вам не нужно, азаза). А если понадобится - посмотрите по ссылкам вверху статьи. Все равно все самое интересное, новое, прорывное по языку чойсов будет на этих, да-да, англоязычных сайтах. And if you don't agree with this point of view - *** **** ** and learn english!

Над статьей работали - Таро и esse
(чо вы - мы правда работали Т_Т).

Комментариев нет:

Отправить комментарий