Commit graph

9049 commits

Author SHA1 Message Date
Robert Müller fcec553599 Use pi instead of 3.14159f 2022-11-06 11:52:21 +01:00
Robert Müller 4d0cd7f807 Use traditional casts instead of functional-style casts 2022-11-06 11:52:21 +01:00
Robert Müller 964f839410 Show selection popup when multiple images/sounds with same name exist
When readding a sound/image and multiple files with the name exist, a popup is shown that allows the user to choose the wanted file.
If exactly one file is found, it is used without showing a dialog.
As before, if no file is found, an error message popup is shown.
2022-11-05 15:42:39 +01:00
Robert Müller 812a884c06 Add generic selection popup to editor
Add `CEditor::ShowPopupSelection` to show a generic selection popup.

This popups shows a message and buttons for all entries in a `std::set`. Exactly one entry can be selected and the selection will be available to the caller in the given `SSelectionPopupContext`.
2022-11-05 15:42:39 +01:00
Robert Müller 940f5df225 Search for images/sounds in subfolders when readding, add error popup
Use `FindFile` to search for the image/sound file in all subfolders of the mapres folder when using the "Readd" button in the editor.

Show an error message popup when readding fails, i.e. when the file could not be found.
2022-11-05 00:16:44 +01:00
Robert Müller 7079925966 Add generic popup message to editor (e.g. for error message popups)
Add `CEditor::ShowPopupMessage` function to show a generic message in a popup.

The message text and color are configurable with the `SMessagePopupContext` argument object.
Instances of this class must have a static memory location, as the message needs to be available after the `ShowPopupMessage` function returns, and the address of this object is used to uniquely identify it in the UI.
2022-11-05 00:16:44 +01:00
bors[bot] 8d7442e328
Merge #6002 #6003
6002: Explain -DANTIBOT=ON a bit better (fixes #6001) r=heinrich5991 a=def-

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


6003: Fix height and margin of sound and image popups r=def- a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-04 18:55:46 +00:00
Robert Müller c5bbccfe07 Also append sounds when appending a map to another map 2022-11-03 20:21:45 +01:00
Robert Müller b0a21dab09 Use bool for Load, Save, Append result, true on success
The `Append` method was returning `0` on success while `Load` and `Save` were returning `1`.
Now all three methods use a `bool` as return value and return `true` on success.

The call `SortImages()` is moved inside the `Append` method, as it should always be called when appending succeeded.
2022-11-03 20:17:06 +01:00
Robert Müller 40dbb1b992 Fix height and margin of sound and image popups
The height of the sound popup was too small, as it was not updated when the "Readd" button was added.

The additional `2.0f` margin at the top of the popups is removed, as all popup menus already have default `5.0f` margins on all sides.

The height of the image popup for external images was not including this margin to begin with, so it was slightly too small but is correct now.
The height of the image popup for embedded images is adjusted to no longer include this margin.

Pass `nullptr` instead of calculating unused `CUIRect` values.
2022-11-03 19:53:21 +01:00
Robert Müller abf795d9da Invoke static methods without a class instance
The methods `ReplaceImage` and `ReplaceSound` are static, so they should be called without an object.
2022-11-03 19:32:10 +01:00
bors[bot] e71ce8fcde
Merge #5998
5998: Fix Ctrl+F hotkey not checking for Ctrl key, minor improvement to tile details popup layout r=def- a=Robyt3


## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-01 22:10:19 +00:00
Robert Müller 886ec990fe Add missing check for modifier of Ctrl+F hotkey
The hotkey for the "Find empty slot" button was not correctly checking for a pressed modifier, so it was already being trigger by just the key F instead of the desired Ctrl+F.
2022-11-01 23:01:32 +01:00
Robert Müller 8e9b4ddcd2 Refactor tile details popup height, variable names
The height is calculated based on the number of rows and the row height instead of being entirely hardcoded, which makes maintenance easier.
The total height of the speedup popup was slightly too large, which is also fixed by this.
Variable names and their declaration positions are also refactored.
2022-11-01 23:01:28 +01:00
Robert Müller 0db4b5fe0c Refactor border button condition, move button variable
The conditions can be combined into one if-statement to better readability.
2022-11-01 22:30:56 +01:00
Robert Müller c29d4b984c Remove redundant CUIRects, improve find button height
Some of the CUIRects were calculated but never used.
The height of the "Find empty slot" button is made consistent with the height of the properties shifters.
2022-11-01 22:29:12 +01:00
Robert Müller d6d88d4370 Allow selecting switch number 0 in editor again
This reverts part of #5993 to allow switch number 0 to be selected again.
Switch number 0 is permanently enabled, so it useful for tiles that should always be switched on.
Eventually tiles that don't work with switch 0 (e.g. switch open/close tiles) should be made unplaceable and the switch number should be hidden for tiles where it doesn't have any effect (e.g. jump tiles). See #5995.
2022-11-01 21:52:49 +01:00
bors[bot] 846b569a86
Merge #5994
5994: Change editor hotkey Ctrl+A to Ctrl+T for layer/tile details r=def- a=Robyt3

The hotkey Ctrl+A is already active universally in the editor to open and append a map to the current one. This collides with the hotkeys for opening the layer/tile details popup for tune, tele, speedup and switch layers, which is only active when a layer of said type is select. Pressing the hotkey in this context opens the popup and the append dialog at the same time, which is undesirable. Therefore the hotkey to open the layer/tile details is changed to Ctrl+T instead. This combination is currently unused and seems approriate, as the T could stand for "Tile details".

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-01 12:35:28 +00:00
Robert Müller c916e5d262 Change editor hotkey Ctrl+A to Ctrl+T for layer/tile details
The hotkey Ctrl+A is already active universally in the editor to open and append a map to the current one.
This collides with the hotkeys for opening the layer/tile details popup for tune, tele, speedup and switch layers, which is only active when a layer of said type is select.
Pressing the hotkey in this context opens the popup and the append dialog at the same time, which is undesirable.
Therefore the hotkey to open the layer/tile details is changed to Ctrl+T instead. This combination is currently unused and seems approriate, as the T could stand for "Tile details".
2022-11-01 13:13:22 +01:00
Robert Müller c6fa29eb56 Fix incorrect minimum values for tele, speedup and switch layers
It was possible to select tele number 0, speedup force 0 and switch number 0 in the layer details in the editor, because some of the bounds checks or calculations were not excluding the value 0.
As placing those tiles with the value 0 in the editor is not possible and the tiles with this value are ignored by server and client, it also shouldn't be possible to select those values in the first place.
2022-11-01 12:11:18 +01:00
bors[bot] 571b0b36de
Merge #5770
5770: Fix physics change by weak hook fix (fixes #5769) r=def- a=fokkonaut

<!-- What is the motivation for the changes of this pull request -->
fixes #5769

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-11-01 10:29:53 +00:00
def a237ee5f6d Improve callvote arguments by making them more specific
Should make it a bit clearer how to call a vote from F1
2022-10-29 14:45:24 +02:00
Robert Müller 6c8fa6b4f0 Rename variable aBuf to pBuf, use size_t for buffer size 2022-10-27 22:21:08 +02:00
Robert Müller d551617c34 Use str_copy instead of str_format with format "%s"
Using `str_format(aBuf, sizeof(aBuf), "%s", pStr)` is equivalent to `str_copy(aBuf, pStr, sizeof(aBuf))`. Using `str_copy` is more readable and also more efficient as there is no overhead from parsing the format string and from passing varargs.
2022-10-27 21:42:14 +02:00
Jupeyy 3b2dd73614 Rename config var to no weak only 2022-10-27 17:51:30 +02:00
fokkonaut cedc315a70 Fix physics change by weak hook fix (fixes #5769) 2022-10-27 17:44:54 +02:00
bors[bot] 47b351134a
Merge #5985
5985: Fix large editor popups being outside of screen, add margin r=def- a=Robyt3

Large editor popups could be positioned outside of the screen area, when they could not be positioned below or to the right of the cursor without overflowing. This is fixed by making sure the popup does not overflow the top or left side of the screen after adjusting its position.

A small margin is also added so popups don't start or end immediately at the screen border.

Closes #5982.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-10-25 22:08:44 +00:00
Dennis Felsing 1f5d7a0afd Version 16.5 2022-10-25 23:21:02 +02:00
Robert Müller 6b7563a90b Fix large editor popups being outside of screen, add margin
Large editor popups could be positioned outside of the screen area, when they could not be positioned below or to the right of the cursor without overflowing. This is fixed by making sure the popup does not overflow the top or left side of the screen after adjusting its position.

A small margin is also added so popups don't start or end immediately at the screen border.

Closes #5982.
2022-10-25 20:16:39 +02:00
Rafael Fontenelle cd14660307 Fix misspellings 2022-10-25 13:51:56 -03:00
Robert Müller 6ef3adaa23 Fix long demo names being truncated in popups and UI
Use `IO_MAX_PATH_LENGTH` for all demo filenames and paths, so long demo names and demo names containing many unicode characters are not so easily truncated in the cut, rename and render dialogs.

Use combination of `str_endswith` and `str_append` to append file extensions, instead of using `str_comp_nocase` and `str_format`. Thereby only support creating demos and video files with lower case file extension, as only demo files with lower case file extension are shown in the client anyway.
2022-10-24 20:42:52 +02:00
Robert Müller b486028838 Remove dead code
The `PopupMessage` was never shown, as the next line activates `POPUP_REPLACE_VIDEO` which immediates overrides the message popup.
2022-10-24 20:18:09 +02:00
Robert Müller 997af452d0 Fix crash when cutting a demo opened from command line
When playing a demo without opening the demo menu first, i.e. from command line argument or with `play` command from the main menu, clicking the demo slice button crashes the game, as the code tries to use the filename of the currently selected demo while there is no demo selected, i.e. `m_DemolistSelectedIndex == -1`.
Also, when using the play command after opening the demo menu, the initial filename selected for cutting was incorrectly set to the currently selected demo.

This is fixed by getting the name of the current demo file from the demo player instead, when cutting a demo.
Though the cut demo will be saved to the last demo folder selected (or the demos directory) instead of being saved to the same directory as the original demo.
2022-10-24 20:14:04 +02:00
Robert Müller 3c1cd89ae6 Append file extension before checking for identical cut demo filename
The file extension needs to be appended to the cut demo name before checking whether the name matches the currently playing file, otherwise the "Please use a different name" error message is not shown and instead the "File already exists" question is shown.
2022-10-24 19:53:42 +02:00
Robert Müller be45604354 Fix demo file not being closed after showing error message
When entering the name of an existing demo file into the Slice demo dialog and pressing the Ok button twice, the file handle that's used for checking for the demo file's existence is not closed, hence the cut demo file cannot be deleted until the client is closed.
2022-10-24 19:48:44 +02:00
Robert Müller f5a16c1c77 Fix crash in editor when using up/down keys on empty images list 2022-10-21 20:28:30 +02:00
Robert Müller 4a683e024a Fix crash in editor when using up/down keys on empty sounds list 2022-10-21 20:28:00 +02:00
bors[bot] 8feba4ecf6
Merge #5966
5966: Fix duplicate description of cl_default_zoom_level r=heinrich5991 a=def-

Since #5894 is not landing

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-10-21 11:53:55 +00:00
Dennis Felsing f7bc58b056 Fix duplicate description of cl_default_zoom_level
Since #5894 is not landing
2022-10-21 00:12:07 +02:00
bors[bot] 53080e3e14
Merge #5938
5938: Hex Values in the editor's info feature r=heinrich5991 a=VoxelDoesCode

Add an option when the info button is selected, you can show the hexadecimal values for a tile rather than 1-255. This has some benefits, as it aligns in a perfect grid. Can help with making and test automappers.

![image](https://user-images.githubusercontent.com/95713843/195209286-82dd04d5-f469-4932-bbd7-93ec3fd32f99.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-10-19 22:47:35 +00:00
heinrich5991 dcd76fd3e1 Add support for Rust code in DDNet
The glue is done using the [cxx crate](https://cxx.rs/) on the Rust
side.

As a proof-of-concept, only a small console command (`rust_version`)
printing the currently used Rust version was added.

You can generate and open the Rust documentation using
`DDNET_TEST_NO_LINK=1 cargo doc --open`.

You can run the Rust tests using `cmake --build <build dir> --target
run_rust_tests`, they're automatically included in the `run_tests`
target as well.

Rust tests don't work on Windows in debug mode on Windows because Rust
cannot currently link with the debug version of the C stdlib on Windows:
https://github.com/rust-lang/rust/issues/39016.

---

The stuff in `src/rust-bridge` is generated using
```
cxxbridge src/engine/shared/rust_version.rs --output src/rust-bridge/engine/shared/rust_version.cpp --output src/rust-bridge/engine/shared/rust_version.h
cxxbridge src/engine/console.rs --output src/rust-bridge/cpp/console.cpp --output src/rust-bridge/cpp/console.h
```
2022-10-19 23:46:06 +02:00
Jupeyy b70fc39571 fix skin click ptr 2022-10-19 20:18:43 +02:00
Robert Müller c78f71b2b9 Fix client crash when server does not send gameinfo 2022-10-15 19:43:26 +02:00
Zwelf 0e0e55eb43 Fix example name in mapbug description 2022-10-13 11:51:18 +02:00
bors[bot] 6c3d0e999b
Merge #5933 #5941
5933: Inline `Is(GameType)` functions and remove support for legacy 64 player info protocol r=def- a=heinrich5991

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


5941: Get away from vector for skins r=def- a=Jupeyy

most of the time it uses the index just to get the skin, downloaded skins change the index. Now its simply a heap object and downloaded skins load directly. Also the loading might be a bit faster bcs it had a loop lookup .Also O(1) lookup

not 100% tested. also fixes a bug with favorite skins hopefully
## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-10-12 22:08:17 +00:00
Jupeyy a804c3ca5b Get away from vector for skins
most of the time it uses the index just to get the skin, downloaded skins change the index.
Now its simply a heap object and downloaded skins load directly. Also the loading might be a bit faster bcs it had a loop lookup
Also O(1) lookup
2022-10-12 22:32:36 +02:00
VoxelDoesCode 484cb82872 Hex Values in the editor's info feature
Clang format before squash
2022-10-11 19:27:12 -04:00
heinrich5991 a97a597592 Inline Is(GameType) functions
They are used for two purposes, coloring gametypes in the serverbrowser
and enabling backward compatibility. These are independent, we shouldn't
add more stuff to the backward compatibility, hence I split them up and
inlined them.
2022-10-11 16:05:46 +02:00
bors[bot] 8de0247d00
Merge #5909
5909: Add favorite skins r=def- a=Jupeyy

Advantages:
- my friend fokkonaut can mark his favorite vanilla skins
- u can mark skin db skins which auto download if not loaded

untested, bad code, maybe buggy.
but still want feedback :)

![image](https://user-images.githubusercontent.com/6654924/193877801-6880a4f6-3f42-4e16-ad00-f44583aa2a87.png)


## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-10-10 14:42:18 +00:00
bors[bot] 6d7df66448
Merge #5918
5918: Constify snap more (inspired by upstream) r=Robyt3 a=ChillerDragon

Incorporate const added in those upstream commits:
d86d576217
e6b8518b49

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-10-09 13:53:05 +00:00
ChillerDragon 9982a7bad3 Constify snap more (inspired by upstream)
Incorporate const added in those upstream commits:
d86d576217
e6b8518b49
2022-10-09 15:12:12 +02:00
bors[bot] b7da20826d
Merge #5919
5919: Tweak the running visuals r=def- a=VoxelDoesCode

Sorry for putting this off for so long. Turns out animating with raw code is harder than you'd think.

https://user-images.githubusercontent.com/95713843/194726134-40925aea-6ec4-40ae-9597-b80a28d1b6a2.mp4



## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-10-08 22:58:13 +00:00
VoxelDoesCode fc09212d43 Tweak the running visuals 2022-10-08 16:07:15 -04:00
bors[bot] 665f829759
Merge #5915
5915: Don't overlap menu + debug messages (fixes #5914) r=Robyt3 a=def-

![Screenshot 2022-10-07 at 19 03 03](https://user-images.githubusercontent.com/2335377/194611779-93062028-0684-4745-b3b9-9949cec074fa.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-10-07 18:48:08 +00:00
Dennis Felsing 774f7a6f33 Don't overlap menu + debug messages (fixes #5914) 2022-10-07 19:03:20 +02:00
def 317b2df7c0 Support multiple values to search/exclude (fixes #4119) 2022-10-07 18:21:14 +02:00
Dennis Felsing c4463a3848 Only show ingame hint in Game tab
Since it looks ugly overlaid over the other tabs
2022-10-06 18:38:32 +02:00
Jupeyy fbc4c9cd6e Add favorite skins 2022-10-05 19:23:03 +02:00
def 361622ec37 Add help text at bottom left when menu is open 2022-10-03 00:11:01 +02:00
def 9e5d830e34 Revert ingame menu close button
Even I got confused by it and accidentally hit power off button. Left
side seems not popular for close either (#5888)

Since opening the menu requires Escape, players can probably figure out
Escape to close it again.

> Revert "Don't show home button ingame"
>
> This reverts commit d3ff903d44.
>
> Revert "Move home button to very right so it is consistent with close button ingame (fixes #5881)"
>
> This reverts commit 9cc08cc9d3.
>
> Revert "Add close button to close ingame menu"
>
> This reverts commit cfcfb7b3f0.
2022-10-02 23:59:48 +02:00
Robert Müller 98848cde70 Use str_comp_filenames to sort maps and demos again
This means that digit characters in filenames will be comparsed as numbers instead of being compared as individual digits.

The use of this function was previously (d2f5714042) removed as it did not sort names case insensitively, whereas now it does.
2022-09-30 14:48:53 +02:00
Robert Müller 3176032a7b Fix spelling seperate -> separate 2022-09-29 18:54:40 +02:00
fokkonaut 900417b84d Send laser objects as DDNetLaser with type (fixes #5885) 2022-09-27 13:25:20 +02:00
Dennis Felsing d3ff903d44 Don't show home button ingame
Broken in #5882
2022-09-27 13:03:16 +02:00
def 9cc08cc9d3 Move home button to very right so it is consistent with close button ingame (fixes #5881) 2022-09-26 19:02:41 +02:00
bors[bot] 0f6594f10b
Merge #5875
5875: Move `src/game/bezier.cpp/h` to `src/base/bezier.cpp/h` r=def- a=Robyt3

As those functions are not game specific per se, they can be part of base instead.

Closes #3334.

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-09-24 19:17:10 +00:00
bors[bot] fdf29b5197
Merge #5861
5861: Add close button to close ingame menu r=Jupeyy a=def-

Suggested by cheeser0613 since new players don't know that Escape is the only way to close it again
![Screenshot 2022-09-22 at 09 49 31](https://user-images.githubusercontent.com/2335377/191689168-d401d6e9-f68c-4c53-a905-7ff1cfa0bb9d.png)
![Screenshot 2022-09-22 at 09 49 25](https://user-images.githubusercontent.com/2335377/191689180-581145f5-29cd-4adc-a4ee-4a89ded81534.png)
I'm not sure if I prefer it on left or right side. Left side is like the start menu button, right side is like Windows bar.

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-24 19:00:28 +00:00
Robert Müller 727b147268 Move src/game/bezier.cpp/h to src/base/bezier.cpp/h
As those functions are not game specific per se, they can be part of base instead.

Closes #3334.
2022-09-24 20:53:59 +02:00
Robert Müller 9625a4e521 Fix skin prefix button container being used for multiple buttons
This meant that only the first skin prefix button could be activated.

Regression from #5633.
2022-09-24 17:43:53 +02:00
bors[bot] c61e5586ff
Merge #5867
5867: Use ddnet.org on manpages r=heinrich5991 a=def-

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-23 23:41:20 +00:00
bors[bot] 4f3a9cbd0d
Merge #5864
5864: refresh serverbrowser when disconnecting / abort r=def- a=luk51

This might be not complete, but this adds the functionality to refresh the server browser list after disconnecting from a server, or after aborting joining a server.

This fixes issue #5863.


## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Lukas Kitsche <lukaskitsche@posteo.de>
2022-09-23 23:24:58 +00:00
Dennis Felsing 17960e52b5 Add luk51 in credits 2022-09-24 01:05:00 +02:00
Lukas Kitsche 599eb18245 fix linting, will be squashed later 2022-09-24 00:56:43 +02:00
Lukas Kitsche 43aae1bd82 move refresh logic of browsertab into helper function 2022-09-23 19:59:18 +02:00
Dennis Felsing e290a407d6 Fix other occurences of DDNet.tw 2022-09-23 10:59:36 +02:00
Lukas Kitsche a5a191eb32 Merge branch 'master' of https://github.com/ddnet/ddnet into refresh-serverbrowser-when-disconnecting 2022-09-22 20:56:47 +02:00
Lukas Kitsche e5f3943f6e refresh serverbrowser when disconnecting / abort 2022-09-22 20:55:19 +02:00
Robert Müller 72194d28e7 Replace magic numbers with enum EShowEnvelope 2022-09-22 18:02:07 +02:00
Dennis Felsing cfcfb7b3f0 Add close button to close ingame menu
Suggested by cheeser0613 since new players don't know that Escape is the
only way to close it again
2022-09-22 09:49:54 +02:00
bors[bot] 069e5a7c9d
Merge #5848 #5851
5848: Remove cl_http_map_download r=heinrich5991 a=def-

![screenshot-20220918@010406](https://user-images.githubusercontent.com/2335377/190879092-3ca64914-15c5-4835-9fe6-fd9fe75aa57d.png)
Causes problems with GER3
## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


5851: Respect reserved slots in old serverinfo r=heinrich5991 a=def-

Noticed in https://github.com/ddnet/ddnet/pull/5850 that reserved slots were not respected

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: def <dennis@felsin9.de>
2022-09-18 11:40:11 +00:00
def 9f4e883906 Remove cl_http_map_download 2022-09-18 01:03:15 +02:00
bors[bot] e61b850364
Merge #5843
5843: Laser menu tweaks; Changed some default colors r=def- a=VoxelDoesCode

fixes #5841 

![image](https://user-images.githubusercontent.com/95713843/190824834-a48913ec-360a-40a8-8b48-d278f5916493.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-09-17 22:16:26 +00:00
VoxelDoesCode 71b073a45f New SG Laser default, Reset to defaults 2022-09-17 17:11:53 -04:00
Robert Müller d34b7a4ea5 Refactor color picker variable names and color conversion 2022-09-17 13:12:12 +02:00
Robert Müller 4fb98f4ec2 Fix UI elements behind color picker background being selectable
Is was previously possible activate UI elements behind an active color picker when hovering the background of the color picker but not the color picker UI elements.
2022-09-17 13:12:12 +02:00
VoxelDoesCode 4c7a29b430 Add Reset All button 2022-09-16 21:06:20 -04:00
VoxelDoesCode 5915d5531d Laser menu tweaks; Changed Freeze laser color 2022-09-16 18:28:36 -04:00
Dennis Felsing fece84c892 Add Voxel to contributors 2022-09-16 13:14:41 +02:00
Dennis Felsing 3e93f3ac8a Version 16.4 2022-09-16 13:07:36 +02:00
VoxelDoesCode fb15a7c2a4 Running and AFK anim. states 2022-09-16 12:30:05 +02:00
bors[bot] 68e2f51280
Merge #5756
5756: Editor: added a goto button r=heinrich5991 a=archimede67

<!-- What is the motivation for the changes of this pull request -->

This feature was also suggested by Pulsar. It adds a button to go to a specified coordinate point by inputting x and y coordinates through a popup window:

![image](https://user-images.githubusercontent.com/13364635/185762103-48a9fbaf-282e-45d8-86a4-bf5eedf620b0.png)

The two number inputs are constrained between 0 and the width/height of the map (minus 1). When clicking "Go", it focuses the camera at the center of the tile at these coordinates.

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Corantin H <archi0670@gmail.com>
2022-09-16 01:17:56 +00:00
Corantin H e52e443988 Editor: used max int value for goto min and max coordinates 2022-09-15 20:54:20 +02:00
Dennis Felsing 9a2835c9dd Update translations via script, new German translations
New English text for marking the beginning/end of a cut
2022-09-15 14:38:08 +02:00
bors[bot] ed2b0f40b9
Merge #5639
5639: Add different laser colors for different types r=def- a=VoxelDoesCode

Since we're doing a push to assist newer players, I think it would be a good idea to differentiate the different types of lasers, so that non-moving laser entities aren't confused with doors (I'm aware the blinking is a sign, but it's very subtle). This also includes a new color for Shotgun's laser, which would be a nice touch for both customization and clarity. 

![image](https://user-images.githubusercontent.com/95713843/179640279-06bb52a0-9070-48ca-b39f-013034f9c16e.png)
![image](https://user-images.githubusercontent.com/95713843/179640326-bcfad3a9-6209-4514-8850-98c5146e28b8.png)

If this were to be implemented though, it would require a server update, because the server actually needs to send the DDNetLaser to clients with a high enough client version (It's set to 17000 currently). As of right now it's a solid concept.

Huge thanks to Fokkonaut for finalizing this concept!

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
2022-09-15 07:14:11 +00:00
bors[bot] da0dca25c3
Merge #5823
5823: Editor: Added reload button for image and sound popups r=heinrich5991 a=sctt

Automatically reloads the image from mapres folder based on its current name, that's just a quicker "replace" which is convenient while experimenting on image contents, some mappers asked for this.

![Screenshot from 2022-09-10 11-57-58](https://user-images.githubusercontent.com/3328841/189479587-620c812c-0df2-4ba2-94a0-83eca8e42c81.png)

note: image lookup is currently limited to the mapres root folder, no directory recursion has been implemented, this is an improvement that might be added in the future (even though in my understanding, organizing mapres into subfolders is not a very common practice, not even the "search" feature considers that).

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [x] Tested in combination with possibly related configuration options
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: “sctt” <“sctt@sctt.it”>
2022-09-15 06:54:50 +00:00
“sctt” 73d883d16b Editor image reload: renamed reload into readd 2022-09-15 08:46:31 +02:00
fokkonaut 5deeb299fa Add DDNetLaser to have more info about a laser shot 2022-09-15 01:01:32 +02:00
VoxelDoesCode 03b90f4f3d Added new cl colors and tweaked the settings menu
Merging of DoLaserPreview and static int fix

Replace if else statement with switch function

Adjusted RenderDropDown header to match

static int cbuttoncontainer fix, potential bugs
2022-09-15 01:01:04 +02:00
Dennis Felsing 51c0bb1f43 Improve message on failed load 2022-09-13 20:30:30 +02:00
bors[bot] cef096ecd7
Merge #5820
5820: Editor: Added "Order" button in quads popup r=heinrich5991 a=sctt

Main purpose is to control quads z index, but i like how this can be used to reveal how many quads a layer has just by placing a new one.
Furthermore, it provides a way to reference quads, that's needed to make custom cli tools work on user selected quads.

![Screenshot from 2022-09-09 19-04-21](https://user-images.githubusercontent.com/3328841/189411505-558ca601-e753-48b2-a6c3-d9f293795951.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [x] Tested in combination with possibly related configuration options
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: “sctt” <“sctt@sctt.it”>
2022-09-11 22:44:13 +00:00
“sctt” 79fa29d8b8 editor: added order button in quads popup 2022-09-10 18:04:38 +02:00
Jupeyy f59f79e02f Move skin info after the settings (settings can cause reload -> skin is invalid) 2022-09-10 15:03:59 +02:00
“sctt” 39223dfd8a editor: added reload button for image and sound popups 2022-09-10 12:23:00 +02:00
Robert Müller 19a0544364 Fix editor layer image selection not working 2022-09-08 15:30:22 +02:00
Robert Müller ff471b4d17 Minor refactoring: homogenise code structure of selection popups 2022-09-04 23:00:51 +02:00
Robert Müller 833f690c59 Refactor editor sound selection popup using CScrollRegion
Decrease popup size by remove the unused empty space designated for "previewing" sounds.
2022-09-04 22:59:33 +02:00
Robert Müller cef984294c Fix minimum/maximum values of editor properties
The Order-property maximum value was too large, so it was temporarily (only visually) possible to go beyond the maximum.

The minimum/maximum values for the Color-property were incorrect and redundant, as `PROPTYPE_COLOR` is used for RGBA color properties and not for envelope IDs.
2022-09-04 13:06:15 +02:00
Robert Müller 2e8d203ed4 Fix editor value selector not allowing minimal value change
For example, when the scale is 1, changing the value by exactly 1 was not possible.
2022-09-04 13:02:31 +02:00
Robert Müller 3fd87df844 Fix mouse staying locked when activating text mode in editor 2022-09-04 12:58:39 +02:00
bors[bot] ecce22322e
Merge #5805
5805: Refactor editor server settings and automapper config lists using `CScrollRegion` r=def- a=Robyt3

- Refactor editor automapper config list using `CScrollRegion`. Also fix some other minor issues with this list.
  - Fix the currently selected item not being highlighted after opening the dialog.
  - Remove static limit of 255 automapper rules, after which the editor previously caused out-of-bounds accesses, by using the address of the automapper config name as button ID.
  - Before:  ![automapper old](https://user-images.githubusercontent.com/23437060/188277300-bd634c13-fb66-4348-abf4-9481e8fcaa3a.png)
  - After: ![automapper new](https://user-images.githubusercontent.com/23437060/188277303-0cb94442-f35d-4c1e-bd81-7f56052cede6.png)
- Refactor editor server settings list using `CScrollRegion`.
  - Before:  ![server_settings old](https://user-images.githubusercontent.com/23437060/188277264-8a0d16b5-838c-4bd1-b94c-f11091c68ccf.png)
  - After: ![server_settings new](https://user-images.githubusercontent.com/23437060/188277269-1fabf5a5-9daf-4ffe-893d-1f1690ba597f.png)



## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-09-03 21:34:32 +00:00
def c95a605fd7 Version 16.3.2 2022-09-03 23:15:55 +02:00
Robert Müller 977f1a8245 Refactor editor server settings list using CScrollRegion 2022-09-03 17:13:26 +02:00
Robert Müller 130275a7b2 Refactor editor automapper config list using CScrollRegion
- Fix the currently selected item not being highlighted after opening the dialog.
- Remove static limit of 255 automapper rules, after which the editor previously caused out-of-bounds accesses, by using the address of the automapper config name as button ID.
2022-09-03 16:41:31 +02:00
Robert Müller 1c23a17ee4 Fix hotkeys (scroll regions) not working in editor 2022-09-02 23:16:37 +02:00
bors[bot] cc7fbe275c
Merge #5798
5798: Remove all references to memset r=def- a=heinrich5991

`memset` only worked with `CServer::CClient::STATE_EMPTY` by chance
because it is defined as 0.

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-09-02 12:57:54 +00:00
heinrich5991 887b24d8f5 Remove all references to memset
`memset` only worked with `CServer::CClient::STATE_EMPTY` by chance
because it is defined as 0.
2022-09-02 14:32:39 +02:00
bors[bot] cbb61814df
Merge #5722
5722: First send message to team, then kill team (fixes #5721) r=heinrich5991 a=def-

![Screenshot 2022-08-10 at 15 54 13](https://user-images.githubusercontent.com/2335377/183919209-a5fb95e6-d578-4376-9fb6-a72d0381001c.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-02 11:14:42 +00:00
Robert Müller e7c3ce186f Port CUI::ConsumeHotkey from upstream
Move hotkey/input handling from `CMenus` to `CUI`.

Using the `ConsumeHotkey` method ensures that each hotkey is only handled once.

By also handling the mouse scroll wheel as hotkeys, this fixes the scroll keys activating scroll regions while the controls binder is active.
2022-08-31 21:43:57 +02:00
def c479230d71 Use new ddnet.org domain 2022-08-30 10:09:06 +02:00
bors[bot] 3478146ea5
Merge #5784
5784: Suppress more events while skipping in demos, reset specifics components before long skips in demo r=def- a=Robyt3

Closes #5779.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-29 21:47:28 +00:00
Jupeyy d2295ff94e refind skins after reload 2022-08-29 18:28:59 +02:00
bors[bot] 3e42d3df5a
Merge #5787
5787: Allow spectator mode to be changed while demo is paused r=def- a=Robyt3

By updating and rendering the current tick again when changing the spectator mode while the demo playback is paused. Closes #1843.

Refactoring: Extract `IDemoPlayer::ETickOffset`, `IDemoPlayer::SeekTick` and `CMenus::DemoSeekTick`.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-28 18:01:55 +00:00
Robert Müller c6cc45471a Allow spectator mode to be changed while demo is paused
By updating and rendering the current tick again when changing the spectator mode while the demo playback is paused.

Refactoring: Extract `IDemoPlayer::ETickOffset`, `IDemoPlayer::SeekTick` and `CMenus::DemoSeekTick`.
2022-08-28 17:52:49 +02:00
Zwelf 6382f5b5d5 Clarify save message on team member in '/spec' mode 2022-08-28 17:37:23 +02:00
Robert Müller c0472b3177 Reset specific components before long skips in demo
Only reset what has to be reset instead of using `CGameClient::OnReset`, which would reset a lot more and cause other issues (client freezing while skipping) that would first need to be solved.
2022-08-28 15:39:30 +02:00
Robert Müller b2fbfac4d1 Suppress more events while skipping in demos:
- chat messages
- kill messages
- sounds
- stats
- air jump effects
2022-08-28 15:20:50 +02:00
Robert Müller 1da597ff1a Fix automatic demo rewind not working when menu is not active 2022-08-28 12:26:20 +02:00
Robert Müller 3dc577f24e Fix demo seeking not working anymore when menu is not active 2022-08-28 12:23:03 +02:00
Robert Müller 7cbca53d48 Deactivate "Follow" spectator mode in global server demos
As there is no spectator to follow, the follow mode does not work in global server demos.

Player server demos are unaffected and support the follow mode.
2022-08-27 17:48:04 +02:00
Robert Müller 939b3e5538 Fix free-view button state when following a free-view spectator
When following a spectator that is using free-view mode, the free-view button was active at the same time as the follow button.
2022-08-27 17:45:56 +02:00
bors[bot] 8ac260a3a9
Merge #5777
5777: Add period/comma hotkeys to skip one tick forward/backward, various other improvements to demo skipping r=Jupeyy a=Robyt3

Mostly from upstream https://github.com/teeworlds/teeworlds/pull/2904, with some more fixes and refactorings.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-27 12:40:09 +00:00
bors[bot] b42627f807
Merge #5748
5748: Remove the need for sprite icon images; update Icons file r=Jupeyy a=VoxelDoesCode

It felt like that it was very unoptimized to have two images for the demo buttons. Initially, I wanted to merge it into one image, but it was a much better choice to have it so that we use the Icons font file for the sprites instead. Turns out, considering how the typeface is rendered, it looks much smoother and crisper. The contrast between the squares and the symbols is much clearer alongside!

Before the change:
![unknown](https://user-images.githubusercontent.com/95713843/185066728-45b6c5d7-00c5-4e03-9f89-4dfc89df6ec1.png)
After the change:
![unknown](https://user-images.githubusercontent.com/95713843/185066759-bd5f8169-7e9e-488d-9af7-0ab34bff9d54.png)

Note that there is a few compromises that had to be made with the limited symbol choices. As of publishing this there is not a symbol for a crossed out keyboard, but I hope the eye works just fine for now.


## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-08-27 12:24:36 +00:00
Robert Müller a24ac108ce Always suppress events and update envelopes when skipping 2022-08-27 13:23:06 +02:00
Robert Müller bf16875a6f Add period/comma hotkeys to skip one tick forward/backward 2022-08-27 12:49:32 +02:00
Robert Müller d6628fe028 Rename variable LastSpeedChange to s_LastSpeedChange 2022-08-27 12:49:32 +02:00
Robert Müller 091f3b3e34 Rename variable PrevAmount to s_PrevAmount 2022-08-27 12:49:32 +02:00
VoxelDoesCode 20e70b3172 Demo Tooltips, in courtesy of Chairn 2022-08-26 02:07:58 -04:00
VoxelDoesCode 0392f6655d Added an icon for Parent Directories 2022-08-25 18:44:27 -04:00
Robert Müller 8d3351f046 Also record tunings for player demos 2022-08-25 17:57:03 +02:00
VoxelDoesCode 216d4421ce Clang Format 2022-08-24 16:17:04 -04:00
Robert Müller 638559b648 Refactor scrollable controls settings using CScrollRegion
Replace hacky usage of `UiDoListboxStart` with `CScrollRegion`.
2022-08-23 10:08:46 +02:00
Robert Müller 7c496dd5b4 Make ingame server info MOTD scrollable using CScrollRegion 2022-08-23 10:08:46 +02:00
Robert Müller 359beffff3 Refactor editor sound list using CScrollRegion 2022-08-23 10:08:46 +02:00
Robert Müller 5dc6c90a50 Refactor editor image list using CScrollRegion, split method 2022-08-23 10:08:45 +02:00
Robert Müller 9f01c6fe66 Refactor editor layer list using CScrollRegion 2022-08-23 10:08:45 +02:00
Robert Müller ad8f49fe79 Remove unnecessary indentation/scope 2022-08-23 10:08:42 +02:00
Robert Müller 4cdd36aed3 Remove redundant m_GuiActive checks
This condition is already checked before calling the methods.
2022-08-23 10:01:29 +02:00
Robert Müller 7b80ad1982 Refactor editor layer image selection popup using CScrollRegion
The width of the popup and list are also slightly increased to better support images with longer names.
2022-08-23 10:01:28 +02:00
Robert Müller f451a33361 Port CScrollRegion from upstream with some minor refactorings
Co-authored-by: LordSk <lordskelethom@gmail.com>
2022-08-23 10:01:28 +02:00
Robert Müller 9cbca642ea Rename CUIElement::Get to Rect
This makes it clear that the method is a getter for the rects.
2022-08-23 10:01:27 +02:00
Robert Müller 991b045a11 Remove unused CUIElement::m_ElementTime 2022-08-23 10:01:26 +02:00
bors[bot] 49bed71932
Merge #5696
5696: Add option for parallax-aware zoom r=def- a=Fireball-Teeworlds

## How this works

Currently we have parallax X and Y parameters that control how far away a layer feels. Currently it's only taken into account for camera moving sideways.

This pull request makes zoom behave as if the camera was moving closer or further away, taking into account the distance to the layer.

In order to provide flexibility, this behaviour is using a separate parallax value, similar to how we have separate values for X and Y. Para Zoom will default to the minimum of parallax X, Y, clamped to be between 0 and 100. This seems to look well on most maps.

This pull request also introduces two new features to the Editor:
* Controls for configuring per-group Para Zoom value. If Custom Zoom is set to No, Para Zoom will automatically keep following to the default value described above, so that people new to the feature don't have to figure out how it works.
* Zoom button that previews the zoom behavior (next to Proof at the top).

## Editor Screenshots

### Para Zoom controls

![screenshot_2022-08-22_21-38-04](https://user-images.githubusercontent.com/68162181/186014490-f7b91245-460f-405f-8d5c-3f91db2a1b9a.png)

![screenshot_2022-08-22_21-37-58](https://user-images.githubusercontent.com/68162181/186014522-03b6e814-4dd9-4d07-9af9-7db5fb434a56.png)

### Zoom Button

![screenshot_2022-08-22_21-40-46](https://user-images.githubusercontent.com/68162181/186014856-2d1d499d-9011-439c-b217-536957e0c1e3.png)

![screenshot_2022-08-22_21-40-50](https://user-images.githubusercontent.com/68162181/186014874-6d2939d3-00ff-4327-a790-414b5151ba31.png)

## In-Game Screenshots

Video: https://youtu.be/W7eXQN0gRFI

This is an older version of the pull request that had an option to disable the new behaviour. The current version can only be disabled in map editor for a particular map.

### Springlobe 3

With new feature:
![screenshot_2022-08-02_04-28-19](https://user-images.githubusercontent.com/68162181/182286371-b67cee1c-73d8-4a24-a9c3-1b28340a3b42.png)

Without:
![screenshot_2022-08-02_04-28-25](https://user-images.githubusercontent.com/68162181/182286367-24555381-1700-4ff1-80c7-39e5dce63820.png)

### Beyond Dreams

With new feature:
![screenshot_2022-08-02_04-28-59](https://user-images.githubusercontent.com/68162181/182286322-114ecb90-0860-462c-9012-bb2f3ff848fb.png)

Without:
![screenshot_2022-08-02_04-28-55](https://user-images.githubusercontent.com/68162181/182286654-f34da72b-7991-4f42-89ad-679279fcb83e.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [X] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [X] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Fireball <fireball.teeworlds@gmail.com>
2022-08-22 21:15:41 +00:00
Dennis Felsing 83d26ff48c Version 16.3.1 2022-08-22 15:42:34 +02:00
bors[bot] d2523d9053
Merge #5761
5761: Replace `POPUP_PURE` with generic `PopupMessage` r=def- a=Robyt3

Minor refactoring, as the popup just shows generic text with an Ok-button.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-21 15:02:55 +00:00
def 13cc5d08d9 Version 16.3 2022-08-21 17:00:23 +02:00
Robert Müller d3c9311156 Replace POPUP_PURE with generic PopupMessage 2022-08-21 13:25:06 +02:00
Corantin H d81f15181e Use int for coordinates 2022-08-20 22:30:32 +02:00
Corantin H ae8b9914aa Editor: added a goto button 2022-08-20 20:47:46 +02:00
Jupeyy 6e5c5cba8f Filter vanilla only skins at loading already 2022-08-20 14:39:25 +02:00
Jupeyy d1b8d53619 Auto refresh skins when changing related settings 2022-08-20 13:42:28 +02:00
Corantin H 29a3baaa75 Editor: added the possibility to duplicate layers 2022-08-19 13:20:50 +02:00
VoxelDoesCode fa98ad1e36 Remove the need for file_icons.png 2022-08-19 01:05:02 -04:00
VoxelDoesCode 1807bb7b1e Update icons and clean up 2022-08-17 20:28:24 -04:00
VoxelDoesCode 470ee65db9 DoButton_Sprite > DoButtonFontIcon 2022-08-17 04:28:09 -04:00
VoxelDoesCode a1617dcf56 Replace all images with unicode chars 2022-08-17 03:58:13 -04:00
Robert Müller f0b0d4c163 Improve "couldn't open..." error messages by listing target 2022-08-16 17:35:47 +02:00
Robert Müller f0c74f72ba Smooth console completion scrolling 2022-08-15 23:20:37 +02:00
Alexander Akulich ec16daa4b4 CCharacter: Drop non-const IsAlive() getter 2022-08-15 15:05:59 +03:00
bors[bot] 4826eb1df0
Merge #5730
5730: Move `CUIRect` to separate file, move `CRenderTools::DrawUIRect/4` to `CUIRect::Draw/4`, merge `CUIEx` into `CUI` r=def- a=Robyt3

Adopt UI refactorings from upstream:
- move `CUIRect` into a separate file
  - this allows some includes of `ui.h` to be removed, most importantly in `render.h`
- move `CRenderTools::DrawUIRect/4` to `CUIRect::Draw/4`
  - this object orientied calling style makes it easier to write the code

The `CUIEx` class is merged into the `CUI` class, as there is no need for two different UI classes anymore.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-14 11:55:24 +00:00
bors[bot] cebcc885ab
Merge #5735
5735: Minor refactoring of editor IO r=def- a=Robyt3

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-14 11:24:15 +00:00
Robert Müller 813522f1fc Add/use temporary variables to improve readability 2022-08-14 13:12:21 +02:00
Robert Müller 45a20ff277 Only load and unload normal tile layer data if necessary 2022-08-14 13:12:21 +02:00
c0d3d3v 780c4db7dd
do an int check for m_FreezeEnd instad of float, becuase it is int 2022-08-13 15:43:38 +02:00
c0d3d3v 0aa46b54ea
small fix for #5729 2022-08-12 22:38:13 +02:00
Robert Müller 51fb3e9a22 Merge CUIEx class into CUI
There is no need to separate the UI in two classes anymore, as the dependency on `CRenderTools` has been removed.
2022-08-12 19:59:19 +02:00
Robert Müller 95550fd6a9 Move CRenderTools::DrawUIRect/4 to CUIRect::Draw/4
Use `ColorRGBA` instead of `vec4` for `Draw4`.
2022-08-12 19:37:08 +02:00
Robert Müller 7b390808bc Replace ui.h include with ui_rect.h, organize other includes 2022-08-12 19:37:08 +02:00
Robert Müller 680dd052d7 Add documentation for CUIRect::Inside 2022-08-12 19:37:07 +02:00
Robert Müller 49164dfcdf Improve argument names of CUIRect::Inside 2022-08-12 19:37:07 +02:00
Robert Müller b50309dd5c Move CUIRect class into its own files 2022-08-12 19:37:07 +02:00
Robert Müller 4005b82743 Move CRenderTools::DrawUIElRect to CUIElement::SUIElementRect::Draw
This method draws a particular UI element rectangle so it should be a member method.
2022-08-12 17:42:05 +02:00
Robert Müller 2a21cd6eab Move all DrawRect* methods from CRenderTools to IGraphics
As the methods do not depend on any game components they are moved to the engine graphics interface.
2022-08-12 17:42:05 +02:00
Robert Müller 7b20009980 Move CUI::CORNER_* enum to IGraphics::CORNER_*
Entirely automatic replacement in preparation for moving rect drawing methods from `CRenderTools` to `IGraphics`.
2022-08-12 17:42:04 +02:00
Robert Müller 237fdc76db Move CRenderTools::DrawCircle to IGraphics::DrawCircle
As this method does not depend on any game components it is be moved to the engine graphics interface.
2022-08-12 17:42:03 +02:00
Robert Müller 967c92f5d6 Encapsulate CGraph member variables
Make the member variables private and add `SetMin` to replace a usage of the member variables in `CDebugHud`. For completeness/symmetry, `SetMax` is also added.
2022-08-12 16:13:23 +02:00
Robert Müller b314db5454 Use CGraph::MAX_VALUES instead of magic value in debughud 2022-08-12 16:13:02 +02:00
Robert Müller 8e0a935d5c Combine CGraph::ScaleMin and ScaleMax into Scale
As the methods are always called at the same time, they can be combined. This also improves the performance, as the array only needs to be iterated once.
2022-08-12 16:12:55 +02:00
Robert Müller e99f7ab106 Extract StrCopyUntilSpace and use existing str_* functions
Minor refactoring to reduce duplicate code. Eventually this method could be extended to handle completion for other arguments except the first one.
2022-08-11 19:30:54 +02:00
Robert Müller 33bb576202 Show completion options for tune params in console
Currently supports `tune`, `tune_reset` and `toggle_tune`.

For `tune_zone` the tune name is the second argument, so this is more difficult to handle.
2022-08-11 10:11:03 +02:00
Robert Müller 6af8f46526 Add CTuningParams::PossibleTunings to find tune params by name 2022-08-11 10:11:00 +02:00
Robert Müller 047c88d797 Refactor console completion input handling according to upstream 2022-08-11 10:08:59 +02:00
Robert Müller f3eb93b83a Extend IConsole::PossibleCommands, add index to callback
`PossibleCommands` now passes the item index to the callback and returns the total number of items.

Add `EmptyPossibleCommandCallback` as default parameter.
2022-08-11 10:08:06 +02:00
Robert Müller 680abb6405 Encapsulate CTuningParams::ms_apNames with CTuningParams::Name 2022-08-11 10:07:45 +02:00
Robert Müller 85a41f46dc Allow tune command to list current tuning parameter value
Extend `tune` so the current value of a given tuning variable is printed if no new value is given, so it works like commands in the console. For example `tune player_collision` will print the current value of the variable, whereas `tune player_collision 0` will change the value like before.
2022-08-11 10:04:52 +02:00
Robert Müller 56d6290734 Print the actual tuning value after setting it
Get the actual tuning value after setting it, as the value that was applied may differ due to overflow or rounding errors.
2022-08-11 10:04:36 +02:00
Robert Müller e3bb8bc370 Allow tune_reset to reset a single tune
Extend `tune_reset` so a single tuning value can be reset to default. For example `tune_reset player_collision` will reset just the `player_collision` tuning, whereas `tune_reset` will reset all to defaults like before.
2022-08-11 10:00:26 +02:00
Robert Müller 46ec2e0a24 Print incorrect tuning parameter name on error 2022-08-11 10:00:21 +02:00
Robert Müller 54aff02286 Add success/error message to dump_(local|remote)_console commands 2022-08-11 09:52:19 +02:00
Robert Müller 43fdeb8468 Rename tune_dump to tunes, improve descriptions 2022-08-11 09:48:41 +02:00
Robert Müller ca31b495a9 Rename dump_binds command to binds, fix typo in description 2022-08-11 09:48:34 +02:00
Dennis Felsing d003cc6ee2 Use current backlog page instead of old (fixes #5719)
Better fix by Robyt3
2022-08-10 17:27:24 +02:00
Dennis Felsing 89558d6f23 First send message to team, then kill team (fixes #5721) 2022-08-10 15:53:56 +02:00
Fireball 5d886d80f8 Parallax Zoom: use CMapItemGroupEx to store parallax value 2022-08-10 03:05:23 +01:00
Robert Müller a8e3ac1184 Minor refactoring: use int64_t instead of long long 2022-08-09 18:48:06 +02:00
Robert Müller 1e10cd3c7d Optimize conditional expression 2022-08-09 18:48:05 +02:00
Robert Müller 62445ac006 Remove unused HermiteBasis1 function 2022-08-09 18:48:05 +02:00
Robert Müller 05af632524 Rename variables v to Value 2022-08-09 18:48:05 +02:00
Robert Müller 1e6fd63204 Rename variables id to KeyID 2022-08-09 18:48:04 +02:00
bors[bot] 57849a128c
Merge #5717
5717: Check fully transparent quads with negative alpha r=def- a=Jupeyy

fixes #5716

Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-08-09 15:49:32 +00:00
Jupeyy bc865ab087
Check transparency even for negative alpha 2022-08-09 17:44:09 +02:00
bors[bot] f8fca99e62
Merge #5642
5642: Option to remove weak hook & bounce r=def- a=Jupeyy

Fixes #5641 
server side only

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-08-09 13:59:21 +00:00
Dennis Felsing 614a5b35bc Easter egg 2022-08-08 16:37:17 +02:00
Fireball 4ed997f304 Parallax Zoom: fix QuadEnvPoint scaling (and other UI distances) 2022-08-06 16:45:03 +01:00
bors[bot] aeca43fbdb
Merge #5706
5706: Fix shift-leftclick-drag with empty selection to delete (fixes #5705) r=C0D3D3V a=def-

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-08-06 10:54:33 +00:00
Fireball 54f7a9817d Parallax Zoom: Zoom preview button in Editor
Known issue: Quad Env Points are scaled incorrectly for Groups with
ParallaxZoom != 100 (in Zoom mode).
2022-08-06 02:30:37 +01:00
Fireball 5bf7f60bf6 Parallax Zoom: Add default zoom option to the editor
Safe defaults for map editing: unless opted-in, Parallax Zoom
will default to maximum(parallax{x,y}).
2022-08-06 01:31:42 +01:00
Dennis Felsing a41f1c1def Fix shift-leftclick-drag with empty selection to delete (fixes #5705) 2022-08-06 02:09:15 +02:00
Fireball a90c86e9a5 Parallax-aware zoom
How this works: parallax values configure perceived distance from camera
when it's moving along x and y axes. Assume that zoom is moving the
camera away and scale layers accordingly, with background layers
(furtherst away) changing the least.

New per-ItemGroup (LayerGroup) setting allows to set the new parallax
value independently from the other two. This can be used to do tricks
like on Time Shop zoom correctly or make it feel like the camera is
changing the field of view at the same time as moving in space.
2022-08-05 00:40:58 +01:00
Robert Müller b1e4d60fae Fix buffer-overflow in editor on shift-clicking brush
1. Open any map, including an empty one.
2. Select a brush, e.g. size 2x2.
3. Shift click to repeat the brush over a larger area, e.g. 10x10.
4. This causes a buffer-overflow / crash with ASAN:

```
=================================================================
==4826==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6060000f5040 at pc 0x55db7d0aa743 bp 0x7fffe4e191f0 sp 0x7fffe4e191e0
READ of size 4 at 0x6060000f5040 thread T0
    0 0x55db7d0aa742 in CLayerTiles::GetTile(int, int) src/game/editor/layer_tiles.cpp:50
    1 0x55db7d0d23e1 in CLayerTiles::FillSelection(bool, CLayer*, CUIRect) src/game/editor/layer_tiles.cpp:437
    2 0x55db7cf196e9 in CEditor::DoMapEditor(CUIRect) src/game/editor/editor.cpp:2641
    3 0x55db7cfa7755 in CEditor::Render() src/game/editor/editor.cpp:5747
    4 0x55db7cfd2a56 in CEditor::OnRender() src/game/editor/editor.cpp:6437
    5 0x55db7c23e02d in CClient::Run() src/engine/client/client.cpp:3374
    6 0x55db7c2a9f7b in main src/engine/client/client.cpp:4762

0x6060000f5040 is located 0 bytes to the right of 64-byte region [0x6060000f5000,0x6060000f5040)
allocated by thread T0 here:
    0 0x7f9b21db5787 in operator new[](unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cc:107
    1 0x55db7d0a9a86 in CLayerTiles::CLayerTiles(int, int) src/game/editor/layer_tiles.cpp:39
    2 0x55db7d0cf0ed in CLayerTiles::BrushGrab(CLayerGroup*, CUIRect) src/game/editor/layer_tiles.cpp:387
    3 0x55db7cf18191 in CEditor::DoMapEditor(CUIRect) src/game/editor/editor.cpp:2612
    4 0x55db7cfa7755 in CEditor::Render() src/game/editor/editor.cpp:5747
    5 0x55db7cfd2a56 in CEditor::OnRender() src/game/editor/editor.cpp:6437
    6 0x55db7c23e02d in CClient::Run() src/engine/client/client.cpp:3374

SUMMARY: AddressSanitizer: heap-buffer-overflow src/game/editor/layer_tiles.cpp:50 in CLayerTiles::GetTile(int, int)
Shadow bytes around the buggy address:
  0x0c0c800169b0: 00 00 00 fa fa fa fa fa 00 00 00 00 00 00 00 fa
  0x0c0c800169c0: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
  0x0c0c800169d0: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c800169e0: fd fd fd fd fa fa fa fa fd fd fd fd fd fd fd fa
  0x0c0c800169f0: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
=>0x0c0c80016a00: 00 00 00 00 00 00 00 00[fa]fa fa fa fd fd fd fd
  0x0c0c80016a10: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
  0x0c0c80016a20: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
  0x0c0c80016a30: fd fd fd fd fd fd fd fa fa fa fa fa fd fd fd fd
  0x0c0c80016a40: fd fd fd fa fa fa fa fa fd fd fd fd fd fd fd fa
  0x0c0c80016a50: fa fa fa fa fd fd fd fd fd fd fd fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==4826==ABORTING
```
2022-08-04 23:39:40 +02:00
bors[bot] b4914d5d27
Merge #5692
5692: Refactor `GetClientVersion`, remove many `version.h` includes, fix potential use of undefined value r=def- a=Robyt3

Some refactoring to reduce duplicate code and to remove includes.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-01 21:21:18 +00:00
Robert Müller 24b30434da Handle CServer::GetClientInfo return to fix use of undefined value
```
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:790:2: error: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn,-warnings-as-errors]
        return Info.m_DDNetVersion;
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:785:5: note: Assuming 'ClientID' is not equal to SERVER_DEMO_CLIENT
        if(ClientID == SERVER_DEMO_CLIENT)
           ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:785:2: note: Taking false branch
        if(ClientID == SERVER_DEMO_CLIENT)
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:789:2: note: Calling 'CServer::GetClientInfo'
        GetClientInfo(ClientID, &Info);
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:646:13: note: Assuming 'ClientID' is >= 0
        dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "client_id is not valid");
                   ^
/home/runner/work/ddnet/ddnet/src/base/tl/../system.h:58:38: note: expanded from macro 'dbg_assert'
#define dbg_assert(test, msg) assert(test)
                                     ^
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
     (static_cast <bool> (expr)                                         \
                          ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:646:13: note: Left side of '&&' is true
        dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "client_id is not valid");
                   ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:646:30: note: Assuming 'ClientID' is < MAX_CLIENTS
        dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "client_id is not valid");
                                    ^
/home/runner/work/ddnet/ddnet/src/base/tl/../system.h:58:38: note: expanded from macro 'dbg_assert'
#define dbg_assert(test, msg) assert(test)
                                     ^
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
     (static_cast <bool> (expr)                                         \
                          ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:646:2: note: '?' condition is true
        dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "client_id is not valid");
        ^
/home/runner/work/ddnet/ddnet/src/base/tl/../system.h:58:31: note: expanded from macro 'dbg_assert'
#define dbg_assert(test, msg) assert(test)
                              ^
/usr/include/assert.h:93:7: note: expanded from macro 'assert'
     (static_cast <bool> (expr)                                         \
      ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:647:13: note: 'pInfo' is not equal to null
        dbg_assert(pInfo != 0, "info can not be null");
                   ^
/home/runner/work/ddnet/ddnet/src/base/tl/../system.h:58:38: note: expanded from macro 'dbg_assert'
#define dbg_assert(test, msg) assert(test)
                                     ^
/usr/include/assert.h:93:27: note: expanded from macro 'assert'
     (static_cast <bool> (expr)                                         \
                          ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:647:2: note: '?' condition is true
        dbg_assert(pInfo != 0, "info can not be null");
        ^
/home/runner/work/ddnet/ddnet/src/base/tl/../system.h:58:31: note: expanded from macro 'dbg_assert'
#define dbg_assert(test, msg) assert(test)
                              ^
/usr/include/assert.h:93:7: note: expanded from macro 'assert'
     (static_cast <bool> (expr)                                         \
      ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:649:5: note: Assuming field 'm_State' is not equal to STATE_INGAME
        if(m_aClients[ClientID].m_State == CClient::STATE_INGAME)
           ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:649:2: note: Taking false branch
        if(m_aClients[ClientID].m_State == CClient::STATE_INGAME)
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:667:2: note: Returning without writing to 'pInfo->m_DDNetVersion'
        return 0;
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:789:2: note: Returning from 'CServer::GetClientInfo'
        GetClientInfo(ClientID, &Info);
        ^
/home/runner/work/ddnet/ddnet/src/engine/server/server.cpp:790:2: note: Undefined or garbage value returned to caller
        return Info.m_DDNetVersion;
        ^
```
2022-07-31 23:37:28 +02:00
Robert Müller 9a012312b8 Move and extend GetClientVersion to remove many version.h includes
The `CServer::GetClientVersion` method needs the `version.h` include, so it's moved from the header to the source file, so the include can be removed from the header.

The `GetClientVersion` method is often called with the same `Client != SERVER_DEMO_CLIENT ? GetClientVersion(Client) : CLIENT_VERSIONNR` expression, which also needs the `version.h` include. This expression is moved inside the method, so the include can be removed from all the server entities' and player code.

The `CGameContext::GetClientVersion` method is made a delegate to reduce duplicate code.

The includes of the server entities are also organized further.
2022-07-31 23:21:10 +02:00
bors[bot] 1110d0e40e
Merge #5686
5686: Fix editor image delete r=def- a=Jupeyy

fixes #5675

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-07-31 21:11:15 +00:00
bors[bot] 730c54a603
Merge #5678
5678: Reset selected quads when switching layers (fixes #5673) r=Jupeyy a=def-

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: def <dennis@felsin9.de>
2022-07-31 20:03:31 +00:00
Jupeyy 982139922c Fix editor image delete 2022-07-31 21:39:18 +02:00
Robert Müller 1d6dca8c24 Fix accesses to vector with index -1 by adding static button IDs 2022-07-31 13:13:53 +02:00
Robert Müller 344e50f76f Remove dead code 2022-07-31 13:10:03 +02:00
def 76e3db9725 Reset selected quads when switching layers (fixes #5673) 2022-07-31 09:45:06 +02:00
def fc5cfb6f6c Remove CFlag dead code (fixes #5677) 2022-07-31 09:44:50 +02:00
Robert Müller 7f1a7795ee Fix tab and F10 keys working inconsistently in editor
By moving the calls to `KeyPress` from `CEditor::OnUpdate` to `OnRender`.
2022-07-30 13:31:00 +02:00
Dennis Felsing d520fe6177 Fix rotating plasma by Robyt3 (fixes #5666) 2022-07-28 15:42:11 +02:00
Dennis Felsing 9d6ccbe838 Version 16.2.2 2022-07-27 12:22:43 +02:00
bors[bot] 53e9fd3599
Merge #5627
5627: Fix shift + left click in editor (fixes #5626) r=heinrich5991 a=def-

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-26 19:11:24 +00:00
Robert Müller 1b32e47173 Fix shift with negative exponent in TeamMask
```
src/game/server/teams.cpp:484:35: runtime error: shift exponent -1 is negative
    0x55d065b241c4 in CGameTeams::TeamMask(int, int, int) src/game/server/teams.cpp:484
    0x55d0657f92ed in CCharacter::TickDefered() src/game/server/entities/character.cpp:821
    0x55d065a5d04c in CGameWorld::Tick() src/game/server/gameworld.cpp:283
    0x55d0659327e6 in CGameContext::OnTick() src/game/server/gamecontext.cpp:852
    0x55d0656e6a88 in CServer::Run() src/engine/server/server.cpp:2807
    0x55d0657164f1 in main src/engine/server/server.cpp:3904
```
2022-07-22 16:42:56 +02:00
Jupeyy 88c4b69301 Add an option to remove weak hook & bounce 2022-07-21 17:04:16 +02:00
Robert Müller 95636da6d9 Fix out of bounds access with highlighted messages in server demos
```
src/game/client/components/chat.cpp:795:89: runtime error: index -1 out of bounds for type 'CClientData [64]'
    #0 0x55c133fd047a in CChat::AddLine(int, int, char const*) src/game/client/components/chat.cpp:795
    #1 0x55c133fc80b5 in CChat::OnMessage(int, void*) src/game/client/components/chat.cpp:570
    #2 0x55c134677688 in CGameClient::OnMessage(int, CUnpacker*, int, bool) src/game/client/gameclient.cpp:770
    #3 0x55c133c282d2 in CClient::OnDemoPlayerMessage(void*, int) src/engine/client/client.cpp:2627
    #4 0x55c134ccdcba in CDemoPlayer::DoTick() src/engine/shared/demo.cpp:679
    #5 0x55c134cdac81 in CDemoPlayer::Update(bool) src/engine/shared/demo.cpp:1007
    #6 0x55c133c2a08b in CClient::Update() src/engine/client/client.cpp:2686
    #7 0x55c133c4c9eb in CClient::Run() src/engine/client/client.cpp:3296
    #8 0x55c133cbd64f in main src/engine/client/client.cpp:4761
```
2022-07-21 15:32:11 +02:00
Robert Müller b4eee122dd Fix null pointer access in maplayers when the snapshot has no game info
```
src/game/client/components/maplayers.cpp:98:112: runtime error: member access within null pointer of type 'const struct CNetObj_GameInfo'
    #0 0x55d84eea9e1e in CMapLayers::EnvelopeEval(int, int, ColorRGBA&, void*) src/game/client/components/maplayers.cpp:98
    #1 0x55d84f518082 in CRenderTools::ForceRenderQuads(CQuad*, int, int, void (*)(int, int, ColorRGBA&, void*), void*, float) src/game/client/render_map.cpp:112
    #2 0x55d84f517ac7 in CRenderTools::RenderQuads(CQuad*, int, int, void (*)(int, int, ColorRGBA&, void*), void*) src/game/client/render_map.cpp:98
    #3 0x55d84eee10b0 in CMapLayers::OnRender() src/game/client/components/maplayers.cpp:1839
    #4 0x55d84f34b915 in CGameClient::OnRender() src/game/client/gameclient.cpp:640
    #5 0x55d84e8d44c2 in CClient::Render() src/engine/client/client.cpp:1222
    #6 0x55d84e92d1a0 in CClient::Run() src/engine/client/client.cpp:3370
    #7 0x55d84e99964f in main src/engine/client/client.cpp:4761
```
2022-07-21 15:28:31 +02:00
Jupeyy 2240ad2966 Fix spelling 2022-07-19 18:22:44 +02:00
Robert Müller c6cf0004a9 Fix names of static variables in settings menus 2022-07-18 21:51:46 +02:00
ChillerDragon 1347860b2c Adapt upstreams CButtonContainer 2022-07-18 10:23:03 +02:00
Alexander Akulich 04ff8f13c2 Menu: Fix a typo in loading state text 2022-07-14 23:40:23 +03:00
Alexander Akulich 9e4098f3a5 prediction/entity: Add GetPos() (sync the API with server/entity) 2022-07-14 23:40:23 +03:00
Alexander Akulich 5169369809 prediction/entity: Sync ID getter name with the server/entity 2022-07-14 23:40:23 +03:00
bors[bot] 96896ddf5c
Merge #5619
5619: Make UI inputs more secure r=def- a=C0D3D3V

fixes #3560 finally :) what a dream xD

This in addition also fixes an input bug, if you hold a mouse button on an input and then open f1 it no longer presses that button.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-07-14 16:17:55 +00:00
Dennis Felsing de087bd80a Fix shift + left click in editor (fixes #5626) 2022-07-12 20:09:53 +02:00
c0d3d3v 27a4c494e9
Make UI inputs more secure 2022-07-11 18:56:36 +02:00
bors[bot] abc9929d35
Merge #5615
5615: Fix Text Alignments in Popups r=def- a=blueskyGH

Fixed the alignment issues in Popups.

Examples:
Before
 ![screenshot_2022-07-11_02-19-13](https://user-images.githubusercontent.com/108560485/178168210-071fbad9-dc59-4caf-94d9-b5ab0dea3f01.png)
![screenshot_2022-07-11_02-20-25](https://user-images.githubusercontent.com/108560485/178168199-4fabe057-69a5-4699-a8cf-858ac2d81811.png)

After
![screenshot_2022-07-11_02-36-26](https://user-images.githubusercontent.com/108560485/178168906-51f40cdf-3e1f-45e4-84a6-56e6056884f6.png)
![screenshot_2022-07-11_02-36-39](https://user-images.githubusercontent.com/108560485/178168909-f9825083-775d-487a-8704-2921e9b25a89.png)


Its my first PR for actual code. Please indulge me. :) 

We still need to get rid of the "ExtraAlign" variable and only use TextWidth().
But somehow TextWidth() doesn't work properly in this case. 
Hopefully a more experienced collaborator can have a look at these lines:
bbca48aa5b (diff-3aebb8cc835bb888d687b51e9dcfc0cda5326d89fd1c97ff83d85c00b82ed116L1656-R1657)

## Checklist
- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: blueskyGH <108560485+blueskyGH@users.noreply.github.com>
2022-07-11 16:11:57 +00:00
blueskyGH 381394cfff Fix Text Alignments in Popups 2022-07-11 15:47:48 +02:00
c0d3d3v e3fc71d051
Rename "NoSomething" to "SomethingDisabled" 2022-07-11 13:40:01 +02:00
c0d3d3v ebfc053809
Remove even more redundant variables to avoid inconsistent states. Fix another swap bug. 2022-07-11 13:39:52 +02:00
bors[bot] a3001f3bd1
Merge #5205
5205: Allow multiple addresses per server in the serverbrowser r=def- a=heinrich5991

Support is incomplete for `leak_ip_address_to_all_servers` (will only
ping the first address of each server) and for the `leak_ip` setting
(which will also only ping the first address of each server).

Fixes #5158.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-07-10 23:31:21 +00:00
bors[bot] 9e1b6cd1e9
Merge #5613
5613: Search in $PATH for server executable (fixes #5594) r=heinrich5991 a=def-

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: def <dennis@felsin9.de>
2022-07-10 23:08:57 +00:00
def aa788e228c Search in $PATH for server executable (fixes #5594) 2022-07-10 23:59:28 +02:00
Robert Müller ec4175277e Fix readability-container-data-pointer 2022-07-10 21:42:57 +02:00
Robert Müller 072b9ebaba Use DrawRoundRectExt instead of DrawRoundRect and remove the latter 2022-07-10 17:19:35 +02:00
Robert Müller cc0f64cc29 Use DrawRect instead of DrawRoundRect in CStatboard
To reduce duplicate code.
2022-07-10 17:19:34 +02:00
Robert Müller 992e5d0d07 Use DrawRect instead of DrawRoundRect in CMotd
To reduce duplicate code.
2022-07-10 17:19:34 +02:00
Robert Müller ab4a4aeb75 Use DrawRect instead of DrawRoundRect in CMenus
To reduce duplicate code.
2022-07-10 17:19:34 +02:00
Robert Müller 0c10b64ee5 Use DrawRect instead of DrawRoundRect in CConsole
To reduce duplicate code.
2022-07-10 17:19:33 +02:00
Robert Müller b571fdf93c Use DrawRect instead of DrawRoundRect/Ext in CScoreboard
To reduce duplicate code.
2022-07-10 17:19:33 +02:00
Robert Müller 76c9d86016 Use DrawRect instead of DrawRoundRect/Ext in CHud
To reduce duplicate code.
2022-07-10 17:19:33 +02:00
Robert Müller e042a22d1e Use DrawRect instead of DrawRoundRect/Ext in CSpectator
To reduce duplicate code.
2022-07-10 17:19:33 +02:00
Robert Müller a0ef36847b Add CRenderTools::DrawRect/4 and make DrawUIRect/4 delegates
So usages of `DrawRoundRect/Ext` can more easily be replaced with `DrawRect/4` and so the basic draw methods can be moved to the engine graphics without depending on the `CUIRect` class.
2022-07-10 17:19:32 +02:00
Robert Müller ebf6ce4d27 More efficient CreateRoundRectQuadContainer with CORNER_NONE
By adding an additional case that only creates a single quad when no corners / rounding are used, like in `DrawRoundRectExt4`.
2022-07-10 17:19:32 +02:00
Robert Müller a9787b15e3 Merge CRenderTools::DrawUIRect4NoRounding into DrawUIRect4
As this is a special case the methods can be merged to reduce the number of public methods.
2022-07-10 17:19:32 +02:00
heinrich5991 8996d152ab Allow multiple connect addresses
This allows the client to connect to servers that have both an IPv4 and
an IPv6 address, even if the client is only connected to one of the two.
The one faster to answer will be picked.

Timeout codes are now generated based on *all* of the server's
addresses.

Fixes #5158.
2022-07-10 16:57:10 +02:00
heinrich5991 6600024f24 Allow multiple addresses per server in the serverbrowser
Support is incomplete for `leak_ip_address_to_all_servers` (will only
ping the first address of each server) and for the `leak_ip` setting
(which will also only ping the first address of each server).
2022-07-10 16:52:07 +02:00
Robert Müller 0d29e6fe3f Rename variable HoverTime -> m_HoverTime 2022-07-10 15:40:17 +02:00
Robert Müller fb1919b9be Fix spaces around documentation comments in tooltip.h 2022-07-10 15:40:17 +02:00
Robert Müller 35483177e8 Use else-if instead of duplicating condition 2022-07-10 15:40:17 +02:00
bors[bot] e9f95dbefd
Merge #5598
5598: Fix the HUD bug I intoduced with  #5592 r=def- a=C0D3D3V

The bug was, if you spectate other players, the jump display and weapon display was broken.

Use for weapon and jump display now render information instead of the predicted data, so that these Displays are also correct if you spectate other players.
This is necessary since with https://github.com/ddnet/ddnet/pull/5592 this information is no longer present in the predicted character (if the character is not predicted)

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-07-09 22:13:18 +00:00
Alexander Akulich 6d9284adc1 Port some code to str_copy() template 2022-07-09 19:40:58 +03:00
Alexander Akulich 0d72b62daf Replace 3.14159265f with 'pi' from math.h 2022-07-09 19:19:21 +03:00
Alexander Akulich 9db49d9f74 variables.h: Add stub macros definitions to enable code highlight 2022-07-09 19:19:21 +03:00
Alexander Akulich 9faea2ff6e client/menus_ingame: Fix a warning about struct padding
Excessive padding in 'struct CColumn' (8 padding bytes, where 0 is optimal).
2022-07-09 19:16:46 +03:00
Alexander Akulich dd94d662ca client/settings: Use CUI::CORNER enum keys where appropriate 2022-07-09 19:16:46 +03:00
c0d3d3v 57995693ad
Use for weapon and jump display now render information instead of the
predicted data, so that these display are also correct if you spectate
other players.
This is necessery since with https://github.com/ddnet/ddnet/pull/5592
this information is no longer present in the predicted character (if the
chracter is not predicted)
2022-07-09 16:03:16 +02:00
bors[bot] e2f7f53bc8
Merge #5591
5591: (A bit) safer interface for text containers r=def- a=Jupeyy

For #5143
Maybe it helps identifying the problem earlier, maybe not^^

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-07-09 09:47:48 +00:00
bors[bot] 5345e55b94
Merge #5545
5545: Format name accordingly r=heinrich5991 a=Chairn

I think i got almost all the misstyped name. I did let some because they made sense to me. I think, only generated code remains to be formatted (and src/base and websockets, but those seems to have an exception).

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-07-08 23:08:02 +00:00
Dennis Felsing fe5e0298fd Version 16.2.1 2022-07-09 00:06:49 +02:00
c0d3d3v 1dacb3366b
rename ReadCharacterCore back to Read; Do not overwrite predicted
CharacterCore with Snap Data
2022-07-08 21:47:51 +02:00
Jupeyy c6589f3a5e (A bit) safer interface for text containers 2022-07-08 19:19:37 +02:00
Chairn b8840c4571 Replaced magic number with MAX_CHECKPOINTS 2022-07-08 18:01:33 +02:00
Chairn a69dc599a9 Huge variable naming format
Fix pointer and pointer array variable naming

Huge renaming to match our rules

Used regex: (?!(return|delete)\b)\b\w+ (m_|ms_|g_|gs_|s_)[^a]\w+\[
            (?!(return|delete)\b)\b\w+ (?!(m_|ms_|g_|gs_|s_))[^a]\w+\[

Further format static variables

Format almost all pointer names accordingly

Used regex: (?!(return)\b)\b\w+
\*(?!(m_p|p|s_p|m_ap|s_ap|g_p|g_ap|ap|gs_ap|ms_ap|gs_p|ms_p))\w+\b[^:\(p]

clang-format

Fix CI fail

Fix misnamed non pointer as pointer and non array as array

Used regex: (?!(return|delete)\b)\b\w+ (m_|ms_|g_|gs_|s_)p\w+\b
            (?!return\b)\b\w+ (ms_|m_|g_|gs_|s_)a\w+\b[^\[]

clang-format

Revert to SCREAMING_SNAKE_CASE and reinstate dead code
2022-07-08 18:01:29 +02:00
Robert Müller 85c78a9149 Use for-each loop in CHud::ResetHudContainers to reduce duplicate code 2022-07-08 16:53:35 +02:00
bors[bot] 66ab84a5fa
Merge #5544
5544: Replaced float array with appropriate struct (vec or color) r=def- a=Chairn

I mostly touched the code in the graphic part for array of 2 floats into vec2.
For color, i replaced array of 4 floats with ColorRGBA where it made sense.

I had to change the logic order in `src/engine/client/graphics_threaded.cpp:1113` due to operator= from vec2 to vec3. I didn't see any visual change.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-07-07 12:30:29 +00:00
bors[bot] e9eeb24c17
Merge #5345 #5519 #5572
5345: Add Integration test to pr template r=heinrich5991 a=def-



5519: Library updates (2022-06-27) r=heinrich5991 a=def-

Should probably wait until after 16.2 release with them.

Vulkan 1.3.204.1 -> 1.3.216.0
curl 7.81.0 -> 7.84.0
FFmpeg 5.0 -> 5.0.1
freetype 2.11.1 -> 2.12.1
SQLite3 3.37.2 -> 3.39.0

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


5572: Also make gameclient aware that snapshots have been purged (fixes #5571) r=heinrich5991 a=def-

Recreates SnapEntities internally

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: def <dennis@felsin9.de>
Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-07 10:41:22 +00:00
bors[bot] 9e9024d449
Merge #5585
5585: Only announce birthday once (fixes #5576) r=heinrich5991 a=def-

No matter if you use /timecp or rename

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-07 09:35:05 +00:00
Dennis Felsing aa18c1ee78 Only announce birthday once (fixes #5576)
No matter if you use /timecp or rename
2022-07-07 10:24:41 +02:00
bors[bot] a591fea1b2
Merge #5550
5550: Time checkpoints changes r=def- a=C0D3D3V

Fixes #5348

The checkpoint mechanic was last time updated here af44a79b03 and CNetMsg_Sv_DDRaceTime was introduced here: 86365bedcd

The whole design of `CNetMsg_Sv_DDRaceTime` is basically pretty bad, and it was only tired to copy the old broadcast behaviour (that we still have for vanilla client).
We are basically only sending floats (multiplied by 100) instead of using our integer ticks.  

Thats also the reason why checkpoints, close to the start (closer than one second), were not displayed (because it was forgotten to multiply m_time by 100 and so it was rounded to 0).

This PR adds a workaround for the problems, but this Net message is just designed wrong and should maybe in the future get updated to use ticks instead of rounded floats.
 
This PR allows to trigger Time Checkpoints in arbitrary order.
 
 This PR does not make checkpoints unskippable, because we currently have no way to do this, and we have no effect tile that is not skippable (except probably solid blocks).
 
 
 
 
## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-07-06 15:49:59 +00:00
c0d3d3v e6f1ef90de
send correct time diff on finish
send record when player joins or changes name
minor cleanup
2022-07-06 17:43:20 +02:00
Dennis Felsing ef9299c88d Also make gameclient aware that snapshots have been purged (fixes #5571)
Recreates SnapEntities internally
2022-07-06 15:42:05 +02:00
c0d3d3v ae80287c1b
Update checkpoint diff display to use time format with hours:minutes:centisecs
Add time diff to finish display.
Increase time the finish time display is displayed to 6 sec.
Allow to trigger time checkpoints out of order
2022-07-06 15:14:29 +02:00
c0d3d3v 498c2dbbcf
Renamed some time checkpoint related variables.
Init some of the time checkpoint variables explicitly
2022-07-06 15:13:55 +02:00
Chairn 32318a7c90 Reworked color system
Removed duplicate structs. Replaced 4 floats array with appropriate
struct where applicable
2022-07-06 11:39:51 +02:00
Chairn 27da8391dc Replace 2 floats array with vec2 where it makes sense 2022-07-06 11:39:43 +02:00
Jupeyy edc79e48cc Fix skindownload by only allowing move assignments 2022-07-04 18:24:34 +02:00
c0d3d3v a961151b32
Show also +0.00 split, and checkpoints close to start (<1sec) 2022-07-03 13:31:54 +02:00
c0d3d3v f5519d1d88
Fix HUD on server we think that they are DDRace, but they are not 2022-07-01 13:13:06 +02:00
Robert Müller f3fbe891a6 Fix player input player flags translation with sixup
The sixup translated player flags were previously applied in `OnDirectInput` directly to the player input data.
However, the input data has already been copied at that point, so predicted inputs were using the incorrect flags.
This is fixed by moving the player flags translation to `OnClientPrepareInput`, which is called first and only once on each new player input before it is copied.
2022-07-01 00:00:17 +02:00
c0d3d3v 6869530314
Rename IsTCheckpoint to IsTeleCheckpoint and IsXCheckpoint to IsFTimeCheckpoint. And reduce code duplication 2022-07-01 00:00:03 +02:00
Robert Müller 6d0806f99d Fix engine client flags not being updated under some conditions
The flags were only being updated based on rather arbitrary conditions, so they could never reset to zero or reduced.
The flags are now always updated. The flags are only used in the output of the `status` command.
2022-06-30 23:55:03 +02:00
c0d3d3v 0bfb854a0e
Rename TILE_CHECKPOINT_XXX to TILE_TIME_CHECKPOINT_XXX 2022-06-30 23:41:40 +02:00
Robert Müller d9b0304adb Use sizeof instead of constant 2022-06-30 19:46:33 +02:00
Robert Müller d5594d8bd6 Fix variable name EntitesAreMasked -> EntitiesAreMasked 2022-06-30 19:45:10 +02:00
Robert Müller 3c7847a8d9 Fix variable name WasUnknwon -> WasUnknown 2022-06-30 19:44:29 +02:00
luk 1c340daeaa fix typo and comment 2022-06-30 17:04:29 +02:00
bors[bot] 5e7ec64292
Merge #5486
5486: Switch to loading screen, when map creation takes too long r=def- a=Jupeyy

Same as #4941 

It doesn't directly fix the issue described in #5478, it does however not trigger it anymore. it's still a bug in our code unrelated  to this. This just triggered the UB from the issue as  `@ardadem` confirmed, SDL received a SDL_QUIT (`[2022-06-23 20:26:31][test]: sdl closed my client, but why xd`)

Now we have a confirmed case that making the window unresponsive can create weird behavior. Similar to the other pr switch to a loading screen after 500ms (this time without menu background map tho, since the menu background map calls the same code).

We really need some fancy loading screen for such situations, even tho they are rare xD

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-06-30 14:36:58 +00:00
bors[bot] 5e0eada302
Merge #5517
5517: Add APPEARANCE Settings page r=def- a=C0D3D3V

This could potentially also be added to 16.2

I also renamed  `cl_ddrace_hud` to `cl_showhud_ddrace` and ` cl_show_jumps_indicator` to `cl_showhud_jumps_indicator` I guess that fits better the pattern of the other configs.

![grafik](https://user-images.githubusercontent.com/14315968/175836449-eb74410c-df35-4177-ad42-be13a9593af8.png)

![grafik](https://user-images.githubusercontent.com/14315968/175836467-0e2ff022-8da7-468f-9df5-bb564e0f15f5.png)

![grafik](https://user-images.githubusercontent.com/14315968/176675550-c7adde7b-1c3a-4a0c-bcd6-945c9115c771.png)
![grafik](https://user-images.githubusercontent.com/14315968/176675586-8fb5645e-32a8-4276-ad6a-cac1dfbc3e67.png)

### for the following 3 tabs there is now room to add a preview in future
![grafik](https://user-images.githubusercontent.com/14315968/176675629-5470d864-c13d-492a-9064-3b5a3743253b.png)
![grafik](https://user-images.githubusercontent.com/14315968/176675677-f973bea8-31b4-4a00-85a9-1175b8fdea2f.png)
![grafik](https://user-images.githubusercontent.com/14315968/176675731-04ea48b2-ec18-4a0f-a4b5-48fe7c9dcd34.png)
![grafik](https://user-images.githubusercontent.com/14315968/176675779-70df98df-35da-4018-a81e-e26127492d36.png)

I changed some of the texts ... so please look at them carefully 

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-30 13:03:17 +00:00
c0d3d3v cee071e3f1
The appearance settings page has been revised to look more like the general and DDNet settings page 2022-06-30 14:17:07 +02:00
bors[bot] 2bd1273657
Merge #5514
5514: Update menu music state when the config variables change via console, various refactoring r=heinrich5991 a=Robyt3

Also update the background music when `snd_enable` or `snd_enable_music` change via console or bind. Closes #2911.

For this purpose, add `IsPlaying` method to engine sound and client sound component to check whether a specific sound sample is already playing.

Various refactoring in engine sound.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-30 11:07:07 +00:00
Chairn 96e9364fb0 Fix more unsafe define 2022-06-29 23:52:03 +02:00
c0d3d3v a26285c052
Add cl_nameplates_strong to settings page 2022-06-29 16:28:27 +02:00
c0d3d3v 281c766117
Add APPEARANCE Settings page 2022-06-29 16:28:19 +02:00
c0d3d3v 435b7ab489
revert to send server messages for now 2022-06-29 14:46:23 +02:00
bors[bot] 1743b7ce67
Merge #5210
5210: Move ddnet character display info in ddnet character r=def- a=C0D3D3V

- I also added the default value mechanic for Net Objects that have set `validate_size=False`
- I removed the ramp value from the snap, because currently all maps use the default tuning parameters for it
- I renamed `m_FreezeTick` to `m_FreezeStart` 

- Added Extended Net Objects to the debug HUD (Also added a Headline):
![grafik](https://user-images.githubusercontent.com/14315968/175284419-3014bc06-96a0-407d-b170-15e06350caa7.png)
(out of range) is in the screenshot the old DDNetCharacterDisplayInfo

fixes #5455

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-29 11:35:37 +00:00
Robert Müller 4534996fbc Fix movement of envelope points with Info (Ctrl+I)
Co-authored-by: oy <tom_adams@web.de>
2022-06-28 22:25:55 +02:00
Robert Müller a765abf8e6 Merge IgnoreGrid variable declarations and definitions 2022-06-28 22:06:24 +02:00
BeaR b25c094daa Envelope preview: make last point editable 2022-06-28 19:29:09 +02:00
Robert Müller ac40efa263 Only apply size and color if changed, when editing multiple layers
To prevent the color of all layers from being reset to zero when changing just the size.
2022-06-27 23:20:09 +02:00
Robert Müller 70866d6d0c Fix names of SCommonPropState member variables 2022-06-27 23:20:09 +02:00
c0d3d3v 2090178c8e
Set default of cl_freezebars_alpha_inside_freeze to 0 2022-06-27 12:20:09 +02:00
c0d3d3v 59436b5e6d
Add default values to extended Net Objects 2022-06-27 01:11:19 +02:00
c0d3d3v 07cfda5593
remove rampvalue from ddnetcharacter 2022-06-27 01:10:37 +02:00
c0d3d3v df52df9d4a
move DDNetCharacterDisplayInfo to DDNetCharacter
- add default value option to NetworkValues
- rename m_FreezeTick to m_FreezeStart
2022-06-27 01:10:25 +02:00
def 4733cdc769 Abort skin downloads too (fixes #5505) 2022-06-27 00:39:00 +02:00
Robert Müller 9390ae99b2 Fix OOB access when stopping a sound that has invalid samples 2022-06-26 22:43:32 +02:00
Robert Müller 9932bd76fb Update menu music state when the config variables change via console 2022-06-26 22:43:32 +02:00
Robert Müller 525527feb7 Add IsPlaying to sounds client component 2022-06-26 22:43:32 +02:00
Robert Müller 8eb1f6888d Refactoring: use CGameWorld::Clear in CGameWorld::CopyWorld 2022-06-26 12:51:17 +02:00
Jupeyy b62894dad4 Switch to loading screen, when map creation takes too long 2022-06-26 11:56:56 +02:00
Robert Müller 2df4c4c668 Fix heap-use-after-free in CGameWorld::RemoveEntity
Entities have a pointer to their parent entity. If the parent entity is freed first, then freeing the child will cause access to the already freed parent.

This is fixed by adding a child pointer and clearing the child and parent pointers when either child or parent is freed.
2022-06-26 11:28:23 +02:00
bors[bot] 1e31db257f
Merge #5420
5420: Improvments for new HUD r=def- a=C0D3D3V

for testing set `#define CLIENT_VERSIONNR 16020`
Some of the changes are only available in the next version

Impressions: https://youtu.be/E770vGp4KKY

Implements a few of the recommendations from https://github.com/ddnet/ddnet/issues/5159 and Discord
- removes all player capability messages send by the server, that are now displayed in the HUD
- ~~remove `cl_ddrace_hud` and cl_show_freeze_bars~~, 
- Added option `cl_freezebars_alpha_inside_freeze` setting to change the opacity if the player is inside a freeze tile (default visible 100%)
- Added option `cl_show_jumps_indicator`
- We send now the real weapon the player is holding if he is frozen
    -> for that we added a new particle "snow flakes" or frozen flakes :D that are spawned over the tees body, to indicate he is frozen.
    -> new extras.png asset (+ corresponding asset tab, that can potentially be used for all sorts of extras for our mod, e.g. material particles, but in the future maybe also for other mods using a similar structure like it is for entities)
- stars are no longer send to new clients, because it is duplication to the freezebar, and we decided to not allow to disable it 
- also ninja stars are no longer send. They are not vanilla, and we now have a ninja bar in the new HUD.
- display target angle from 0 to 360 (looks mirrored on the x-axis to the normal trigonometry circle, but that is just how the world coordinates are) 
- dummy action display is increased in size ( but only the border margin :D not the icons. so the icons are still the same size as the icons on the left side)
- allow the server to also show old HUD elements (see https://github.com/ddnet/ddnet/pull/5427 for screenshots)


fixes #5149
fixes #198
closes #5159

fixes #2252   ~~(But not clear if we should also display the weapon, still investigating)~~
- we do no longer display a weapon inside freeze, instead we have nice freeze particles

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-26 07:57:33 +00:00
Dennis Felsing fc2d419050 Version 16.2 2022-06-26 09:48:01 +02:00
bors[bot] 6315af0729
Merge #5504
5504: Remove useless typedef in c++ r=Jupeyy a=Chairn

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-06-26 06:49:01 +00:00
bors[bot] 0179dfd5e2
Merge #5499
5499: Use [[fallthrough]] attribute rather than comment r=def- a=Chairn

We could even add implicit fallthrough warning, but it is triggered in external json.c

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-06-25 21:49:43 +00:00
Chairn a3a85bee5f Remove useless typedef in c++ 2022-06-25 21:05:54 +02:00
Robert Müller 42532f3149 Use CRenderTools::RenderIcon in editor file dialog 2022-06-25 17:16:20 +02:00
Robert Müller fb91881765 Move CMenus::DoIcon to CRenderTools::RenderIcon
As this method only renders and doesn't provide an interactive element, the naming `Render` as well as the placement in `CRenderTools` fits better.

This also allows the method to be used in the editor.
2022-06-25 17:15:55 +02:00
Robert Müller 25ad47bed2 Use DoIcon for ingame player GUI icons 2022-06-25 16:57:25 +02:00
Robert Müller 87cb948166 Clamp number of demo timeline markers to valid range 2022-06-25 16:57:25 +02:00
Robert Müller 5184cf5523 Add greyed out demo icon for invalid or not loaded demos 2022-06-25 16:57:24 +02:00
Robert Müller f727199060 Render demo file icon in name column, remove DoIcon centering 2022-06-25 16:36:09 +02:00
c0d3d3v 706a06d4d4
clamp m_Armor, to prevent value correction on client side 2022-06-25 16:06:22 +02:00
c0d3d3v 4281df2429
Add new textures by ravie; Also add no gun hit for teleport gun 2022-06-25 16:05:38 +02:00
Chairn a50ddb75ff clang-format 2022-06-25 15:30:39 +02:00
Chairn 5f5b80ae57 Use [[fallthrough]] attribute rather than comment 2022-06-25 15:21:44 +02:00
Robert Müller 97e36fa4be Add optional color parameter to DoIcon 2022-06-25 13:43:40 +02:00
Robert Müller a530ce89d6 Rename DoButton_Icon to DoIcon and remove unused return value
As the function renders an icon and not a button.
2022-06-25 13:38:04 +02:00
c0d3d3v d78b3decd5
Revert to using conditions for the version check for capability chat messages; Remove ExcludeClientVersionAndHigher from CGameContext::SendChatTarget 2022-06-25 12:33:49 +02:00
c0d3d3v 6d098d866a
Remove ExcludeClientVersionAndHigher from CGameTeams::TeamMask; Add CGameContext::ClientsMaskExcludeClientVersionAndHigher 2022-06-25 11:16:59 +02:00
c0d3d3v dd1cdfcf2c
Add to some of the Sprite Arrays the array prefix 2022-06-25 10:39:39 +02:00
Dennis Felsing 83267ed0a7
Update src/game/client/components/console.cpp
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-25 01:19:40 +02:00
Dennis Felsing 5dd2e5083b
Update src/game/client/components/console.cpp
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-25 01:19:32 +02:00
Dennis Felsing 8933ae8357 Try to fix dump_local_console (fixes #5488)
Untested, but my hunch is that by not cutting off the last part the text
file will be correctly recognized as valid utf8
2022-06-24 16:47:23 +02:00
bors[bot] b75289df35
Merge #4829 #5343 #5465
4829: Added map_replace_area tool r=def- a=sctt

Motivation:
sometimes mappers need to copy a certain area from a map to another (but also to a different position of the same map).
that's very time consuming on complex maps, as tiles and quads layers have to be manually copied one by one.

map_replace_area is designed to automatically replace all the tiles and quads from a specific area to another.
`Usage: map_replace_area <from_map> <from_x> <from_y> <to_map> <to_x> <to_y> <width> <height> <output_map>`

PoW screenshots attached below.

note: for the moment map_replace_area suppose that you are working on the same map  (that's what i needed), that means source and destination maps must have the same layers structure, or else an error is returned.
but i understand it might be useful to also work on totally different maps, in that case users must be able specify layers they want to consider by associating source map layers to destination map layers (by using a config file maybe).
i'm probably going to make another PR to add this enhancement in the future.

PoW:
![Screenshot from 2022-03-16 18-08-12](https://user-images.githubusercontent.com/3328841/158650515-17c31639-28f7-4e19-954a-b5734ee82703.png)
![Screenshot from 2022-03-16 18-08-43](https://user-images.githubusercontent.com/3328841/158650512-6e21f2b4-538f-4974-aaa2-2983551d24b4.png)
![Screenshot from 2022-03-16 18-11-50](https://user-images.githubusercontent.com/3328841/158650510-d00a05a9-a2e8-4df2-8674-0c80fd894f66.png)

5343: Add rcon and chat to integration test r=def- a=ChillerDragon

Add more action to the integration test script: chat messages, chat commands, rcon commands.
This unlocks more code coverage at runtime to catch asan issues.

It adds a very restrictive regex on the log format. But I am happy to maintain that in case changes to the log output happen.
The current version is already supporting heinrichs refactor https://github.com/ddnet/ddnet/pull/5036

Also ensure chat messages arrive in the correct format. Would have catched the following issues:
https://github.com/ddnet/ddnet/issues/5342
https://github.com/ddnet/ddnet/issues/5340
https://github.com/ddnet/ddnet/issues/5302
https://github.com/ddnet/ddnet/pull/5126

DEPENDS ON:

https://github.com/ddnet/ddnet/issues/5342
https://github.com/ddnet/ddnet/issues/5340

5465: Change from pnglite to libpng for PNG reading r=def- a=heinrich5991

This is desirable mainly because libpng is maintained and pnglite is
not. pnglite was last updated in 2007 (15 years ago) and probably has a
lot of security vulnerabilities.

libpng is an actively maintained library also used by browsers like
Firefox or Chromium, so it's less likely to contain security
vulnerabilities, also it's more likely to be packaged by Linux
distributions.

This also refuses to load images of types not supported by pnglite,
which allows us to think about backward compatibility while also
introducing libpng.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: sctt <scottistefano91@gmail.com>
Co-authored-by: term <term@term.sinervis.pri>
Co-authored-by: f <scottistefano91@gmail.com>
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
Co-authored-by: def <dennis@felsin9.de>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-06-21 16:21:47 +00:00
Robert Müller 81e24ce8e8 Only enable UI editbox hotkeys when UI is enabled
Fixes hotkeys triggering console input and UI editbox input at the same time when the console is open and a UI editbox is selected.
2022-06-21 17:19:03 +02:00
heinrich5991 4625b55ad6 Move PNG handling to src/engine/gfx
This way, it's no longer compiled into the server.
2022-06-21 15:26:23 +02:00
bors[bot] 29be9a79fd
Merge #5461
5461: add penatly to the whole team r=def- a=BloodWod-513

this should fix it #5460

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: BloodWod-513 <dayn_2013@mail.ru>
2022-06-20 22:20:32 +00:00
BloodWod-513 d7b5921759 refactoring pPlayer to pPrimaryPlayer 2022-06-20 22:01:10 +05:00
BloodWod-513 d58c5dfc9d add penatly to the whole team 2022-06-20 22:01:10 +05:00
Robert Müller 352734de56 Organize game-server includes 2022-06-17 20:32:56 +02:00
Robert Müller 2add5d5c3c Organize game-client and editor includes 2022-06-17 20:32:56 +02:00
Robert Müller 4949645663 Organize game-shared includes 2022-06-17 17:39:25 +02:00
Robert Müller 0a4b1b9a7b Organize generated protocol includes 2022-06-17 17:39:24 +02:00
bors[bot] d4f0e5cf5e
Merge #5445
5445: Fix editor value scrollers not working and panning being slow r=heinrich5991 a=Robyt3

Accumulate the mouse deltas and reset them at the end of the frame to fix editor panning being slowed down and value scrollers (layer width etc.) not working anymore.

Closes #5441.

And minor cleanup.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-17 03:01:14 +00:00
effyn 6691d71da7 Gender-neutral language 2022-06-16 15:12:25 -07:00
Robert Müller c318dca703 Remove accidentally added double type 2022-06-16 21:01:51 +02:00
Robert Müller d9f4e1475e Update comment 2022-06-16 21:01:23 +02:00
Robert Müller 405ae97203 Fix editor value scrollers not working and panning being slow 2022-06-16 20:47:59 +02:00
bors[bot] 79de5409a5
Merge #5424
5424: no-goalshud r=heinrich5991 a=luk51

<s>do it using getgameinfo from gameclient introducting a new flag for ddrace</s>
use the same conditions as in the goalshudrender function, so don't render when empty

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Lukas Kitsche <lukaskitsche@posteo>
2022-06-16 14:33:56 +00:00
Lukas Kitsche 379d93ae7b no goals hud when empty 2022-06-16 16:28:50 +02:00
Robert Müller de2744cb2a Use ReadFile to read opus sounds in editor 2022-06-16 10:19:37 +02:00
c0d3d3v 781f2e7b57
add cl_show_jumps_indicator option 2022-06-15 22:05:44 +02:00
c0d3d3v f28b71d5cc
allow the server to also show old HUD elements (by @fokkonaut) 2022-06-15 22:05:43 +02:00
c0d3d3v 977d7d952c
Increase the size of dummy actions 2022-06-15 22:05:43 +02:00
c0d3d3v 6e8efa9204
Use 0 to 260 degree in Angle display, and do not display decimals of speed in debughd 2022-06-15 22:05:43 +02:00
c0d3d3v 44478b13ba
Add Opacity option for freeze bars inside freeze 2022-06-15 22:05:43 +02:00
c0d3d3v 51133dee2e
Add freezing snow flakes effect and fix 50HZ timer + add 10Hz Timer to particle system 2022-06-15 22:05:40 +02:00
c0d3d3v 2475e844e0
Add extras texture + asset tab 2022-06-15 22:03:52 +02:00
c0d3d3v 5cd0cc6040
send the weapon the player is really holding (except for ninjajetpack)
and render ninja skin in client if player is frozen

Do stll change the emote if a player with normal emote is freezed
2022-06-15 22:01:46 +02:00
c0d3d3v bba5027cea
show freezebar also inside freeze 2022-06-15 22:01:45 +02:00
c0d3d3v 167f2afc11
remove tile info messages and freeze/ninja stars for new clients using version checking 2022-06-15 22:01:35 +02:00
bors[bot] b8a82f71aa
Merge #5429
5429: More vector naming format r=heinrich5991 a=Chairn

Following of https://github.com/ddnet/ddnet/pull/5391

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-06-15 17:41:08 +00:00
Chairn c9345e7d32 More vector naming format 2022-06-15 19:37:37 +02:00
Robert Müller eb7e210fc1 Separate editor update and render to fix slow joystick input 2022-06-15 17:37:22 +02:00
ChillerDragon 2cc54c55de '*Char' -> '*pChr' 2022-06-15 14:39:13 +02:00
Dennis Felsing 34d3ddd9c2 Rename joystick to controller (settings, configs) (fixes #5419)
Also added one Localize
2022-06-15 13:05:14 +02:00
Robert Müller 7472e99dcf Add missing CursorType != IInput::CURSOR_NONE check in editor 2022-06-15 12:08:20 +02:00
bors[bot] 9bac36f87c
Merge #5415
5415: Also set mouse settings to defaults r=def- a=Robyt3



## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-14 22:15:37 +00:00
Robert Müller 518bed35ab Also set mouse settings to defaults 2022-06-14 23:41:21 +02:00
Robert Müller 1a04efe180 Use DoScrollbarOption for mouse sens., name settings consistently 2022-06-14 23:27:42 +02:00
bors[bot] 89e0450359
Merge #5374
5374: Joystick support 🕹️ r=def- a=Robyt3

Port all the joystick support from vanilla:

- Joystick controls
  - support for up to 12 axis (we are using the low level SDL interface so we don't differentiate between X/Y axis, sliders etc.)
  - two axis can be used for X and Y cursor movement
  - cursor input ingame can be relative or absolute
  - support for binding up to 12 joystick buttons
  - support for binding up to 2 hats (each has 8 directions)
  - support for binding axis movement to controls (so you can move with one control stick and aim with the other)
  - multiple joysticks can be connected at the same time, but only one can be actively used, the selected joystick will be remembered based on a GUID
- Joystick UI integration
  - allow moving the UI cursor with the specified joystick axis
  - change `CComponent::OnMouseMove` to `OnCursorMove` to handle joystick separately with its own sensitivity settings
  - remove premultiplied mousesens everywhere
- Joystick settings menu (also: separate mouse and movement settings)
![screenshot_2022-06-08_22-46-08](https://user-images.githubusercontent.com/23437060/172713929-9db75dfe-8408-4d06-827d-cdb162872514.png)
![screenshot_2022-06-08_22-46-10](https://user-images.githubusercontent.com/23437060/172713932-8945feb3-5f41-434c-b555-f92beb22db58.png)
![screenshot_2022-06-08_22-46-11](https://user-images.githubusercontent.com/23437060/172713935-19bb5a47-97dd-4a1e-86e9-a3569bd557ff.png)

Other changes:

- Remove the old unused joystick implementation (with config variable `inp_joystick`).
- Remove an unused parameter.
- Add `CUIEx::DoScrollbarOption` and `IScrollbarScale`
  - renders label, current value and scrollbar
  - with linear and logarithmic scale implementations
  - used for the sensitivity and tolerance settings
  - could eventually be used for most scrollbar settings to reduce duplicate code
  - has flags for:
     - `SCROLLBAR_OPTION_INFINITE`: The scrollbar can be moved all the way to the right for another value that represents ∞. Internally this value is 0.
     - `SCROLLBAR_OPTION_NOCLAMPVALUE`: The scrollbar allows values outside the specified min/max range, e.g. the sensitivity settings can technically be as high as 100000 when set with the console.
- Add `CUIEx::DoScrollbarOptionLabeled`
  - a `DoScrollbarOption` for selecting from a finite number of options with a scrollbar
  - used for switching between relative and absolute input
  - might see more use in the future

Reference: https://github.com/teeworlds/teeworlds/pulls?q=is%3Apr+joystick

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [X] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-14 18:01:11 +00:00
bors[bot] caf889d04a
Merge #5406
5406: Remove namespace tw r=Jupeyy a=heinrich5991

It didn't have a clear role, it just acted as a distinguisher between
two functions with the same name.

Rename `tw::time_get` to `time_get_nanoseconds` and delete the old
`time_get_nanoseconds`. Move `CCmdlineFix` and the typed
`net_socket_read_wait` function to the global namespace.

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-06-14 17:46:17 +00:00
bors[bot] 28ce480baa
Merge #5404
5404: Always send all tunings r=def- a=heinrich5991

It doesn't hurt since tunings after the last one are simply ignored.
This also stops future coders from introducing more and more cases in
this `if` chain.

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-06-13 22:10:51 +00:00
Robert Müller ac543deabd Remove cl_nameplates_ha and cl_nameplates_ha_size 2022-06-13 22:05:36 +02:00
Robert Müller e72e276e35 Allow out of range (joystick sens.) values with DoScrollbarOption 2022-06-13 20:41:49 +02:00
Robert Müller 58e1e3981c Add joystick settings to menu, split mouse and movement settings 2022-06-13 20:41:19 +02:00
Robert Müller 8f5dc3fa01 Add CUIEx::DoScrollbarOptionLabeled 2022-06-13 20:41:19 +02:00
Robert Müller 08edc457aa Add CUIEx::DoScrollbarOption and IScrollbarScale 2022-06-13 20:41:17 +02:00
Robert Müller 0cbd2ab4df Remove unused DoSettingsControlsButtons parameter ScopeView 2022-06-13 20:40:37 +02:00
Robert Müller 55d48db711 Integrate joystick with game controls and menus/editor UI 2022-06-13 20:40:37 +02:00
Robert Müller de76fbfb6a Remove existing joystick implementation 2022-06-13 20:40:36 +02:00
ChillerDragon 3667061b68 Use nullptr in generated and editor
-Wzero-as-null-pointer-constant
2022-06-13 18:28:13 +02:00
heinrich5991 b3a3604c36 Remove namespace tw
It didn't have a clear role, it just acted as a distinguisher between
two functions with the same name.

Rename `tw::time_get` to `time_get_nanoseconds` and delete the old
`time_get_nanoseconds`. Move `CCmdlineFix` and the typed
`net_socket_read_wait` function to the global namespace.
2022-06-13 18:07:29 +02:00
heinrich5991 bc1d293e30 Always send all tunings
It doesn't hurt since tunings after the last one are simply ignored.
This also stops future coders from introducing more and more cases in
this `if` chain.
2022-06-13 17:00:09 +02:00
heinrich5991 cedb3a90f9 Only re-send tunings for old versions
Newer clients send their version early in the connection establishment,
so we don't have to re-send tunings after we learn their version number.
2022-06-13 17:00:09 +02:00
bors[bot] 5a7fa108a6
Merge #5393
5393: Remove `ui_scale`: r=def- a=Robyt3

- remove config variable `ui_scale`
- remove `CUI::Scale`
- remove `CUI::SetScale`
- remove `CUI::DoLabelScaled`
- remove `CUIRect::Scale`
- use `CUI::DoLabel` instead of `CUI::DoLabelScaled`
- remove usages of `CUI::Scale()` and `CUIRect::Scale()`, or use 1.0f instead

Closes #5062. Closes #5358. Closes #5390.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-13 13:02:21 +00:00
bors[bot] 5f6e5323da
Merge #5397
5397: Add community skin option to client r=def- a=Jupeyy

I think this was requested in the client too,
rn I dont get any skins, maybe cloudflare caching or smth. Will test the days or if someone can test it go ahead

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-06-13 12:42:19 +00:00
Jupeyy 2710fe85be Add community skin option to client 2022-06-12 18:21:29 +02:00
bors[bot] ae1876d141
Merge #5388
5388: Remove obsolete AfkTimer function r=def- a=ardadem

It does the same job with: 425f07c03d/src/game/server/gamecontroller.cpp (L48)

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Arda Demir <ddmirarda@gmail.com>
2022-06-12 11:26:06 +00:00
bors[bot] 40dfc06d50
Merge #5387
5387: Some qol changes for practice r=def- a=kiw-q

Some quality of life changes for practice
- Unfreezes when "rescued"
- Resets speed when teleporting

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: kiw-q <kiw-q@fedora.email>
2022-06-12 09:19:53 +00:00
Robert Müller ffff4435c4 Remove ui_scale:
- remove config variable `ui_scale`
- remove `CUI::Scale`
- remove `CUI::SetScale`
- remove `CUI::DoLabelScaled`
- remove `CUIRect::Scale`
- use `CUI::DoLabel` instead of `CUI::DoLabelScaled`
- remove usages of `CUI::Scale()` and `CUIRect::Scale()`, or use 1.0f instead
2022-06-12 10:40:19 +02:00
bors[bot] 47b9bccd38
Merge #5391
5391: Format vector variables names (fixes #5209) r=Jupeyy a=Chairn


## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-06-12 05:24:56 +00:00
def b8e83674eb /cptime fix 2022-06-12 00:55:11 +02:00
Chairn 14f7f2e041 Remaining formatting and fix github code scanning 2022-06-11 22:03:23 +02:00
kiw-q 6725c367c9 Some qol changes for practice 2022-06-11 21:46:49 +02:00
Chairn 01edaec628 Format vector variables names (fixes #5209) 2022-06-11 21:38:49 +02:00
Arda Demir c4492c27ea Move/rename AfkVoteTimer to AfkTimer 2022-06-11 21:11:28 +03:00
Arda Demir 18ab88d33e Remove obsolete AfkTimer function 2022-06-11 21:11:25 +03:00
c0d3d3v 24e1fa9a73
change m_ZeroEnergyBounceInLastTick to bool 2022-06-10 17:46:32 +02:00
c0d3d3v c579e2637f
let lasers bounce with zero energy for one tick 2022-06-10 15:16:41 +02:00
Dennis Felsing 1e94d1fa79 Remove sv_checkpoint_save 2022-06-08 21:10:40 +02:00
Dennis Felsing 7686dcc921 Add /timecp command to get another players time checkpoints
Useful to compare your performance against another player. Currently can
only be done by renaming yourself to the player's name
2022-06-08 21:10:36 +02:00
Dennis Felsing a2cd441d1c Get best Time Checkpoints back if map has one
Even if you made a better finish without time cps before. Can happen now
that we add Time CPs to existing maps:
https://docs.google.com/spreadsheets/d/1yMMBLSbS2cOSYsbIMkDZpMLaV6k930mXj5yVZF0Uuaw/edit#gid=0
2022-06-08 15:37:50 +02:00
Robert Müller 9a17617a28 Let IInput::MouseRelative return true if mouse was moved 2022-06-06 22:06:56 +02:00
Robert Müller e0e1f49530 Extract BrushFlipXImpl and BrushFlipYImpl 2022-06-06 11:29:52 +02:00
Robert Müller 19e97829ce Extract CLayerTiles::ShiftImpl 2022-06-06 10:59:36 +02:00
bors[bot] 152ee93e16
Merge #5347
5347: Fix deleting envelopes not updating sounds r=def- a=C0D3D3V

Original fix by Ravie... updated to latest code

I do not really know how to trigger the bug, but for me adding and deleting sounds to the map, worked.... Since it is only the updated version from Ravie I think it works
`@HiRavie` maybe you can test it again

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-05 15:20:58 +00:00
c0d3d3v 52b717f848
Fix deleting envelopes not updating sounds 2022-06-05 15:21:00 +02:00
bors[bot] b554039740
Merge #5320
5320: Fix prediction input timing r=def- a=trml

Fixes #5307 by updating the prediction to use the new input handling from #5032, and also removed some now no longer used code.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: trml <trml@users.noreply.github.com>
2022-06-04 22:37:03 +00:00
hus3h db529318ab Unfreeze character after teleporting in practice 2022-06-03 21:31:30 +03:00
bors[bot] 36d0c0dcb4
Merge #5334
5334: fix pixel porridge in freeze and ninja bar r=Jupeyy a=C0D3D3V

fixes #5319

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-03 16:31:26 +00:00
c0d3d3v c33e0c124e
fix pixel porridge in freeze and ninja bar 2022-06-03 18:27:30 +02:00
bors[bot] 4ead727692
Merge #5330
5330: Actually fix capital /WHISPER r=Jupeyy a=def-

As reported by kiwq

<!-- What is the motivation for the changes of this pull request -->

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-06-03 14:55:30 +00:00
Dennis Felsing 9807625ca4 Actually fix capital /WHISPER
As reported by kiwq
2022-06-03 15:26:35 +02:00
bors[bot] 537be53fc2
Merge #5329
5329: Let the names in the mini score hud overflow to the left r=def- a=C0D3D3V

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [x] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-03 12:48:50 +00:00
c0d3d3v 090ae5e170
Let the names in the mini score hud overflow to the left 2022-06-03 13:57:39 +02:00
trml 455b17e957 Update prediction to use new input handling 2022-06-02 22:35:10 +02:00
bors[bot] c31d3e5fde
Merge #5301
5301: Avoid unnecessary copy leading to crash r=C0D3D3V a=Learath2

<!-- What is the motivation for the changes of this pull request -->
Reported by kiwq#4737 on Discord.

This issue was revealed by the addition of a `std::set` into `CCharacterCore`, I'm unsure why the copy constructor of `std::set` didn't work. It might be a good idea to check and see if there is a further underlying issue `@C0D3D3V.`

<details>
  <summary>Backtrace</summary>

  ```c++
#0  __gnu_cxx::new_allocator<std::_Rb_tree_node<int> >::construct<int, int const&> (this=0x7fffffff95e8, __p=0x555558935fd0) at /usr/include/c++/10.2/ext/new_allocator.h:150
No locals.
#1  0x0000555555831100 in std::allocator_traits<std::allocator<std::_Rb_tree_node<int> > >::construct<int, int const&> (__a=..., __p=0x555558935fd0)
    at /usr/include/c++/10.2/bits/alloc_traits.h:512
No locals.
#2  0x00005555558306b7 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_construct_node<int const&> (this=0x7fffffff95e8, __node=0x555558935fb0)
    at /usr/include/c++/10.2/bits/stl_tree.h:618
No locals.
#3  0x0000555555830727 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_create_node<int const&> (this=0x7fffffff95e8)
    at /usr/include/c++/10.2/bits/stl_tree.h:635
        __tmp = 0x555558935fb0
#4  0x000055555583055c in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_Alloc_node::operator()<int const&> (this=0x7fffffff92d0, 
    __arg=<error reading variable>) at /usr/include/c++/10.2/bits/stl_tree.h:552
No locals.
#5  0x000055555582fcd1 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_clone_node<std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_Alloc_node> (this=0x7fffffff95e8, __x=0xffffffc100000000, __node_gen=...) at /usr/include/c++/10.2/bits/stl_tree.h:662
        __tmp = 0x7fffeb7a3a10
#6  0x000055555582f188 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_copy<std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_Alloc_node> (this=0x7fffffff95e8, __x=0xffffffc100000000, __p=0x7fffffff95f0, __node_gen=...) at /usr/include/c++/10.2/bits/stl_tree.h:1881
        __top = 0x7fffeb7a3a10
#7  0x000055555582e294 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_copy<std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_Alloc_node> (this=0x7fffffff95e8, __x=..., __gen=...) at /usr/include/c++/10.2/bits/stl_tree.h:897
        __root = 0x7fffffff95e8
#8  0x000055555582d41d in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_copy (this=0x7fffffff95e8, __x=...)
    at /usr/include/c++/10.2/bits/stl_tree.h:908
        __an = {_M_t = `@0x7fffffff95e8}`
#9  0x000055555582c1f2 in std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_Rb_tree (this=0x7fffffff95e8, __x=...)
    at /usr/include/c++/10.2/bits/stl_tree.h:946
No locals.
#10 0x0000555555828912 in std::set<int, std::less<int>, std::allocator<int> >::set (this=0x7fffffff95e8) at /usr/include/c++/10.2/bits/stl_set.h:223
No locals.
#11 0x0000555555828a4b in CCharacterCore::CCharacterCore (this=0x7fffffff9598) at /home/ant/ddnet/src/game/gamecore.h:203
No locals.
#12 0x000055555582b426 in CGameClient::CClientData::CClientData (this=0x7fffffff9500) at /home/ant/ddnet/src/game/client/gameclient.h:338
No locals.
#13 0x000055555581b3f1 in CGameClient::IntersectCharacter (this=0x7fffeb496010, HookPos=..., NewPos=..., NewPos2=..., ownID=-2) at /home/ant/ddnet/src/game/client/gameclient.cpp:2195
        Distance = 0
        ClosestID = -1
        OwnClientData = {m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0, m_aName = '\000' <repeats 15 times>, m_aClan = '\000' <repeats 11 times>, m_Country = 0, 
          m_aSkinName = '\000' <repeats 63 times>, m_SkinColor = 1156586, m_Team = 2324, m_Emoticon = 5316, m_EmoticonStartFraction = 1.19110369e-42, m_EmoticonStartTick = -672, 
          m_Solo = 126, m_Jetpack = 4, m_NoCollision = false, m_EndlessHook = false, m_EndlessJump = false, m_NoHammerHit = false, m_NoGrenadeHit = false, m_NoLaserHit = false, 
          m_NoShotgunHit = false, m_NoHookHit = false, m_Super = false, m_HasTelegunGun = false, m_HasTelegunGrenade = 255, m_HasTelegunLaser = 255, m_FreezeEnd = 0, m_DeepFrozen = false, 
          m_LiveFrozen = false, m_Predicted = {m_pWorld = 0x14c700000911, m_pCollision = 0xffffff02ffffffe0, m_pTeleOuts = 0x1, m_Pos = {{x = 0, u = 0}, {y = 0, v = 0}}, m_Vel = {{x = 0, 
                u = 0}, {y = 1.40129846e-45, v = 1.40129846e-45}}, m_HookPos = {{x = 1.62071238e-39, u = 1.62071238e-39}, {y = 6.88766221e-41, v = 6.88766221e-41}}, m_HookDir = {{x = 0, 
                u = 0}, {y = 2.80259693e-45, v = 2.80259693e-45}}, m_HookTeleBase = {{x = 0, u = 0}, {y = 6.44597294e-44, v = 6.44597294e-44}}, m_HookTick = 1, m_HookState = 0, 
            m_HookedPlayer = 0, m_AttachedPlayers = {_M_t = {
                _M_impl = {<std::allocator<std::_Rb_tree_node<int> >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<int> >> = {<No data fields>}, <No data fields>}, <std::_Rb_tree_key_compare<std::less<int> >> = {_M_key_compare = {<std::binary_function<int, int, bool>> = {<No data fields>}, <No data fields>}}, <std::_Rb_tree_header> = {_M_header = {_M_color = std::_S_red, 
                      _M_parent = 0x0, _M_left = 0x7fffffff95f0, _M_right = 0x7fffffff95f0}, _M_node_count = 0}, <No data fields>}}}, m_ActiveWeapon = 0, m_aWeapons = {{
                m_AmmoRegenStart = 0, m_Ammo = -1, m_Ammocost = 0, m_Got = 23}, {m_AmmoRegenStart = 1479, m_Ammo = 2865, m_Ammocost = -253, m_Got = 218}, {m_AmmoRegenStart = 1, m_Ammo = 0, 
                m_Ammocost = 0, m_Got = false}, {m_AmmoRegenStart = 5, m_Ammo = 0, m_Ammocost = 0, m_Got = false}, {m_AmmoRegenStart = 0, m_Ammo = 1, m_Ammocost = 12918599, m_Got = 255}, {
                m_AmmoRegenStart = 1702519144, m_Ammo = 84, m_Ammocost = 0, m_Got = false}}, m_Ninja = {m_ActivationDir = {{x = 0, u = 0}, {y = 0, v = 0}}, m_ActivationTick = 0, 
              m_CurrentMoveTime = -1, m_OldVelAmount = 1935961199}, m_NewHook = 99, m_Jumped = 108, m_JumpedTotal = 0, m_Jumps = 0, m_Direction = 0, m_Angle = 0, m_Input = {m_Direction = 0, m_TargetX = 0, m_TargetY = 0, m_Jump = 0, m_Fire = 0, m_Hook = 0, m_PlayerFlags = 0, m_WantedWeapon = 0, m_NextWeapon = 0, m_PrevWeapon = 0}, m_TriggeredEvents = 0, m_Id = 0, m_pReset = false, m_LastVel = {{x = -nan(0x7fffff), u = -nan(0x7fffff)}, {y = 0, v = 0}}, m_Colliding = 0, m_LeftWall = false, m_Solo = false, m_Jetpack = false, m_NoCollision = false, m_EndlessHook = false, m_EndlessJump = false, m_NoHammerHit = false, m_NoGrenadeHit = false, m_NoLaserHit = 103, m_NoShotgunHit = 166, m_NoHookHit = 17, m_Super = false, m_HasTelegunGun = false, m_HasTelegunGrenade = false, m_HasTelegunLaser = false, m_FreezeTick = -343988384, m_FreezeEnd = 32767, m_IsInFreeze = 96, m_DeepFrozen = 10, m_LiveFrozen = 122, m_Tuning = {static ms_apNames = {0x5555559e9dec "ground_control_speed", 0x5555559e9e01 "ground_control_accel", 0x5555559e9e16 "ground_friction", 0x5555559e9e26 "ground_jump_impulse", 0x5555559e9e3a "air_jump_impulse", 0x5555559e9e4b "air_control_speed", 0x5555559e9e5d "air_control_accel", 0x5555559e9e6f "air_friction", 0x5555559e9e7c "hook_length", 0x5555559e9e88 "hook_fire_speed", 0x5555559e9e98 "hook_drag_accel", 0x5555559e9ea8 "hook_drag_speed", 0x5555559e9eb8 "gravity", 0x5555559e9ec0 "velramp_start", 0x5555559e9ece "velramp_range", 0x5555559e9edc "velramp_curvature", 0x5555559e9eee "gun_curvature", 0x5555559e9efc "gun_speed", 0x5555559e9f06 "gun_lifetime", 0x5555559e9f13 "shotgun_curvature", 0x5555559e9f25 "shotgun_speed", 0x5555559e9f33 "shotgun_speeddiff", 0x5555559e9f45 "shotgun_lifetime", 0x5555559e9f56 "grenade_curvature", 0x5555559e9f68 "grenade_speed", 0x5555559e9f76 "grenade_lifetime", 0x5555559e9f87 "laser_reach", 0x5555559e9f93 "laser_bounce_delay", 0x5555559e9fa6 "laser_bounce_num", 0x5555559e9fb7 "laser_bounce_cost", 0x5555559e9fc9 "laser_damage", 0x5555559e9fd6 "player_collision", 0x5555559e9fe7 "player_hooking", 0x5555559e9ff6 "jetpack_strength", 0x5555559ea007 "shotgun_strength", 0x5555559ea018 "explosion_strength", 0x5555559ea02b "hammer_strength", 0x5555559ea03b "hook_duration", 0x5555559ea049 "hammer_fire_delay", 0x5555559ea05b "gun_fire_delay", 0x5555559ea06a "shotgun_fire_delay", 0x5555559ea07d "grenade_fire_delay", 0x5555559ea090 "laser_fire_delay", 0x5555559ea0a1 "ninja_fire_delay", 0x5555559ea0b2 "hammer_hit_fire_delay"}, m_GroundControlSpeed = {m_Value = 32767}, m_GroundControlAccel = {m_Value = 0}, m_GroundFriction = {m_Value = 0}, m_GroundJumpImpulse = {m_Value = 1151303680}, m_AirJumpImpulse = {m_Value = 1160581120}, m_AirControlSpeed = {m_Value = -1149239296}, m_AirControlAccel = {m_Value = 0}, m_AirFriction = {m_Value = 1151303680}, m_HookLength = {m_Value = 1160581120}, m_HookFireSpeed = {m_Value = -1082130432}, m_HookDragAccel = {m_Value = -1130364928}, m_HookDragSpeed = {m_Value = 0}, m_Gravity = {m_Value = 0}, m_VelrampStart = {m_Value = 19}, m_VelrampRange = {m_Value = 0}, m_VelrampCurvature = {m_Value = -1}, m_GunCurvature = {m_Value = 0}, m_GunSpeed = {m_Value = 0}, m_GunLifetime = {m_Value = 0}, m_ShotgunCurvature = {m_Value = 0}, m_ShotgunSpeed = {m_Value = 0}, m_ShotgunSpeeddiff = {m_Value = 0}, m_ShotgunLifetime = {m_Value = 0}, m_GrenadeCurvature = {m_Value = -26800}, m_GrenadeSpeed = {m_Value = 32767}, m_GrenadeLifetime = {m_Value = -26800}, m_LaserReach = {m_Value = 32767}, m_LaserBounceDelay = {m_Value = 0}, m_LaserBounceNum = {m_Value = 0}, m_LaserBounceCost = {m_Value = 0}, m_LaserDamage = {m_Value = 0}, m_PlayerCollision = {m_Value = -1}, m_PlayerHooking = {m_Value = 0}, m_JetpackStrength = {m_Value = 1}, m_ShotgunStrength = {m_Value = 0}, m_ExplosionStrength = {m_Value = -1}, m_HammerStrength = {m_Value = 0}, m_HookDuration = {m_Value = 1}, m_HammerFireDelay = {m_Value = 0}, m_GunFireDelay = {m_Value = -1}, m_ShotgunFireDelay = {m_Value = 0}, m_GrenadeFireDelay = {m_Value = 0}, m_LaserFireDelay = {m_Value = 0}, m_NinjaFireDelay = {m_Value = -1}, m_HammerHitFireDelay = {m_Value = 0}}, m_pTeams = 0x0, m_MoveRestrictions = -1}, m_PrevPredicted = {m_pWorld = 0x0, m_pCollision = 0xffffffff, m_pTeleOuts = 0x0, m_Pos = {{x = 0, u = 0}, {y = 0, v = 0}}, m_Vel = {{x = 0, u = 0}, {y = 0, v = 0}}, m_HookPos = {{x = 0, u = 0}, {y = 0, v = 0}}, m_HookDir = {{x = 0, u = 0}, {y = 2.80259693e-45, v = 2.80259693e-45}}, m_HookTeleBase = {{x = 0, u = 0}, {y = 1.52881662e-42, v = 1.52881662e-42}}, m_HookTick = 0, m_HookState = -111, m_HookedPlayer = -230, m_AttachedPlayers = {_M_t = {_M_impl = {<std::allocator<std::_Rb_tree_node<int> >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<int> >> = {<No data fields>}, <No data fields>}, <std::_Rb_tree_key_compare<std::less<int> >> = {_M_key_compare = {<std::binary_function<int, int, bool>> = {<No data fields>}, <No data fields>}}, <std::_Rb_tree_header> = {_M_header = {_M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x3b00000000, _M_right = 0xffff9800}, _M_node_count = 0}, <No data fields>}}}, m_ActiveWeapon = 1, m_aWeapons = {{m_AmmoRegenStart = 0, m_Ammo = 0, m_Ammocost = 0, m_Got = 209}, {m_AmmoRegenStart = 1156711, m_Ammo = 1, m_Ammocost = 1000, m_Got = 200}, {m_AmmoRegenStart = 50, m_Ammo = 1320, m_Ammocost = 1200, m_Got = 244}, {m_AmmoRegenStart = 150, m_Ammo = 95, m_Ammocost = 38000, m_Got = 64}, {m_AmmoRegenStart = 300, m_Ammo = 1500, m_Ammocost = 50, m_Got = 216}, {m_AmmoRegenStart = 200000, m_Ammo = 140, m_Ammocost = 0, m_Got = 224}}, m_Ninja = {m_ActivationDir = {{x = 2.80259693e-43, u = 2.80259693e-43}, {y = 0, v = 0}}, m_ActivationTick = 50000, m_CurrentMoveTime = 0, m_OldVelAmount = 20}, m_NewHook = 188, m_Jumped = 100000, m_JumpedTotal = 200, m_Jumps = 80000, m_Direction = 15000, m_Angle = 100000, m_Input = {m_Direction = 0, m_TargetX = 500, m_TargetY = 100, m_Jump = 100, m_Fire = 0, m_Hook = 1000, m_PlayerFlags = 600, m_WantedWeapon = 100, m_NextWeapon = 125, m_PrevWeapon = 12500}, m_TriggeredEvents = 12500, m_Id = 50000, m_pReset = 80, m_LastVel = {{x = 1.12103877e-40, u = 1.12103877e-40}, {y = 1.12103877e-40, v = 1.12103877e-40}}, m_Colliding = 32000, m_LeftWall = 208, m_Solo = 42, m_Jetpack = 127, m_NoCollision = 235, m_EndlessHook = 255, m_EndlessJump = 127, m_NoHammerHit = false, m_NoGrenadeHit = false, m_NoLaserHit = false, m_NoShotgunHit = false, m_NoHookHit = false, m_Super = false, m_HasTelegunGun = false, m_HasTelegunGrenade = false, m_HasTelegunLaser = false, m_FreezeTick = -343988384, m_FreezeEnd = 32767, m_IsInFreeze = 96, m_DeepFrozen = 10, m_LiveFrozen = 122, m_Tuning = {static ms_apNames = {0x5555559e9dec "ground_control_speed", 0x5555559e9e01 "ground_control_accel", 0x5555559e9e16 "ground_friction", 0x5555559e9e26 "ground_jump_impulse", 0x5555559e9e3a "air_jump_impulse", 0x5555559e9e4b "air_control_speed", 0x5555559e9e5d "air_control_accel", 0x5555559e9e6f "air_friction", 0x5555559e9e7c "hook_length", 0x5555559e9e88 "hook_fire_speed", 0x5555559e9e98 "hook_drag_accel", 0x5555559e9ea8 "hook_drag_speed", 0x5555559e9eb8 "gravity", 0x5555559e9ec0 "velramp_start", 0x5555559e9ece "velramp_range", 0x5555559e9edc "velramp_curvature", 0x5555559e9eee "gun_curvature", 0x5555559e9efc "gun_speed", 0x5555559e9f06 "gun_lifetime", 0x5555559e9f13 "shotgun_curvature", 0x5555559e9f25 "shotgun_speed", 0x5555559e9f33 "shotgun_speeddiff", 0x5555559e9f45 "shotgun_lifetime", 0x5555559e9f56 "grenade_curvature", 0x5555559e9f68 "grenade_speed", 0x5555559e9f76 "grenade_lifetime", 0x5555559e9f87 "laser_reach", 0x5555559e9f93 "laser_bounce_delay", 0x5555559e9fa6 "laser_bounce_num", 0x5555559e9fb7 "laser_bounce_cost", 0x5555559e9fc9 "laser_damage", 0x5555559e9fd6 "player_collision", 0x5555559e9fe7 "player_hooking", 0x5555559e9ff6 "jetpack_strength", 0x5555559ea007 "shotgun_strength", 0x5555559ea018 "explosion_strength", 0x5555559ea02b "hammer_strength", 0x5555559ea03b "hook_duration", 0x5555559ea049 "hammer_fire_delay", 0x5555559ea05b "gun_fire_delay", 0x5555559ea06a "shotgun_fire_delay", 0x5555559ea07d "grenade_fire_delay", 0x5555559ea090 "laser_fire_delay", 0x5555559ea0a1 "ninja_fire_delay", 0x5555559ea0b2 "hammer_hit_fire_delay"}, m_GroundControlSpeed = {m_Value = 32767}, m_GroundControlAccel = {m_Value = 0}, m_GroundFriction = {m_Value = 0}, m_GroundJumpImpulse = {m_Value = 1151303680}, m_AirJumpImpulse = {m_Value = 1160581120}, m_AirControlSpeed = {m_Value = -1149239296}, m_AirControlAccel = {m_Value = 0}, m_AirFriction = {m_Value = 1151303680}, m_HookLength = {m_Value = 1160581120}, m_HookFireSpeed = {m_Value = -1082130432}, m_HookDragAccel = {m_Value = -1130364928}, m_HookDragSpeed = {m_Value = 0}, m_Gravity = {m_Value = 0}, m_VelrampStart = {m_Value = 19}, m_VelrampRange = {m_Value = 0}, m_VelrampCurvature = {m_Value = -1}, m_GunCurvature = {m_Value = 0}, m_GunSpeed = {m_Value = 0}, m_GunLifetime = {m_Value = 0}, m_ShotgunCurvature = {m_Value = 0}, m_ShotgunSpeed = {m_Value = 5}, m_ShotgunSpeeddiff = {m_Value = 0}, m_ShotgunLifetime = {m_Value = 0}, m_GrenadeCurvature = {m_Value = -26240}, m_GrenadeSpeed = {m_Value = 32767}, m_GrenadeLifetime = {m_Value = -26240}, m_LaserReach = {m_Value = 32767}, m_LaserBounceDelay = {m_Value = 0}, m_LaserBounceNum = {m_Value = 0}, m_LaserBounceCost = {m_Value = 0}, m_LaserDamage = {m_Value = 0}, m_PlayerCollision = {m_Value = -1}, m_PlayerHooking = {m_Value = 0}, m_JetpackStrength = {m_Value = 1}, m_ShotgunStrength = {m_Value = 0}, m_ExplosionStrength = {m_Value = -1}, m_HammerStrength = {m_Value = 0}, m_HookDuration = {m_Value = 1}, m_HammerFireDelay = {m_Value = 0}, m_GunFireDelay = {m_Value = -1}, m_ShotgunFireDelay = {m_Value = 0}, m_GrenadeFireDelay = {m_Value = 0}, m_LaserFireDelay = {m_Value = 0}, m_NinjaFireDelay = {m_Value = -1}, m_HammerHitFireDelay = {m_Value = 0}}, m_pTeams = 0x0, m_MoveRestrictions = -1}, m_SkinInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = 0}, m_BodyOutline = {m_Id = 0}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = 0}, m_Hands = {m_Id = 0}, m_HandsOutline = {m_Id = 0}, m_Eyes = {{m_Id = 0}, {m_Id = 0}, {m_Id = 0}, {m_Id = 0}, {m_Id = -256}, {m_Id = 0}}}, m_ColorableRenderSkin = {m_Body = {m_Id = 0}, m_BodyOutline = {m_Id = 2}, m_Feet = {m_Id = 0}, m_FeetOutline = {m_Id = 1091}, m_Hands = {m_Id = 0}, m_HandsOutline = {m_Id = -111}, m_Eyes = {{m_Id = -230}, {m_Id = 0}, {m_Id = 0}, {m_Id = 0}, {m_Id = 0}, {m_Id = 0}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = 0}, m_Height = {m_Value = 0}, m_OffsetX = {m_Value = 0}, m_OffsetY = {m_Value = 59}, m_MaxWidth = {m_Value = 0}, m_MaxHeight = {m_Value = 0}}, m_Feet = {m_Width = {m_Value = 0}, m_Height = {m_Value = 0}, m_OffsetX = {m_Value = 1}, m_OffsetY = {m_Value = 0}, m_MaxWidth = {m_Value = 0}, m_MaxHeight = {m_Value = 0}}}, m_CustomColoredSkin = 209, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 1.62089735e-39, r = 1.62089735e-39, h = 1.62089735e-39}, {y = 1.40129846e-45, g = 1.40129846e-45, s = 1.40129846e-45}, {z = 1.40129846e-42, b = 1.40129846e-42, l = 1.40129846e-42, v = 1.40129846e-42}, {w = 2.80259693e-43, a = 2.80259693e-43}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 7.00649232e-44, r = 7.00649232e-44, h = 7.00649232e-44}, {y = 1.84971397e-42, g = 1.84971397e-42, s = 1.84971397e-42}, {z = 1.68155816e-42, b = 1.68155816e-42, l = 1.68155816e-42, v = 1.68155816e-42}, {w = 7.00649232e-43, a = 7.00649232e-43}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 2.1019477e-43, r = 2.1019477e-43, h = 2.1019477e-43}, {y = 1.33123354e-43, g = 1.33123354e-43, s = 1.33123354e-43}, {z = 5.32493416e-41, b = 5.32493416e-41, l = 5.32493416e-41, v = 5.32493416e-41}, {w = 1.12103877e-41, a = 1.12103877e-41}}, <No data fields>}, m_Size = 4.20389539e-43, m_GotAirJump = 1500, m_ShineDecoration = 50}, m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = 55000}, m_BodyOutline = {m_Id = 200000}, m_Feet = {m_Id = 140}, m_FeetOutline = {m_Id = 0}, m_Hands = {m_Id = 140000}, m_HandsOutline = {m_Id = 200}, m_Eyes = {{m_Id = 0}, {m_Id = 50000}, {m_Id = 0}, {m_Id = 20}, {m_Id = 700}, {m_Id = 100000}}}, m_ColorableRenderSkin = {m_Body = {m_Id = 200}, m_BodyOutline = {m_Id = 80000}, m_Feet = {m_Id = 15000}, m_FeetOutline = {m_Id = 100000}, m_Hands = {m_Id = 0}, m_HandsOutline = {m_Id = 500}, m_Eyes = {{m_Id = 100}, {m_Id = 100}, {m_Id = 0}, {m_Id = 1000}, {m_Id = 600}, {m_Id = 100}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = 125}, m_Height = {m_Value = 12500}, m_OffsetX = {m_Value = 12500}, m_OffsetY = {m_Value = 50000}, m_MaxWidth = {m_Value = 50000}, m_MaxHeight = {m_Value = 80000}}, m_Feet = {m_Width = {m_Value = 80000}, m_Height = {m_Value = 32000}, m_OffsetX = {m_Value = -343987504}, m_OffsetY = {m_Value = 32767}, m_MaxWidth = {m_Value = 0}, m_MaxHeight = {m_Value = 384}}}, m_CustomColoredSkin = 102, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 4.09039022e-42, r = 4.09039022e-42, h = 4.09039022e-42}, {y = 4.09179152e-42, g = 4.09179152e-42, s = 4.09179152e-42}, {z = 4.09319281e-42, b = 4.09319281e-42, l = 4.09319281e-42, v = 4.09319281e-42}, {w = 4.09459411e-42, a = 4.09459411e-42}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 4.09599541e-42, r = 4.09599541e-42, h = 4.09599541e-42}, {y = 4.09739671e-42, g = 4.09739671e-42, s = 4.09739671e-42}, {z = 4.09879801e-42, b = 4.09879801e-42, l = 4.09879801e-42, v = 4.09879801e-42}, {w = 4.10019931e-42, a = 4.10019931e-42}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 4.10160061e-42, r = 4.10160061e-42, h = 4.10160061e-42}, {y = 4.1030019e-42, g = 4.1030019e-42, s = 4.1030019e-42}, {z = 4.1044032e-42, b = 4.1044032e-42, l = 4.1044032e-42, v = 4.1044032e-42}, {w = 4.1058045e-42, a = 4.1058045e-42}}, <No data fields>}, m_Size = 4.1072058e-42, m_GotAirJump = 2932, m_ShineDecoration = 2933}, m_Angle = 4.11140969e-42, m_Active = 119, m_ChatIgnore = 11, m_EmoticonIgnore = false, m_Friend = false, m_Foe = 120, m_AuthLevel = 2937, m_Afk = 122, m_Paused = 11, m_Spec = false, m_SwitchStates = {false, 123, 11, false, false, 124, 11, false, false, 125, 11, false, false, 63, false, false, false, 64, false, false, false, 17, false, false, false, 17, false, false, false, 96, false, false, false, 96, false, false, false, 30, false, false, false, 17, false, false, false, 18, false, false, false, 8, false, false, false, 64, false, false, false, 32, false, false, false, true, false, false, false, 77, 169, 64, 63, 248, 26, 24, 63, 81, 89, 145, 62, false, false, 128, 63, 108, 173, 38, 63, 58, 105, 24, 63, 13, 222, 46, 63, false, false, 128, 63, false, false, 128, 63, false, false, 128, 63, false, false, 128, 63, false, false, 128, 63, false, false, 128, 66, true, false, false, false, false, false, false, false, 102, 11, false, false, 103, 11, false, false, 104, 11, false, false, 105, 11, false, false, 106, 11, false, false, 107, 11, false, false, 108, 11, false, false, 109, 11, false, false, 110, 11, false, false, 111, 11, false, false, 112, 11, false, false, 113, 11, false, false, 114, 11, false, false, 115, 11, false, false, 116, 11, false, false, 117, 11, false, false, 118, 11, false, false, 119, 11, false, false, 120, 11, false...}, m_Snapped = {<CNetObj_CharacterCore> = {m_Tick = 8, m_X = 64, m_Y = 32, m_VelX = 1, m_VelY = 1061202253, m_Angle = 1058544376, m_Direction = 1049712977, m_Jumped = 1065353216, m_HookedPlayer = 1059499372, m_HookState = 1058564410, m_HookTick = 1060036109, m_HookX = 1065353216, m_HookY = 1065353216, m_HookDx = 1065353216, m_HookDy = 1065353216}, m_PlayerFlags = 1065353216, m_Health = 1115684864, m_Armor = 1, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 1, m_AttackTick = 1699636480}, m_Evolved = {<CNetObj_CharacterCore> = {m_Tick = 0, m_X = 0, m_Y = 0, m_VelX = 0, m_VelY = 0, m_Angle = 0, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = 0, m_HookState = 0, m_HookTick = 0, m_HookX = 0, m_HookY = 0, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 0}, m_RenderCur = {<CNetObj_CharacterCore> = {m_Tick = 0, m_X = 0, m_Y = 0, m_VelX = 0, m_VelY = 0, m_Angle = 0, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = 0, m_HookState = 0, m_HookTick = 0, m_HookX = 0, m_HookY = 0, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 0}, m_RenderPrev = {<CNetObj_CharacterCore> = {m_Tick = 0, m_X = 0, m_Y = 0, m_VelX = 0, m_VelY = 0, m_Angle = 0, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = 0, m_HookState = 0, m_HookTick = 0, m_HookX = 0, m_HookY = 0, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 0}, m_RenderPos = {{x = 1.62072219e-39, u = 1.62072219e-39}, {y = 1.78805684e-42, v = 1.78805684e-42}}, m_IsPredicted = 209, m_IsPredictedLocal = 10, m_SmoothStart = {4294967295, 1091}, m_SmoothLen = {-4294967296, 81604378624}, m_PredPos = {{{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fff00), u = -nan(0x7fff00)}, {y = -nan(0x7ffffb), v = -nan(0x7ffffb)}}, {{x = 1.40129846e-45, u = 1.40129846e-45}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 7.00649232e-45, u = 7.00649232e-45}, {y = 7.00649232e-45, v = 7.00649232e-45}}, {{x = 1.61979873e-39, u = 1.61979873e-39}, {y = 1.62072219e-39, v = 1.62072219e-39}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fffff), u = -nan(0x7fffff)}, {y = 0, v = 0}}, {{x = 1.52881662e-42, u = 1.52881662e-42}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = -nan(0x7fffff), v = -nan(0x7fffff)}}, {{x = 0, u = 0}, {y = 2.66246708e-44, v = 2.66246708e-44}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fff00), u = -nan(0x7fff00)}, {y = -nan(0x7ffffb), v = -nan(0x7ffffb)}}, {{x = 1.40129846e-45, u = 1.40129846e-45}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 7.00649232e-45, u = 7.00649232e-45}, {y = 7.00649232e-45, v = 7.00649232e-45}}, {{x = 1.61979873e-39, u = 1.61979873e-39}, {y = 1.62072219e-39, v = 1.62072219e-39}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fffff), u = -nan(0x7fffff)}, {y = 0, v = 0}}, {{x = 1.52881662e-42, u = 1.52881662e-42}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = -nan(0x7fffff), v = -nan(0x7fffff)}}, {{x = 0, u = 0}, {y = 2.66246708e-44, v = 2.66246708e-44}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fff00), u = -nan(0x7fff00)}, {y = -nan(0x7ffffb), v = -nan(0x7ffffb)}}, {{x = 1.40129846e-45, u = 1.40129846e-45}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 7.00649232e-45, u = 7.00649232e-45}, {y = 7.00649232e-45, v = 7.00649232e-45}}, {{x = 1.61979873e-39, u = 1.61979873e-39}, {y = 1.62071938e-39, v = 1.62071938e-39}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fffff), u = -nan(0x7fffff)}, {y = 0, v = 0}}, {{x = 1.52881662e-42, u = 1.52881662e-42}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = -nan(0x7fffff), v = -nan(0x7fffff)}}, {{x = 0, u = 0}, {y = 2.66246708e-44, v = 2.66246708e-44}}, {{x = 1.78805684e-42, u = 1.78805684e-42}, {y = 3.88019545e-42, v = 3.88019545e-42}}, {{x = -nan(0x7fff00), u = -nan(0x7fff00)}, {y = -nan(0x7ffffb), v = -nan(0x7ffffb)}}, {{x = 1.40129846e-45, u = 1.40129846e-45}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 7.00649232e-45, u = 7.00649232e-45}, {y = 7.00649232e-45, v = 7.00649232e-45}}, {{x = 1.61979873e-39, u = 1.61979873e-39}, {y = 1276, v = 1276}}, {{x = 2769, u = 2769}, {y = 1.40129846e-45, v = 1.40129846e-45}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 0, u = 0}, {y = 0, v = 0}}, {{x = 1276, u = 1276}, {y = 2769, v = 2769}} <repeats 156 times>}, m_PredTick = {1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1151303680, 1160581120, 1156400, 1156401, 1156402, 1156403, 1156404, 1156405, 1156406, 1156407, 1156408, 1156409, 1156410, 1156411, 1156412, 1156413, 1156414, 1156415, 1156416, 1156417, 1156418, 1156419, 1156420, 1156421, 1156422, 1156423, 1156424, 1156425, 1156426, 1156427, 1156428, 1156429, 1156430, 1156431, 1156432, 1156433, 1156434, 1156435, 1156436, 1156437, 1156438, 1156439, 1156440, 1156441, 1156442, 1156443, 1156444, 1156445, 1156446, 1156447, 1156448, 1156449, 1156450, 1156451, 1156452, 1156453, 1156454, 1156455, 1156456, 1156457, 1156458, 1156459, 1156460, 1156461, 1156462, 1156463, 1156464, 1156465, 1156466, 1156467, 1156468, 1156469, 1156470, 1156471, 1156472, 1156473, 1156474, 1156475, 1156476, 1156477, 1156478, 1156479, 1156480, 1156481, 1156482, 1156483, 1156484, 1156485, 1156486, 1156487, 1156488, 1156489, 1156490, 1156491, 1156492, 1156493, 1156494, 1156495, 1156496, 1156497, 1156498, 1156499, 1156500, 1156501, 1156502, 1156503, 1156504, 1156505, 1156506, 1156507, 1156508, 1156509, 1156510, 1156511}, m_SpecCharPresent = 160, m_SpecChar = {{x = 1.62061989e-39, u = 1.62061989e-39}, {y = 1.62062129e-39, v = 1.62062129e-39}}}
#14 0x00005555557e981d in CPlayers::RenderHookCollLine (this=0x7fffeb79a748, pPrevChar=0x7fffffffbd00, pPlayerChar=0x7fffffffbca0, ClientID=-2, Intra=0.36924991) at /home/ant/ddnet/src/game/client/components/players.cpp:216
        TeleNr = 0
        FinishPos = {{x = 1221.93494, u = 1221.93494}, {y = 2458.29639, v = 2458.29639}}
        NewPos = {{x = 1221.93494, u = 1221.93494}, {y = 2458.29639, v = 2458.29639}}
        Hit = 0
        ExDirection = {{x = -0.154127821, u = -0.154127821}, {y = 0.988050938, v = 0.988050938}}
        InitPos = {{x = 1240.73853, u = 1240.73853}, {y = 2337.75415, v = 2337.75415}}
        HookCollColor = {<color4_base<ColorRGBA>> = {{x = 0.996078432, r = 0.996078432, h = 0.996078432}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 1, a = 1}}, <No data fields>}
        OldPos = {{x = 1234.26514, u = 1234.26514}, {y = 2379.2522, v = 2379.2522}}
        DoBreak = false
        AlwaysRenderHookColl = true
        RenderHookCollPlayer = false
        RenderHookCollVideo = true
        Prev = {<CNetObj_CharacterCore> = {m_Tick = 415760, m_X = 1240, m_Y = 2330, m_VelX = 281, m_VelY = 0, m_Angle = 441, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = -1, m_HookState = 0, m_HookTick = 0, m_HookX = 1239, m_HookY = 2321, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 415734}
        Player = {<CNetObj_CharacterCore> = {m_Tick = 415762, m_X = 1242, m_Y = 2351, m_VelX = 254, m_VelY = 0, m_Angle = 443, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = -1, m_HookState = 0, m_HookTick = 0, m_HookX = 1241, m_HookY = 2340, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 1156559}
        Local = false
        OtherTeam = false
        Alpha = 0.379999995
        IntraTick = 0.36924991
        Angle = 1.725541
        Direction = {{x = -0.154127821, u = -0.154127821}, {y = 0.988050938, v = 0.988050938}}
        Position = {{x = 1240.73853, u = 1240.73853}, {y = 2337.75415, v = 2337.75415}}
#15 0x0000555555731e03 in CGhost::OnRender (this=0x7fffeb79f5b0) at /home/ant/ddnet/src/game/client/components/ghost.cpp:374
        CurPos = 54
        PrevPos = 53
        TickDiff = 2
        IntraTick = 0.36924991
        RenderInfo = 0x7fffeb79f5d0
        GhostTick = 415761
        Player = {<CNetObj_CharacterCore> = {m_Tick = 415762, m_X = 1242, m_Y = 2351, m_VelX = 254, m_VelY = 0, m_Angle = 443, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = -1, m_HookState = 0, m_HookTick = 0, m_HookX = 1241, m_HookY = 2340, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 1156559}
        Prev = {<CNetObj_CharacterCore> = {m_Tick = 415760, m_X = 1240, m_Y = 2330, m_VelX = 281, m_VelY = 0, m_Angle = 441, m_Direction = 0, m_Jumped = 0, m_HookedPlayer = -1, m_HookState = 0, m_HookTick = 0, m_HookX = 1239, m_HookY = 2321, m_HookDx = 0, m_HookDy = 0}, m_PlayerFlags = 0, m_Health = 0, m_Armor = 0, m_AmmoCount = 0, m_Weapon = 0, m_Emote = 0, m_AttackTick = 415734}
        GhostNinjaRenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = 248, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 4.59163468e-41, r = 4.59163468e-41, h = 4.59163468e-41}, {y = -3.02677571e+26, g = -3.02677571e+26, s = -3.02677571e+26}, {z = 4.59163468e-41, b = 4.59163468e-41, l = 4.59163468e-41, v = 4.59163468e-41}, {w = -3.08316077e+26, a = -3.08316077e+26}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}
        Ghost = `@0x7fffeb79f5d0:` {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = 2846}, m_BodyOutline = {m_Id = 2847}, m_Feet = {m_Id = 2848}, m_FeetOutline = {m_Id = 2849}, m_Hands = {m_Id = 2850}, m_HandsOutline = {m_Id = 2851}, m_Eyes = {{m_Id = 2852}, {m_Id = 2853}, {m_Id = 2854}, {m_Id = 2855}, {m_Id = 2856}, {m_Id = 2857}}}, m_ColorableRenderSkin = {m_Body = {m_Id = 2858}, m_BodyOutline = {m_Id = 2859}, m_Feet = {m_Id = 2860}, m_FeetOutline = {m_Id = 2861}, m_Hands = {m_Id = 2862}, m_HandsOutline = {m_Id = 2863}, m_Eyes = {{m_Id = 2864}, {m_Id = 2865}, {m_Id = 2866}, {m_Id = 2867}, {m_Id = 2868}, {m_Id = 2869}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = 67}, m_Height = {m_Value = 69}, m_OffsetX = {m_Value = 15}, m_OffsetY = {m_Value = 12}, m_MaxWidth = {m_Value = 96}, m_MaxHeight = {m_Value = 96}}, m_Feet = {m_Width = {m_Value = 30}, m_Height = {m_Value = 18}, m_OffsetX = {m_Value = 18}, m_OffsetY = {m_Value = 8}, m_MaxWidth = {m_Value = 64}, m_MaxHeight = {m_Value = 32}}}, m_CustomColoredSkin = true, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0.667352855, r = 0.667352855, h = 0.667352855}, {y = 0.470265955, g = 0.470265955, s = 0.470265955}, {z = 0.577485919, b = 0.577485919, l = 0.577485919, v = 0.577485919}, {w = 1, a = 1}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 0.958477497, r = 0.958477497, h = 0.958477497}, {y = 0.570934296, g = 0.570934296, s = 0.570934296}, {z = 0.725951612, b = 0.725951612, l = 0.725951612, v = 0.725951612}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 64, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = -185079314, m_Skin1 = -487591808, m_Skin2 = -2139062144, m_Skin3 = -2139062144, m_Skin4 = -2139062144, m_Skin5 = -2139062272, m_UseCustomColor = 1, m_ColorBody = 15651463, m_ColorFeet = 16777215}, m_Path = {m_ChunkSize = 1500, m_NumItems = 74676, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x555556de4110, _M_finish = 0x555556de42a0, _M_end_of_storage = 0x555556de42a0}, <No data fields>}}, <No data fields>}}, m_StartTick = 415652, m_aPlayer = "Yumiko\000\000\000\000\000\000\000\000\000", m_PlaybackPos = 54}
        __for_range = `@0x7fffeb79f5d0:` {{m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = 2846}, m_BodyOutline = {m_Id = 2847}, m_Feet = {m_Id = 2848}, m_FeetOutline = {m_Id = 2849}, m_Hands = {m_Id = 2850}, m_HandsOutline = {m_Id = 2851}, m_Eyes = {{m_Id = 2852}, {m_Id = 2853}, {m_Id = 2854}, {m_Id = 2855}, {m_Id = 2856}, {m_Id = 2857}}}, m_ColorableRenderSkin = {m_Body = {m_Id = 2858}, m_BodyOutline = {m_Id = 2859}, m_Feet = {m_Id = 2860}, m_FeetOutline = {m_Id = 2861}, m_Hands = {m_Id = 2862}, m_HandsOutline = {m_Id = 2863}, m_Eyes = {{m_Id = 2864}, {m_Id = 2865}, {m_Id = 2866}, {m_Id = 2867}, {m_Id = 2868}, {m_Id = 2869}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = 67}, m_Height = {m_Value = 69}, m_OffsetX = {m_Value = 15}, m_OffsetY = {m_Value = 12}, m_MaxWidth = {m_Value = 96}, m_MaxHeight = {m_Value = 96}}, m_Feet = {m_Width = {m_Value = 30}, m_Height = {m_Value = 18}, m_OffsetX = {m_Value = 18}, m_OffsetY = {m_Value = 8}, m_MaxWidth = {m_Value = 64}, m_MaxHeight = {m_Value = 32}}}, m_CustomColoredSkin = true, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0.667352855, r = 0.667352855, h = 0.667352855}, {y = 0.470265955, g = 0.470265955, s = 0.470265955}, {z = 0.577485919, b = 0.577485919, l = 0.577485919, v = 0.577485919}, {w = 1, a = 1}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 0.958477497, r = 0.958477497, h = 0.958477497}, {y = 0.570934296, g = 0.570934296, s = 0.570934296}, {z = 0.725951612, b = 0.725951612, l = 0.725951612, v = 0.725951612}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 64, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = -185079314, m_Skin1 = -487591808, m_Skin2 = -2139062144, m_Skin3 = -2139062144, m_Skin4 = -2139062144, m_Skin5 = -2139062272, m_UseCustomColor = 1, m_ColorBody = 15651463, m_ColorFeet = 16777215}, m_Path = {m_ChunkSize = 1500, m_NumItems = 74676, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x555556de4110, _M_finish = 0x555556de42a0, _M_end_of_storage = 0x555556de42a0}, <No data fields>}}, <No data fields>}}, m_StartTick = 415652, m_aPlayer = "Yumiko\000\000\000\000\000\000\000\000\000", m_PlaybackPos = 54}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}, {m_RenderInfo = {m_OriginalRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_ColorableRenderSkin = {m_Body = {m_Id = -1}, m_BodyOutline = {m_Id = -1}, m_Feet = {m_Id = -1}, m_FeetOutline = {m_Id = -1}, m_Hands = {m_Id = -1}, m_HandsOutline = {m_Id = -1}, m_Eyes = {{m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}, {m_Id = -1}}}, m_SkinMetrics = {m_Body = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}, m_Feet = {m_Width = {m_Value = -2147483648}, m_Height = {m_Value = -2147483648}, m_OffsetX = {m_Value = 2147483647}, m_OffsetY = {m_Value = 2147483647}, m_MaxWidth = {m_Value = -2147483648}, m_MaxHeight = {m_Value = -2147483648}}}, m_CustomColoredSkin = false, m_BloodColor = {<color4_base<ColorRGBA>> = {{x = 0, r = 0, h = 0}, {y = 0, g = 0, s = 0}, {z = 0, b = 0, l = 0, v = 0}, {w = 0, a = 0}}, <No data fields>}, m_ColorBody = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_ColorFeet = {<color4_base<ColorRGBA>> = {{x = 1, r = 1, h = 1}, {y = 1, g = 1, s = 1}, {z = 1, b = 1, l = 1, v = 1}, {w = 1, a = 1}}, <No data fields>}, m_Size = 1, m_GotAirJump = 1, m_ShineDecoration = 0}, m_Skin = {m_Skin0 = 0, m_Skin1 = 0, m_Skin2 = 0, m_Skin3 = 0, m_Skin4 = 0, m_Skin5 = 0, m_UseCustomColor = 0, m_ColorBody = 0, m_ColorFeet = 0}, m_Path = {m_ChunkSize = 1500, m_NumItems = 0, m_lChunks = {<std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >> = {_M_impl = {<std::allocator<CGhostCharacter*>> = {<__gnu_cxx::new_allocator<CGhostCharacter*>> = {<No data fields>}, <No data fields>}, <std::_Vector_base<CGhostCharacter*, std::allocator<CGhostCharacter*> >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}}, m_StartTick = -1, m_aPlayer = '\000' <repeats 15 times>, m_PlaybackPos = 0}}
        __for_begin = 0x7fffeb79f5d0
        __for_end = 0x7fffeb79ff50
        PlaybackTick = 109
#16 0x0000555555812833 in CGameClient::OnRender (this=0x7fffeb496010) at /home/ant/ddnet/src/game/client/gameclient.cpp:611
        i = 18
#17 0x00005555556735a1 in CClient::Render (this=0x7ffff0893010) at /home/ant/ddnet/src/engine/client/client.cpp:1191
No locals.
#18 0x000055555567c013 in CClient::Run (this=0x7ffff0893010) at /home/ant/ddnet/src/engine/client/client.cpp:3246
        AdditionalTime = 0
        Now = 28182967481
        IsRenderActive = true
        AsyncRenderOld = true
        GfxRefreshRate = 0
        Now = {__r = 28182951522}
        SleepTimeInNanoSeconds = {__r = 0}
        Slept = false
        Seed = 500091216
        LastD = false
        LastE = false
        LastG = false
        LastTime = {__r = 28182951522}
        LastRenderTime = 28182967481
#19 0x000055555568492e in main (argc=1, argv=0x7fffffffe518) at /home/ant/ddnet/src/engine/client/client.cpp:4555
        Silent = false
        RandInitFailed = false
        apLoggers = {<std::_Vector_base<std::shared_ptr<ILogger>, std::allocator<std::shared_ptr<ILogger> > >> = {_M_impl = {<std::allocator<std::shared_ptr<ILogger> >> = {<__gnu_cxx::new_allocator<std::shared_ptr<ILogger> >> = {<No data fields>}, <No data fields>}, <std::_Vector_base<std::shared_ptr<ILogger>, std::allocator<std::shared_ptr<ILogger> > >::_Vector_impl_data> = {_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}, <No data fields>}}, <No data fields>}
        pFutureFileLogger = {<std::__shared_ptr<CFutureLogger, (__gnu_cxx::_Lock_policy)2>> = {<std::__shared_ptr_access<CFutureLogger, (__gnu_cxx::_Lock_policy)2, false, false>> = {<No data fields>}, _M_ptr = 0x555555bd0af0, _M_refcount = {_M_pi = 0x555555bd0ae0}}, <No data fields>}
        pFutureConsoleLogger = {<std::__shared_ptr<CFutureLogger, (__gnu_cxx::_Lock_policy)2>> = {<std::__shared_ptr_access<CFutureLogger, (__gnu_cxx::_Lock_policy)2, false, false>> = {<No data fields>}, _M_ptr = 0x555555be66d0, _M_refcount = {_M_pi = 0x555555be66c0}}, <No data fields>}
        pFutureAssertionLogger = {<std::__shared_ptr<CFutureLogger, (__gnu_cxx::_Lock_policy)2>> = {<std::__shared_ptr_access<CFutureLogger, (__gnu_cxx::_Lock_policy)2, false, false>> = {<No data fields>}, _M_ptr = 0x555555be6740, _M_refcount = {_M_pi = 0x555555be6730}}, <No data fields>}
        pClient = 0x7ffff0893010
        pKernel = 0x555555bf7a30
        pEngine = 0x555555bf8450
        pConsole = 0x555555bd1260
        pStorage = 0x555555c1fde0
        pConfigManager = 0x555555bff450
        pEngineSound = 0x555555bff900
        pEngineInput = 0x555555c22600
        pEngineTextRender = 0x7ffff0071010
        pEngineMap = 0x555555bb6790
        pDiscord = 0x555555bb61f0
        pSteam = 0x555555bb5cb0
        File = 0x0
        Restarting = false
```
</details>

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Learath <learath2@gmail.com>
2022-06-02 20:04:33 +00:00
bors[bot] ba05169b7e
Merge #5317
5317: Fix ConSwitchDoorOpen r=C0D3D3V a=trml

Just figured out that my pr introduced a bug in switches set from map configs (not opening the correct switches). Sorry about that!
Thanks to Faulty for finding it!

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: trml <trml@users.noreply.github.com>
2022-06-02 19:44:37 +00:00
Robert Müller 23c0b6a4e4 Fix wrong iterator being used for inserting into vector 2022-06-02 21:11:02 +02:00
trml 531107eb48 Fix ConSwitchDoorOpen 2022-06-02 20:52:34 +02:00
bors[bot] c6095816ff
Merge #5311
5311: drop small NETOBJTYPE_SWITCHSTATE r=def- a=C0D3D3V

I'm too lazy right now to write code to test this, but I think this should work. 
What do you think, is it sufficient? `@heinrich5991` 

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-02 14:00:38 +00:00
c0d3d3v 809309cd09
drop small NETOBJTYPE_SWITCHSTATE 2022-06-02 15:40:55 +02:00
c0d3d3v d125c91825
send normal shields to old clients 2022-06-02 15:27:57 +02:00
bors[bot] b666533fff
Merge #4705
4705: Refactor switch state, add prediction of switch state toggles r=def- a=trml

This is an attempt to fix #4702, and also ended up being a more general attempt at predicting switch on/off tiles as well as timed switchers (with delay). A few things:

- Refactored the switch state array from CCollision to CGameCore (second commit)

The idea here was that CCollision holds information about the map that is immutable and there only exists one copy of it, while the switch state is mutable and would have both a predicted and non-predicted state in the client. While strictly not necessary, having it in the gamecore seems to represent the mutable state better and would be useful to avoid having to put the snapshot switch state back into the gameworld on each new prediction as well as to more easily keep track of the two copies.

A concern here is whether this could in any way change server behavior (time of initialization and/or destruction of switch states), so this change would require quite a bit of testing and/or review. However, from what I could tell from the code, CCollision is only initialized once and at that time where the gamecore already exists.

- Added a new extended netobject containing the end tick of switches (third commit)

This would be needed for adding general prediction for timed switchers. The idea is to only send it for a limited number of switchers (those with the lowest time left before they toggle back), since there will most likely be a limited number of timed switchers active at any point, and I randomly selected 4 as a number here. Ideally, this netobject should be merged with the previous one for simpler parsing of the information, but that would sacrifice compatibility with older servers (and/or clients). (Another possibility here would have been to treat timed switchers as regular on/off tiles and make the addition of the netobject a separate pr)

- Used NetArray from datasrc/seven/datatypes.py to simplify both the new and old switch state netobjects (first commit)

(Haven't checked if there might be reasons not to use it? But it did seem to be backwards compatible with older ddnet clients when keeping the memory layout the same)

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test if it works standalone, system.c especially
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: trml <trml@users.noreply.github.com>
2022-06-02 12:42:47 +00:00
heinrich5991 855fe75b63 Log chat by default, put it onto INFO instead of DEBUG level
Fixes #5032.
2022-06-02 09:36:31 +02:00
trml 882ddae201 Send switch timing info in extended switch state netobject 2022-06-02 01:04:34 +02:00
trml 548de3804e Rename NumSwitchers to HighestSwitchNumber and remove most references 2022-06-02 00:57:11 +02:00