Age | Commit message (Collapse) | Author |
|
|
|
|
|
Thanks Evan Lin for doing the hard RE work to figure out the necessary
patch - I just reimplemented that here in about the dumbest way
possible.
|
|
This removes the horrible janky old KeyValues parser and replaces it
with a couple of trivial ad-hoc text parsers. In doing so, make the
format of the actual gamedata files more human-friendly too.
We also gain support for nested SendTables in mkentprops, which are
required to get at various things like player velocity. And, the actual
string matching is made more efficient (or, at least, more scalable) by
way of a cool radix tree thing which generates a bunch of switch cases
on distinct characters.
|
|
This wasn't woz's fault - I did some wrangling of his code and
introduced this woopsy without noticing.
Thanks to aciidz also, for pointing it out recently.
Not touching the copyright years because it's such a stupidly trivial
thing - I can't really claim to have done anything substantial here.
|
|
My new programming style is branch hints. All non-confusing branches
must be hinted when I can be bothered. It's faster, sometimes, maybe.
Also, start trying to use more signed sizes in at least some of the
places where it makes sense. Unsigned sizes are surprisingly
error-prone!
|
|
- As much as possible avoid dragging system headers into translation
units. This should avoid namespace pollution and, hopefully, speed up
builds a little bit.
- Avoid leaning on the UCRT so much on Windows - prefer native win32
calls and native file handles except where doing so is inconvenient
(in particular, for stat(), which we might try and replace later).
- Also, switch from SystemFunction036 to ProcessPrng on Windows. This
requires us to generate a stub for bcryptprimitives.dll because
Microsoft haven't bothered to provide a link library, but the function
is better-documented and seems to be a more direct under-the-hood call
as well. Apparently it's what's used by the major web browsers these
days, which seems like a good indication it's stable and trusted.
- Lastly, remove a bunch of functions and macros and stuff that weren't
actually being used. It seems good to try and keep the scope of
OS-dependent stuff relatively contained and only add to it when
actually required.
|
|
|
|
The tf_arena_max_streak check turns out not to work on autoload since
the client isn't loaded yet so the cvar doesn't exist yet. Using the
server-side cvar tf_escort_score_rate appears to do for now.
Also bump the zip date again since I'm doing this after midnight :^)
|
|
This isn't perfect logic - the standard crosshair has a lot more cases
where it's not displayed - but it's better than nothing and avoids
looking stupid as often.
In the process, also fix the IConVar virtual table being one entry too
small, which somehow wasn't a problem until it led to vtidx_IsInGame
here getting clobbered and causing hard-to-debug crashes. Woopsy!
|
|
|
|
|
|
|
|
I've resisted doing this for a long time but it's getting to the point
where blocking a release indefinitely is a real problem, and this
satisfies the original request from some leaderboard people to just make
SST identifiable in some way or another. It means the demo stuff can
happen at whatever pace it happens at and other stuff can happen
independently. Less stress and sadness.
Of course, it'll only be kept in as long as required, but there'll be
no rush to get rid of it for any particular release either.
|
|
Bill suggested using abi.h for this. Not sure if it's 100% ideal to need
to pull in the whole header for this one macro but it's arguably better
than most alternatives and definitely better than just continuing to
duplicate it ad nauseam.
|
|
|
|
Woops! Thanks Uncrafted for reporting this.
|
|
|
|
|
|
|
|
Suggested by bill. Having something semantically pointer-sized that's
only ever used for stuff that's always 32-bit doesn't really make sense.
Note that I intentionally did not add a copyright line for myself in
hud.c because, I mean, come on. I'll just say I waive any claim to that
tiny trivial change.
|
|
|
|
Currently only supports Orange Box and Left 4 Dead branches. There's
quite a large amount of gamedata involved in making this work, and
figuring it out for the likes of Portal 2 doesn't seem like a major
priority at the moment.
|
|
Avoids spurious and confusing fast-forward behaviour in the event of
resetting a run, then disconnecting early and deciding to load some
other map.
Also fixes a stupid typo (s/propand/propane/).
|
|
|
|
This complicates things greatly! Therefore, it's a separate commit to
the baseline fast-forward functionality, to keep the confusing stuff
relatively contained.
|
|
Also done with quite a lot of RE help from bill - thanks again!
|
|
This fixes a crash in later L4D2 versions caused by the fact we were
unknowingly hooking Key_Event already. Now we hook it all the time on
purpose.
|
|
Thanks bill for spotting this issue. It was causing crashes on unload,
which is obviously no good.
|
|
This will be mostly useful for skipping cutscenes in Left 4 Dead games.
It may work in other games, but probably won't really be as useful.
Committer's note: this was adapted a fair bit from woz's original code,
hence the joint copyright, but he did most the hard work of figuring out
how to get this deep into the engine's call stack. Thanks!
bill also provided a fair bit of help figuring out missing gamedata and
fixing compatibility with L4D2 2147 and later. Also thanks!
|
|
|
|
Because why not.
|
|
|
|
This will save users having to install the VS runtime in order to load
the plugin. Turns out there was very little to implement to make this
work.
Turning off stack probing might cause spooky outcomes further down the
line but we'll burn that bridge when we get there.
|
|
Reminder not to actually use any of the code I write until it's at least
been included in a few releases of something. :^)
|
|
Nothing really works yet, but at least test.h and fastspin are fixed and
some of the issues with RTTI and libdl and stuff are maybe kind of
sorted, subject to more testing later.
The main issue now seems to be the cvar interface not quite lining up
and crashing pretty much immediately. That'll probably take a lot more
debugging to figure out, which likely still won't be a priority for
quite a while.
|
|
Apparently there's slightly longer code for whatever reason which made
32 too conservative of a search window. Easy fix!
|
|
|
|
|
|
A lot of this is random WIP from a while back, at least a month ago, and
is being committed now to get it out of the way so that other patches
can be brought in and integrated against it without causing headaches.
Also rolled into this commit is a way to distinguish plugin_unload from
exiting the game. This is required for another soon-to-be-integrated
feature to avoid crashing on exit, and could in theory also be used to
speed up unloading on exit in future. While we're at it, this also
avoids the need to linearly scan through the plugin list to do the
old branch unloading fix, because we can.
Rough summary of the other smaller stuff I can remember doing:
- Rework bitbuf a bit
- Add some cryptographic nonsense in ac.c (not final at all)
- Introduce the first couple of "chunklets" libraries as a sort-of
subproject of this one
- Tidy up random small bits and bobs
- Add source for a small keypair generation tool
- Rework democustom to be very marginally more useful
|
|
Absolutely no idea how long this has been broken for!
|
|
|
|
|
|
There's a solid chance this actually gets used this time. Plus, there's
breaking changes, so it makes sense to update before writing any actual
code for it.
The RNG module is also manually fixed up; upstream wasn't moved to the
new Monocypher APIs which might be because the authors don't seem to
think it's even a good idea to use anything other than arc4random().
Maybe I'd kind of agree with that if not for both Linux and Windows not
having arc4random(), and none of SSTs use cases requiring it either
(none of the crypto code is gonna be multithreaded and certainly none of
it is gonna fork).
|
|
That sorting function was a bit wonky, so make it just a little bit
wonky instead. chibicc would produce confusing lex errors if given a
stray single quote somewhere, so make it give non-confusing errors.
Also get rid of canonicalize_newline() because it's unnecessary for SST
so long as Windows Git isn't left in its default misconfigured state.
|
|
This was actually breaking deferred initialisation in 0.5, the main
observable effect being that the L4D1 console spam fix stopped working.
Committer's note: woopsy!
|
|
|
|
This also tidies up library handle grabbing with more os.h stuff, and
improves the VDF creation logic - since we no longer store a couple of
paths which makes it necessary to change that a bit anyway.
|
|
Of course, Portal doesn't actually check this properly, and it was never
tested well enough until just now. This fixes it, albeit in a really
stupid way. C'est la vie.
|
|
The zip date is tomorrow as that's the expected release date pending
some testing and hearing back from Portal people re official approval
for use in runs. With any luck it won't need to be bumped further.
|