| Разработка и ромхакинг > Ромхакинг и программирование |
| [SMD] хакинг Dune: The Battle for Arrakis |
| << < (30/447) > >> |
| Segaman:
А я на соник ретро хакингу научился и подучил несколько функций. достаточно, шоб ром написать(мой проигрыватель тому док-во) вообщем ладно. вот только я непонял ничего про netplay и т.п. извини, я незнаю шо это и с чем его едят, если мож, разьясни. |
| Ti_:
--- Цитата: Segaman от 21 Сентябрь 2009, 21:22:54 ---вообщем ладно. вот только я непонял ничего про netplay и т.п. извини, я незнаю шо это и с чем его едят, если мож, разьясни. --- Конец цитаты --- netplay - gens-сетевая игра - kaillera - что тут непонятно то. |
| topos84:
--- Цитата: Ti_ ---netplay - gens-сетевая игра - kaillera - что тут непонятно то. --- Конец цитаты --- Так он в генс по каиллере не играл, у него же безлимитки нету. |
| Ti_:
Map Cfg: начнем всё сначала (так как я тут рыться нехочу) 1) найдем примерное расположение карты в роме (это я знаю) 2) запускаем генсдебаг от Яковлева. запускаем дюну. вводим код на уровень 8атрейдес и делаем сейв. ставим брейк на чтение и PC в диапозон этой карты+немного больше. жмем начать миссию. вылезет окно бряк на чтение по 58DD2. Отлично. видимо это начало кфг карты. теперь ищем ее точный конец. (оставляем чтение тока прибл. в конце.) конец получается - 598B8. : (FFFF) 3)выделяем этот участок , создаем файл atreides8.cfg.bin и туда ее копируем. карта в отдельном файле для удобства. 4)теперь запускаем IDA, и по тому первому адресу что вылез анализируем код. из чего делаем вывод что ничего не ясно. так как 58DD2 находится в (A2) 5)тогда найдем откуда он там взялся. можно поставить в генсдебаг на а2 58dd2 бряк. но я просто запустил gensmovie11 и кинул tracelog перед загрузкой.: --- Код: ---00:46BE 22 41 MOVE.L D1,A1 A0=FFFFFF82 A1=00052E22 A2=FFFFFF82 A3=00052D04 A4=00000000 A5=00C00004 A6=FFFFFFA6 A7=FFFFFF72 D0=00000000 D1=00052E27 D2=00000049 D3=00000001 D4=00000008 D5=00000000 D6=00000000 D7=00000000 xnzvc 00:46CA 20 2B MOVE.L $0004(A3),D0 A0=FFFFFF8F A1=00052E34 A2=FFFFFF82 A3=00052D04 A4=00000000 A5=00C00004 A6=FFFFFFA6 A7=FFFFFF72 D0=00000000 D1=00052E27 D2=00000049 D3=00000001 D4=00000008 D5=00000000 D6=00000000 D7=00000000 xnZvc 00:46CE 60 04 BRA #$04 [00:46D4] A0=FFFFFF8F A1=00052E34 A2=FFFFFF82 A3=00052D04 A4=00000000 A5=00C00004 A6=FFFFFFA6 A7=FFFFFF72 D0=00058DD2 D1=00052E27 D2=00000049 D3=00000001 D4=00000008 D5=00000000 D6=00000000 D7=00000000 xnzvc --- Конец кода --- 6)анализируем этот участок в ИДЕ и опять смотрим. ROM:000046B0 lea (off_52C34).l,a3 ROM:000046B6 moveq #0,d0 ROM:000046B8 ROM:000046B8 loc_46B8: ; CODE XREF: sub_46A8+2Aj ROM:000046B8 movea.l a2,a0 ROM:000046BA move.l (a3),d1 ROM:000046BC beq.s loc_46D4 ROM:000046BE movea.l d1,a1 7) ага по 52c34 походу то что мы ищем- таблица адресов конфигов карт. 8) идем в IDE по 52C34 и нажимаем на "O". пока не найдем нужный адрес. --- Код: ---ROM:00052C34 off_52C34: dc.l unk_52D60 ; DATA XREF: sub_46A8+8o ROM:00052C34 ; sub_4A34+8o ROM:00052C38 dc.l unk_4DB30 ROM:00052C3C dc.l unk_52D6A ROM:00052C40 dc.l unk_4DF62 ROM:00052C44 dc.l unk_52D75 ROM:00052C48 dc.l unk_4E02A ROM:00052C4C dc.l unk_52D7E ROM:00052C50 dc.l unk_4E188 ROM:00052C54 dc.l unk_52D87 ROM:00052C58 dc.l unk_52F2C ROM:00052C5C dc.l unk_52D91 ROM:00052C60 dc.l unk_53180 ROM:00052C64 dc.l unk_52D9D ROM:00052C68 dc.l unk_5407C ROM:00052C6C dc.l unk_52DA8 ROM:00052C70 dc.l unk_54A3E ROM:00052C74 dc.l unk_52DB4 ROM:00052C78 dc.l unk_556E6 ROM:00052C7C dc.l unk_52DC0 ROM:00052C80 dc.l unk_56422 ROM:00052C84 dc.l unk_52E41 ROM:00052C88 dc.l unk_5A378 ROM:00052C8C dc.l unk_52E4E ROM:00052C90 dc.l unk_5A4EE ROM:00052C94 dc.l unk_52E5B ROM:00052C98 dc.l unk_5A74A ROM:00052C9C dc.l unk_52E68 ROM:00052CA0 dc.l unk_5AA48 ROM:00052CA4 dc.l unk_52E75 ROM:00052CA8 dc.l unk_5AF16 ROM:00052CAC dc.l unk_52E82 ROM:00052CB0 dc.l unk_5B528 ROM:00052CB4 dc.l unk_52E8F ROM:00052CB8 dc.l unk_5BBA0 ROM:00052CBC dc.l unk_52E9C ROM:00052CC0 dc.l unk_5C50E ROM:00052CC4 dc.l unk_52EA9 ROM:00052CC8 dc.l unk_5D00C ROM:00052CCC dc.l unk_52DCC ROM:00052CD0 dc.l unk_56FAE ROM:00052CD4 dc.l unk_52DD9 ROM:00052CD8 dc.l unk_57144 ROM:00052CDC dc.l unk_52DE6 ROM:00052CE0 dc.l unk_57378 ROM:00052CE4 dc.l unk_52DF3 ROM:00052CE8 dc.l unk_575E4 ROM:00052CEC dc.l unk_52E00 ROM:00052CF0 dc.l unk_57A96 ROM:00052CF4 dc.l unk_52E0D ROM:00052CF8 dc.l unk_58044 ROM:00052CFC dc.l unk_52E1A ROM:00052D00 dc.l unk_58654 ROM:00052D04 dc.l unk_52E27 ROM:00052D08 dc.l unk_58DD2 --- Конец кода --- 9) ура мы его нашли. да это точно он 58DD2 . стираем и пишем 100000. 10) добавляем 1мегабайт к файлу dune the battle for arrakis (u) [!].bin. 11) копируем нашу карту из 58DD2 или atreides8.cfg.bin в адрес $100000. 12) удаляем карту (заполняем нулями) адрес 58dd2-598b8. 13) перезагружаем ром в эмуле. загружаем сейв. стартуем карту. всё работает. перемещение завершено. никаких пересобираний ромов и ассембелеров. теперь у нас много места под создание/переделывание этой карты. сделано за 10минут.+30минут на написание текста) Ссылка на скачку (в архиве ром с перемещенной картой и сама карта отдельно) |
| ALEX_230_VOLT:
а вы что хотите в Дюну нетплэй ввести? :wow: было бы здорово :) в Rock'n'roll Racing же смогли написать программу чтобы первый игрок видел только себя, вот и в Дюне так же надо |
| Ti_:
--- Цитата: ALEX_230_VOLT от 22 Сентябрь 2009, 01:00:10 ---а вы что хотите в Дюну нетплэй ввести? :wow: было бы здорово :) в Rock'n'roll Racing же смогли написать программу чтобы первый игрок видел только себя, вот и в Дюне так же надо --- Конец цитаты --- был бы в дюне второй игрок, это почти нереально -забудь. я же в скобках спецом указал что к дюне это не относится) |
| topos84:
--- Цитата: Ti_ ---никаких пересобираний ромов и ассембелеров. теперь у нас много места под создание/переделывание этой карты. сделано за 10минут.+30минут на написание текста) --- Конец цитаты --- Видимо, Segaman не из тех, кто ищет простых путей. :) Добавлено позже: ALEX_230_VOLT, это же надо уметь на сегу программировать, чтобы ввести второго игрока в Дюну. Тут одним ромхакингом не обойдешься. А было бы конечно круто, если мультиплеер ввести. Это же даст вторую жизнь игре! Писишная Дюна 2 только потому и не забыта фанатами, что мультиплеер в ней есть. Кстити и редакторы под нее тоже есть. А тут вот редактор есть, а мультиплеера нет. Вот про нее и забыли почти все геймеры (с компом же скучно играть). |
| Ti_:
[Часть 2]. Теперь разберем полностью формат карт. 14) Копируем каждую карту в отдельный файл. как и предыдущ. (это понадобится нам для быстроого сравнения) 15) открываем PC-шный конфиг карт дюны ( я взял из dune2themaker) -выкладывал уже. SNENO022.INI: [BASIC] LosePicture=LOSTBILD.WSA WinPicture=WIN2.WSA BriefPicture=SARDUKAR.WSA TimeOut=0 MapScale=0 CursorPos=3422 TacticalPos=3160 LoseFlags=1 WinFlags=3 16) сравнием наши дампы карт. (открываем в винхексе сразу все). смотрим: все карты: 00 00 00 0E LOSTBILD.WSA 00 00 или 00 00 00 0E LOSTVEHC.WSA 00 00 00 01 00 0A WIN1.WSA 00 57 или 00 01 00 0A WIN2.WSA 00 57 00 02 00 0C HARVEST.WSA 00 00 или 00 02 00 0E HEADQRTS.WSA 00 00 или 00 02 00 0A QUAD.WSA 00 57 00 02 00 0A LTANK.WSA 00 00 00 02 00 0C REPAIR.WSA 00 41 и др. видимо: 00 00 = LosePicture , 00 0E - длина строки предполож. 00 01 = WinPicture 00 02 = BriefPicture все карты: 00 03 00 00 00 03 = Timeout (timeout= 00 00) ; предполож. таймер. первые две карты: 00 04 00 01, остальные 00 04 00 00 00 04 = MapScale. ; увелич. (для первых 2) (mapscale = 00 00 или 00 01) далее: 00 05 03 F3 00 06 03 F3 00 05 = CursorPos ; позиции курсора и экрана 00 06 = TacticalPos далее: 00 07 00 04 00 07 = LoseFlags? ; флаги пораж. далее: 00 08 00 06 00 08 = WinFlags? ; флаги победы SNENO022.INI: [MAP] Bloom=983,1762,2015,3343,3383 Field=83,130,156,177,231,381,567,1080 Seed=392 миссия 1: 01 53 00 01 ? 03 51 03 E8 03 43 03 ED 03 42 00 48 миссия 2: 01 53 00 02 ? 01 42 00 03 02 42 03 CF 04 1C 03 51 миссия 3: 01 53 00 03 ? 02 51 00 00 02 43 01 3c 02 42 00 43 миссия 4: 01 42 00 02 ? 09 03 0D 77 01 53 00 04 02 51 00 00 ? что-то связанное с картой(землей). 01 53 = карта земли , 00 01 = ее номер. далее должны идти дома: SNENO022.INI: [Harkonnen] Quota=0 Credits=1500 Brain=CPU MaxUnit=20 (вспоминаем что на 1ур мы атреидеc и нам дается 1000 кредитс) 1000>HEX>03E8 03 51 03 E8 = 1000cr? 03 51 = atreides quota ; набрать кредит 03 43 03 ED = 990cr? 03 43 = atreides credits ; старт кредиты 03 42 00 48 ; ? atreides brain = player ; мозг 03 4D 00 19 ; atreides max units = $19 ; юнит лимит (далее пойдет комп. ордос) 04 51 00 00 = 04 51 = ordos quota (0) 04 43 00 00 04 43 = ordos credits (0) 04 42 00 43 ; ordos brain = cpu 04 4D 00 10 ; ordos max units = $10 (16) вычеркиваем пред.строки.(оказалось что там только номер земли, а ост. относится к дому) далее в SNENO22.INI : [CHOAM] Trike=5 Quad=5 Tank=6 Launcher=5 Siege Tank=6 Harvester=4 MCV=2 Thopter=5 Carryall=2 видимо старпорт. (на 1-ой миссии его нет). как найдем юниты мы его поставим. 17) в теме уже описывались юниты и здания. я знаю что в конце идут здания , перед ними юниты, а вот между началом и ними и находятся старпорт и десант. поэтому я вначале отделю юнитов и зданий. (листаю тему). Добавлено позже: юниты: 08 01 00 02 00 04 01 00 00 41 00 80 00 0B 08 02 и т.д. (0801 = UnitId) здания: у нас оно одно. 09 49 00 13 00 01 00 08 01 00 04 С8 18) отбрасываем юниты и здания (это уже много раз тут описывалось поэтому не буду про них писать), перед ними остаются строки: 06 0D 00 05 06 0F 00 05 06 09 00 06 06 07 00 05 06 0A 00 06 06 10 00 04 06 11 00 02 06 01 00 05 десанта на 1уровне нет, значит это либо старпорт либо что-то еще. в любом случае если это не старпорт мы сможем найти его на других уровнях. 19) откроем наш файл и сменим тип здания на старпорт... Добавлено позже: 09 49 00 13 00 01 00 08 01 00 04 С8, где 00 08 - тип здания. меняем на 00 0B (стартпорт) 20) 06 0D 00 05 06 0F 00 05 судя по SCENO22.INO если это десант , то 0D - тип юнита. 00 05 - кол-во стока. меняем тип и кол-во юнита: 06 0A 00 09 (соник-танк 9шт) 06 0B 00 09 (девастатор 9шт) результат: 21) Добавлено позже: остался десант: листаем тему и на 13(!) старнице находим . о чудо! --- Цитата: Ti_ ---0A05 0002 0006 0006 1111 - desant(ID), дом, юнит, unkn(base,home?), через сколько высадка. --- Конец цитаты --- , где ID от 01 до 0F (насколько я помню лимит в 15) также в SCENO22.INI [REINFORCEMENTS] 1=Sardaukar,Troopers,Enemybase,12+ 2=Atreides,Siege Tank,Enemybase,12+ Заключение: мы полностью разобрали cfg карты. Можем прописать дома,условия,юниты,здания, десант,старпорт. Из того что не можем прописать - доступные строения/апгрейды. Видимо задается где-то ещё. Заключение2: сколько команд ассемблера нужно знать чтобы разобрать часть2: cfg карты? правильно! 0 КОМАНД! |
| Segaman:
0о нет слов... молодец, чувак, колосальная работа достойная награды. Сёня набросаю патч, для поддержки этой опции |
| Ti_:
Часть3: 1) находим в поиске кодов адрес номера уровня в ram. (сравниаем ram после набора пароля на уровень по порядку с ~2 до 7). выдаст н-ко значений, одно из них опредляет уровень целиком. (брифинги, карту, и т.д.), еще одно определяет только номер конфига карты., остальные вызывают всякие баги и вылеты я их не смотрел особо. итого - номер уровня FFC050:xx , xx= от 00 до 09 (все дома) 2) смотри в ИДЕ к этому адресу слишком много обращений , так что фиг там разберешься. 3) пробуем менять этот адрес до загрузки карты и во время игры. загружаем миссию 8 в игре строим ветряк и рефинери. , меняем ffc050 на 01 - заходим в сбор.двор. и видим что пропало старпорт из списка. ,строим радар, меняем ffc050 на 05 и видим что теперь необ.делать апгрейд до r-turret) вообщем вывод что опрашивается номер уровня каждый раз когда мы заходим в сбор.двор и потом по нему определяются доступные здания. 4) ставим брейк на ffc050 на чтение. и заходим в сбор.двор. сразу вылезет окно c $FF52 --- Код: ---ROM:0000FF52 move.w (levelnum).l,d2 ROM:0000FF58 ext.l d2 ROM:0000FF5A cmp.l d0,d2 ROM:0000FF5C blt.s loc_FFBA ROM:0000FF5E moveq #1,d0 ROM:0000FF60 move.b 8(a2),d2 ROM:0000FF64 ext.w d2 ROM:0000FF66 ext.l d2 ROM:0000FF68 lsl.l d2,d0 ROM:0000FF6A moveq #0,d2 ROM:0000FF6C move.b $32(a3),d2 --- Конец кода --- тут ниче не ясно, но если нажать будет еще 7-8 таких опросов. с этим же адресом. смотрим чем они отличаются.(регистры). кроме всякой лабуды увидим A3=0006AFAE на след нажатие A3=6B014; A3=6B0E0. 5) идем по этим адресам в роме и видим: --- Код: ---ROM:0006AFAE word_6AFAE: dc.w $E8 ; DATA XREF: ROM:off_6B954o ROM:0006AFB0 dc.b 0 ROM:0006AFB1 dc.b 0 ROM:0006AFB2 dc.b $BB ; ¬ ROM:0006AFB3 dc.b $60 ; ` ROM:0006AFB4 dc.b 0 ROM:0006AFB5 dc.b $E9 ; ù --- Конец кода --- --- Код: ---ROM:0006B014 word_6B014: dc.w $EA ; DATA XREF: ROM:0006B958o ROM:0006B016 dc.b 0 ROM:0006B017 dc.b 0 ROM:0006B018 dc.b $BB ; ¬ ROM:0006B019 dc.b $72 ; r ROM:0006B01A dc.b 0 ROM:0006B01B dc.b $EB ; û ROM:0006B01C dc.b 0 ROM:0006B01D dc.b 0 --- Конец кода --- и т.д. заполняем их 00, ff, 01. и получаем что-то вроде (скрин): что говорит нам как бы, тут не только доступные строения/уровень, но и они наверняка тоже тут. осталось разобрать эту кашу. |
| Segaman:
Ничёсе! мой интерес снова вырос! кстати редактор старпорта встроен, осталось добовление сделать. а ещё я магу заодно и десант всётаки написать Если такой ефект дают эти байты, может они и енергию в ветрянках цифрами могут заставить показывать. Добавлено позже: А не мог бы ты ещё и winflags разобрать, чтоб я в редактор вписал Добавлено позже: Знаеш де надо искать (если незнаеш сравнения с пс версией), там де идёт запрос на поинты к обьект файлам. я этого не могу сам сделать, у мя моника пока что нет |
| Ti_:
--- Цитата: Segaman от 23 Сентябрь 2009, 18:53:16 ---Добавлено позже: А не мог бы ты ещё и winflags разобрать, чтоб я в редактор вписал --- Конец цитаты --- для Атр и Харк. миссии с 5 по 9 везде, и атредес3: 00 07 00 01 ; lose flags=01 00 08 00 03 ; win flags=03 что и соотв. PCшному .ini. Харк 3и4 миссия, Атредес 4: 00 07 00 01 00 08 00 13 Атредес 2 миссия: 00 07 00 05 00 08 00 07 Харк 2миссия: 00 08 00 17 Атр1: 00 07 00 04 00 08 00 06 Если не считать "13" и "17" вмтсо 03/07 то можно сказать что на всех миссия 3-9, winflags= 00 03 ( разруш.здания) на 1 миссии = winflags= 00 06 (собрать X кредитов) на 2мисси = winflags = 00 07 (разруш.здания или собрать X кредитов) ну на практике не проверял. :) Добавлено позже: --- Цитата: Segaman от 23 Сентябрь 2009, 18:53:16 ---Добавлено позже: Знаеш де надо искать (если незнаеш сравнения с пс версией), там де идёт запрос на поинты к обьект файлам. я этого не могу сам сделать, у мя моника пока что нет --- Конец цитаты --- что искать то? что за объект файлы? юниты? ты нашел их? |
| Segaman:
Искать значения флагов. Там где ссылка на поинты, там и работа с данными, на которые поинты ссылаются, но я смотрю ты сам разобрался. |
| ALEX_230_VOLT:
--- Цитата ---Писишная Дюна 2 только потому и не забыта фанатами, что мультиплеер в ней есть. --- Конец цитаты --- что в ней реально мультиплэер есть?! можно поподробнее? не припомню так кнопки netplay :-\ |
| Ti_:
--- Цитата: Segaman от 23 Сентябрь 2009, 21:00:20 ---Искать значения флагов. Там где ссылка на поинты, там и работа с данными, на которые поинты ссылаются, но я смотрю ты сам разобрался. --- Конец цитаты --- я так понял под объект файлами ты понимаешь "ini-файлы" карт миссий. а я под ними понимаю именно их самих (а под ландшафтом - карты земли) - всё таки они ведь содержат всю инфу о миссии, а не только объекты(юниты,здания). и вот это фразы: "Знаеш де надо искать "; "там де идёт запрос на поинты к обьект файлам" НЕТ мля не знаю! а как я по-твоему описывал КФГ карты если я не знаю где он находится и как выглядит? И зачем мне какой-то запрос искать? когда в часть1. я уже написал что там 1поинтер на всю карту. (хотя ты и сам это знаешь). |
| topos84:
--- Цитата: ALEX_230_VOLT ---что в ней реально мультиплэер есть?! можно поподробнее? не припомню так кнопки netplay --- Конец цитаты --- Я имел в виду моды/хаки/римейки. Щас поищу ссылки. Где-то я на это натыкался. Добавлено позже: Беру свои слова обратно: не из-за мультиплеера писишная Дюна 2 до сих пор не забыта фанатами, а из-за большого количества клонов/хаков/модов/римейков и редактора (или редакторов, точно не знаю ли еще, помимо Dune II Maker'а) для ее изменения. А мультиплеер есть видимо только в Дюне 4 (ну и в предыдущей версии, Дюне 3). Есть еще проекты, где люди делают ремейки с поддержкой мультиплеера, но они еще не завершены. |
| ALEX_230_VOLT:
topos84, так вот именно что настоящей дюны с нетплэем нету ;) А Дюна 3 и Дюна 4 сильно отличаются от оригинала и играть в них по сети особо желания нету <_< |
| Ti_:
--- Цитата: ALEX_230_VOLT от 23 Сентябрь 2009, 23:41:55 ---topos84, так вот именно что настоящей дюны с нетплэем нету ;) А Дюна 3 и Дюна 4 сильно отличаются от оригинала и играть в них по сети особо желания нету <_< --- Конец цитаты --- да оригинал PCшный лучше) его хотябы в dosbox с 3x запустить можно))); а dune3 насколько я помню в 320x. а если сравнивать по графике PC и SMD , то мой выбор только за SMD. - убогая "полу"изометрия делает всех PC-шных юнитов и здании уродами) (моё imho) |
| topos84:
Ti_, Дюна 4 по-моему в хай-резе, но только частично. Ну а графика мне тоже сеговская больше нравится - дизайн лучше продуман. Особенно юниты красиво прорисованы. |
| Segaman:
--- Цитата: Ti_ от 23 Сентябрь 2009, 22:29:47 ---и вот это фразы: "Знаеш де надо искать "; "там де идёт запрос на поинты к обьект файлам" НЕТ мля не знаю! а как я по-твоему описывал КФГ карты если я не знаю где он находится и как выглядит? И зачем мне какой-то запрос искать? когда в часть1. я уже написал что там 1поинтер на всю карту. (хотя ты и сам это знаешь). --- Конец цитаты --- Ну зачем так. Не забывай, я с тела всегда сдесь и могу чегото недоглядеть или вовсе проглядеть. Ну это уже скоро прекратится. Выходит новая опера, там полегче смотреть страницы (скачал бету) или инет врублю и буду на кампе сидеть(но это ток када с моником разберусь. радня мой забрала и случайно разбла). Так что не обижайтесь, а вежливо поправляйте, если что. кстати старпорт уже работает, осталось добавление/удаление сделать. кстати хочу отметить, что независимо от последовательности записей старпорт показывает юниты по их порядковому номеру. т.е. если записано 0607 0005 - launcher 0600 0005 - carryall в старпорте будет сначала carryall, потом launcher. да ещё я и десант заодно напишу, в таком же интерфейсе как и в старпорте. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |