如果我是采取旧的Windows 95 .EXE用C++写的,我想8位整数转换为16位整数,这将是困难的?

Mat*_*zuk 4 c++ assembly assemblies

如果我有一个旧的PC游戏,某些变量不能超过255而不会崩溃,是否可以通过修改Windows 95可执行文件将所有8位整数转换为16位整数?

我正在谈论的游戏是1997年的Total Annihilation.虽然游戏本身远远超过它的时间并且有能力被改编成史诗般的体验,(地狱,游戏是如此领先于它的时间,数据文件使用类似JSON的语法...游戏也支持4K,看起来仍然很神奇.)不幸的是,游戏中的武器总数有限.所有武器都有ID,武器的最大ID为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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是否值得尝试?我对汇编语言不是很熟悉,但我听说使用C++,你有时必须在某些情况下在当天编写自己的汇编语言.

我想做的就是通过编辑.EXE将所有8位Ints提升到16位,这有多难以实现?

dus*_*uff 5

我想做的就是通过编辑.EXE将所有8位Ints提升到16位,这有多难以实现?

如果没有访问源代码,基本上是不可能的.用16位整数替换8位整数将改变包含它的数据结构的大小和布局.任何"触及"这些对象的代码或包含它们的任何对象都需要更新.识别该代码将是一个广泛的项目 - 很可能,它需要将大部分游戏手动反编译为C源代码.

  • @Matt:基本上:如果需要问这个问题,你还没有(还)有任何接近技能的能力.即便如此,如果没有原始资源,可能需要数月甚至数年的努力. (3认同)