Если бы у меня была старая игра для ПК, в которой есть определенные переменные, которые не могут превышать 255 без сбоев, можно ли было бы преобразовать ВСЕ 8-битные целые в 16-битные, изменив исполняемый файл Windows 95?
Игра, о которой я говорю, — это Total Annihilation с 1997 года. И хотя сама игра была далеко впереди своего времени и обладала способностями превращаться в эпические переживания (Черт, игра так сильно опередила свое время, файлы данных использовать JSON-подобный синтаксис … Игра также поддерживает 4K и выглядит потрясающе.) К сожалению, общее количество оружия в игре ограничено. У всего оружия есть идентификаторы, а максимальный идентификатор оружия составляет 255, как можно увидеть ниже:
[NUCLEAR_MISSILE]
{
ID=122;
name=Nuclear Missile;
rendertype=1;
lineofsight=1;
vlaunch=1;
model=ballmiss;
range=32000;
reloadtime=180;
noautorange=1;
weapontimer=5;
flighttime=400;
weaponvelocity=350;
weaponacceleration=50;
turnrate=32768;
areaofeffect=512;
edgeeffectiveness=0.25;
energypershot=180000;
metalpershot=2000;
stockpile=1;
targetable=1;
commandfire=1;
cruise=1;
soundstart=misicbm1;
soundhit=xplomed4;
firestarter=100;
smokedelay=.1;
selfprop=1;
smoketrail=1;
propeller=1;
twophase=1;
guidance=1;
tolerance=4000;
shakemagnitude=24;
shakeduration=1.5;
explosiongaf=commboom;
explosionart=commboom;
waterexplosiongaf=fx;
waterexplosionart=h2oboom2;
lavaexplosiongaf=fx;
lavaexplosionart=lavasplashlg;
startsmoke=1;
[DAMAGE]
{
default=5500;
ARMCOM=2900;
CORCOM=2900;
}
}
Стоит ли вообще пытаться? Я не очень знаком с языком ассемблера, но я слышал, что с C ++ вам иногда приходится писать свой собственный язык ассемблера в некоторых случаях в тот же день.
Все, что я хочу сделать, это просто увеличить все 8-битные Ints до 16-битных, отредактировав .EXE, насколько сложно это будет осуществить?
Все, что я хочу сделать, это просто увеличить все 8-битные Ints до 16-битных, отредактировав .EXE, насколько сложно это будет осуществить?
По существу невозможно без доступа к исходному коду. Замена 8-разрядного целого числа на 16-разрядное изменило бы размер и структуру структуры данных, которая его содержала. Любой код, который «касается» этих объектов, или любые объекты, которые их содержат, должны быть обновлены. Идентификация этого кода была бы обширным проектом — по всей вероятности, это потребовало бы большей части игры вручную декомпилирован в исходный код C.
Других решений пока нет …