<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mike/sst, branch v0.9-BETA</title>
<subtitle>Source Speedrun Tools: practice tools and handy features for Source Engine games</subtitle>
<id>https://git.woz.blue/mike/sst/atom?h=v0.9-BETA</id>
<link rel='self' href='https://git.woz.blue/mike/sst/atom?h=v0.9-BETA'/>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/'/>
<updated>2025-05-07T22:06:15+00:00</updated>
<entry>
<title>Set the zip dates for the 0.9 release!</title>
<updated>2025-05-07T22:06:15+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-05-07T22:06:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=85ff698e4bfea4da42acfa66df2b30bb3be44a11'/>
<id>urn:sha1:85ff698e4bfea4da42acfa66df2b30bb3be44a11</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Improve the memcpy/memcmp functions a bit</title>
<updated>2025-05-04T23:26:34+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-05-04T23:26:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=618a1d60ddc98bf41b7a3e8216746d1eff827110'/>
<id>urn:sha1:618a1d60ddc98bf41b7a3e8216746d1eff827110</id>
<content type='text'>
I think memcpy might have been returning the wrong thing before,
actually, but I guess it didn't matter in practice. Who the hell uses
the return value from memcpy?
</content>
</entry>
<entry>
<title>Fix some stale comments in build scripts</title>
<updated>2025-05-04T23:26:04+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-05-04T23:26:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=32971d95964d4f18c6aaae01464d30a14ecd7b92'/>
<id>urn:sha1:32971d95964d4f18c6aaae01464d30a14ecd7b92</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Explain my code style (in far too many words)</title>
<updated>2025-05-01T20:40:32+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-05-01T20:40:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=387b43f065703dcf6bbd518ccc52ad67165cd56e'/>
<id>urn:sha1:387b43f065703dcf6bbd518ccc52ad67165cd56e</id>
<content type='text'>
Mandatory reading for new contributors just kidding. But maybe someone
will find this interesting. I tried to make it at least kind of funny if
nothing else. For people who don't want to read the whole thing, the
examples should be possible to skim through quickly to get a rough idea.

The licence is a contrived ISC variant because it seemed weird to call
the documentation "software" even though I guess technically it is.
Since it's contrived already, I went ahead and shortened the disclaimer.
The disclaimers on these things are always way too long, and I'm not as
worried about having a familiar, standard licence in an ancillary
non-code file like this, especially one that isn't really subject to
contributions from anyone else. I reckon this will be the copyright
licence for any other substantial documentation files going forward.
</content>
</entry>
<entry>
<title>Add some useful info printouts to debug builds</title>
<updated>2025-04-30T21:55:05+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-30T21:55:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=7b7cb45f7c1ed307b585ab3506dc57854ec076a6'/>
<id>urn:sha1:7b7cb45f7c1ed307b585ab3506dc57854ec076a6</id>
<content type='text'>
Specifically when building in debug mode, we now:

* Display all features on load, including skipped and internal ones,
  sorted by internal name instead of display name.

* Print the names of all matched gametype tags after the feature list.

* Add an sst_dbg_getcmdcb command to get the address of a command
  callback for quick breakpoint insertion or Ghidra lookup.

* Add an sst_dbg_sendtables command to dump out the full ServerClass
  tree to help get names for entprops.txt. Note: this output is very
  long so you'll likely need to log console output to a file to be able
  to read it all.

There's a bunch of developer experience and debug help stuff I want to
get done eventually. This is just a very small piece, but it's a start.
</content>
</entry>
<entry>
<title>Fix all the brokenness I introduced to l4daddon</title>
<updated>2025-04-30T21:37:45+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-30T21:37:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=45a21380fcc2c9a0b9035814ab0f8cc38165bb64'/>
<id>urn:sha1:45a21380fcc2c9a0b9035814ab0f8cc38165bb64</id>
<content type='text'>
With apologies to Hayden, whose code was mostly fine until my quest to
make it neater ended up bungling stuff. I wanted it reviewed and tested
before pushing it anywhere public but people have limited free time -
how dare they!!!! - and at some point I kind of impatiently just sent
it because I had a pile of unrelated changes I didn't want to untangle.

I didn't really know how to reproduce the bad performance myself to test
the fix here properly, so I was kind of unfairly relying on him to do
it, even though he'd already tested his own code and made sure it worked
*before* I decided to break it.

My bad.

Don't worry though, I was never actually going actually release SST in
such a broken state. I mean, I have released it in worse states before,
but I wasn't gonna do it on this occasion. :^)

Now this is definitely done correctly, I think, and I've done yet
another pass over the comments, I'm pretty confident that 0.9 is around
the corner. Just a few more commits of entirely non-user facing stuff to
get out of the way first...
</content>
</entry>
<entry>
<title>Add type-safety to virtual calls and accessors</title>
<updated>2025-04-17T19:02:18+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-17T00:39:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=8a669bc96ffdb9d0f6f54e464da11e3375c80a55'/>
<id>urn:sha1:8a669bc96ffdb9d0f6f54e464da11e3375c80a55</id>
<content type='text'>
This probably should have been the design from the start.

It's still possible to use void pointers, and this is done in a couple
of places for simplicity, but wherever possible, we have actual structs
for things now.

Additionally, in places where vtables are fiddled with, e.g. vtable
hooks, we have actual struct definitions with vtable pointers so there's
need for pointer-casting horror.
</content>
</entry>
<entry>
<title>Add missing REQUIRE_GAMEDATA things to demorec</title>
<updated>2025-04-16T20:31:20+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-16T20:28:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=0b40d4d9ea1cbfbb92795e0d6f26cf108f2dec5f'/>
<id>urn:sha1:0b40d4d9ea1cbfbb92795e0d6f26cf108f2dec5f</id>
<content type='text'>
These gamedata entries are always available, but there's no reason not
to check for them in case that changes in future. As-is now, the checks
will be trivial for the compiler to optimise out.
</content>
</entry>
<entry>
<title>Remove iflush() from inline hooking code</title>
<updated>2025-04-16T20:31:20+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-16T19:58:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=7dcdcd0f62c7c103148b17aed8376a457aad6d8a'/>
<id>urn:sha1:7dcdcd0f62c7c103148b17aed8376a457aad6d8a</id>
<content type='text'>
I had this hunch that Intel's strong memory model wouldn't actually
require anything like this, and some cursory research suggests this is
correct even across threads, or at least definitely within the same
thread which is what we care about.

I kind of don't know why FlushInstructionCache() even exists in that
case. Maybe it's for other architectures or maybe it's just for the
benefit of debuggers. Microsoft's documentation helpfully asserts that
it is necessary to call it even though it isn't, and doesn't elaborate
further. Of course.
</content>
</entry>
<entry>
<title>Rework API for inline hooking</title>
<updated>2025-04-16T20:31:20+00:00</updated>
<author>
<name>Michael Smith</name>
<email>mikesmiffy128@gmail.com</email>
</author>
<published>2025-04-16T01:13:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.woz.blue/mike/sst/commit/?id=4fddfa831d2a33ab3eee7ceb5f181c82d5aa78d2'/>
<id>urn:sha1:4fddfa831d2a33ab3eee7ceb5f181c82d5aa78d2</id>
<content type='text'>
This both simplifies and complicates things, but probably hopefully
maybe simplifies things overall. Certainly in cases like the L4D1 demo
thing where there's 3 inline hooks at once, it seems simpler to be able
to batch the fallible stuff to avoid rollbacks. In cases where you only
need one hook, it's a bit more verbose, but what can you do.

Thanks bill for discussing this with me pretty exhaustively and giving a
lot of good input.

I think both of us still kind of hate it actually.
</content>
</entry>
</feed>
