Разработка и ромхакинг > Ромхакинг и программирование
[ALL] Вопросы новичков
Aleksey19:
perfect_genius, я посмотрел эту тему и там путного нет, на pcsx перекидывают, ладно спасибо будем пробовать psxida)
Selykreg:
--- Цитата: Cyneprepou4uk от 02 Декабрь 2021, 04:44:25 ---Selykreg, да, я и есть автор :)
--- Конец цитаты ---
Хоть где-то моё зрение и логика не подвели ^_^
--- Цитата: Cyneprepou4uk от 02 Декабрь 2021, 04:44:25 ---Selykreg,
Советую перечитать https://vk.com/page-143731650_52348151
И пересмотреть домашнее задание 7 https://youtu.be/-qXYnXdOclU
--- Конец цитаты ---
Кай, спасибо, буду изучать дальше. Надеюсь, с "домашкой" справлюсь сам.
--- Цитата: Cyneprepou4uk от 02 Декабрь 2021, 04:44:25 ---Selykreg,
Во-вторых, просто вставив свой код где попало, еще не значит что он будет работать. Надо чтобы на него была какая-то ссылка, обычно это JSR или JMP.
--- Конец цитаты ---
Уже понял, что упустил это немаловажное условие :blush:
--- Цитата: Миха42 от 02 Декабрь 2021, 08:48:01 ---Selykreg, мало того что как тебе уже написали выше про неправильное использование условия и то, что на данный код должен быть либо JMP либо вызов подпрограммы (JSR). Так по окончанию чтения процессором кода, он должен продолжить читать что-то далее, иначе будет остановлена его работа (зависание).
В случае если ты использовал JMP на данный код, то в конце кода нужно так же вернуться к коду который будет исполняться после твоего вставленного. Если же ты использовал вызов подпрограммы (JSR) для вставки кода, то подпрограмму нужно обязательно закрыть по окончанию кода прописав в конце 60, тогда процессор достанет из стека прежний адрес где была вызвана подпрограмма и вернётся обратно исполнять код дальше.
--- Конец цитаты ---
Спасибо. Мне, двоечнику, ещё во многом предстоит разобраться ;) Блин, ну кто ж придумал общаться с 6502-м на таком языке o_0 Ладно, учу дальше.
--- Цитата: Миха42 от 02 Декабрь 2021, 08:48:01 ---Selykreg,Правильно называть не в стек, а в аккумулятор.
Стек это совершенно другое.
--- Конец цитаты ---
Да, спасибо за поправку. А то уже этот момент стал закрепляться в моём понимании.
Миха42:
--- Цитата: Selykreg от 07 Декабрь 2021, 10:46:38 ---Блин, ну кто ж придумал общаться с 6502-м на таком языке o_0
--- Конец цитаты ---
Это не язык, а машинный код процессора.
Писать можно и на любом языке, главное чтоб имелся ассемблер что преобразует код языка в машинный код данного процессора. Где-то уже попадался мне ассемблер с какого-то языка на nes.
Но данный вариант подходит только если пишешь игру с нуля, или если у тебя есть исходники игры. В случае же чтоб изменить игру не имея ни чего кроме готового рома ни чего не остаётся кроме как ковырять машинный код в дизассемблере. ;)
Selykreg:
--- Цитата: Миха42 от 07 Декабрь 2021, 12:59:11 ---Это не язык, а машинный код процессора.
Писать можно и на любом языке, главное чтоб имелся ассемблер что преобразует код языка в машинный код данного процессора. Где-то уже попадался мне ассемблер с какого-то языка на nes.
Но данный вариант подходит только если пишешь игру с нуля, или если у тебя есть исходники игры. В случае же чтоб изменить игру не имея ни чего кроме готового рома ни чего не остаётся кроме как ковырять машинный код в дизассемблере. ;)
--- Конец цитаты ---
Спасибо, всегда путал ассемблер с...одним из вариантов языка программирования <_< Я в основном делал игры и программы в GM, там язык более-менее логичен. Порой смотришь в диз и понимаешь, что программисты- обособленная каста со своим мышлением, чуть-ли не алхимики 😨 :cool: Легче уж точно написать программу для игры с нуля.
По делу. С кнопками ситуация прояснилась, уже сделал несколько хаков ромов с кнопками, причём в одном роме сделал по несколько комбинаций кнопок :wow:Разобрался более-менее с флагами и с тем, куда лучше скормить игре свою подпрограмму🍴 - вот эта ситуация чуть было не отбила моё желание обучаться. Минус - у меня сбился режим дня😴 💤 6502 - это ещё та сарделька в арбузном корпусе, и большой поклон тем, кто его освоил. Всем огромное спасибо, кто меня наставлял👋 Думаю, некоторые хаки стОит выложить на сайт.
GodKiller_222:
--- Цитата ---Думаю, некоторые хаки стОит выложить на сайт.
--- Конец цитаты ---
Думаю, не стоит маятся дурью, на сайте уже две раздутые темы из маминых хакеров, которые поменяли два байта в ром-е и исполнились величием. Перетерпите эту стадию и в будущем, возможно, вы действительно удивите всех))
Nik Pi:
Доброго времени суток!
У меня тут ещё один вопрос: Я решил покопаться в графике аркадных игр, но не понял, как именно просматривать тайлы :-\ Я открыл в Tile Molester Черепашек ниндзя, и.....
Там какаой-то ужас 0_0
Я что только не пробовал, чтобы нормально просмотреть спрайты, какие только параметры не ставил, и всё равно не смог нормально настроить. Самые подходящие значения- 3 и 4bpp linear. Кто знает, как всё правильно сделать, и просмотреть, и отредактировать :neznayu: ? Буду очень признателен. Результаты моих поисков- внизу:
paul_met:
Похоже, что нужно изменить порядок байт (reverse-order). Первый и третий скрины, скорее всего - это 8bpp с меньшей в 2 раза шириной.
Sharpnull:
--- Цитата: paul_met от 19 Март 2022, 00:29:52 ---это 8bpp с меньшей в 2 раза шириной
--- Конец цитаты ---
Судя по MAME там 4bpp. Я пытался переставить по описанию и не получилось, не разбирался какой у MAME порядок битов. Для 963a28.h27 это "k052109" (https://github.com/mamedev/mame/blob/master/src/mame/drivers/tmnt.cpp), порядок такой:
--- Цитата: https://github.com/mamedev/mame/blob/d8a7d884124e21780f72882ed86a17903ec5c6d9/src/mame/video/k052109.cpp#L136 ---
--- Код: ---const gfx_layout k052109_device::charlayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ 24, 16, 8, 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8
};
--- Конец кода ---
--- Конец цитаты ---
Структура:
--- Цитата: https://github.com/mamedev/mame/blob/d8a7d884124e21780f72882ed86a17903ec5c6d9/src/emu/digfx.h#L128 ---
--- Код: ---struct gfx_layout
{
u32 xoffs(int x) const { return (extxoffs != nullptr) ? extxoffs[x] : xoffset[x]; }
u32 yoffs(int y) const { return (extyoffs != nullptr) ? extyoffs[y] : yoffset[y]; }
u16 width; // pixel width of each element
u16 height; // pixel height of each element
u32 total; // total number of elements, or RGN_FRAC()
u16 planes; // number of bitplanes
u32 planeoffset[MAX_GFX_PLANES]; // bit offset of each bitplane
u32 xoffset[MAX_GFX_SIZE]; // bit offset of each horizontal pixel
u32 yoffset[MAX_GFX_SIZE]; // bit offset of each vertical pixel
u32 charincrement; // distance between two consecutive elements (in bits)
const u32 * extxoffs; // extended X offset array for really big layouts
const u32 * extyoffs; // extended Y offset array for really big layouts
};
--- Конец кода ---
--- Конец цитаты ---
Т. е., как я понял, для каждого тайла 8x8 пикселей строки идут по 32 бита подряд, но внутри строки каждые 8 бит подряд это по 1 биту для каждого пикселя. Но видимо я что-то не понял, потому что не получилось переставить для редактора тайлов.
Nik Pi:
Понятно...
...Что ничего не понятно :lol:
Ладно, пойду дальше пробовать. А вообще, я где-то читал, что есть специальные график эдиторы, для аркадных игр, или мне кажется o_0
Ну, всё равно спасибо
paul_met:
--- Цитата: Nik Pi от 19 Март 2022, 01:38:15 ---Понятно...
...Что ничего не понятно :lol:
Ладно, пойду дальше пробовать. А вообще, я где-то читал, что есть специальные график эдиторы, для аркадных игр, или мне кажется o_0
Ну, всё равно спасибо
--- Конец цитаты ---
Прикрепил бы этот файл (ы) для начала. Интересующиеся люди поковырялись бы.
Nik Pi:
--- Цитата: paul_met от 19 Март 2022, 11:24:10 ---Прикрепил бы этот файл (ы) для начала. Интересующиеся люди поковырялись бы.
--- Конец цитаты ---
EDIT: Все файлы находятся внутри архивов игр, которые можно скачать с сайта
https://www.emu-land.net/arcade/mame/roms?act=showonly&id=8193
paul_met:
Судя по всему, в этой игре используется какое-то удвоение разрешения по горизонтали, так как тайлы получаются по 4 пикеселя шириной. Ниже прикреплён самый вменяемый вариант отображения картинки.
Nik Pi:
О, спс
Я то дурак думал, что все игры на аркаде по одному принципу ломаются, а открыл симпсонов- в режиме 2bpp Game boy всё нормально видно... может конами в черепахах пыталась так защиту от взлома сделать?
=========
Вообще, как пересобрать аркадный ром? Ну распаковал я там файлы, перерисовал всё, вставил в архив с игрой, а оно не открывается... сделал другой архив- он его вообще не видит :-\ что делать?
Sibor:
У меня вопрос? Объясните хот примерно как в файтингах возможно сделать так чтобы вместо игрока управлял компьютер. В хаках мортал комбат видел такое.
krocki:
Sibor, Находишь адрес...значение 0 = CPU ... 1 = Player пример так... на ps1 игра smackdown было на сколько я помню. ^_^ значение может быть другим, но суть дела та же.
perfect_genius:
Sibor, т.е. ты хочешь бой компьютера против компьютера? Удивительно, не первый раз уже встречаю такой запрос.
Как всегда, у каждой игры может быть индивидуально всё устроено внутри. Кроме варианта krocki может быть и вариант, что первый игрок как человек жёстко установлен в коде и опрашивается только второй игрок.
Сам баловался так 10 лет назад, значение менял прямо в памяти игры, но можно и подправить код игры:
Как называется такой хак Мортал Комбата? К какой игре хотел бы видеть такой хак?
Такое можно провернуть в Cheat Engine.
Cyneprepou4uk:
Sibor, в оперативке должен храниться флаг того, кем управляется перс - игроком или компьютером. Достаточно вручную поменять значение. Также вместо флага может быть проверка в коде текущего режима игры, типа 1 или 2 игрока, чтоб понять кто управляет вторым.
В мк изначально встроена возможность управления компом обоими игроками, поскольку в игре есть демка, где бойцы сами дерутся. Если чего-то подобного в твоем файтинге нет, то не факт что получится, но попробовать стоит.
Навигация
Перейти к полной версии