воскресенье, 26 октября 2014 г.

Я работаю:)

хех, меня взяли на работу программистом.

И на днях собрал скрин своей ККИ о которой писал ранее. Выглядит так:

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

То есть смысл такой. ставим земли (максимум 5). Призываем существ. Направляем существ на вражеские земли. Ставим существ для защиты своих земель.

вторник, 7 октября 2014 г.

Asura2D

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

Ну и скриншот из моего конкурсного проекта:

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

Еще про ККИ

Наконец-то продумал базовый костяк правил.

От идеи, что земля должна производить ману (как в MTG) пришлось отказаться - не вписывается. Зато теперь нет страха что застряну в пятицветии и получу явный клон:)
Вообщем у игрока будет мана (я назвал у себя ресурсом) (как в хиртстоне, в том числе и то что она повышается каждый ход от 1 до 10), а земли будут позволять вызывать соответсвующих существ. Выглядит так, например ополченец будет требовать 0 ресурса, и одну землю производящую людей. А какой-нибудь герой может требовать например 2 ресурса, и три производства людей (не знаю как правильно словами описать такое), то есть это может быть одна карта столицы дающая 3 людей, или 3 деревни дающие каждая по 1 (помните, земель всего 5)
И не забываем - они - цель игры.

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

Вот из моих рабочих документов один из разделов правил - действия игрока(магии пока нет):
Призыв существ
Это первое и самое важное действие игрока. Призыв существа позволяет выставить карту существа на стол. Но только при следующих условиях:
  • Есть хоть одна свободная клетка в зоне 3Р
  • У игрока есть достаточное число ресурса чтобы оплатить вызов этого существа
  • Есть соответствующая земля/земли (некоторые существа требуют нескольких) которая способна производить таких существ, и она еще не была повернута.
Если эти три условия выполнены, существа помещается на любую свободную клетку 3Р по выбору игрока в повернутом виде (то есть не может действовать в этот ход, за исключением способностей действующих при вызове)
Поворот земли
После того как существо было выставлено, одна из земель будет повернута автоматически. Тут действуют следующие правила:
  • Поворачивается только неповернутая земля и только если она вообще способна производить таких существ
  • Сначала поворачиваются земли производящие только этот ресурс в максимальной цене. (если существо требует 2 городов, и на столе есть деревня дающая 1 человека, и город дающий 2 человека, то будет повернут только город)
  • Затем поворачиваются только земли дающие этот ресурс в меньших количествах.
  • Затем поворачиваются мультиземли, призводящие этот ресурс в большем количестве
  • Все остальные земли.
Собственно обычно это единственное действие земель

Действие существа
Каждое существо может совершить одно из следующих действий (и только одно):
  • Движение
  • Атака другого существа
  • Лечение
  • Способность
При этом игрок может выполнять по одному действию всех своих существ.
После выполнения одного действия карта поворачивается.

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

Осада земли
Цель игры - уничтожение вражеских земель. Поэтому есть смысл как можно быстрее двигать своих существ на карты земель. Как только существо из клетки 3Р пытается встать на клетку З, то это считается осадой. От жизней данной земли отнимается атака существа.
Данное поддействие выполняется автоматически. Его не могут выполнять те, кому недоступно движение (летающие)

Уничтожение земли
Если количество жизней земли станет равным 0, земля уничтожается и убирается с поля боя на кладбище. Напавшее существо возвращается в колоду (типа грабит земли и некогда воевать). Если же жизни земли еще пока больше 1 - существо уничтожается (убито местным ополчением)

Атака
Существо может атаковать других существ. Атаковать можно любое соседнее существо (но не по диагонали). При у этих обоих существ от их жизней отнимается атака. Если у одного или обоих жизни упадут до 0, то он/они погибают.

Лечение
Существо может восполнить одну свою жизнь за ход

Способность
Существо может применить некоторую способность. У способности есть свои правила (например выстрел)

вторник, 2 сентября 2014 г.

Новый проЭкт (?)

Наигравшись в Hearthstone, я вспомнил что когда-то, когда ККИ были еще не модными (и существовала только она ККИ - Astral Master), я тоже хотел такое запилить. Дело в том что я люблю и варгеймы, ККИ, и настольные ролевые игры (хотя при этом не имею никакой возможности в них играть - не с кем, нечем, лень возится с кучей пластмассового/бумажного мусора).
Фейл с битвами фентези все ближе и ближе - кажется проект заглох и умер.

Попробую тогда ККИ - они попроще:) Сначала я хотел сделать Warhammer Invasion, потом стукнуло попробовать MTG (при том что у этой и так есть сотни всяких компьютерных реализаций).. Но в конце концов я решил - хватит юзать чужое. Лучше придумаю свое

Вообщем сейчас обдумываю правила. Не хочется делать клон вышеперечисленных ККИ, но походу в них уже все придумали - то получается клон MTG, начнешь все менять - получается клон Берсерка, начинаешь менять - вообще покемонов получаешь (есть и такая ККИ)

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

В моем проЭкте игрок будет - властелином или императором. А что определяет могущество императора? Жизни/Сила/Живое Мясо? Нет. Земли. Тот у кого их больше - тот и могущественен.

Вся моя ККИ будет крутится вокруг земель. Земли - это карты. У игрока в колоде будет допустим 25 земель (это будет лимитировано), и 5 земель входит в игру в самом начале. Потеря всех своих 25 земель это и есть полное поражение. На столе может быть не больше и не меньше 5 земель (их можно будет менять с теми что в руке за очки), потеря земли автоматически вводит новую на ее место. Но активны всегда только 5 земель

Земли работают также как и в MTG - они при повороте дают определенную ману, за которую можно призывать новых существ и заклинания.

Земли уничтожать можно только существами - надо подвести существо на карту вражеской земли (поле боя будет как в берсерке - из нескольких ячеек). И конечно же враг не даст этого сделать выставляя на пути своих существ и другие препятсвия

Вот такой корень моей ККИ.

Сначала хотел сделать в юнити, но там фигня, а не 2D (в теме ограничений юнити на gamedev.ru есть мой пост)..

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

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

Хотя что меня радует - я перестал активно заниматься движками:) Да, я почти излечился от этого, и наконец-то начал думать об играх. Посмотрим - какая из моих идей доживет до релиза

вторник, 29 июля 2014 г.

Откопал код Unreal :)

На бетаархиве натолкнулся на очень интересные исходники - исходники Unreal Engine 1 (на самом деле даже не 1, а 0.82 и 0.86) Там же еще были исходники Unreal Tournament 2003 но меня они пока не очень интересуют (хотя заметил что там появился GAPI OpenGL который позже изчезнет из движка и вернется только в UE4)

Ну так вот, кто не в курсе, на  Unreal Engine 1 вышла вполне неплохая игра Unreal в 1998 году. Исходники которые я нашел, датируются 1996 и 1997. Далее я собираюсь смотреть только  0.86 (1997 год)

Код пока только открыл, так что тут особо нечего сказать, но вот что заметил:
- эпиковский кодестайл был установлен уже тогда
- можно почитать дневник  разработки и заметки с идеями от самого Тима Свинни:)
- кода по ходу уже много - LocMetrics (после удаления зависимостей) показал 100 тысяч строк
- движок (судя по логу) сразу затачивался под шутеры, а также под то что будет делаться на десятилетия (прямо в кодестайле написано:) )
- Рендеры пока увидел - glide, DX 3 (вот бы тот чувак с gamedev.ru  который когда-то хотел его изучать  обрадовался бы) и DX 5. OpenGL не вижу. А ведь DX еще не был популярен. Википедия пиздит, что эпики DX прилепили уже под релиз (в связи с его возрастающей популярностью). Он был и в 1996 году в движке, так что ничего они там сбоку не приклеивали, а сразу делали
- ну и UnrealEd написан на бейсике если кто еще не в курсе. Вот ведь, движок почти не меняется за эти восемь лет, а редактор все время переписывают (потом он будет на wxWidget, сейчас он на своем гуи - Slate)

понедельник, 10 марта 2014 г.

Игра моей мечты

Когда-то давно мне пришла идея одной игры, где игрок будет строить дом, выращивать огороды и подобное. При том что майнкрафтов и ферм тогда еще не существовало. Я думаю, это одна из тех нескольких идей, которые направили меня на путь программиста, потому что тогда я конечно же не обладал нужными знаниями чтобы эту идею воплотить. Первоначально я хотел воплотить эту идею в игре жанра roguelike. Но как-то не сложилось. Вообщем идея  пылится на полке уже многие годы. О, как раз и перечислю эти идеи игр, которые бы я хотел создать, но пока нет нужных талантов:
- эмулятор настольного варгейма. Делаю сейчас - битвы fantasy. Но медленно:(
- реалтаймовая стратегия в стиле warcraft. Вообщем не очень игра мечты, но может когда-нибудь соберусь воскрешать Dark War
- игру в стиле Might and Magic 6. Данный блог кстати начинался именно ради этого:)
- и вообще симулятор жизни героев, где герои могут жить в мире - то есть строить дома, воевать, заниматься ремеслами. Ну это конечная игра мечты, и ее я не возмусь делать еще  ближайшие десять лет:)

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

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

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

Так что вот. Буду потихоньку пилить. Потихоньку, потому что работа, движок, удаленный проект и битвы fantasy... А еще аниме, так что времени остается мало:)
По этой же причине проект решил начать делать на unity3d. Мне вполне хватит его возможностей.

Немного распишу текущих подробностей:

Гномы (дварфы точнее)
Да, я тоже буду делать про дварфов. Просто это реально интересная раса. Люди? Градостроительных игр и так много. Эльфы? Скучно. Гоблины? И что они там строят?

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

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

Непрямое управление
Как и в df. Вы отдаете приказы. Гномы их выполняют если имеют соответствующие работы, и тогда когда это возможно для них.

Ну вот как-то так. Вчера возился с рендером:



Это если что, на паузе, а не в ручную кубики расставлены:). Здесь общее число кубов - 50х10х50. Сделал все из стекла, чтобы протестировать прозрачность и возможную ситуацию когда весь мир прозрачен. Так то все нормально, бьется на чанки, сектора, геометрия формируется по видимости. FPS нормальное.

Вообщем теперь есть рендер блоков. далее буду пилить генерацию острова и управление камерой. После чего попытаюсь научить гнома копать тунели.


воскресенье, 2 февраля 2014 г.

Наш проект на гаймджеме

Вот проект, над которым я сейчас работаю:
http://projects.gamesjam.org/projects/163/

Поддержите:)

суббота, 25 января 2014 г.

Мысли о движке

Давно не писал, все как-то времени не было. Сегодня я решил написать про то, как именно разрабатывается Amethyst Engine (ранее Sapphire Engine).

Почему пишу движок, а не игру?

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

Ну так вот, я начал свой движок, и знаете что обнаружил? Интерес к движку не угас ни через неделю, ни через месяц, ни даже через год!!!. Я уже второй год пишу движок, и буквально недавно под новый год, я решил сделать огромный апдейт движка - и целых две недели по 16 часов работал над кодом - реально, садился утром (часов в 9) за код, в три ночи шел спать. С перерывами конечно, но при этом то чувство энтузиазма не заканчивалось даже при полном физическом истощении.

Так что движки - это то, чем я мечтаю заниматься в жизни. Жаль что сейчас из-за всяких unity сложно найти такую работу (хотя я и такую-то еще не нашел:( )

Так я и начал писать свой Сапфир. 

Позже мне пришлось на практике изучить unity 3d. И познакомившись с ним на практике я тоже оценил этот движок. Но в отличие от других игроделов, мне не пришла мысль "я не смогу написать такой движок, больше не буду его писать, а буду теперь на юнити". Эта мысль, к моему сожалению приходит ко многим значимым людям (например Аврелий бросил свой движок по этой причине). Но мне же пришла другая мысль - "я смогу сделать такое же, и даже лучше"... Нет, я должен сделать такое же или лучше:) Возможно причиной было то что я также ковырял юнити и с технической стороны (например сразу же просмотрел его PIX), и то что я увидел - меня не впечатлило.

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

Почему бы не писать чужой движок?

Тут я что хочу сказать - я не любитель велосипедов. У меня не жжет в одном месте если я юзаю Boost там, или STL или еще что-то чужое. То есть у меня нет болезни писать свое.
Но тогда почему я пишу свой движок? Движок я пишу потому что мне нравится возиться с технической частью, а это нигде больше нельзя реализовать - в играх движки уже готовые, там надо другими вещами заниматься, над реальными движками я не работаю, по причине того что такой работы в России - единицы и туда надо еще переехать (что я не могу). Работать над опенсурсными... Кроме огра и ирлиха, нигде нет большого сообщества (в основном все пишут в одиночку). И при том - это надо ковырять чужие костыли (а в огре и ирлихе их полно). Да даже если бы я нашел (предлагали уже), ведь это надо потратить очень много времени на то чтобы освоиться с этим движком, а я хочу писать сейчас, а не потом.
Да и еще - я хотел интегрировать несколько своих идей (модульная система, система зависимостей, разделение на библиотеки, событийная система, некое подобие компонентой системы, скрипты на С++), что вряд ли понравилось бы авторам движка (а впихнуть эти идеи даже костылем сбоку нереально - надо полностью переписывать всю архитектуру)


Два года, а не много ли?

Да, идея писать свой движок пришла мне где-то два года назад (может и раньше). Так почему так долго?
  • У меня нет профессионального опыта.... никакого (я не зарабатываю на играх и их разработке). Многое приходилось изучать сразу же по мере надобности, о многом я просто до сих пор не знаю
  • Переписывание движка. На самом деле я не писал один движок. Я писал много движков. Из-за отсутствия опыта, я бросал старые наброски и начинал с нуля, потом снова бросал и снова с нуля.... и снова, и снова.
  • Методика которую я выбрал. О ней ниже.
  • Нерегулярно занимался движком. Несмотря на весь энтузиазм, я не работаю над движком каждый день. Иногда простои были месяцами (другие проекты, учеба, другие занятия и т.д.). Это самая главная причина, по которой я так долго пишу.
Так что на самом деле, если бы я взялся со всей серьезностью и имея опыт, я бы написал движок текущего уровня за пару месяцев (перевод сапфира в аметист, это доказал)

Как я пишу свой движок?

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

Я не люблю велосипеды:) Так зачем писать все с нуля, если многое написано до нас. И мне нравится писать не велосипеды, а возится с готовой (!!!) технической частью, которую я могу изменить любым желаемым способом.

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

Но это не форк  того движка... От него там все меньше и меньше - в идеале я собираюсь вообще выкинуть весь код. Он был нужен для быстрого старта, не более.

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

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

Что интересно, я сейчас читаю книгу Фаулера "Рефакторинг". Так вот, я умудрился опробовать все что он там пишет на практике. То есть пока другие читают книгу и пытаются запомнить, я все это пробую на реальном и довольно таки сложном проекте (200 тысяч строк это не приветмир)

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

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

Так что я получил при этом?

Благодаря такой методике я получил:
  • офигенный опыт работы с чужим кодом. Позже я участвовал в нескольких игровых проектах в которых уже была огромная кодовая база (в последний раз я работал уже над законченной игрой - писал для нее патчи), где и убедился - чужой код для меня не проблема - он почти такой же, как свой.
  • плавающий кодестайл. Я научился воспринимать разный кодестайл. Конечно у меня есть свой личный, но и чужой меня не пугает (даже если это кодестайл от Microsoft), что опять же будет большим плюсом на работе
  • увидел реальный коммерческий продукт. Выше я писал - у меня есть в том числе и всем известные ААА движки в виде кода. Где еще я бы смог с этими движками поработать? Где еще я мог увидеть код реального продукта?

Будущее движка

Собственно движок более менее рабочий (на нем я пишу битвы fantasy). В нем есть OGL и DX 11.
Так что 2014 я решил посвятить разработке визуального редактора (я же хочу писать убийцу юнити), и созданию демонстрации движка.
Надеюсь к 2015 году наконец-то выложить движок для его оценивания

Движок не будет опенсурсным - нет смысла.