Compare commits

..

8 commits

Author SHA1 Message Date
331d4fc1de Update README.md 2025-11-26 19:02:58 +00:00
9371876ca2 Fixed images folder link in the readme 2025-11-26 18:57:54 +00:00
9c42c6b89d Added rooms up to the final battle. Final Release 2024-04-23 23:54:11 +03:00
6ecf321f5c More rooms (up to Undergroung) 2024-04-17 00:38:03 +03:00
56ede08dbf - 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
2024-04-03 14:29:00 +03:00
c5a7c1ee9d Added Aqua Comps + some BMD data 2024-03-27 00:01:12 +03:00
01dbca36a6
Updated readme
added mmbn 6 references
2024-03-13 11:40:16 +03:00
75b4423e8f Added rooms up to Auditorium. Fixed Room not being loaded w/o re-entering the room 2024-03-13 00:09:36 +03:00
26 changed files with 791 additions and 236 deletions

View file

@ -1,8 +1,8 @@
# Megaman Battle Network 5 Mini Map App # Megaman Battle Network 5 and 6 Mini Map App
This app is a Windows only tool that reads MMBN Legacy Collection 2's memory and grabs current map ID from that. This app is a Windows only tool that reads MMBN Legacy Collection 2's memory and grabs current map ID from that.
Then it displays an image of the current room if that's present in the [images](/images/) folder. Then it displays an image of the current room if that's present in the [images](images/) folder.
The images were taken from [Dr. Cossack's Lab](https://www.interordi.com/mega_man_pc/games/mmbn5/) without anyone's consent. The images were taken from [Dr. Cossack's Lab](https://www.interordi.com/mega_man_pc/games/mmbn5/) without anyone's consent.
@ -10,7 +10,7 @@ The images were taken from [Dr. Cossack's Lab](https://www.interordi.com/mega_ma
# How to use # How to use
- Open the legacy collection 2 - Open the legacy collection 2
- Load up MMBN 5 (tested with Team Protoman) - Load up MMBN 5 (tested with Team Protoman) or MMBN6 (tested with Cyberbeast Falzar)
- Open this app - Open this app
- Use `Start`/`Stop` button to enable/disable memory reading. - Use `Start`/`Stop` button to enable/disable memory reading.
- If you encounter an `Unknown` Room - press `Edit` it and give it a name. - If you encounter an `Unknown` Room - press `Edit` it and give it a name.
@ -48,4 +48,4 @@ Assets are *not* included. Because...
> >
> Dumping something from a game sure requires an investment of time - just as crating this app and writing this readme does. But neither of those acts magically makes any of us the owner of the assets in question. At best it's a derivative work akin fan art. > Dumping something from a game sure requires an investment of time - just as crating this app and writing this readme does. But neither of those acts magically makes any of us the owner of the assets in question. At best it's a derivative work akin fan art.
> >
> If there's anyone to ask, that would be Capcom themselves. And we all know what they think (see [III. IMPERMISSIBLE USES](https://www.capcomusa.com/video-policy/)). Be happy Capcom doesn't enforce its rights and allows us to to what we do > If there's anyone to ask, that would be Capcom themselves. And we all know what they think (see [III. IMPERMISSIBLE USES](https://www.capcomusa.com/video-policy/)). Be happy Capcom doesn't enforce its rights and allows us to do what we do

View file

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Before After
Before After

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: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 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> </XPManifest>
<Icon Value="0"/> <Icon Value="0"/>
</General> </General>
<i18n>
<EnableI18N Value="True"/>
<OutDir Value="po"/>
</i18n>
<VersionInfo> <VersionInfo>
<UseVersionInfo Value="True"/> <UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/> <AutoIncrementBuild Value="True"/>
<MinorVersionNr Value="2"/> <MinorVersionNr Value="2"/>
<BuildNr Value="18"/> <RevisionNr Value="1"/>
<BuildNr Value="19"/>
<Attributes pvaPrivateBuild="True"/> <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"/> <StringTable CompanyName="4aiman" FileDescription="Megaman Battle Network 5 and 6 minimap app" InternalName="mmbn56mm" LegalCopyright="4aiman" OriginalFilename="mmbn56mm" ProductName="MMBN56MM" ProductVersion="2"/>
</VersionInfo> </VersionInfo>

View file

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

158
rooms.ini
View file

@ -208,6 +208,162 @@ MMBN 6=2147425942
1407374883684352=Cyber Academy 2F Hallway 1407374883684352=Cyber Academy 2F Hallway
131072=Cyber Academy Class 6-1 131072=Cyber Academy Class 6-1
562949962596352=Class 6-1 Comp 562949962596352=Class 6-1 Comp
18446744073709486080=Title
0=ACDC Town
281474976841728=Class 6-2
844424939307008=Class 6-2 Comp
1125899916017664=Class 1-1 Comp
562949953552384=Class 1-1
844424930263040=Class 1-2
8388608=Robo Control Area 1
281474985099264=Robo Control Area 2
562949962858496=Central Area 3
2251799813816320=Mayor Cain's Office
1688849869438976=Bathroom Comp (Lan's Toilet)
9502720=Seaside Area 1
3659174706479104=Stuffed Toy Shop Comp
281474986213376=Seaside Area 2
844424939044864=Aquarium Home Page
562949962924032=Seaside Area 3
196608=Seaside Town
844424939372544=Water Machine Comp
2251799822860288=Fish Sticks Shop Comp
281474976907264=Aquarium 1
844424930328576=Auditorium (Aquarium Arena)
562949953617920=Aquarium 2
8454144=Aquarium Comp 1
281474985164800=Aquarium Comp 2
562949961875456=Aquarium Comp 3
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
327680=Admin
1970324846149632=Elevator Comp
281474977038336=Sky Town
3096224752992256=Fan Comp
3659174706413568=Heater Comp
3940649683124224=Shower Comp
3377699729702912=Air Conditioner Comp
2814749776347136=Oxygen Tank Comp
2533274799636480=Observation Comp
562949953748992=OpRoom (Sky City)
4222124659834880=Heliport Comp
281474986409984=Sky Area 2
9699328=Sky Area 1
844424930459648=Force Room
1688849869176832=Sky Home Page
9764864=Undernet Area 1
9240576=Lab's Comp 2
8585216=Mr. Weather Comp 1
281474985295872=Mr. Weather Comp 2
562949962006528=Mr. Weather Comp 3
281474977103872=WWW OP
562949963186176=Undernet Area 2
281474985951232=Vending Machine Comp
2814749767237632=Research Lab 2
3940649683189760=Dog House Comp
281474985623552=ACDC Home Page
562949963120640=ACDC Area
9633792=Underground Area 1
281474986344448=Underground Area 2
3377699729768448=Mascot Comp
8716288=Pavillion Comp 1
562949953814528=Seaside Hall
844424930525184=Green Hall
281474985426944=Pavillion Comp 2
1125899907235840=Sky Hall
562949962137600=Pavillion Comp 3
844424938848256=Pavillion Comp 4
1125899915558912=Copy Bot Comp
281474976710656=ACDC Class 6-1 ?
[Spoils MMBN 6] [Spoils MMBN 6]
562949962596352=700z 562949962596352=700z,Thunder *
9175040=600z
9437184=MiniEnergy,5000z [WWWID]
281474986147840=Reg UP2,Copy Damage,Sub memory [Btl]
844424939307008={PMD},Reg UP2
1125899916017664=Full Energy
8388608=Water Data,Spreader1 M,HP Memory
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,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
2251799822860288=White Capsule *,Unlocker
844424930328576=Reg UP1
8454144=Life Sync *,HP Memory
281474985164800=Reg UP1,FstBarr
562949961875456=HP + 50,Hi Cannon M
281474985885696=FireHit1 F,Fan *
9502720=Sub Memory [Aqua],HP Memory Aquaman has no use for it ;p
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,HP Memory,Holy Panel A (WWWID)
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
1970324846149632=Speed +1
3096224752992256=1600z,OilBody
3659174706413568=1000z,Charge +1
3940649683124224=Rush Food,Reg UP1,1 BugFrags
3377699729702912=ColorPt *,Reg UP 1
562949953748992=HP Memory
2814749776347136=3 BugFrags,BugFix P {PMD}
2533274799636480=Reg UP2,3000z
4222124659834880=HP +50,Unlocker
281474986409984=Reg UP3,M-Cannon S,10000z {YMD},Vacuum Data
9699328=Fish,Spin Blue {PMD},HP+100
1688849869176832=Hp Link,Vulcan3 A,AutoHeal
9764864=Reg UP 1
9240576=Expansion Memory,StepSword B {PMD}
8585216=Reg UP 1,Spreader3 S
281474985295872=Shield,HP Memory
562949962006528=Spin Pink,Recov120 F
562949963186176=Recov150 M,AntiDmg {PMD}
281474985951232=Battery,1200z
65536=HP Memory {story}
3940649683189760=3 Bug Frags,GoingRd *
0=HP Memory
281474985623552=Ice Seed *,VarSwrd W {PMD}
562949963120640=Atk+30 * {PMD},ACDCKyDt (story),Spin White (Rush),HP +300 (WWWID)
9633792=Air Shoes {PMD}
2251799813816320=Reg UP 1
3377699729768448=Reg UP 1,M-Cannon *
562949953814528=Reg UP 2
8716288=Recov200 Z,Spreader3 *
281474985426944=Reg UP 2,GunDelS2 E
562949962137600=HP Memory,Attack+1
844424938848256=6000z,Long Blade B
[Settings]
Language=ru

378
unit1.lfm
View file

@ -1,11 +1,12 @@
object Form1: TForm1 object Form1: TForm1
Left = 1066 Left = 821
Height = 448 Height = 478
Top = 323 Top = 472
Width = 606 Width = 792
Anchors = [akTop]
Caption = 'MMBN5-6M' Caption = 'MMBN5-6M'
ClientHeight = 448 ClientHeight = 478
ClientWidth = 606 ClientWidth = 792
Font.CharSet = ANSI_CHARSET Font.CharSet = ANSI_CHARSET
Font.Height = -16 Font.Height = -16
Font.Name = 'Liberation Mono' Font.Name = 'Liberation Mono'
@ -14,16 +15,15 @@ object Form1: TForm1
OnClose = FormClose OnClose = FormClose
OnCreate = FormCreate OnCreate = FormCreate
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '2.2.6.0' LCLVersion = '3.2.0.0'
object room_name_label: TLabel object room_name_label: TLabel
AnchorSideLeft.Control = start_stop_button AnchorSideLeft.Control = Splitter2
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Owner AnchorSideTop.Control = Owner
Left = 192 Left = 231
Height = 18 Height = 18
Top = 8 Top = 8
Width = 320 Width = 320
BorderSpacing.Left = 8
BorderSpacing.Top = 8 BorderSpacing.Top = 8
Caption = 'Run the game, then press "Start"' Caption = 'Run the game, then press "Start"'
Color = clGradientInactiveCaption Color = clGradientInactiveCaption
@ -31,18 +31,20 @@ object Form1: TForm1
Transparent = False Transparent = False
end end
object map_image: TImage object map_image: TImage
AnchorSideLeft.Control = room_name_label AnchorSideLeft.Control = Splitter2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = room_name_label AnchorSideTop.Control = room_name_label
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 192 Left = 232
Height = 406 Height = 436
Top = 34 Top = 34
Width = 406 Width = 552
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 1
BorderSpacing.Top = 8 BorderSpacing.Top = 8
BorderSpacing.Right = 8 BorderSpacing.Right = 8
BorderSpacing.Bottom = 8 BorderSpacing.Bottom = 8
@ -51,153 +53,231 @@ object Form1: TForm1
Proportional = True Proportional = True
Stretch = True Stretch = True
end end
object start_stop_button: TSpeedButton object Splitter1: TSplitter
AnchorSideLeft.Control = Owner Left = 787
AnchorSideTop.Control = gamebox Height = 478
AnchorSideTop.Side = asrBottom Top = 0
Left = 8 Width = 5
Height = 30 Align = alRight
Top = 40 ResizeAnchor = akRight
Width = 176
AllowAllUp = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Start'
GroupIndex = 1
Transparent = False
OnClick = start_stop_buttonClick
end end
object edit_room_button: TButton object Panel1: TPanel
AnchorSideLeft.Control = Owner Left = 0
AnchorSideTop.Control = start_stop_button Height = 478
AnchorSideTop.Side = asrBottom Top = 0
AnchorSideRight.Control = map_image Width = 227
Left = 8 Align = alLeft
Height = 30 BevelOuter = bvNone
Top = 78 ClientHeight = 478
Width = 176 ClientWidth = 227
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
TabOrder = 1 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 = '+'
TabOrder = 0
OnClick = plus_spoilClick
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 = '-'
TabOrder = 1
OnClick = minus_spoil1Click
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'
TabOrder = 2
OnChange = map_stretch_checkboxChange
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
TabOrder = 3
OnDblClick = spoils_listboxDblClick
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'
TabOrder = 4
OnClick = edit_room_buttonClick
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'
)
ReadOnly = True
Style = csOwnerDrawFixed
TabOrder = 5
Text = 'MMBN 5'
OnSelect = gameboxSelect
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 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 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 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 AnchorSideTop.Control = Owner
AnchorSideRight.Control = start_stop_button AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = start_stop_button Left = 734
Left = 8 Height = 26
Height = 24 Top = 1
Top = 8 Width = 50
Width = 176 Anchors = [akTop, akRight]
Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 1
BorderSpacing.Left = 8 BorderSpacing.Right = 8
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
ItemHeight = 18 ItemHeight = 18
ItemIndex = 0 ItemIndex = 0
Items.Strings = ( Items.Strings = (
'MMBN 5' 'en'
'MMBN 6' 'ru'
) )
OnSelect = gameboxSelect
ReadOnly = True ReadOnly = True
Style = csOwnerDrawFixed Style = csDropDownList
TabOrder = 5 TabOrder = 3
Text = 'MMBN 5' Text = 'en'
OnSelect = langboxSelect
end end
object Timer1: TTimer object Timer1: TTimer
Enabled = False 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"}
]}

119
unit1.pas
View file

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