Commit graph

4052 commits

Author SHA1 Message Date
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
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
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
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 4281df2429
Add new textures by ravie; Also add no gun hit for teleport gun 2022-06-25 16:05:38 +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 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
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
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
effyn 6691d71da7 Gender-neutral language 2022-06-16 15:12:25 -07:00
Lukas Kitsche 379d93ae7b no goals hud when empty 2022-06-16 16:28:50 +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
Chairn c9345e7d32 More vector naming format 2022-06-15 19:37:37 +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
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
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
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
Jupeyy 2710fe85be Add community skin option to client 2022-06-12 18:21:29 +02: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
Chairn 14f7f2e041 Remaining formatting and fix github code scanning 2022-06-11 22:03:23 +02:00
Chairn 01edaec628 Format vector variables names (fixes #5209) 2022-06-11 21:38:49 +02: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
Robert Müller 9a17617a28 Let IInput::MouseRelative return true if mouse was moved 2022-06-06 22:06:56 +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
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] 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
Robert Müller 23c0b6a4e4 Fix wrong iterator being used for inserting into vector 2022-06-02 21:11:02 +02:00
c0d3d3v 809309cd09
drop small NETOBJTYPE_SWITCHSTATE 2022-06-02 15:40:55 +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
trml 66c0c1e692 Send timer info for switchers and predict switch state changes 2022-06-02 00:57:09 +02:00
trml 95c4c2db1c Move switch state to gamecore 2022-06-02 00:51:25 +02:00
trml 940205b3cc Simplify switch state using NetArray 2022-06-02 00:46:17 +02:00
Robert Müller 70907f422a Use insert with initializer-list instead of reserving space 2022-06-01 21:29:44 +02:00
Learath 210b19042d Avoid unnecessary copy leading to crash 2022-06-01 19:52:34 +02:00
Robert Müller 7c17051a3a Replace CGameClient::CStack with std::vector<class CComponent *> 2022-06-01 14:16:09 +02:00
bors[bot] b623c3c124
Merge #5284
5284: add ellipsis again r=heinrich5991 a=C0D3D3V

![grafik](https://user-images.githubusercontent.com/14315968/171151688-a5fdb2a8-d070-4485-a187-ac768a32e854.png)
![grafik](https://user-images.githubusercontent.com/14315968/171151717-d36312d4-5e2e-4b50-af9a-7a202a1564a4.png)

`@Jupeyy`  can you please test if this also decreases the fps significant more than without this PR?


without ellipsis (and name in mini score hud flows over the left border):
![grafik](https://user-images.githubusercontent.com/14315968/171153136-af385267-af7a-4913-844e-4e95d60bf799.png)

with ellipsis:
![grafik](https://user-images.githubusercontent.com/14315968/171153237-0996600e-92aa-4b0c-b8f5-fdde05c2751b.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 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-01 10:05:57 +00:00
Robert Müller 7474ca201f Remove dead code 2022-05-31 19:32:07 +02:00
c0d3d3v 0914c1260b
add ellipsis again 2022-05-31 12:20:45 +02:00
bors[bot] 760cb99574
Merge #5271
5271: Time out for POST requests too (hopefully fixes #5198) r=heinrich5991 a=def-

Untested because the issue is sporadic. But I think it makes sense to have a timeout even if this is not the root cause.

## 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: def <dennis@felsin9.de>
2022-05-31 08:01:38 +00:00
c0d3d3v 5065bab8b5
fix swap does not swap no collision and no hook
- remove duplicated variable for no collision and no hook
2022-05-30 19:33:42 +02:00
Robert Müller 91d2ba1865 Organize game-client includes 2022-05-29 21:24:43 +02:00
Robert Müller c2f92c1e13 Organize game-shared includes 2022-05-29 20:02:22 +02:00
def 3e60cd83d0 Time out for POST requests too (hopefully fixes #5198) 2022-05-29 19:15:36 +02:00
Alexander Akulich a39bbc702b Introduce and use constexpr CCharacterCore::PhysicalSize 2022-05-28 21:46:44 +03:00
Alexander Akulich deb2e8752f Sync prediction impl with server CCharacter::IsGrounded() 2022-05-28 21:46:07 +03:00
Alexander Akulich a023671ecd prediction/entity: Sync constructor signature, add GetProximityRadius() 2022-05-28 21:28:47 +03:00
bors[bot] ab28267e30
Merge #5265
5265: Cleanup prediction entity handling a little r=def- a=trml

I looked over the remaining code for creating/removing entities in the prediction, and only ended up making some smaller changes:
- More consistent use of InsertEntity/RemoveEntity/Destroy
- Fixed one instance in gameclient.cpp where an entity was removed but not deleted (could potentially have been a memory leak)
- Removed some old code for retaining information about the characters after they left the snapshot (the client should only rely on the snapshot for prediction of players)

## 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: trml <trml@users.noreply.github.com>
2022-05-28 12:48:10 +00:00
trml c5595209fe Fix and slightly cleanup creation/destruction/insertion of predicted entities 2022-05-28 13:37:59 +02:00
bors[bot] ccf0622984
Merge #5252
5252: Use std::vector instead of array, remove base/tl/array.h, algorithm.h, allocator.h, range.h r=def- a=Robyt3

Replaces all usages of `array` with `std::vector`.

I adjusted variable names of variables I changed to use the `v` prefix. Not so in the editor however, as there are already many changes due to clang-tidy enforcing the use of for-each loops.

This allows us to remove all remaining `base/tl` headers except `threading.h`.

Clang-tidy now finds `clang-analyzer-cplusplus.NewDelete` (Use of memory after it is freed), which is also fixed here, though it appears to be a false-positive.

This last remaining usages of `goto` are also removed.

## 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-05-28 10:56:21 +00:00
c0d3d3v 04f1bbf59f
reintroduce shotgun bug 2022-05-28 00:58:33 +02:00
trml 85e86772b2 Don't keep track of characters in the predicted gameworld that are not in the snapshot and require pred characters to be alive 2022-05-28 00:07:31 +02:00
bors[bot] 59acac221c
Merge #5254 #5257
5254: Fix ingame menu button behavior when holding mouse button r=def- a=Robyt3

Fixes the following behavior:

1. Player is ingame and the ingame menu is opened with Esc
2. A mouse button is held down on one of the ingame menu buttons (e.g. the spectate button)
3. The ingame menu is closed without moving the mouse away from the button
4. The mouse button is released while ingame
5. The menu is opened again
    - Current behavior: The hovered button is immediately activated, as soon as the menu opens, due to the released mouse state being handled as a click.
    - Fixed behavior: The button is not activated. Instead another call to `FinishCheck` is added so it's also called when the menu is not active, to clear the active UI item in that case.

As well as the following:

1. The menu is closed while the mouse cursor is hovering over a button.
2. The mouse button is pressed and held while the menu is closed.
3. The menu is opened again.
   - Current behavior: The menu button is already held down and when the player releases the mouse button it will immediately be activated.
   - Fixed behavior: The button is not activated immediately, by clearing the hot item and next hot item variables in `FinishCheck`.

The latter behavior can still occur when entering the editor instead of closing the ingame menu.

Closes #3560. Closes #5229.

The first two commits are identical to upstream https://github.com/teeworlds/teeworlds/pull/3158, where those issues also exist. The last commit adapts upstream behavior so buttons can only become hot when the mouse is not pressed.

## 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)


5257: Refactoring: Move CMenus::UseMouseButtons to CUI::SetEnabled, extract CRenderTools::RenderCursor r=def- a=Robyt3

Adopt changes from upstream.

## 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-05-27 18:37:17 +00:00
Robert Müller fccfbd5b70 Extract CRenderTools::RenderCursor 2022-05-27 19:43:12 +02:00
Robert Müller caa23bcfdd Move CMenus::UseMouseButtons to CUI::SetEnabled 2022-05-27 19:43:12 +02:00
Robert Müller 31930951f0 Only allow buttons to be become hot while the mouse is not pressed 2022-05-27 19:07:56 +02:00
Robert Müller 910f01cbf2 Fix ingame menu buttons when mouse is held ingame and released in menu 2022-05-27 19:07:56 +02:00
Robert Müller a0a0fa1322 Fix ingame menu buttons when mouse is held and released ingame 2022-05-27 17:45:30 +02:00
Robert Müller ce54a0d075 Use std::vector<CMenuImage> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller 24ad383211 Use std::vector<CSourceQueueEntry> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller b9c52f7e31 Use SetActiveItem(nullptr) instead of SetActiveItem(0) 2022-05-27 11:59:14 +02:00
Robert Müller 2b02bd449b Prevent lock of UI
Co-authored-by: oy <tom_adams@web.de>
2022-05-27 11:53:05 +02:00
bors[bot] 7348bf4d56
Merge #5246
5246: Use std::vector instead of sorted_array, remove base/tl/sorted_array.h r=def- a=heinrich5991

This replaces all usages of `sorted_array` with `std::vector`. This requires the following general changes:

- `add_unsorted` is replaced with `push_back`.
- `add` is replaced with `push_back` and subsequent `sort` or `stable_sort` must be ensured.
  - In some cases, immediately sorting the entire list after adding an item was unavoidable. Previously items were added at the correct position, which was O(N) because all items after the inserted one had to be moved in any case.
- `sort_range` is replaced with `sort` or `stable_sort`.
- `size` returns a `size_t` instead of `int`, so to fix sign comparison warnings, casts are added where necessary or types of loop variables are changed to `size_t` where possible. For-each loops are also used where possible / where required by clang-tidy.
- `find_binary` is replaced with `std::equal_range`. This can only find items of the same type, so some wrappers, that only have the relevant fields set, need to be created for searching.

In terms of behavior, this should not change anything, except maybe `CLocalizationDatabase` for the better. As far as I understand it, at lot of the code there was not doing anything. It assumes that binary search can return a range of multiple entries, but the equality/comparison function is based on hash and context hash. This means that any item in this range will match the given hash and context hash already, so all of the following checks are redundant. I changed this to first do a lookup with the hash and context hash and if that fails do another lookup with the default context hash.

I have also already replaced `base/tl/array.h` with `std::vector`, removing all of `base/tl` except `threading.h`. I'll make a separate PR later because this caused a lot more changes especially in the editor that I first want to test and review myself.

Naming of `array`/`sorted_array`/`std::vector` variables was rather inconsistent (sometimes prefix `a` or `l` is used), so ~~I chose to not use any prefix for all new `std::vector`s~~ heinrich5991 left them as-is.

## 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-05-27 08:51:55 +00:00
bors[bot] 61c81fa0f2
Merge #5240
5240: Fix crash when graphics init failed (fixes #5237) r=heinrich5991 a=def-

## 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-05-26 22:17:15 +00:00
Robert Müller de1de5e7bd Use emplace_back for CFriendItem 2022-05-27 00:14:07 +02:00
Robert Müller 476af1286d Use emplace_back for CCommand, fix member variable names 2022-05-27 00:13:26 +02:00
Robert Müller a76cdb254e Use std::vector<CDownloadSkin> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 0859da7e6a Use std::vector<CSkin> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 5cc76d286f Use std::vector<CGhostItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller b24f318450 Use std::vector<CFriendItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 359093cab8 Use std::vector<CDemoItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 96c97d5bb7 Use std::vector for assets menu list items instead of sorted_array 2022-05-26 23:49:30 +02:00
Robert Müller 2ea0c49f8b Use std::vector<CCommand> instead of sorted_array 2022-05-26 23:49:30 +02:00
Robert Müller 0032f6f2c2 Use std::vector<CCountryFlag> instead of sorted_array 2022-05-26 23:49:27 +02:00
Robert Müller 295c395c8c Use std::vector<CUISkin> instead of sorted_array 2022-05-26 23:47:37 +02:00
Robert Müller 97dd8105fd Use std::vector<CLanguage> instead of sorted_array 2022-05-26 23:42:06 +02:00
Robert Müller 9b2f0fe3c4 Remove unused includes of base/tl/array.h and sorted_array.h 2022-05-26 23:42:06 +02:00
bors[bot] e63b8e2bb5
Merge #5183
5183: render allways the nameplate of a specchar (or the real player) r=def- a=C0D3D3V

fokkonaut uses spec chars in addition to normal players in his mod, so the names should also be displayed in addition to the player name

## 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
- [ ] 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-05-26 21:06:19 +00:00
trml 2402edcb8a Remove predicted character from gameworld before calling base class destructor 2022-05-26 19:08:46 +02:00
Dennis Felsing ac2657bfce Fix crash when graphics init failed (fixes #5237) 2022-05-26 13:04:39 +02:00
bors[bot] 3b81157013
Merge #5231
5231: Fix windows crash r=def- a=C0D3D3V

Fixes #5226

I tested it in a Windows VM.
`@sjrc6` is it correct that `TempCore` is this way zero initialized, can you check that maybe in the debugger? I do not want to change the behaviour, even tho the core is read in two lines later with `TempCore.ReadCharacter(pCharacter);`

## 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
- [ ] 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-05-26 08:57:22 +00:00
c0d3d3v 62cad6ba51
use value initialization in Evolve lambda 2022-05-26 08:26:27 +02:00
Dennis Felsing 68bcd21eff asan+ubsan clean 2022-05-26 01:22:14 +02:00
Dennis Felsing 604142da3a Try other fix for tautological 2022-05-26 00:37:33 +02:00
bors[bot] 00c167148d
Merge #5194
5194: Revert Ellipsis (alternative to #5193) 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 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>
2022-05-25 14:46:16 +00:00
Chairn 0076edf499 Remove useless setting 2022-05-25 00:12:38 +02:00
bors[bot] 03f95108b4
Merge #5063
5063: Reworked Draggers and Turrets AND show always hooks if they are in the field of view  r=def- a=C0D3D3V

Fixes #3622, #4723 #4798 and #5054

Here you can find a comparison video with 16.0.3: https://youtu.be/bYwLB1cEMI8

This now also includes the changes from https://github.com/ddnet/ddnet/pull/4980 
So please also see my monologue here: https://github.com/ddnet/ddnet/pull/4980

Physic that got changed by this PR:
- Solo players are not included in the calculation of the next team players to the dragger/turrets. This does not affect any map.
- Turrets get switched correctly if players are solo
- Plasma bullets fired by turrets on solo player only explode for solo players and the other way around (except if they unsolo)
- Plasma bullets can no longer be intercepted by other teams 
- Turrets can shot now independently at the speed of sv_plasma_per_sec for  every team and every solo player


This should be tested by some more players before it get merged!

This reduces the use of snap id's tested here: https://youtu.be/G3nVtdH0--Q 
from 16000 to 69
test with the new dragger: https://youtu.be/mzNrDHP7HQs
I did not add the terminal of the server because you basically see no change in the used snap ids 
The videos are with cl_predict off

Comparison of the new turrets: https://streamable.com/8us8lk
left old turrets, right the new ones

We should delete ranks on (that where made after 13 Jun 2019):
https://ddnet.tw/maps/Increase-32-Your-32-Speed
https://ddnet.tw/maps/Fall-32-into-32-the-32-Future
https://ddnet.tw/maps/turboSeks

## 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
- [only on 3 maps] 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-05-24 18:26:08 +00:00
Robert Müller 0c518baef4 Fix pos1 only scrolling up one page in console 2022-05-23 19:24:56 +02:00
c0d3d3v bf2d3d59ff
do not render freezebar if you are not freezed 2022-05-23 12:12:46 +02:00
def 0c8bf5c3aa Revert "Ellipsis at end in scoreboard and hud"
This reverts commit f278399bd1.
2022-05-22 23:04:32 +02:00
c0d3d3v f07d773492
Add a set of Players that are attached to a Tee 2022-05-22 21:59:51 +02:00
c0d3d3v 71c9a49776
revert to double explotion plasma bullets if the bullet hits obstacle
and player at the same time
2022-05-22 21:59:51 +02:00
c0d3d3v 87893ceca7
Move MapScreenToGroup from 3 classes to render.cpp; Rename MapscreenToWorld to MapScreenToWorld 2022-05-22 21:59:43 +02:00