<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="16">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Keys"</Description>
      <Options moHideChildren="1"/>
      <Color>80000008</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
LuaCall(findBase())

[DISABLE]
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1</ID>
          <Description>"Total Keys"</Description>
          <Color>80000008</Color>
          <VariableType>Byte</VariableType>
          <Address>KeysPointerBase</Address>
          <Offsets>
            <Offset>1</Offset>
            <Offset>5F8</Offset>
            <Offset>48</Offset>
            <Offset>134</Offset>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"Used Keys (set to 0)"</Description>
          <Color>80000008</Color>
          <VariableType>Byte</VariableType>
          <Address>KeysPointerBase</Address>
          <Offsets>
            <Offset>2</Offset>
            <Offset>5F8</Offset>
            <Offset>48</Offset>
            <Offset>134</Offset>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>3</ID>
          <Description>"SHiFTCode Keys"</Description>
          <Color>80000008</Color>
          <VariableType>Byte</VariableType>
          <Address>KeysPointerBase</Address>
          <Offsets>
            <Offset>4</Offset>
            <Offset>5F8</Offset>
            <Offset>48</Offset>
            <Offset>134</Offset>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"EXTRA Total Keys"</Description>
          <Color>80000008</Color>
          <VariableType>Byte</VariableType>
          <Address>KeysPointerBase</Address>
          <Offsets>
            <Offset>7</Offset>
            <Offset>5F8</Offset>
            <Offset>48</Offset>
            <Offset>134</Offset>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"EXTRA Used Keys (set to 0)"</Description>
          <Color>80000008</Color>
          <VariableType>Byte</VariableType>
          <Address>KeysPointerBase</Address>
          <Offsets>
            <Offset>8</Offset>
            <Offset>5F8</Offset>
            <Offset>48</Offset>
            <Offset>134</Offset>
            <Offset>0</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <LuaScript>aobscanString = '8B 0D xx xx xx xx 8b 3c b1 8b 17 8B 42 08 8B CF FF D0 85 C0 74 14'

--for ByteArray and -W+X-C (something like AOBScan() function, but only one result; and faster)
function ScanForIt(scanThis)
  local newscanObj = createMemScan()

  memscan_returnOnlyOneResult(newscanObj,true)
  memscan_firstScan(newscanObj, soExactValue, vtByteArray, rtTruncated,
                    scanThis,nil,"00000000","7fffffff","-W+X-C",fsmNotAligned,
                    "", true, false, false, false);
  memscan_waitTillDone(newscanObj)

  local RESULT = memscan_getOnlyResult(newscanObj)
  object_destroy(newscanObj)
  return RESULT
end

function findBase()
  local result = ScanForIt(aobscanString)
  if result~=nil then
    local baseAdress = readInteger(result+2)
    unregisterSymbol('KeysPointerBase')
    registerSymbol('KeysPointerBase', baseAdress, true)
  end
end

strings_add(getAutoAttachList(), "Borderlands2.exe")

---[[
--Compact mode
  MainForm = getMainForm()
  control_setVisible(wincontrol_getControl(MainForm,0), false)
  control_setVisible(wincontrol_getControl(MainForm,2), false)
  control_setVisible(wincontrol_getControl(MainForm,3), false)

--Disable header sorting and items dragging
  AddressListTreeview = component_getComponent(getAddressList(),0)
  AddressListHeader   = component_getComponent(getAddressList(),1)

  setMethodProperty(AddressListHeader  ,"OnSectionClick",nil)
  setMethodProperty(AddressListTreeview,"OnDragOver"    ,nil)
  setMethodProperty(AddressListTreeview,"OnDragDrop"    ,nil)
  setMethodProperty(AddressListTreeview,"OnEndDrag"     ,nil)

--show main window
  ShowMainWindowTimer = createTimer(nil,false)
  timer_setInterval(ShowMainWindowTimer, 1)
  timer_onTimer(ShowMainWindowTimer, function (sender)
    object_destroy(sender)
    control_setVisible(MainForm,true) -- set visible
    form_setMenu(MainForm,nil)        -- hide menu
  end)
  timer_setEnabled(ShowMainWindowTimer, true)
--]]--

</LuaScript>
</CheatTable>
