Which is cl_control_dummy, cl_dummy_jump, cl_dummy_fire and cl_dummy_fire.
if i want to contol my dummy to jump,
first, press f1 in game, and use "cl_control_dummy 0",
second, use "bind mouse1 +toggle cl_dummy_jump 1 0".
finally, i can contol my dummy to jump by pressing left mouse button.
`str_utf8_isspace` now returns true if the passed code point renders as
a space, instead of when not.
Add `str_utf8_trim_right`, use this function and
`str_utf8_skip_whitespaces` in the server.
Add tests for the three functions
1055: Keep track of lost frames and update time r=heinrich5991 a=Jupeyy
The problem a friend was occuring was, that on a fresh Windows install settings like cl_refresh_rate are set to 480.
Since the render calls take longer time than no render calls, it happened that client was sleeping on one update cycle and then took to long in another, where it called the render functions, leeding to less FPS than the cl_refresh_rate. this caused mouse lags and rarely frame drops.
another thing is, that select on Windows is non microsecond accurate, or just often returns too early, which caused that the refresh rate is much too high, or even ignored, (probably windows can only sleep on milliseconds, or again, is extremly inaccurate).
Another things on windows is that time_freq might be a "very odd" number ^^
i mean like on unix it's one microsecond (1,000,000 = 1s), but on windows the time_freq depends on the CPU leading to inaccurate calculation of the sleep time and render time.
This wasn't insanly huge issue, but probably skipped a few microseconds here and there.
This fix should stabilize the frames. I'd like to hear your opinion on this tho.
This uses the Unicode confusable data together with judging how close
two strings are by using the Levenshtein distance.
Adds the commands `name_ban`, `name_unban` and `name_bans`. Kicks
players who join using a banned name and doesn't allow ingame players to
change their names to the banned ones.
For speedrunning alone in a team this "Everyone in your locked team was killed because '%s' %s."
is very annoying. So better only print it if more than 1 tee is in the team.
1058: Add /pausevoted and /specvoted r=heinrich5991 a=def-
- Also fix /pause and /spec with name parameter a bit
- Move out common code between pause/spec
Of course `WavpackOpenFileInputEx` is subtly incompatible to
`WavpackOpenFileInputEx64` in that it requires the userdata for the main
steam to be nonnull.
Fixes#1041.
1025: Add Teehistorian UUIDs to every record r=heinrich5991 a=Learath2
For statistic collecting purposes, don't merge before updating the SQL Schema.
ALTER TABLE record_race ADD COLUMN GameID VARCHAR(64) AFTER cp25;
ALTER TABLE record_teamrace ADD COLUMN GameID VARCHAR(64) AFTER ID;
947: Add support for extra chunks in teehistorian r=Learath2 a=heinrich5991
This allows to add rarely-used chunks without increasing the file format
version.
981: Fix some bugs related to asynchronous IO r=Learath2 a=heinrich5991
Since `aio_thread` was crashing with #964 on an address that we didn't hand to `io_write`, I hope that this was just a bug with concurrently writing to stdout on Windows, and not a bug in the `aio` stuff.
Fixes#914. Fixes#964.
979: Add a missing call to `lock_wait` in test function r=Learath2 a=heinrich5991
This was uncovered when I tried to run other code with ThreadSan, but it
only found this. :(
977: Active moderator mode r=heinrich5991 a=Ryozuki
This PR adds a RCON command called "moderate", which enables a active moderator mode for the caller, so this will happen if a vote kick/spec is made:
- Vote will last atleast x seconds defined by CGameContext::m_VoteCloseTime (35 seconds on ddnet, according to @heinrich5991) even if there is majority.
- If a active moderator votes, it will be a force vote.
- If the active moderator doesn't vote, it will pass normally
- This is only for kick and spec votes.
I also added `access_level moderate 1` to autoexec_server.cfg
If there are any spelling errors on the code tell me.
Maybe needs to be tested more.
976: fixed rand init error message r=heinrich5991 a=ChillerDragon
the ``dbg_msg()`` func doesn't work until the
``IEngine *pEngine = CreateEngine("DDNet", Silent);`` line gets executed.
I used a bool to leave the code order untouched c:
957: Add manual locking to `ASYNCIO` for transacted writes r=Learath2 a=heinrich5991
Previously, e. g. it was possible that newlines are separated from the
printed line in `logger_file`.
948: Remove deprecated multi commands r=Learath2 a=heinrich5991
You now have to use `/mc;` instead of `/` if you want to bind multiple
commands to one key.
941: Add cross-compiled DMG archives r=Learath2 a=heinrich5991
Currently they only contain the client and the archives are a lot larger
than the current release artifacts.
953: Overhauled job system r=Learath2 a=heinrich5991
The engine now takes `std::shared_ptr<IJob>`, this will ensure the
appropriate lifetime of the given parameters, it also allows for proper
destruction. Remove the now obsolete `IFetcher` interface and `CFetcher`
class.
Also adds some locks to `CUpdater`, previously it didn't have any locks
at all.
931: Add Speedup tiles correctly at the border creation & remove tile layer extension restriction & fix the LastIndex buffer initlialization & setup non mipmap textures up correctly(texture completness) r=heinrich5991 a=Jupeyy
Allows speedups to be drawn on extended range(out of map range) too.
The engine now takes `std::shared_ptr<IJob>`, this will ensure the
appropriate lifetime of the given parameters, it also allows for proper
destruction. Remove the now obsolete `IFetcher` interface and `CFetcher`
class.
Also adds some locks to `CUpdater`, previously it didn't have any locks
at all.
869: Complete rework of the ghost and race recorder r=Learath2 a=Redix
This PR fixes a lot of issues with the ghost and race recorder, introduces a new ghost file format and implements some pretty useful features.
**A quick overview:**
- When you cross the start line multiple times, both (ghost and recorder) will only restart if it is a non-solo server
- If available, both will use the race timer to recognize the start instead of searching for the start line
- Fastcap support for both
- The recorder immediately starts when the Tee spawns, so the preparation steps (which are quite important for speedruns) will be included in the demo. If you do not cross the start-line within 20 seconds, it will stop the demo until you really start.
- Better ghost menu (colors, reloading, deleting and saving ghosts)
- The ghosts are more resistant against lags (old ones were sometimes completely useless due to small lags)
- New ghosts files are significantly smaller
- Cleanup, bugfixes..
**About the new ghost format (version 4/5):**
This format is used by Teerace for over a year now. The code for handling the binary files was moved to the engine. It includes an auto updater which creates a backup of all ghosts and converts them to the new format afterwards. The major differences from the format used by DDNet right now (version 2), are the ability to store multiple types of data, the usage of delta-encoding and a more portable header.
For whatever reason, the ghost stores values for every predicted tick, but without tick information, so lost snapshots can make them unusable. The new code uses the original values from the snapshots including ticks but it can also handle the old ones without. Since hardly any server uses the high bandwidth option this practically reduces the file size.
Like the demo recorder the ghost recorder directly stores the data to a file (every 50 snapshots) instead of writing the whole file at the end of the race. Indeed this can be changed with only a few lines if the old behavior is preferred.
The updater can handle version 2 (DDNet) and 3 (old teerace format, only slightly different from version 2) files. The updating already happens when the files are scanned for generating the list in the menu and not only when you activate them. The change from version 4 to 5 was only needed due to a bug in the implementation, the ghost loader can read both.
Some numbers about the file size: (map: hotrun, both about 30 seconds)
- Old ghost: 30.4 kB (converted: 10.7 kB)
- New ghost: 5.4 kB
**One thing about the race recorder:**
The old implementation compared the new file only with the first file it found for the particular map. The new one compares with all related demos and deletes them possibly, so that only the best demo is left. Since DDNet can also store the demos without name, this might also delete demos from other players, that you might have in your directory.
To prevent this I at least check whether the demo contains the player name if `cl_demo_name` is on.
In my opinion the better solution would be to remove `cl_demo_name` and always use the player name.
929: Don't draw invalid tiles r=heinrich5991 a=Jupeyy
I just forgot to fix that, when i was changing the buffer creation.
It just prevents invalid tiles, e.g. speedup without force, to be drawn