Разработка и ромхакинг > Ромхакинг
[Хак Battle City] Как добавить пистолет в танчики?
(1/1)
HenryLANDEMU:
Вот какая проблема я хочу добавить пистолет в танчики.! Но я не знаю как это сделать. Я новичок в ромхакинге и не могу понять как это сделать. Можете помочь?
Sharpnull:
Лучше не надо, это непросто и мерцать придётся для определения позиции, что лично меня раздражает. Начать нужно с изучения https://www.nesdev.org/wiki/Zapper, внизу ссылки на тестовые ромы с исходным кодом. С мышкой думаю намного проще и веселее https://www.nesdev.org/wiki/Super_NES_Mouse, только нельзя проигрывать DPCM сэмплы, есть игра https://rainwarrior.itch.io/nesert-golfing с поддержкой мыши.
lupus:
Может он про бонус «пистолет»?
HenryLANDEMU:

--- Цитата: lupus от 12 Август 2022, 21:06:03 ---Может он про бонус «пистолет»?

--- Конец цитаты ---

Да я про бонус и говорил!

Добавлено позже:

--- Цитата: Sharpnull от 12 Август 2022, 17:53:25 ---Лучше не надо, это непросто и мерцать придётся для определения позиции, что лично меня раздражает. Начать нужно с изучения https://www.nesdev.org/wiki/Zapper, внизу ссылки на тестовые ромы с исходным кодом. С мышкой думаю намного проще и веселее https://www.nesdev.org/wiki/Super_NES_Mouse, только нельзя проигрывать DPCM сэмплы, есть игра https://rainwarrior.itch.io/nesert-golfing с поддержкой мыши.

--- Конец цитаты ---

Идея крутая! но это не то.......
Sharpnull:

--- Цитата: lupus от 12 Август 2022, 21:06:03 ---Может он про бонус «пистолет»?

--- Конец цитаты ---
:lol: И правда, я подумал про световой.
Но зачем добавлять бонус, который есть в хаках Tank 1990 и т. п. Тогда нужно изучать хак с пистолетом, а исходный код (после дизассемблирования) Battle City есть в сети. Насколько помню, там 6 бонусов, но можно было добавить ещё 2, что и сделали пираты. Нужно изменить вероятности выпадения и добавить соответствующий код (сделать танк сразу мощным не проблема, а про скашивание травы не знаю).
Cyneprepou4uk:
https://github.com/cyneprepou4uk/NES-Games-Disassembly/blob/main/Battle%20City/bank_FF.asm

Таблица с рандомом бонусов на строке 6708. Пистолет под индексом 06. Поинтеры на подпрограммы поднятия бонусов на строке 6863. По умолчанию будет просто выполняться RTS, то есть по сути кода для пистолета не существует, и в игре ничего не произойдет если добавить бонус в таблицу и поднять пистолет. Код надо дописывать самому, например максимальная прокачка танка.
Sharpnull:
Cyneprepou4uk, я и забыл, что там изображение пистолета было, благодаря вам всё просто: поставить CPU $E900 или CPU $E901 байт 06 (будет реже попадаться либо звезда, либо граната) и уже будет появляться пистолет, а для добавление своего кода в CPU $E9EE записать адрес CPU $FF50 (байт 50 FF), где место свободно. В CPU $FF50 для макс. танка (не проверял):

--- Код: ---  LDA #$60
  STA ram_tank_upgrade,X ; $0101
  STA ram_tank_type,X ; $A8
  RTS
--- Конец кода ---
Можно в Tank 1990 посмотреть, думаю не сложно найти.
HenryLANDEMU:
Спасибо попытаюсь сделать.

изменено: Я делаю через хекс редактор.
Mr2:

--- Цитата: Sharpnull от 12 Август 2022, 21:49:14 --- :lol: И правда, я подумал про световой.

--- Конец цитаты ---
Ага, и семпл ещё запилить после выстрела:"есть пробитие". :lol:
HenryLANDEMU:

--- Цитата: Sharpnull от 13 Август 2022, 05:14:40 ---Cyneprepou4uk, я и забыл, что там изображение пистолета было, благодаря вам всё просто: поставить CPU $E900 или CPU $E901 байт 06 (будет реже попадаться либо звезда, либо граната) и уже будет появляться пистолет, а для добавление своего кода в CPU $E9EE записать адрес CPU $FF50 (байт 50 FF), где место свободно. В CPU $FF50 для макс. танка (не проверял):

--- Код: ---  LDA #$60
  STA ram_tank_upgrade,X ; $0101
  STA ram_tank_type,X ; $A8
  RTS
--- Конец кода ---
Можно в Tank 1990 посмотреть, думаю не сложно найти.

--- Конец цитаты ---
На хекс не похоже....
Sharpnull:
HenryLANDEMU, как вы собрались код писать через HEX-редактор. CPU $E900 в роме это 0x2900 + 0x10 заголовок. Простой код я добавляю через Mesen (Assembler), а для сложного есть отдельные ассемблеры. Простой дизассемблер онлайн - https://www.masswerk.at/6502/disassembler.html (нужно не забывать менять промежуток, который сохраняется от прошлого кода) и для одичалых онлайн ассемблер - https://www.masswerk.at/6502/assembler.html, который даст ваши любые байты.
Кстати, не уверен, что нужно STA ram_tank_upgrade,X ; $0101, тогда только:

--- Цитата ---LDA #$60
STA $A8,X
RTS
--- Конец цитаты ---
Что в байтах A9 60 95 A8 60.
Cyneprepou4uk уже написал помощь для начинающих ромхакеров: https://cyneprepou4uk.github.io/iromhacker/nes/ru/index.html. Для начало это прочтите, чтобы не спрашивать почему LDA не похоже на HEX.
Cyneprepou4uk:
Sharpnull, насколько я помню, один из этих двух адресов отвечает за графику степени апгрейда, а второй за непосредственную степень апгрейда. По крайней мере при взятии звезды пишется в оба адреса.

Добавлено позже:
HenryLANDEMU, полный код в хексе будет A9 60 9D 01 01 95 A8 60
Sharpnull:
Cyneprepou4uk, я код и брал от звезды. Сейчас посмотрел, $0101,X нужно. Для полного танка достаточно установить $A8,X = #$60, а $0101,X для переноса улучшения на следующий уровень. В остальном $0101,X используется для проверки при взятии звезды, иначе после полного будет 2-я форма (#$20), но проверку можно изменить с $0101,X на $A8,X. Эти адреса $0101,X, но с индексами врагов, также используются зачем-то.
В Tank 1990 для скоса травы используется ещё $0178,X, должно быть #$A0 или больше. Звёзды туда прибавляют #$20, пистолет #$60.
HenryLANDEMU:
Спасибо Cyneprepou4uk и Sharpnull!
Навигация
Главная страница сообщений

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