Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - FireWing

Страницы: [1]
1
Надо же, сколько лет теме, а она, оказывается, ещё живая даже  :)

Я хоть уже и не занимаюсь практически всем этим из-за нехватки времени, но, раз уж тут у товарищей исходники есть, то у меня вот кое-что имеется, может, кому пригодится.

Набор бинарников от Microtec (компилятор, ассемблер, линкер) под Win32.
Technopop именно этим и пользовались для GEMS и ZT, только более старой версией под DOS.
С этой поудобнее работать будет, никакие DOSbox и VM не нужны будут  :)

Штука уже старая, лицензию, которая нужна для того, чтобы этот компилятор работал, если его установить из доступного в сети образа CD, все равно уже не купить нигде, поэтому, надеюсь, можно выложить.

В довесок там ещё имеется демо-ROM из дистрибутива GEMS, который я этим самым набором собрал. Я его, в отличие от исходников, в собранном виде нигде в сети не видел - может, кому интересно будет.

2
Немного промазал. Хотел выложить в изначальную тему про хак, но перешел оттуда по ссылке в эту тему, и забыл  :)
Таки да, Delphi. На ней же, судя по всему, и новый редактор написан, только на более старой седьмой версии, из-за чего он и не сильно хочет работать под Win7 x64.
Мои исходники под седьмой тоже можно скомпилировать, с небольшими изменениями. Но лучше поставить последнюю версию.

3
Вот исходники моего редактора. Правда, не самой первой свежести, но пока лучшего предложить не могу  :)
Выкладываю их под лицензией GPL, поэтому если какая-то часть исходников будет использована в других работах, будьте добры выложить их под той же лицензией  :) В архиве есть текст лицензии в оригинале, на русском про неё можно поглядеть тут: http://ru.wikipedia.org/wiki/GNU_General_Public_License

P.S. Разбираться в коде, конечно, будет сложновато. Не планировал изначально его куда-то выкладывать, т.к. писал в основном для себя, поэтому особо не ругайтесь  :lol:

4
FireWing, наконец-то выше!
Рады тебя видеть :)
Да я заглядываю периодически. Не пишу просто, потому что порадовать, к сожалению, нечем  :)

5
Эх, нет у меня под рукой исходников пока что, но я ведь год назад выкладывал формат данных, вот, на всякий случай, ещё раз, с переводом:
Формат данных эпизода

1. 4 байта: Заголовок ("ZMAP")

2. 4096 байт: Определения текстур:
  - Текстура имеет размер 128x64, состоит из 8 частей размером 32x32, 4х2 части (4 в ширину, 2 в высоту), порядок частей:
      1 3 5 7
      2 4 6 8
  - 256 записей
  - Запись состоит из 8 номеров частей (2 байта на один номер, порядок байтов - от старшего к младшему):
      T1_Tile1 T1_Tile2 T1_Tile3 T1_Tile4 T1_Tile5 T1_Tile6 T1_Tile7 T1_Tile8
      T2_Tile1 T2_Tile2 T2_Tile3 T2_Tile4 T2_Tile5 T2_Tile6 T2_Tile7 T2_Tile8
      ..
      T256_Tile1 T256_Tile2 T256_Tile3 T256_Tile4 T256_Tile5 T256_Tile6 T256_Tile7 T256_Tile8

3. 2048 байт: Порядок текстур:
    
  - Определяет, какую текстуру использовать на каждой стороне каждого типа ячейки (#0 - #255)

4. 256 байт: Определение типов ячеек, один байт на ячейку, секция [CellDefs] в ztedit.ini содержит описание возможных типов.

5. 16384 байт: Данные уровней:
  - В кажом эпизоде 16 уровней
  - Каждый уровень имеет размер 32x32, один байт на ячейку, первый байт - верхний левый угол, последний байт - нижний правый угол.
  - Каждый байт определяет ID помещаемой ячейки. Например, байт 0Ah (10d) заставляет игру рассматривать ячейку в соответствии с записью №10 списка типов ячеек (из пункта 4)

6. 16 байт: Освещение и атмосфера, один байт на уровень, допустимые значения:
  - 00: Яркое освещение
  - 01: Тусклое освещение
  - 02: Дымка
  - 03: Без потолка (параллакс)
  - 04: Черный потолок
Это, правда, от первого ZT. Основное отличие формата в BZT - размер карты и кол-во уровней - не фиксированы, для каждого эпизода перед заголовком ZMAP находятся данные о размере карты для каждого уровня в эпизоде, количество уровней и еще кое-какие данные, с которыми не разбирался.

А насчет того, что для каждого эпизода типы ячеек разные - это верно. сами типы определяются в другом месте, а в данных эпизода есть указатели на тип каждой клетки. См. пункт 4. А для общего описания существующих типов ячеек см. ztedit.ini, там они есть все, и для ZT и для BZT (разница между ними небольшая).

А вот смещения, по которым данные для каждого эпизода находятся в ZT:
0x15A106, 0x160420, 0x166028 для 1, 2 и 3 эпизода соответственно
В BZT они, конечно, в других местах. плюс там еще есть и данные от первого, которые не используются.

6
В комплекте  :) Но без анимации текстур, пока не разобрался как это работает

7
Вот, для этого оно и делается  - чтобы можно было доставать все данные, потом сделать отдельную правку их через редактор, и пересобирать обратно в ром  :)
Кстати, может вещь уже известная, но я вот только нашел, ковыряясь в роме: попробуйте в кач-ве пароля ввести "Boxing!!!"
Что там будет, уже и так понятно, в редакторе это есть) Но чтобы он реально использовался в игре - впервые вижу  o_0
Ну и "Highrise!" с "Basement!" заодно.

8
Нет, это наверняка всего-лишь какой-нибудь картридж с (E)EPROM-ом, разрабатываемую игрушку-то тестировали на реальном железе, эмуляторов не было  :)

А след. релиз редактора и так будет без изменения кода. Код я сейчас ковыряю, чтобы заодно и достать все адреса всех изменяемых данных.

9
Кто-нибудь ассемблер посоветует, который лучше всего для компиляции использовать? А то поплясал с бубном вокруг GNU as и vasm, они упорно всякие оптимизации в код втыкают, например из "move.l #0,d4" делают "clr.l d4", размер опкода изменяется, и вся адресация портится, а мне, пока до конца не допилю код, надо, чтобы собиралось всё идентично оригиналу  :(

10
То, что инициализация одинаковая - да, везде уже посмотрел. Таким образом просто почему-то везде проверяется, хард ресет это, или софт. И если софт - пропускается инициализация.
Но тут еще и обработчик EXT-прерывания, который вроде как для этого самого порта, чего-то такое объемное делает ($01C254), правда, пока еще не глядел, что именно. И не сравнивал с другими ромами.

11
Поглядел другие ромы, в некоторых есть обработчики исключений, но они точно так же отключены, видимо, перед релизом рома. Многим, похоже, лень все баги исправлять  :)

А EXT порт - это, оказывается, не тот, куда MegaCD втыкается, а тот, в который на ранних версиях консоли втыкается модем. На более поздних этого порта нет вообще. Да и ZT модем не держит, поэтому тем более непонятно, зачем этот порт при старте проверяется.

12
Что значит отключил? Никак оно реже не могло стать. Eсли происходит переход туда (в данном случае $a88) в случае бэд опкодов, из-за ошибки в программе., т.е. в новом коде.
Ну в том-то и дело, что если туда происходит переход, то всё вешается и выводятся регистры со стеком, эдакий аналог BSOD  :) Зато в обработчике деления на 0 ($a86) стоит просто rte, то есть ничего не делается и исполнение продолжается дальше. Вот туда я и перенаправил обработку всех исключений

Добавлено позже:
Кстати, свободных типов ячеек там все-таки много. Есть где развернуться, если что-то новое добавлять. А пока как только он видит такую ячейку и пытается ее отрендерить, виснет  :)

13
Потихоньку пересобираю ром с нуля. Много интересного там, код хитро написан. Или изначально он писался не на ассемблере, или компилятор так интересно всё оптимизировал, или разработчики были хитрые  :)
Отключил обработку исключений - если что-то меняешь в коде - перестало вылетать в экран дебага с выводом значений регистров. Правда, иногда стало просто виснуть - но реже, чем вылетало в дебаг  :)
Собственно коду там - на несколько десятков килобайт, всё остальное - данные. Данные все выношу в отдельные бинарники - можно будет заменять что угодно, свободно изменяя размер.

С архитектурой m68k и железом консоли только начал знакомиться, поэтому пока много непонятного.
Кто-нибудь знает, зачем может при старте проверяться наличие чего-либо в порту первого контроллера и порту расширения (куда подключаются всякие Sega CD), и если там что-нибудь есть - почему пропускается вся инициализация (VDP, Z80, проверка TMSS, проверка региона консоли)?

14
для ZT кучка unknown - среди которых оказались повреждаемые и поврежденные стены.
Кстати, да. Принцип реализации этих треснутых стен простой. При попадании выстрела в такой блок, он просто меняет идентификатор ячейки на ту самую треснутую. Поэтому можно изменить заменяемый блок  на любой другой - хоть на пустую ячейку для прохода, хоть на что-то другое.[/quote]

FireWing, а новый редактор то дадут?  :debile:
Дадут  :) Когда доделаю. С графиком основной работы у меня маловато времени для редактора, поэтому всё так медленно  :)

да и я думаю, если сделать ZT для pc - то это будет не Zero Tolerance для pc, а игра с тем-то, тем-то и вон тем сделанным по аналогии с ZT..
Не обязательно, бывают ведь толковые ремейки. Нужно просто воздержаться от впихивания туда "карт полупрозрачных вращающихся" и прочего  :) А делать можно не совсем с нуля, хотя-бы на том же build'е - и исходники открыты, и всё что нужно для этого там есть.

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

15
Вообще тут столько предложений, что уже теряется смысл всё это впихивать в zt, не имея исходников и перелопачивая байткод - куда проще уж сделать с нуля свой zt, а не ковыряться в дизассемблере. Либо всё-таки связаться с разработчиками, возможно они и дадут то, что у них осталось. Всё-таки у тех же 3D Realms выпросили исходники DN3D, они их выпустили под GPL и он стал дальше развиваться сообществом.
А если-таки делать с нуля, то есть ли смысл это делать под genesis? Под PC это будет и проще и возможности неограниченные. Но в таком случае это будет уже другая история, к эмуляции, моддингу и т.п. никакого отношения не имеющая  :)

Нужно всё-таки определиться как-то, чего хотим в следующей версии, а то ведь не получится вообще ничего, как часто и бывает, когда какой-то проект бурно обсуждают и не могут придти к единому плану. Сразу всё и много - это, конечно, хорошо, но нереализуемо. Нужно to-do list и roadmap сделать, а там уж и обсуждать, чего из этих фич возможно, чего нет, а чего сложно  :)

По поводу типов блоков - неужели никто не заглядывал в ztedit.ini? Там ведь абсолютно все типы есть, с описаниями. В том числе и которые не используются ни в одном эпизоде.
Их всего 256. Зарезервированных, в которых ничего не реализовано - мало. В каждом эпизоде перед началом собственно данных карты есть блок из 256 байт, указатель на типы ячеек, эдакий cell mapping. При чтении карты сначала берется байт ячейки уровня, потом из того самого блока вытаскивается номер элемента по значению считанной ячейки, а уже то, что в итоге получилось - рендерится и обрабатывается совершенно в другом месте. Поэтому и в оперативке номера блоков не совпадают.
Получается всё запутанно, непонятно, зачем сделали именно так, если можно было обойтись без указателей. Возможно, изначально хотели сделать типов ячеек больше 256, а вот на каждый эпизод - максимум 256, иначе бы эпизоды не помещались в оперативку. А потом решили оставить 256 типов, но структуру оставили вот такой вот  :)

16
FireWing, ооо плиз можно ползунок на уголке (сжать-растянуть) у окна с картой.
Можно, но если размер ячейки меньше сделать, текст не видно будет. Он там и так небольшой.

а разве нельзя сразу кратные ползунки ввести?
А они там и так с шагом 32 :)

17
Картинки хорошие  :) Но нужно помнить, что составляющие цвета в палитре (красный, синий, зеленый) могут быть только кратными 32

18
Палитру можно достать прямо из рома. Эмуляторами и прочими утилитами отображаемые цвета не всегда идентичны оригинальным. А оффсет палитры попозже выложу, у меня это всё дома лежит.

20
Поковырял немного подобием отладчика в Gens KMod. Да, и правда весь эпизод грузится в оперативку  :(
Заодно нашел оффсет в роме ZT, где указаны адреса начала данных для каждого эпизода. Например, в 0x10BE указан адрес начала данных первого эпизода. Попробуйте там поменять что-нибудь - первый эпизод превратится в набор мусора  с кривой палитрой :)

21
у нас сегодня как раз шла речь о процессорах...
8080 - 8 бит (1974 г)
8086 - 16 бит (1978 г)
компания интел
Там хоть ладно интел. А тут совершенно другая архитектура, Motorola 68000. Она еще использовалась изначально в маках и амигах. Но у меня не было ни того ни другого, поэтому дела я с ней не имел вообще.

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

23
FireWing, а реально увеличить кол-во эпизодов, подробив имеющиеся на куски???
Реально-то оно реально, можно и не дробить - хоть 20 эпизодов сделать, можно ром увеличить до максимума в 4 мб и напихать туда чего угодно. Но для этого нужно ковырять уже сам код от m68k, кто-нибудь достаточно в нем разбирается?

Кстати, в BZT оригинальные уровни из ZT никуда не делись. Новые там находятся не вместо них, а в другом месте совершенно.

24
Пока следующего релиза нет, могу дать инфу по формату данных для эпизодов, в ZT (в BZT там еще кое-чего добавилось, но пока эти данные не систематизировал):
Episode map data format

1. 4 bytes: Signature ("ZMAP")

2. 4096 bytes: Textures definition:
  - A texture is 128x64, consists of 8 tiles (32x32), tile order is:
      1 3 5 7
      2 4 6 8
  - Has 256 records
  - A record consists of 8 tile numbers (2 bytes per tile number, big-endian):
      T1_Tile1 T1_Tile2 T1_Tile3 T1_Tile4 T1_Tile5 T1_Tile6 T1_Tile7 T1_Tile8
      T2_Tile1 T2_Tile2 T2_Tile3 T2_Tile4 T2_Tile5 T2_Tile6 T2_Tile7 T2_Tile8
      ..
      T256_Tile1 T256_Tile2 T256_Tile3 T256_Tile4 T256_Tile5 T256_Tile6 T256_Tile7 T256_Tile8

3. 2048 bytes: Texture orders:
     
  - Describes which texture to use on each side of each cell ID (#0 - #255) 

4. 256 bytes: Cell types definiton, one byte per cell, for types explanation, see [CellDefs] section of ztedit.ini.

5. 16 bytes: Level environment, one byte per one level, possible values are:
  - 00: Bright light
  - 01: Dim light
  - 02: Haze
  - 03: No ceiling
  - 04: Black ceiling

6. 16384 bytes: Map data:
  - Each episode has 16 levels
  - Each level is 32x32, one byte per cell, first byte is upper-left corner, last byte is lower-right corner.
  - Each byte defines the cell ID to be placed. E.g. byte 0Ah (10d) causes the game to render the cell according to 10th record of cell types definition set.

25
вообще, может поделишься нарытой инфой по zt и bzt (если есть какие записи)..
чтоб повторно никто не рыл в том же направлении?

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

Добавлено позже:
FireWing, в твоем редакторе (сужу по старой версии 0,3) не хватает всего двух моментов:
1- редактируемый список блоков (то есть самостоятельное наполнение контекстного меню нужными блоками)
2- отображение развертки (тупо картинка) при выделении любого блока
Всё это будет в следующей версии) плюс редактор текстур и палитры

26
Интерес продолжать разработку у меня и у самого есть еще, к тому же после того, как почитал, интересу прибавилось. Только вот всё, что делает сейчас редактор и что в нём планировалось, никак не было связано с изменением собственно кода. Текстуры, уровни, палитра и т.д. это всё одно, относительно несложно, а вот по поводу архитектуры m68k у меня вообще никаких знаний. Совместными усилиями всё возможно  :)

27
А вот и я  :)
Да, долго меня искали, похоже. Хотя в асе я каждый день практически, всего-то надо было авторизацию запросить. А сайт с гостевой книгой - работают, просто там хостинг такой, всё время с перебоями, зато бесплатный  :)

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

Страницы: [1]