27 мар. 2008 г.

GraviLens Dwarfs.

Я сегодня опять экспериментировал. В этот раз на карликах. Закончил и испытал оргазм.


На картинке изображены карлики. Первые два ряда демонстрируют фазы кручения карлика со скоростями(игровыми) от 1 до 5 рад/сек. На статичной картинке движения нет, но мне нравится как оно смотрится в игре. Снизу зелёный карлик, просто для него я на тот момент не прописал в GraviLib(см. в конце) параметры для вихря. А чёрный карлик - это нейтронная типо звезда. Когда видешь вращение - реально завораживает. Даже ничего размывать не нужно. Ах, и ещё крона звёзд медленно светиться: масштабируется.
Резюмирую: это мой первый успешный эксперимент за всё последнее время.

Рисуем в три шага:
1. Крону с добавочным смешиванием. (никогда не вращается)
2. Сама гравилинза. (никогда не вращается)
3. Вихрь, прозрачность которого зависит от его скорости вращения.

Вся графика для карликов заняла 5кб. Одна белая крона, ставим нужный цвет умножением. Три гравилинзы, нейтронную рисуем умножая на 0xff000000. Жёлто-красный вихрь. Зелёным вихрь делаем обрезая красный умножением.

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

Дальше надеюсь поэкспериментировать с небом, опять же когда будет свободное время.

18 мар. 2008 г.

Prehictoric Fallout.

После просмотра римейка The Hills Have Eyes, немного Jericho и горького разочарования Fallout 3 родились глупые идеи.


Мы должны спасать глупое племя глупых недолюдей. Недолюди бегают туда сюда под радиоактивными осадками. Мы же пугаем недолюдей таким образом чтобы недолюди бежали в различные укрытия(под дерево, в пещеру и т.д.). Пугаем кликами мыши. Популяция недолюдей и скота переносится с уровня на уровень. Конечный результат игры в зависимости от того сколько вы прошли уровней и сколько у вас осталось недолюдей и их глупого скота в племени. По этому результату мы можем судить о том насколько вы любите недолюдей и как вы готовы о них заботиться. Каждый уровень популяция перерасчитывается. Т.е. у вас остаётся 2 недочеловека и 1 корова, значит след уровень вы начнёте с 5 недочеловечками и без коровы(которую те безжалостно съели). Как-то так.

17 мар. 2008 г.

GraviLens #1.

Закончился конкурс по экспериментальному геймлею 2008, за проведение которого спасибо администрации GameDev.RU и оргкомитету КРИ-2008. Гравилинзы заняли первое место. Результаты.

Теперь я продолжу работать над игрой. Stay tuned!

Cкачать ГРАВИЛИНЗЫ! (1,7мб)

7 мар. 2008 г.

GraviLens Variations.

Пока приходиться анализировать что можно вставить, что нужно убрать и как решить те или иные возникающие проблемы. CONSTRUCTION был остановлен с 22 февраля, с даты появления игры на конкурсе. Теперь между делом в голову приходят какие-то странные идеи, впрочем надоело держать их всех в голове. Совсем больная идея остаётся в секрете до первой её реализации. Жду завершения конкурса, рад буду любым новостям.

Идеи связанные с разрывом луча:
Связанные чёрные дыры. Если мы свяжем две чёрные дыры, то при попадании луча в центр чёрной дыры, он вылетает из центра другой. Проблема: при вылете луча - сможет ли он преодолеть силу чёрной дыры в центре.
Направляющие. При попадании в направляющую - она выкидывает из себя луч в заданном направлении. Есть направляющие с регулируемым направлением, есть статические.
Гравитационное поле:
Зависимость замедления луча от силы гравитационного поля.
Вращение гравилинз искривляет гр. поле по мере приближения к радиусу гравилинзы.
Динамический уровень:
Движение всех объектов на поле. Проблема 1: придётся обновлять лазерную указку каждый кадр. Проблема 2: как луч будет вести себя в динамическом грполе? Решения: во время выстрела останавливать движение на уровне, а один лазер пока считается достаточно быстро.
С уровня убираются границы и появляется камера. Вопрос: делать zoom+scrolling или только scrolling? По итогу пропадёт item - Подъём Вверх. Возможно появление Телескопа, который поможет смотреть куда-нибудь в труднодоступные места.
Интуиция: интуитивное использование предметов, ключей. Заморозку разделить на замедление времени и на +бонус к времени.
Research траектории движения луча.

22 февр. 2008 г.

GraviLens Contest Release.

Скачать ГРАВИЛИНЗЫ! (1,7мб)

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

16 февр. 2008 г.

GraviLens Construction 5.

9 дней до конца конкурса. Давно не писал никаких отчётов по GrLens. Учёба началась, только опомнился.

Были проблемы с таймингом на процессорах с несколькими ядрами. Сменил TSC на QPC и ограничил игровой цикл(там же и просчёт тайминга) на одно ядро. Вроде проблема решилась.

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

Добавил персонажу ряд параметров. Энергия луча. Когда вы не стреляете она растёт до максимума. Когда луч распространяется - энергия потиху хавается до остановки луча. Вы отпускаете левую кнопки и луч исчезает - энергия начинает снова расти. Остальные параметры имеют нейтральное значение, и по мере его изменения они стремятся восстановиться к первоначальному состоянию. Длина Лазерной Указки. Здесь всё просто. Есть бонусы с позитивным и негативным эффектом. Одни увеличивают длину, а другие уменьшают. Скорость Луча. Поз/нег. Влияет на скорость распространения луча. Инерция Фотонов. Те же яйца. Параметр отвечает как будет действовать на луч гравиполе.

Дальше про бонусы. Заморозка Времени. Как бы не параметр, но раз уж здесь речь зашла о бонусах - то этот бонус останавливает таймер. Действует некоторое время(появляется иконка будильника и ползунок). Игровые очки я обозвал Кредитами. Ибо просто Очки - это сумасшествие.. особенно выражение "очки в квадрате".. Так что у нас с Кредитами... Есть три типа монеток. 1, 3 и A. Подсчёт кредитов идёт в шестнадцатеричной системе счисления(это так, удар по обыденности мира сего). Плюшки вы получаете сбивая много монет за один выстрел.. Вот как луч их собирает, так они и считаются. За первые три монетки вы получаете нормальную их сумму. Сбивая четвёртую, пятую, шестую, седьмую монетки, вы получаете с каждой монетки кредиты возведённые во вторую степень, то есть в квадрат. Если дальше следуют восьмая-одиннадцатая, вы берёте по кубу с каждой монеты. И так далее.. Правда 1 лучше сбивать вначале, т.к. дальше в цепочке они малозначительны, все знают что 1^n=1..

Цели. Первая цель - собрать определённое кол-во кредитов за установленное время. Вторая - просто добраться до заветной Сферы с надписью exit за установленное время. Но не просто добраться, а попасть в неё своим лучом и успеть активировать.

GUI. Пришло осознание что я со своим английским никак не способен написать текстовку. Пришлось всё сделать на русском. В начале игры добавил выбор: играть сразу или проходить обучение. Уровень начинается с окошка, где пишется название, цель и краткое описание уровня. Заканчивается уровень информационным окном, где выписан ваш результат. Так же здесь присутствуют две кнопочки: пройти ещё раз или двигаться дальше. Конечно если провалился, то двинуться дальше ты не сможешь. Заполнил пустые участки вокруг игровой области. Ещё хочу сделать по краям затемнение, вроде чёрный фейд. Разрешил пулять когда прицел вне игровой области, только если вы навели курсор на кнопку МЕНЮ, то стрельнуть у вас конечно не получится. Кстати в игровом меню доступны лишь главное меню и возврат в игру. Нужно сделать кнопку запускающую уровень заново.

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



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

2 февр. 2008 г.

GraviLens Construction 4.

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

Нарисовал ещё три вида стенки. Перерисовал монетки, подобрал более тихие звуки. Сделал между фоном и уровнем звёздный параллакс из точек. Сделал счётчик времени. Нарисовал Рефлекторы(гравилинзы которые отражают луч, но не действуют на него силой). Одарил гравилинзы звуками. Сделал прямоугольные участки на уровне, которые работают как гравилинзы, правда ещё не придумал какого вида поле могут создавать прямоугольники... Может линии магнитного поля из полюса в полюс... Исправил в движке баг с кернингом шрифтов(оказалось он у меня не мог быть отрицательным, откуда вытекали последствия такие как сдвиги символов на 254-255 пикселей) Поправил движение луча света, сделал его fps-dependent, увеличил ему скорость.. Сделал космический мусор, типо таких частиц которые отлетают когда луч во что-нить врезается/отражается.

Уровень с рефлекторами - убить Peggle!


Сегодня делал первый уровень. Очень лёгкий, чтобы без всяких наворотов. Но не смог удержаться, сделал два секрета. Если вы будете проходить первый раз и не читали этот блог, то врядли вы их откроете. Зато второй раз проходить будет интереснее.



Некоторые мысли которые требуют реалиации... Конечно нужны time bonuses. Впрочем нужны окошки YOU WIN! и более печальное YOU're LOSER!. Всякие предупреждения типа HURRY UP и поощрения тоже не помешают.. А ну ещё круто было бы сделать множители очков(x1, x2, x3) в зависимости от сбитых бонусов за один выстрел. LONG RANGE поощрение и тд.. И кто бы мне сказал "you're here.. on Earth!"

28 янв. 2008 г.

GraviLens Construction 3.

Вчера ночью после зелёной вечеринки пришёл домой, захотелось сделать звуковое оформление, хотя бы начать. С ходу в TSR был интегрирован BASS и спустя несколько минут появились первые звуковые эффекты. Это было очень здорово.

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

Второй загон с математикой начался когда я захотел сделать Рефлекторы(отражающие гравилинзы). Мне нужно было найти точку пересечения окружности и луча. Отложить от этой точки нормаль и отразить вектор скорости. Пришлось аналитически(на листочке) решать задачу, систему уравнений с векторами, которая потом сводится к обыкновенному квадратному ур-нию. Т.к. точка лежит внутри окружности там очень просто берётся одно решение которое с минусом, потому что у нас t<0.. брр, в общем всё решение для своего конкретного случая я расписал на половине листика А4. Жалко ни фотика, ни сканера нету. Дальше в код, всё работает, я счастлив.

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


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

В принципе и всё. Вот и прошло 7 дней с начала работы. Уже немало сделано, многое ещё впереди. Между тем сдана сессия! С чем я себя уже не раз поздравил.

26 янв. 2008 г.

GraviLens Construction 2.

Добавил гравитационные ключи, эдакие звёздочки, которыми можно отключать объекты которые мешают прохождению луча. Вы сбиваете звезду лучом; она падает на землю; вы левой кнопкой мыши перетаскиваете её на любую из злополучных гравилинз; гравилинза отключается(становится полупрозрачной). Теперь можно стрелять сквозь её. Ключ можно использовать сколько нужно раз. Можно перетянуть ключ обратно на землю или в другую гравилинзу.

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

Изменил немного управление. Раньше использовались две кнопки, левая(таскать) и правая(стрелять). Изменил считаю в лучшую сторону, сейчас всё можно делать только левой кнопкой. Изменил принцип прицеливания: к мышке привязан крестик, за которым бегает кружок. Чтобы стрелять точно, нужно ждать пока кружок сойдётся с крестиком(линзы с зеркалами сошлись..). Луч всегда бьёт сквозь кружочек. Была идея сделать стрельбу случайным образом по направлению между крестиком и кружочком. Ещё осталось добавить ракеты, гранаты..

Усовершенствовал стенки стакана. У них работает коэффициент поглощения энергии, если он >=100%, значит стенка обычная и ничего не отражает, в противном случае power-=absorp;

SCROLL UP! Уровень не ограничивается одним экраном. Подняться выше можно(даже нужно) сбив Подъём Вверх, такой шарик со стрелочкой вверх. Далее кликнув на него мы подымимся вверх на определённое расстояние заданное в параметрах этой вещички. Каждый Подъём Вверх может подымать нас на разное расстояние. Я как дизайнер при разработке уровня и буду таким образом определять продвижение по уровню. Процесс подъёма по уровню будет с 2д-параллаксом.
EXIT? Уровень будет считаться пройденным когда мы собьём Выход, а затем кликнем на него.

23 янв. 2008 г.

GraviLens Construction.

В ночь на 20ое число решился таки начать. Начал далеко. Рисовал гуй в фотошопе, одновременно вставлял и правил всякие баги движка, код которого уже месяц не видел. Нарисовал HERO. Днём 21ого пытался таки делать луч света с невидимой линзой. После небольшого успеха нарисовал какую-то сферу и вставил её, вставил и ещё одну. Вот насколько я помню что получилось к вечеру. Фоновый рисунок и курсор в этой версии были из Монтезумы.. так.. для заполнения пространства.



Дальше больше. Добавил Чёрную Дыру(буквально всасывает) и Звёзды Пульсары(отталкивают луч). Сделал толстый сглаженный луч. По лучу бегает сгусток света(так.. эффекты блин) Пока сбиваются только Бонусы на игровые очки. Сделал dragndrop управление и луч света пока нажата правая кнопка(читайте изменение геймплея ниже). Нарисовал фон и курсоры(стрелочку и руку сжатую расжатую). В общем читать это всё не особо интересно я думаю. Это вроде как отчётик для самого себя. Скриншот из сегодняшней версии.



Далее была чуть пересмотрена сама идея и внесены кой-какие изменения. Герой и прицел перемещаются методом drag'n'drop. Введено время на прохождение уровня. Выстрелы неограничены.
Бонусы. Бонусы на очки - дают очки и висят на уровне, их можно сбить лучом света. Есть Бонус на время, который как оказалось будет добавлять нам времени для прохождения уровня.
Помошники. На уровне можно сбить Гравитационные Ключи. При попадании они летят вниз на землю. Методом dragdrop их можно вставить в любую видимую Гравитационную Линзу на уровне, она деактивируется и становится полупрозрачной. Теперь Луч будет проходить сквозь неё. Таким образом Ключи нужно использовать тактически чтобы обеспечить прохождение уровня или хотя бы сделать его более лёгким.
Была ещё идейка про Световые Компаса, но в игре на время они потеряли свою пользу. На тактическом режиме могут оказать значительную помощи игроку. На уровне висит N-ое кол-во Световых Компасов. Их можно перетаскивать и ставить в разные места. После расположения Героя компасы считаются недолго. Спустя доли секунды компас может не показать стрелку. А может и показать. Если при данном прицеливании наш луч ДОЛЖЕН БУДЕТ пройти сквозь компас или рядом, то покажется стрелка с направлением луча.