UNIT Unit14; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, StrUtils; TYPE TForm14 = Class(TForm) Label1: TLabel; Label2: TLabel; edit_char: TEdit; list: TListBox; updown: TUpDown; tim_lvlcheck: TTimer; PROCEDURE updownClick(Sender: TObject; Button: TUDBtnType); PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean); PROCEDURE tim_lvlcheckTimer(Sender: TObject); PROCEDURE listClick(Sender: TObject); PRIVATE { Private declarations } PUBLIC { Public declarations } END; VAR Form14: TForm14; IMPLEMENTATION USES Unit1, Unit2, Unit8; {$R *.dfm} VAR lvl_shown:Byte; modelcount:Byte; FUNCTION patch_loader_loaded:Boolean; CONST check_for:LongWord=$0010656EE9; address_at:LongWord=$4228ED; BEGIN IF Decode_Int(ReadMem(address_at,4))=check_for THEN result:=True ELSE result:=False; END; PROCEDURE TForm14.listClick(Sender: TObject); VAR model:LongWord; struct1:LongWord; BEGIN IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN model:=Decode_Int(ReadMem($10F20+Form14.list.ItemIndex*4,4)); struct1:=Decode_Int(ReadMem(PointerStruct1PointerArray1,4)); struct1:=Decode_Int(ReadMem(struct1+4*StrToInt(Form14.edit_char.Text),4)); WriteMem(struct1+$00C,4,Encode_Int(model)); END ELSE BEGIN IF _connected AND (lvlnumber>0) THEN BEGIN MessageBox(Form14.Handle,PChar('Oni.exe is not patched.'),PChar('Error'),MB_OK); END; END; END; PROCEDURE TForm14.tim_lvlcheckTimer(Sender: TObject); VAR i:Byte; BEGIN IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN IF lvl_shown<>lvlnumber THEN BEGIN list.Items.Clear; modelcount:=Decode_Int(ReadMem($10F05,1)); FOR i:=0 TO modelcount-1 DO BEGIN list.Items.Add('Model'+IntToStr(i+1)+' ('+IntToHex(Decode_Int(ReadMem($10F20+i*4,4)),8)+')'); END; lvl_shown:=lvlnumber; END; END ELSE BEGIN list.Items.Clear; lvl_shown:=0; END; END; PROCEDURE TForm14.FormCloseQuery(Sender: TObject; var CanClose: Boolean); BEGIN Self.Visible:=False; CanClose:=False; Form1.menu_Models.Checked:=False; END; PROCEDURE TForm14.updownClick(Sender: TObject; Button: TUDBtnType); BEGIN Form14.edit_char.Text:=IntToStr(updown.Position); END; END.