Native Watcher 2.0.2
Native Watcher 2.0.2 Release Notes
– Updated to support Script Hook V 1.0.1032.1
– You Must still Run It As Administrator
– Make sure your antivirus makes an exception to allow this app to run
Native Watcher 2.0.1 Release Notes
Important Note: This version works much differently than the previous one.
You Must still Run It As Administrator
Filters (filter.txt) are no longer used.
A capture now runs without immediate output to the grid, just a displayed count of how many native calls are getting captured when actively capturing. After clicking Stop Capture, the output will show native calls grouped by calling signature including parameters, and a count of how many times that particular signature was called.
You can view it raw or with the .net calling convention by ticking the “Use Dot Net call signature” checkbox
I think this is a much better way than sifting through many blocks of duplicate sets of calls.
It has been built on .net version 4.6.1
To save the output, select grid rows and then Ctrl-C to put them into the clipboard
It will still kill frame rate while capturing. That is in the hook section which did not change
It would be nice to have a “Call number” column like in the previous version so you could see which ones got called before/after others. If there is enough demand, I can add that back.
Read sections below for how to install
Native Watcher v1.0.2
Have you been wishing to know how a mod works when the source code is not provided?
Are you new to modding and need a jump start on what natives do, what order to call them in, and what parameters to pass?
Native Watcher is a very simple but incredibly useful tool. It outputs all native calls made to ScriptHookV from ANY and all mods.
How does it work?
Native Watcher hooks itself between loaded mods and ScriptHookV. This allows it to capture native call requests before passing them to ScriptHookV. It is essentially “hooking the hooker” so to speak.
Is source code included ?
Yes! My only request is that you credit me, MoMadenU should you incorporate the source code into any of you works. Native Watcher includes unaltered binaries provided by the Nextra Deviare 2 library under GNU LGPL v3. Native Watcher, is deemed as a combined work. Binaries and source for the Deviare 2 library can be found here http://www.nektra.com
Requirements
Native Watcher is built using VS 2013, x64, Dot Net v4.5 so please be sure you have .net 4.5 or > installed
Installation
Extract the entire bin folder contents into a SEPARATE folder, NOT the game or mods folder. You may need to add this folder to your antivirus exception list depending on how picky it is about remote file inspection/execution. BullGuard for example will display a warning first time and you only need to click allow to add it to its list. It may crash the game the very first time but once added it should be OK
Setup
Since Native Watcher is a standalone application, you need to be able to Alt-tab between it and the game. To be able to do this smoothly, go into game SETTINGS -> Graphics -> Screen Type. Select “Windowed Borderless”. Also set “Pause Game On Focus Lost” to Off. Under Audio, set Mute Audio On Focus Loss -> Off This will avoid both the video and audio context switch so that you will be able to give focus to the Native Watcher window while still keeping the game actively running. Once Native Watcher is launched, you can click back to the game and Native Watcher will stay running and continue its output.
Launching
You can launch Native Watcher before launching the game, but you will get the message “Could not attach to GTA5.exe. Is it running?” It is best to wait until story mode is fully loaded before trying or retrying to launch Native Watcher. I have had issues with launching Native Watcher too early causing the network handshake to fail and/or the game to crash. Once story mode is loaded, press Alt-tab to give you back control of the desktop. I wanted to be able to keep the binaries out of the game and mods folder so you will need to launch Native Watcher as Administrator by right clicking NativeWatcher64.exe and choosing Run as Administrator. I’m assuming that since you are building mods, you are an Administrator on your PC. It will work regardless of your environment, but having a second monitor is a real plus since you can keep Native Watcher on the second monitor instead of it disappearing when you have the game in focus.
Using
EDIT: Filtering no longer used. See latest release notes at top
Upon launching, the main window will open showing the output grid, Start/Stop Capture buttons, Clear All button, and The Disable Filtering Check box. Click Start Capture to start receiving all calls to ScriptHookV made by mods you have installed. Click Stop Capture to suspend the capture. Ctrl-c and Ctrl-v work in the grid so you can copy/paste the output at any time. Clear All will remove all output from the grid. Remember to use Alt-tab to switch out of the game and back to Native Watcher when setting up a capture run.
EDIT: Filtering no longer used. See latest release notes at topFiltering
The file filter.txt located in the bin folder is critical to the success of capturing what you want and more importantly what you don’t want. Any time a mod is displaying a menu, it is calling ScriptHookV on every OnTick event. Without filtering, captured output would fill the grid instantly with thousands of calls. filter.txt has most of the menu natives in it already so if you start capturing with only a mod menu showing, you may not see any output until you do something like spawn a vehicle.
The Disable Filtering check box when checked will suspend all filters while capturing. This comes in handy when you want to get a quick burst that will show everything currently getting called. I have found bugs in mods using this feature where entities that are no longer in use are still getting polled and/or updated and never get removed until the game is restarted
You can edit the filter.txt file at any time. Click Stop Capture and then Start Capture to apply your changes. You don’t have to restart Native Watcher for changes to take effect.
Know Issues/Limitations
EDIT: Parameter values have been fixed. The method for getting return values is too unstable right now so I have omitted them. Not a big deal because most of the values returned will be shown as parameters in subsequent native calls
When you are capturing, frame rates are going to drop dramatically even with filtering in place. Even though I’m using a fully async concurrent queue, interop marshalling is a real time hog. Simply remember to stop the capture before resuming gameplay. Native Watcher will unhook and frame rates will return to normal.
Change Log
v2.0.1 – No longer uses filter. Groups calls by their full signature including the parameters passed. The capture will not output to the grid until capture is stopped
v1.0.2 – Parameter values fix. Added Disable filtering check box
v1.0.1 – Initial Release