diff --git a/README.md b/README.md index 5b35f17..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,11 +10,15 @@ 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. - The name you've given will be used when loading images, e.g. when you're in the `Lan's Room`, the app will try to load `./images/Lan's Room.png` image. +- Use `+`/`-` buttons to add/delete spoils list found in room (blue, gree, purple mystery data, lotto codes etc) +- Double click spoil item to edit it +- Use `Stretch` checkbox if you want your map stretched (usefull for those streaming people) +- Use `Win`+`Y` global hotkey to toggle fullscreen (conflicts with mixed reality shortcut, not configurable atm) The app should work under a regular user ***do not*** give this app (and 99.9% of all the other apps) admin privs @@ -36,12 +40,12 @@ Assets are *not* included. Because... > > We can argue all day about whether coding something means I can tell you what to do. Especially when the app in question uses assets made by other people and is useless without those. > -> The same goes for the images. Yes, [Mega Boy](megaboy@sympatico.ca) did create the images used in this app, but does he own them? Can he (or Dr. Cossack's for that sake) grant *any* persmissions regading Capcom's assets? +> The same goes for the images. Yes, [Mega Boy](mailto:megaboy@sympatico.ca) did create the images used in this app, but does he own them? Can he (or Dr. Cossack for that sake) grant *any* persmissions regading Capcom's assets? > > Don't think so. > > It's not hard to ask, but I don't feel like there's any reason to. > -> Dumping something from a game sure requires an investment of time - just as crating this app and writing this readme does. But neither act magically makes any of use the owner of those assets. 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 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/Gargoil Comp 1.png b/images/MMBN 5/Gargoyle Comp 1.png similarity index 100% rename from images/Gargoil Comp 1.png rename to images/MMBN 5/Gargoyle Comp 1.png diff --git a/images/Gargoil Comp 2.png b/images/MMBN 5/Gargoyle Comp 2.png similarity index 100% rename from images/Gargoil Comp 2.png rename to images/MMBN 5/Gargoyle Comp 2.png diff --git a/images/Gargoil Comp 3.png b/images/MMBN 5/Gargoyle Comp 3.png similarity index 100% rename from images/Gargoil Comp 3.png rename to images/MMBN 5/Gargoyle Comp 3.png diff --git a/images/Gargoil Comp 4.png b/images/MMBN 5/Gargoyle Comp 4.png similarity index 100% rename from images/Gargoil 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/MMBN 5/Squirrel Comp 1.png b/images/MMBN 5/Squirrel Comp 1.png new file mode 100644 index 0000000..929bce2 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 1.png differ diff --git a/images/MMBN 5/Squirrel Comp 10.png b/images/MMBN 5/Squirrel Comp 10.png new file mode 100644 index 0000000..58e0f9e Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 10.png differ diff --git a/images/MMBN 5/Squirrel Comp 11.png b/images/MMBN 5/Squirrel Comp 11.png new file mode 100644 index 0000000..1498986 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 11.png differ diff --git a/images/MMBN 5/Squirrel Comp 12.png b/images/MMBN 5/Squirrel Comp 12.png new file mode 100644 index 0000000..b15591a Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 12.png differ diff --git a/images/MMBN 5/Squirrel Comp 13.png b/images/MMBN 5/Squirrel Comp 13.png new file mode 100644 index 0000000..1a3c9ad Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 13.png differ diff --git a/images/MMBN 5/Squirrel Comp 14.png b/images/MMBN 5/Squirrel Comp 14.png new file mode 100644 index 0000000..8857fde Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 14.png differ diff --git a/images/MMBN 5/Squirrel Comp 15.png b/images/MMBN 5/Squirrel Comp 15.png new file mode 100644 index 0000000..1fda405 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 15.png differ diff --git a/images/MMBN 5/Squirrel Comp 16.png b/images/MMBN 5/Squirrel Comp 16.png new file mode 100644 index 0000000..0d47de5 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 16.png differ diff --git a/images/MMBN 5/Squirrel Comp 2.png b/images/MMBN 5/Squirrel Comp 2.png new file mode 100644 index 0000000..01960c6 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 2.png differ diff --git a/images/MMBN 5/Squirrel Comp 3.png b/images/MMBN 5/Squirrel Comp 3.png new file mode 100644 index 0000000..5c2d70c Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 3.png differ diff --git a/images/MMBN 5/Squirrel Comp 4.png b/images/MMBN 5/Squirrel Comp 4.png new file mode 100644 index 0000000..828fb84 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 4.png differ diff --git a/images/MMBN 5/Squirrel Comp 5.png b/images/MMBN 5/Squirrel Comp 5.png new file mode 100644 index 0000000..ed9a6d4 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 5.png differ diff --git a/images/MMBN 5/Squirrel Comp 6.png b/images/MMBN 5/Squirrel Comp 6.png new file mode 100644 index 0000000..c332c6c Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 6.png differ diff --git a/images/MMBN 5/Squirrel Comp 7.png b/images/MMBN 5/Squirrel Comp 7.png new file mode 100644 index 0000000..0b26b38 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 7.png differ diff --git a/images/MMBN 5/Squirrel Comp 8.png b/images/MMBN 5/Squirrel Comp 8.png new file mode 100644 index 0000000..97d78c2 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 8.png differ diff --git a/images/MMBN 5/Squirrel Comp 9.png b/images/MMBN 5/Squirrel Comp 9.png new file mode 100644 index 0000000..8ab1e29 Binary files /dev/null and b/images/MMBN 5/Squirrel Comp 9.png differ 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 9a369f9..8ae2d7b 100644 --- a/mmbn5m.lpi +++ b/mmbn5m.lpi @@ -5,7 +5,7 @@ - + <Title Value="mmbn56mm"/> <Scaled Value="True"/> <ResourceType Value="res"/> <UseXPManifest Value="True"/> @@ -14,11 +14,25 @@ </XPManifest> <Icon Value="0"/> </General> + <i18n> + <EnableI18N Value="True"/> + <OutDir Value="po"/> + </i18n> + <VersionInfo> + <UseVersionInfo Value="True"/> + <AutoIncrementBuild Value="True"/> + <MinorVersionNr Value="2"/> + <RevisionNr Value="1"/> + <BuildNr Value="19"/> + <Attributes pvaPrivateBuild="True"/> + <StringTable CompanyName="4aiman" FileDescription="Megaman Battle Network 5 and 6 minimap app" InternalName="mmbn56mm" LegalCopyright="4aiman" OriginalFilename="mmbn56mm" ProductName="MMBN56MM" ProductVersion="2"/> + </VersionInfo> <BuildModes> <Item Name="Debug" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> + <OpenInFileMan Value="True"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> @@ -87,6 +101,9 @@ <Item> <Name Value="EFOpenError"/> </Item> + <Item> + <Name Value="EConvertError"/> + </Item> </Exceptions> </Debugging> </CONFIG> 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 632dbff..fd5fe7f 100644 --- a/mmbn5m.lps +++ b/mmbn5m.lps @@ -9,7 +9,7 @@ <Version Value="11"/> <PathDelim Value="\"/> <Target> - <Filename Value="mmbn5m"/> + <Filename Value="mmbn56mm"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> @@ -46,9 +46,9 @@ <Unit> <Filename Value="mmbn5m.lpr"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="1"/> - <CursorPos X="69" Y="19"/> - <UsageCount Value="29"/> + <EditorIndex Value="2"/> + <CursorPos X="49" Y="20"/> + <UsageCount Value="65"/> <Loaded Value="True"/> </Unit> <Unit> @@ -59,141 +59,181 @@ <ResourceBaseClass Value="Form"/> <UnitName Value="Unit1"/> <IsVisibleTab Value="True"/> - <TopLine Value="158"/> - <CursorPos X="66" Y="178"/> - <UsageCount Value="29"/> + <TopLine Value="364"/> + <CursorPos X="52" Y="411"/> + <UsageCount Value="65"/> <Loaded Value="True"/> <LoadedDesigner Value="True"/> </Unit> <Unit> <Filename Value="C:\lazarus\lcl\interfaces\win32\win32listsl.inc"/> - <EditorIndex Value="2"/> + <EditorIndex Value="-1"/> <TopLine Value="128"/> <CursorPos Y="152"/> + <UsageCount Value="20"/> + </Unit> + <Unit> + <Filename Value="C:\lazarus\fpc\3.2.2\source\rtl\objpas\sysutils\syshelph.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="147"/> + <CursorPos X="16" Y="161"/> + <UsageCount Value="10"/> + </Unit> + <Unit> + <Filename Value="rooms.ini"/> + <EditorIndex Value="4"/> + <TopLine Value="274"/> + <CursorPos X="52" Y="298"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <DefaultSyntaxHighlighter Value="Ini"/> + </Unit> + <Unit> + <Filename Value="mmbn5m.lpi"/> + <EditorIndex Value="-1"/> + <CursorPos Y="46"/> + <UsageCount Value="8"/> + <DefaultSyntaxHighlighter Value="XML"/> + </Unit> + <Unit> + <Filename Value="C:\lazarus\lcl\lcltranslator.pas"/> + <UnitName Value="LCLTranslator"/> + <EditorIndex Value="1"/> + <TopLine Value="95"/> + <CursorPos Y="95"/> <UsageCount Value="12"/> <Loaded Value="True"/> </Unit> + <Unit> + <Filename Value="C:\lazarus\components\lazutils\translations.pas"/> + <UnitName Value="Translations"/> + <EditorIndex Value="3"/> + <TopLine Value="738"/> + <CursorPos X="54" Y="775"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit> </Units> <JumpHistory HistoryIndex="29"> <Position> <Filename Value="unit1.pas"/> - <Caret Line="200" Column="35" TopLine="142"/> + <Caret Line="9" Column="34" TopLine="9"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="108" Column="17" TopLine="82"/> + <Caret Line="432" Column="49" TopLine="387"/> + </Position> + <Position> + <Filename Value="mmbn5m.lpr"/> + <Caret Line="21" Column="21"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="116" TopLine="84"/> + <Caret Line="435" Column="35" TopLine="408"/> + </Position> + <Position> + <Filename Value="mmbn5m.lpr"/> + <Caret Line="13" Column="16"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="108" Column="33" TopLine="84"/> + <Caret Line="428" Column="73" TopLine="409"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="192" Column="11" TopLine="182"/> + <Caret Line="435" Column="50" TopLine="388"/> + </Position> + <Position> + <Filename Value="C:\lazarus\components\lazutils\translations.pas"/> + <Caret Line="762" Column="128" TopLine="738"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="199" Column="11" TopLine="174"/> + <Caret Line="435" Column="44" TopLine="406"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="200" Column="25" TopLine="176"/> + <Caret Line="437" Column="54" TopLine="406"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="117" TopLine="93"/> + <Caret Line="26" Column="92"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="132" Column="12" TopLine="122"/> + <Caret Line="414" Column="53" TopLine="390"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="175" TopLine="144"/> + <Caret Line="412" Column="27" TopLine="387"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="118" Column="41" TopLine="94"/> + <Caret Line="211" Column="5" TopLine="165"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="170" Column="55" TopLine="146"/> + <Caret Line="409" Column="19" TopLine="399"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="117" Column="13" TopLine="117"/> + <Caret Line="175" Column="24" TopLine="151"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="136" Column="25" TopLine="116"/> + <Caret Line="9" Column="73"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="135" Column="25" TopLine="115"/> + <Caret Line="188" Column="20" TopLine="173"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="134" Column="25" TopLine="114"/> + <Caret Line="189" Column="25" TopLine="171"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="133" Column="25" TopLine="113"/> + <Caret Line="208" Column="3" TopLine="186"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="132" Column="25" TopLine="112"/> + <Caret Line="453" Column="5" TopLine="408"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="210" Column="6" TopLine="208"/> + <Caret Line="209" Column="46" TopLine="197"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="209" Column="6" TopLine="207"/> + <Caret Line="224" Column="58" TopLine="192"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="199" Column="38" TopLine="181"/> + <Caret Line="210" Column="59" TopLine="210"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="166" Column="7" TopLine="153"/> + <Caret Line="195" Column="6" TopLine="171"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="182" Column="91" TopLine="156"/> + <Caret Line="214" Column="66" TopLine="190"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="145" Column="63" TopLine="113"/> + <Caret Line="415" Column="13" TopLine="375"/> + </Position> + <Position> + <Filename Value="rooms.ini"/> + <Caret Line="51" Column="40" TopLine="25"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="141" Column="58" TopLine="113"/> + <Caret Line="201" Column="82" TopLine="174"/> </Position> <Position> <Filename Value="unit1.pas"/> - <Caret Line="140" Column="41" TopLine="118"/> - </Position> - <Position> - <Filename Value="unit1.pas"/> - <Caret Line="171" Column="61" TopLine="155"/> - </Position> - <Position> - <Filename Value="unit1.pas"/> - <Caret Line="130" Column="37" TopLine="106"/> - </Position> - <Position> - <Filename Value="unit1.pas"/> - <Caret Line="129" Column="22" TopLine="106"/> - </Position> - <Position> - <Filename Value="unit1.pas"/> - <Caret Line="174" Column="38" TopLine="155"/> + <Caret Line="265" Column="25" TopLine="241"/> </Position> </JumpHistory> <RunParams> diff --git a/mmbn5m.res b/mmbn5m.res index 09ecee6..29a13f5 100644 Binary files a/mmbn5m.res and b/mmbn5m.res differ diff --git a/mmbn5mm.exe b/mmbn5mm.exe deleted file mode 100644 index ba6d490..0000000 Binary files a/mmbn5mm.exe and /dev/null 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 895196a..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 @@ -43,3 +43,327 @@ 384=Main Comp 2 769=Op Room 652=Kitchen Comp +2=Oran Island +258=Old Mine +2050=Old Mine 6 +770=Old Mine 1 +1026=Old Mine 2 +1282=Old Mine 3 +1538=Old Mine 4 +2700=Air Filter Comp +1794=Old Mine 5 +2306=Old Mine 7 +129=Drill Comp 1 +514=Big Cave +2562=Old Mine 8 +385=Drill Comp 2 +641=Drill Comp 3 +2818=Old Mine 9 +908=Electronic Lock Comp +5=Nebula Control +142=Squirrel Comp 1 +398=Squirrel Comp 2 +654=Squirrel Comp 3 +1166=Squirrel Comp 5 +910=Squirrel Comp 4 +1678=Squirrel Comp 7 +1934=Squirrel Comp 8 +2190=Squirrel Comp 9 +2446=Squirrel Comp 10 +2958=Squirrel Comp 12 +3726=Squirrel Comp 15 +2702=Squirrel Comp 11 +3214=Squirrel Comp 13 +3470=Squirrel Comp 14 +3982=Squirrel Comp 16 +1536=Higsby's +1422=Squirrel Comp 6 +397=Crane Comp +141=Elevator Room +1025=Mission Control +3=Dock +1160=SciLab Home Page +259=Ship Hall +515=Ship Deck +771=Engine Room +1164=Radar Comp +1420=Air Conditioner Comp +1676=Screw Comp +1932=Engine Comp +1027=Fiesta Room +2188=View Comp +130=Ship Comp 1 +386=Ship Comp 2 +642=Ship Comp 3 +1283=Ship Bridge +4=End City +2445=Dumplig Comp +260=Mum Room +2956=Armor Comp +3212=Helmet Comp +3468=Katana Comp +516=Lily Room +2957=Wind God Comp +1028=Castle Exterior +772=Castle Keep +1416=Gargoyle Castle Home Page +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 MMBN 5] +397=RegUP2,1000z +141=HolyPanl*,RegUP1 +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,45654128,68799876 +515=00798216 +1164=400z +1420=Battery +1676=Reg Up 2 +1932=Sub Memory +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],Air Shoes [N] +2700=Mem Data,Right panel,press A +2445=Metagel T +2956=HP+100 +260=RegUP1,45654128 +3212=RegUP2 +3468=HP Memory +2957=Air Spin 2 B +1416=CasBannr +1028=HP Memory +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 e1e835e..4d199fe 100644 --- a/unit1.lfm +++ b/unit1.lfm @@ -1,63 +1,283 @@ object Form1: TForm1 - Left = 802 - Height = 461 - Top = 496 - Width = 548 - BorderStyle = bsSingle - Caption = 'MMBN5M' - ClientHeight = 461 - ClientWidth = 548 + 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.Pitch = fpVariable + Font.Name = 'Liberation Mono' + Font.Pitch = fpFixed Font.Quality = fqDraft + OnClose = FormClose OnCreate = FormCreate - OnDestroy = FormDestroy - LCLVersion = '2.2.6.0' + Position = poScreenCenter + LCLVersion = '3.2.0.0' object room_name_label: TLabel - Left = 120 - Height = 21 + AnchorSideLeft.Control = Splitter2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Owner + Left = 231 + Height = 18 Top = 8 - Width = 157 - Caption = 'Room #0: Lan''s Room ' + Width = 320 + BorderSpacing.Top = 8 + Caption = 'Run the game, then press "Start"' Color = clGradientInactiveCaption - Font.CharSet = ANSI_CHARSET - Font.Height = -16 - Font.Pitch = fpFixed - Font.Quality = fqCleartype ParentColor = False - ParentFont = False Transparent = False end object map_image: TImage - Left = 120 - Height = 400 - Top = 40 - Width = 400 + 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 = 232 + Height = 436 + Top = 34 + Width = 552 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Left = 1 + BorderSpacing.Top = 8 + BorderSpacing.Right = 8 + BorderSpacing.Bottom = 8 Center = True OnPaint = map_imagePaint Proportional = True Stretch = True end - object start_stop_button: TSpeedButton - Left = 8 - Height = 30 - Top = 8 - Width = 100 - AllowAllUp = True - 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 - Left = 8 - Height = 30 - Top = 40 - Width = 100 - Caption = 'Edit Room' - OnClick = edit_room_buttonClick - TabOrder = 0 + 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 Splitter2: TSplitter + Left = 227 + Height = 478 + Top = 0 + Width = 4 + OnMoved = Splitter2Moved + ResizeStyle = rsLine + end + object langbox: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrBottom + 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 + ItemHeight = 18 + ItemIndex = 0 + Items.Strings = ( + 'en' + 'ru' + ) + ReadOnly = True + Style = csDropDownList + TabOrder = 3 + 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 dc6e3d1..95663b3 100644 --- a/unit1.pas +++ b/unit1.pas @@ -5,211 +5,458 @@ unit Unit1; interface uses - Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, - Buttons, IniFiles; +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; + type - { TForm1 } +{ TForm1 } - TForm1 = class(TForm) - edit_room_button: TButton; - map_image: TImage; - room_name_label: TLabel; - start_stop_button: TSpeedButton; - Timer1: TTimer; - procedure edit_room_buttonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure map_imagePaint(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; + +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 Windows, JwaTlHelp32; +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; +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; +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(); -end; - -procedure TForm1.FormDestroy(Sender: TObject); -begin - // close the process on exit if it's been opened - if start_stop_button.Down = True then - begin - Timer1.Enabled := False; - CloseHandle(hProcess); - end; - // free additionally created objects - ROOMS.Free; - process_list.Free; -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.start_stop_buttonClick(Sender: TObject); +procedure TForm1.FormCreate ( Sender :TObject ); var - i: integer; - ProcID: DWORD; - + i :INTEGER; 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; + 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.Timer1Timer(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 - room_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 ); - if hProcess <> 0 then - begin - try - if ReadMemory(hProcess, Pointer($80205FF4), room, SizeOf(room)) then - begin - if last_room <> room then - begin - last_room := room; - room_name := ROOMS.ReadString('Rooms', IntToStr(room), 'Unknown'); - room_name_label.Caption := 'Room #' + IntToStr(room) + ': ' + room_name; - if FileExists('images/' + room_name + '.png') then - begin - map_image.Picture.LoadFromFile('images/' + room_name + '.png'); - end - else - begin - map_image.Picture.Clear; - end; - end; - end - else - begin - room_name_label.Caption := 'error'; - end; - except - on edit_room_button: Exception do - room_name_label.Caption := 'error'; - end; - end; - + end; + spoils_listbox.ClearSelection; end; -procedure TForm1.edit_room_buttonClick(Sender: TObject); + +procedure TForm1.plus_spoilClick ( Sender :TObject ); var - new_room_name: string; + new_spoil_name :STRING = ''; + Txt :STRING = ''; + i :INTEGER; begin - if InputQuery('Editing Room # ' + IntToStr(room), 'Enter this Room''s name', - new_room_name) then - begin - ROOMS.WriteString('Rooms', IntToStr(room), new_room_name); - end; + 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.Splitter2Moved ( Sender :TObject ); +begin + plus_spoil.Width := Round ( Panel1.Width/2 ) -12; +end; + + +procedure TForm1.spoils_listboxDblClick ( Sender :TObject ); +var + new_spoil_name :STRING; +var + Txt :STRING = ''; + i :INTEGER; +begin + 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; + + +procedure TForm1.start_stop_buttonClick ( Sender :TObject ); +var + i :INTEGER; + ProcID :DWORD; + +begin + 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 ); +var + room_number_size :SMALLINT; +begin + 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; + +end; + + +procedure TForm1.edit_room_buttonClick ( Sender :TObject ); +var + new_room_name :STRING = ''; +begin + 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.