Как стать автором
Обновить

Комментарии 93

Png — очень простой формат. Я однажды декодировал его на js для смены цветов палитры в разных уровнях.
Ну я бы не сказал что прям простой. Вот классы для работы с ним на Delphi. Там и сохранение тоже, конечно, много отжирает, но загрузка большая и сложная. Всё-таки формат со сжатием.
Действительно, я же там только с палитрой играл, а не с самим сжатием и картинкой.
Открывал файл при помощи TPNGImage в Delphi XE6 и попиксельно из Picture.Canvas.pixel[x, y] сохранял цвет в файл. Какая реализация внутри, не знаю.
Собирается ли игра под linux? И если нет, то будет ли?
Собирал только на KolibriOS и другие системы не рассматривал. Linux никогда не использовал и видел его только один раз. Так что вероятность очень мала.
Там же компилятор MSVC (VS 2013) используется — какой Linux?
Но сурсы на С++, значит можно попробовать собрать и под Linux с минимальными переделками же. Или я не прав?
Ну, с переделками любая программа на C++ соберётся под Linux. Только я не знаю, сколько именно нужно будет переделывать конкретно в случае LaserTank. Изменять нужно будет 2 вещи:
  • Код, специфический для MSVC (VS 2013) — менять на GCC или другой компилятор, который есть под Linux
  • Код обёрток функций для KolibriOS нужно будет переписать под API Linux
В целом собрать можно, но нужно реализовать API для работы с графикой и т.п:

kos_PutImage(RGB*, short, short, short, short)
kos_WindowRedrawStatus(long)
kos_DefineAndDrawWindow(short, short, short, short, signed char, long, signed char, long, long)
kos_WriteTextToWindow(short, short, signed char, long, char const*, long)
kos_SetMaskForEvents(long)
kos_WaitForEvent()
kos_GetMouseState(long&, int&, int&)
Можно использовать SDL, например
Привет, спасибо!

Скомпилил под арчиком и запустил, теперь надо в AUR опакетить.
Смотри, я не пытался отходить от канонической работы с ресурсами: они ищутся только рядом с бинарником, не в текущей директории. Т.е. если опакечивать, то использовать примерно такой подход:
/usr/share/laser-tank/ — бинарник, ресурсы
/usr/bin/laser-tank или любой другой скрипт, примерно такого содержимого:
~~~
#!/bin/sh
cd /usr/share/laser-tank
./LaserTank
~~~

Да, кстати, отстройку для KolibriOS если кто может проверить — проверьте. Я попытался сделать так, что бы и для того и для другого собиралось. Там были минорные испрвления, может, теоретически, что-то поломаться.
Да это понятно, я всё в /opt засуну и сприптом запускать буду
Была версия меню, которая смотрелась несколько живее за счет дополнительной пост-обработки. Разного рода блички и другие мелкие детальки. В качестве некоей демонстрации разработки «за кадром». Что в результате попадает в игру, а что нет.


Господи, я так спешил с разработкой, что забыл заменить фон, печаль. Спасибо, что напомнил, после голосования заменю.
У меня есть одна черта. Вредная для фрилансера. Привязываться к некоторым заказам. Теоретически самый лучший подход — выполнил задачу и вычеркнул из памяти. Хотя бы потому, что это уже не твоя графика, но контент заказанный заказчиком и сданный ему. Тем не менее периодически это происходит.

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

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



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

Релиз игры произошел в 2003, разработка была длительной учитывая нехватку свободного времени и опыта и началась ориентировочно в 2001 году. Стало быть прошло от 12 до 14 лет.
Посмотрел, подумал. А ведь и правда уже просто столько лет. Ёмоё. И я (несмотря на ужаснейший код игры) всеравно считаю её практически лучшим что делал. Возможно из-за законченности, конечно. Надо бы её пересобрать под quad-engine.
А расскажи, почему такие старнные блоки и странный танк в итоге получился. Посмотрел и даже не поверил — после всех твоих крутых постов.
Как по мне — вполне нормальный танк и вполне нормальные блоки. Не говоря уже о том, что контент, вообще-то, имеет разную цену и как следствие разное качество. Это вообще частенько происходит.
Я очень надеюсь, что цена хотя бы была ниже $1,000 (суммы приза за 1 место) :-)
Не самая лучшая черта считать чужие деньги, но вам не стоит переживать. Автор в любом случае уйдет в плюс.
Я уже в плюсе, ведь мне дали стимул изучить что-то новое. Я впервые писал на С++, познал тайну звездочек и получил удовольствие в конце концов.
Это самый лучший плюс. Двойной. И делом любимым занимались, и достигли им результатов. К примеру, разрабатывать игры и не иметь с них дохода не так весело. Или иметь доход, но не разрабатывать игры. Второй вариант и вовсе скука смертная.
Не самая лучшая черта считать чужие деньги, но вам не стоит переживать. Автор в любом случае уйдет в плюс
Weilard — Я наоборот, за ZblCoder переживал — было бы жаль, если бы он остался в проигрыше, даже если работа займёт первое место. Очень рад, что это не так! Я же не спросил, сколько именно (с точностью до рубля) это стоило.

Я впервые писал на С++
Это самый лучший плюс. Двойной.
Прямо игра слов получилась :-)
Понял yogev_ezra. Забираю свои слова обратно. Мне тоже хотелось чтобы он победил. Причем победил в любом случае, вне зависимости от места. Первого, второго или третьего — не суть.

Главное чтобы гейм-плей был подчеркнут более или менее неплохой графикой. Которую, как верно было подмечено, мы делали аккурат под Новый Год, когда другие бегали по магазинам (нам тоже очень хотелось, но случились дела).

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

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

Графику [...], как верно было подмечено, мы делали аккурат под Новый Год, когда другие бегали по магазинам (нам тоже очень хотелось, но случились дела).
Вам ещё повезло: у нас «Новый Год» вообще в сентябре, а на мой родной советский Новый Год приходится идти на работу, как в обычный день. И это при том, что во время основной работы нужно было следить за конкурсом, и помогать участникам с проблемами авто-сборки, а все, как всегда, ждут до последнего момента :-)

А на следующий день у меня ещё День Рождения (да, в моём профиле на Хабре «Дата рождения» заполнена правильно — у меня на самом деле он 1 января), который тоже хочется отметить. Но зато получил море позитива и персональный подарок на День Рождения — целых 10 новых игр для KolibriOS :-)
Да что за звездочки?
Указатели в С++. В данном языке всегда пугало огромное количество * в коде. И поэтому я начинал писать на Delphi, он дался проще, я же самоучка.
Ну, я так и подумал. Просто такой синтаксис указателей — это специфика c, а не c++.
Я, кстати, такой же путь прошел от Delphi к плюсам и дальше)
Ну если чесnно, я начинал с Web'a, делал сайты, потом это все наскучило, нет реалтайма, и я пошел играть в ActionScript, но он мне не понравился. Тут я нашел Delphi, и это растопило мне сердце. С++ ковырял, в Borlond, 97 года, но особо ничего не сделал.
НЛО прилетело и опубликовало эту надпись здесь
Соглашусь с ZblCoder'ом, прошел тот же путь.

Нет, синтаксис все же разный. Такие вещи, как объявление указателя, указатель на указатель, работа с указателем на массив указателей записываются иначе. Мне точно так же было непривычно и неудобно. В Паскале и Дельфи указатели записывались так, что интуитивно понятно, что к чему. Понять же, почему, например, принят вот такой синтаксис объявления указателей (мнемоника) я смог только после КиР. И точно так же изучение Си и плюсов было отложено «из-за звездочек», хотя на тот момент я много писал на ассемблере, и указатели были естественным делом для меня. А вот синтакс не пошел, невкусно было.
НЛО прилетело и опубликовало эту надпись здесь
а в Паскале и Дельфи как встретишь '^', так впадаешь в ступор на пару секунд «а что же тут такое имеется в виду, что такое делается и зачем?

В простом случае никакой разницы — что *abc, что abc^.
Почему вы считаете, что звездочка интуитивно понятнее каретки? Правильно, потому что вы привыкли. Другие привыкли к другому. Дело даже не во вкусе, кмк.

А уж указатели на указатели в Паскале выглядят вообще как тихий ужас

Отлично выглядят: понятно. Тяжеловесно, ага. Зато не приходится составлять правила «как читать C type declaration»
И вот таких сайтов по Паскалю/Дельфи не встретишь.
НЛО прилетело и опубликовало эту надпись здесь
Точно так же начинал с ассемблера.
Не вижу, где подобное по ссылке выше char *(*(**foo[][8])())[] «прям чистые и естественные [bx][si][di]». То, что [bx] то же что и *abc, то же что и abc^, ничего не значит, это примитивные примеры.

Наверное можно как-то, сначала наопределяв кучу новых type, но это получится такой огород, в котором сам чёрт ногу сломает.

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

Так что не изменяю своё мнение, на вкус и цвет все фломастеры разные

Бесспорно.
У художника был очень срочный заказ, ведь на всю работу у него было буквально пару дней. Я написал ему за 7 дней до Нового Года, да и дела могут уже быть у человека. Первые переговоры были около 5 часов утра. В общем не очень благоприятные условия для творческой работы, но мастер показал себя с хорошей стороны.
Вы зря это написали (смеется). Лишняя почва. В каждой второй или третьей конторе с которой я работал всегда находился человек, который говорил «да у нас есть человек, который за два часа подобные вещи делает», и самый лучший ответ из имевшихся у меня был «вот пусть он и делает, к чему вам я?».

Критиковать всегда легче, осуждать и порицать — тоже. Для этого всего-то нужно набрать пару строчек с ошибками и дело в шляпе. Мнение оформлено. Занимает секунд двадцать. Выяснять почему что-то сделано так, а не иначе, какие были условия разработки, какие сроки, какие инвестиции — зачем?

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

И ради бога… завязывайте с «мастером» (смеется). Я не он. Просто более или менее подкованный крендель.
О! Подкованный крендель это то самое определение, что я искал последние пару недель. Шикарно!
Как бы эта формулировка не прилепилась, как это часто бывает. Ну да ладно. Я переживу.
И ради бога… завязывайте с «мастером» (смеется). Я не он. Просто более или менее подкованный крендель.
Ну я всегда стараюсь сравнивать с собой, а я рисовать никак не умею, даже цвета подобрать не могу. Поэтому, мастер, но больше не буду.
Если уж на то пошло, то раскрою один небольшой секрет: за видео-обзор игр для конкурса я тоже немного заплатил блоггеру. Не вижу ничего постыдного в том, чтобы заплатить кому-то, кто может сделать лучше тебя (а сам я могу снимать видео-обзоры только так — т.е. грубо говоря «никак»).

P.S. И рисовать тоже не умею никак. Вот понадобится нарисовать графику для игры или баннер — теперь буду знать, к кому можно обращаться :-)
Исходников графики нет в svn? Что с лицензией на код и графику?
Есть желание сделать пару портов.
Лицензия GPL. Файл лицензии добавлю в SVN после голосования. Но есть одно но, в данный момент я изучаю Unity3D и делаю эту же игру в ней. Там можно будет портировать на многие устройства. Рад, что игра на столько понравилась.
Unity overkill тут по моему :)
А вот кросс-платформу под *nix было бы интересно сделать.
После этого портировать можно будет куда угодно.
Под Windows уже портировали (правда, по словам самого автора порта, "Порт сделан быстро, грязно и на куче костылей").
НЛО прилетело и опубликовало эту надпись здесь
Спасибо, забавный баг, после голосования внесу изменения.
НЛО прилетело и опубликовало эту надпись здесь
Да, причина очень простая, я забыл на 15 уровне поставить стартовую позицию. Редактор доступен тут, вместе со старой версией игры.
Здорово.
Остановился на утилите автоматического создания проекта под Visual Studio под компилятором FASM — это один из самых простых способов, при котором компиляция из среды сразу же создавала запускаемый файл приложения для Kolibri.

Не затруднит пояснить процесс, как происходит компиляция? Из плюсов в асм, потом FASMом в исполняемый файл Колибри? (у нее свой формат ведь?)
Я выбрал этот способ из-за того, что не нужно знать принципа компиляции.
Просто в утилите, нужно указать название проекта и путь к Fasm, и рядом в папке создается новый проект для VS в котором все настроено. Его открываешь и сразу делаешь билд, сразу появится запускаемый файл для KolibriOS с надписью «Hello World».
Все же — Студия генерирует листинг, который потом транслируется Fasm'ом?
Вопрос не по адресу — ZblCoder всего лишь пользователь. Нужно спрашивать CleverMouse — это её разработка.
Кто-то ведь знает в общих чертах, как оно работает, кроме автора?
По исходникам понятно. Изначально добавляется заголовок, потом постпроцессинг с копированием информации из секций.
Не думал, что Fasm так разрастется. Очень гибкий инструмент получается, если такие конструкции позволяет:

if CurRelocType=0
else if CurRelocType=3
load z dword from RelocItem-TextRVA
store dword z-(TextRVA+ImageBase) at RelocItem-TextRVA

в .asm файле

или из документации:
repeat $-$$
load a byte from $$+%-1
store byte a xor c at $$+%-1
end repeat
кодирование на лету.
Судя по создаваемым файлам, сначала среда делает билд и собирает exe файл, после, по прописанной в настройках проекта команде, идет запуск FASM с параметрами, тот создает (видимо из exe) файл для KolibriOS.
>немного мешала непереносимая ненависть к С++, но борьба с ней помогла таки понять тайну звездочек в языке

Это не абсолютно универсальное правило, но по большей части в современной программе на С++, написанной с использованием стандартной библиотеки С++ 11 (14), вообще не должно быть звёздочек в смысле работы с сырыми указателями (кроме как для разыменования this). ИМХО.
Ну ненависть не только из-за звездочек. После длительного использования Delphi сложно переключится на С++. Хоть они и одинаковые по возможностям, но мелочи различия очень мешают переходу.

На работе я пишу на Delphi + SQL и постоянно комментирую код в SQL через "//", в Delphi через "--". Хоть нужно наоборот, беда прям какая-то.
Ресурсы тут, спасибо за подсказку, добавил в статью.
Спасибо, попробую запустить в Linux.
Кто хочет под Linux пощупать: github.com/h4tr3d/laser-tank/

сборку проверял на Min 17.1, нужно доставить пакеты: libsdl2-dev, libsdl2-ttf-dev ну и cmake (хотя можно собрать и просто командой make).

Код не супер, плюс SDL2 чисто по докам прикручивал :)
Спасибо за труды, но увы, проверить не смогу, не знаю Linux, вообще.

Отписался на форумах IGDC и KolibriOS
Ага, ну как минимум overmind86 оказался заинтересован и уже опробовал. Для себя сделал just for fun. Плюс сохранил возможность сборки и для KolibriOS, по Windows тоже можно будет собрать, но у меня пока нет SDL собранного под Mingw32 (по сути, все ifdef __linux__ поменять на __linux__ || WIN32).

Понравилось, что здраво были сделаны абстракции, по сути, я просто подсунул свою реализацию нужных колбеков. Если постараться, то кроссплатформенность можно было бы сделать ещё более бесшовно. Но развернуться, по настоящему, можно только в платформенно-зависимом коде /как понимаю STL для Kolibri нет?/

Непонравилось, что не зная ассемблера, бывает трудно :) Смутили команды FPU.

Код, конечно, причёсывать и причёсывать :) Я вам пару слов отпишу, вдруг опять судьба с С++ сведёт ;-)
Сделал быстрый порт на MacOS X (проверял 10.10).
Код все так же грязный, нужно много чего переписывать.

github.com/dlancer/laser-tank/tree/dev
Ох, круто… Может всё же оставить перевод строки как в оригинальном проекте? Вроде же современные редакторы умеют «Automatic detect line end». А то дельта очень уж объёмная получается.

Кстати, а где вы нашли __kolibrios__? гугл сходу ответ не дал
__kolibrios__ это чисто грязный хак (я там еще все дефайны вынес в LaserTank.h), чтобы заменить __linux проверки :)
Но по другому и не сделаешь, в стандартах его все равно нет.
Я пока убил эту ветку, попробуем мелкими коммитами нарастить, чтобы объединять проще было.
Нужно что-то другое для обсуждения придумать, мне тут сегодня слили карму, отвечать раз в час могу.
Для тех кто будет искать: порт под MacOS X живет в отдельной ветке: github.com/dlancer/laser-tank/tree/macosx
Под Linux из этой ветки также можно собирать (только cmake), если есть такая необходимость.
Новых изменений в этой ветке я не планирую.
Будем плавно переписывать основную ветку в сторону большего охвата платформ.
Опередили :)
Я начинал двигаться в том же направления, но отложил на неделю. Думаю есть смысл править уже вашу версию.
Отправил pull request на пару фиксов.
Кстати я не заметил мерцания танка, или оно уже исправлено?
Проявляется когда зажимаешь клавишу движения и не отпускаешь. Но может что-то уже полечилось: немного тюнил отрисовку и обработку клавиатуры.

Кстати, от вас там был запрос про SDL_RENDERER_ACCELERATED? Можете подробнее рассказать?
В MacOS X  10.10 если включить SDL_RENDERER_ACCELERATED, то при движении все окно мерцает и
через раз выводит поверх картинку с экрана выбора уровня.
В общем где-то баг с отрисовкой текстур или что-то в этом роде…
Из похоже по описанию находил, что такой эффект бывает когда смешаны софтовый вывод и аппаратно ускоренный.
В Ubuntu 14.04 (AMD свежие драйвера) с отрисовкой вроде все нормально.

И еще где-то по моему перепутан цвет (или нет красного канала), т.к. картинка не соответствует скриншотам из статьи.
Понял. Протестировать на MacOSX нет возможности, так что если поборете — велком.

По цветам: habrahabr.ru/post/248001/#comment_8229179 уже на гитхабе.
НЛО прилетело и опубликовало эту надпись здесь
Я добавил полностью команду для установки пакетов, проверьте, я не спец по OpenSUSE, вроде там yast2 для установки, хотя слышал про какой-то zypper :-)

А с цветами, покажите скрин? Возможно из-за RGB/BGR.

Всё, понял :) я сразу не обратил внимание, что у меня меню синие вместо коричневых, танк синий вместо красного. Действительно RGB/BGR. В одну строчку — поменять в kos_PutImage() SDL_PIXELFORMAT_RGB24 на SDL_PIXELFORMAT_BGR24, тогда цвета станут такими же как на ролике у автора. А так, пока не скажу где корень проблемы: в том виде как хранится пиксель в ресурсах или некорректно распаковывается в конструкторе RGB/ARGB классов.
НЛО прилетело и опубликовало эту надпись здесь
Вы никогда не видели такую игру как сокобан? (ни слова не нашёл в статье)
Очень много похожего в геймплее, только лазеров не хватало. Вряд ли будут проблемы с авторскими правами (всё ж у вас совершенно другая игра), но явное сходство просто бросается в глаза.
Классический сокобан предполагает манипуляцию с ящиками в одной плоскости. Эту игрушку можно считать развитием идей. Есть второе измерение (вода), есть лазер. Этого достаточно чтобы она не считалась клоном. Это комбинация танка и сокобана, ко всему прочему.

Взгляните на то, что предлагает рынок сейчас. Многочисленные «рескины» даже без изменений. А все почему? Потому что привычное легче продать, и мало что нужно делать. А вот новое никому не нужно. Тут не авторских правах дело, к сожалению. А в том, что сегодняшнему игроку новое не нужно, в принципе. Ну стонет некоторое количество игроков. Да хоть десять тысяч из них. Не они делают кассу и прибыль.

Хотя, конечно, странно. что не был упомянут такой именитый папа. Я о сокобане, конечно. Ведь базовая механика пришла именно из него.
Открыв глубины своей памяти я обнаружил сайт на котором играл много лет назад, и откуда тогда стырил графику. Лазертанк на сайте old.pig.ru. Геймплей содран в принципе с неё, надо было сказать об этом с статье, но указал на старую свою наработку, хотя она тоже была не первой версией данной игры. Также есть еще одна игра, точная копия по геймплею, LaserTank. Так что я не первый, кто сделал такую игру.
По поводу сходства, и настоящего копирования воистину наполеоновских масштабов, можно вспомнить историю игры, которая сейчас известна многим. Обычно никто не акцентирует внимание на том, что Angry Birds, столь успешный и прибыль приносящий был скопирован с Crush the Castle. Если я не ошибаюсь, факт этого заимствования даже упомянут в википедии. Там сказано что разработчики из Rovio вдохновлялись CtC, ну а если не использовать это благозвучное слово, но просто заменить, на вполне обычный термин «содрали», то все встанет на свои места.

Флеш-рынок не более, чем экспериментальная площадка для коршунов (помимо бесплатной развлекательной платформы), что высматривают себе идеи для развития. Потом меняют у них шкурки, и продают. И это политика крупных контор. Ничего не делая получать готовые прототипы для игр. Вполне по человечески.
Ну помню что в игре LaserTank, что я играл, был очень большой раздражительный минус. При стрельбе, летел кусок лазера, как в звездных воинах, пиу-пиу-пиу. И пока он долетит по всем зеркалам, устанешь ждать, а если надо было стрелять несколько раз, вообще забиваешь на игру, после пары попыток.
Тут вообще речь шла не о ремейках, а именно о портах. Не путайте.
Если игра старая, Вы сели и сделали похожую, или даже аналогичную, но с нуля — ремейк.
Если Вы взяли код старый и перенесли на другую платформу — порт.
И портов и ремейков килограммы. Более того в ремейках большая проблема сохранения различных фичей из-за чего оригинальные уровни не работают, например в ремейке под андроид. Сделали бы совместимый современный ремейк — было бы дело.
Это было бы здорово. Я, кстати, за. Стилизовав его, к примеру, под известный в прошлом (и не только в нем) стиль от Bitmap Brothers. Но совместный современный ремейк ради фана — дорогое удовольствие. А вот если нацелить этот ремейк на прибыль дело другое.
Ну автор статьи не утверждал, что он изобрёл паровоз эту игру. Он написал, что он сделал эту игру для конкурса KolibriOS на основе игры, которую он сделал для конкурса IGDC. Здесь всё верно. Правила конкурса не нарушены.

И в KolibriOS уже был Sokoban, но именно такой игры не было, так что наш проект получил новую игру в свою коллекцию. И мы, и автор «римейка» довольны.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории