Разработка и ромхакинг > Ромхакинг и программирование
[SMD] Contra Super Hard Corps
<< < (4/5) > >>
Segaman:
Не секрет что я снова занялся своим старым проектом. :cool:
Сейчас довольно активно его пилю.

Выражаю особую благодарность этим людям:  :hi:
Ti_,Dr.Mefisto,VLD,133MHz

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

А так вот вам монтаж с тем что уже есть и еще одна версия рома

CHAGES.LOG: :crazy:

--- Цитата ---v0.0.4 - 19.10.2017
+figured level format
+huge changes to Level 1

v0.0.3 - 10.10.2017
+reduced the possibility of epilepsy on "Obj01B5 - Level 1 Giant Cyclops"
+improved palettes of player select, lev1 & lev4
+added variations to the rotation stick robot (after giant cyclops)
+reduced animation length of panic stick robot
+reduced HP of "Obj01B5 - Level 1 Giant Cyclops"

v - 09.10.2017
+adjustments to the intro sequence and texts
+increased "Obj0120-121 - Level 1 Mad Robot Soldiers" HP
+adjustments to the "Obj0120-121 - Level 1 Mad Robot Soldiers" AI
+small adjustments to the Player Jump Gravity (Like in old Contra games)

v0.0.2 - 04.10.2017
+increased "Obj009C - Level 1 Boss" HP
+adjustments to the "Obj009C - Level 1 Boss" AI

v0.0.1 - 30.03.2013
+small adjustments to the player select, lev1, lev2 & lev4 palette
+added damage hitpoints (thx Ti_)
+increased "Obj0181 - Level 1 Cendepide" HP
+increased "Obj009A - Level 1 Spider Mini Boss" HP
+small adjustments to the "Obj009A - Level 1 Spider Mini Boss" AI
+huge animation changes of "Obj01B5 - Level 1 Giant Cyclops"
--- Конец цитаты ---
Segaman:
Nemesis_c, тебя бы в репозиторий запихать, чтоб ты тож коммиты делал и релизы, пока я загружен работой на работе (удачная тафталогия  :lol: )
Nemesis_c:
Nemesis_c:
Segaman, помогай. Хотел убрать черную область статусбара, в карте переписал таилы на прозрачные - но все равно рисуется чернота. Если отключить полностью статусбар - графика уровня за ним нормально отрисовывается а спрайты туда не идут  <_<

Zero7:
Nemesis_c, первоначальный вариант реально выглядит круто, походу конами решили запилить очередного райзера, а потом передумали.
Nemesis_c:
Zero7, мне тоже эта версия больше нравится, но перерыв архивы ничего больше пока не нашел, только эти два кадра.
А еще там часть кадра перезарядки помпового ружья и рядом с Рэем заяц  :)
(конструкция ружья крайне непонятная теперь)

Zero7:
Nemesis_c, А может изначально планировалось что при подборе например спрэтгана менялось само оружие. Вроде такое было реализовано в первой контре на аркаде.
Segaman:
Nemesis_c, выше головы не прыгнешь.
слой Window будет всегда цвет заднего фона рисовать, так что не парься вообще над этим.
Nemesis_c:
так убрать его нафиг  :lol:
SeregaZ:
робокопа нарисуйте :)
Nemesis_c:



разбор рома по винтикам продолжается  :)

Добавлено позже:
Segaman, ты с коллизиями разбирался?
Segaman:
Nemesis_c, неа, коллизии цровней я не трогал
Nemesis_c:
Segaman, Не получается правильно сконфигурировать коллизии.
Посмотри, может разберешься что-к чему.
 
В конфиге уровня идут ссылки:
dc.l xxxx ; блоки таилов 8*8 - пожаты
dc.l xxxx ; карта уровня из блоков - пожата
dc.l xxxx ; объекты уровня (враги и т.д.)
dc.l xxxx ; коллизии таилов

Конфиг коллизий примерно такой:
dc.w $0000 ; тип поведения таила(ов)
dc.w $0123 ; номер таила
dc.w $0000 ; тип поведения таила(ов)
dc.w $0125 ; номер таила
dc.w $0000 ; -//-
dc.w $0129 ; -//-
.....
dc.w $0000 ; х.з.
dc.w $7FFF ; конец конфига

типы поведения, например:
dc.w $0000 ; поверхность по которой можно ходить. нельзя ходить через нее и стрелять.
dc.w $0004 ; боковая поверхность для стен, можно карабкаться вверх/вниз.
dc.w $0005 ; площадка - можно ходить сверху, простреливается, можно запрыгнуть на нее снизу.

Таилы с коллизиями в видео памяти ставятся в самый конец участка памяти и идут последовательно.
Я так понимаю ссылка указывает на начальный таил с которого он и последующие будут иметь определённые свойства, пока следующая ссылка не укажет на начальный таил с новыми свойствами. И короче при изменении какого-то одного типа коллизий всё нормально, при изменении нескольких они начинают путаться и вообще фиг знает что происходит.
spiiin:
Слепил плагин для перепаковки дампов и засовывания в ROM. Не знаю, будет ли полезным. За пакер игровых архивов спасибо r57shell и DrMefistO
https://github.com/spiiin/CadEditor/releases/tag/v4.6

Segaman, а как ты кстати уровни в игре меняешь?
spiiin:
Nemesis_c
Ты неправильно расшифровал тип коллизий.

Конфиг коллизий:
0000 - код начала описания коллизий
04A9, 0004 - пары из начального номера тайлов и типа группы тайлов, как ты и расшифровывал (но сначала идёт номер тайла, а потом его тип, а не наоборот).
....
0005 0000 - последняя пара значений (а, возможно, просто код окончания, надо смотреть код или конфиги других уровней)
7FFFF - код окончания описания коллизий.

На скрине выделено описание 8 типов физики блоков первого уровня.
Раскодировка типов тайлов:
0000 - фон
0001 - платформа (может запрыгивать снизу и спрыгивать)
0002 - ???
0003 - перекладина (можно висеть снизу и сбоку)
0004 - пол
0005 - ???
0006 - перекладина (можно висеть снизу, но нельзя сбоку)
0007 - наклонная платформа упавшего дома, более пологий подъём (см. блок C3 - в CadEditor - есть все 4 типа платформ упавшего дома)
0008 - наклонная платформа упавшего дома, более крутой подъём
0009 - наклонная платформа упавшего дома, наименее крутой подъём
000A - наклонная платформа упавшего дома, почти без наклона

(можно с помощью CadEditor составлять тестовый блок из тайлов соотвествующего типа и убедиться, что кодировка действительно именно такая)

Оставшиеся типы (0002 и 0005) можно найти в конфигах других уровней
Nemesis_c:
spiiin, я там тебе поэмы в личку строчу а ты уже тут всё выложил  :lol:
попробую поправить у себя в собиралке, о результатах отпишусь
SeregaZ:

вот черт... не тот ролик :) там "пули" были из игры еще на видео наложены :))))
Nemesis_c:
 

работает  :)
Scarabay:
Nemesis_c, хочешь перенести уровни из первой контры?
Nemesis_c:
Scarabay, нет. Просто тестирую движок и инструменты. Для переноса первого уровня с нес надо для начала организовать плавание, ныряние, стрельбу из воды, дорисовать кучу спрайтов, написать босса... а это ппц. Да и первый уровень с нес не вписывается вообще в игру. Все взоры на снес. Графику первого уровня подгоняю потихоньку под сегу мегу - уже почти готово, скоро буду блоки составлять и уровень отрисовывать. 
Segaman:
короче вот как коллизии находятся для тайлов

-отнимается начало спрайтов (спрайты отображаются не с нуля, а с 128)
-прибавляется позиция камеры
-координаты округляются соответственно размеру уровня умноженному на размер блоков (32)
-Х делится на 32, а Y умножается на 8
-результат суммируется и получается адрес блока 32*32 внутри уровня
-полученный результат суммируется с адресом дизайна уровня
-получаем индекс блока 32*32 в уровне
-полученный индекс умножается на 16
-считаются координаты внутри тайла (0-7) и внутри блока (0-3)
-полученный результат суммируется с адресом таблицы столкновений
-прочитывается индекс столкновения из таблицы столкновений
а далее уже на усмотрение игрового кода

если перевести дочловно на высокоуровневый код C, то получится что-то такое:

--- Код: ---word xInLevDesign,yInLevDesign;
word blockId, colId, resultAddress;
word xInTile,yInTile,xInBlock,yInBlock;

xInLevDesign = x - 128 + cameraX;
yInLevDesign = y - 128 + cameraY;

xInLevDesign &= (LevWidth*32); // в первом уровне это $1FE0
yInLevDesign &= (LevHeight*32);// в первом уровне это $1E0

xInLevDesign = xInLevDesign/32;// дизайн уровня содержит id блоков 32*32
yInLevDesign = yInLevDesign*8;

blockId = LevelDesign[ xInLevDesign + yInLevDesign ];

resultAddress = blockId * 16;

xInTile  = x & 0x7;
yInTile  = y & 0x7;
xInBlock = (x & 0x18) / 8; // тоже что и ((x/8)&0x3)
yInBlock = (y & 0x18) / 2; // тоже что и ((y/2)&0x3)

resultAddress += xInBlock + yInBlock;

colId = LevelTileColTable[ resultAddress ];

--- Конец кода ---

Добавлено позже:
а таблица столкновений, та которая к уровню привязывается, грузится в $FF4000 как копия таблицы блоков, только в ней хранятся байты, а не ворды, и они указывают лишь на метод столкновения.
иными словами, блоку 32*32 с его 4*4 тайлами, соответсвует такое же число значений столкновений.
на старте уровня, блоки тайлов 32*32 грузятся в память, а потом игра проходится по таблице столкновений и если тайл, внутри блока равен тому, что говорит о столкновении, то он пишется в  таблицу столкновений.
и прочитать такое столкновение внутри блока очень просто, достаточно поделить адрес тайла внутри блока на 2 (потому что байт)
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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