diff --git a/README.md b/README.md
index 0fbfa30..889d268 100644
--- a/README.md
+++ b/README.md
@@ -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.
-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.
@@ -10,7 +10,7 @@ The images were taken from [Dr. Cossack's Lab](https://www.interordi.com/mega_ma
# How to use
- 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
- Use `Start`/`Stop` button to enable/disable memory reading.
- 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.
>
-> 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
diff --git a/images/ACDC Area 1.png b/images/MMBN 5/ACDC Area 1.png
similarity index 100%
rename from images/ACDC Area 1.png
rename to images/MMBN 5/ACDC Area 1.png
diff --git a/images/ACDC Area 2.png b/images/MMBN 5/ACDC Area 2.png
similarity index 100%
rename from images/ACDC Area 2.png
rename to images/MMBN 5/ACDC Area 2.png
diff --git a/images/ACDC Area 3.png b/images/MMBN 5/ACDC Area 3.png
similarity index 100%
rename from images/ACDC Area 3.png
rename to images/MMBN 5/ACDC Area 3.png
diff --git a/images/Drill Comp 1.png b/images/MMBN 5/Drill Comp 1.png
similarity index 100%
rename from images/Drill Comp 1.png
rename to images/MMBN 5/Drill Comp 1.png
diff --git a/images/Drill Comp 2.png b/images/MMBN 5/Drill Comp 2.png
similarity index 100%
rename from images/Drill Comp 2.png
rename to images/MMBN 5/Drill Comp 2.png
diff --git a/images/Drill Comp 3.png b/images/MMBN 5/Drill Comp 3.png
similarity index 100%
rename from images/Drill Comp 3.png
rename to images/MMBN 5/Drill Comp 3.png
diff --git a/images/Drill Comp 4.png b/images/MMBN 5/Drill Comp 4.png
similarity index 100%
rename from images/Drill Comp 4.png
rename to images/MMBN 5/Drill Comp 4.png
diff --git a/images/End Area 1.png b/images/MMBN 5/End Area 1.png
similarity index 100%
rename from images/End Area 1.png
rename to images/MMBN 5/End Area 1.png
diff --git a/images/End Area 2.png b/images/MMBN 5/End Area 2.png
similarity index 100%
rename from images/End Area 2.png
rename to images/MMBN 5/End Area 2.png
diff --git a/images/End Area 3.png b/images/MMBN 5/End Area 3.png
similarity index 100%
rename from images/End Area 3.png
rename to images/MMBN 5/End Area 3.png
diff --git a/images/End Area 4.png b/images/MMBN 5/End Area 4.png
similarity index 100%
rename from images/End Area 4.png
rename to images/MMBN 5/End Area 4.png
diff --git a/images/End Area 5.png b/images/MMBN 5/End Area 5.png
similarity index 100%
rename from images/End Area 5.png
rename to images/MMBN 5/End Area 5.png
diff --git a/images/Factory Comp 1.png b/images/MMBN 5/Factory Comp 1.png
similarity index 100%
rename from images/Factory Comp 1.png
rename to images/MMBN 5/Factory Comp 1.png
diff --git a/images/Factory Comp 2.png b/images/MMBN 5/Factory Comp 2.png
similarity index 100%
rename from images/Factory Comp 2.png
rename to images/MMBN 5/Factory Comp 2.png
diff --git a/images/Factory Comp 3.png b/images/MMBN 5/Factory Comp 3.png
similarity index 100%
rename from images/Factory Comp 3.png
rename to images/MMBN 5/Factory Comp 3.png
diff --git a/images/Factory Comp 4.png b/images/MMBN 5/Factory Comp 4.png
similarity index 100%
rename from images/Factory Comp 4.png
rename to images/MMBN 5/Factory Comp 4.png
diff --git a/images/Gargoyle Comp 1.png b/images/MMBN 5/Gargoyle Comp 1.png
similarity index 100%
rename from images/Gargoyle Comp 1.png
rename to images/MMBN 5/Gargoyle Comp 1.png
diff --git a/images/Gargoyle Comp 2.png b/images/MMBN 5/Gargoyle Comp 2.png
similarity index 100%
rename from images/Gargoyle Comp 2.png
rename to images/MMBN 5/Gargoyle Comp 2.png
diff --git a/images/Gargoyle Comp 3.png b/images/MMBN 5/Gargoyle Comp 3.png
similarity index 100%
rename from images/Gargoyle Comp 3.png
rename to images/MMBN 5/Gargoyle Comp 3.png
diff --git a/images/Gargoyle Comp 4.png b/images/MMBN 5/Gargoyle Comp 4.png
similarity index 100%
rename from images/Gargoyle Comp 4.png
rename to images/MMBN 5/Gargoyle Comp 4.png
diff --git a/images/Main Comp 1.png b/images/MMBN 5/Main Comp 1.png
similarity index 100%
rename from images/Main Comp 1.png
rename to images/MMBN 5/Main Comp 1.png
diff --git a/images/Main Comp 2.png b/images/MMBN 5/Main Comp 2.png
similarity index 100%
rename from images/Main Comp 2.png
rename to images/MMBN 5/Main Comp 2.png
diff --git a/images/Nebula 1.png b/images/MMBN 5/Nebula 1.png
similarity index 100%
rename from images/Nebula 1.png
rename to images/MMBN 5/Nebula 1.png
diff --git a/images/Nebula 2.png b/images/MMBN 5/Nebula 2.png
similarity index 100%
rename from images/Nebula 2.png
rename to images/MMBN 5/Nebula 2.png
diff --git a/images/Nebula 3.png b/images/MMBN 5/Nebula 3.png
similarity index 100%
rename from images/Nebula 3.png
rename to images/MMBN 5/Nebula 3.png
diff --git a/images/Nebula 4.png b/images/MMBN 5/Nebula 4.png
similarity index 100%
rename from images/Nebula 4.png
rename to images/MMBN 5/Nebula 4.png
diff --git a/images/Nebula 5.png b/images/MMBN 5/Nebula 5.png
similarity index 100%
rename from images/Nebula 5.png
rename to images/MMBN 5/Nebula 5.png
diff --git a/images/Nebula 6.png b/images/MMBN 5/Nebula 6.png
similarity index 100%
rename from images/Nebula 6.png
rename to images/MMBN 5/Nebula 6.png
diff --git a/images/Oran Area 1.png b/images/MMBN 5/Oran Area 1.png
similarity index 100%
rename from images/Oran Area 1.png
rename to images/MMBN 5/Oran Area 1.png
diff --git a/images/Oran Area 2.png b/images/MMBN 5/Oran Area 2.png
similarity index 100%
rename from images/Oran Area 2.png
rename to images/MMBN 5/Oran Area 2.png
diff --git a/images/Oran Area 3.png b/images/MMBN 5/Oran Area 3.png
similarity index 100%
rename from images/Oran Area 3.png
rename to images/MMBN 5/Oran Area 3.png
diff --git a/images/SciLab Area 1.png b/images/MMBN 5/SciLab Area 1.png
similarity index 100%
rename from images/SciLab Area 1.png
rename to images/MMBN 5/SciLab Area 1.png
diff --git a/images/SciLab Area 2.png b/images/MMBN 5/SciLab Area 2.png
similarity index 100%
rename from images/SciLab Area 2.png
rename to images/MMBN 5/SciLab Area 2.png
diff --git a/images/SciLab Area 3.png b/images/MMBN 5/SciLab Area 3.png
similarity index 100%
rename from images/SciLab Area 3.png
rename to images/MMBN 5/SciLab Area 3.png
diff --git a/images/SciLab Area 4.png b/images/MMBN 5/SciLab Area 4.png
similarity index 100%
rename from images/SciLab Area 4.png
rename to images/MMBN 5/SciLab Area 4.png
diff --git a/images/Ship Comp 1.png b/images/MMBN 5/Ship Comp 1.png
similarity index 100%
rename from images/Ship Comp 1.png
rename to images/MMBN 5/Ship Comp 1.png
diff --git a/images/Ship Comp 2.png b/images/MMBN 5/Ship Comp 2.png
similarity index 100%
rename from images/Ship Comp 2.png
rename to images/MMBN 5/Ship Comp 2.png
diff --git a/images/Ship Comp 3.png b/images/MMBN 5/Ship Comp 3.png
similarity index 100%
rename from images/Ship Comp 3.png
rename to images/MMBN 5/Ship Comp 3.png
diff --git a/images/Ship Comp 4.png b/images/MMBN 5/Ship Comp 4.png
similarity index 100%
rename from images/Ship Comp 4.png
rename to images/MMBN 5/Ship Comp 4.png
diff --git a/images/Squirrel Comp 1.png b/images/MMBN 5/Squirrel Comp 1.png
similarity index 100%
rename from images/Squirrel Comp 1.png
rename to images/MMBN 5/Squirrel Comp 1.png
diff --git a/images/Squirrel Comp 10.png b/images/MMBN 5/Squirrel Comp 10.png
similarity index 100%
rename from images/Squirrel Comp 10.png
rename to images/MMBN 5/Squirrel Comp 10.png
diff --git a/images/Squirrel Comp 11.png b/images/MMBN 5/Squirrel Comp 11.png
similarity index 100%
rename from images/Squirrel Comp 11.png
rename to images/MMBN 5/Squirrel Comp 11.png
diff --git a/images/Squirrel Comp 12.png b/images/MMBN 5/Squirrel Comp 12.png
similarity index 100%
rename from images/Squirrel Comp 12.png
rename to images/MMBN 5/Squirrel Comp 12.png
diff --git a/images/Squirrel Comp 13.png b/images/MMBN 5/Squirrel Comp 13.png
similarity index 100%
rename from images/Squirrel Comp 13.png
rename to images/MMBN 5/Squirrel Comp 13.png
diff --git a/images/Squirrel Comp 14.png b/images/MMBN 5/Squirrel Comp 14.png
similarity index 100%
rename from images/Squirrel Comp 14.png
rename to images/MMBN 5/Squirrel Comp 14.png
diff --git a/images/Squirrel Comp 15.png b/images/MMBN 5/Squirrel Comp 15.png
similarity index 100%
rename from images/Squirrel Comp 15.png
rename to images/MMBN 5/Squirrel Comp 15.png
diff --git a/images/Squirrel Comp 16.png b/images/MMBN 5/Squirrel Comp 16.png
similarity index 100%
rename from images/Squirrel Comp 16.png
rename to images/MMBN 5/Squirrel Comp 16.png
diff --git a/images/Squirrel Comp 2.png b/images/MMBN 5/Squirrel Comp 2.png
similarity index 100%
rename from images/Squirrel Comp 2.png
rename to images/MMBN 5/Squirrel Comp 2.png
diff --git a/images/Squirrel Comp 3.png b/images/MMBN 5/Squirrel Comp 3.png
similarity index 100%
rename from images/Squirrel Comp 3.png
rename to images/MMBN 5/Squirrel Comp 3.png
diff --git a/images/Squirrel Comp 4.png b/images/MMBN 5/Squirrel Comp 4.png
similarity index 100%
rename from images/Squirrel Comp 4.png
rename to images/MMBN 5/Squirrel Comp 4.png
diff --git a/images/Squirrel Comp 5.png b/images/MMBN 5/Squirrel Comp 5.png
similarity index 100%
rename from images/Squirrel Comp 5.png
rename to images/MMBN 5/Squirrel Comp 5.png
diff --git a/images/Squirrel Comp 6.png b/images/MMBN 5/Squirrel Comp 6.png
similarity index 100%
rename from images/Squirrel Comp 6.png
rename to images/MMBN 5/Squirrel Comp 6.png
diff --git a/images/Squirrel Comp 7.png b/images/MMBN 5/Squirrel Comp 7.png
similarity index 100%
rename from images/Squirrel Comp 7.png
rename to images/MMBN 5/Squirrel Comp 7.png
diff --git a/images/Squirrel Comp 8.png b/images/MMBN 5/Squirrel Comp 8.png
similarity index 100%
rename from images/Squirrel Comp 8.png
rename to images/MMBN 5/Squirrel Comp 8.png
diff --git a/images/Squirrel Comp 9.png b/images/MMBN 5/Squirrel Comp 9.png
similarity index 100%
rename from images/Squirrel Comp 9.png
rename to images/MMBN 5/Squirrel Comp 9.png
diff --git a/images/Undernet 1.png b/images/MMBN 5/Undernet 1.png
similarity index 100%
rename from images/Undernet 1.png
rename to images/MMBN 5/Undernet 1.png
diff --git a/images/MMBN 5/Undernet 2.png b/images/MMBN 5/Undernet 2.png
new file mode 100644
index 0000000..d68e692
Binary files /dev/null and b/images/MMBN 5/Undernet 2.png differ
diff --git a/images/MMBN 5/Undernet 3.png b/images/MMBN 5/Undernet 3.png
new file mode 100644
index 0000000..2706314
Binary files /dev/null and b/images/MMBN 5/Undernet 3.png differ
diff --git a/images/Undernet 4.png b/images/MMBN 5/Undernet 4.png
similarity index 100%
rename from images/Undernet 4.png
rename to images/MMBN 5/Undernet 4.png
diff --git a/images/MMBN 6/ACDC Area.PNG b/images/MMBN 6/ACDC Area.PNG
new file mode 100644
index 0000000..22c7fec
Binary files /dev/null and b/images/MMBN 6/ACDC Area.PNG differ
diff --git a/images/MMBN 6/Aquarium Comp 1.PNG b/images/MMBN 6/Aquarium Comp 1.PNG
new file mode 100644
index 0000000..8d325df
Binary files /dev/null and b/images/MMBN 6/Aquarium Comp 1.PNG differ
diff --git a/images/MMBN 6/Aquarium Comp 2.PNG b/images/MMBN 6/Aquarium Comp 2.PNG
new file mode 100644
index 0000000..1db30c1
Binary files /dev/null and b/images/MMBN 6/Aquarium Comp 2.PNG differ
diff --git a/images/MMBN 6/Aquarium Comp 3.PNG b/images/MMBN 6/Aquarium Comp 3.PNG
new file mode 100644
index 0000000..7eda0e9
Binary files /dev/null and b/images/MMBN 6/Aquarium Comp 3.PNG differ
diff --git a/images/MMBN 6/Central Area 1.PNG b/images/MMBN 6/Central Area 1.PNG
new file mode 100644
index 0000000..e605adf
Binary files /dev/null and b/images/MMBN 6/Central Area 1.PNG differ
diff --git a/images/MMBN 6/Central Area 2.PNG b/images/MMBN 6/Central Area 2.PNG
new file mode 100644
index 0000000..b005bf5
Binary files /dev/null and b/images/MMBN 6/Central Area 2.PNG differ
diff --git a/images/MMBN 6/Central Area 3.PNG b/images/MMBN 6/Central Area 3.PNG
new file mode 100644
index 0000000..be94287
Binary files /dev/null and b/images/MMBN 6/Central Area 3.PNG differ
diff --git a/images/MMBN 6/Graveyard ARea 0.PNG b/images/MMBN 6/Graveyard ARea 0.PNG
new file mode 100644
index 0000000..3b8c00b
Binary files /dev/null and b/images/MMBN 6/Graveyard ARea 0.PNG differ
diff --git a/images/MMBN 6/Graveyard Area 1.PNG b/images/MMBN 6/Graveyard Area 1.PNG
new file mode 100644
index 0000000..bb1cd55
Binary files /dev/null and b/images/MMBN 6/Graveyard Area 1.PNG differ
diff --git a/images/MMBN 6/Green Area 1.PNG b/images/MMBN 6/Green Area 1.PNG
new file mode 100644
index 0000000..d6e78cf
Binary files /dev/null and b/images/MMBN 6/Green Area 1.PNG differ
diff --git a/images/MMBN 6/Green Area 2.PNG b/images/MMBN 6/Green Area 2.PNG
new file mode 100644
index 0000000..f1887ee
Binary files /dev/null and b/images/MMBN 6/Green Area 2.PNG differ
diff --git a/images/MMBN 6/Immortal Area.PNG b/images/MMBN 6/Immortal Area.PNG
new file mode 100644
index 0000000..424a401
Binary files /dev/null and b/images/MMBN 6/Immortal Area.PNG differ
diff --git a/images/MMBN 6/Judge Tree Area 1.PNG b/images/MMBN 6/Judge Tree Area 1.PNG
new file mode 100644
index 0000000..d8e76df
Binary files /dev/null and b/images/MMBN 6/Judge Tree Area 1.PNG differ
diff --git a/images/MMBN 6/Judge Tree Area 2.PNG b/images/MMBN 6/Judge Tree Area 2.PNG
new file mode 100644
index 0000000..a0e148d
Binary files /dev/null and b/images/MMBN 6/Judge Tree Area 2.PNG differ
diff --git a/images/MMBN 6/Judge Tree Area 3.PNG b/images/MMBN 6/Judge Tree Area 3.PNG
new file mode 100644
index 0000000..eb02838
Binary files /dev/null and b/images/MMBN 6/Judge Tree Area 3.PNG differ
diff --git a/images/MMBN 6/Mr. Weather Comp 1.PNG b/images/MMBN 6/Mr. Weather Comp 1.PNG
new file mode 100644
index 0000000..f3882c8
Binary files /dev/null and b/images/MMBN 6/Mr. Weather Comp 1.PNG differ
diff --git a/images/MMBN 6/Mr. Weather Comp 2.PNG b/images/MMBN 6/Mr. Weather Comp 2.PNG
new file mode 100644
index 0000000..5b4f910
Binary files /dev/null and b/images/MMBN 6/Mr. Weather Comp 2.PNG differ
diff --git a/images/MMBN 6/Mr. Weather Comp 3.PNG b/images/MMBN 6/Mr. Weather Comp 3.PNG
new file mode 100644
index 0000000..deafd65
Binary files /dev/null and b/images/MMBN 6/Mr. Weather Comp 3.PNG differ
diff --git a/images/MMBN 6/Pavillion Comp 1.PNG b/images/MMBN 6/Pavillion Comp 1.PNG
new file mode 100644
index 0000000..4f41b2c
Binary files /dev/null and b/images/MMBN 6/Pavillion Comp 1.PNG differ
diff --git a/images/MMBN 6/Pavillion Comp 2.PNG b/images/MMBN 6/Pavillion Comp 2.PNG
new file mode 100644
index 0000000..27e0f2d
Binary files /dev/null and b/images/MMBN 6/Pavillion Comp 2.PNG differ
diff --git a/images/MMBN 6/Pavillion Comp 3.PNG b/images/MMBN 6/Pavillion Comp 3.PNG
new file mode 100644
index 0000000..2315fa1
Binary files /dev/null and b/images/MMBN 6/Pavillion Comp 3.PNG differ
diff --git a/images/MMBN 6/Pavillion Comp 4.PNG b/images/MMBN 6/Pavillion Comp 4.PNG
new file mode 100644
index 0000000..8271579
Binary files /dev/null and b/images/MMBN 6/Pavillion Comp 4.PNG differ
diff --git a/images/MMBN 6/Robo Control Area 1.PNG b/images/MMBN 6/Robo Control Area 1.PNG
new file mode 100644
index 0000000..2f57756
Binary files /dev/null and b/images/MMBN 6/Robo Control Area 1.PNG differ
diff --git a/images/MMBN 6/Robo Control Area 2.PNG b/images/MMBN 6/Robo Control Area 2.PNG
new file mode 100644
index 0000000..d04ee6c
Binary files /dev/null and b/images/MMBN 6/Robo Control Area 2.PNG differ
diff --git a/images/MMBN 6/SeaSide Area 1.PNG b/images/MMBN 6/SeaSide Area 1.PNG
new file mode 100644
index 0000000..5a9169b
Binary files /dev/null and b/images/MMBN 6/SeaSide Area 1.PNG differ
diff --git a/images/MMBN 6/SeaSide Area 2.PNG b/images/MMBN 6/SeaSide Area 2.PNG
new file mode 100644
index 0000000..dafdd82
Binary files /dev/null and b/images/MMBN 6/SeaSide Area 2.PNG differ
diff --git a/images/MMBN 6/SeaSide Area 3.PNG b/images/MMBN 6/SeaSide Area 3.PNG
new file mode 100644
index 0000000..227fe5c
Binary files /dev/null and b/images/MMBN 6/SeaSide Area 3.PNG differ
diff --git a/images/MMBN 6/Sky Area 1.PNG b/images/MMBN 6/Sky Area 1.PNG
new file mode 100644
index 0000000..c42492b
Binary files /dev/null and b/images/MMBN 6/Sky Area 1.PNG differ
diff --git a/images/MMBN 6/Sky Area 2.PNG b/images/MMBN 6/Sky Area 2.PNG
new file mode 100644
index 0000000..a3bf548
Binary files /dev/null and b/images/MMBN 6/Sky Area 2.PNG differ
diff --git a/images/MMBN 6/Underground Area 1.PNG b/images/MMBN 6/Underground Area 1.PNG
new file mode 100644
index 0000000..607ed17
Binary files /dev/null and b/images/MMBN 6/Underground Area 1.PNG differ
diff --git a/images/MMBN 6/Underground Area 2.PNG b/images/MMBN 6/Underground Area 2.PNG
new file mode 100644
index 0000000..0d11880
Binary files /dev/null and b/images/MMBN 6/Underground Area 2.PNG differ
diff --git a/images/MMBN 6/Undernet Area 1.PNG b/images/MMBN 6/Undernet Area 1.PNG
new file mode 100644
index 0000000..49353ca
Binary files /dev/null and b/images/MMBN 6/Undernet Area 1.PNG differ
diff --git a/images/MMBN 6/Undernet Area 2.PNG b/images/MMBN 6/Undernet Area 2.PNG
new file mode 100644
index 0000000..7b6f271
Binary files /dev/null and b/images/MMBN 6/Undernet Area 2.PNG differ
diff --git a/images/MMBN 6/Undernet Area 3.PNG b/images/MMBN 6/Undernet Area 3.PNG
new file mode 100644
index 0000000..6bfefc7
Binary files /dev/null and b/images/MMBN 6/Undernet Area 3.PNG differ
diff --git a/images/MMBN 6/Undernet Zero.PNG b/images/MMBN 6/Undernet Zero.PNG
new file mode 100644
index 0000000..5c5e276
Binary files /dev/null and b/images/MMBN 6/Undernet Zero.PNG differ
diff --git a/images/Undernet 2.png b/images/Undernet 2.png
deleted file mode 100644
index 61557c4..0000000
Binary files a/images/Undernet 2.png and /dev/null differ
diff --git a/images/Undernet 3.png b/images/Undernet 3.png
deleted file mode 100644
index 0a40109..0000000
Binary files a/images/Undernet 3.png and /dev/null differ
diff --git a/mmbn5m.lpi b/mmbn5m.lpi
index 07689a1..8ae2d7b 100644
--- a/mmbn5m.lpi
+++ b/mmbn5m.lpi
@@ -5,7 +5,7 @@
-
+
@@ -14,13 +14,18 @@
+
+
+
+
-
-
-
+
+
+
+
@@ -96,6 +101,9 @@
-
+ -
+
+
diff --git a/mmbn5m.lpr b/mmbn5m.lpr
index b0f2b7f..d88de49 100644
--- a/mmbn5m.lpr
+++ b/mmbn5m.lpr
@@ -17,7 +17,7 @@ uses
begin
RequireDerivedFormResource:=True;
- Application.Title:='mmbn5mm';
+ Application.Title:='mmbn56mm';
Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
diff --git a/mmbn5m.lps b/mmbn5m.lps
index 63957db..fd5fe7f 100644
--- a/mmbn5m.lps
+++ b/mmbn5m.lps
@@ -9,7 +9,7 @@
-
+
@@ -47,8 +47,8 @@
-
-
+
+
@@ -59,25 +59,57 @@
-
-
-
+
+
+
-
+
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -85,123 +117,123 @@
-
+
-
+
+
+
+
+
-
+
+
+
+
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/mmbn5m.res b/mmbn5m.res
index b7b63f4..29a13f5 100644
Binary files a/mmbn5m.res and b/mmbn5m.res differ
diff --git a/po/mmbn56mm.en.po b/po/mmbn56mm.en.po
new file mode 100644
index 0000000..b6ed18b
--- /dev/null
+++ b/po/mmbn56mm.en.po
@@ -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"
+
diff --git a/po/mmbn56mm.ru.po b/po/mmbn56mm.ru.po
new file mode 100644
index 0000000..1532215
--- /dev/null
+++ b/po/mmbn56mm.ru.po
@@ -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 "Неизвестно где..."
+
diff --git a/rooms.ini b/rooms.ini
index f25074e..0de81b8 100644
--- a/rooms.ini
+++ b/rooms.ini
@@ -1,4 +1,4 @@
-[Rooms]
+[Rooms MMBN 5]
144=ACDC Area 1
145=Oran Area 1
146=SciLab Area 1
@@ -19,7 +19,7 @@
661=Undernet 4
897=Drill Comp 4
898=Ship Comp 4
-899=Gargoil Comp 4
+899=Gargoyle Comp 4
900=Factory Comp 4
256=Lan's House
512=Lan's Room
@@ -60,7 +60,7 @@
641=Drill Comp 3
2818=Old Mine 9
908=Electronic Lock Comp
-5=Regal Base 1
+5=Nebula Control
142=Squirrel Comp 1
398=Squirrel Comp 2
654=Squirrel Comp 3
@@ -110,35 +110,260 @@
138=Cyber ACDC Town
131=Gargoyle Comp 1
387=Gargoyle Comp 2
+643=Gargoyle Comp 3
+1158=End Area 5
+396=Old Terminal Comp
+650=Oran Isle (Vision Burst)
+1792=Higgsby's Base
+909=Old Comp
+1414=Undernet 4
+653=Tree Comp
+3469=Message Comp
+394=Prologue Room
+1933=Net Battle Comp (ship)
+261=Factory Exterior
+3213=Pipe Comp
+517=Factory Hall
+773=Dark Chip Factory
+2444=Chip Maker Comp
+132=Factory Comp 1
+388=Factory Comp 2
+644=Factory Comp 3
+1029=Soul Server
+2701=Exp Server Comp
+1156=Soul Server Comp
-[Spoils]
+[Spoils MMBN 5]
397=RegUP2,1000z
141=HolyPanl*,RegUP1
-401=Vulcan2 C,HP Memory
+401=Vulcan2 C,HP Memory,HP Memory [N}
145=Quake1 A,Snake M
658=Mega Folder1,SciKey Oran2
147=Vulcan3 L,M-Canon G,Barr 100 P,WideBlade V,Jealousy J,Reg Up 2
3=48958798
-1536=48958798,28706568
+1536=48958798,28706568,45654128,68799876
515=00798216
1164=400z
1420=Battery
1676=Reg Up 2
1932=Sub Memory
-2188=Don'tNeedData
+2188=Don'tNeedData,HP Memory
130=ShipKey,YoYo F,Spin White
386=700z,Don'tNeedData,ShipKey,RegUp3
642=GrasSeed A
898=ExpMemory
403=HP Memory
-659=Spin Yellow,VarSword V [L]
+659=Spin Yellow,VarSword V [L],Air Shoes [N]
2700=Mem Data,Right panel,press A
2445=Metagel T
2956=HP+100
-260=RegUP1
+260=RegUP1,45654128
3212=RegUP2
3468=HP Memory
2957=Air Spin 2 B
1416=CasBannr
1028=HP Memory
-131=Speed +1
+131=Speed +1,HP Memory
+387=RegUp2,MegEnBom C
+643=HP+100,HP Memry
+899=Slasher R
+1158=MrkCan2D [L],Guard 2B [L],BugFrag [L],BugFrag [L]
+648=HP Memory
+144=HP+200 [N]
+396=RegUp2
+1792=HP Memory
+909=Spin Pink,RegUp1
+148=SoulT+1,HP Memory
+1414=BugFrag1 [L],1000z [L],1300z [L]
+653=HP Memory
+3469=RegUp3
+660=Attack +1
+1933=HP+50
+404=68799876
+256=Disk Data
+394=RegUp1
+3213=Hp Memory
+2444=DarkCirk R
+132=M-Cannon F,HP Memory
+388=Reg Up 3,Oil Body
+900=SubMemory
+2701=MudWave D [U]
+
+[Pointers]
+MMBN 5=2149605364
+MMBN 6=2147425942
+
+[Rooms MMBN 6]
+65536=Central Town
+9175040=RoboDog Comp
+281474976776192=Lan's House
+562949953486848=Lan's Room
+844424930197504=Lan's Bathroom
+8912896=Lan's Home Page
+9437184=Central Area 1
+281474986147840=Central Area 2
+1688849860395008=Cyber Academy Foyer Hall
+1970324837105664=Teacher's Room
+1125899906973696=Cyber Academy 1F Hallway
+1407374883684352=Cyber Academy 2F Hallway
+131072=Cyber Academy Class 6-1
+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]
+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
diff --git a/unit1.lfm b/unit1.lfm
index 52df579..4d199fe 100644
--- a/unit1.lfm
+++ b/unit1.lfm
@@ -1,11 +1,12 @@
object Form1: TForm1
- Left = 1657
- Height = 448
- Top = 313
- Width = 528
- Caption = 'MMBN5M'
- ClientHeight = 448
- ClientWidth = 528
+ Left = 821
+ Height = 478
+ Top = 472
+ Width = 792
+ Anchors = [akTop]
+ Caption = 'MMBN5-6M'
+ ClientHeight = 478
+ ClientWidth = 792
Font.CharSet = ANSI_CHARSET
Font.Height = -16
Font.Name = 'Liberation Mono'
@@ -14,16 +15,15 @@ object Form1: TForm1
OnClose = FormClose
OnCreate = FormCreate
Position = poScreenCenter
- LCLVersion = '2.2.6.0'
+ LCLVersion = '3.2.0.0'
object room_name_label: TLabel
- AnchorSideLeft.Control = start_stop_button
+ AnchorSideLeft.Control = Splitter2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Owner
- Left = 136
+ 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 = 136
- Height = 406
+ Left = 232
+ Height = 436
Top = 34
- Width = 384
+ Width = 552
Anchors = [akTop, akLeft, akRight, akBottom]
+ BorderSpacing.Left = 1
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
@@ -51,126 +53,231 @@ object Form1: TForm1
Proportional = True
Stretch = True
end
- object start_stop_button: TSpeedButton
- AnchorSideLeft.Control = Owner
- AnchorSideTop.Control = Owner
- Left = 8
- Height = 30
- Top = 8
- Width = 120
- 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 = 46
- Width = 120
- 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 = 110
- Width = 120
- 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 = '+'
+ 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
- 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 = 84
- Width = 120
- 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 = 56
- Anchors = [akLeft, akRight, akBottom]
- BorderSpacing.Left = 8
+ AnchorSideTop.Control = Owner
+ AnchorSideRight.Control = Owner
+ AnchorSideRight.Side = asrBottom
+ Left = 734
+ Height = 26
+ Top = 1
+ Width = 50
+ Anchors = [akTop, akRight]
+ BorderSpacing.Top = 1
BorderSpacing.Right = 8
- BorderSpacing.Bottom = 8
- Caption = '-'
- OnClick = minus_spoil1Click
+ ItemHeight = 18
+ ItemIndex = 0
+ Items.Strings = (
+ 'en'
+ 'ru'
+ )
+ ReadOnly = True
+ Style = csDropDownList
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 = 120
- Anchors = [akLeft, akRight, akBottom]
- BorderSpacing.Left = 8
- BorderSpacing.Top = 8
- BorderSpacing.Right = 8
- BorderSpacing.Bottom = 8
- Caption = 'Stretch'
- OnChange = map_stretch_checkboxChange
- TabOrder = 4
+ Text = 'en'
+ OnSelect = langboxSelect
end
object Timer1: TTimer
Enabled = False
diff --git a/unit1.lrj b/unit1.lrj
new file mode 100644
index 0000000..3ea6206
--- /dev/null
+++ b/unit1.lrj
@@ -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"}
+]}
diff --git a/unit1.pas b/unit1.pas
index a7bd40c..95663b3 100644
--- a/unit1.pas
+++ b/unit1.pas
@@ -5,367 +5,458 @@ unit Unit1;
interface
uses
- Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
- Buttons, Grids, IniFiles, Windows;
+Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
+Buttons, Grids, IniFiles, Windows, DefaultTranslator, LCLTranslator, FileUtil;
type
- TWMHotKey = packed record
- MSG: cardinal;
- HotKey: PtrInt;
- Unused: PtrInt;
- Result: PtrInt;
- end;
+TWMHotKey = packed record
+ MSG :CARDINAL;
+ HotKey :PtrInt;
+ Unused :PtrInt;
+ Result :PtrInt;
+end;
type
- { TForm1 }
+{ TForm1 }
- TForm1 = class(TForm)
- map_stretch_checkbox: TCheckBox;
- plus_spoil: TButton;
- edit_room_button: TButton;
- minus_spoil1: TButton;
- spoils_label: TLabel;
- spoils_listbox: TListBox;
- map_image: TImage;
- room_name_label: TLabel;
- start_stop_button: TSpeedButton;
- Timer1: TTimer;
- procedure edit_room_buttonClick(Sender: TObject);
- procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
- procedure FormCreate(Sender: TObject);
- procedure map_imagePaint(Sender: TObject);
- procedure map_stretch_checkboxChange(Sender: TObject);
- procedure minus_spoil1Click(Sender: TObject);
- procedure plus_spoilClick(Sender: TObject);
- procedure spoils_listboxDblClick(Sender: TObject);
- procedure start_stop_buttonClick(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- private
+TForm1 = class ( TForm )
+ langbox :TComboBox;
+ edit_room_button :TButton;
+ gamebox :TComboBox;
+ Label1 :TLabel;
+ map_stretch_checkbox :TCheckBox;
+ minus_spoil1 :TButton;
+ 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 );
+PRIVATE
- public
+PUBLIC
- protected
- procedure WMHotKey(var MSG: TWMHotKey); message WM_HOTKEY;
+PROTECTED
+ procedure WMHotKey ( var MSG :TWMHotKey ); MESSAGE WM_HOTKEY;
+
+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';
- end;
var
- Form1: TForm1;
+Form1 :TForm1;
implementation
uses JwaTlHelp32;
-function FindProcessID(const ExeFileName: string): DWORD;
+
+function FindProcessID ( const ExeFileName :STRING ) :DWORD;
var
- ContinueLoop: BOOL;
- FSnapshotHandle: THandle;
- FProcessEntry32: TProcessEntry32;
+ ContinueLoop :BOOL;
+ FSnapshotHandle :THandle;
+ FProcessEntry32 :TProcessEntry32;
begin
- Result := 0;
+ Result := 0;
- FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
- ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
+ FSnapshotHandle := CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
+ FProcessEntry32.dwSize := SizeOf ( FProcessEntry32 );
+ ContinueLoop := Process32First ( FSnapshotHandle, FProcessEntry32 );
- while integer(ContinueLoop) <> 0 do
- begin
- if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
- UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
- UpperCase(ExeFileName))) then
- begin
- Result := FProcessEntry32.th32ProcessID;
- Break;
- end;
- ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
- end;
+ while INTEGER ( ContinueLoop ) <> 0 do
+ begin
+ if ( ( UpperCase ( ExtractFileName ( FProcessEntry32.szExeFile ) ) = UpperCase ( ExeFileName ) ) OR( UpperCase ( FProcessEntry32.szExeFile ) = UpperCase ( ExeFileName ) ) ) then begin
+ Result := FProcessEntry32.th32ProcessID;
+ Break;
+ end;
+ ContinueLoop := Process32Next ( FSnapshotHandle, FProcessEntry32 );
+ end;
- CloseHandle(FSnapshotHandle);
+ CloseHandle ( FSnapshotHandle );
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;
+ NumberOfBytesRead :SIZE_T;
begin
- Result := ReadProcessMemory(hProcess, Address, @Buffer, Size, NumberOfBytesRead) and
- (NumberOfBytesRead = Size);
-end;
-
-procedure ListRunningProcesses(ProcList: TStrings);
-var
- pProc: TProcessEntry32;
- pSnap: THandle;
- pBool: BOOL;
-begin
- ProcList.Clear;
- pProc.dwSize := SizeOf(pProc);
- pSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
- pBool := Process32First(pSnap, pProc);
- while integer(pBool) <> 0 do
- begin
- ProcList.Add(pProc.szExeFile);
- pBool := Process32Next(pSnap, pProc);
- end;
- CloseHandle(pSnap);
+ Result := ReadProcessMemory ( hProcess, Address, @Buffer, Size, NumberOfBytesRead ) AND ( NumberOfBytesRead = Size );
end;
+procedure ListRunningProcesses ( ProcList :TStrings );
+var
+ pProc :TProcessEntry32;
+ pSnap :THandle;
+ pBool :BOOL;
+begin
+ ProcList.Clear;
+ pProc.dwSize := SizeOf ( pProc );
+ pSnap := CreateToolhelp32Snapshot ( TH32CS_SNAPALL, 0 );
+ pBool := Process32First ( pSnap, pProc );
+ while INTEGER ( pBool ) <> 0 do begin
+ ProcList.Add ( pProc.szExeFile );
+ pBool := Process32Next ( pSnap, pProc );
+ end;
+ CloseHandle ( pSnap );
+end;
+
var
- hProcess: THandle;
- ROOMS: TIniFile; // contains room labels
- process_list: TStrings;
- room: smallint = -1; // contains current room 16-bit value
- last_room: smallint = -1;
- room_name: string;
- new_room: bool;
- spoils_list: string;
- spoils: TStringArray;
- fullscreen_map: bool = False;
+hProcess :THandle;
+ROOMS :TIniFile; // contains room labels
+process_list :TStrings;
+room :QWORD = 18446744073709551615; // contains current room 16-bit value
+last_room :QWORD = 18446744073709551615;
+room_name :STRING;
+new_room :bool;
+spoils_list :STRING;
+spoils :TStringArray;
+fullscreen_map :bool = False;
+current_game :STRING = 'MMBN 6';
+mmbn5_pointer :QWORD = $80205FF4;
+//mmbn6 has a weird way to denote areas: there' main area code and subcodes. 0 = Central Town, 1 = Cyberspace in Central Town.
+// So, Central Area 1 is 0-144, but Central Area 2 is somehow 144-256
+// the pointer is : smallint = $7FFF1E9B (subarea) and smallint = $7FFF1E98 (general area);
+// I don't want to dea with that, so I just read everything as ONE qword and it seems to work
+mmbn6_pointer :QWORD = $7FFF1E96;
+current_game_pointer :QWORD;
+is_cyberworld :BOOLEAN = False;
var
- x, y, w, h: integer;
- state: TWindowState;
+x, y, w, h :INTEGER;
+state :TWindowState;
+languages :TStrings;
+current_language :STRING;
{$R *.lfm}
+
{ TForm1 }
-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();
- 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.');
-end;
-
-procedure TForm1.map_imagePaint(Sender: TObject);
-begin
- //map_image.Canvas.Brush.Style := bsClear;
- //map_image.Canvas.Rectangle(0, 0, 400, 400);
-end;
-
-procedure TForm1.map_stretch_checkboxChange(Sender: TObject);
-begin
- map_image.Proportional := not map_stretch_checkbox.Checked;
-end;
-
-procedure TForm1.minus_spoil1Click(Sender: TObject);
+procedure TForm1.FormCreate ( Sender :TObject );
var
- Txt: string;
- i: integer;
+ i :INTEGER;
begin
- if (spoils_listbox.ItemIndex > -1) then
- begin
- spoils_listbox.Items.Delete(spoils_listbox.ItemIndex);
- for i := 0 to spoils_listbox.Items.Count - 1 do
- begin
- if i < spoils_listbox.Items.Count - 1 then
- Txt := Txt + spoils_listbox.Items[i] + ','
- else
- Txt := Txt + spoils_listbox.Items[i];
- end;
- ROOMS.WriteString('Spoils', IntToStr(room), Txt);
- end;
- spoils_listbox.ClearSelection;
+ current_game_pointer := mmbn5_pointer;
+ // open ini file and create a list to hold processes
+ ROOMS := TIniFile.Create ( 'rooms.ini' );
+ process_list := TStringList.Create ( );
+ spoils_listbox.Height := 0;
+ if NOT RegisterHotKey ( Handle, 111000, MOD_WIN, VK_Y ) then
+ 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;
-procedure TForm1.plus_spoilClick(Sender: TObject);
+
+procedure TForm1.gameboxSelect ( Sender :TObject );
+begin
+ current_game := gamebox.Items [gamebox.ItemIndex];
+ if ( gamebox.ItemIndex = 0 ) then begin
+ current_game_pointer := mmbn5_pointer;
+ end else begin
+ current_game_pointer := mmbn6_pointer;
+ end;
+ ROOMS.WriteString ( 'Pointers', current_game, IntToStr ( current_game_pointer ) );
+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;
+ //map_image.Canvas.Rectangle(0, 0, 400, 400);
+end;
+
+
+procedure TForm1.map_stretch_checkboxChange ( Sender :TObject );
+begin
+ map_image.Proportional := NOT map_stretch_checkbox.Checked;
+end;
+
+
+procedure TForm1.minus_spoil1Click ( Sender :TObject );
var
- new_spoil_name: string;
+ Txt :STRING = '';
+ i :INTEGER;
+begin
+ if ( spoils_listbox.ItemIndex > -1 ) then begin
+ spoils_listbox.Items.Delete ( spoils_listbox.ItemIndex );
+ for i := 0 to spoils_listbox.Items.Count - 1 do begin
+ if i < spoils_listbox.Items.Count - 1 then
+ Txt := Txt + spoils_listbox.Items [i] + ','
+ else
+ Txt := Txt + spoils_listbox.Items [i];
+ end;
+ if is_cyberworld = True then
+ ROOMS.WriteString ( 'Spoils Cyberworld ' + current_game, IntToStr ( room ), Txt )
+ else
+ ROOMS.WriteString ( 'Spoils ' + current_game, IntToStr ( room ), Txt );
+
+ end;
+ spoils_listbox.ClearSelection;
+end;
+
+
+procedure TForm1.plus_spoilClick ( Sender :TObject );
var
- Txt: string;
- i: integer;
+ 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
- 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
- Txt := Txt + spoils_listbox.Items[i] + ','
- else
- Txt := Txt + spoils_listbox.Items[i];
- end;
- ROOMS.WriteString('Spoils', IntToStr(room), Txt);
- end;
- spoils_listbox.ClearSelection;
+ 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
+ Txt := Txt + spoils_listbox.Items [i] + ','
+ else
+ Txt := Txt + spoils_listbox.Items [i];
+ end;
+ if is_cyberworld = True then
+ ROOMS.WriteString ( 'Spoils Cyberworld ' + current_game, IntToStr ( room ), Txt )
+ else
+ ROOMS.WriteString ( 'Spoils ' + current_game, IntToStr ( room ), Txt );
+
+ end;
+ spoils_listbox.ClearSelection;
end;
-procedure TForm1.spoils_listboxDblClick(Sender: TObject);
+
+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;
+ new_spoil_name :STRING;
var
- Txt: string;
- i: integer;
+ 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
- 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
- Txt := Txt + spoils_listbox.Items[i] + ','
- else
- Txt := Txt + spoils_listbox.Items[i];
- end;
- ROOMS.WriteString('Spoils', IntToStr(room), Txt);
+ if ( spoils_listbox.ItemIndex > -1 ) then begin
+ new_spoil_name := spoils_listbox.Items [spoils_listbox.ItemIndex];
+ 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
+ Txt := Txt + spoils_listbox.Items [i] + ','
+ else
+ Txt := Txt + spoils_listbox.Items [i];
+ end;
+ if is_cyberworld = True then
+ ROOMS.WriteString ( 'Spoils Cyberworld ' + current_game, IntToStr ( room ), Txt )
+ else
+ ROOMS.WriteString ( 'Spoils ' + current_game, IntToStr ( room ), Txt );
- end;
- end;
- spoils_listbox.ClearSelection;
+ end;
+ end;
+ spoils_listbox.ClearSelection;
end;
-procedure TForm1.start_stop_buttonClick(Sender: TObject);
+
+procedure TForm1.start_stop_buttonClick ( Sender :TObject );
var
- i: integer;
- ProcID: DWORD;
+ 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_BUTTON_STRAT;
+ Timer1.Enabled := False;
+ CloseHandle ( hProcess );
+ room_name_label.Caption := RUN_THE_GAME_NOTICE;
+ end else begin
+ 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 := APP_CAPTION + ' ' + IntToStr ( ProcID );
+ Timer1.Enabled := True;
+ break;
+ end else begin
+ room_name_label.Caption := ERROR_GAME_NOT_RUNNING;
+ end;
+ end;
+ end;
end;
-procedure TForm1.Timer1Timer(Sender: TObject);
-begin
- spoils_listbox.Height := spoils_listbox.Items.Count * spoils_listbox.ItemHeight;
-
- if hProcess <> 0 then
- begin
- try
- if ReadMemory(hProcess, Pointer($80205FF4), room, SizeOf(room)) then
- begin
- if (last_room <> room) or (new_room) then
- begin
- new_room := False;
- last_room := room;
- room_name := ROOMS.ReadString('Rooms', IntToStr(room), 'Unknown');
- room_name_label.Caption := 'Room #' + IntToStr(room) + ': ' + room_name;
- spoils_list := ROOMS.ReadString('Spoils', IntToStr(room), '');
- spoils_listbox.Items.Clear;
- if (spoils_list <> '') then
- begin
- spoils := spoils_list.Split(',');
- spoils_listbox.Items.AddStrings(spoils);
- end;
-
- 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. Make sure the game is running';
- end;
- except
- on edit_room_button: Exception do
- room_name_label.Caption := 'Error';
- end;
- end;
-
-end;
-
-procedure TForm1.edit_room_buttonClick(Sender: TObject);
+procedure TForm1.Timer1Timer ( Sender :TObject );
var
- new_room_name: string;
+ room_number_size :SMALLINT;
begin
- new_room_name := room_name;
- if InputQuery('Editing Room # ' + IntToStr(room), 'Enter this Room''s name',
- new_room_name) then
- begin
- ROOMS.WriteString('Rooms', IntToStr(room), new_room_name);
- new_room := True;
- end;
-end;
+ spoils_listbox.Height := spoils_listbox.Items.Count * spoils_listbox.ItemHeight;
+
+ if hProcess <> 0 then begin
+ try
+ if current_game = 'MMBN 6' then
+ room_number_size := SizeOf ( QWORD )
+ else
+ room_number_size := SizeOf ( SMALLINT );
+
+ if ReadMemory ( hProcess, Pointer ( current_game_pointer ), room, room_number_size ) then begin
+ if ( last_room <> room ) OR ( new_room ) then begin
+ new_room := False;
+ last_room := room;
+ if current_game = 'MMBN 6' then begin
+ // Don't show room numbers for MMBN 6 until something smaller-looking can be figured out
+ room_name := ROOMS.ReadString ( 'Rooms ' + current_game, IntToStr ( room ), 'Unknown' );
+ room_name_label.Caption := room_name;
+ end else begin
+ room := SMALLINT ( room ); // - 844424930459648;
+ 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 ), '' );
+ spoils_listbox.Items.Clear;
+ if ( spoils_list <> '' ) then begin
+ spoils := spoils_list.Split ( ',' );
+ spoils_listbox.Items.AddStrings ( spoils );
+ end;
+
+ if FileExists ( 'images/' + current_game + '/' + room_name + '.png' ) then begin
+ map_image.Picture.LoadFromFile ( 'images/' + current_game + '/' + room_name + '.png' );
+ end else begin
+ map_image.Picture.Clear;
+ end;
+ end;
+ end else begin
+ room_name_label.Caption := ERROR_GAME_MEMORY_NOT_READ;
+ end;
+ except
+ on edit_room_button :Exception do
+ room_name_label.Caption := ERROR_UNABLE_TO_READ_GAME_MEMORY;
+ end;
+ end;
-procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
-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;
- UnregisterHotKey(Handle, 111000);
end;
-procedure TForm1.WMHotKey(var MSG: TWMHotKey);
+procedure TForm1.edit_room_buttonClick ( Sender :TObject );
+var
+ new_room_name :STRING = '';
begin
- fullscreen_map := not fullscreen_map;
- Form1.Caption := (BoolToStr(fullscreen_map));
- Form1.Visible := False;
- if (fullscreen_map = True) then
- begin
- x := Form1.Left;
- y := Form1.top;
- w := Form1.Width;
- h := Form1.Height;
- state := Form1.WindowState;
- Form1.FormStyle := fsStayOnTop;
- Form1.BorderStyle := bsNone;
- Form1.Left := 0;
- Form1.Top := 0;
- form1.Width := Screen.Width;
- Form1.Height := Screen.Height;
- end
- else
- begin
- Form1.FormStyle := fsNormal;
- Form1.BorderStyle := bsSingle;
- Form1.Left := x;
- Form1.Top := y;
- form1.Width := w;
- Form1.Height := h;
- Form1.WindowState := state;
- end;
- Form1.Visible := True;
- RegisterHotKey(Handle, 111000, MOD_WIN, VK_Y);
+ new_room_name := room_name;
+ 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 := 18446744073709551615;
+ end;
+end;
+
+
+procedure TForm1.FormClose ( Sender :TObject; var CloseAction :TCloseAction );
+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;
+ languages.Free;
+ UnregisterHotKey ( Handle, 111000 );
+end;
+
+
+procedure TForm1.WMHotKey ( var MSG :TWMHotKey );
+begin
+ fullscreen_map := NOT fullscreen_map;
+
+ Form1.Visible := False;
+ if ( fullscreen_map = True ) then begin
+ x := Form1.Left;
+ y := Form1.top;
+ w := Form1.Width;
+ h := Form1.Height;
+ Application.ProcessMessages;
+ state := Form1.WindowState;
+ Form1.FormStyle := fsStayOnTop;
+ Form1.BorderStyle := bsNone;
+ Form1.Left := 0;
+ Form1.Top := 0;
+ form1.Width := Screen.Width;
+ Form1.Height := Screen.Height;
+ end else begin
+ Form1.WindowState := state;
+ Form1.FormStyle := fsNormal;
+ Form1.BorderStyle := bsSizeable;
+ Application.ProcessMessages;
+ Form1.Position := poDesigned;
+ Form1.Left := x;
+ Form1.Top := y;
+ form1.Width := w;
+ Form1.Height := h;
+ end;
+
+ Form1.Visible := True;
+ RegisterHotKey ( Handle, 111000, MOD_WIN, VK_Y );
end;
+
+initialization
+
+
+SetDefaultLang ( 'en', 'po' );
+
end.