1. Конфиги уровней
Уровни описываются конфигами по 64 байта. Формат конфигов на примере первого уровня EarthWorm Jim 2 (адрес в rom:0x27543E):
Дальше конфиги от других уровней.
Отсюда для рисования карты используются архив map.rnc
и массив с описанием блоков tilemap
для переднего фона и back.rnc
для заднего.
2. Копирование архивов RNC из ROM’а.
Формат массива RNC - сначала идут три байта идентификации массива (“RNC”), дальше метод сжатия (01 или 02), 4 байта размера несжатых данных, 4 байта размера сжатых данных и непосредственно сами данные архива.
К размеру сжатых данных нужно прибавить 0x12 и скопировать это количество байт (начиная с букв “RNC”, в отдельный файл).
На примере архива obj.rnc для 1-го уровня:
Прибавляем к размеру 0x12 байт и получаем 0x7A8 (1960 в десятичной системе) байт. Копируем 1960 байт, начиная с букв “RNC” в отдельный файл, например, EA2_OBJ00.RNC.
3. Копирование и запаковка архивов RNC.
Архиватор ppibm.exe (RNC_ProPack). Архиватор 16-битный, возможно, для его запуска в современных ос понадобится эмулятор dosbox.
4. Маппинг.
Стандартный формат описания одного тайла размером 8x8 - маппинг. Это 16 бит информации о тайле, которые кодируют:
5. Карта.
Передний слой описывается номерами блоков 2x2(номера умножены на 8), описание блоков хранится в массиве tilemap (4096 блоков), он не сжат из-за уникальности каждого блока. Задний слой описан в массиве back размером 64x64, каждый тайл которого хранится в формате маппинга (2 байта на один тайл).
6. Свойства блоков. Кроме маппинга, каждому из 4096 блоков присвоены еще 4 байта информации, хранящейся в сжатом массиве obj.rnc. Эти байты описывают свойства блока:
1 - Пол. 0x00 если тайл проходим или 0xFF если тайл непроходим.
2 - Условный пол. Тайл проходим, если определённый байт в оперативной памяти == 0, и непроходим в другом случае.
3 - Триггер. Объект, который “срабатывает”, когда игрок его касается.
4 - Объект. Появляется как только тайл становится видимым на экране.
7. Другие игры
Аналогичный формат (кроме кодировки свойств блоков) используют также игры EarthWorm Jim 1 и Alladin.
Всё это можно отобразить в редакторе CadEditor:
Ну и отдельно, отрендеренный закат из 1-го уровня Червяка Джимма 2: