Nemesis_c | Дата: Пятница, 20.09.2013, 23:32 | Сообщение # 1 |
Сообщений: 1148 Статус: Offline
| Формат уровней
Указатели на настройки уровней: ROM:0000708E lsl.w #2,d0 ROM:00007090 lea (off_296B0).l,a0 ; ссылки на конфиги уровней ROM:00007096 move.l (a0,d0.w),($FFF9CA).l ROM:0000709E rts
Шапка настроек уровня (на примере первого уровня): ROM:0002A8E8 dc.l unk_BB5A2 ; карты таилов каждой плиты (плита = 8*8 таилов) ROM:0002A8EC dc.l word_B5EEE ; (сжат sub_B00) карта уровня - блоки идентичны снесовским ROM:0002A8F0 dc.l unk_E36A2 ; (сжат sub_B00) коллизии - в преводе "столкновения" (проходимость короче) ROM:0002A8F4 dc.l unk_9E07A ; (сжат sub_B00) таилы уровня ROM:0002A8F8 dc.l word_E40AA ; статичные палитры уровня ROM:0002A8FC dc.l dword_0 ; a pointer to the sprite palette for the level ROM:0002A900 dc.l word_2A972 ; возобновляемые враги (перерождающиеся после убийства) ROM:0002A904 dc.l word_2AA1C ; жертвы и не возобновляемые враги ROM:0002A908 dc.l word_2AA96 ; предметы ROM:0002A90C dc.w $16 ; размер карты по Х ROM:0002A90E dc.w $D ; размер карты по Y ROM:0002A910 dc.w $6D ; хер знает 1 ROM:0002A912 dc.w $1FF ; хер знает 2 - всегда 1FF ROM:0002A914 dc.w $15E ; координата Х - игрок 1 ROM:0002A916 dc.w $249 ; координата Y - игрок 1 ROM:0002A918 dc.w $15E ; координата Х - игрок 2 ROM:0002A91A dc.w $272 ; координата Y - игрок 2 ROM:0002A91C dc.w $2C ; музыка на уровне ROM:0002A91E dc.l unk_2A92E ; текст перед уровнем - первая страница ROM:0002A922 dc.l unk_2A94D ; текст перед уровнем - вторая страница ROM:0002A926 dc.l word_2A96C ; настройка доступных бонусов на уровень
далее конфиги смены день/ночь палитр, анимация плит и конфиги боссов (ненужные конфиги просто не пишутся, конец конфигов = лонг нулей)
ROM:0002E88C dc.l sub_31DC ; сценарий смены палитры день/ночь (можно просто не писать) ROM:0002E890 dc.l word_E44DA ; группа палитр для смены согласно сценария (можно просто не писать)
ROM:0002E894 dc.l sub_261E ; что-то с анимацией пола - пока не разобрал (можно не писать) ROM:0002E898 dc.l off_2E8A8 ; что-то с анимацией пола - пока не разобрал (можно не писать)
ROM:0002E89C dc.l loc_220E2 ; босс (доктор тонгу (паук затем голова - проверка в коде)) (можно не писать) ROM:0002E8A0 dc.w $C8 ; координата Х босса (можно не писать) ROM:0002E8A2 dc.w $12C; координата У босса (можно не писать)
ROM:0002A92A dc.l dword_0 ; конец шапки
Карты таилов плит: всего на любой уровень дается 256 плит каждая плита размером 8 на 8 таилов карты таилов идут подряд начиная с нулевой плиты на отрисовку плит дается 512 таилов, грузятся c $0000 пример: первая плита (00- дверь) - первые 64 ворда для редактирования уровней существующих локаций следует только подменять адреса в этой строке на уже готовые настройки блоков. Варианты настроек карт таилов плит для существующих уровней: $BB5A2 ;город/лес $D36A2 ;магазин/завод $C35A2 ;пирамида/пляж $CB5A2 ;замок $DB6A2 ;офис
Коллизии: логики никакой, кроме того что размер в 4 раза больше чем плит на уровне, то есть на настройку одной плиты идет один лонг видимо... в любом случае для редактирования уровней существующих локаций следует только подменять адреса в этой строке на уже готовые настройки плит. в случае если кто-то решит добавить новую графику - можно просто графику подогнать под настройки коллизий любого уровня. Варианты настроек коллизий плит для уровней: $E36A2 ; коллизии - город/лес $E3A9C ; коллизии - магазин/завод $E37F2 ; коллизии - пирамида/пляж $E3950 ; коллизии - замок $E3BF0 ; коллизии - офис
Таилы уровня: для редактирования уровней существующей графикой нужно только подменять адреса. Всего в игре 5 блоков таилов уровней: $9E07A ; таилы город/лес $A514C ; таилы магазин/завод $A05B8 ; таилы пирамида/пляж $A2BA6 ; таилы замок $A7588 ; таилы офис
Палитры уровня: в начале перед палитрами стоит размер палитр $0040 или х.з. короче.. после $0040 идут 4 не сжатые палитры.
Возобновляемые враги: Каждый возобновляемый враг имеет следующие параметры: Код ROM:0002A972 dc.w $32 ; радиус респауна ROM:0002A974 dc.w $5C ; координата Х ROM:0002A976 dc.w $8B ; координата У ROM:0002A978 dc.w 0 ; задержка между респауном ROM:0002A97A dc.l sub_15296 ; ссылка на код врага (обычный зомби)
Типы возобновляемых врагов: $15296 ; Обычный зомби $1540C ; Быстрый зомби $15872 ; Мумия $16C86 ; Клон$16d6c - быстрый клон $162BE ; Марсианин 1 $16346 ; Марсианин 2 $1614E ; Оборотень $1861A ; Чаки $18B92 ; Бегающий огонь $19C5E ; синий муравей $19E10 ; синий муравей 2 $174B6 ; Рекбист $17A8E ; Слизень $1B1A8 ; Гриб с ногами $1CF32 ; Подводный монстр 1 $1CE4A - подводный монстр 2 агрессивный $1B698 ; Щупальце (Тентакль) $227B8 - паучок
После всех врагов слово нулей - типа конец 0000.
Жертвы/соседи и не возобновляемые враги: Каждая жертва или невозобновляемый враг имеют следующие параметры: Код ROM:0002AA40 dc.w $BE ; координата по Х ROM:0002AA42 dc.w $1F7 ; координата по У ROM:0002AA44 dc.w 0 ROM:0002AA46 dc.w 4 ; номер жертвы от 1 до A либо 0 если это не жертва а не возобновляемый враг ROM:0002AA48 dc.l loc_129EC ; ссылка на код жертвы/не возобновляемого врага (девка из группы поддержки)
Типы жертв: $11CF0 ; Чувак с сосисками $11E44 ; Младенец $11F7C ; Девка на батуте $12164 ; Вояка $1236C ; Собака $12550 ; Сын доктора тонгу $12668 ; Училка $128EE ; Археолог $12748 ; чувак в бассейне $129EC ; Девка из группы поддержки $12B7E ; Туристы После десяти жертв в этом же формате идут не возобновляемые враги - их номер жертвы всегда ноль 0.
Типы не возобновляемых врагов: $1E91C ; Дракула $1ABB6 ; Маньяк с бензопилой $1DB98 ; Франкенштейн $1ADCA - статичный огонь не возобновляемый $1f1cc - растение 1 $1f1d6 - растение 2 усилено $22BFE ; Исчезающий Dr. Tongue $1F908 ; Гигантская голова (уровень в офисе разработчиков с титрами) $19D34 - муравей не возобновляемый, очень быстрый После всех жертв или жертв/не возобновляемых врагов идет слово 0000.
Предметы: Каждый предмет имеет следующие параметры: ROM:0002AA96 dc.w $133 ; координата Х ROM:0002AA98 dc.w $87 ; координата У ROM:0002AA9A dc.w 0 ; предмет (0 = водяной пистолет)
#$0000 ; Водяной пистолет #$0002 ; Огнетушитель #$0004 ; Марсианский пистолет #$0006 ; Газонокосилка #$0008 ; Ключ #$000A ; Ботинки #$000C ; Зелье монстра #$000E ; Зелье призрака #$0010 ; Зелье рандом #$0012 ; Зелье желтое - не используется #$0014 ; Гамбургер #$0016 ; Содовая #$0018 ; Помидоры #$001A ; Мороженное #$001C ; Бананы - не используется #$001E ; Аптечка #$0020 ; Тарелки #$0022 ; Столвое серебро #$0024 ; Крест #$0026 ; Базука #$0028 ; Мячи для рекби #$002A ; Огнемет ??? / банка с краской #$002C ; Ящик пандоры #$002E ; Ключ с черепом #$0030 ; Клоуны #$0032 ; Куча ключей (используется толлько при смерти игрока) #$0034 ; Бонусный уровень #$0036 ; 1up #$0038 ; Монеты #$003A ; Купюры После всех предметов идет слово 0000 и ниипет.
Боссы: в шапке пишется сначала указатель на код босса, затем координаты босса Х и У
;$2142a - огромный младенец босс ;$220E2 - доктор тонгу босс (паук или голова - проверка в коде) ;$2012a - нло босс ;$23e14 - земляной червь босс (медленный червь) ;$23e1e - земляной червь + 2 оборотня босс (быстрый агрессивный червь, приследует игрока)
Хер знает 2: всегда равно 01FF
Музыка на уровнях: #$02 = Evening of the Undead (02) #$05 = Title Screen #$28 = Pyramid of Fear () #$2A = Terror in Aisle Five () #$2C = Zombie Panic (01) #$2D = Chainsaw Mayhem () #$2E = Mars Needs Cheerleaders () #$2F = Dr. Tongue's Castle #$06 = Mushroom men #$03 = The son of dr Tongue #$01 = неиспользуемая мелодия - ремикс на тему Zombie Panic #$17 = мелодия level complate #$18 = мелодия при смерти
Голоса: #$07 = no [nouph] #$08 = выстрел из базуки #$09 = ouch #$0a = бензопила #$0b = крик жертвы #$0c = му-ха-ха-ха #$0d = вой оборотня #$0e = рев игрока-монстра при эффекте берсерка #$11 = ха-ха-ха младенца мутанта #$12 = туруру XD ящик пандоры
Текст перед уровнем: текст имеет следующие параметры:
unk_2A92E: ; первая страница текста dc.b 3 ; координата по х dc.b 4 ; координата по у dc.b 2 ; палитра (смотри ниже) dc.b $61 ; a ; R dc.b $5B ; [ ; e dc.b $53 ; S ; s dc.b $43 ; C ; c dc.b $55 ; U ; u dc.b $63 ; c ; e dc.b $7D ; } ; T dc.b $22 ; " ; h dc.b $62 ; b ; e dc.b $FF ; end dc.b 4 dc.b $B dc.b 2 dc.b $4E ; N ; N dc.b $56 ; V ; ei dc.b $47 ; G ; g dc.b $48 ; H ; h dc.b $42 ; B ; b dc.b $65 ; e ; o dc.b $61 ; a ; r dc.b $5C ; \ ; s dc.b $FF ; end dc.b $D dc.b $12 dc.b 2 dc.b $70 ; p ; i dc.b $4E ; N ; n dc.b 0 ; конец страницы
unk_2A94D: ; вторая страница текста dc.b 9 dc.b 4 dc.b 2 dc.b $6C ; l ; L dc.b $6D ; m ; e dc.b $75 ; u ; v dc.b $76 ; v ; e dc.b $64 ; d ; l dc.b $7D ; } dc.b $31 ; 1 ; 1 dc.b $FF ; end dc.b 3 dc.b $C dc.b 2 dc.b $5A ; Z ; Z dc.b $65 ; e ; o dc.b $4D ; M ; m dc.b $42 ; B ; b dc.b $70 ; p ; i dc.b $63 ; c ; e dc.b $FF ; end dc.b $D dc.b $12 dc.b 2 dc.b $50 ; P ; P dc.b $41 ; A ; a dc.b $4E ; N ; n dc.b $70 ; p ; i dc.b $43 ; C ; c dc.b 0 ; конец страницы dc.b 0
00 = синие буквы 02 = зеленые буквы 04 = оранжевые буквы 06 = красные буквы
;============================ КОПИПАСТА ИЗ СНЕСОВСКОГО ОПИСАНИЯ ТОГО ЧТО Я НЕ РАЗОБРАЛ структура схожа что в снес что на сеге
Хер знает 1: Это значение всегда соответствует таилам этого уровня: 0057 = Office 0059 = Pyramid 0069 = Mall 0070 = Grass/Castle
Настройка доступных бонусов на уровень: All of the bonuses available in the level are listed. They are 2 bytes each. НОМЕРА НЕ ПРАВИЛЬНЫЕ - НЕ ПРОВЕРЯЛ 0004 = All Victims Saved 0006 = Ten Cheerleader 0008 = Massive Destruction 000A = Pass Completion 000C = Weed Cutting 000E = No Bazooka Fired 0010 = Monster Frozen 0012 = Extermination 0014 = Chainsaw Begone 0016 = Fish Fry Bonus 0018 = Frankenstein Destroyed 001A = Martian Bubbled 001C = Alien Invasion Repulsed 001E = Vampire Crossed Out 0020 = Secret Bonus После всех бонусов идет слово #$0000.
Boss monsters: Данные босса указаны непосредственно после шапки Настройки любого босса идут в таком формате: |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f --+-------------------------------------------------- 00|CODEPOINTER EXTRADATA-- CODEPOINTER - a pointer to the monsters code $82873C = UFO $829569 = Giant Baby $82A8BB = Desert Snakeoid $82A8C3 = Grass Snakeoid $82AB95 = Palette fade $82D7CF = Unknown $83AD33 = Giant Spider EXTRADATA - 4 bytes of extra data that can be used by the monster. For all standard monsters this is 2 bytes for the x position followed by 2 bytes for the y position, but for the palette fade sprite, these 4 bytes specify a pointer to somewhere inside of the level file to this data:
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f --+-------------------------------------------------- 00|NEWBGPALETT NEWSPRITEPL
NEWBGPALETT - A pointer to the background palette to fade to NEWSPRITEPL - A pointer to the sprite palette to fade to
После всех боссов в шапке должно быть двойное слово нулей 00000000.
Tileset Map16: *Yaz0 - популярное для снес сжатие This data is compressed using a compression method similar to Yaz0. Once decompressed, this is the format: Each tile gets 2 bytes. The first byte tells which graphics tile to use. The second bytes individual bits set properties for the tile. XY-PPP-G
X - Flip the tile horizontally Y - Flip the tile vertically P - The palette to use for the tile G - Use the second graphics page (add 0x100 to the original graphics tile number)
Each full background tile is made of 64 of these. The tileset has 256 background tiles.
Addresses:
$9A:C000 = Castle $9B:8000 = Grass $9B:BCB5 = Pyramid/Beach $9C:8000 = Office $9C:B6EF = Mall
Background data: This is just the numbers of the background tiles listed from left to right, top to bottom. Each tile is 2 bytes. Collision data
There are 2 bytes for each graphics tile. The bits set properties of the tile. What each bit does is currently unknown.
Addresses:
$9B:F4D1 = Grass $9B:F8D1 = Pyramid/Beach $9C:EAAB = Castle $9C:EEAB = Mall $9C:F2AB = Office
Graphics data: The graphics are stored in 4bpp planar format. There are 512 tiles per tileset.
Addresses:
$98:8000 = Grass $98:C000 = Pyramid/Beach $99:8000 = Castle $99:C000 = Mall $9A:8000 = Office
Palette data
Standard 0BBBBBGG GGGRRRRR color format. 128 colors are in the palette.
Addresses: $9E:xx76
8E = Grass 90 = Fall grass 91 = Snowy grass 92 = Night grass 94 = Pyramid 95 = Beach/Desert 96 = Dark beach 97 = Cave 98 = Castle 99 = Night castle 9A = Bright castle 9B = Dark castle 9C = Mall 9D = Dark mall 9E = Office 9F = Dark fire cave A0 = Light office A1 = Dark office A2 = Fire cave Sprite palette
Standard palette format. Is always $9E:8F76 Palette animation
This appears to point to code. I haven't yet tried to figure out how the code works.
Addresses:
$80A0AD = Castle $80A0EF = Grass $80A137 = Beach $80A222 = Pyramid $80A264 = Fire cave ;================================================================
$2c0a - воспроизвести звук??? $FFF91c - шапка уровня
|
|
| |
r57shell | Дата: Суббота, 21.09.2013, 17:25 | Сообщение # 2 |
Сообщений: 632 Статус: Offline
| судя по всему, разжималка использует словарь. скорее всего не стандартная. из формата узнал только то, что первые 2 байта это размер распакованного архива.
Мальчик, девочка... какая в жопу разница..
|
|
| |