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
{{ message }}
This repository was archived by the owner on May 22, 2025. It is now read-only.
Copy file name to clipboardExpand all lines: README.md
+2-21Lines changed: 2 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,8 @@
1
1
# BYOND extools
2
2
External tools for BYOND. Used to fiddle with the game engine's internals.
3
3
4
-
# This project is archived
5
-
Extools will no longer be receiving updates. I recommend switching to Rust-based [Auxtools](https://github.com/willox/auxtools), which I contribute to as well.
6
-
<br/><br/><br/><br/>
7
-
8
4
<table>
9
-
<tr><tdalign="right"valign="middle">Find an action run with an artifact and download it</td></tr>
@@ -18,28 +14,12 @@ Here are the modules currently available (not counting the core). Scroll to the
18
14
#### Proc hooking
19
15
Not exactly a module, but still useful. Hooking allows you to reimplement procs in C++, which usually run much faster, especially if the hooked proc is, for example, just math operations.
20
16
21
-
#### Debug server
22
-
Interfaces with debugger frontends, providing various information and managing breakpoints.
23
-
[SpacemanDMM](https://github.com/SpaceManiac/SpacemanDMM) by SpaceManiac enables line-by-line debugging and live viewing of variables. More to come.
24
-
Steamport's [Somnium](https://github.com/steamp0rt/somnium) is currently non-functional, but will allow debugging of low-level bytecode.
25
-
26
17
#### TFFI
27
18
Threaded FFI for BYOND. Automagically threads off all DLL calls and prevents them from locking up the game until they return. You may use a Promise datum, pass a callback (global or an object) or simply sleep until the call returns.
28
19
29
20
#### Optimizer
30
21
Currently a proof of concept. The only optimization available is inlining - the optimizer will go through all procs and attempt to inline global proc calls to eliminate call overhead. At the time of writing optimizing takes an incredibly long time to finish, which makes it infeasible to use.
31
22
32
-
#### Memory Profiler
33
-
34
-
Counts all soft-code objects currently instantiated in the game world and dumps
35
-
these numbers into a JSON file of your choosing for later inspection. The code
36
-
also attempts to approximate the number of bytes that each object type takes
37
-
up, though the accuracy is not guaranteed.
38
-
39
-
To use, simply invoke `dump_memory_usage("myfile.json")` with the appropriate
40
-
`call()()` syntax and away you go. This will halt the server for a moment as the
41
-
counting is done.
42
-
43
23
#### Maptick
44
24
Hooks an internal BYOND function which sends map updates to players, and measures time taken to execute it. The result is written to a global variable called `internal_tick_usage`. SS13 servers can use this information to adjust how much of a tick running subsystems can take, which reduces lag spikes perceived by players.
45
25
@@ -59,6 +39,7 @@ These modules are planned to be included in the future.
59
39
- Proxy objects: Forward variable reads and writes to C++.
60
40
- Websockets: Send and receive data using the websocket protocol.
61
41
- Lua: Allows writing lua scripts that replace builtin procs. Mostly for messing about.
42
+
-~~Optimizer: Optimizes bytecode and inlines procs into each other to avoid call overhead.~~
62
43
63
44
## I want to use this!
64
45
Download the DLL and .dm file from [Releases](https://github.com/MCHSL/extools/releases). Place the DLL next to your DMB and plop the .dm somewhere where you can easily tick it. Afterwards, add `extools_initialize()` to `world/New()` or equivalent. To load modules, call `<module>_initialize()`, for example `tffi_initialize()`. Module initialization functions must be called after `extools_initialize()`!
0 commit comments