Дорогой агент

SORE

The interesting tale of Mister Duckfish

Ittle Dew

Gaminator 12. Occupied Place

Посты пользователя

SNDGM — генератор звуковых эффектов на Game Maker Language

SNDGM

Разработка начата мной там, где-то в марте 2014. В планах — сделать генератор звуковых эффектов, который может делать примерно то же, что и широко известный в узких кругах (Ludum Dare, скажем) sfxr, об использовании которого у меня был довольно объёмный пост, и ещё другие вещи, которые сюда слишком долго писать, а в релизе они всё равно будут. Вдохновлён следующими аудио-редакторами и звуковыми манипуляторами: GoldWave, sfxr/bfxr/as3fxr, Caustic (машины Modular и 8-Bit Synth), встроенный редактор семплов ModPlugTracker (позже известный как OpenMPT), ну и моими собственными старыми аудио-поделками.

читать дальше >>

Автоматизированная оцифровка бумажных карт

http://gamin.me/blog/gamedesign/12174#comment-108796

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

Установить:

Условия и ограничения входного изображения.

Формат карт, получающийся на выходе.

Интервью с Эдди Зыковым

Продолжая традицию эксклюзивных Гамин-интервью, предыдущее из которых брали собственно у меня самого, я провёл аналогичное мероприятие с недавно объявившимся на Гамине русским инди-разработчиком, известным в сети как Эдди Зыков.

читать дальше >>

Перевод Iji

Привет, ребята, с вами Кситилон, и сегодня мы попытаемся перевести игру

Это рабочий пост о переводе Iji на русский язык (точнее — как минимум второй попытке перевода, а скорее всего — уже третьей), в котором будет только служебная информация, никакого user/player-friendly контента. В комментариях можно обсуждать детали перевода, в посте всё будет строго по техническому ходу проекта.


http://gamin.me/taxonomy/term/2914/12062#comment-107993 — с этого началась движуха.

http://myothehedgefox.livejournal.com/ — журнал автора прошлых попыток перевода.

http://www.zoneofgames.ru/forum/index.php?showtopic=20348&st=0 — та же попытка перевода.

http://www.old-games.ru/forum/showthread.php?t=42889&page=0 — тоже она.

http://www.remar.se/daniel/iji.php — сайт-источник игры, где также есть переводы.


Задача будет достигнута, когда будет получена такая версия Iji, в которой весь отображаемый текст и спрайты-надписи с текстом — на русском языке.

У нас есть:

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

У нас нет:

  • Лицензионного ГМ5.3 для перекомпиляции. Мы используем крякнутый, и не будем испытывать угрызений совести, так как наш проект некоммерческий, не разжигает межнациональной и прочей розни, и в общем всяко попадает под условия использования, известные как "fair use". Помимо того, GM5.3 это типичный пример abandonware, которое уже не купишь официально, при том что даже хотел бы.
  • Возможности просто перекомпилировать под ГМ8.1 — слетит внутренняя логика движка, после 5.3 Овермарс много раз менял движок коллизий, а также имена, параметры, и смысл вызываемых в этом исходнике функций.

Что можно сделать:

  • Взять уже откомпилированную игру и допатчить её до "русского состояния", скажем так. Писать кастомный экстрактор-импортер ресурсов с конвертацией спрайтов в PNG и обратно. Это совсем накладно. После выяснения проблем с длинами текстов это уже совсем неактуально, а делать перевод-огрызок в традициях старых пиратов-русефекаторов я не хочу.
  • Перекомпилировать игру под 5.3, если он появится. Тексты всё равно должны быть вставлены вручную, так как исходник написан совсем без расчёта на локализацию.
  • Портировать исходник на 8.1 либо другую версию ГМ с лицензией. Это потребует вмешательства в код игры, что довольно непросто. Вернёмся к этому варианту в крайнем случае, но пока таких обстоятельств не предвидится.

В абсолютно любом случае, неминуемо нужно будет:

  • Перерисовать спрайтовые шрифты и спрайтовые надписи.
  • Перевести сам текст.

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


In script scr_sabot line 191 pos 14: Unknown function or script: screen_gamma
In script scr_nukedraw line 8 pos 74: Wrong number of arguments to function or script.
In script scr_firekey line 786 pos 14: Unknown function or script: sprite_restore
In script scr_mainmenu line 209 pos 10: Unknown function or script: screen_gamma
In script scr_menutext line 204 pos 6: Unknown function or script: draw_text_sprite
In script scr_sabotcreate line 150 pos 2: Unknown function or script: sprite_restore
In script scr_sound line 33 pos 10: Unknown function or script: sound_frequency
In script scr_topmessage line 29 pos 6: Unknown function or script: draw_text_sprite
In script scr_herosabot line 230 pos 30: Wrong number of arguments to function or script.
In script scr_heromain line 59 pos 30: Wrong number of arguments to function or script.
In script scr_huddraw line 69 pos 51: Wrong number of arguments to function or script.
In script scr_sabotcreate4 line 196 pos 6: Unknown function or script: screen_gamma
In script scr_drawshape line 33 pos 6: Unknown function or script: draw_polygon_begin
In script scr_facecreate line 121 pos 6: Unknown function or script: screen_gamma
In script scr_loadingdestination line 5 pos 6: Unknown function or script: screen_gamma
In script scr_drawtime line 21 pos 10: Unknown function or script: draw_text_sprite
In script scr_zcir line 38 pos 14: Unknown function or script: screen_gamma
In script scr_seczmusicplay line 6 pos 10: Unknown function or script: sound_frequency
In script scr_drawunlocks line 46 pos 2: Unknown function or script: draw_text_sprite
In script scr_sabotcreate2 line 10 pos 10: Unknown function or script: sprite_restore
In script scr_sabotcreate3 line 4 pos 2: Unknown function or script: sprite_restore
In script scr_mainload line 7 pos 2: Unknown function or script: sprite_restore
In script scr_shreddersfx line 26 pos 10: Unknown function or script: sound_frequency
In script scr_loadcuts line 3 pos 2: Unknown function or script: sprite_restore
In script scr_loadmusic line 12 pos 60: Wrong number of arguments to function or script.
In script scr_proximaarrow line 51 pos 10: Unknown function or script: draw_polygon_begin
In script scr_voice line 402 pos 14: Unknown function or script: sound_frequency
In script scr_pausemenudraw line 14 pos 2: Unknown function or script: draw_text_sprite
In script scr_turretchargetell line 3 pos 10: Unknown function or script: sound_frequency
In script scr_cleardraw line 27 pos 10: Unknown function or script: screen_gamma

Оффсеты внутренних GM-ресурсов оригинального (официального) исходника Iji iji_16_6.gmd, 16 617 077 байт, изменён 15 января 2011 г., 14:01:34, взятого с сайта автора 16 февраля 2014 г., 20:34:18

0x006A39 snd_wea_imach (первый звук)
0x70D7DD spr_block (первый спрайт)
0x8DDBC6 bg_tile1 (первый фон)
0x995163 scr_knockdown (первый скрипт)
0xAD4F97 tim_getribbon (первый таймер?)
0xAEC3C7 obj_iji (первый объект)
0xC39FFA rom_main (первая комната)

До первого звука идут какие-то невнятные, возможно зашифрованные данные, а также название игры, автора, и годы работы над игрой.
После последней комнаты возможно идёт Game Information (которой здесь нет), и список всех ресурсов игры с их относительными оффсетами и/или идентификаторами (?).

Слово "первый" здесь означает "первый в файле". Идентификаторы этих "первых" ресурсов могут и не быть равны нулю, так как в ГМ идентификаторы ресурсов инкрементируются вне зависимости от уже удалённых.

Сигнатура, по которой можно искать ресурсы (но не всегда находить именно их) в исходнике ГМ5.3(а?):
0x90 01 00 00
Она может быть признаком либо начала, либо конца (не выяснено) соответствующей структуры данных. В некоторых случаях повторяется в пределах одного ресурса (либо есть ресурсы, которые невозможно идентифицировать через хекс-редактор).

Всего сигнатур в файле 3759. Хотя уникальность сигнатуры в 4 байта и достаточно высока, эта сигнатура используется внутри формата также для других целей, помимо разделения ресурсов — она разделяет ещё и события внутри объектов (возможно и ещё что-то). Кроме того, эти байты могут быть встречены в сыром потоке данных, не являясь метаданными вообще, но соответствуя четырёхбайтовому значению сигнатуры. Поэтому эта величина (3759) вмещает в себя количество всех ресурсов игры, сложенное с количеством событий в объектах, а также количеством неуточнённых разделителей, если таковые есть, и, наконец, с количеством "сырых" неактуальных совпадений с потоками данными ресурсов. В любом случае она преувеличена, и дальнейший анализ этого пока не нужен.

Кроме того, комнаты не разделяются этой сигнатурой. После первой комнаты более 20 этих сигнатур, но они там не имеют функции разделителя. Комнаты разделяются сигнатурой 0x08 02 00 00 16 00 00 00. Что-то неуточнённое внутри них (объекты?) разделяется сигнатурой 0x80 14 00 00, но не всегда. Пока что оставлю этот анализ.

Регулярное выражение для выцепления всех текстов с целью проверки их на влезание в диалоговое окно (три строки по 65 символов и четвёртая — 63 символа (на последних двух расположен элемент интерфейса)):

text[d+]="[^"]*"

И соответствующий приемлемый конструктор с экранированным литералом (дичь, правда?) для объекта BCL .NET (проверено в 2.0):

new global::System.Text.RegularExpressions.Regex("text\\[\\d+\\]=\"[^\"]*\"");

Вспомогательная программа IjiMessageBox для автоматической проверки:

https://dl.dropboxusercontent.com/u/75034586/Translations/Iji/IjiMessageBox.exe

Принимает на вход iji scripts.gml (экспортированные скрипты из исходника), и пишет результат проверки в Result.txt после нажатия кнопки Batch. Либо можно проверять выбранный текст прямо в окне. Или даже переводить прямо там. Поддерживаются два типа разбиения — автоматическое самим компонентом TextBox из WinForms, и моё написанное с нуля "правильное". Естественно, первым типом текст разбивается автоматически при вводе.


Что нужно исключить при фильтровании тупо-забранных-из-кавычек текстов:
scr_sound("...")

Что нужно обязательно забрать:
.textid="..."
.topmessage="..."
loc="..."

(список видимо ещё неполный, но я буду смотреть по остаткам от фильтрации scr_sound, а не забирать только то, что в белом списке)

Gamin.ru — как вы его называете?

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

Уверенно выставляю категорию поста "Про сайт", и — добро пожаловать.

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

Картинку аккуратно спёр позаимствовал отсюда, чтобы не было совсем пусто.

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

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

или

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

а также

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

Важное замечание:

читать дальше >>

Treasure Adventure Game — "не Cave Story"

Прошёл вот с неделю назад Treasure Adventure Game, сформировал мнение. Не очень лестное. И читать его (точнее, раздел «Не то») следует тем людям, которые либо не собираются играть в эту игру никогда, либо уже прошли. Итак:

читать дальше >>

GM XD / GMS XD — альтернативный дебаггер для GM8.1/Studio

GM XD

GMXD V1.0, скриншот первой вкладки.

Упомянутая в интервью программа, которая была задумана для того, чтобы стать лучшей заменой встроенному дебаггеру в Game Maker, была, наконец, доведена мной до состояния, которое я могу назвать достойным версии 1.0. И Гамин — первый сайт в Сети, который об этом узнал.

читать дальше >>

Xitilon x Gamin

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

читать дальше >>

OST "Навеки Один" (+исходники FTM)

riv9aiw.png

(NES-чиптюн, использован FamiTracker)

Вниманию заинтересованных представляем OST игры «Навеки один» с Гаминатора 10. Скачать можно по нажатию на обложку альбома чуть выше этого текста.

Так как на сайте на данный момент нет категории «Игровой OST», и нет ничего похожего, я задал категорию «Другое».

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

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

Обновление 19.09.2012

Цитата из сопроводительного описания при релизе:

»- Вторая версия саундтрека была выпущена в связи с тем, что в исходниках первой версии была обнаружена ошибка, из-за которой во втором паттерне трека #6 Dangerous Action вместо длинного высокочастотного шумового эффекта (как в треках самой игры) срабатывал короткий, и неправильного типа. Эта ошибка была допущена при сборке единого исходника из разных источников, и исправлена во второй версии. Кроме этого, во вторую версию вошли небольшие ремиксы существующих треков I've Gone Desolate и Game Over, а также замедленная версия There Are My Hopes со спецэффектами (в исходнике спецэффектов нет, так как они уже не входят в функции ни FamiTracker, ни звуковых чипов NES).»

"Пикселов" VS "Пикселей"

Ну или "пикселы" VS "пиксели".

Слово "пиксел", по меркам русского языка, принадлежит к первому склонению, подобно словам "стол", или "конь, если верить Википедии. Происходит оно, насколько мне известно, от сокращения: "PICture ELement.", что переводится, соответственно "Элемент изображения". Есть также вариант "PICture CELl", который совсем уже похож на "пиксел" по произношению при сокращении. А сегодня узнал о вообще экзотическом названии всё того же понятия - "элиз", "ЭЛемент ИЗображения". В ходу термины вроде "пиксельной графики", но не "элизовой" же! Но я не о том.

В рунете я многократно встречал склонение "пиксела" то в виде "пикселов", то в виде "пикселей", о чём, собственно, и пост.

читать дальше >>

Серия Equanimity

Дневник разработки игр серии Equanimity

 Equanimity_Splash.PNG

Первая Equanimity была создана менее чем за 48 часов для Ludum Dare #23, но в процессе её разработки у меня возникла довольно интересная вариация геймплея, которую я пока обзову In/Out. Если вы играли в Equanimity, вы догадываетесь, о чём речь. В игре два [качественно разных] интерфейса работают одновременно, но курсор-то на экране один.

Пока что планирую Equanimity 2, где по [забавно поданной] рекомендации Nuprahtor'а попробую ввести маяк (маяки?) для лучшего обозначения места игрока на экране. Также внутренний мир должен будет подвергаться перестройке и/или переворотам. Может ещё чего выдумаю. Буду обновлять по мере работ.

Ах да, русский язык будет. 

23.04.2012 

 

Eq_howto.PNG 

Самый первый интерфейс серии. Страшен.

Как выяснилось, лоханулся с оптимизацией. Оказывается, тормоза не из-за отрисовки большой части графики через векторы (фигуры через draw_ в GML), а из-за того что враги не исчезали, оказываясь позади экрана. Они умирали, но не исчезали как объекты. Хорошо хоть выстрелы удаляются в LDшном релизе, а то совсем бы скоро начинало тормозить. Так что исправил эту штуку.

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

 Eq2_wip_1.PNG

Раздумываю над кривой сложности, разнообразием врагов, шиворотом-навыворотом и бабочками. Да, точно, без бабочек не обойдётся.

25.04.2012

Eq2_wip_2.PNG

Надоело смотреть наружу - смотрим внутрь. Бабочки будут здесь. 

27.04.2012

Eq2_wip_3.PNGТаблица рекордов. 15 мест по 16 символов.

Дата записывается автоматически. Курсор ввода имени мигает.

Немного поморочился с ГМовской системой строк, почему-то русские "б", "ю", "ж" пришлось прописать в коде отдельно. "#" недоступен так как используется системой для перевода строки.

30.04.2012 

Eq2_wip_4.PNG

Бабочка, клеточки.

Написал простейший редактор списка точек для отрисовки. Всё же, немало интересного и полезного можно написать в рамках одного проекта, если не зацикливаться на игре как таковой.

05.05.2012 

 TODO

Оружие покрасивей

Разнообразие/сложность 

Враги

Боссы?

In/Out Красивое переключение

Бабочки Роль бабочек

Своя таблица рекордов