- Moved wrongly placed BMD in Green Area 1

- Renamed Judge Tree areas, as now it's clear what the names should really be
- Renamed Undernet Zero map
- Renamed project executable name
- Added a splitter to make UI adjstable
- Added translation support (see "po" folder to add more)
- Added Russian Translation
- Added more rooms from the Green Town postion of the game
This commit is contained in:
4aiman 2024-04-03 14:29:00 +03:00
commit 56ede08dbf
14 changed files with 666 additions and 235 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before After
Before After

View file

@ -14,11 +14,16 @@
</XPManifest>
<Icon Value="0"/>
</General>
<i18n>
<EnableI18N Value="True"/>
<OutDir Value="po"/>
</i18n>
<VersionInfo>
<UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/>
<MinorVersionNr Value="2"/>
<BuildNr Value="18"/>
<RevisionNr Value="1"/>
<BuildNr Value="19"/>
<Attributes pvaPrivateBuild="True"/>
<StringTable CompanyName="4aiman" FileDescription="Megaman Battle Network 5 and 6 minimap app" InternalName="mmbn56mm" LegalCopyright="4aiman" OriginalFilename="mmbn56mm" ProductName="MMBN56MM" ProductVersion="2"/>
</VersionInfo>

View file

@ -9,7 +9,7 @@
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="mmbn5mm"/>
<Filename Value="mmbn56mm"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
@ -47,8 +47,8 @@
<Filename Value="mmbn5m.lpr"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="2"/>
<CursorPos X="25" Y="5"/>
<UsageCount Value="57"/>
<CursorPos X="49" Y="20"/>
<UsageCount Value="65"/>
<Loaded Value="True"/>
</Unit>
<Unit>
@ -58,10 +58,9 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
<IsVisibleTab Value="True"/>
<TopLine Value="325"/>
<CursorPos X="25" Y="346"/>
<UsageCount Value="57"/>
<TopLine Value="364"/>
<CursorPos X="52" Y="411"/>
<UsageCount Value="65"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit>
@ -70,21 +69,22 @@
<EditorIndex Value="-1"/>
<TopLine Value="128"/>
<CursorPos Y="152"/>
<UsageCount Value="21"/>
<UsageCount Value="20"/>
</Unit>
<Unit>
<Filename Value="C:\lazarus\fpc\3.2.2\source\rtl\objpas\sysutils\syshelph.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="147"/>
<CursorPos X="16" Y="161"/>
<UsageCount Value="11"/>
<UsageCount Value="10"/>
</Unit>
<Unit>
<Filename Value="rooms.ini"/>
<EditorIndex Value="1"/>
<TopLine Value="40"/>
<CursorPos X="121" Y="53"/>
<UsageCount Value="16"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="4"/>
<TopLine Value="274"/>
<CursorPos X="12" Y="298"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Ini"/>
</Unit>
@ -92,128 +92,148 @@
<Filename Value="mmbn5m.lpi"/>
<EditorIndex Value="-1"/>
<CursorPos Y="46"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
<DefaultSyntaxHighlighter Value="XML"/>
</Unit>
<Unit>
<Filename Value="C:\lazarus\lcl\lcltranslator.pas"/>
<UnitName Value="LCLTranslator"/>
<EditorIndex Value="1"/>
<TopLine Value="95"/>
<CursorPos Y="95"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit>
<Unit>
<Filename Value="C:\lazarus\components\lazutils\translations.pas"/>
<UnitName Value="Translations"/>
<EditorIndex Value="3"/>
<TopLine Value="738"/>
<CursorPos X="54" Y="775"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit>
</Units>
<JumpHistory HistoryIndex="29">
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="31" Column="11"/>
<Caret Line="9" Column="34" TopLine="9"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="32" Column="11"/>
<Caret Line="432" Column="49" TopLine="387"/>
</Position>
<Position>
<Filename Value="mmbn5m.lpr"/>
<Caret Line="21" Column="21"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="40" Column="21"/>
<Caret Line="435" Column="35" TopLine="408"/>
</Position>
<Position>
<Filename Value="mmbn5m.lpr"/>
<Caret Line="13" Column="16"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="168" Column="27" TopLine="128"/>
<Caret Line="428" Column="73" TopLine="409"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="170" Column="13" TopLine="130"/>
<Caret Line="435" Column="50" TopLine="388"/>
</Position>
<Position>
<Filename Value="C:\lazarus\components\lazutils\translations.pas"/>
<Caret Line="762" Column="128" TopLine="738"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="171" Column="13" TopLine="131"/>
<Caret Line="435" Column="44" TopLine="406"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="176" Column="11" TopLine="136"/>
<Caret Line="437" Column="54" TopLine="406"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="282" Column="49" TopLine="282"/>
<Caret Line="26" Column="92"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="272" Column="72" TopLine="235"/>
<Caret Line="414" Column="53" TopLine="390"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="312" Column="88" TopLine="283"/>
<Caret Line="412" Column="27" TopLine="387"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="121" Column="7" TopLine="102"/>
<Caret Line="211" Column="5" TopLine="165"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="291" Column="84" TopLine="272"/>
<Caret Line="409" Column="19" TopLine="399"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="286" Column="14" TopLine="262"/>
<Caret Line="175" Column="24" TopLine="151"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="287" Column="47" TopLine="264"/>
<Caret Line="9" Column="73"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="289" Column="45" TopLine="265"/>
<Caret Line="188" Column="20" TopLine="173"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="291" Column="69" TopLine="268"/>
<Caret Line="189" Column="25" TopLine="171"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="300" Column="37" TopLine="275"/>
<Caret Line="208" Column="3" TopLine="186"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="268" Column="98" TopLine="235"/>
<Caret Line="453" Column="5" TopLine="408"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="344" Column="52" TopLine="315"/>
<Caret Line="209" Column="46" TopLine="197"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="383" Column="89" TopLine="351"/>
<Caret Line="224" Column="58" TopLine="192"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="281" Column="68" TopLine="259"/>
<Caret Line="210" Column="59" TopLine="210"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="358" Column="89" TopLine="333"/>
<Caret Line="195" Column="6" TopLine="171"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="136" Column="109" TopLine="108"/>
<Caret Line="214" Column="66" TopLine="190"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="398" Column="5" TopLine="351"/>
<Caret Line="415" Column="13" TopLine="375"/>
</Position>
<Position>
<Filename Value="rooms.ini"/>
<Caret Line="51" Column="40" TopLine="25"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="396" Column="5" TopLine="350"/>
<Caret Line="201" Column="82" TopLine="174"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="355" Column="14" TopLine="308"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="371" Column="57" TopLine="350"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
</Position>
<Position>
<Filename Value="unit1.pas"/>
<Caret Line="360" Column="141" TopLine="352"/>
<Caret Line="265" Column="25" TopLine="241"/>
</Position>
</JumpHistory>
<RunParams>

Binary file not shown.

111
po/mmbn56mm.en.po Normal file
View file

@ -0,0 +1,111 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: tform1.caption
msgid "MMBN5-6M"
msgstr "MMBN5-6M"
#: tform1.edit_room_button.caption
msgid "Edit Room"
msgstr "Edit Room"
#: tform1.gamebox.text
msgid "MMBN 5"
msgstr "MMBN 5"
#: tform1.label1.caption
msgid "Game:"
msgstr "Game:"
#: tform1.langbox.text
msgid "en"
msgstr ""
#: tform1.map_stretch_checkbox.caption
msgid "Stretch"
msgstr "Stretch"
#: tform1.minus_spoil1.caption
msgid "-"
msgstr "-"
#: tform1.plus_spoil.caption
msgid "+"
msgstr "+"
#: tform1.room_name_label.caption
msgctxt "tform1.room_name_label.caption"
msgid "Run the game, then press \"Start\""
msgstr "Run the game, then press \"Start\""
#: tform1.spoils_label.caption
msgid "Spoils:"
msgstr "Spoils:"
#: tform1.start_stop_button.caption
msgctxt "tform1.start_stop_button.caption"
msgid "Start"
msgstr "Start"
#: unit1.adding_item
msgid "Adding item to Room #"
msgstr "Adding item to Room #"
#: unit1.app_caption
msgid "MMBN5-6M: Reading from process ID"
msgstr "MMBN5-6M: Reading from process ID"
#: unit1.editing_item
msgid "Editing item in Room #"
msgstr "Editing item in Room #"
#: unit1.editing_room
msgid "Editing Room #"
msgstr "Editing Room #"
#: unit1.enter_item_name
msgid "Enter item's name"
msgstr "Enter item's name"
#: unit1.enter_room_name
msgid "Enter this Room's name"
msgstr "Enter this Room's name"
#: unit1.error_game_memory_not_read
msgid "Error. Game's memory not read."
msgstr "Error. Game's memory not read."
#: unit1.error_game_not_running
msgid "Error. Make sure the game's running."
msgstr "Error. Make sure the game's running."
#: unit1.error_hotkey_registration_failed
msgid "HotKey registration failed. You won't be able to press Win+Y to temporarily view map in full screen."
msgstr "HotKey registration failed. You won't be able to press Win+Y to temporarily view map in full screen."
#: unit1.error_unable_to_read_game_memory
msgid "Error. Can't read game's memory."
msgstr "Error. Can't read game's memory."
#: unit1.room_number
msgid "Room #"
msgstr "Room #"
#: unit1.run_the_game_notice
msgctxt "unit1.run_the_game_notice"
msgid "Run the game, then press \"Start\""
msgstr "Run the game, then press \"Start\""
#: unit1.start_button_stop
msgid "Stop"
msgstr "Stop"
#: unit1.start_button_strat
msgctxt "unit1.start_button_strat"
msgid "Start"
msgstr "Start"
#: unit1.unknown_room
msgid "Unknown"
msgstr "Unknown"

107
po/mmbn56mm.ru.po Normal file
View file

@ -0,0 +1,107 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: tform1.caption
msgid "MMBN5-6M"
msgstr ""
#: tform1.edit_room_button.caption
msgid "Edit Room"
msgstr "Дать Комнате Имя"
#: tform1.gamebox.text
msgid "MMBN 5"
msgstr ""
#: tform1.label1.caption
msgid "Game:"
msgstr "Игра:"
#: tform1.map_stretch_checkbox.caption
msgid "Stretch"
msgstr "Растянуть карту"
#: tform1.minus_spoil1.caption
msgid "-"
msgstr "Удалить"
#: tform1.plus_spoil.caption
msgid "+"
msgstr "Добавить"
#: tform1.room_name_label.caption
msgctxt "tform1.room_name_label.caption"
msgid "Run the game, then press \"Start\""
msgstr "Запусти игру, нажми \"Запуск\""
#: tform1.spoils_label.caption
msgid "Spoils:"
msgstr "Находки:"
#: tform1.start_stop_button.caption
msgctxt "tform1.start_stop_button.caption"
msgid "Start"
msgstr "Запуск"
#: unit1.adding_item
msgid "Adding item to Room #"
msgstr "Новая находка в Комнате №"
#: unit1.app_caption
msgid "MMBN5-6M: Reading from process ID"
msgstr "MMBN5-6M: Чтение процесса с идентификатором"
#: unit1.editing_item
msgid "Editing item in Room #"
msgstr "Редактирование находки в Комнате №"
#: unit1.editing_room
msgid "Editing Room #"
msgstr "Переименование Комнаты №"
#: unit1.enter_item_name
msgid "Enter item's name"
msgstr "Введи название находки"
#: unit1.enter_room_name
msgid "Enter this Room's name"
msgstr "Введи название Комнаты"
#: unit1.error_game_memory_not_read
msgid "Error. Game's memory not read."
msgstr "Ошибка. Память приложения не прочитана."
#: unit1.error_game_not_running
msgid "Error. Make sure the game's running."
msgstr "Ошибка. Игра точно запущена?"
#: unit1.error_hotkey_registration_failed
msgid "HotKey registration failed. You won't be able to press Win+Y to temporarily view map in full screen."
msgstr "Регистрация горячих клавиш не удалась. Нажимать Win+Y для переключения в полноэкранный режим не выйдет."
#: unit1.error_unable_to_read_game_memory
msgid "Error. Can't read game's memory."
msgstr "Ошибка. Чтение памяти приложения невозможно."
#: unit1.room_number
msgid "Room #"
msgstr "Комната №"
#: unit1.run_the_game_notice
msgctxt "unit1.run_the_game_notice"
msgid "Run the game, then press \"Start\""
msgstr "Запусти игру, нажми \"Запуск\""
#: unit1.start_button_stop
msgid "Stop"
msgstr "Остановка"
#: unit1.start_button_strat
msgctxt "unit1.start_button_strat"
msgid "Start"
msgstr "Запуск"
#: unit1.unknown_room
msgid "Unknown"
msgstr "Неизвестно где..."

View file

@ -237,6 +237,23 @@ MMBN 6=2147425942
2533274790526976=Research Lab 1
281474985885696=Lab's Comp 1
1125899906908160=AsterLand
1688849869504512=Popcorn Shop Comp
1125899907039232=Control Room (Aquarium)
2533274799570944=Security Camera Comp (Class 6-1)
262144=Green Town
1125899916083200=Symbol Comp (Green Town)
1407374892466176=Green Home Page (TRUTH Tablet)
9568256=Green Area 1
2814749776281600=Book Comp
281474976972800=Court Foyer
281474986278912=Green Area 2
281474986475520=Undernet Zero
562949953683456=Courtroom (Green Town)
844424930394112=The Punishment Room
562949962661888=Punishment Chair Comp
8519680=Judge Tree Area 1
281474985230336=Judge Tree Area 2
562949961940992=Judge Tree Area 3
[Spoils MMBN 6]
562949962596352=700z,Thunder *
@ -246,11 +263,11 @@ MMBN 6=2147425942
844424939307008={PMD},Reg UP2
1125899916017664=Full Energy
8388608=Water Data,Spreader1 M,HP Memory
281474985099264=Reg UP2,Rocovery 30 *
281474985099264=Reg UP2,Rocovery 30 *,ImgData [story]
562949962858496=Hi Cannon L,Elec Sword {PMD}
1688849869438976=Unlocker
3659174706479104=Dubl Shot *,1000z
281474986213376=Panel Return *,Vulcan 2D
281474986213376=Panel Return *,Vulcan 2D,Attack +1 [Tengu]
844424939044864=Tornado L {PMD},Geddon A [Pnl Return],HP Memory
562949962924032=Wide Blade B {PMD},Reg Up 2,HP Memory {S},Bamboo Sword W {S},Recov 80 K {S},Barr 100 H {S},Time Bomb 1 {S}
844424939372544=Barr 100 H
@ -261,5 +278,21 @@ MMBN 6=2147425942
562949961875456=HP + 50,Hi Cannon M
281474985885696=FireHit1 F,Fan *
9502720=Sub Memory [Aqua],HP Memory Aquaman has no use for it ;p
1125899906908160=
1125899906908160=Full Energy [c]
1407374883684352=QuizBook
1688849869504512=HP memory
2533274799570944=HP Memory [story],Expo Folder [story],Jungle,3000z
1125899916083200=Reg UP 2,2400z
1407374892466176=BlkBomb F {PMD},HP Memory
2814749776281600=Yoyo *,Sub Memory
9568256=Lance W {PMD},Spreader2 C
281474986278912=Speed +1,Auth Data
281474986475520=Reg UP 2 [Tengu]
281474976972800=87341489
562949962661888=Guardion O {PMD},Full Energy
8519680=ComingRd *,StepSword L
281474985230336=YoYo N,HP Memory
562949961940992=Reg UP 3,Expansion Memory
[Settings]
Language=ru

376
unit1.lfm
View file

@ -1,11 +1,12 @@
object Form1: TForm1
Left = 1066
Height = 448
Top = 323
Width = 606
Left = 1705
Height = 478
Top = 548
Width = 792
Anchors = [akTop]
Caption = 'MMBN5-6M'
ClientHeight = 448
ClientWidth = 606
ClientHeight = 478
ClientWidth = 792
Font.CharSet = ANSI_CHARSET
Font.Height = -16
Font.Name = 'Liberation Mono'
@ -16,14 +17,13 @@ object Form1: TForm1
Position = poScreenCenter
LCLVersion = '2.2.6.0'
object room_name_label: TLabel
AnchorSideLeft.Control = start_stop_button
AnchorSideLeft.Control = Splitter2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Owner
Left = 192
Left = 231
Height = 18
Top = 8
Width = 320
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Run the game, then press "Start"'
Color = clGradientInactiveCaption
@ -31,18 +31,20 @@ object Form1: TForm1
Transparent = False
end
object map_image: TImage
AnchorSideLeft.Control = room_name_label
AnchorSideLeft.Control = Splitter2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = room_name_label
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 192
Height = 406
Left = 232
Height = 436
Top = 34
Width = 406
Width = 552
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 1
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
@ -51,153 +53,231 @@ object Form1: TForm1
Proportional = True
Stretch = True
end
object start_stop_button: TSpeedButton
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = gamebox
AnchorSideTop.Side = asrBottom
Left = 8
Height = 30
Top = 40
Width = 176
AllowAllUp = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Start'
GroupIndex = 1
Transparent = False
OnClick = start_stop_buttonClick
object Splitter1: TSplitter
Left = 787
Height = 478
Top = 0
Width = 5
Align = alRight
ResizeAnchor = akRight
end
object edit_room_button: TButton
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = start_stop_button
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = map_image
Left = 8
Height = 30
Top = 78
Width = 176
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Edit Room'
OnClick = edit_room_buttonClick
TabOrder = 0
end
object spoils_listbox: TListBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = spoils_label
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = map_image
AnchorSideBottom.Control = plus_spoil
Left = 8
Height = 250
Top = 142
Width = 176
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
BorderStyle = bsNone
Color = clGradientInactiveCaption
ItemHeight = 0
OnDblClick = spoils_listboxDblClick
object Panel1: TPanel
Left = 0
Height = 478
Top = 0
Width = 227
Align = alLeft
BevelOuter = bvNone
ClientHeight = 478
ClientWidth = 227
TabOrder = 1
object plus_spoil: TButton
AnchorSideLeft.Control = Panel1
AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom
Left = 8
Height = 40
Top = 430
Width = 104
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Bottom = 8
Caption = '+'
OnClick = plus_spoilClick
TabOrder = 0
end
object minus_spoil1: TButton
AnchorSideLeft.Control = plus_spoil
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = plus_spoil
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom
Left = 120
Height = 40
Top = 430
Width = 103
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8
Caption = '-'
OnClick = minus_spoil1Click
TabOrder = 1
end
object map_stretch_checkbox: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = spoils_listbox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = plus_spoil
Left = 8
Height = 22
Top = 400
Width = 215
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8
Caption = 'Stretch'
OnChange = map_stretch_checkboxChange
TabOrder = 2
end
object spoils_listbox: TListBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = spoils_label
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = plus_spoil
Left = 8
Height = 250
Top = 142
Width = 215
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8
BorderStyle = bsNone
Color = clGradientInactiveCaption
ItemHeight = 0
OnDblClick = spoils_listboxDblClick
TabOrder = 3
end
object spoils_label: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = edit_room_button
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
Left = 8
Height = 18
Top = 116
Width = 215
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
Caption = 'Spoils:'
ParentColor = False
end
object edit_room_button: TButton
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = start_stop_button
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
Left = 8
Height = 30
Top = 78
Width = 215
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
Caption = 'Edit Room'
OnClick = edit_room_buttonClick
TabOrder = 4
end
object start_stop_button: TSpeedButton
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = gamebox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
Left = 8
Height = 30
Top = 40
Width = 215
AllowAllUp = True
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
Caption = 'Start'
GroupIndex = 1
Transparent = False
OnClick = start_stop_buttonClick
end
object gamebox: TComboBox
AnchorSideLeft.Control = Label1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = start_stop_button
Left = 66
Height = 24
Top = 8
Width = 157
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8
ItemHeight = 18
ItemIndex = 0
Items.Strings = (
'MMBN 5'
'MMBN 6'
)
OnSelect = gameboxSelect
ReadOnly = True
Style = csOwnerDrawFixed
TabOrder = 5
Text = 'MMBN 5'
end
object Label1: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
AnchorSideBottom.Control = gamebox
AnchorSideBottom.Side = asrBottom
Left = 8
Height = 18
Top = 11
Width = 50
BorderSpacing.Left = 8
BorderSpacing.Top = 11
Caption = 'Game:'
ParentColor = False
end
end
object spoils_label: TLabel
object Splitter2: TSplitter
Left = 227
Height = 478
Top = 0
Width = 4
OnMoved = Splitter2Moved
ResizeStyle = rsLine
end
object langbox: TComboBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = edit_room_button
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = map_image
Left = 8
Height = 18
Top = 116
Width = 176
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Spoils:'
ParentColor = False
end
object plus_spoil: TButton
AnchorSideLeft.Control = Owner
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 8
Height = 40
Top = 400
Width = 56
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Bottom = 8
Caption = '+'
OnClick = plus_spoilClick
TabOrder = 2
end
object minus_spoil1: TButton
AnchorSideLeft.Control = plus_spoil
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = map_image
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 72
Height = 40
Top = 400
Width = 112
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = '-'
OnClick = minus_spoil1Click
TabOrder = 3
end
object map_stretch_checkbox: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = spoils_listbox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = map_image
AnchorSideBottom.Control = plus_spoil
Left = 8
Height = 22
Top = 370
Width = 176
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Stretch'
OnChange = map_stretch_checkboxChange
TabOrder = 4
end
object gamebox: TComboBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = start_stop_button
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = start_stop_button
Left = 8
Height = 24
Top = 8
Width = 176
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Left = 734
Height = 26
Top = 1
Width = 50
Anchors = [akTop, akRight]
BorderSpacing.Top = 1
BorderSpacing.Right = 8
ItemHeight = 18
ItemIndex = 0
Items.Strings = (
'MMBN 5'
'MMBN 6'
'en'
'ru'
)
OnSelect = gameboxSelect
OnSelect = langboxSelect
ReadOnly = True
Style = csOwnerDrawFixed
TabOrder = 5
Text = 'MMBN 5'
Style = csDropDownList
TabOrder = 3
Text = 'en'
end
object Timer1: TTimer
Enabled = False

13
unit1.lrj Normal file
View file

@ -0,0 +1,13 @@
{"version":1,"strings":[
{"hash":24216973,"name":"tform1.caption","sourcebytes":[77,77,66,78,53,45,54,77],"value":"MMBN5-6M"},
{"hash":223940658,"name":"tform1.room_name_label.caption","sourcebytes":[82,117,110,32,116,104,101,32,103,97,109,101,44,32,116,104,101,110,32,112,114,101,115,115,32,34,83,116,97,114,116,34],"value":"Run the game, then press \"Start\""},
{"hash":43,"name":"tform1.plus_spoil.caption","sourcebytes":[43],"value":"+"},
{"hash":45,"name":"tform1.minus_spoil1.caption","sourcebytes":[45],"value":"-"},
{"hash":179882696,"name":"tform1.map_stretch_checkbox.caption","sourcebytes":[83,116,114,101,116,99,104],"value":"Stretch"},
{"hash":175506234,"name":"tform1.spoils_label.caption","sourcebytes":[83,112,111,105,108,115,58],"value":"Spoils:"},
{"hash":6676461,"name":"tform1.edit_room_button.caption","sourcebytes":[69,100,105,116,32,82,111,111,109],"value":"Edit Room"},
{"hash":5941396,"name":"tform1.start_stop_button.caption","sourcebytes":[83,116,97,114,116],"value":"Start"},
{"hash":86077493,"name":"tform1.gamebox.text","sourcebytes":[77,77,66,78,32,53],"value":"MMBN 5"},
{"hash":5079946,"name":"tform1.label1.caption","sourcebytes":[71,97,109,101,58],"value":"Game:"},
{"hash":1726,"name":"tform1.langbox.text","sourcebytes":[101,110],"value":"en"}
]}

120
unit1.pas
View file

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Buttons, Grids, IniFiles, Windows;
Buttons, Grids, IniFiles, Windows, DefaultTranslator, LCLTranslator, FileUtil;
type
TWMHotKey = packed record
@ -22,25 +22,32 @@ type
{ TForm1 }
TForm1 = class ( TForm )
gamebox :TComboBox;
map_stretch_checkbox :TCheckBox;
plus_spoil :TButton;
langbox :TComboBox;
edit_room_button :TButton;
gamebox :TComboBox;
Label1 :TLabel;
map_stretch_checkbox :TCheckBox;
minus_spoil1 :TButton;
spoils_label :TLabel;
spoils_listbox :TListBox;
Panel1 :TPanel;
plus_spoil :TButton;
Splitter1 :TSplitter;
map_image :TImage;
room_name_label :TLabel;
Splitter2 :TSplitter;
spoils_label :TLabel;
spoils_listbox :TListBox;
start_stop_button :TSpeedButton;
Timer1 :TTimer;
procedure edit_room_buttonClick ( Sender :TObject );
procedure FormClose ( Sender :TObject; var CloseAction :TCloseAction );
procedure FormCreate ( Sender :TObject );
procedure gameboxSelect ( Sender :TObject );
procedure langboxSelect ( Sender :TObject );
procedure map_imagePaint ( Sender :TObject );
procedure map_stretch_checkboxChange ( Sender :TObject );
procedure minus_spoil1Click ( Sender :TObject );
procedure plus_spoilClick ( Sender :TObject );
procedure Splitter2Moved ( Sender :TObject );
procedure spoils_listboxDblClick ( Sender :TObject );
procedure start_stop_buttonClick ( Sender :TObject );
procedure Timer1Timer ( Sender :TObject );
@ -53,6 +60,25 @@ PROTECTED
end;
resourcestring
ADDING_ITEM = 'Adding item to Room #';
ENTER_ITEM_NAME = 'Enter item''s name';
EDITING_ITEM = 'Editing item in Room #';
EDITING_ROOM = 'Editing Room #';
ENTER_ROOM_NAME = 'Enter this Room''s name';
START_BUTTON_STRAT = 'Start';
START_BUTTON_STOP = 'Stop';
APP_CAPTION = 'MMBN5-6M: Reading from process ID';
ROOM_NUMBER = 'Room #';
RUN_THE_GAME_NOTICE = 'Run the game, then press "Start"';
ERROR_GAME_NOT_RUNNING = 'Error. Make sure the game''s running.';
ERROR_GAME_MEMORY_NOT_READ = 'Error. Game''s memory not read.';
ERROR_UNABLE_TO_READ_GAME_MEMORY = 'Error. Can''t read game''s memory.';
ERROR_HOTKEY_REGISTRATION_FAILED = 'HotKey registration failed. You won''t be able to press Win+Y to temporarily view map in full screen.';
UNKNOWN_ROOM = 'Unknown';
var
Form1 :TForm1;
@ -76,8 +102,7 @@ begin
while INTEGER ( ContinueLoop ) <> 0 do
begin
if ( ( UpperCase ( ExtractFileName ( FProcessEntry32.szExeFile ) ) = UpperCase ( ExeFileName ) )
OR( UpperCase ( FProcessEntry32.szExeFile ) = UpperCase ( ExeFileName ) ) ) then begin
if ( ( UpperCase ( ExtractFileName ( FProcessEntry32.szExeFile ) ) = UpperCase ( ExeFileName ) ) OR( UpperCase ( FProcessEntry32.szExeFile ) = UpperCase ( ExeFileName ) ) ) then begin
Result := FProcessEntry32.th32ProcessID;
Break;
end;
@ -118,8 +143,8 @@ var
hProcess :THandle;
ROOMS :TIniFile; // contains room labels
process_list :TStrings;
room :QWORD = -1; // contains current room 16-bit value
last_room :QWORD = -1;
room :QWORD = 18446744073709551615; // contains current room 16-bit value
last_room :QWORD = 18446744073709551615;
room_name :STRING;
new_room :bool;
spoils_list :STRING;
@ -138,12 +163,17 @@ is_cyberworld :BOOLEAN = False;
var
x, y, w, h :INTEGER;
state :TWindowState;
languages :TStrings;
current_language :STRING;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate ( Sender :TObject );
var
i :INTEGER;
begin
current_game_pointer := mmbn5_pointer;
// open ini file and create a list to hold processes
@ -151,7 +181,18 @@ begin
process_list := TStringList.Create ( );
spoils_listbox.Height := 0;
if NOT RegisterHotKey ( Handle, 111000, MOD_WIN, VK_Y ) then
ShowMessage ( 'HotKey registration failed. You won''t be able to press Win+Y to temporarily view map in full screen.' );
ShowMessage ( ERROR_HOTKEY_REGISTRATION_FAILED );
// translations
languages := TStringList.Create ( );
current_language := ROOMS.ReadString ( 'Settings', 'Language', 'en' );
FindAllFiles ( languages, 'po', '*.po', False );
for i := 0 to languages.Count -1 do begin
languages[i] := languages [i].Replace ( 'po\mmbn56mm.', '' ).Replace ( '.po', '' );
end;
langbox.Items := languages;
langbox.ItemIndex := langbox.Items.IndexOf ( current_language );
SetDefaultLang ( current_language, 'po' );
end;
@ -167,6 +208,14 @@ begin
end;
procedure TForm1.langboxSelect ( Sender :TObject );
begin
current_language := langbox.Items [langbox.ItemIndex];
SetDefaultLang ( current_language, 'po' );
ROOMS.WriteString ( 'Settings', 'Language', current_language );
end;
procedure TForm1.map_imagePaint ( Sender :TObject );
begin
//map_image.Canvas.Brush.Style := bsClear;
@ -182,7 +231,7 @@ end;
procedure TForm1.minus_spoil1Click ( Sender :TObject );
var
Txt :STRING;
Txt :STRING = '';
i :INTEGER;
begin
if ( spoils_listbox.ItemIndex > -1 ) then begin
@ -205,11 +254,11 @@ end;
procedure TForm1.plus_spoilClick ( Sender :TObject );
var
new_spoil_name :STRING;
Txt :STRING;
new_spoil_name :STRING = '';
Txt :STRING = '';
i :INTEGER;
begin
if InputQuery ( 'Adding item to Room #' + IntToStr ( room ), 'Enter item''s name', new_spoil_name ) then begin
if InputQuery ( ADDING_ITEM + IntToStr ( room ), ENTER_ITEM_NAME, new_spoil_name ) then begin
spoils_listbox.Items.Add ( new_spoil_name );
for i := 0 to spoils_listbox.Items.Count - 1 do begin
if i < spoils_listbox.Items.Count - 1 then
@ -227,16 +276,22 @@ begin
end;
procedure TForm1.Splitter2Moved ( Sender :TObject );
begin
plus_spoil.Width := Round ( Panel1.Width/2 ) -12;
end;
procedure TForm1.spoils_listboxDblClick ( Sender :TObject );
var
new_spoil_name :STRING;
var
Txt :STRING;
Txt :STRING = '';
i :INTEGER;
begin
if ( spoils_listbox.ItemIndex > -1 ) then begin
new_spoil_name := spoils_listbox.Items [spoils_listbox.ItemIndex];
if InputQuery ( 'Editing item in Room #' + IntToStr ( room ), 'Enter item''s name', new_spoil_name ) then begin
if InputQuery ( EDITING_ITEM + IntToStr ( room ), ENTER_ITEM_NAME, new_spoil_name ) then begin
spoils_listbox.Items[spoils_listbox.ItemIndex] := new_spoil_name;
for i := 0 to spoils_listbox.Items.Count - 1 do begin
if i < spoils_listbox.Items.Count - 1 then
@ -262,22 +317,22 @@ var
begin
if start_stop_button.Down = False then begin
start_stop_button.Caption := 'Start';
start_stop_button.Caption := START_BUTTON_STRAT;
Timer1.Enabled := False;
CloseHandle ( hProcess );
room_name_label.Caption := 'Run the game, then press "Start"';
room_name_label.Caption := RUN_THE_GAME_NOTICE;
end else begin
start_stop_button.Caption := 'Stop';
start_stop_button.Caption := START_BUTTON_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 := 'MMBN5-6M: Reading from process ID ' + IntToStr ( ProcID );
Caption := APP_CAPTION + ' ' + IntToStr ( ProcID );
Timer1.Enabled := True;
break;
end else begin
room_name_label.Caption := 'Error. Run the game.';
room_name_label.Caption := ERROR_GAME_NOT_RUNNING;
end;
end;
end;
@ -307,8 +362,8 @@ begin
room_name_label.Caption := room_name;
end else begin
room := SMALLINT ( room ); // - 844424930459648;
room_name := ROOMS.ReadString ( 'Rooms ' + current_game, IntToStr ( room ), 'Unknown' );
room_name_label.Caption := 'Room #' + IntToStr ( room ) + ': ' + room_name;
room_name := ROOMS.ReadString ( 'Rooms ' + current_game, IntToStr ( room ), UNKNOWN_ROOM );
room_name_label.Caption := ROOM_NUMBER + IntToStr ( room ) + ': ' + room_name;
end;
spoils_list := ROOMS.ReadString ( 'Spoils ' + current_game, IntToStr ( room ), '' );
@ -325,11 +380,11 @@ begin
end;
end;
end else begin
room_name_label.Caption := 'Error. Make sure the game is running.';
room_name_label.Caption := ERROR_GAME_MEMORY_NOT_READ;
end;
except
on edit_room_button :Exception do
room_name_label.Caption := 'Error. Can''t read game''s memory.';
room_name_label.Caption := ERROR_UNABLE_TO_READ_GAME_MEMORY;
end;
end;
@ -338,12 +393,12 @@ end;
procedure TForm1.edit_room_buttonClick ( Sender :TObject );
var
new_room_name :STRING;
new_room_name :STRING = '';
begin
new_room_name := room_name;
if InputQuery ( 'Editing Room # ' + IntToStr ( room ), 'Enter this Room''s name', new_room_name ) then begin
if InputQuery ( EDITING_ROOM + ' ' + IntToStr ( room ), ENTER_ROOM_NAME, new_room_name ) then begin
ROOMS.WriteString ( 'Rooms ' + current_game, IntToStr ( room ), new_room_name );
last_room := -1;
last_room := 18446744073709551615;
end;
end;
@ -358,6 +413,7 @@ begin
// free additionally created objects
ROOMS.Free;
process_list.Free;
languages.Free;
UnregisterHotKey ( Handle, 111000 );
end;
@ -397,4 +453,10 @@ begin
end;
initialization
SetDefaultLang ( 'en', 'po' );
end.