1567: Make world offset calculation more accurate r=def- a=12pm
Noticed that after some time groups with a parallax different than 100 were incorrectly rendered in the editor
Co-authored-by: 12pm <30786226+12pm@users.noreply.github.com>
Only show for the same amount of ticks as originally, not number of
seconds, otherwise at high demo speeds you will see the broadcast for a
much longer game play time than originally.
The motivation is to have the exact same timestamp for every member
finishing in a team and the team rank as well. This makes the database
more consistent and tooling easier.
Number of minutes of active racing time before being asked to confirm
disconnecting, disconnecting dummy or quitting through GUI. Defaults to
20 minutes, -1 to disable, 0 to always enable.
Also removed confirmation to quit when in main menu, except when having
an unsaved map in editor.
Spectate and kill should already be safe thanks to server-side kill
protection.
- As requested by qshar and KoG players
- Similar to DDNet tab
- Info fetched from servers-kog entry from https://info.ddnet.tw/info
- Also supports countries and types
- Doesn't inform whether map has been finished
- Generalized the code a bit but it's still ugly
- Depends on #1533, also shows KoG servers as official/verified
1531: Don't rotate static game tiles and fix switch rotation r=def- a=12pm
Should be handy for mapping.
Can be disabled by activating unused tiles (don't think it's worth a separate toggle and if you want to do it, you're doing something unusal)
Co-authored-by: 12pm <30786226+12pm@users.noreply.github.com>
Should be handy for mapping.
Can be disabled by activating unused tiles (don't think it's worth a separate toggle and if you want to do it, you're doing something unusal)
1514: Square and center icons before rendering them on button r=Learath2 a=def-
1521: Remove unused norank icon from browse_icons.png r=heinrich5991 a=def-
1522: Reset authed level in client r=Learath2 a=def-
As reported by jao on Discord:
22:26 jao @Learath2 client auth level needs to reset on server join or something
22:28 jao because other servers don't send it
1523: Make updating nameban reason work r=def- a=12pm
Co-authored-by: def <dennis@felsin9.de>
Co-authored-by: 12pm <30786226+12pm@users.noreply.github.com>
As reported by jao on Discord:
22:26 <jao> @Learath2 client auth level needs to reset on server join or something
22:28 <jao> because other servers don't send it
And persist the result. Helps with the workflow described by Shyzo on
Discord:
> I mean after i press ctrl-f or fetch info. then i want to sort by marker (from ... to 0) and just delete every demo without a marker. either in a whole (not possible i think) or just one by one. but I think after deleting one demo the order of demos change again
> so i have to fetch info again, delete one. fetch info again. delete one
> and so on
Old color was rgb = (0.78, 1.0, 0.8)
In hsl = (125°, 100%, 89%)
Converted to hex hsl:
H = 125° / 360° * 255 = 89 = 0x59
S = 100% = 0xFF
since the TW HSL color system fobids too dark colors it uses l = 0.5 + 0.5*L/255
so L = (0.89 - 0.5) * 2*255 = 199 = 0xC7
So in total we get 0x59FFC7 = 5898183
1485: Browser's scoreboard now shows score based on cl_ddrace_scoreboard r=def- a=fokkonaut
Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
1486: Fit image name in select button r=def- a=12pm
Adjusts font size a bit and truncates text if it overflows
Co-authored-by: 12pm <30786226+12pm@users.noreply.github.com>
1474: Fix automapper not removing the Opaque flag before checking if flags match r=def- a=bojidar-bg
Co-authored-by: Bojidar Marinov <bojidar.marinov.bg@gmail.com>
1466: Add colors for authed players. Deprecates #1299 r=def- a=Learath2
Not sure if a snap item is the best idea for this but it should help with not sending the data more then needed and keeping it properly updated. The colors aren't great now but we can fix that easily.
![image](https://user-images.githubusercontent.com/490500/53680889-607bf780-3cf2-11e9-84a0-579160e9e170.png)
Co-authored-by: Learath <learath2@gmail.com>
1438: Add man pages with asciidoc r=def- a=Ryozuki
Fixes#1240
I added a simple script to generate the man pages.
To edit the man pages in the future, you must edit the `.adoc` files and then run generate.sh
You need asciidoc package to generate the manpages.
`sudo apt install asciidoc`
http://asciidoc.org/
Writing plain troff is a pain in the ass.
1447: Allow vote-kicking players with same auth level r=def- a=12pm
This is meant to help with dealing with trolls on test server since everyone can log into rcon there.
Shouldn't cause any problems anywhere else, I think.
1448: Require sv_vote_kick_min only on team 0 kick votes r=def- a=12pm
Co-authored-by: Ryozuki <ryo@ryozuki.xyz>
Co-authored-by: 12pm <30786226+12pm@users.noreply.github.com>
1316: code improvement on gameclient.cpp r=def- a=Ryozuki
1341: Mark unused envelopes r=def- a=Learath2
Thought I'd do this one as well while looking at the editor code.
1349: Don't ignore CONNECT packets with data that we don't know r=def- a=heinrich5991
This specifically affects 0.6.5. Just treat them the same way as those
without any data.
Co-authored-by: Ryozuki <edgar@ryobyte.com>
Co-authored-by: Learath <learath2@gmail.com>
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
1340: Editor fixes r=def- a=Learath2
Address #1331 and also fix the scrollbar enabling when there isn't enough elements.
Co-authored-by: Learath <learath2@gmail.com>
1329: Add support for extra map items in datafiles r=Learath2 a=heinrich5991
This works by utilizing the good old UUIDs – this way we can make sure
that we don't clash with other people extending the map format.
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
1251: Selecting multiple quads r=def- a=Aerll
- shift+drag to select quads. Selection is additive
- left click on any empty space deselects all quads
- moving, resizing, rotating etc. works for every selected quad
- fixed resizing quads on grid and in properties. Vertices don't land on the same spot
Co-authored-by: Aerll <31746984+aerll@users.noreply.github.com>
Stopper behavior is only changed when the player would otherwise go
entirely through the stopper. Players can still enter a stopper as far
as the stopper can still affect them. One-way blockers have a bigger
range, and thus allow tees to enter furtherly.
A possible (manual) test map for this is test_stoppers.map, sha256sum
ed8be386e54a03d7bd7ed69fdd962c86f51f654427972d58d492c8905c8fbdb7, crc
48812a51.
1227: Allow multiple layers to be selected and edited at the same time. r=heinrich5991 a=bojidar-bg
Resolves#486.
Please test, I'm still not completely sure it won't crash or mess up a map from time to time.
Co-authored-by: Bojidar Marinov <bojidar.marinov.bg@gmail.com>
1224: vanilla skins only list now only shows vanilla skins r=Learath2 a=fokkonaut
Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
This displays four buttons below the edit box, one for resetting the
skin prefix, and the other three for activating the shipped variants
"kitty", "coala", "santa".
The "none" string is translatable, the variants names are not because
they correspond to file names.
1221: Allow entering automapper rule probability as percentage r=heinrich5991 a=bojidar-bg
Fixes#837
Took a while to guess the right `sscanf` usage (since it does not detect unmatched input past the last format specifier).
Co-authored-by: Bojidar Marinov <bojidar.marinov.bg@gmail.com>
1200: Share libcurl resources across requests r=def- a=heinrich5991
Use the libcurl-share interface to share DNS cache and connections
between different requests.
If compiled with OpenSSL, libcurl can only be safely used from multiple
threads for OpenSSL >= 1.1.0, but this problem is not newly introduced
by this commit: According to libcurl-thread(3):
>OpenSSL <= 1.0.2 the user must set callbacks.
>
>https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
>
>https://curl.haxx.se/libcurl/c/opensslthreadlock.html
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
1195: Fix votespec on /pause (Fixes#1193) r=heinrich5991 a=ChillerDragon
I also thought about using a `` if (str_find(m_aVoteCommand, "set_team"))`` in front of the pause reset.
But then i thought its ok to unpause the VoteVictim every time.
I didn't test but i could belive that this can cause some unwanted unpause for a player with the id of the last VoteVictim on a server type vote for example. Thats why i also reset the ``m_VoteVictim`` to -1 to avoid this.
Co-authored-by: ChillerDragon <chillerdragon@gmail.com>
1187: fix projectiles not rendering on mods based on ddnet r=heinrich5991 a=ZombieToad
for some reason the client doesnt render extrainfo projectiles if the gamemode wasnt ddnet
Co-authored-by: ZombieToad <25847476+zombietoad@users.noreply.github.com>
Previously, when you added an image to the map in the editor, it would
start off as embedded, i.e. included in the map file. This does not make
sense for vanilla images as every client has those.
That's why we now only mark non-vanilla images as external by default.
https://cdn.discordapp.com/attachments/293493549758939136/461236206131478538/PainWeaponBug.gif
because I'm new to coding it took me 2 hours to find this bug. I spent a while looking at the POWERUP_ARMOR and RemoveNinja() code wondering why it didn't work.
this bug is funny to some players so maybe you don't want to fix it. i wont mind because it was a challange for me to find it
SHA256 was chosen because it is reasonably standard, the file names
don't explode in length (this rules out SHA512) and it is supported by
basically all versions of OpenSSL (this rules out SHA512/256 and SHA3).
The protocol is changed in a backward compatible way: The supporting
server sends the SHA256 corresponding to the map in the `MAP_DETAILS`
message prior to sending the `MAP_CHANGE` message. The client saves the
SHA256 obtained from the `MAP_DETAILS` message until the next
`MAP_CHANGE` message.
For servers not supporting this protocol, the client falls back to
simply opening maps like in the previous scheme.
Remove the `map_version` tool, it is not being used and would have been
a little bit effort to update.
Use the OpenSSL implementation of SHA256 if it is supported, otherwise
fall back to a public domain one.
Fix#1127.
1157: Add a way to call for external moderator help r=Learath2 a=heinrich5991
This is done by HTTP POSTing to a location specified by
`sv_modhelp_url`. We also provide a `src/modhelp/server.py` which can
use theses POSTs to forward them to Discord servers.
The POST contains a JSON object payload, with the keys `"port"` which
contains the server port, `"player_id"` which contains the calling
player's client ID, `"player_name"` which contains the calling player's
nick and `"message"` which is the user-specified message.
Make JSON-escaping function public, add tests and fix bugs uncovered by
these tests.
Supersedes #1129.
1160: Fix warning about incompatible function pointers r=Learath2 a=heinrich5991
This comes at the cost of one allocation per started thread. This should
be okay because we're about to invoke a syscall anyway.
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
This is done by HTTP POSTing to a location specified by
`sv_modhelp_url`. We also provide a `src/modhelp/server.py` which can
use theses POSTs to forward them to Discord servers.
The POST contains a JSON object payload, with the keys `"port"` which
contains the server port, `"player_id"` which contains the calling
player's client ID, `"player_name"` which contains the calling player's
nick and `"message"` which is the user-specified message.
Make JSON-escaping function public, add tests and fix bugs uncovered by
these tests.
Supersedes #1129.
1154: Rename 'credit' -> 'credits' r=Learath2 a=ChillerDragon
It's named ConCredits and there are many people credited so i guess the plural is fitting better c;
Co-authored-by: ChillerDragon <chillerdragon@gmail.com>
1151: fix veto r=heinrich5991 a=ZombieToad
before if a player entered the game and stayed before start on a server with a clock over 20 mins he would get veto
Co-authored-by: ZombieToad <25847476+zombietoad@users.noreply.github.com>
If the latest fire input and the current differ in any way it causes firing.
So if you switch dummy after hammerfly was used it causes a weaponfire.
This unwanted fireing caused many unlucky fails for me already.
So i swap the fire status on dummyswapping so the server doesn't see any difference even if hamemrfly was used.
1120: Allows low mousesens r=heinrich5991 a=ChillerDragon
Lower minimum mousesens value to avoid confusion. Responing to GG Kid's request:
https://forum.ddnet.tw/viewtopic.php?f=45&t=5807&p=58207&hilit=mousesens#p58207
I did some testing and found no bugs... but i wonder why it was set to 5. So maybe it had some reason i don't understand so please only merge if you know what you are doing ;p
Co-authored-by: ChillerDragon <chillerdragon@gmail.com>
1118: Add vote_ban rcon command r=heinrich5991 a=ChillerDragon
Works the same as muteid.
Vote banned players aren't allowed to start or participate in votes.
Co-authored-by: ChillerDragon <chillerdragon@gmail.com>
1114: Some text positioning r=def- a=Jupeyy
To be clear, the entity text was meant to be a bit higher, so the text of the overlay is not overwritten("FROM", "CFROM")?
Because there was -4.f added to the y coordinate. Atleast it looks pretty much the same as the old renderer now.
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
1112: Fix default dyncam values r=def- a=Jupeyy
Since dyncam is disabled by default:
these are default static values.
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
Replace `mem_free` by `free`, and `mem_alloc` by `malloc` or `calloc`
(the latter one being used to allocate a zeroed array of elements,
sometimes, this makes a call to `mem_zero` superfluous).
This results in having to remove `mem_stats` which previously recorded
the number of allocations and their size that the Teeworlds code did
directly.
Remove OOM handling in `src/game/client/components/binds.cpp`.
Remove needless copying in the CSV code in
`src/game/client/components/statboard.cpp`.
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.
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
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.
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.
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.
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.