| 1 | UNIT Unit14;
|
|---|
| 2 | INTERFACE
|
|---|
| 3 | USES
|
|---|
| 4 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|---|
| 5 | Dialogs, StdCtrls, ExtCtrls, ComCtrls, StrUtils;
|
|---|
| 6 | TYPE
|
|---|
| 7 | TForm14 = Class(TForm)
|
|---|
| 8 | Label1: TLabel;
|
|---|
| 9 | Label2: TLabel;
|
|---|
| 10 | edit_char: TEdit;
|
|---|
| 11 | list: TListBox;
|
|---|
| 12 | updown: TUpDown;
|
|---|
| 13 | tim_lvlcheck: TTimer;
|
|---|
| 14 | PROCEDURE updownClick(Sender: TObject; Button: TUDBtnType);
|
|---|
| 15 | PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|---|
| 16 | PROCEDURE tim_lvlcheckTimer(Sender: TObject);
|
|---|
| 17 | PROCEDURE listClick(Sender: TObject);
|
|---|
| 18 | PRIVATE
|
|---|
| 19 | { Private declarations }
|
|---|
| 20 | PUBLIC
|
|---|
| 21 | { Public declarations }
|
|---|
| 22 | END;
|
|---|
| 23 |
|
|---|
| 24 | VAR
|
|---|
| 25 | Form14: TForm14;
|
|---|
| 26 |
|
|---|
| 27 | IMPLEMENTATION
|
|---|
| 28 | USES Unit1, Unit2, Unit8;
|
|---|
| 29 | {$R *.dfm}
|
|---|
| 30 | VAR lvl_shown:Byte;
|
|---|
| 31 | modelcount:Byte;
|
|---|
| 32 |
|
|---|
| 33 | FUNCTION patch_loader_loaded:Boolean;
|
|---|
| 34 | CONST check_for:LongWord=$0010656EE9;
|
|---|
| 35 | address_at:LongWord=$4228ED;
|
|---|
| 36 | BEGIN
|
|---|
| 37 | IF Decode_Int(ReadMem(address_at,4))=check_for THEN result:=True
|
|---|
| 38 | ELSE result:=False;
|
|---|
| 39 | END;
|
|---|
| 40 |
|
|---|
| 41 | PROCEDURE TForm14.listClick(Sender: TObject);
|
|---|
| 42 | VAR model:LongWord;
|
|---|
| 43 | struct1:LongWord;
|
|---|
| 44 | BEGIN
|
|---|
| 45 | IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN
|
|---|
| 46 | model:=Decode_Int(ReadMem($10F20+Form14.list.ItemIndex*4,4));
|
|---|
| 47 | struct1:=Decode_Int(ReadMem(PointerStruct1PointerArray1,4));
|
|---|
| 48 | struct1:=Decode_Int(ReadMem(struct1+4*StrToInt(Form14.edit_char.Text),4));
|
|---|
| 49 | WriteMem(struct1+$00C,4,Encode_Int(model));
|
|---|
| 50 | END ELSE BEGIN
|
|---|
| 51 | IF _connected AND (lvlnumber>0) THEN BEGIN
|
|---|
| 52 | MessageBox(Form14.Handle,PChar('Oni.exe is not patched.'),PChar('Error'),MB_OK);
|
|---|
| 53 | END;
|
|---|
| 54 | END;
|
|---|
| 55 | END;
|
|---|
| 56 |
|
|---|
| 57 | PROCEDURE TForm14.tim_lvlcheckTimer(Sender: TObject);
|
|---|
| 58 | VAR i:Byte;
|
|---|
| 59 | BEGIN
|
|---|
| 60 | IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN
|
|---|
| 61 | IF lvl_shown<>lvlnumber THEN BEGIN
|
|---|
| 62 | list.Items.Clear;
|
|---|
| 63 | modelcount:=Decode_Int(ReadMem($10F05,1));
|
|---|
| 64 | FOR i:=0 TO modelcount-1 DO BEGIN
|
|---|
| 65 | list.Items.Add('Model'+IntToStr(i+1)+' ('+IntToHex(Decode_Int(ReadMem($10F20+i*4,4)),8)+')');
|
|---|
| 66 | END;
|
|---|
| 67 | lvl_shown:=lvlnumber;
|
|---|
| 68 | END;
|
|---|
| 69 | END ELSE BEGIN
|
|---|
| 70 | list.Items.Clear;
|
|---|
| 71 | lvl_shown:=0;
|
|---|
| 72 | END;
|
|---|
| 73 | END;
|
|---|
| 74 |
|
|---|
| 75 | PROCEDURE TForm14.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|---|
| 76 | BEGIN
|
|---|
| 77 | Self.Visible:=False;
|
|---|
| 78 | CanClose:=False;
|
|---|
| 79 | Form1.menu_Models.Checked:=False;
|
|---|
| 80 | END;
|
|---|
| 81 |
|
|---|
| 82 | PROCEDURE TForm14.updownClick(Sender: TObject; Button: TUDBtnType);
|
|---|
| 83 | BEGIN
|
|---|
| 84 | Form14.edit_char.Text:=IntToStr(updown.Position);
|
|---|
| 85 | END;
|
|---|
| 86 |
|
|---|
| 87 | END.
|
|---|