<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>48</ID>
      <Description>"Find+Register GEngine"</Description>
      <Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if not syntaxcheck then
  local function isValidPointer(addr)
    if not addr or addr == 0 then return false end
    if addr &lt; 0x10000 then return false end
    if addr % 8 ~= 0 then return false end
    return true
  end

  local function hasValidVTable(objectPtr)
    local success, vtable = pcall(readPointer, objectPtr)
    if not success or not isValidPointer(vtable) then
      return false
    end
    if vtable &lt; 0x100000000 or vtable &gt; 0x7FFFFFFFFFFF then
      return false
    end
    return true
  end

  local function validateGEngine(gEngineAddr)
    local enginePtr = readPointer(gEngineAddr)
    if not isValidPointer(enginePtr) or not hasValidVTable(enginePtr) then
      return false
    end

    for viewportOffset = 0x700, 0x900, 0x8 do
      local success1, viewportPtr = pcall(readPointer, enginePtr + viewportOffset)
      if success1 and isValidPointer(viewportPtr) and hasValidVTable(viewportPtr) then
        for worldOffset = 0x70, 0x100, 0x8 do
          local success2, worldPtr = pcall(readPointer, viewportPtr + worldOffset)
          if success2 and isValidPointer(worldPtr) and hasValidVTable(worldPtr) then
            for giOffset = 0x150, 0x200, 0x8 do
              local success3, giPtr = pcall(readPointer, worldPtr + giOffset)
              if success3 and isValidPointer(giPtr) and hasValidVTable(giPtr) then
                return true
              end
            end
          end
        end
      end
    end
    return false
  end

  local function findGEngine()
    local patterns = {
      {"48 8B 0D ?? ?? ?? ?? 48 85 C9 74", 3, 7},
      {"48 8B 05 ?? ?? ?? ?? 48 8B 88 ?? ?? ?? ??", 3, 7},
      {"48 8B 0D ?? ?? ?? ?? 48 8B 01 FF", 3, 7},
      {"48 89 0D ?? ?? ?? ?? 48 85 C9", 3, 7},
      {"48 8B 05 ?? ?? ?? ?? 48 85 C0 74", 3, 7},
      {"48 8B 0D ?? ?? ?? ?? 4C 8B 01", 3, 7},
      {"4C 8B 05 ?? ?? ?? ?? 4C 85 C0", 3, 7},
      {"48 8B 15 ?? ?? ?? ?? 48 85 D2 74", 3, 7},
    }

    print("Scanning for GEngine - collecting candidates...")

    local candidateCounts = {}

    for i, patternData in ipairs(patterns) do
      local pattern = patternData[1]
      local offsetPos = patternData[2]
      local instrLen = patternData[3]

      local result = AOBScan(pattern)

      if result and result.Count &gt; 0 then
        local maxCheck = math.min(result.Count, 50)

        for j = 0, maxCheck - 1 do
          pcall(function()
            local instructionAddrStr = result.getString(j)
            local instructionAddr = getAddress(instructionAddrStr)
            local offsetAddr = instructionAddr + offsetPos
            local ripOffset = readInteger(offsetAddr)
            local gEngineAddr = instructionAddr + instrLen + ripOffset

            if validateGEngine(gEngineAddr) then
              candidateCounts[gEngineAddr] = (candidateCounts[gEngineAddr] or 0) + 1
            end
          end)
        end

        result.destroy()
      end
    end

    -- Find candidate with highest count
    local bestAddr = nil
    local bestCount = 0

    for addr, count in pairs(candidateCounts) do
      print(string.format("  Candidate %X found in %d patterns", addr, count))
      if count &gt; bestCount then
        bestAddr = addr
        bestCount = count
      end
    end

    if bestAddr then
      registerSymbol("GEngine", bestAddr, true)
      print("==========================================")
      print(string.format("✓ GEngine registered at: %X (found in %d patterns)", bestAddr, bestCount))
      print("==========================================")
      return true
    end

    print("==========================================")
    print("✗ GEngine not found!")
    print("==========================================")
    return false
  end

  findGEngine()
end
{$asm}

[DISABLE]
{$lua}
if not syntaxcheck then
  if getAddress("GEngine") then
    unregisterSymbol("GEngine")
    print("GEngine unregistered")
  end
end
{$asm}

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>46</ID>
          <Description>"MovementMode (1,3,5)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>221</Offset>
            <Offset>330</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>47</ID>
          <Description>"Clipping (0,3)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>35F</Offset>
            <Offset>338</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>44</ID>
          <Description>"MoveSpeedMultiplier (1.1)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>F88</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>35</ID>
          <Description>"CanTakeFallDamage"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>E8C</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>1</ID>
          <Description>"HealthCurrent"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>0A8</Offset>
            <Offset>670</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"HealthMax"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>0B0</Offset>
            <Offset>670</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>3</ID>
          <Description>"WeaponDamage"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>778</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"RecoilAmount"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>788</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"RecoilYaw"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>790</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"RecoilLength"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>798</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>7</ID>
          <Description>"PullBackAmount"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7A0</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>8</ID>
          <Description>"FireRate"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7A8</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>9</ID>
          <Description>"BulletSpread"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7B0</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>10</ID>
          <Description>"FireMaxRange"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Float</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7B8</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>11</ID>
          <Description>"AmmoClipMax"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7D8</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>12</ID>
          <Description>"AmmoTotalMax"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7DC</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"AmmoClipCurrent"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7E0</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>14</ID>
          <Description>"AmmoTotalCurrent"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>7E4</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"ADSSwayAmount"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>948</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>34</ID>
          <Description>"SwayTime"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>E40</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>17</ID>
          <Description>"WeaponUpgradeLevel"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>A80</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>18</ID>
          <Description>"LethalDamage"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>B38</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"LethalRadius"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>B40</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"LethalMaxAmount"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>B48</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>21</ID>
          <Description>"LethalCurrentAmount"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>C00</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>26</ID>
          <Description>"DamageFallOff"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>CE8</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"CanReloadCancel"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>C61</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>27</ID>
          <Description>"BurstTimeBetweenShots"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>D88</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>28</ID>
          <Description>"BurstTimeBetweenBursts"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>D90</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>29</ID>
          <Description>"BurstShots"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>D98</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>30</ID>
          <Description>"BurstShotsRemaining"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>D9C</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>40</ID>
          <Description>"ChosenDifficulty"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>FB8</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>41</ID>
          <Description>"ChosenMode"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>FB9</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>42</ID>
          <Description>"CanMove"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>GEngine</Address>
          <Offsets>
            <Offset>12C1</Offset>
            <Offset>2E8</Offset>
            <Offset>30</Offset>
            <Offset>0</Offset>
            <Offset>38</Offset>
            <Offset>1D8</Offset>
            <Offset>78</Offset>
            <Offset>BD0</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
