Splatlogger 1.2.4__tar.gz → 1.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {splatlogger-1.2.4/src/Splatlogger.egg-info → splatlogger-1.3.1}/PKG-INFO +12 -20
  2. {splatlogger-1.2.4 → splatlogger-1.3.1}/README.md +11 -19
  3. {splatlogger-1.2.4 → splatlogger-1.3.1}/pyproject.toml +1 -1
  4. {splatlogger-1.2.4 → splatlogger-1.3.1/src/Splatlogger.egg-info}/PKG-INFO +12 -20
  5. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/__init__.py +1 -1
  6. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/__main__.py +0 -1
  7. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/cemu_gecko.py +0 -2
  8. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/cli.py +17 -26
  9. splatlogger-1.3.1/src/splatlogger/enums.py +137 -0
  10. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/match_logger.py +167 -114
  11. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/resources/names.json +3 -4
  12. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/splatlogger.py +68 -44
  13. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/tcpgecko.py +9 -0
  14. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/tuples.py +19 -1
  15. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/utility_functions.py +55 -37
  16. splatlogger-1.2.4/src/splatlogger/enums.py +0 -81
  17. {splatlogger-1.2.4 → splatlogger-1.3.1}/LICENSE +0 -0
  18. {splatlogger-1.2.4 → splatlogger-1.3.1}/setup.cfg +0 -0
  19. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/Splatlogger.egg-info/SOURCES.txt +0 -0
  20. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/Splatlogger.egg-info/dependency_links.txt +0 -0
  21. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/Splatlogger.egg-info/entry_points.txt +0 -0
  22. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/Splatlogger.egg-info/requires.txt +0 -0
  23. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/Splatlogger.egg-info/top_level.txt +0 -0
  24. {splatlogger-1.2.4 → splatlogger-1.3.1}/src/splatlogger/errors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Splatlogger
3
- Version: 1.2.4
3
+ Version: 1.3.1
4
4
  Summary: PID Grabber and player/match information logging tool for Splatoon
5
5
  Author-email: Shadow Doggo <shadowdoggo@protonmail.com>
6
6
  License-Expression: MIT
@@ -50,8 +50,13 @@ or any other app with the TCPGecko server.
50
50
  On Aroma, use [TCPGecko-Plugin](https://github.com/PinkDiamondTeam/TCPGecko-Plugin).
51
51
 
52
52
  ## Usage
53
+ Splatlogger uses a command-line interface (CLI), you will need to run it within a terminal.
54
+
55
+ On Windows, it's best to use [Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install)
56
+ or [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows), as the Command Prompt can't properly display certain characters.
57
+
53
58
  ### Running the executable
54
- Windows and Linux executables are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
59
+ Executables for Windows, Linux and macOS are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
55
60
 
56
61
  Run Splatlogger with:
57
62
  ```
@@ -60,9 +65,9 @@ path/to/Splatlogger-executable --ip IP [options] / --cemu [PID] [options]
60
65
  Use the `--ip` target where `IP` is your Wii U's LAN IP address,
61
66
  or the `-c` / `--cemu` target to enable Cemu mode where `PID` is the process ID of the Cemu process (optional, should be detected automatically).
62
67
 
63
- Open a command prompt/terminal window and drag the executable into it to automatically get the path.
68
+ Drag the executable into the terminal window to automatically get the path.
64
69
 
65
- On Linux, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
70
+ On Linux and macOS, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
66
71
 
67
72
  ### Running with Python
68
73
  You can install Splatlogger as a package from PyPI:
@@ -103,7 +108,7 @@ python -m splatlogger --ip IP [options] / --cemu [PID] [options]
103
108
  - `none` - Don't create a log file.
104
109
  - `standard` - Log only basic player information, the same as what's printed to the console (default).
105
110
  - `extended` - Log all player information and additional match information.
106
- - `stats` - Same as above with the addition of player stats (points, K/D, win/lose) and disconnect detection.
111
+ - `full` - Same as above with the addition of player stats (points, K/D, win/lose), disconnect detection, and match results.
107
112
  Requires the match to end to finish logging; if it ends abruptly, the stats won't be logged.
108
113
 
109
114
  - `--service` - Choose which network service you're using.
@@ -118,11 +123,6 @@ Also allows you to view information about the lobby/gathering while on the match
118
123
 
119
124
  (These options don't affect anything if the log level is set to `none`)
120
125
 
121
- - `--stack Address (in hex)` - (Cemu only, optional) Beginning address of the stack space for Default Core 1 (Debug > View PPC threads).
122
- Only required for logging stats. If the default values don't work, you'll need to specify this manually.
123
-
124
- <img src="assets/stack.png" width="600" alt="(example)">
125
-
126
126
  - `-sl`, `--single-log` - Enable single log mode. When enabled, only one log file will be created for each day and logging will resume in that file
127
127
  instead of creating a new one for each logging session (default behavior for `--auto latest`).
128
128
 
@@ -150,7 +150,7 @@ ip = "192.168.1.50"
150
150
  # Target network service: "pretendo", "altendo", or "none"
151
151
  service = "pretendo"
152
152
 
153
- # Log level: "standard", "extended", "stats", or "none"
153
+ # Log level: "standard", "extended", "full", or "none"
154
154
  log_level = "extended"
155
155
 
156
156
  # Auto logging: "all", "latest" (omit for manual logging)
@@ -169,9 +169,6 @@ single_log = true
169
169
  # Cemu process ID (set to -1 to find automatically)
170
170
  # Uncomment this option to enable Cemu mode
171
171
  # cemu = -1
172
-
173
- # Beginning address of the stack space for Default Core 1 (set only if stat logging doesn't work by default)
174
- # stack = "0xE101440"
175
172
  ```
176
173
 
177
174
  ### Troubleshooting
@@ -182,9 +179,6 @@ If it keeps failing to connect, make sure that:
182
179
  - Port 7331 isn't blocked by the firewall.
183
180
  - TCPGecko is running.
184
181
 
185
- There's an issue with TCPGecko where opening an applet such as the Friend List and going back into the game causes memory
186
- reads to fail. If auto-logging is enabled, you'll need to restart Splatlogger after returning to the game.
187
-
188
182
  For Cemu users on Linux, if you have ptrace protection enabled, you'll need to run Python as root.
189
183
  In that case, it's best to run the package from source or use the executable instead.
190
184
 
@@ -208,9 +202,7 @@ python scripts/build.py [--upx-dir path/to/upx]
208
202
  ```
209
203
  use `--upx-dir` if you're using UPX to compress the executable.
210
204
 
211
- You can also use `build.bat` on Windows and `build.sh` on Linux to handle everything automatically.
212
-
213
- (No builds or build script are provided for macOS as I don't have a Mac to test, and my attempts at virtualizing macOS have been unsuccessful.)
205
+ You can also use `build.bat` on Windows and `build.sh` on Linux/macOS to handle everything automatically.
214
206
 
215
207
  ## Acknowledgments
216
208
  - NWPlayer123 for the reference implementation of a TCPGecko library.
@@ -25,8 +25,13 @@ or any other app with the TCPGecko server.
25
25
  On Aroma, use [TCPGecko-Plugin](https://github.com/PinkDiamondTeam/TCPGecko-Plugin).
26
26
 
27
27
  ## Usage
28
+ Splatlogger uses a command-line interface (CLI), you will need to run it within a terminal.
29
+
30
+ On Windows, it's best to use [Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install)
31
+ or [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows), as the Command Prompt can't properly display certain characters.
32
+
28
33
  ### Running the executable
29
- Windows and Linux executables are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
34
+ Executables for Windows, Linux and macOS are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
30
35
 
31
36
  Run Splatlogger with:
32
37
  ```
@@ -35,9 +40,9 @@ path/to/Splatlogger-executable --ip IP [options] / --cemu [PID] [options]
35
40
  Use the `--ip` target where `IP` is your Wii U's LAN IP address,
36
41
  or the `-c` / `--cemu` target to enable Cemu mode where `PID` is the process ID of the Cemu process (optional, should be detected automatically).
37
42
 
38
- Open a command prompt/terminal window and drag the executable into it to automatically get the path.
43
+ Drag the executable into the terminal window to automatically get the path.
39
44
 
40
- On Linux, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
45
+ On Linux and macOS, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
41
46
 
42
47
  ### Running with Python
43
48
  You can install Splatlogger as a package from PyPI:
@@ -78,7 +83,7 @@ python -m splatlogger --ip IP [options] / --cemu [PID] [options]
78
83
  - `none` - Don't create a log file.
79
84
  - `standard` - Log only basic player information, the same as what's printed to the console (default).
80
85
  - `extended` - Log all player information and additional match information.
81
- - `stats` - Same as above with the addition of player stats (points, K/D, win/lose) and disconnect detection.
86
+ - `full` - Same as above with the addition of player stats (points, K/D, win/lose), disconnect detection, and match results.
82
87
  Requires the match to end to finish logging; if it ends abruptly, the stats won't be logged.
83
88
 
84
89
  - `--service` - Choose which network service you're using.
@@ -93,11 +98,6 @@ Also allows you to view information about the lobby/gathering while on the match
93
98
 
94
99
  (These options don't affect anything if the log level is set to `none`)
95
100
 
96
- - `--stack Address (in hex)` - (Cemu only, optional) Beginning address of the stack space for Default Core 1 (Debug > View PPC threads).
97
- Only required for logging stats. If the default values don't work, you'll need to specify this manually.
98
-
99
- <img src="assets/stack.png" width="600" alt="(example)">
100
-
101
101
  - `-sl`, `--single-log` - Enable single log mode. When enabled, only one log file will be created for each day and logging will resume in that file
102
102
  instead of creating a new one for each logging session (default behavior for `--auto latest`).
103
103
 
@@ -125,7 +125,7 @@ ip = "192.168.1.50"
125
125
  # Target network service: "pretendo", "altendo", or "none"
126
126
  service = "pretendo"
127
127
 
128
- # Log level: "standard", "extended", "stats", or "none"
128
+ # Log level: "standard", "extended", "full", or "none"
129
129
  log_level = "extended"
130
130
 
131
131
  # Auto logging: "all", "latest" (omit for manual logging)
@@ -144,9 +144,6 @@ single_log = true
144
144
  # Cemu process ID (set to -1 to find automatically)
145
145
  # Uncomment this option to enable Cemu mode
146
146
  # cemu = -1
147
-
148
- # Beginning address of the stack space for Default Core 1 (set only if stat logging doesn't work by default)
149
- # stack = "0xE101440"
150
147
  ```
151
148
 
152
149
  ### Troubleshooting
@@ -157,9 +154,6 @@ If it keeps failing to connect, make sure that:
157
154
  - Port 7331 isn't blocked by the firewall.
158
155
  - TCPGecko is running.
159
156
 
160
- There's an issue with TCPGecko where opening an applet such as the Friend List and going back into the game causes memory
161
- reads to fail. If auto-logging is enabled, you'll need to restart Splatlogger after returning to the game.
162
-
163
157
  For Cemu users on Linux, if you have ptrace protection enabled, you'll need to run Python as root.
164
158
  In that case, it's best to run the package from source or use the executable instead.
165
159
 
@@ -183,9 +177,7 @@ python scripts/build.py [--upx-dir path/to/upx]
183
177
  ```
184
178
  use `--upx-dir` if you're using UPX to compress the executable.
185
179
 
186
- You can also use `build.bat` on Windows and `build.sh` on Linux to handle everything automatically.
187
-
188
- (No builds or build script are provided for macOS as I don't have a Mac to test, and my attempts at virtualizing macOS have been unsuccessful.)
180
+ You can also use `build.bat` on Windows and `build.sh` on Linux/macOS to handle everything automatically.
189
181
 
190
182
  ## Acknowledgments
191
183
  - NWPlayer123 for the reference implementation of a TCPGecko library.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "Splatlogger"
7
- version = "1.2.4"
7
+ version = "1.3.1"
8
8
  authors = [
9
9
  { name="Shadow Doggo", email="shadowdoggo@protonmail.com" }
10
10
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Splatlogger
3
- Version: 1.2.4
3
+ Version: 1.3.1
4
4
  Summary: PID Grabber and player/match information logging tool for Splatoon
5
5
  Author-email: Shadow Doggo <shadowdoggo@protonmail.com>
6
6
  License-Expression: MIT
@@ -50,8 +50,13 @@ or any other app with the TCPGecko server.
50
50
  On Aroma, use [TCPGecko-Plugin](https://github.com/PinkDiamondTeam/TCPGecko-Plugin).
51
51
 
52
52
  ## Usage
53
+ Splatlogger uses a command-line interface (CLI), you will need to run it within a terminal.
54
+
55
+ On Windows, it's best to use [Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install)
56
+ or [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows), as the Command Prompt can't properly display certain characters.
57
+
53
58
  ### Running the executable
54
- Windows and Linux executables are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
59
+ Executables for Windows, Linux and macOS are provided on the [Releases](https://codeberg.org/ShadowDoggo/Splatlogger/releases/latest) page.
55
60
 
56
61
  Run Splatlogger with:
57
62
  ```
@@ -60,9 +65,9 @@ path/to/Splatlogger-executable --ip IP [options] / --cemu [PID] [options]
60
65
  Use the `--ip` target where `IP` is your Wii U's LAN IP address,
61
66
  or the `-c` / `--cemu` target to enable Cemu mode where `PID` is the process ID of the Cemu process (optional, should be detected automatically).
62
67
 
63
- Open a command prompt/terminal window and drag the executable into it to automatically get the path.
68
+ Drag the executable into the terminal window to automatically get the path.
64
69
 
65
- On Linux, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
70
+ On Linux and macOS, you might need to make the file executable first with `chmod +x path/to/Splatlogger-executable`
66
71
 
67
72
  ### Running with Python
68
73
  You can install Splatlogger as a package from PyPI:
@@ -103,7 +108,7 @@ python -m splatlogger --ip IP [options] / --cemu [PID] [options]
103
108
  - `none` - Don't create a log file.
104
109
  - `standard` - Log only basic player information, the same as what's printed to the console (default).
105
110
  - `extended` - Log all player information and additional match information.
106
- - `stats` - Same as above with the addition of player stats (points, K/D, win/lose) and disconnect detection.
111
+ - `full` - Same as above with the addition of player stats (points, K/D, win/lose), disconnect detection, and match results.
107
112
  Requires the match to end to finish logging; if it ends abruptly, the stats won't be logged.
108
113
 
109
114
  - `--service` - Choose which network service you're using.
@@ -118,11 +123,6 @@ Also allows you to view information about the lobby/gathering while on the match
118
123
 
119
124
  (These options don't affect anything if the log level is set to `none`)
120
125
 
121
- - `--stack Address (in hex)` - (Cemu only, optional) Beginning address of the stack space for Default Core 1 (Debug > View PPC threads).
122
- Only required for logging stats. If the default values don't work, you'll need to specify this manually.
123
-
124
- <img src="assets/stack.png" width="600" alt="(example)">
125
-
126
126
  - `-sl`, `--single-log` - Enable single log mode. When enabled, only one log file will be created for each day and logging will resume in that file
127
127
  instead of creating a new one for each logging session (default behavior for `--auto latest`).
128
128
 
@@ -150,7 +150,7 @@ ip = "192.168.1.50"
150
150
  # Target network service: "pretendo", "altendo", or "none"
151
151
  service = "pretendo"
152
152
 
153
- # Log level: "standard", "extended", "stats", or "none"
153
+ # Log level: "standard", "extended", "full", or "none"
154
154
  log_level = "extended"
155
155
 
156
156
  # Auto logging: "all", "latest" (omit for manual logging)
@@ -169,9 +169,6 @@ single_log = true
169
169
  # Cemu process ID (set to -1 to find automatically)
170
170
  # Uncomment this option to enable Cemu mode
171
171
  # cemu = -1
172
-
173
- # Beginning address of the stack space for Default Core 1 (set only if stat logging doesn't work by default)
174
- # stack = "0xE101440"
175
172
  ```
176
173
 
177
174
  ### Troubleshooting
@@ -182,9 +179,6 @@ If it keeps failing to connect, make sure that:
182
179
  - Port 7331 isn't blocked by the firewall.
183
180
  - TCPGecko is running.
184
181
 
185
- There's an issue with TCPGecko where opening an applet such as the Friend List and going back into the game causes memory
186
- reads to fail. If auto-logging is enabled, you'll need to restart Splatlogger after returning to the game.
187
-
188
182
  For Cemu users on Linux, if you have ptrace protection enabled, you'll need to run Python as root.
189
183
  In that case, it's best to run the package from source or use the executable instead.
190
184
 
@@ -208,9 +202,7 @@ python scripts/build.py [--upx-dir path/to/upx]
208
202
  ```
209
203
  use `--upx-dir` if you're using UPX to compress the executable.
210
204
 
211
- You can also use `build.bat` on Windows and `build.sh` on Linux to handle everything automatically.
212
-
213
- (No builds or build script are provided for macOS as I don't have a Mac to test, and my attempts at virtualizing macOS have been unsuccessful.)
205
+ You can also use `build.bat` on Windows and `build.sh` on Linux/macOS to handle everything automatically.
214
206
 
215
207
  ## Acknowledgments
216
208
  - NWPlayer123 for the reference implementation of a TCPGecko library.
@@ -1,2 +1,2 @@
1
- __version__ = "1.2.4"
1
+ __version__ = "1.3.1"
2
2
  __author__ = "Shadow Doggo"
@@ -3,6 +3,5 @@ try:
3
3
  except ImportError:
4
4
  from splatlogger.cli import cli
5
5
 
6
-
7
6
  if __name__ == "__main__":
8
7
  cli()
@@ -74,11 +74,9 @@ class CemuGecko:
74
74
  def resolve_pointer_chain(self, base_address: int, offsets: list[int]) -> int:
75
75
  """Follow a pointer chain to its destination address starting from base_address and applying offsets."""
76
76
  current_address = self.peek32(base_address)
77
-
78
77
  for offset in offsets[:-1]:
79
78
  if current_address == 0:
80
79
  return 0
81
-
82
80
  current_address = self.peek32(current_address + offset)
83
81
 
84
82
  if current_address != 0 and offsets:
@@ -7,7 +7,7 @@ import webbrowser
7
7
  from pathlib import Path
8
8
 
9
9
  import userpaths
10
- from colorama import Fore, Style, just_fix_windows_console
10
+ from colorama import just_fix_windows_console
11
11
  from prompt_toolkit import PromptSession
12
12
  from prompt_toolkit.patch_stdout import patch_stdout
13
13
 
@@ -70,7 +70,7 @@ def command_listener(ctx: AppContext) -> None:
70
70
 
71
71
 
72
72
  def parse_args() -> Options:
73
- parser = argparse.ArgumentParser(description="PID (Principal ID)/Network ID grabber and match logger for Splatoon")
73
+ parser = argparse.ArgumentParser(description="PID Grabber and player/match information logging tool for Splatoon")
74
74
  add_parser_arguments(parser)
75
75
 
76
76
  config_path = Path(userpaths.get_my_documents()) / "Splatlogger/config.toml"
@@ -83,28 +83,25 @@ def parse_args() -> Options:
83
83
  args = parser.parse_args()
84
84
 
85
85
  if not args.ip and not args.cemu:
86
- print(
87
- f'{Fore.YELLOW}No target (IP address or Cemu mode) was provided. Run "splatlogger -h" for help.{Style.RESET_ALL}'
88
- "\nWould you like to open the README? (y/n)")
86
+ uf.print_warning("No target (IP address or Cemu mode) was provided. Run \"splatlogger -h\" for help.\n")
87
+ print("Would you like to open the README? (y/n)")
89
88
  if input().lower() in ("y", "yes"):
90
89
  webbrowser.open("https://codeberg.org/ShadowDoggo/Splatlogger/src/branch/main/README.md")
91
90
  sys.exit()
92
91
 
93
- stack_addr: int | None = None
94
- if args.stack and args.cemu:
95
- try:
96
- stack_addr = int(args.stack, 16)
97
- except ValueError:
98
- uf.print_error("Invalid stack address. Please provide a valid hex value.")
99
- sys.exit()
100
-
101
92
  if args.log_level == "none" and args.silent:
102
- uf.print_warning("You have disabled printing logs to the console as well as creating a log file. "
103
- "Are you sure this wasn't a mistake?\n")
93
+ uf.print_warning("Silent mode is enabled and no log level is set. No information will be logged.\n")
104
94
 
105
- return Options(ip=args.ip, log_level=args.log_level, auto_logging=args.auto in ("all", "latest"),
106
- log_latest=args.auto == "latest", platform="cemu" if args.cemu else "wiiu", cemu_pid=args.cemu,
107
- service=args.service, silent_logging=args.silent, single_log=args.single_log, stack=stack_addr)
95
+ return Options(
96
+ ip=args.ip,
97
+ log_level=args.log_level,
98
+ auto_logging=args.auto in ("all", "latest"),
99
+ log_latest=args.auto == "latest",
100
+ platform="cemu" if args.cemu else "wiiu", cemu_pid=args.cemu,
101
+ service=args.service,
102
+ silent_logging=args.silent,
103
+ single_log=args.single_log
104
+ )
108
105
 
109
106
 
110
107
  def add_parser_arguments(parser: argparse.ArgumentParser) -> None:
@@ -113,15 +110,12 @@ def add_parser_arguments(parser: argparse.ArgumentParser) -> None:
113
110
  help="Switch to Cemu mode (optional: PID of the Cemu process).", metavar="PID",
114
111
  nargs="?", const=-1)
115
112
  parser.add_argument("--log-level", help="Set how much data should be logged (see README).",
116
- choices=["none", "standard", "extended", "stats"], default="standard")
113
+ choices=["none", "standard", "extended", "full"], default="standard")
117
114
  parser.add_argument("--service", help="Choose which network service you're using (Pretendo by default).",
118
115
  choices=["none", "pretendo", "altendo"], default="pretendo")
119
116
  parser.add_argument("-a", "--auto",
120
117
  help="Enable auto logging (see README).",
121
118
  choices=["all", "latest"], nargs="?", const="all")
122
- parser.add_argument("--stack",
123
- help="Beginning address of the stack space for Default Core 1 (Cemu only, see README).",
124
- metavar="Address (in hex)")
125
119
  parser.add_argument("-sl", "--single-log", help="Enable single log file mode.", action="store_true")
126
120
  parser.add_argument("-s", "--silent", help="Disable printing logs to the console.", action="store_true")
127
121
 
@@ -136,7 +130,7 @@ CONFIG_TEMPLATE = """# Splatlogger Configuration
136
130
  # Target network service: "pretendo", "altendo", or "none"
137
131
  # service = "pretendo"
138
132
 
139
- # Log level: "standard", "extended", "stats", or "none"
133
+ # Log level: "standard", "extended", "full", or "none"
140
134
  # log_level = "standard"
141
135
 
142
136
  # Auto logging: "all", "latest" (omit for manual logging)
@@ -155,9 +149,6 @@ CONFIG_TEMPLATE = """# Splatlogger Configuration
155
149
  # Cemu process ID (set to -1 to find automatically)
156
150
  # Uncomment this option to enable Cemu mode
157
151
  # cemu = -1
158
-
159
- # Beginning address of the stack space for Default Core 1 (set only if stat logging doesn't work by default)
160
- # stack = "0xE101440"
161
152
  """
162
153
 
163
154
 
@@ -0,0 +1,137 @@
1
+ # Splatlogger (c) 2025 Shadow Doggo.
2
+
3
+ from enum import Enum, IntEnum
4
+
5
+
6
+ class Pointers(IntEnum):
7
+ SESSION = 0x101E8980
8
+ STATIC_MEM = 0x101DD330
9
+ MAIN_MGR_BASE = 0x101E2814
10
+ MAIN_MGR_VS_GAME = 0x101E4FF8
11
+ FRAMEWORK = 0x101E80A8
12
+
13
+ def convert(self, platform: str) -> int:
14
+ return self.value + Offsets.WIIU_BSS_OFFSET if platform == "wiiu" else self.value
15
+
16
+
17
+ class Offsets(IntEnum):
18
+ WIIU_BSS_OFFSET = 0x503000
19
+ SESSION_ID_IDX = 0xBD
20
+ SESSION_ID = 0xCC
21
+ SESSION_ACTIVE_STATION_LIST_SENTINEL = 0xD8
22
+ SESSION_ACTIVE_STATION_LIST_FIRST_NODE_PTR = 0xDC
23
+ SESSION_ACTIVE_STATION_LIST_COUNT = 0xE0
24
+ SESSION_STATION_NODE_CAPACITY = 0xFC
25
+ STATION_LIST_NODE_PREV_PTR = 0x0
26
+ STATION_LIST_NODE_NEXT_PTR = 0x4
27
+ STATION_LIST_NODE_STATION_ID = 0x8
28
+ STATION_LIST_NODE_SIZE = 0x10
29
+ MAINMGR_PLAYER_MGR_PTR = 0x268
30
+ PLAYERMGR_PLAYER_COUNT = 0x320
31
+ MAINMGR_VS_GAME_SEQ_MGR_VS_GAME_PTR = 0x2A4
32
+ MAINMGR_VS_GAME_PAGE_HANDLER_PTR = 0x2D8
33
+ SEQ_MGR_VS_GAME_FINAL_RESULT_PTR = 0xAA8
34
+ SEQ_MGR_VS_GAME_FINAL_RESULT_SCORE_PTR = 0x294
35
+ SCORE_OBJECT_TEAM_RESULTS_ARY_PTR = 0x10
36
+ TEAM_RESULTS_ARY_SIZE_REGULAR = 0x18
37
+ TEAM_RESULTS_ARY_SIZE_RANKED = 0x2C
38
+ TEAM_RESULTS_PAINT_PC = 0x4
39
+ TEAM_RESULTS_WON = 0xC
40
+ TEAM_RESULTS_RANKED_OBJ_COUNT = 0x10
41
+ TEAM_RESULTS_POINTS = 0x14
42
+ PAGE_HANDLER_RESULTS_PAGE_PTR = 0x118
43
+ PAGE_HANDLER_LEADERBOARD_PAGE_PTR = 0x11C
44
+ RESULTS_PAGE_PHASE = 0x1E8
45
+ LEADERBOARD_PAGE_SLOTS = 0x214
46
+ LEADERBOARD_PAGE_ROWS_PTR = 0x218
47
+ ROWS_PLAYER_STRIDE = 0x20
48
+ ROWS_PLAYER_IDX = 0x0
49
+ ROWS_PLAYER_PLAYERINFO_PTR = 0x4
50
+ ROWS_PLAYER_TEAM = 0x8
51
+ ROWS_PLAYER_POINTS = 0xC
52
+ ROWS_PLAYER_KILLS = 0x10
53
+ ROWS_PLAYER_DEATHS = 0x14
54
+ ROWS_PLAYER_LOCAL_PLAYER_FLAG = 0x1C
55
+ FRAMEWORK_PEER_MGR_PTR = 0x14
56
+ PEER_MGR_ID_MGR_PTR = 0x84
57
+ ID_MGR_SLOT_ARY_PTR = 0x8
58
+ SLOT_SIZE = 0x14
59
+ SLOT_STATE = 0x0
60
+ SLOT_PID = 0x4
61
+ SLOT_PLAYER_ID = 0x12
62
+ STATICMEM_PLAYER_INFO_ARY_PTR = 0x10
63
+ STATICMEM_STAGE = 0x28
64
+ STATICMEM_MATCH_HOUR = 0x234
65
+ STATICMEM_VERSUS_MODE = 0x238
66
+ STATICMEM_VERSUS_RULE = 0x23C
67
+ PLAYER_INFO_NAME = 0x6
68
+ PLAYER_INFO_NAME_LENGTH = 0x20
69
+ PLAYER_INFO_REGION = 0x2C
70
+ PLAYER_INFO_TEAM = 0x33
71
+ PLAYER_INFO_GENDER = 0x37
72
+ PLAYER_INFO_SKIN_TONE = 0x3B
73
+ PLAYER_INFO_EYE_COLOR = 0x3F
74
+ PLAYER_INFO_WEAPON_SET = 0x42
75
+ PLAYER_INFO_MAIN_WEAPON = 0x46
76
+ PLAYER_INFO_SUB_WEAPON = 0x4A
77
+ PLAYER_INFO_SPECIAL_WEAPON = 0x4F
78
+ PLAYER_INFO_SHOES = 0x54
79
+ PLAYER_INFO_CLOTHES = 0x70
80
+ PLAYER_INFO_HEADGEAR = 0x8C
81
+ PLAYER_INFO_INK_TANK = 0xAA
82
+ PLAYER_INFO_LEVEL = 0xAF
83
+ PLAYER_INFO_RANK = 0xB3
84
+ PLAYER_INFO_FEST_TEAM = 0xB7
85
+ PLAYER_INFO_FEST_ID = 0xBA
86
+ PLAYER_INFO_FEST_RANK = 0xBF
87
+ PLAYER_INFO_PID = 0xD0
88
+ PLAYER_INFO_FEST_POWER = 0xD6
89
+ PLAYER_INFO_SIZE = 0xD8
90
+
91
+
92
+ class OffsetChains(Enum):
93
+ ID_MANAGER = (
94
+ Offsets.FRAMEWORK_PEER_MGR_PTR,
95
+ Offsets.PEER_MGR_ID_MGR_PTR,
96
+ 0
97
+ )
98
+ ID_MANAGER_SLOT_ARRAY = (
99
+ Offsets.ID_MGR_SLOT_ARY_PTR,
100
+ 0
101
+ )
102
+ RESULTS_PHASE_ADDRESS = (
103
+ Offsets.MAINMGR_VS_GAME_PAGE_HANDLER_PTR,
104
+ Offsets.PAGE_HANDLER_RESULTS_PAGE_PTR,
105
+ Offsets.RESULTS_PAGE_PHASE
106
+ )
107
+ LEADERBOARD_PAGE = (
108
+ Offsets.MAINMGR_VS_GAME_PAGE_HANDLER_PTR,
109
+ Offsets.PAGE_HANDLER_LEADERBOARD_PAGE_PTR,
110
+ 0
111
+ )
112
+ TEAM_RESULTS_ARRAY = (
113
+ Offsets.MAINMGR_VS_GAME_SEQ_MGR_VS_GAME_PTR,
114
+ Offsets.SEQ_MGR_VS_GAME_FINAL_RESULT_PTR,
115
+ Offsets.SEQ_MGR_VS_GAME_FINAL_RESULT_SCORE_PTR,
116
+ Offsets.SCORE_OBJECT_TEAM_RESULTS_ARY_PTR,
117
+ 0
118
+ )
119
+
120
+ @property
121
+ def offsets(self) -> list[int]:
122
+ return list(self.value)
123
+
124
+
125
+ class VSMode(IntEnum):
126
+ REGULAR = 0
127
+ GACHI = 1
128
+ FEST = 2
129
+ PRIVATE = 3
130
+ PARTY = 4
131
+
132
+
133
+ class VSRule(IntEnum):
134
+ TURF = 0
135
+ RAINMAKER = 1
136
+ ZONES = 2
137
+ TOWER = 3