Commit graph

8321 commits

Author SHA1 Message Date
c0d3d3v 51133dee2e
Add freezing snow flakes effect and fix 50HZ timer + add 10Hz Timer to particle system 2022-06-15 22:05:40 +02:00
c0d3d3v 2475e844e0
Add extras texture + asset tab 2022-06-15 22:03:52 +02:00
c0d3d3v 5cd0cc6040
send the weapon the player is really holding (except for ninjajetpack)
and render ninja skin in client if player is frozen

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

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

## Checklist

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


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



## Checklist

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


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

Port all the joystick support from vanilla:

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

Other changes:

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

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

## Checklist

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


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

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

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

## Checklist

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


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

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

## Checklist

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


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

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

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

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

## Checklist

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


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

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

## Checklist

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


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

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

## Checklist

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


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

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

## Checklist

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


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


## Checklist

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


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

Original fix by Ravie... updated to latest code

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

## Checklist

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


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

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

## Checklist

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


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

fixes #5319

## Checklist

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


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

As reported by kiwq

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

## Checklist

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


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

## Checklist

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


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

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

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

<details>
  <summary>Backtrace</summary>

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

## Checklist

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


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

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

## Checklist

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


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

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

## Checklist

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


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

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

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

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

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

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

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

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

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

## Checklist

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


Co-authored-by: trml <trml@users.noreply.github.com>
2022-06-02 12:42:47 +00:00
heinrich5991 855fe75b63 Log chat by default, put it onto INFO instead of DEBUG level
Fixes #5032.
2022-06-02 09:36:31 +02:00
trml 882ddae201 Send switch timing info in extended switch state netobject 2022-06-02 01:04:34 +02:00
trml 548de3804e Rename NumSwitchers to HighestSwitchNumber and remove most references 2022-06-02 00:57:11 +02:00
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 019c2fa429 Remove static CUIRect used as UI element ID 2022-05-31 19:41:00 +02: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
bors[bot] f03d89f206
Merge #5277
5277: penalty tiles can be used to get a time of 00:00:01, this is fixed by letting the tees die, before that happens r=def- a=C0D3D3V

Also map gets reloaded if the server tick overflows. We could add a warning, that the server reloads soon, or save all players and load them after map reload. But I think that is such a rare event, we can just reload the map without these nice things.

fixes #5170

we should check the following maps for cheated times:
- just every fly
- puzzle partners
- time shop

## Checklist

- [x] Tested the change ingame See https://youtu.be/lQPU60XN8Nk
- [ ] 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-30 21:03:40 +00:00
c0d3d3v 19ae17366d
penalty tiles can be used to get a time of 0:00:01, this is fixed by
letting the tees die, before that happens
2022-05-30 20:53:04 +02: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 06cd4e9ab3 Organize game-server 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
bors[bot] 9e6ee21545
Merge #5269
5269: Introduce and use constexpr CCharacterCore::PhysicalSize r=def- a=Kaffeine

Add `Collision()` getter to server CEntity to make it easier to sync the server and prediction implementations (e.g. `IsGrounded()` imps are now identical).

## 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: Alexander Akulich <akulichalexander@gmail.com>
2022-05-28 22:23:20 +00: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 f057dd33a2 server/character: Use CEntity::Collision() instead of GameServer() one
Rationalize: make prediction and server code closer to each other.
2022-05-28 21:46:07 +03:00
Alexander Akulich f934882e51 server/entity: Add CCollision() getter
The main idea is to sync prediction and server CEntity APIs.
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
c0d3d3v 556b32270d
Execute the dragger_beam tick one tick earlier. And stop it one tick
earlier
2022-05-28 17:27:10 +02: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