Added Rooms from SciLab and ACDC Town. Ini file is now read only if the room value differs from the previously read one

This commit is contained in:
4aiman 2024-01-11 22:48:10 +03:00
commit bb812a84bb
9 changed files with 102 additions and 69 deletions

View file

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Before After
Before After

View file

@ -5,7 +5,7 @@
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
<Title Value="mmbn5m"/>
<Title Value="mmbn5mm"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>

View file

@ -17,6 +17,7 @@ uses
begin
RequireDerivedFormResource:=True;
Application.Title:='mmbn5mm';
Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);

View file

@ -59,8 +59,8 @@
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
<IsVisibleTab Value="True"/>
<TopLine Value="144"/>
<CursorPos X="41" Y="175"/>
<TopLine Value="158"/>
<CursorPos X="66" Y="178"/>
<UsageCount Value="29"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>

Binary file not shown.

View file

@ -27,5 +27,19 @@
768=Mayl's Room
1024=Dex's Room
1280=Yai's Room
594=Nebula 6
136=Lan's Home Page
140=Doghouse Comp
392=Mayl's Home Page
648=Dex's Home Page
904=Yai's Home Page
1421=Sculpture Comp
257=SciLab Front
513=SciLab Lobby
1677=Terminal Comp
1=Dad's Lab
1165=Dad's Comp
128=Main Comp 1
384=Main Comp 2
769=Op Room
652=Kitchen Comp

View file

@ -20,7 +20,14 @@ object Form1: TForm1
Top = 8
Width = 157
Caption = 'Room #0: Lan''s Room '
Color = clGradientInactiveCaption
Font.CharSet = ANSI_CHARSET
Font.Height = -16
Font.Pitch = fpFixed
Font.Quality = fqCleartype
ParentColor = False
ParentFont = False
Transparent = False
end
object map_image: TImage
Left = 120

143
unit1.pas
View file

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Buttons, IniFiles ;
Buttons, IniFiles;
type
@ -38,8 +38,6 @@ implementation
uses Windows, JwaTlHelp32;
function FindProcessID(const ExeFileName: string): DWORD;
var
ContinueLoop: BOOL;
@ -52,10 +50,11 @@ begin
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or
(UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := FProcessEntry32.th32ProcessID;
Break;
@ -68,11 +67,13 @@ end;
function ReadMemory(hProcess: THandle; Address: Pointer; var Buffer; Size: DWORD): Boolean;
function ReadMemory(hProcess: THandle; Address: Pointer; var Buffer;
Size: DWORD): boolean;
var
NumberOfBytesRead: SIZE_T;
begin
Result := ReadProcessMemory(hProcess, Address, @Buffer, Size, NumberOfBytesRead) and (NumberOfBytesRead = Size);
Result := ReadProcessMemory(hProcess, Address, @Buffer, Size, NumberOfBytesRead) and
(NumberOfBytesRead = Size);
end;
procedure ListRunningProcesses(ProcList: TStrings);
@ -85,7 +86,7 @@ begin
pProc.dwSize := SizeOf(pProc);
pSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
pBool := Process32First(pSnap, pProc);
while Integer(pBool) <> 0 do
while integer(pBool) <> 0 do
begin
ProcList.Add(pProc.szExeFile);
pBool := Process32Next(pSnap, pProc);
@ -96,10 +97,11 @@ end;
var
hProcess: THandle;
ROOMS : TIniFile; // contains room labels
process_list : TStrings;
room: SmallInt = -1; // contains current room 16-bit value
hProcess: THandle;
ROOMS: TIniFile; // contains room labels
process_list: TStrings;
room: smallint = -1; // contains current room 16-bit value
last_room: smallint = -1;
{$R *.lfm}
@ -107,51 +109,58 @@ room: SmallInt = -1; // contains current room 16-bit value
procedure TForm1.FormCreate(Sender: TObject);
begin
// open ini file and create a list to hold processes
ROOMS := TIniFile.Create('rooms.ini');
process_list := TStringList.Create();
// open ini file and create a list to hold processes
ROOMS := TIniFile.Create('rooms.ini');
process_list := TStringList.Create();
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// close the process on exit if it's been opened
if start_stop_button.Down = true then begin
Timer1.Enabled:=false;
CloseHandle(hProcess);
end;
// free additionally created objects
ROOMS.Free;
process_list.Free;
// close the process on exit if it's been opened
if start_stop_button.Down = True then
begin
Timer1.Enabled := False;
CloseHandle(hProcess);
end;
// free additionally created objects
ROOMS.Free;
process_list.Free;
end;
procedure TForm1.map_imagePaint(Sender: TObject);
begin
map_image.Canvas.Brush.Style:=bsClear;
map_image.Canvas.Rectangle(0,0,400,400);
map_image.Canvas.Brush.Style := bsClear;
map_image.Canvas.Rectangle(0, 0, 400, 400);
end;
procedure TForm1.start_stop_buttonClick(Sender: TObject);
var i:integer;
ProcID: DWORD;
var
i: integer;
ProcID: DWORD;
begin
if start_stop_button.Down = false then begin
start_stop_button.Caption:='Start';
Timer1.Enabled:=false;
CloseHandle(hProcess);
end else begin
start_stop_button.Caption:='Stop';
ListRunningProcesses(process_list);
for i:=0 to process_list.Count-1 do begin
if (process_list[i] = 'MMBN_LC2.exe') then begin
ProcID := FindProcessID(process_list[i]);
hProcess := OpenProcess(PROCESS_VM_READ, False, ProcID);
Caption:= 'MMBN5M: Reading from process ID '+ IntToStr(ProcID);
Timer1.Enabled:=true;
break;
end;
end;
end;
if start_stop_button.Down = False then
begin
start_stop_button.Caption := 'Start';
Timer1.Enabled := False;
CloseHandle(hProcess);
end
else
begin
start_stop_button.Caption := 'Stop';
ListRunningProcesses(process_list);
for i := 0 to process_list.Count - 1 do
begin
if (process_list[i] = 'MMBN_LC2.exe') then
begin
ProcID := FindProcessID(process_list[i]);
hProcess := OpenProcess(PROCESS_VM_READ, False, ProcID);
Caption := 'MMBN5M: Reading from process ID ' + IntToStr(ProcID);
Timer1.Enabled := True;
break;
end;
end;
end;
end;
@ -165,40 +174,42 @@ begin
try
if ReadMemory(hProcess, Pointer($80205FF4), room, SizeOf(room)) then
begin
room_name := ROOMS.ReadString('Rooms', inttostr(room), 'Unknown');
room_name_label.Caption := 'Room #'+ inttostr(room)+ ': '+ room_name;
if FileExists('images/'+room_name+'.png') then begin
map_image.Picture.LoadFromFile('images/'+room_name+'.png');
end else begin
map_image.Picture.Clear;
if last_room <> room then
begin
last_room := room;
room_name := ROOMS.ReadString('Rooms', IntToStr(room), 'Unknown');
room_name_label.Caption := 'Room #' + IntToStr(room) + ': ' + room_name;
if FileExists('images/' + room_name + '.png') then
begin
map_image.Picture.LoadFromFile('images/' + room_name + '.png');
end
else
begin
map_image.Picture.Clear;
end;
end;
end
else
begin
room_name_label.Caption := 'error';
room_name_label.Caption := 'error';
end;
except
on edit_room_button: Exception do
room_name_label.Caption:='error';
room_name_label.Caption := 'error';
end;
end;
end;
procedure TForm1.edit_room_buttonClick(Sender: TObject);
var new_room_name:string;
begin//
if InputQuery('Editing Room # '+inttostr(room), 'Enter this Room''s name', new_room_name) then begin
ROOMS.WriteString('Rooms', inttostr(room), new_room_name);
end;
var
new_room_name: string;
begin
if InputQuery('Editing Room # ' + IntToStr(room), 'Enter this Room''s name',
new_room_name) then
begin
ROOMS.WriteString('Rooms', IntToStr(room), new_room_name);
end;
end;
end.