Ignite 0.036 is here

New version is done! You can download it from here.

Current version 0.036 from 16 Sept 2011.  This release is my participation in Annual Roguelike Release Party`11.

New features in Ignite:

  • Enabled AI for NPC
  • Several new monster types and a lot new Necromutation effects
  • Now you can have up to 3 Necromutation effects active (buffer from 1)
  • Now player character can die
  • 1 new quest
  • Elite enemy
  • Added new playable race – Gray Dwarf
  • New monsters will be spawned in dungeon with time
  • New ‘massacre’ mode with a ton of monsters swarming player (you still can win)
  • More dead corpses, BLOOD! and bones.

Ignite 0.036

Good news, everyone! I’ll definitely release new version of Ignite 17-18 Sept.

Today i made everything what should be included in ARRP release. We have little tought adventure with quests to kill Wrong Bees ;) Like in a Winnie The Pooh novel, but with a roguelike style ;)

I’ve added new monster types (and necromutation effect), help screen (get it from main menu). Now player have chance to get more than 1 necromutation effect (so no more corpses lying on a floor). Monsters may be randomly generated with time spent in a dungeon. Only source of heal is a necromutation effect “Lesser Healing”, and you will need it if you want to win this part of Ignite.

Plans for tommorow: more gore for necromutation effect and implement message system to the game.

ARRP 2011 Ignite release

I’ m thinking about quick release before ARRP’2011 ends (18 sept 2011) .
I will make release without outdoor locations If i implement enought new features in a day or two.

Home

Hello! I came back from Turkey. Didn`t have any photos yet (but i`ll post some them soon).

I’m learning english and this blog will be writen in it from now on. I hope my english will be improved ;-) (and i’ll be glad if you talk to me in english)

Continue work on Ignite. Random screenshot here:

As you see, Ignite now have a health and mana indicator (lower left part of screen). Also i’m improved a monster`s AI: animals now trying to chase player and kill him. And every monster have unique effects for necroze skill.

In next release will be included:

  • 10-15 monster types with 50-70 unique necroze effects
  • combat system
  • several AI behaviors
  • several levels of dungeon
  • “outside world” tiles and map generator
  • several quests and achievement for participaiting in alpha-test (if you save profile file for the next versions of Ignite, this achievement will remain)

Hope to make it all in a week or two.

PS: Did you see current build of Ignite ?

Ignite 0.35c вышла

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

Во-первых, столкнувшись с недостатками своего движка, на котором была построена предыдущая версия игры, частично(очень во многом) переписал его. Теперь практически весь Ignite строится на событийной модели, т.е. у меня есть события для всего на свете и я их использую в нужное время, могу создавать новые во время выполнения программы, а также управлять так, как только захочу. На написание такой модели с нуля ушло достаточно много времени. Остальное время я потратил на создание “контейнерной” графической системы, где объекты логически объединены в группы и их прорисовкой и обработкой ведает их собственный код. Это позволило сократить код основного блока графического вывода до нескольких строк:

C#
1
2
3
4
5
6
7
8
9
10
11
void redraw()
{
   Image frameholder = (Image)init.getImage("bg_black","images/int/black.png").Clone();
   Graphics buffer = Graphics.FromImage(frameholder);
   if (currentLevel != null) currentLevel.container.draw(buffer);
   activeContainer.draw(buffer);
   if (player != null)
      player.tile.selfdraw.Invoke(buffer);
   writeframe.DrawImage(frameholder, 0, 0, frameholder.Size.Width, frameholder.Size.Height);
   buffer.Dispose(); frameholder.Dispose();
}

Во-вторых, начав такую серьезную реструктуризацию, я решил отойти от канонического фентези и добавить в игру что-то новое, изюминку. И первой из них стала абилка первого класса: Некроз – способность захватить эссенцию поверженного врага и использовать ее некоторое время, как новую способность, или с небольшим шансом получить постоянную мутацию в организм персонажа. На данный момент я ввел в игру 3 мутации: пчелиные крылья(которых недостаточно, чтобы поднять над землей орка, но их хватит на более маленького персонажа), “пчелиная скорость”, которая увеличивает на некоторое время скорость игрока, и “ядовитое жало” (персонаж способен некоторое время жалить противника, увеличивая свой урон в ближнем бою). В дальнейшем все неигровые персонажи (а их количество в предыдущей версии было уже больше 30 типов) получат подобные способности, как в свое распоряжение, так и для последующего некроза.

С помощью таких мутаций я планирую описывать расовые различия между персонажами.

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

Ignite – планы на ближайшее будущее

(желательно, только на сегодня)

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

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

Третье, на титульный экран добавляю несколько подсказок, которые рандомным образом с течением времени меняются.

Четвертое, ввожу нормальную реакцию на интерфейс, переключение на экран информации о персонаже и назад. Также функционально доделываю экран информации о персонаже.

Все. Надеюсь,  сегодня это сделать.

Ignite – FOV

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

Сейчас работаю над экраном статистики о персонаже. И примерно вот так будет выглядеть этот экран:

ignite character screen

Ignite – первый игровой класс

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

Война*

I heard the second living creature say, “Come and see!” Then another horse came out, a fiery red one. Its rider was given power to take peace from the earth and to make men slay each other. To him was given a large sword.
— Revelation 6:3-4

Итак, первыми четырьмя игровыми классами будут всадники Апокалипсиса, описанные в Откровении Иоанна Богослова, последней книги Нового Завета. Эти сущности вселяются раз за разом в смертные тела, чтобы уничтожить известный мир и сделать не похожим на то, что известно нам о нем.

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

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

Достоинства:

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

Недостатки:

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

* – изображение взято из игры Gods of War 2, все права на которую принадлежат ее законным правообладателям.

Ignite – работа камеры

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

Я уже описывал принцип работы контейнеров графического движка, и систему с камерой было решено совместить именно с активным контейнером. Одновременно игра содержит в активном состоянии несколько контейнеров – это контейнер игрового уровня и несколько контейнеров интерфейса. На данный момент одновременно отрисовываются только 2 активных контейнера – уровень и графический интерфейс пользователя, а остальные находятся в ждущем режиме. При необходимости вызова инвентаря или, скажем, статистики персонажа, игра переводит контейнер графического интерфейса в ждущий режим и начинает работать с нужным контейнером.

Все графические объекты условно могут быть разделены на 2 категории: заданные абсолютными координатами и относительными. Абсолютными координатами в основном задаются элементы интерфейса, которые никак не должны двигаться при перемещении игрока, а относительными – все элементы карты (стены, сундуки, монстры).

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

Движение осуществляется сейчас через систему событий, которая прикреплена к клеткам, на которые можно перейти. Проще говоря, вы кликаете на клетку мышкой и переходите на нее. В момент перехода вместе с игроком двигается камера. За камеру принят логический элемент, который стоит на левой-верхней клетке (1;1 координата) игровой области (игрок стоит на клетке 9;7).

Ignite

Следующие изменения – это перенос алгоритма расчета области видимости с предыдущей версии движка. Также в данный момент проектирую ролевую систему для игры. Пока могу сказать, что остается выбор расы и классов, но начальное их количество будет ограничено, а остальные доступны будут в виде “анлоков” при достижении определенных результатов при игре предыдущими персонажами.

Ignite v 0.35b

Вчера работал над структурой уровней. Создал класс level, который отвечает за создание уровня, создание абсолютно всего, что в него входит. За создание отвечает делегат generator, который может быть переназначен в любой удобный с момент времени. В итоге сейчас можно создать два непохожих друг на друга уровня (и под непохожестью я имею ввиду не разный seed процедуры random, а уникальные алгоритмы генерации подземелья) всего в несколько строк. Например, таких:

C#
1
2
3
4
5
6
7
level first, second; //создаем переменные под уровни
first = new level (new Size (100,100)); //передаем уровню размер
second = new level (new Size (200,200));
first.generator += new EventHandler(generateDungeon); //передаем создание уровня подземелья
second.generator += new EventHandler(generateTower); //передаем создание уровня Башни
first.generator.Invoke(this,null); //запускаем процесс генерации
second.generator.Invoke(this,null); //запускаем процесс генерации

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