Масштабирование всей игры без мыла и дрожания (финальная версия)

GameMaker

Пост относится только к GM8.1. У Студии есть такая же проблема, решается ли она — не читал, но какое-то обсуждение на официальном форуме было. Да скорее всего решается, просто функции другие и надо пересоздавать сёрфейс если он вдруг пропал (вечная беда главная фишка Студии).

Техника, которую я описываю в этом посте, собирает в себе опыт Йеовского копания в этом вопросе в 2011 году, ответ (2013) и дополненный ответ (2014) от некоего юзера Blue на gamedev.stackexchange.com, который на самом деле основывается на бородатом ответе на форумах Гейм Мейкера времён 2008-2010 (уже не удаётся найти через поисковик), и мой собственный, отработанный на Castle of no Escape и окончательно отфильтрованный при попытке встроить это «безмыльное» масштабирование в Princess Remedy in a World of Hurt.

Суть проблемы: при использовании встроенного масштабирования в GM8.1, на многих системах получаем мыло, тогда как нужны чёткие квадратные (или хотя бы неразмытые) пикселы.


Читать дальше...

КсиТехнология-02 — послойное рисование спрайтов в заданной палитре

GameMaker

Спойлер
показать

(анимация очень цветастая, большая и быстрая — осторожно! специально спрятал в спойлер)

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

В Shovel Knight для этого использовали пиксельные шейдеры. Но в ГМ8.1, который я использую сейчас для Castle of no Return 2, и тем более в ГМ6.0, который я использовал во время придумывания этой технологии в 2008 году, когда Дрейк делал уже третью часть своей фан-игры по Мегамену, шейдеров никаких нет. Думаете, я остался доволен? Думаете, они нужны? Нихрена подобного! Подробности — под катом.


Читать дальше...

Синусоидальный эффект графического изображения

Графика

 

 

//draw_sprite_sine(angle, amplitude)

for (i=0 i<sprite_height i+=1)
draw_sprite_part_ext
(
sprite_index,image_index,
0,
i,
sprite_width,
1,
x-sprite_get_xoffset(sprite_index)+sin((argument0+i)*degtorad(argument1))*argument1,
y-sprite_get_yoffset(sprite_index)+i,
1,
1,
random(c_white),
image_alpha
)

GM 8.1, но должно работать и в GM:S, draw_sprite_part_ext там есть.

Тут ещё помимо самого эффекта я докрутил сверху рандомную перекраску строк, ну это уж знающие люди разберутся.

Game Maker Language и так называемые Настоящие Языки Программирования

GameMaker

Это репост резервной копии моего поста с Гамина, датированного 20.12.2013. На момент этого репоста (04.11.2015) я уже перешёл на лицензионную ГМ Студию и в 2016, возможно, заработаю на этом что-нибудь с презираемого труъ-инди рынка мобилочек. Но ничто не поможет мне забыть то, какой крутой потенциал пред-студийного GM был просран. Когда вспоминаю об этом, убеждаю себя, что нечто такое ещё появится в недалёком будущем, по уровню удобства IDE для сборки готового проекта, и по уровню кастомизации «каждый игрок=разработчик, если хочет». Оно просто должно появиться.

P.S. Не-а, в 2016 я забросил Студию обратно, уж больно она бесит. В апреле 2017 приходится таки вернуться, для нужд кросс-платформы. Но до Андроида пока далеко, и мобилочки не интересуют.


Game Maker Language и так называемые
Настоящие Языки Программирования

или

Скриптинг против кодинга, разработчики игр
против программистов, мёд против пчёл

а также
Среда разработки Game Maker против MS Visual Studio/SharpDevelop/CodeBlocks/Eclipse
и, кажется, каких-то ещё IDE, которыми я пользовался мало, и названия которых я забыл

 

Важное замечание: в этой статье я говорю о том GML, который был в Game Maker 8.1, потому что к GML в Game Maker Studio не относится добрая половина этого текста (причём та половина, которая описывает его уникальные возможности — уже, как понимаете, бывшие). Также я говорю об IDE той же версии 8.1, которая с 2011 года изменилась по большей части в сторону кросс-платформенных настроек, поддержки костной анимации и чего-то совсем уже отстранённого от её настоящих проблем. Таковые я в этом тексте упомяну в деталях, дабы попытаться развеять несуразное распространённое мнение о том, что в GM уже «всё за вас сделано».

 

Прежде всего, хочу заявить, что GML — весьма недооценённый язык программирования для создания игр, использования всей мощности которого я не видел ещё ни в чьём исполнении. Я не имею в виду, что он позволяет сделать любую игру за три строки кода, и также я не имею в виду, что его синтаксис позволяет программировать игру как-то особо быстро. Однако посмотрите, что есть в GML:

1. Интерпретатор кода на лету

Если вам заранее неизвестно, какой конкретно код вам нужно будет выполнить в какой-либо момент игры, вы можете собирать его динамически, прописав соответствующие инструкции, и выполнить его через execute_string. Вы также можете читать и выполнять код из внешних файлов, и даже вовсе не хранить никакого кода внутри проекта. С таким подходом любой файл с GML-кодом является по смыслу чем-то вроде DLL, только не надо возиться ни с заголовочными файлами (C/C++), ни со сборками (C#). DLL при играх по большей части используются для громоздких и сложных вычислений, или рендеринга, а GML для вычислений не приспособлен, и справляется с ними довольно медленно. Тем не менее, для своих внутренних задач такие фрагменты повторно используемого кода вполне могли бы быть полезны.


Читать дальше...

Камень-Ножницы-Бумага

Цех имени DarkDes'а

Всем доброго времени, товарищи!

Хотел похвастаться и поделиться игрой, которая по сути планировалась как простая версия всеми известной игры «Камень-Ножницы-Бумага», но в процессе разработки она чуть изменилось, но суть вообще-то осталась прежней… почти.

И так, всё это делалось примерно месяц +- несколько дней.  Хотел успеть за три недели, ведь «что может быть сложного в реализации игры КНБ???1771».

А игра-то называется очень скромно — Super Rock Paper Scissors Game Tournament


Читать дальше...

Обнаружение события загрузки игры

Программирование

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

Но так как всё это делать сложно, и, наверное, не целесообразно (а мог бы игры делать), а код, который я написал в рамках этой работы, относится к уже стремительно устаревающему Game Maker 8.1, то я позволю себе просто привести его здесь, и задать вопрос невидимому гипотетически существующему любопытному читателю — а что же мы получим в результате его выполнения?

В Create:

x=0
alarm[0]=50
game_save('1')

if file_exists('1')
    show_message('saved')
else
    show_message('NOT saved')

game_load('1')
x=3
show_message('loaded, x='+string(x))

В Alarm 0:

show_message('x='+string(x))

Шестерых тошнит

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

Году эдак в 2005 у меня появился Интернет. Связь была не очень, 20 мегабайт информации из Сети стоили как обед в школьной столовой (т.е. нормальную игру было скачать не то чтобы невозможно, но невероятно дорого), а на первых порах она вообще обрывалась от того, что кто-то на верхнем этаже включал в коридоре лампочку. Короче, решил я, нужно делать игры самому. Скачал Game Maker бородатой версии, поклацал примеры, идущие с игрой, ничего не понял (искать какие-то сайты на русском языке мне тогда было невдомёк) и забросил эту затею.


В старые добрые времена в Интернет необходимо было заходить с помощью данной программы.

Читать дальше...

Game Maker (и его Game Maker Language) — не то, чем кажется (дубль 1337)

Недавно Дрейк подкинул мне серию статей на тему «Creating a Commodore 64 emulator in GameMaker». И знаете что? Я офигел.

Разумеется, Commodore 64 это не ахти какое сложное устройство, но, всё-таки, эмулятор? На якобы «каком-то там гейм-мейкере»?

За последние 8 лет я встречал достаточно много людей, которые считают Game Maker чем-то несерьёзным, так, игрушкой для играния в разработчика игр. Хотел бы я услышать, что бы они мне сказали на это теперь. На GML всё ещё нельзя скомпилировать DLL, кто же спорит. Он никогда не обгонит C++ по скорости работы. Но то, что на нём кто-то написал — нет — написал, как написать эмулятор — это знаково. Единственное, что жалко — так это то, что сам этот факт не очень-то доказывает мою основную точку зрения — языки программирования общего назначения для разработки игр не более уместны, чем узконаправленные встроенные языки программирования, ограниченные собственной средой выполнения, если уместны вообще. Однако, к этому я вернусь позже.