Changeset 311

Show
Ignore:
Timestamp:
01/20/10 16:16:58 (7 weeks ago)
Author:
dark_byte
Message:

mass commit for beta 6

Location:
Cheat Engine
Files:
19 modified

Legend:

Unmodified
Added
Removed
  • Cheat Engine/FoundCodeUnit.dfm

    r306 r311  
    145145  end 
    146146  object pmOptions: TPopupMenu 
     147    OnPopup = pmOptionsPopup 
    147148    Left = 64 
    148149    Top = 64 
     
    164165      OnClick = btnExtraInfoClick 
    165166    end 
     167    object N1: TMenuItem 
     168      Caption = '-' 
     169    end 
     170    object Copyselectiontoclipboard1: TMenuItem 
     171      Caption = 'Copy selection to clipboard' 
     172      ShortCut = 16451 
     173      OnClick = Copyselectiontoclipboard1Click 
     174    end 
    166175  end 
    167176end 
  • Cheat Engine/FoundCodeUnit.pas

    r306 r311  
    55uses 
    66  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    7   Dialogs, StdCtrls,disassembler,cefuncproc,ExtCtrls, Menus, newkernelhandler; 
     7  Dialogs, StdCtrls,disassembler,cefuncproc,ExtCtrls, Menus, newkernelhandler, clipbrd; 
    88 
    99type Tcoderecord = record 
     
    3333    btnOpenDisassembler: TButton; 
    3434    btnReplacewithnops: TButton; 
     35    N1: TMenuItem; 
     36    Copyselectiontoclipboard1: TMenuItem; 
    3537    procedure FoundcodeListClick(Sender: TObject); 
    3638    procedure btnOKClick(Sender: TObject); 
     
    4446    procedure FoundcodeListContextPopup(Sender: TObject; MousePos: TPoint; 
    4547      var Handled: Boolean); 
     48    procedure pmOptionsPopup(Sender: TObject); 
     49    procedure Copyselectiontoclipboard1Click(Sender: TObject); 
    4650  private 
    4751    { Private declarations } 
     
    425429end; 
    426430 
     431procedure TFoundCodeDialog.pmOptionsPopup(Sender: TObject); 
     432begin 
     433  n1.visible:=foundcodelist.ItemIndex<>-1; 
     434  Copyselectiontoclipboard1.visible:=foundcodelist.ItemIndex<>-1; 
     435end; 
     436 
     437procedure TFoundCodeDialog.Copyselectiontoclipboard1Click(Sender: TObject); 
     438var 
     439  i: integer; 
     440  s: string; 
     441begin 
     442  s:=''; 
     443  for i:=0 to FoundcodeList.Items.count-1 do 
     444    if FoundcodeList.Selected[i] then 
     445      s:=s+FoundcodeList.Items[i]+#13; 
     446 
     447  clipboard.AsText:=s; 
     448end; 
     449 
    427450end. 
  • Cheat Engine/OpenSave.pas

    r306 r311  
    138138 
    139139function GetmemrecFromXMLNode(CheatEntry: IXMLNode): MemoryRecord; 
    140 procedure LoadStructFromXMLNode(var struct: Tbasestucture; Structure: IXMLNode); 
    141 procedure SaveStructToXMLNode(struct: Tbasestucture; Structures: IXMLNode); 
     140procedure LoadStructFromXMLNode(var struct: TbaseStructure; Structure: IXMLNode); 
     141procedure SaveStructToXMLNode(struct: TbaseStructure; Structures: IXMLNode); 
    142142 
    143143{$ifdef net} 
     
    40974097end; 
    40984098 
    4099 procedure LoadStructFromXMLNode(var struct: Tbasestucture; Structure: IXMLNode); 
     4099procedure LoadStructFromXMLNode(var struct: TbaseStructure; Structure: IXMLNode); 
    41004100var tempnode: IXMLNode; 
    41014101    elements: IXMLNode; 
     
    41654165end; 
    41664166{ 
    4167 procedure SaveStructToXMLNode(struct: Tbasestucture; Structures: IXMLNode); 
     4167procedure SaveStructToXMLNode(struct: TbaseStructure; Structures: IXMLNode); 
    41684168var structure: IXMLNode; 
    41694169    elements: IXMLNode; 
     
    65236523end; 
    65246524 
    6525 procedure SaveStructToXMLNode(struct: Tbasestucture; Structures: IXMLNode); 
     6525procedure SaveStructToXMLNode(struct: TbaseStructure; Structures: IXMLNode); 
    65266526var structure: IXMLNode; 
    65276527    elements: IXMLNode; 
  • Cheat Engine/Release/readme.txt

    r308 r311  
    2323There's now a stacktrace visible during debugging 
    2424The registerview is gone as long as you're not debugging 
    25 CE now suppresses the "No disk" message when the searchpath is invalid 
     25CE now suppresses the "No disk" message when the systems searchpath is invalid 
    2626Added a common modulelist to the ce folder that you can edit. Include files that you do NOT want to go through when doing memory inspection 
    2727You can now open another pointerscanner window while another pointerscan is running and read the results. 
    2828Added a string reference windows 
    29 Improved the plugin system with some extra disassembler commands and a command to load modules into memory 
     29Improved the plugin system: 
     30  You can now add auto assembler commands 
     31  You can now get a callback when the disassembler is being rendered 
     32  You can now add a plugin item to the context of the disassemler 
     33  etc... 
    3034Added (float)#, (double)# and (int)# support to the assembler, (double) is mainly usable in combination with the new DQ command though 
    3135 
  • Cheat Engine/Structuresfrm.dfm

    r307 r311  
    147147        OnClick = Deletecurrentstructure1Click 
    148148      end 
     149      object Autoguessoffsets1: TMenuItem 
     150        Caption = 'Automatically guess offset types' 
     151        OnClick = Autoguessoffsets1Click 
     152      end 
    149153    end 
    150154  end 
     
    260264      OnClick = Remove1Click 
    261265    end 
     266    object Setgroup1: TMenuItem 
     267      Caption = 'Set group' 
     268      OnClick = Setgroup1Click 
     269    end 
    262270  end 
    263271end 
  • Cheat Engine/Structuresfrm.pas

    r309 r311  
    66  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    77  Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls,cefuncproc,newkernelhandler, 
    8   symbolhandler, XMLDoc, XMLIntf, byteinterpreter; 
     8  symbolhandler, XMLDoc, XMLIntf, byteinterpreter, underc; 
    99 
    1010const structureversion=1; 
     
    2121 
    2222 
    23 type Tbasestucture=record 
     23type TbaseStructure=record 
    2424  name: string; 
    2525  structelement: array of TStructElement; 
     
    9090    Memorybrowsepointer1: TMenuItem; 
    9191    Memorybrowsethisaddress1: TMenuItem; 
     92    Autoguessoffsets1: TMenuItem; 
     93    Setgroup1: TMenuItem; 
    9294    procedure Definenewstructure1Click(Sender: TObject); 
    9395    procedure Addelement1Click(Sender: TObject); 
     
    130132    procedure Memorybrowsepointer1Click(Sender: TObject); 
    131133    procedure Memorybrowsethisaddress1Click(Sender: TObject); 
     134    procedure Autoguessoffsets1Click(Sender: TObject); 
     135    procedure Setgroup1Click(Sender: TObject); 
    132136  private 
    133137    { Private declarations } 
     
    136140 
    137141    addresses: array of dword;  //first address (old compat) 
     142 
     143    groupindex: array of integer; //e.g 1,3,9,10000000 
     144    groups: array of dword;               //the grouplist holds the groupnumbers provided by the user 
     145    internalgrouplist: array of dword;    //where as the internelgrouplist holds the entrypoints into the groupindex for each specific address  
    138146    edits: array of tedit; 
    139147    lastnewedit: TEdit; 
     148 
     149 
    140150 
    141151    procedure refreshmenuitems; 
     
    144154//    function RawToType(address: dword; const buf: array of byte; size: integer):integer; 
    145155    procedure ExtraEnter(Sender: TObject); 
     156    procedure automaticallyGuessOffsets(baseOffset: dword; structsize: integer); 
     157    procedure UpdateGroupIndex; 
    146158  public 
    147159    { Public declarations } 
     
    152164var 
    153165  frmStructures: array of TfrmStructures; 
    154   definedstructures: array of Tbasestucture; 
    155  
    156 procedure sortStructure(struct: Tbasestucture); 
     166  definedstructures: array of TbaseStructure; 
     167 
     168procedure sortStructure(struct: TbaseStructure); 
    157169 
    158170implementation 
     
    201213  refresh; 
    202214end; 
     215 
    203216 
    204217procedure TStructure.setaddress(i: integer; x:dword); 
     
    550563end; 
    551564 
    552 procedure sortStructure(struct: Tbasestucture); 
     565procedure sortStructure(struct: TbaseStructure); 
    553566var 
    554567  i,j: integer; 
     
    746759    autofillin,structsize: integer; 
    747760    structname: string; 
    748     buf: array of byte; 
    749     buf2: array of byte; 
    750     i,j,t: integer; 
    751     t2: TVariableType; 
    752     x,y: dword; 
     761 
    753762begin 
    754763  structname:='unnamed structure'; 
     
    766775  if autofillin=mryes then 
    767776  begin 
     777 
    768778    sstructsize:='4096'; 
    769779    if not inputquery('Structure define','Please give a starting size of the struct (You can change this later if needed)',Sstructsize) then exit; 
    770780    structsize:=strtoint(sstructsize); 
    771781 
    772  
    773     setlength(buf,structsize); 
    774     setlength(buf2,8); 
    775     //now read the memory 
    776     if readprocessmemory(processhandle,pointer(addresses[0]),@buf[0],structsize,x) then 
    777     begin 
    778       x:=0; 
    779       while x<structsize do 
    780       begin 
    781         i:=length(definedstructures[length(definedstructures)-1].structelement); 
    782         setlength(definedstructures[length(definedstructures)-1].structelement,i+1); 
    783         definedstructures[length(definedstructures)-1].structelement[i].offset:=x; 
    784         definedstructures[length(definedstructures)-1].structelement[i].pointerto:=false; 
    785  
    786         //value 
    787         //check what type it is 
    788         t2:=FindTypeOfData(addresses[0]+x,@buf[x],structsize-x); 
    789         if t2=vtPointer then 
    790         begin 
    791           //pointer 
    792  
    793  
    794           definedstructures[length(definedstructures)-1].structelement[i].pointerto:=true; 
    795           definedstructures[length(definedstructures)-1].structelement[i].pointertoSize:=8; 
    796           definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
    797           definedstructures[length(definedstructures)-1].structelement[i].description:='pointer to '; 
    798  
    799           if readprocessmemory(processhandle,pointer(pdword(@buf[x])^),@buf2[0],8,y) then 
    800           begin 
    801             t2:=FindTypeOfData(pdword(@buf[x])^,@buf2[0],8); 
    802             t:=convertVariableTypeTostructnr(t2); 
    803             definedstructures[length(definedstructures)-1].structelement[i].structurenr:=t; 
    804           end 
    805           else definedstructures[length(definedstructures)-1].structelement[i].structurenr:=-9; 
    806  
    807           inc(x,4); 
    808           continue; 
    809         end; 
    810  
    811  
    812         t:=convertVariableTypeTostructnr(t2); 
    813  
    814  
    815  
    816         definedstructures[length(definedstructures)-1].structelement[i].structurenr:=t; 
    817  
    818  
    819  
    820         case t of 
    821           -1: //byte 
    822           begin 
    823             definedstructures[length(definedstructures)-1].structelement[i].description:='Byte'; 
    824             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=1; 
    825             inc(x,1); 
    826           end; 
    827  
    828           -4: //word 
    829           begin 
    830             definedstructures[length(definedstructures)-1].structelement[i].description:='Word'; 
    831             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=2; 
    832             inc(x,2); 
    833           end; 
    834  
    835           -7: //dword 
    836           begin 
    837             definedstructures[length(definedstructures)-1].structelement[i].description:='Dword'; 
    838             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
    839             inc(x,4); 
    840           end; 
    841  
    842           -12: //single 
    843           begin 
    844             definedstructures[length(definedstructures)-1].structelement[i].description:='Float'; 
    845             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
    846             inc(x,4); 
    847           end; 
    848  
    849           -13: //double 
    850           begin 
    851             definedstructures[length(definedstructures)-1].structelement[i].description:='Double'; 
    852             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=8; 
    853             inc(x,8); 
    854           end; 
    855  
    856           -14: //string 
    857           begin 
    858             definedstructures[length(definedstructures)-1].structelement[i].description:='String'; 
    859  
    860             //find out how long this string is: 
    861             definedstructures[length(definedstructures)-1].structelement[i].bytesize:=0; 
    862             while (x<structsize) and (buf[x]>=32) and (buf[x]<=127) do 
    863             begin 
    864               inc(x); 
    865               inc(definedstructures[length(definedstructures)-1].structelement[i].bytesize); 
    866             end; 
    867           end; 
    868  
    869  
    870         end; 
    871       end; 
    872  
    873     end; 
    874   end; 
    875   update(true);  
     782    automaticallyGuessOffsets(0, structsize); 
     783  end; 
     784  update(true); 
    876785end; 
    877786 
     
    18471756procedure TfrmStructures.FormCreate(Sender: TObject); 
    18481757begin 
     1758  setlength(groups,1); 
    18491759  setlength(addresses,1); 
    18501760  setlength(edits,1); 
    18511761  edits[0]:=edtAddress; 
     1762  groups[0]:=0; 
    18521763  lastnewedit:=edtaddress; 
    18531764  edtAddress.OnEnter:=extraenter; 
     
    18551766  setlength(frmStructures,length(frmStructures)+1); 
    18561767  frmStructures[length(frmStructures)-1]:=self; 
     1768 
     1769  UpdateGroupIndex; 
    18571770end; 
    18581771 
     
    18841797  setlength(addresses,length(addresses)+1); 
    18851798  addresses[length(addresses)-1]:=addresses[x.tag-1]; 
     1799 
     1800  setlength(groups,length(groups)+1); 
     1801  groups[length(groups)-1]:=0; 
     1802  UpdateGroupIndex; 
     1803 
     1804 
    18861805     
    18871806  setlength(edits,length(edits)+1); 
     
    19031822  x:=TEdit(popupmenu2.PopupComponent); 
    19041823  if x.tag=0 then exit; //can't remove the first one 
    1905    
     1824 
    19061825  for i:=x.tag to length(edits)-2 do 
    19071826  begin 
     1827    groups[i]:=groups[i+1]; 
    19081828    edits[i]:=edits[i+1]; 
    19091829    edits[i].Left:=edits[i].Left-edits[i].Width-16; 
     
    19171837    currentstructure.removeAddress(x.tag); 
    19181838 
     1839  UpdateGroupIndex; 
     1840   
    19191841  x.free; 
    19201842end; 
     
    19531875  Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; 
    19541876  Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); 
     1877{ 
     1878multigroup usage: 
     1879If all entries of the same group are the same, mark them green, otherwhise red 
     1880If the value of another group does not match the value of the first group, mark it red 
     1881} 
    19551882var   
    1956   i: integer; 
     1883  i,j: integer; 
    19571884  laststart: integer; 
    19581885  textrect: trect; 
     
    19661893  oldcolor: tcolor; 
    19671894 
    1968   different: boolean; 
    1969  
    19701895  clip: trect; 
     1896 
     1897  currentGroup: integer; 
     1898  groupmatches: array of boolean; 
     1899  groupcolors: array of tcolor; 
     1900  groupvalues: array of string; 
    19711901begin 
    19721902  //looks like it's even called before create is done... 
    19731903  if stage=cdPostPaint then 
    19741904  begin 
    1975     different:=false; 
    19761905    textrect:=node.DisplayRect(true); 
    19771906    linerect:=node.DisplayRect(false); 
    1978    
     1907 
    19791908    fulltextline:=linerect; 
    19801909    fulltextline.Left:=textrect.Left; 
     
    19881917    setlength(sections2,totalsections); 
    19891918    currentsection:=0; 
     1919 
     1920 
     1921    setlength(groupvalues,length(groupindex)); 
     1922    setlength(groupcolors,length(groupindex)); 
     1923    setlength(groupmatches,length(groupindex)); 
     1924    for i:=0 to length(groupcolors)-1 do 
     1925    begin 
     1926      groupcolors[i]:=clGreen; 
     1927      groupmatches[i]:=true; 
     1928    end; 
    19901929 
    19911930    laststart:=1; 
     
    20031942      end; 
    20041943 
    2005     for i:=1 to length(sections2)-2 do 
    2006       if sections2[i]<>sections2[i+1] then 
     1944    //go through the values 
     1945    for i:=1 to length(sections2)-1 do 
     1946    begin 
     1947      currentGroup:=internalgrouplist[i-1]; 
     1948 
     1949      if groupvalues[currentGroup]='' then 
     1950        groupvalues[currentGroup]:=sections2[i] 
     1951      else 
    20071952      begin 
    2008         different:=true; 
    2009         break; 
     1953        if groupvalues[currentGroup]<>sections2[i] then 
     1954        begin 
     1955          groupcolors[currentGroup]:=clred; 
     1956          groupmatches[currentGroup]:=false; 
     1957        end; 
    20101958      end; 
     1959    end; 
     1960 
     1961    for i:=1 to length(groupvalues)-1 do 
     1962    begin 
     1963      if (groupmatches[i]) and (groupmatches[i-1]) then //both groups match 
     1964      begin 
     1965        if groupvalues[i-1]<>groupvalues[i] then  //but the values don't match with the previous group 
     1966          groupcolors[i]:=clBlue; 
     1967      end; 
     1968    end; 
     1969 
    20111970 
    20121971    //if laststart=1 then 
     
    20261985      sender.Canvas.Brush.Color:=tvStructureView.Color; 
    20271986      sender.Canvas.FillRect(textlinerect); 
    2028       if different then 
    2029         tvStructureView.canvas.Font.Color:=clRed 
    2030       else 
    2031         tvStructureView.canvas.Font.Color:=clWindowText; 
     1987//      if different then 
     1988//        tvStructureView.canvas.Font.Color:=clRed 
     1989//      else 
     1990//        tvStructureView.canvas.Font.Color:=clWindowText; 
    20321991 
    20331992    end 
     
    20381997      sender.Canvas.FillRect(textlinerect); 
    20391998      sender.Canvas.DrawFocusRect(textlinerect); 
    2040       if different then 
    2041       begin 
    2042         tvStructureView.canvas.Font.Color:=clRed; 
    2043         tvStructureView.canvas.Font.Style:=[fsBold]; 
    2044       end 
    2045       else 
    2046         tvStructureView.canvas.Font.Color:=clHighlightText; 
     1999//      if different then 
     2000//      begin 
     2001//        tvStructureView.canvas.Font.Color:=clRed; 
     2002//        tvStructureView.canvas.Font.Style:=[fsBold]; 
     2003//      end 
     2004//      else 
     2005//        tvStructureView.canvas.Font.Color:=clHighlightText; 
    20472006 
    20482007    end; 
     
    20582017    for i:=1 to totalsections-1 do 
    20592018    begin 
     2019      currentGroup:=internalgrouplist[i-1]; 
     2020      tvStructureView.canvas.Font.Color:=groupcolors[currentgroup]; 
     2021 
    20602022      clip.Left:=headercontrol1.Sections[i].Left; 
    20612023      clip.Right:=headercontrol1.Sections[i].Left+headercontrol1.Sections[i].Width; 
     
    20892051begin 
    20902052  x:=TEdit(popupmenu2.PopupComponent); 
    2091   Remove1.Visible:=(x=nil) or (x.tag<>0); 
     2053  Remove1.Visible:=(x<>nil) and (x.tag<>0); 
    20922054  n6.Visible:=remove1.Visible; 
     2055 
     2056  if groups[x.Tag]<>0 then 
     2057    setgroup1.Caption:='Change group ('+inttostr(groups[x.tag])+')' 
     2058  else 
     2059    setgroup1.Caption:='Set group'; 
    20932060end; 
    20942061 
     
    22492216end; 
    22502217 
     2218procedure TfrmStructures.automaticallyGuessOffsets(baseOffset: dword; structsize: integer); 
     2219var 
     2220  buf: array of byte; 
     2221  buf2: array of byte; 
     2222  i,j,t: integer; 
     2223  t2: TVariableType; 
     2224  x,y: dword; 
     2225begin 
     2226    setlength(buf,structsize); 
     2227    setlength(buf2,8); 
     2228    //now read the memory 
     2229    if readprocessmemory(processhandle,pointer(addresses[0]+baseOffset),@buf[0],structsize,x) then 
     2230    begin 
     2231      x:=0; 
     2232      while x<structsize do 
     2233      begin 
     2234        i:=length(definedstructures[length(definedstructures)-1].structelement); 
     2235        setlength(definedstructures[length(definedstructures)-1].structelement,i+1); 
     2236        definedstructures[length(definedstructures)-1].structelement[i].offset:=baseoffset+x; 
     2237        definedstructures[length(definedstructures)-1].structelement[i].pointerto:=false; 
     2238 
     2239        //value 
     2240        //check what type it is 
     2241        t2:=FindTypeOfData(addresses[0]+baseoffset+x,@buf[x],structsize-x); 
     2242        if t2=vtPointer then 
     2243        begin 
     2244          //pointer 
     2245 
     2246 
     2247          definedstructures[length(definedstructures)-1].structelement[i].pointerto:=true; 
     2248          definedstructures[length(definedstructures)-1].structelement[i].pointertoSize:=8; 
     2249          definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
     2250          definedstructures[length(definedstructures)-1].structelement[i].description:='pointer to '; 
     2251 
     2252          if readprocessmemory(processhandle,pointer(pdword(@buf[x])^),@buf2[0],8,y) then 
     2253          begin 
     2254            t2:=FindTypeOfData(pdword(@buf[x])^,@buf2[0],8); 
     2255            t:=convertVariableTypeTostructnr(t2); 
     2256            definedstructures[length(definedstructures)-1].structelement[i].structurenr:=t; 
     2257          end 
     2258          else definedstructures[length(definedstructures)-1].structelement[i].structurenr:=-9; 
     2259 
     2260          inc(x,4); 
     2261          continue; 
     2262        end; 
     2263 
     2264 
     2265        t:=convertVariableTypeTostructnr(t2); 
     2266 
     2267 
     2268 
     2269        definedstructures[length(definedstructures)-1].structelement[i].structurenr:=t; 
     2270 
     2271 
     2272 
     2273        case t of 
     2274          -1: //byte 
     2275          begin 
     2276            definedstructures[length(definedstructures)-1].structelement[i].description:='Byte'; 
     2277            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=1; 
     2278            inc(x,1); 
     2279          end; 
     2280 
     2281          -4: //word 
     2282          begin 
     2283            definedstructures[length(definedstructures)-1].structelement[i].description:='Word'; 
     2284            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=2; 
     2285            inc(x,2); 
     2286          end; 
     2287 
     2288          -7: //dword 
     2289          begin 
     2290            definedstructures[length(definedstructures)-1].structelement[i].description:='Dword'; 
     2291            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
     2292            inc(x,4); 
     2293          end; 
     2294 
     2295          -12: //single 
     2296          begin 
     2297            definedstructures[length(definedstructures)-1].structelement[i].description:='Float'; 
     2298            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=4; 
     2299            inc(x,4); 
     2300          end; 
     2301 
     2302          -13: //double 
     2303          begin 
     2304            definedstructures[length(definedstructures)-1].structelement[i].description:='Double'; 
     2305            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=8; 
     2306            inc(x,8); 
     2307          end; 
     2308 
     2309          -14: //string 
     2310          begin 
     2311            definedstructures[length(definedstructures)-1].structelement[i].description:='String'; 
     2312 
     2313            //find out how long this string is: 
     2314            definedstructures[length(definedstructures)-1].structelement[i].bytesize:=0; 
     2315            while (x<structsize) and (buf[x]>=32) and (buf[x]<=127) do 
     2316            begin 
     2317              inc(x); 
     2318              inc(definedstructures[length(definedstructures)-1].structelement[i].bytesize); 
     2319            end; 
     2320          end; 
     2321 
     2322 
     2323        end; 
     2324      end; 
     2325 
     2326    end; 
     2327end; 
     2328 
     2329procedure TfrmStructures.Autoguessoffsets1Click(Sender: TObject); 
     2330var 
     2331  sStartOffset: string; 
     2332  sStructSize: string; 
     2333  base: TbaseStructure; 
     2334  startOffset: integer; 
     2335  structSize: integer; 
     2336begin 
     2337  if currentstructure<>nil then 
     2338  begin 
     2339    base:=definedstructures[currentstructure.basestructure]; 
     2340    if length(base.structelement)>0 then 
     2341      sStartOffset:=inttohex(base.structelement[length(base.structelement)-1].offset+base.structelement[length(base.structelement)-1].bytesize,1) 
     2342    else 
     2343      sStartOffset:='0'; 
     2344 
     2345    if not inputquery('Structure define','Please give a starting offset to evaluate',sStartOffset) then exit; 
     2346    startOffset:=StrToInt('$'+sStartOffset); 
     2347 
     2348    sStructSize:='4096'; 
     2349    if not inputquery('Structure define','Please give the size of the block to evaluate',sStructSize) then exit; 
     2350    structSize:=StrToInt(sStructSize); 
     2351 
     2352    automaticallyGuessOffsets(startOffset, structsize); 
     2353  end; 
     2354end; 
     2355 
     2356procedure  TfrmStructures.UpdateGroupIndex; 
     2357var i,j: integer; 
     2358    alreadyIndexed: boolean; 
     2359begin 
     2360  setlength(groupindex,0); 
     2361  setlength(internalgrouplist,length(groups)); 
     2362  for i:=0 to length(groups)-1 do 
     2363  begin 
     2364    alreadyIndexed:=false; 
     2365    for j:=0 to length(groupindex)-1 do 
     2366    begin 
     2367      if groupindex[j]=groups[i] then 
     2368      begin 
     2369        alreadyIndexed:=true; 
     2370        internalgrouplist[i]:=j; 
     2371        break; 
     2372      end; 
     2373    end; 
     2374 
     2375    if not alreadyIndexed then 
     2376    begin 
     2377      setlength(groupindex,length(groupindex)+1); 
     2378      groupindex[length(groupindex)-1]:=groups[i]; 
     2379      internalgrouplist[i]:=length(groupindex)-1; 
     2380    end; 
     2381 
     2382 
     2383  end; 
     2384end; 
     2385 
     2386 
     2387procedure TfrmStructures.Setgroup1Click(Sender: TObject); 
     2388var 
     2389  x: tedit; 
     2390  sgroup: string; 
     2391begin 
     2392  x:=TEdit(popupmenu2.PopupComponent); 
     2393 
     2394  sgroup:=inttostr(groups[x.Tag]); 
     2395 
     2396  InputQuery('Structure definer', 'Which group do you want to set this address to?', sgroup); 
     2397  groups[x.Tag]:=strtoint(sgroup); 
     2398 
     2399  updategroupindex; 
     2400 
     2401  tvStructureView.Refresh; 
     2402end; 
     2403 
    22512404end. 
    22522405 
  • Cheat Engine/SynEdit/Source/SynHighlighterAA.pas

    r309 r311  
    137137    function Func52: TtkTokenKind; //dealloc / disable 
    138138    function Func54: TtkTokenKind; //kalloc 
     139    function Func55: TtkTokenKind; //aobscan 
    139140    function Func59: TtkTokenKind; //readmem     
    140141    function Func68: TtkTokenKind; //include 
     
    329330  fIdentFuncTable[52] := Func52; 
    330331  fIdentFuncTable[54] := Func54; 
     332  fIdentFuncTable[55] := Func55;   
    331333  fIdentFuncTable[59] := Func59; 
    332334  fIdentFuncTable[68] := Func68; 
     
    526528    Result := tkIdentifier; 
    527529end; 
     530 
     531function TSynAASyn.Func55: TtkTokenKind; //aobscan 
     532begin 
     533  if KeyComp('aobscan') then Result := tkKey else 
     534    Result := tkIdentifier; 
     535end; 
     536 
    528537 
    529538function TSynAASyn.Func59: TtkTokenKind; //readmem 
  • Cheat Engine/autoassembler.pas

    r307 r311  
    1919function getenableanddisablepos(code:tstrings;var enablepos,disablepos: integer): boolean; 
    2020function autoassemble(code: tstrings;popupmessages: boolean):boolean; overload; 
    21 function autoassemble(code: Tstrings; popupmessages,enable,syntaxcheckonly, targetself: boolean;var CEAllocarray: TCEAllocArray): boolean; overload; 
     21function autoassemble(code: Tstrings; popupmessages,enable,syntaxcheckonly, targetself: boolean;var CEAllocarray: TCEAllocArray; registeredsymbols: tstringlist=nil): boolean; overload; 
    2222 
    2323implementation 
     
    245245 
    246246 
    247 function autoassemble2(code: tstrings;popupmessages: boolean;syntaxcheckonly:boolean; targetself: boolean ;var ceallocarray:TCEAllocArray):boolean; 
     247function autoassemble2(code: tstrings;popupmessages: boolean;syntaxcheckonly:boolean; targetself: boolean ;var ceallocarray:TCEAllocArray; registeredsymbols: tstringlist=nil):boolean; 
     248{ 
     249registeredsymbols is a stringlist that is initialized by the caller as case insensitive and no duplicates 
     250} 
    248251type tassembled=record 
    249252  address: dword; 
     
    315318    symhandler: TSymhandler; 
    316319begin 
     320  if syntaxcheckonly and (registeredsymbols<>nil) then 
     321  begin 
     322    //add the symbols as defined labels 
     323    setlength(labels,registeredsymbols.count); 
     324    for i:=0 to registeredsymbols.count-1 do 
     325    begin 
     326      labels[i].labelname:=registeredsymbols[i]; 
     327      labels[i].defined:=true; 
     328      labels[i].address:=0; 
     329      labels[i].assemblerline:=0; 
     330      setlength(labels[i].references,0); 
     331      setlength(labels[i].references2,0); 
     332    end; 
     333  end; 
     334 
    317335  if targetself then 
    318336  begin 
     
    393411          if uppercase(copy(currentline,1,7))='ASSERT(' then //assert(address,aob) 
    394412          begin 
    395             a:=pos('(',currentline); 
    396             b:=pos(',',currentline); 
    397             c:=pos(')',currentline); 
    398             if (a>0) and (b>0) and (c>0) then 
    399             begin 
    400               s1:=copy(currentline,a+1,b-a-1); 
    401               s2:=copy(currentline,b+1,c-b-1); 
    402               testdword:= symhandler.getAddressFromName(s1,false); 
    403  
    404               setlength(bytes,0); 
    405               ConvertStringToBytes(s2, true, bytes); 
    406               if length(bytes)>0 then 
     413            if not syntaxcheckonly then 
     414            begin 
     415              a:=pos('(',currentline); 
     416              b:=pos(',',currentline); 
     417              c:=pos(')',currentline); 
     418              if (a>0) and (b>0) and (c>0) then 
    407419              begin 
    408                 getmem(bytebuf,length(bytes)); 
    409                 if ReadProcessMemory(processhandle, pointer(testdword), bytebuf, length(bytes),x) then 
     420                s1:=copy(currentline,a+1,b-a-1); 
     421                s2:=copy(currentline,b+1,c-b-1); 
     422                testdword:= symhandler.getAddressFromName(s1,false); 
     423 
     424                setlength(bytes,0); 
     425                ConvertStringToBytes(s2, true, bytes); 
     426                if length(bytes)>0 then 
    410427                begin 
    411                   try 
    412                     for j:=0 to length(bytes)-1 do 
    413                     begin 
    414                       if bytes[j]>=0 then 
    415                         if byte(bytes[j])<>bytebuf[j] then 
    416                           raise exception.Create('The bytes at '+s1+' are not what was expected'); 
     428                  getmem(bytebuf,length(bytes)); 
     429                  if ReadProcessMemory(processhandle, pointer(testdword), bytebuf, length(bytes),x) then 
     430                  begin 
     431                    try 
     432                      for j:=0 to length(bytes)-1 do 
     433                      begin 
     434                        if bytes[j]>=0 then 
     435                          if byte(bytes[j])<>bytebuf[j] then 
     436                            raise exception.Create('The bytes at '+s1+' are not what was expected'); 
     437                      end; 
     438                    finally 
     439                      freemem(bytebuf); 
    417440                    end; 
    418                   finally 
    419                     freemem(bytebuf); 
    420                   end; 
    421                 end else raise exception.Create('The memory at +'+s1+' can not be read'); 
    422  
     441                  end else raise exception.Create('The memory at +'+s1+' can not be read'); 
     442 
     443                end 
     444                else raise exception.Create(s2+' is not a valid bytestring'); 
     445 
     446 
     447 
     448                setlength(assemblerlines,length(assemblerlines)-1); 
     449                continue; 
    423450              end 
    424               else raise exception.Create(s2+' is not a valid bytestring'); 
    425  
    426  
    427  
    428               setlength(assemblerlines,length(assemblerlines)-1); 
    429               continue; 
    430             end 
    431             else 
    432               raise exception.Create('Wrong syntax. ASSERT(address,bvtes)'); 
     451              else 
     452                raise exception.Create('Wrong syntax. ASSERT(address,bytes)'); 
     453            end; 
    433454          end; 
    434455 
     
    652673              setlength(addsymbollist,length(addsymbollist)+1); 
    653674              addsymbollist[length(addsymbollist)-1]:=s1; 
     675 
     676              if registeredsymbols<>nil then 
     677                registeredsymbols.Add(s1); 
    654678            end 
    655679            else raise exception.Create('Syntax error'); 
     
    694718              //s2=AOBstring 
    695719              testdword:=findaob(s2); 
    696               if testdword=0 then 
     720              if (testdword=0) and (not syntaxcheckonly) then 
    697721                raise exception.Create('The array of byte '''+s2+''' could not be found'); 
    698722 
     
    10181042              break; 
    10191043            end; 
     1044 
    10201045 
    10211046        if not ok1 then raise exception.Create(addsymbollist[i]+' was supposed to be added to the symbollist, but it isn''t declared'); 
     
    16311656 
    16321657 
    1633 function autoassemble(code: Tstrings; popupmessages,enable,syntaxcheckonly, targetself: boolean;var CEAllocarray: TCEAllocArray): boolean; overload; 
     1658function autoassemble(code: Tstrings; popupmessages,enable,syntaxcheckonly, targetself: boolean;var CEAllocarray: TCEAllocArray; registeredsymbols: tstringlist=nil): boolean; overload; 
    16341659{ 
    16351660targetself defines if the process that gets injected to is CE itself or the target process 
     
    16891714    end; 
    16901715 
    1691     result:=autoassemble2(tempstrings,popupmessages,syntaxcheckonly,targetself,ceallocarray); 
     1716    result:=autoassemble2(tempstrings,popupmessages,syntaxcheckonly,targetself,ceallocarray, registeredsymbols); 
    16921717  finally 
    16931718    tempstrings.Free; 
     
    17001725begin 
    17011726  setlength(aa,0); 
    1702   result:=autoassemble(code,popupmessages,true,false,false,aa); 
     1727  result:=autoassemble(code,popupmessages,true,false,false,aa,nil); 
    17031728end; 
    17041729 
  • Cheat Engine/cheatengine.dof

    r309 r311  
    189189MinorVer=6 
    190190Release=0 
    191 Build=53 
     191Build=55 
    192192Debug=0 
    193193PreRelease=1 
     
    200200CompanyName= 
    201201FileDescription=Cheat Engine 5.6 
    202 FileVersion=5.6.0.53 
     202FileVersion=5.6.0.55 
    203203InternalName=CheatEngine 
    204204LegalCopyright=none 
  • Cheat Engine/cheatengine.drc

    r306 r311  
    99*/ 
    1010 
    11 #define MainUnit_strXMess 64944 
    12 #define MainUnit_strNewyear 64945 
    13 #define MainUnit_strfuture 64946 
    14 #define MainUnit_strdontbother 64947 
    15 #define MainUnit_strneeddebugger 64948 
    16 #define MainUnit_strfailuretosetspeed 64949 
    17 #define MainUnit_strIncorrectspeed 64950 
    18 #define MainUnit_strCantSetSpeed 64951 
    19 #define MainUnit_strHyperscanFailed 64952 
    20 #define MainUnit_strUnknownExtension 64953 
    21 #define MainUnit_strCustomScanConfig 64954 
    22 #define MainUnit_strRecalculateAddress 64960 
    23 #define MainUnit_strRecalculateSelectedAddresses 64961 
    24 #define MainUnit_strRecalculateAllAddresses 64962 
    25 #define MainUnit_strRemoveFromGroup 64963 
    26 #define MainUnit_strEnableCheat 64964 
    27 #define MainUnit_strDisableCheat 64965 
    28 #define MainUnit_strFindWhatWritesToPointer 64966 
    29 #define MainUnit_strFindWhatWritesToPointer2 64967 
    30 #define MainUnit_strcantdebugnow 64968 
    31 #define MainUnit_strpointercantberead 64969 
    32 #define MainUnit_strconfirmUndo 64970 
    33 #define MainUnit_strHideForeground 64971 
    34 #define MainUnit_strHideAll 64972 
    35 #define MainUnit_strUnHideForeground 64973 
    36 #define MainUnit_strUnhideAll 64974 
    37 #define MainUnit_strhappybirthday 64975 
    38 #define MainUnit_strDeleteMoreGroups 64976 
    39 #define MainUnit_strSelectedAddressIsAPointer 64977 
    40 #define MainUnit_strMorePointers 64978 
    41 #define MainUnit_strMorePointers2 64979 
    42 #define MainUnit_strNotAValidValue 64980 
    43 #define MainUnit_strdeleteall 64981 
    44 #define MainUnit_stralreadyin 64982 
    45 #define MainUnit_stralreadyinlistmultiple 64983 
    46 #define MainUnit_strsethotkey 64984 
    47 #define MainUnit_strshowasdecimal 64985 
    48 #define MainUnit_strshowashex 64986 
    49 #define MainUnit_strFreezeAddressInList 64987 
    50 #define MainUnit_strFreezeAllAddresses 64988 
    51 #define MainUnit_strUnfreezeAllAddresses 64989 
    52 #define MainUnit_strUnfreezeAddressInList 64990 
    53 #define MainUnit_strDeleteAddress 64991 
    54 #define MainUnit_strCantdoNextScan 64992 
    55 #define MainUnit_strClickToGoHome 64993 
    56 #define MainUnit_strChangeDescription1 64994 
    57 #define MainUnit_strChangeDescription2 64995 
    58 #define MainUnit_strNotTheSameSize1 64996 
    59 #define MainUnit_strNotTheSameSize2 64997 
    60 #define MainUnit_strAdd0 64998 
    61 #define MainUnit_strNotAValidNotation 64999 
    62 #define MainUnit_strNotSameAmmountofBytes 65000 
    63 #define MainUnit_strNotAValidBinaryNotation 65001 
    64 #define MainUnit_strValue 65002 
    65 #define MainUnit_strChange1Value 65003 
    66 #define MainUnit_strChangeMoreValues 65004 
    67 #define MainUnit_strDelete1Address 65005 
    68 #define MainUnit_strDeleteMultipleAddresses 65006 
    69 #define MainUnit_strDelete1Group 65007 
    70 #define MainUnit_strAllowNegative 65008 
    71 #define MainUnit_strAllowPositive 65009 
    72 #define MainUnit_strNormalFreeze 65010 
    73 #define MainUnit_strAskToSave 65011 
    74 #define MainUnit_strScantextcaptiontotext 65012 
    75 #define MainUnit_strScantextcaptiontoValue 65013 
    76 #define MainUnit_strsearchForText 65014 
    77 #define MainUnit_strSearchForArray 65015 
    78 #define MainUnit_strConfirmProcessTermination 65016 
    79 #define MainUnit_strError 65017 
    80 #define MainUnit_strErrorwhileOpeningProcess 65018 
    81 #define MainUnit_strKeepList 65019 
    82 #define MainUnit_strInfoAboutTable 65020 
    83 #define MainUnit_strPhysicalMemory 65021 
    84 #define MainUnit_strfillInSomething 65022 
    85 #define MainUnit_strFirstSelectAProcess 65023 
    86 #define MainUnit2_strbiggerThan 65024 
    87 #define MainUnit2_strSmallerThan 65025 
    88 #define MainUnit2_strIncreasedValue 65026 
    89 #define MainUnit2_strIncreasedValueBy 65027 
    90 #define MainUnit2_strDecreasedValue 65028 
    91 #define MainUnit2_strDecreasedValueBy 65029 
    92 #define MainUnit2_strValueBetween 65030 
    93 #define MainUnit2_strChangedValue 65031 
    94 #define MainUnit2_strUnchangedValue 65032 
    95 #define MainUnit2_strUnknownInitialValue 65033 
    96 #define MainUnit2_strSameAsFirstScan 65034 
    97 #define MainUnit2_strtoolong 65035 
    98 #define FoundCodeUnit_strClose 65036 
    99 #define MainUnit_strWindowFailedToHide 65037 
    100 #define MainUnit_strAccessed 65038 
    101 #define MainUnit_strOpcodeChanged 65039 
    102 #define AdvancedOptionsUnit_strcouldntwrite 65040 
    103 #define AdvancedOptionsUnit_StrSelectExeFor3D 65041 
    104 #define AdvancedOptionsUnit_StrSelectExeForOpenGL3D 65042 
    105 #define formsettingsunit_strProcessWatcherWillPreventUnloader 65043 
    106 #define MainUnit2_strStart 65044 
    107 #define MainUnit2_strStop 65045 
    108 #define MainUnit2_strOK 65046 
    109 #define MainUnit2_strBug 65047 
    110 #define MainUnit2_strAutoAssemble 65048 
    111 #define MainUnit2_strAddressHasToBeReadable 65049 
    112 #define MainUnit2_strNewScan 65050 
    113 #define MainUnit2_strFirstScan 65051 
    114 #define MainUnit2_strNoDescription 65052 
    115 #define MainUnit2_strNeedNewerWindowsVersion 65053 
    116 #define MainUnit2_strexact 65054 
    117 #define MainUnit2_strexactvalue 65055 
    118 #define frmFindstaticsUnit_strStop 65056 
    119 #define frmFindstaticsUnit_strStopping 65057 
    120 #define frmLoadMemoryunit_strinvalidfile 65058 
    121 #define AdvancedOptionsUnit_strnotreadable 65059 
    122 #define AdvancedOptionsUnit_strNotWhatitshouldbe 65060 
    123 #define AdvancedOptionsUnit_stralreadyinthelist 65061 
    124 #define AdvancedOptionsUnit_strPartOfOpcodeInTheList 65062 
    125 #define AdvancedOptionsUnit_strCECode 65063 
    126 #define AdvancedOptionsUnit_strNameCECode 65064 
    127 #define AdvancedOptionsUnit_strChangeOf 65065 
    128 #define AdvancedOptionsUnit_strCode 65066 
    129 #define AdvancedOptionsUnit_strFindWhatCodeaccesses 65067 
    130 #define AdvancedOptionsUnit_strFindWhatCodeReads 65068 
    131 #define AdvancedOptionsUnit_strFindWhatCodeWrites 65069 
    132 #define AdvancedOptionsUnit_strcouldntrestorecode 65070 
    133 #define AdvancedOptionsUnit_strnotthesame 65071 
    134 #define SynEditStrConst_SYNS_AttrOctal 65072 
    135 #define SynEditStrConst_SYNS_AttrPreprocessor 65073 
    136 #define SynEditStrConst_SYNS_AttrReservedWord 65074 
    137 #define SynEditStrConst_SYNS_AttrSpace 65075 
    138 #define SynEditStrConst_SYNS_AttrString 65076 
    139 #define SynEditStrConst_SYNS_AttrSymbol 65077 
    140 #define SynEditStrConst_SYNS_ScrollInfoFmt 65078 
    141 #define SynEditStrConst_SYNS_ScrollInfoFmtTop 65079 
    142 #define SynEditStrConst_SYNS_EDuplicateShortcut 65080 
    143 #define SynEditStrConst_SYNS_FilterPascal 65081 
    144 #define SynEditStrConst_SYNS_FilterCPP 65082 
    145 #define SynEditStrConst_SYNS_LangCPP 65083 
    146 #define SynEditStrConst_SYNS_LangPascal 65084 
    147 #define SynEditTextBuffer_SListIndexOutOfBounds 65085 
    148 #define SynEditTextBuffer_SInvalidCapacity 65086 
    149 #define frmFindstaticsUnit_strScan 65087 
     11#define AdvancedOptionsUnit_strCode 64944 
     12#define AdvancedOptionsUnit_strFindWhatCodeaccesses 64945 
     13#define AdvancedOptionsUnit_strFindWhatCodeReads 64946 
     14#define AdvancedOptionsUnit_strFindWhatCodeWrites 64947 
     15#define AdvancedOptionsUnit_strcouldntrestorecode 64948 
     16#define AdvancedOptionsUnit_strnotthesame 64949 
     17#define AdvancedOptionsUnit_strcouldntwrite 64950 
     18#define AdvancedOptionsUnit_StrSelectExeFor3D 64951 
     19#define AdvancedOptionsUnit_StrSelectExeForOpenGL3D 64952 
     20#define formsettingsunit_strProcessWatcherWillPreventUnloader 64953 
     21#define FoundCodeUnit_strClose 64954 
     22#define MainUnit_strIncorrectspeed 64960 
     23#define MainUnit_strCantSetSpeed 64961 
     24#define MainUnit_strHyperscanFailed 64962 
     25#define MainUnit_strUnknownExtension 64963 
     26#define MainUnit_strCustomScanConfig 64964 
     27#define frmFindstaticsUnit_strScan 64965 
     28#define frmFindstaticsUnit_strStop 64966 
     29#define frmFindstaticsUnit_strStopping 64967 
     30#define frmLoadMemoryunit_strinvalidfile 64968 
     31#define AdvancedOptionsUnit_strnotreadable 64969 
     32#define AdvancedOptionsUnit_strNotWhatitshouldbe 64970 
     33#define AdvancedOptionsUnit_stralreadyinthelist 64971 
     34#define AdvancedOptionsUnit_strPartOfOpcodeInTheList 64972 
     35#define AdvancedOptionsUnit_strCECode 64973 
     36#define AdvancedOptionsUnit_strNameCECode 64974 
     37#define AdvancedOptionsUnit_strChangeOf 64975 
     38#define MainUnit_strFindWhatWritesToPointer 64976 
     39#define MainUnit_strFindWhatWritesToPointer2 64977 
     40#define MainUnit_strcantdebugnow 64978 
     41#define MainUnit_strpointercantberead 64979 
     42#define MainUnit_strconfirmUndo 64980 
     43#define MainUnit_strHideForeground 64981 
     44#define MainUnit_strHideAll 64982 
     45#define MainUnit_strUnHideForeground 64983 
     46#define MainUnit_strUnhideAll 64984 
     47#define MainUnit_strhappybirthday 64985 
     48#define MainUnit_strXMess 64986 
     49#define MainUnit_strNewyear 64987 
     50#define MainUnit_strfuture 64988 
     51#define MainUnit_strdontbother 64989 
     52#define MainUnit_strneeddebugger 64990 
     53#define MainUnit_strfailuretosetspeed 64991 
     54#define MainUnit_stralreadyin 64992 
     55#define MainUnit_stralreadyinlistmultiple 64993 
     56#define MainUnit_strsethotkey 64994 
     57#define MainUnit_strshowasdecimal 64995 
     58#define MainUnit_strshowashex 64996 
     59#define MainUnit_strFreezeAddressInList 64997 
     60#define MainUnit_strFreezeAllAddresses 64998 
     61#define MainUnit_strUnfreezeAllAddresses 64999 
     62#define MainUnit_strUnfreezeAddressInList 65000 
     63#define MainUnit_strDeleteAddress 65001 
     64#define MainUnit_strRecalculateAddress 65002 
     65#define MainUnit_strRecalculateSelectedAddresses 65003 
     66#define MainUnit_strRecalculateAllAddresses 65004 
     67#define MainUnit_strRemoveFromGroup 65005 
     68#define MainUnit_strEnableCheat 65006 
     69#define MainUnit_strDisableCheat 65007 
     70#define MainUnit_strAdd0 65008 
     71#define MainUnit_strNotAValidNotation 65009 
     72#define MainUnit_strNotSameAmmountofBytes 65010 
     73#define MainUnit_strNotAValidBinaryNotation 65011 
     74#define MainUnit_strValue 65012 
     75#define MainUnit_strChange1Value 65013 
     76#define MainUnit_strChangeMoreValues 65014 
     77#define MainUnit_strDelete1Address 65015 
     78#define MainUnit_strDeleteMultipleAddresses 65016 
     79#define MainUnit_strDelete1Group 65017 
     80#define MainUnit_strDeleteMoreGroups 65018 
     81#define MainUnit_strSelectedAddressIsAPointer 65019 
     82#define MainUnit_strMorePointers 65020 
     83#define MainUnit_strMorePointers2 65021 
     84#define MainUnit_strNotAValidValue 65022 
     85#define MainUnit_strdeleteall 65023 
     86#define MainUnit_strsearchForText 65024 
     87#define MainUnit_strSearchForArray 65025 
     88#define MainUnit_strConfirmProcessTermination 65026 
     89#define MainUnit_strError 65027 
     90#define MainUnit_strErrorwhileOpeningProcess 65028 
     91#define MainUnit_strKeepList 65029 
     92#define MainUnit_strInfoAboutTable 65030 
     93#define MainUnit_strPhysicalMemory 65031 
     94#define MainUnit_strfillInSomething 65032 
     95#define MainUnit_strFirstSelectAProcess 65033 
     96#define MainUnit_strCantdoNextScan 65034 
     97#define MainUnit_strClickToGoHome 65035 
     98#define MainUnit_strChangeDescription1 65036 
     99#define MainUnit_strChangeDescription2 65037 
     100#define MainUnit_strNotTheSameSize1 65038 
     101#define MainUnit_strNotTheSameSize2 65039 
     102#define SynEditStrConst_SYNS_EDuplicateShortcut 65040 
     103#define SynEditStrConst_SYNS_FilterPascal 65041 
     104#define SynEditStrConst_SYNS_FilterCPP 65042 
     105#define SynEditStrConst_SYNS_LangCPP 65043 
     106#define SynEditStrConst_SYNS_LangPascal 65044 
     107#define SynEditTextBuffer_SListIndexOutOfBounds 65045 
     108#define SynEditTextBuffer_SInvalidCapacity 65046 
     109#define MainUnit_strWindowFailedToHide 65047 
     110#define MainUnit_strAccessed 65048 
     111#define MainUnit_strOpcodeChanged 65049 
     112#define MainUnit_strAllowNegative 65050 
     113#define MainUnit_strAllowPositive 65051 
     114#define MainUnit_strNormalFreeze 65052 
     115#define MainUnit_strAskToSave 65053 
     116#define MainUnit_strScantextcaptiontotext 65054 
     117#define MainUnit_strScantextcaptiontoValue 65055 
     118#define SynEditStrConst_SYNS_AttrAssembler 65056 
     119#define SynEditStrConst_SYNS_AttrCharacter 65057 
     120#define SynEditStrConst_SYNS_AttrComment 65058 
     121#define SynEditStrConst_SYNS_AttrFloat 65059 
     122#define SynEditStrConst_SYNS_AttrHexadecimal 65060 
     123#define SynEditStrConst_SYNS_AttrIdentifier 65061 
     124#define SynEditStrConst_SYNS_AttrIllegalChar 65062 
     125#define SynEditStrConst_SYNS_AttrNumber 65063 
     126#define SynEditStrConst_SYNS_AttrOctal 65064 
     127#define SynEditStrConst_SYNS_AttrPreprocessor 65065 
     128#define SynEditStrConst_SYNS_AttrReservedWord 65066 
     129#define SynEditStrConst_SYNS_AttrSpace 65067 
     130#define SynEditStrConst_SYNS_AttrString 65068 
     131#define SynEditStrConst_SYNS_AttrSymbol 65069 
     132#define SynEditStrConst_SYNS_ScrollInfoFmt 65070 
     133#define SynEditStrConst_SYNS_ScrollInfoFmtTop 65071 
     134#define MainUnit2_strIncreasedValue 65072 
     135#define MainUnit2_strIncreasedValueBy 65073 
     136#define MainUnit2_strDecreasedValue 65074 
     137#define MainUnit2_strDecreasedValueBy 65075 
     138#define MainUnit2_strValueBetween 65076 
     139#define MainUnit2_strChangedValue 65077 
     140#define MainUnit2_strUnchangedValue 65078 
     141#define MainUnit2_strUnknownInitialValue 65079 
     142#define MainUnit2_strSameAsFirstScan 65080 
     143#define MainUnit2_strtoolong 65081 
     144#define OpenSave_strunknowncomponent 65082 
     145#define OpenSave_strCorruptIcon 65083 
     146#define OpenSave_strCantLoadFilepatcher 65084 
     147#define OpenSave_strNotACETrainer 65085 
     148#define OpenSave_strUnknownTrainerVersion 65086 
     149#define OpenSave_strCantLoadProtectedfile 65087 
    150150#define XMLConst_SMissingFileName 65088 
    151151#define XMLConst_SLine 65089 
    152 #define OpenSave_strunknowncomponent 65090 
    153 #define OpenSave_strCorruptIcon 65091 
    154 #define OpenSave_strCantLoadFilepatcher 65092 
    155 #define OpenSave_strNotACETrainer 65093 
    156 #define OpenSave_strUnknownTrainerVersion 65094 
    157 #define OpenSave_strCantLoadProtectedfile 65095 
    158 #define SynEditStrConst_SYNS_AttrAssembler 65096 
    159 #define SynEditStrConst_SYNS_AttrCharacter 65097 
    160 #define SynEditStrConst_SYNS_AttrComment 65098 
    161 #define SynEditStrConst_SYNS_AttrFloat 65099 
    162 #define SynEditStrConst_SYNS_AttrHexadecimal 65100 
    163 #define SynEditStrConst_SYNS_AttrIdentifier 65101 
    164 #define SynEditStrConst_SYNS_AttrIllegalChar 65102 
    165 #define SynEditStrConst_SYNS_AttrNumber 65103 
     152#define MainUnit2_strStart 65090 
     153#define MainUnit2_strStop 65091 
     154#define MainUnit2_strOK 65092 
     155#define MainUnit2_strBug 65093 
     156#define MainUnit2_strAutoAssemble 65094 
     157#define MainUnit2_strAddressHasToBeReadable 65095 
     158#define MainUnit2_strNewScan 65096 
     159#define MainUnit2_strFirstScan 65097 
     160#define MainUnit2_strNoDescription 65098 
     161#define MainUnit2_strNeedNewerWindowsVersion 65099 
     162#define MainUnit2_strexact 65100 
     163#define MainUnit2_strexactvalue 65101 
     164#define MainUnit2_strbiggerThan 65102 
     165#define MainUnit2_strSmallerThan 65103 
    166166#define XMLConst_SDuplicateRegistration 65104 
    167167#define XMLConst_SNoMatchingDOMVendor 65105 
     
    598598STRINGTABLE 
    599599BEGIN 
    600         MainUnit_strXMess,      "Merry christmas and happy new year" 
    601         MainUnit_strNewyear,    "And what are your good intentions for this year? ;-)" 
    602         MainUnit_strfuture,     "Wow,I never imagined people would use Cheat Engine up to today" 
    603         MainUnit_strdontbother, "Don't even bother. Cheat Engine uses the main thread to receive messages when the scan is done, freeze it and CE will crash!" 
    604         MainUnit_strneeddebugger,       "To use this option the debugger must be attached to the game" 
    605         MainUnit_strfailuretosetspeed,  "Failure to set the speed" 
     600        AdvancedOptionsUnit_strCode,    "Code :" 
     601        AdvancedOptionsUnit_strFindWhatCodeaccesses,    "Find out what addresses this code accesses" 
     602        AdvancedOptionsUnit_strFindWhatCodeReads,       "Find out what addresses this code reads from" 
     603        AdvancedOptionsUnit_strFindWhatCodeWrites,      "Find out what addresses this code writes to" 
     604        AdvancedOptionsUnit_strcouldntrestorecode,      "Error when trying to restore this code!" 
     605        AdvancedOptionsUnit_strnotthesame,      "The memory at this address isn't what it should be! Continue?" 
     606        AdvancedOptionsUnit_strcouldntwrite,    "The memory at this address couldn't be written" 
     607        AdvancedOptionsUnit_StrSelectExeFor3D,  "Select the executable of the Direct-3D game" 
     608        AdvancedOptionsUnit_StrSelectExeForOpenGL3D,    "Select the executable of the OpenGL game" 
     609        formsettingsunit_strProcessWatcherWillPreventUnloader,  "Enabling the process watcher will prevent the unloader from working" 
     610        FoundCodeUnit_strClose, "Close" 
    606611        MainUnit_strIncorrectspeed,     "The speed value is incorrect" 
    607612        MainUnit_strCantSetSpeed,       "I can't set this speed. (must be bigger than 0)" 
     
    609614        MainUnit_strUnknownExtension,   "Unknown extension" 
    610615        MainUnit_strCustomScanConfig,   "Custom scan config" 
    611         MainUnit_strRecalculateAddress, "Recalculate address" 
    612         MainUnit_strRecalculateSelectedAddresses,       "Recalculate selected addresses" 
    613         MainUnit_strRecalculateAllAddresses,    "Recalculate all addresses" 
    614         MainUnit_strRemoveFromGroup,    "Remove from group " 
    615         MainUnit_strEnableCheat,        "Enable cheat" 
    616         MainUnit_strDisableCheat,       "Disable cheat" 
     616        frmFindstaticsUnit_strScan,     "Scan" 
     617        frmFindstaticsUnit_strStop,     "Stop" 
     618        frmFindstaticsUnit_strStopping, "Stopping..." 
     619        frmLoadMemoryunit_strinvalidfile,       "This is a invalid memory region file. I'll assume this file has no header data" 
     620        AdvancedOptionsUnit_strnotreadable,     "This address is not readable" 
     621        AdvancedOptionsUnit_strNotWhatitshouldbe,       "The memory at this address is'nt what it should be! Continue?" 
     622        AdvancedOptionsUnit_stralreadyinthelist,        "This byte is already part of another opcode already present in the list" 
     623        AdvancedOptionsUnit_strPartOfOpcodeInTheList,   "At least one of these bytes is already in the list" 
     624        AdvancedOptionsUnit_strCECode,  "Cheat Engine code:" 
     625        AdvancedOptionsUnit_strNameCECode,      "What name do you want to give this code?" 
     626        AdvancedOptionsUnit_strChangeOf,        "Change of " 
    617627        MainUnit_strFindWhatWritesToPointer,    "Find out what writes to this pointer" 
    618628        MainUnit_strFindWhatWritesToPointer2,   "Find what reads from the address pointed at by this pointer" 
     
    625635        MainUnit_strUnhideAll,  "will bring all windows back" 
    626636        MainUnit_strhappybirthday,      "Let's sing Happy Birthday for Dark Byte today!" 
    627         MainUnit_strDeleteMoreGroups,   "Also delete the groups of the addresses you selected?" 
    628         MainUnit_strSelectedAddressIsAPointer,  "The selected address is a pointer. Are you sure? (the base pointer will get the address)" 
    629         MainUnit_strMorePointers,       "There are more pointers selected. Do you want to change them as well?" 
    630         MainUnit_strMorePointers2,      "You have selected one or more pointers. Do you want to change them as well?" 
    631         MainUnit_strNotAValidValue,     "This is not an valid value" 
    632         MainUnit_strdeleteall,  "Are you sure you want to delete all addresses?" 
     637        MainUnit_strXMess,      "Merry christmas and happy new year" 
     638        MainUnit_strNewyear,    "And what are your good intentions for this year? ;-)" 
     639        MainUnit_strfuture,     "Wow,I never imagined people would use Cheat Engine up to today" 
     640        MainUnit_strdontbother, "Don't even bother. Cheat Engine uses the main thread to receive messages when the scan is done, freeze it and CE will crash!" 
     641        MainUnit_strneeddebugger,       "To use this option the debugger must be attached to the game" 
     642        MainUnit_strfailuretosetspeed,  "Failure to set the speed" 
    633643        MainUnit_stralreadyin,  "This address is already in the list" 
    634644        MainUnit_stralreadyinlistmultiple,      "One or more addresses where already in the list" 
     
    641651        MainUnit_strUnfreezeAddressInList,      "Unfreeze the address in this list" 
    642652        MainUnit_strDeleteAddress,      "Delete this address" 
    643         MainUnit_strCantdoNextScan,     "You can't do a Next Scan with the current selected way of scanning!" 
    644         MainUnit_strClickToGoHome,      "Click here to go to the Cheat Engine homepage" 
    645         MainUnit_strChangeDescription1, "Description" 
    646         MainUnit_strChangeDescription2, "Change the description to:" 
    647         MainUnit_strNotTheSameSize1,    "The text you entered isn't the same size as the original. Continue?" 
    648         MainUnit_strNotTheSameSize2,    "Not the same size!" 
     653        MainUnit_strRecalculateAddress, "Recalculate address" 
     654        MainUnit_strRecalculateSelectedAddresses,       "Recalculate selected addresses" 
     655        MainUnit_strRecalculateAllAddresses,    "Recalculate all addresses" 
     656        MainUnit_strRemoveFromGroup,    "Remove from group " 
     657        MainUnit_strEnableCheat,        "Enable cheat" 
     658        MainUnit_strDisableCheat,       "Disable cheat" 
    649659        MainUnit_strAdd0,       "Do you want to add a '0'-terminator at the end?" 
    650660        MainUnit_strNotAValidNotation,  "This is not a valid notation" 
     
    657667        MainUnit_strDeleteMultipleAddresses,    "Delete these addresses?" 
    658668        MainUnit_strDelete1Group,       "Also delete the group this address is a member of?" 
    659         MainUnit_strAllowNegative,      "Allow negative changes" 
    660         MainUnit_strAllowPositive,      "Allow positive changes" 
    661         MainUnit_strNormalFreeze,       "Don't allow any change" 
    662         MainUnit_strAskToSave,  "You haven't saved your last changes yet. Save Now?" 
    663         MainUnit_strScantextcaptiontotext,      "Text:" 
    664         MainUnit_strScantextcaptiontoValue,     "Value:" 
     669        MainUnit_strDeleteMoreGroups,   "Also delete the groups of the addresses you selected?" 
     670        MainUnit_strSelectedAddressIsAPointer,  "The selected address is a pointer. Are you sure? (the base pointer will get the address)" 
     671        MainUnit_strMorePointers,       "There are more pointers selected. Do you want to change them as well?" 
     672        MainUnit_strMorePointers2,      "You have selected one or more pointers. Do you want to change them as well?" 
     673        MainUnit_strNotAValidValue,     "This is not an valid value" 
     674        MainUnit_strdeleteall,  "Are you sure you want to delete all addresses?" 
    665675        MainUnit_strsearchForText,      "Search for text" 
    666676        MainUnit_strSearchForArray,     "Search for this array" 
     
    673683        MainUnit_strfillInSomething,    "Please fill in something!" 
    674684        MainUnit_strFirstSelectAProcess,        "First select a process" 
    675         MainUnit2_strbiggerThan,        "Bigger than..." 
    676         MainUnit2_strSmallerThan,       "Smaller than..." 
     685        MainUnit_strCantdoNextScan,     "You can't do a Next Scan with the current selected way of scanning!" 
     686        MainUnit_strClickToGoHome,      "Click here to go to the Cheat Engine homepage" 
     687        MainUnit_strChangeDescription1, "Description" 
     688        MainUnit_strChangeDescription2, "Change the description to:" 
     689        MainUnit_strNotTheSameSize1,    "The text you entered isn't the same size as the original. Continue?" 
     690        MainUnit_strNotTheSameSize2,    "Not the same size!" 
     691        SynEditStrConst_SYNS_EDuplicateShortcut,        "Shortcut already exists" 
     692        SynEditStrConst_SYNS_FilterPascal,      "Pascal Files (*.pas;*.pp;*.dpr;*.dpk;*.inc)|*.pas;*.pp;*.dpr;*.dpk;*.inc" 
     693        SynEditStrConst_SYNS_FilterCPP, "C/C++ Files (*.c;*.cpp;*.h;*.hpp)|*.c;*.cpp;*.h;*.hpp" 
     694        SynEditStrConst_SYNS_LangCPP,   "C/C++" 
     695        SynEditStrConst_SYNS_LangPascal,        "Object Pascal" 
     696        SynEditTextBuffer_SListIndexOutOfBounds,        "Invalid stringlist index %d" 
     697        SynEditTextBuffer_SInvalidCapacity,     "Stringlist capacity cannot be smaller than count" 
     698        MainUnit_strWindowFailedToHide, "A window failed to hide" 
     699        MainUnit_strAccessed,   "The following opcodes accessed the selected address" 
     700        MainUnit_strOpcodeChanged,      "The following opcodes changed the selected address" 
     701        MainUnit_strAllowNegative,      "Allow negative changes" 
     702        MainUnit_strAllowPositive,      "Allow positive changes" 
     703        MainUnit_strNormalFreeze,       "Don't allow any change" 
     704        MainUnit_strAskToSave,  "You haven't saved your last changes yet. Save Now?" 
     705        MainUnit_strScantextcaptiontotext,      "Text:" 
     706        MainUnit_strScantextcaptiontoValue,     "Value:" 
     707        SynEditStrConst_SYNS_AttrAssembler,     "Assembler" 
     708        SynEditStrConst_SYNS_AttrCharacter,     "Character" 
     709        SynEditStrConst_SYNS_AttrComment,       "Comment" 
     710        SynEditStrConst_SYNS_AttrFloat, "Float" 
     711        SynEditStrConst_SYNS_AttrHexadecimal,   "Hexadecimal" 
     712        SynEditStrConst_SYNS_AttrIdentifier,    "Identifier" 
     713        SynEditStrConst_SYNS_AttrIllegalChar,   "Illegal Char" 
     714        SynEditStrConst_SYNS_AttrNumber,        "Number" 
     715        SynEditStrConst_SYNS_AttrOctal, "Octal" 
     716        SynEditStrConst_SYNS_AttrPreprocessor,  "Preprocessor" 
     717        SynEditStrConst_SYNS_AttrReservedWord,  "Reserved Word" 
     718        SynEditStrConst_SYNS_AttrSpace, "Space" 
     719        SynEditStrConst_SYNS_AttrString,        "String" 
     720        SynEditStrConst_SYNS_AttrSymbol,        "Symbol" 
     721        SynEditStrConst_SYNS_ScrollInfoFmt,     "%d - %d" 
     722        SynEditStrConst_SYNS_ScrollInfoFmtTop,  "Top Line: %d" 
    677723        MainUnit2_strIncreasedValue,    "Increased value" 
    678724        MainUnit2_strIncreasedValueBy,  "Increased value by ..." 
     
    685731        MainUnit2_strSameAsFirstScan,   "Same as first scan" 
    686732        MainUnit2_strtoolong,   "Too long" 
    687         FoundCodeUnit_strClose, "Close" 
    688         MainUnit_strWindowFailedToHide, "A window failed to hide" 
    689         MainUnit_strAccessed,   "The following opcodes accessed the selected address" 
    690         MainUnit_strOpcodeChanged,      "The following opcodes changed the selected address" 
    691         AdvancedOptionsUnit_strcouldntwrite,    "The memory at this address couldn't be written" 
    692         AdvancedOptionsUnit_StrSelectExeFor3D,  "Select the executable of the Direct-3D game" 
    693         AdvancedOptionsUnit_StrSelectExeForOpenGL3D,    "Select the executable of the OpenGL game" 
    694         formsettingsunit_strProcessWatcherWillPreventUnloader,  "Enabling the process watcher will prevent the unloader from working" 
     733        OpenSave_strunknowncomponent,   "There is a unknown component in the trainer! compnr=" 
     734        OpenSave_strCorruptIcon,        "The icon has been corrupted" 
     735        OpenSave_strCantLoadFilepatcher,        "The file patcher can't be loaded by Cheat Engine!" 
     736        OpenSave_strNotACETrainer,      "This is not a trainer made by Cheat Engine (If it is a trainer at all!)" 
     737        OpenSave_strUnknownTrainerVersion,      "This version of Cheat Engine doesn't know how to read this trainer! Trainerversion=" 
     738        OpenSave_strCantLoadProtectedfile,      "This trainer is protected from being opened by CE. Now go away!!!" 
     739        XMLConst_SMissingFileName,      "FileName cannot be blank" 
     740        XMLConst_SLine, "Line" 
    695741        MainUnit2_strStart,     "Start" 
    696742        MainUnit2_strStop,      "Stop" 
     
    705751        MainUnit2_strexact,     "Exact" 
    706752        MainUnit2_strexactvalue,        "Exact Value" 
    707         frmFindstaticsUnit_strStop,     "Stop" 
    708         frmFindstaticsUnit_strStopping, "Stopping..." 
    709         frmLoadMemoryunit_strinvalidfile,       "This is a invalid memory region file. I'll assume this file has no header data" 
    710         AdvancedOptionsUnit_strnotreadable,     "This address is not readable" 
    711         AdvancedOptionsUnit_strNotWhatitshouldbe,       "The memory at this address is'nt what it should be! Continue?" 
    712         AdvancedOptionsUnit_stralreadyinthelist,        "This byte is already part of another opcode already present in the list" 
    713         AdvancedOptionsUnit_strPartOfOpcodeInTheList,   "At least one of these bytes is already in the list" 
    714         AdvancedOptionsUnit_strCECode,  "Cheat Engine code:" 
    715         AdvancedOptionsUnit_strNameCECode,      "What name do you want to give this code?" 
    716         AdvancedOptionsUnit_strChangeOf,        "Change of " 
    717         AdvancedOptionsUnit_strCode,    "Code :" 
    718         AdvancedOptionsUnit_strFindWhatCodeaccesses,    "Find out what addresses this code accesses" 
    719         AdvancedOptionsUnit_strFindWhatCodeReads,       "Find out what addresses this code reads from" 
    720         AdvancedOptionsUnit_strFindWhatCodeWrites,      "Find out what addresses this code writes to" 
    721         AdvancedOptionsUnit_strcouldntrestorecode,      "Error when trying to restore this code!" 
    722         AdvancedOptionsUnit_strnotthesame,      "The memory at this address isn't what it should be! Continue?" 
    723         SynEditStrConst_SYNS_AttrOctal, "Octal" 
    724         SynEditStrConst_SYNS_AttrPreprocessor,  "Preprocessor" 
    725         SynEditStrConst_SYNS_AttrReservedWord,  "Reserved Word" 
    726         SynEditStrConst_SYNS_AttrSpace, "Space" 
    727         SynEditStrConst_SYNS_AttrString,        "String" 
    728         SynEditStrConst_SYNS_AttrSymbol,        "Symbol" 
    729         SynEditStrConst_SYNS_ScrollInfoFmt,     "%d - %d" 
    730         SynEditStrConst_SYNS_ScrollInfoFmtTop,  "Top Line: %d" 
    731         SynEditStrConst_SYNS_EDuplicateShortcut,        "Shortcut already exists" 
    732         SynEditStrConst_SYNS_FilterPascal,      "Pascal Files (*.pas;*.pp;*.dpr;*.dpk;*.inc)|*.pas;*.pp;*.dpr;*.dpk;*.inc" 
    733         SynEditStrConst_SYNS_FilterCPP, "C/C++ Files (*.c;*.cpp;*.h;*.hpp)|*.c;*.cpp;*.h;*.hpp" 
    734         SynEditStrConst_SYNS_LangCPP,   "C/C++" 
    735         SynEditStrConst_SYNS_LangPascal,        "Object Pascal" 
    736         SynEditTextBuffer_SListIndexOutOfBounds,        "Invalid stringlist index %d" 
    737         SynEditTextBuffer_SInvalidCapacity,     "Stringlist capacity cannot be smaller than count" 
    738         frmFindstaticsUnit_strScan,     "Scan" 
    739         XMLConst_SMissingFileName,      "FileName cannot be blank" 
    740         XMLConst_SLine, "Line" 
    741         OpenSave_strunknowncomponent,   "There is a unknown component in the trainer! compnr=" 
    742         OpenSave_strCorruptIcon,        "The icon has been corrupted" 
    743         OpenSave_strCantLoadFilepatcher,        "The file patcher can't be loaded by Cheat Engine!" 
    744         OpenSave_strNotACETrainer,      "This is not a trainer made by Cheat Engine (If it is a trainer at all!)" 
    745         OpenSave_strUnknownTrainerVersion,      "This version of Cheat Engine doesn't know how to read this trainer! Trainerversion=" 
    746         OpenSave_strCantLoadProtectedfile,      "This trainer is protected from being opened by CE. Now go away!!!" 
    747         SynEditStrConst_SYNS_AttrAssembler,     "Assembler" 
    748         SynEditStrConst_SYNS_AttrCharacter,     "Character" 
    749         SynEditStrConst_SYNS_AttrComment,       "Comment" 
    750         SynEditStrConst_SYNS_AttrFloat, "Float" 
    751         SynEditStrConst_SYNS_AttrHexadecimal,   "Hexadecimal" 
    752         SynEditStrConst_SYNS_AttrIdentifier,    "Identifier" 
    753         SynEditStrConst_SYNS_AttrIllegalChar,   "Illegal Char" 
    754         SynEditStrConst_SYNS_AttrNumber,        "Number" 
     753        MainUnit2_strbiggerThan,        "Bigger than..." 
     754        MainUnit2_strSmallerThan,       "Smaller than..." 
    755755        XMLConst_SDuplicateRegistration,        "\"%s\" DOMImplementation already registered" 
    756756        XMLConst_SNoMatchingDOMVendor,  "No matching DOM Vendor: \"%s\"" 
  • Cheat Engine/frmCScriptUnit.dfm

    r153 r311  
    88  Font.Charset = DEFAULT_CHARSET 
    99  Font.Color = clWindowText 
    10   Font.Height = -11 
     10  Font.Height = -14 
    1111  Font.Name = 'MS Sans Serif' 
    1212  Font.Style = [] 
     
    1616  OnClose = FormClose 
    1717  OnCreate = FormCreate 
    18   PixelsPerInch = 96 
    19   TextHeight = 13 
     18  PixelsPerInch = 120 
     19  TextHeight = 16 
    2020  object Panel1: TPanel 
    2121    Left = 0 
    22     Top = 311 
    23     Width = 504 
    24     Height = 24 
     22    Top = 290 
     23    Width = 494 
     24    Height = 29 
    2525    Align = alBottom 
    2626    BevelOuter = bvNone 
     
    3030      Left = 0 
    3131      Top = 0 
    32       Width = 497 
     32      Width = 612 
    3333      Height = 21 
    3434      TabOrder = 0 
     
    3939    Left = 0 
    4040    Top = 0 
    41     Width = 504 
    42     Height = 311 
     41    Width = 494 
     42    Height = 290 
    4343    Align = alClient 
    4444    ReadOnly = True 
  • Cheat Engine/frmautoinjectunit.dfm

    r281 r311  
    44  Width = 431 
    55  Height = 331 
    6   HelpContext = 18 
     6  HelpContext = 1089 
    77  Caption = 'Auto assemble' 
    88  Color = clBtnFace 
  • Cheat Engine/frmautoinjectunit.pas

    r281 r311  
    592592var a,b: integer; 
    593593    aa:TCEAllocArray; 
     594    registeredsymbols: TStringlist; 
    594595begin 
    595596{$ifndef standalonetrainerwithassembler} 
    596597  {$ifndef net} 
    597   setlength(aa,1); 
    598   getenableanddisablepos(assemblescreen.Lines,a,b); 
    599   if (a=-1) and (b=-1) then raise exception.create('The code needs a [ENABLE] and a [DISABLE] section if you want to add it to a table'); 
    600  
    601   if autoassemble(assemblescreen.lines,false,true,true,false,aa) and 
    602      autoassemble(assemblescreen.lines,false,false,true,false,aa) then 
    603   begin 
    604     //add a entry with type 255 
    605     mainform.AddAutoAssembleScript(assemblescreen.text); 
    606  
    607  
    608   end 
    609   else showmessage('Failed to add to table. Not all code is injectable'); 
     598  registeredsymbols:=tstringlist.Create; 
     599  registeredsymbols.CaseSensitive:=false; 
     600  registeredsymbols.Duplicates:=dupIgnore; 
     601   
     602  try 
     603    setlength(aa,0); 
     604    getenableanddisablepos(assemblescreen.Lines,a,b); 
     605    if (a=-1) and (b=-1) then raise exception.create('The code needs a [ENABLE] and a [DISABLE] section if you want to add it to a table'); 
     606 
     607    if autoassemble(assemblescreen.lines,false,true,true,false,aa,registeredsymbols) and 
     608       autoassemble(assemblescreen.lines,false,false,true,false,aa,registeredsymbols) then 
     609    begin 
     610      //add a entry with type 255 
     611      mainform.AddAutoAssembleScript(assemblescreen.text); 
     612 
     613 
     614    end 
     615    else showmessage('Failed to add to table. Not all code is injectable'); 
     616  finally 
     617    registeredsymbols.Free; 
     618  end; 
    610619  {$endif} 
    611620  {$endif} 
  • Cheat Engine/memscan.pas

    r306 r311  
    432432var bytes: tbytes; 
    433433begin 
    434   ConvertStringToBytes(st,false,bytes); 
     434  ConvertStringToBytes(st,true,bytes); 
    435435  result:=length(bytes); 
    436436end; 
  • Cheat Engine/plugin/cepluginsdk.h

    r309 r311  
    6868typedef struct _PLUGINTYPE4_INIT 
    6969{ 
    70   CEP_PLUGINTYPE4 callbackroutine; //pointer to a callback routine of the type 3 plugin 
     70  CEP_PLUGINTYPE4 callbackroutine; //pointer to a callback routine of the type 4 plugin 
    7171} PLUGINTYPE4_INIT, POINTERREASSIGNMENTPLUGIN_INIT, *PPLUGINTYPE4_INIT, *PPOINTERREASSIGNMENTPLUGIN_INIT;  
    7272 
     
    8686} PLUGINTYPE6_INIT, DISASSEMBLERCONTEXT_INIT, *PPLUGINTYPE6_INIT, *PDISASSEMBLERCONTEXT_INIT; 
    8787 
     88typedef struct _PLUGINTYPE7_INIT 
     89{ 
     90  CEP_PLUGINTYPE7 callbackroutine; //pointer to a callback routine of the type 7 plugin 
     91} PLUGINTYPE7_INIT, DISASSEMBLERLINEPLUGIN_INIT, *PPLUGINTYPE7_INIT, *PDISASSEMBLERLINEPLUGIN_INIT;  
     92 
     93typedef struct _PLUGINTYPE8_INIT 
     94{ 
     95  CEP_PLUGINTYPE8 callbackroutine; //pointer to a callback routine of the type 8 plugin 
     96} PLUGINTYPE8_INIT, AUTOASSEMBLERPLUGIN_INIT, *PPLUGINTYPE8_INIT, *PAUTOASSEMBLERPLUGIN_INIT;  
    8897 
    8998typedef struct _REGISTERMODIFICATIONINFO 
     
    148157typedef BOOL (__stdcall *CEP_LOADMODULE)(char *modulepath, char *exportlist, int *maxsize); 
    149158typedef BOOL (__stdcall *CEP_DISASSEMBLEEX)(ULONG address, char *output, int maxsize); 
    150 typedef VOID (__stdcall *CEP_AA_ADDCOMMAND)(void); 
    151 typedef VOID (__stdcall *CEP_AA_DELCOMMAND)(void); 
     159typedef VOID (__stdcall *CEP_AA_ADDCOMMAND)(char *command); 
     160typedef VOID (__stdcall *CEP_AA_DELCOMMAND)(char *command); 
    152161 
    153162typedef struct _ExportedFunctions 
  • Cheat Engine/pointerscannerfrm.pas

    r305 r311  
    12411241 
    12421242  listview1.Items.Count:=Pointerscanresults.count; 
     1243 
     1244  panel1.Caption:='pointercount:'+inttostr(Pointerscanresults.count); 
     1245 
    12431246  if (listview1.Items.Count=0) and (Pointerscanresults.count>100000000) then 
    12441247  begin 
  • Cheat Engine/underc.pas

    r153 r311  
    200200 
    201201 
    202  
    203 //  uc_init(nil,false); 
    204  
     202  //uc_init(pchar(' '),false); 
     203  Set8087CW($133f); 
    205204 
    206205 
     
    217216    exit; 
    218217 
    219  // uc_finis; 
    220 //  freelibrary(underclibrary); 
     218  uc_finis; 
     219 
    221220  currentthreadid:=0; 
    222221  scriptEngineCS.leave; 
    223222 
    224223  result:=true; 
     224 
     225  //Set8087CW($133f); 
    225226end; 
    226227 
    227228function TScriptEngine.execute_command(command: string): boolean; 
     229var x: pchar; 
    228230begin 
    229231  result:=false; 
     
    231233    exit; 
    232234 
    233   result:=uc_exec(pchar(command)); 
     235//  result:=uc_exec(pchar(command)); 
     236 
     237getmem(x,256); 
     238  uc_compile(x,pchar(command)); 
     239  freemem(x); 
    234240end; 
    235241