Разработка и ромхакинг > Ромхакинг и программирование
GINCS Studio
<< < (6/30) > >>
3DSchumacher:
GINCS Studio - бесплатная полнофункциональная среда разработки текстовых приключений для SEGA Megadrive/Genesis с использованием движка GINCS. Я написал эту программу для облегчения страданий при портировании The Longest Journey. Сначала мучался с Notepad++, затем написал свою кастомную подсветку синтаксиса к Visual Studio 10, но это все было не то, одни костыли. Потому решился замутить свою IDE под GINCS, с подсветкой и кейвордами ;)
Это первая версия программы, в ней присутствуют недоработки, возможны ошибки и т.д, но уже сейчас в ней можно заниматься созданием полноценных игр.

Особенности программы:


*     Создание нового пустого проекта со всей необходимой структурой и файлами
*     Загрузка существующего проекта целиком
*     Подсветка синтаксиса в скриптах
*     Создание новых скриптов с автоматическим добавлением их в проект
*     Удаление скриптов из проекта
*     Список использованных меток в текущем скрипте с быстрым переходом к метке по двойному клику на ней
*     Список использованных триггеров (не завершено, пока только отображение без сортировки и фильтрации/навигации)
*     Дерево всего проекта слева
*     Встроенный просмотрщик (двойной клик на изображении) и конвертер PCX файлов (использован сторонний Irfan View)
*     Моментальная компиляция и запуск проекта прямо в студии (использован сторонний эмулятор Kega Fusion)


Системные требования:


*     .NET Framework 4.0
*     Microsoft Windows XP SP3 (32-bit and 64-bit* editions), Microsoft Windows Vista SP2 (32-bit and 64-bit* editions), Windows 7 (32-bit and 64-bit* editions), Windows 8 (32-bit and 64-bit* editions)
*     10 Мб свободного места на диске.
*     Обязательное отсутствие пробелов в пути к папке с программой. Для тех, кто в танке, поясняю: это значит нельзя запускать с рабочего стола. Желательно копировать папку в корень диска (недоработка сборщика движка GINCS)
* - компиляция и запуск проекта в х64 системах пока невозможен, особенность GINCS. Возможно кто-то возьмется перекомпилировать сборщик под х64. Но вы всегда можете скомпилировать проект в виртуальной машине.


Скриншот:


Скачать можно тут: http://emulation.at.ua/publ/developing/sega_megadrive_genesis/gincs_studio/11-1-0-71
Размер: 3.5 Мб
3DSchumacher:

--- Цитата: lupus ---А в новой студии работа значительно быстрее пошла
--- Конец цитаты ---
Это радует. Для этого она и создавалась. Жду финальную версию твоей игры. Кстати, если останется место в роме, можешь впиндюрить туда пару анимаций ;)

Добавлено позже:

--- Цитата: lupus ---Я вот что вспомнил, Сегамен вроде ж выдирал какой-то звуковой двиг из соника? Можно ли его прикрутить?
--- Конец цитаты ---
Это вопрос к Ti_, скорее
lupus:
Ну до финальной ещё не близко, т.к. ещё второй сценарий будет, он хоть и короче первого, но работы там хватит. Так что с анимациями будем думать в конце. По идее в 4 метра должно всё поместиться.
Ты ещё говорил, что есть ограничение на количество команд байткода, если не сложно, прикрути куда-нить в студию их подсчёт.
3DSchumacher:

--- Цитата: lupus ---прикрути куда-нить в студию их подсчёт
--- Конец цитаты ---
это сложно, так-как это ограничение суммарно на все скрипты. А там надо отслеживать какие из них юзаются, а какие нет... я думаю ты за предел в 32768 команд не выйдешь ;)

В новой версии студии будет скрываемая панель снизу, в которую будут выводится ошибки компиляции. Вот если превысишь это значение - там будет написано :)
lupus:
Понятно.
А автозамену по всем скриптам реализовать можно?
А то я создал чёрный бэкграунд и юзал его везде, где текст должен выводиться на чёрном фоне, теперь вот думаю строку "#loadbkg black" заменить во всех скриптах на "#clearbkg".
Добавлено позже:
Тогда так :)
Ti_,

--- Цитата: lupus от 15 Апрель 2013, 20:17:11 ---Я вот что вспомнил, Сегамен вроде ж выдирал какой-то звуковой двиг из соника? Можно ли его прикрутить?

--- Конец цитаты ---
Ti_:
SMPS потом попробуем. Там вопрос не как его вставить, а в том как совместить с гинкс . Чтобы задавался номер трека, засовывались файлы музыки.
Т.Н. байткод про который тут пишется  - я так понял скрипты создают его и пихают в ром, а движок гинца уже декодирует.   То есть посмотреть во что преврщается #playmusic #1   или как-там в хексе и как обрабатывается, и уже туда пихать код запуска номера мелодии спмс.


Добавлено позже:

--- Цитата: lupus от 16 Апрель 2013, 11:45:14 ---Ну до финальной ещё не близко, т.к. ещё второй сценарий будет, он хоть и короче первого, но работы там хватит. Так что с анимациями будем думать в конце. По идее в 4 метра должно всё поместиться.

--- Конец цитаты ---
Можно ещё меньше, где-то по кило-полтора с картинки, засчёт переделки самих bkg - к концу недели попробуем.
lupus:

--- Цитата: Ti_ от 16 Апрель 2013, 14:25:47 ---SMPS потом попробуем. Там вопрос не как его вставить, а в том как совместить с гинкс . Чтобы задавался номер трека, засовывались файлы музыки.
Т.Н. байткод про который тут пишется  - я так понял скрипты создают его и пихают в ром, а движок гинца уже декодирует.   То есть посмотреть во что преврщается #playmusic #1   или как-там в хексе и как обрабатывается, и уже туда пихать код запуска номера мелодии спмс.

--- Конец цитаты ---
Я в хексе смотрел ром, строки текста хранятся в неизменном виде, возможно и команды байткода также лежат.

Обнаружил такой неприятный баг: номинально флагов может быть якобы 9999 (исходя из формата FL0000), однако, когда я попробовал поставить флаг FL1303 (зааётся при переходе к блоку 13-03) компилятор ругнулся на некорректный флаг :/
Пришлось обозвать его FL0133. Т.е. флаги имеют формат FL0xxx, это как-то можно поправить?
3DSchumacher:

--- Цитата: lupus ---возможно и команды байткода также лежат
--- Конец цитаты ---
про команды байткода можно посмотреть в сырцах гинкса или его сборщика, например ZOPUNIT.PAS


--- Код: --- {Upper six bits represent the main opcode}
ZOP_BTC_OP_MASK  = $FC;
ZOP_BTC_OP_SHIFT = 2;
{Lower six bits represent the opcode param, but can work as part of the opcode in some cases.}
ZOP_BTC_PR_MASK  = $03;
ZOP_BTC_PR_SHIFT = 0;

ZOP_OP_NOP       = $00;
ZOP_PR_NOP_NOP   = $00; {No operation}
ZOP_PR_NOP_DELAY = $01; {Stop for a cycle}
ZOP_PR_NOP_WAIT  = $02; {Wait for event}
ZOP_PR_NOP_END   = $03; {End program}

ZOP_OP_BKG       = $10; {Background image}
ZOP_PR_BKG_CLEAR = $00; {Clears background}
ZOP_PR_BKG_LOAD  = $01; {Loads background}

ZOP_OP_WLK_WALK  = $20; {Walk in a direction}
ZOP_OP_WLK_TRY   = $24; {Try walking in a direction}
ZOP_OP_FACE      = $28; {Turn to face a direction}
ZOP_PR_DIR_NORTH = $00;
ZOP_PR_DIR_SOUTH = $01;
ZOP_PR_DIR_EAST  = $02;
ZOP_PR_DIR_WEST  = $03;

ZOP_OP_TXT         = $40; {Text-related commands}
ZOP_PR_TXT_CLEAR   = $00; {Clears the current text buffer}
ZOP_PR_TXT_WRITE   = $01; {Add line to the text buffer. Must be followed by a null-terminated string.}
ZOP_PR_TXT_DISPLAY = $02; {Displays the text contained in the buffer}
ZOP_PR_TXT_DISCLR  = $03; {Displays the text contained in the buffer, and then clears it}

ZOP_OP_MNU         = $44; {Menu-related commands}
ZOP_PR_MNU_CLEAR   = $00; {Clears the current menu buffer}
ZOP_PR_MNU_ADD     = $01; {Adds option to menu. Followed by a 16-bit jump address (MSB First) and a null-terminated string}
ZOP_PR_MNU_DISPLAY = $02; {Displays the menu}
ZOP_PR_MNU_DISCLR  = $03; {Displays the menu, and then clears it}

ZOP_OP_SET = $60; {Sets a flag. Must be followed by a single byte. Flag number = (Op Param shl 8) + Following byte}
ZOP_OP_CLR = $64; {Clears a flag. Same as above.}
ZOP_OP_TFZ = $68; {Transfers state of the flag to flag 0. Same as above.}
ZOP_OP_TZF = $6C; {Transfers state of flag 0 to flag. Same as above.}
ZOP_OP_NOT = $70; {Inverts the state of a flag. Same as above.}

ZOP_OP_BRA        = $80; {Branch command. Must be followed by a 16-bit address (MSB First). Op Param defines jump condition}
ZOP_PR_BRA_ALWAYS = $00; {Unconditional jump}
ZOP_PR_BRA_SET    = $01; {Jump if flag 0 is set}
ZOP_PR_BRA_NOTSET = $02; {Jump if flag 0 is not set}

ZOP_OP_CALL        = $88; {Call procedure.}
ZOP_PR_CALL_LOCAL  = $00; {Calls a local procedure. Must be followed by a 16-bit address (MSB First).}
ZOP_PR_CALL_RETURN = $01; {Returns from previous call.}

ZOP_OP_PROG        = $8C; {Call external program.}
ZOP_PR_PROG_GOTO   = $00; {Replaces current program with a new one. Not returnable.
   Must be followed by a null-terminated string containing the program's name.}
ZOP_PR_PROG_CALL   = $01; {Calls an external program, but allows returning to the current one.
   Must be followed by a null-terminated string containing the program's name.}

ZOP_OP_MUSIC      = $90; {Play music}
ZOP_PR_MUSIC_STOP = $00; {Stops the music}
ZOP_PR_MUSIC_PLAY = $01; {Plays the specified music.
  Must be followed by a null-terminated string containing the music's name.}

ZOP_OP_SYS     = $FC; {System commands}
ZOP_PR_SYS_EXT = $01; {Extended command}
--- Конец кода ---
Добавлено позже:

--- Цитата: lupus ---компилятор ругнулся на некорректный флаг :/
--- Конец цитаты ---
именно компилятор или студия не подсветила? Студия подсвечивает по FL0, а как там сборщик разруливает я не смотрел
lupus:
Именно компилятор вернул ошибку и не собрал новый ром.
Неплохо было бы в случае ошибки не запускать эмуль, а то он стартует с ромом, собранным ранее...
Ну, как вариант, перед компиляцией удалять ром собранный ранее и запускать фьжн только по факту наличия нового рома.
3DSchumacher:

--- Цитата: lupus ---Неплохо было бы в случае ошибки не запускать эмуль, а то он стартует с ромом, собранным ранее...
--- Конец цитаты ---
а студия откуда об ошибке знает? Это же батник левый собирает игру :)
Вот переделаю сборщик и будет все пучком, с нормальными сообщениями об ошибках
lupus:
Я сам не особо в cmd командах силён, но мне видится довольно всё просто:
После нажатия кнопки "Run Project"
1. Удаляем game.bin
2. Запускаем батник, который собирает ром
3. Проверяем наличие game.bin, если есть, то стартуем фьюжн.
Если шаг 3 реализовать невозможно, то его можно пропустить, тогда эмуль просто запустится, без загруженного рома и покажет "войну блох". :)
Добавлено позже:
С женой почти выпили 0.5 коньяка, пытался сейчас прикрутить флаги к:

--- Цитата ---Go to 15-2 if you chose A in 7-13 and did not choose B in 14-5
Go to 15-3 if you chose B in 7-10 or B or C in 7-13 and did not choose B in 14-5
Go to 15-6 if you chose B in 14-5
--- Конец цитаты ---
Решил отложить до завтра  :wacko:
3DSchumacher:

--- Цитата: lupus ---3. Проверяем наличие game.bin, если есть, то стартуем фьюжн.
Если шаг 3 реализовать невозможно, то его можно пропустить, тогда эмуль просто запустится, без загруженного рома и покажет "войну блох". :)
--- Конец цитаты ---

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


--- Код: ---Go to 15-2 if you chose A in 7-13 and did not choose B in 14-5
Go to 15-3 if you chose B in 7-10 or B or C in 7-13 and did not choose B in 14-5
Go to 15-6 if you chose B in 14-5
--- Конец кода ---


--- Код: ---#IF FL0001 #IF NOT FL0002 #GOTO 15_2
--- Конец кода ---
Чо ж тут сложного то :)


lupus:
Сложного ничего, просто нужно было на бумажку выписать, где какой флаг ставился, чтобы правильно заскриптовать + добавил проверку, если условия не совпадают, то кидает на строку "triggers error on step xx-x", чтобы потом можно было разобраться, если что-то неверно прописал.
Запихнул в ром всю графику сценария за Гарри и отскриптовал 15/18 глав. Ром весит 1.96 метра, т.е. полный сценарий должен поместиться в 2 мб. Останется реализовать ещё 2 мини-игры и можно браться за сценарий Сибил.
По идее в итоге ещё и под музычку место должно остаться...
3DSchumacher, есть ли какая-то команда, которая сбрасывает все флаги? Если нет, то сделай плиз кнопочку, по нажатию на которую будет всплывать окно, в котором в столбик выводятся все флаги установленные в скриптах проекта, чтобы можно было их скопировать в блокнот. Думаю прописать принудительный сброс всех флагов при переходе к главному меню.
3DSchumacher:

--- Цитата: lupus ---3DSchumacher, есть ли какая-то команда, которая сбрасывает все флаги?
--- Конец цитаты ---
нет.

--- Цитата: lupus ---сделай плиз кнопочку, по нажатию на которую будет всплывать окно, в котором в столбик выводятся все флаги установленные в скриптах проекта, чтобы можно было их скопировать в блокнот.
--- Конец цитаты ---
посмотрим

--- Цитата: lupus ---Думаю прописать принудительный сброс всех флагов при переходе к главному меню.
--- Конец цитаты ---
это важно, да. И это не проблема, если делаешь вот так:

--- Код: ---' fl0003 - Гайбраш
' fl0004 - Эйприл уже открывала шкаф
' fl0005 - Надувная утка уплыла
' fl0006 - У Эйприл есть булка
' fl0007 - Эйприл уже смотрела в окно
' fl0008 - Эйприл прочитала обьявление о найденном золотом кольце
' fl0009 - У Эйприл есть кольцо
' fl0010 - Эйприл говорила с Кортезом на скамейке
' fl0011 - Эйприл уже выходила из пансионата
' fl0012 - Эйприл уже была на площади Венеции
' fl0013 - Эйприл уже смотрела на часы.
' fl0014 - Эйприл уже была под мостом.
' fl0015 - Эйприл уже была на пороге академии.
' fl0016 - Эйприл уже читала обьявления.
' fl0017 - Эйприл уже была в фойе академии.
' fl0018 - У Эйприл есть резиновая перчатка.
' fl0019 - Эйприл уже была на втором этаже академии.
' fl0020 - Эйприл уже рисовала.
' fl0021 - Эйприл уже была в Артишоке.
' fl0022 - Эйприл уже говорила с Чарли.
' fl0023 - Эйприл уже спрашивала Чарли о личном.
' fl0024 - Эйприл уже спрашивала Чарли о Кортезе
' fl0025 - Эйприл уже говорила с Эммой в кафе
' fl0026 - Эйприл уже получила у Стэна зарплату
' fl0027 - Эйприл нашла свой график работы в дневнике
' fl0028 - Эйприл уже была в главном зале Артишока
' fl0029 - Эйприл уже читала обьявление в артишоке
' fl0030 - Эйприл уже начинала разговор со Стэном
' fl0031 - Эйприл согласна поработать в баре вечером
' fl0032 - У Эйприл есть утка
' fl0033 - Эйприл уже взяла конфету
' fl0034 - Эйприл уже оплатила билет в метро
' fl0035 - Эйприл уже говорила с Кортезом в галерее
' fl0036 - Эйприл уже вспомнила что должна работать вечером в кафе
' fl0037 - У Эйприл уже есть бельевая веревка
' fl0038 - Эйприл починила насос
' fl0039 - У Эйприл есть и зажим и кольцо
' fl0040 - Эйприл уже спускалась в холл
' fl0041 - Эйприл уже спрашивала Фиону о странностях в городе
' fl0042 - Эйприл уже спрашивала Фиону где Кортез
' fl0043 - Эйприл уже говорила с Заком о кинотеатре
' fl0044 - У Эйприл уже есть спички
' fl0045 - Эйприл уже спускалась в холл во второй главе
--- Конец кода ---
ну и так далее ;)


lupus:
У меня флагов пока не так много и именуются они исходя из того, в каком шаге проставлены. Но сброс точно нужен.
3DSchumacher:
Замутил в своей игре меню со вводом пассворда на загрузку нужной главы:

нужно выбрать комбинацию, состоящую из 3-х драконов (всего разных дракона 4). Антиподбор паролей тоже в действии, если ввел 2 раза неправильно - сбрасывает игру, опять нужно ждать пока пройдут логотипы и т.п. :)

(реализована как русская, так и английская версии)
Добавлено позже:
Меню тоже облагораживаю потихоньку:

Пункт "Выход" потом будет убран. Сейчас он нужен для проверки правильности перезапуска игры (сброса всех триггеров и т.п.)
lupus:
Это ты бэкграунд отрисовал и просто менюшку без текста построил?
Добавлено позже:
"Загрузить игру" - это ввод пароля, как я понимаю?
Заскриптовал 17 глав. Осталось заскриптовать 2 концовки (18 глава) и оптимизировать оставшуюся графику резез RGT. Потом буду думать над реализацией миниигр.
3DSchumacher:

--- Цитата: lupus ---Это ты бэкграунд отрисовал и просто менюшку без текста построил?
--- Конец цитаты ---
угумс

--- Цитата: lupus ---"Загрузить игру" - это ввод пароля, как я понимаю?
--- Конец цитаты ---
да, с драконами ;)

--- Цитата: lupus ---Заскриптовал 17 глав. Осталось заскриптовать 2 концовки (18 глава) и оптимизировать оставшуюся графику резез RGT. Потом буду думать над реализацией миниигр.
--- Конец цитаты ---
офигеть ты быстрый, молодец!
lupus:
Это я шпарю, покаа запал есть  :lol:
3DSchumacher:
Нарисовал новый фонт, более подходящий для такого квеста, как "Бесконечное Путешествие". Как читается?

Lost Soul:
3DSchumacher, Нормально читается, только уже более замудреного не надо :)
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии