Age | Commit message (Collapse) | Author |
|
- Add text size measurement (for centring etc.).
- Add a wchar_t equivalent since ushort would be wrong on Linux.
Avoid actually using wchar.h because it's a big bloaty header,
particularly on Windows.
|
|
sst_l4d_testwarp will now unstick the player unless "staystuck" is
specifed as an argument. Additionally, sst_l4d_previewwarp is added to
show the positions checked by the unstuck logic as well as the
line-of-sight traces performed.
Committer's note: the actual box-drawing logic was essentially rewritten
by me since I realised the order of drawing didn't matter at all. All
the code-digging logic is more-or-less still what bill wrote, though.
So, you could say we have joint authorship of this, I suppose. Not that
that's a huge deal, but if anyone's ever curious or if it ever legally
matters for some reason then, well, there you go.
|
|
This isn't totally ideal - it'd be nice to have a way to get colours
working, at least for errors/warnings. But it might not really be
possible to do that without custom networking stuff, so this will do for
the forseeable future. The main goal is just to be able to have
CON_SERVERSIDE commands actually give output to the relevant player.
|
|
Last fix was apparently enough to make the release work, but not enough
to actually work in general, lol. With any luck, it's actually good now.
|
|
Of course, something was bound to get screwed up by all those changes.
And of course, I was bound not to test stuff well enough in the rush to
make a useful update. Argh!
|
|
This enables the FOV feature to work correctly.
|
|
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 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!
|
|
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/).
|
|
|
|
|
|
Also done with quite a lot of RE help from bill - thanks again!
|
|
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!
|
|
|
|
|
|
|
|
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 is kind of a breaking change but the other code was obviously never
released or relied on by anyone - it will be pushed at the same time as
this in fact. It still seems worth having the original committed
separately to show the progression of development of the feature,
however. Technically the standalone vote cooldown resetting could also
be added back if ever desired however there doesn't seem to be that much
of a use case for that at the moment.
This feature ought to be a lot more convenient now as it allows for
resetting back to a set starting point no matter where the player is in
a run. It isn't universally useful as All Campaigns Legacy solo runs
require switching to a different type of server and Main Campaigns co-op
runs require restarting the game after Swamp Fever to work around the
god mode bug, however it is still useful in a good few situations.
Unfortunately this turned out to be pretty complex to implement, first
requiring a bunch of interop with valve's rather wacky KeyValues stuff,
and then requiring a bunch of especially difficult reverse engineering
of L4D1 v1.0.0.5 because it doesn't use said KeyValues stuff and does
something else completely different instead.
A side effect of all this work is that the nag removal hack is now part
of the KeyValues stuff in kvsys.c, which is kind of a comfier place for
it than just kind of dumped in the middle of sst.c.
|
|
In most versions of L4D2, players cannot call a vote (e.g. switch
campaign, change difficulty, restart campaign) more than once every 3
minutes. This makes resetting on a first map a pain, usually requiring
reloading the map to reset the vote state.
This new sst_l4d_vote_cooldown_reset command empties the list of
structures tracking vote callers, allowing all players to vote again
immediately. This should make resetting runs a lot easier on versions
without unlimited votes.
|
|
This is a surprise tool that will help us later!
|
|
Thanks Bill for figuring out what the problem was.
|
|
|
|
Committer's note: this is somewhat adapted from Bill's original code,
written a while back, but he gets full credit for actually doing the
hard part.
|
|
|
|
People want to be able to write a scheduled-release passphrase to demos
to prove that said demos were recorded during a timeboxed event. Ideally
this is something that'd be part of the custom demo data and general RTA
run management stuff that's planned, but of course that doesn't exist
yet. When it does exist, we'd probably want rid of this nonsense, so
it's marked hidden and I don't plan to document it anywhere "official."
It's just here for people who really need it in the short term.
|
|
I still haven't bothered to flesh out all the possible indices for
GetEngineBuildNumber but we're back to being able to use it to detect
The Last Stand (as a result of some old version testing Aciidz did -
thanks again!). This means we can do away with the terrible map file-
based hotfix. Also, turns out sst_l4d_testwarp doesn't work if the
plugin gets loaded early via VDF because certain SendTable offsets start
out negated, so we work around that too now.
|
|
|
|
Idiotic problems require idiotic solutions.
|
|
This was a lot more code than expected, but it might be finally close to
time to release the next beta...
We'll see if any more rabbit holes present themselves to jump into,
though.
|
|
- A bunch of stuff is now defined in one header, engineapi.h
- engineapi.c is responsible for setting up any interfaces/stuff that's
used in more than one place
- mkgamedata is pretty much rewritten and now supports nested
conditionals
- gamedata variables no longer have the gamedata_ prefix because it was
just annoyingly long all the time
- vcall macros are somewhat revamped and support dynamic (gamedata)
indices
- Portal 1 FOV can be set anywhere from 75-120 using fov_desired -
tested in both the main versions currently used by runners
- A few typos were also fixed ("intput," "writeable," "indexes")
|
|
Default gamedata values actually work the way they're supposed to now.
|
|
|
|
|
|
With code from Bill. Thanks Bill!
|