deadboltmods / Deadbolt-GMS-1.4-Misc

Misc files & info related to Deadbolt in GameMaker 1.4
1 stars 0 forks source link

Deadbolt-GameMaker-1.4

Public repo for modding Deadbolt in GameMaker 1.4.

Contains no actual game source code.

Tools

Name Description
UMT Edit code and sprites. Fast and easy to use
Gamemaker 1.4 Docs Learn GameMaker's language, GML. The link is actually to a self-hosted mirror of the 1.4.1749 docs (which aren't online anymore)
Gamemaker Studio 1.4.1749 (Optional) Apply your mods in the original development environment, and re-compile the game. The is the best approach for huge mods requiring new scripts and refactors, but it's slow to compile and there are many issues to fix. The issues will help you here. *1
UMT-ExportToProjectScript (Optional) Use this with UMT to export Deadbolt to an project, which you can open with GMS 1.4. Only works with UMT v0.3.5.7 or below. Use this PR, which fixes a breaking issue.

*1 Note that a license may be required, and apparently it's not possible to gain one anymore (although you can get a license key from G2A, and I believe they can still be used to activate licenses in your YoYoGames account)

Resources

I've made several spreadsheets while modding Deadbolt. They may contain info that helps with modding.

Enums Sheet

The Enums sheet is a huge help. Enums are converted to ints automatically, and can't be reverse-compiled.

The weapon enums are especially helpful. They let you work out that this:

global.weapon[21, 13] = 50

Translates to this:

global.weapon[{ Mousegun }, { dmg = 50 }]

...Because Mousegun (PPistol) has the index 21, and the damage stat is set with the index 13.

Indexes Sheet

The Indexes sheet is also good, because UMT often doesn't know which objects or sprites certain parts of code refer to (eg. see use_reactor).

For example, if you look at the decompiled code for use_reactor, you'll see this code:

switch active_reactor.object_index
{
    case oSnowSecret:

        if (active_reactor.active == 0)
        {
            active_reactor.active = 1
            oP.state = 16
            oP.inspect_timer = 0
        }
        break

    case 97:

        if (active_reactor.active == 0)
        {
            active_reactor.active = 1
            oP.state = 16
            oP.inspect_timer = -999999
            global.cutscene_timeline = 21
            instance_create(x, y, oCutscene)
        }
        break

    ...
}

We can see that this switch statement loops over various interactive objects, but it doesn't show what object 97 is.

But if you look up object index 97, you'll see that it's for oCarIbzan.