You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+19-1Lines changed: 19 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,9 @@ The author of this library does not condone any use of this code for any purpose
14
14
**Note:**
15
15
It is recommended that you download python from the [official site](https://www.python.org/downloads) as the windows store version may have issues, as well as the managed python which [uv](https://docs.astral.sh/uv/) installs.
16
16
17
+
**Note:**
18
+
Python 3.14 is not yet supported. This will come in time but requires some changes to a dependency in pyMHF.
19
+
17
20
The recommended way to install NMS.py is to simply run `python -m pip install nmspy`. This will install NMS.py and its' dependency [`pyMHF`](https://github.com/monkeyman192/pyMHF) into your system python. You can of course install it in a venv or as a dependency using uv if you prefer.
18
21
19
22
## Usage
@@ -34,7 +37,22 @@ If you want to stop NMS, you can press `ctrl + C` in the window you started the
34
37
35
38
Currently the best way to see how to write a mod is to look at the `example_mods` folder, as well as looking at the [pyMHF docs](https://monkeyman192.github.io/pyMHF/) which has comprehensive details on how to use pyMHF.
36
39
37
-
### Credits
40
+
## Contributing
41
+
42
+
NMS.py can always be better! If you are interested in improving it, the best way to do so is to either make mods using it, or, if you have reverse engineering skills, you can contribute either new functions or new field offsets.
43
+
44
+
### Adding new functions to hook
45
+
46
+
To add a new function to hook you need to add the details to `tools/data.json` as well as the `nmspy/data/types.py` file.
47
+
The data for these can generally be found by comparing the structure of the function in the latest exe to either the mac binary or the 4.13 binary.
48
+
It is recommended to use either [IDA Fusion](https://github.com/senator715/IDA-Fusion) or [SigmakerEX](https://github.com/kweatherman/sigmakerex) for IDA or some other plugin for any other disassembler to get the unique byte pattern for the function you are providing.
49
+
50
+
### Adding new struct fields
51
+
52
+
This is a bit trickier and will often involve a good amount of reverse engineering of the exe, comparing the data to the 4.13 binary as well as potentially the mac binary.
53
+
It is best if a comment is made above the added field so that it's possible to find it again when the game updates so that it's possible to check if the offset has changed.
54
+
55
+
## Credits
38
56
39
57
Thanks to the developers of minhook, cyminhook and pymem, all of which are instrumental in making this framework possible.
0 commit comments