如果我有一个旧的 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;
        }
    }

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

我想要做的只是通过编辑 .EXE 将所有 8 位整数提升到 16 位,这会有多困难?

最佳答案



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

关于c++ - 如果我拿一个用 C++ 编写的旧的 Windows 95 .EXE,并且我想将 8 位整数转换为 16 位整数,会不会很困难?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45396534/

10-12 13:11