Commit graph

13048 commits

Author SHA1 Message Date
Robert Müller 0f2590801d Clarify operator precedence
According to cppcheck's `clarifyCalculation` error:

```
src\game\client\components\hud.cpp:196:49: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
   float ImageSize = GameFlags & GAMEFLAG_FLAGS ? 16.0f : Split;
                                                ^
src\game\editor\layer_tiles.cpp:544:94: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
    m_pTiles[y * m_Width + x].m_Flags ^= m_pTiles[y * m_Width + x].m_Flags & TILEFLAG_ROTATE ? TILEFLAG_HFLIP : TILEFLAG_VFLIP;
                                                                                             ^
src\game\editor\layer_tiles.cpp:560:94: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
    m_pTiles[y * m_Width + x].m_Flags ^= m_pTiles[y * m_Width + x].m_Flags & TILEFLAG_ROTATE ? TILEFLAG_VFLIP : TILEFLAG_HFLIP;
                                                                                             ^
```
2022-11-29 23:32:30 +01:00
Robert Müller f46c9f9079 Remove redundant conditional expression before assignment
According to cppcheck's `duplicateConditionalAssign` error:

```
src\game\client\gameclient.cpp:1439:39: style: The statement 'if (m_aFlagDropTick[TEAM_RED]!=0) m_aFlagDropTick[TEAM_RED]=0' is logically equivalent to 'm_aFlagDropTick[TEAM_RED]=0'. [duplicateConditionalAssign]
    else if(m_aFlagDropTick[TEAM_RED] != 0)
                                      ^
src\game\client\gameclient.cpp:1440:32: note: Assignment 'm_aFlagDropTick[TEAM_RED]=0'
     m_aFlagDropTick[TEAM_RED] = 0;
                               ^
src\game\client\gameclient.cpp:1439:39: note: Condition 'm_aFlagDropTick[TEAM_RED]!=0' is redundant
    else if(m_aFlagDropTick[TEAM_RED] != 0)
                                      ^
src\game\client\gameclient.cpp:1446:40: style: The statement 'if (m_aFlagDropTick[TEAM_BLUE]!=0) m_aFlagDropTick[TEAM_BLUE]=0' is logically equivalent to 'm_aFlagDropTick[TEAM_BLUE]=0'. [duplicateConditionalAssign]
    else if(m_aFlagDropTick[TEAM_BLUE] != 0)
                                       ^
src\game\client\gameclient.cpp:1447:33: note: Assignment 'm_aFlagDropTick[TEAM_BLUE]=0'
     m_aFlagDropTick[TEAM_BLUE] = 0;
                                ^
src\game\client\gameclient.cpp:1446:40: note: Condition 'm_aFlagDropTick[TEAM_BLUE]!=0' is redundant
    else if(m_aFlagDropTick[TEAM_BLUE] != 0)
                                       ^
```
2022-11-29 23:32:30 +01:00
Robert Müller 19bf435d6a Remove redundant assignments
According to cppcheck's `redundantInitialization` and `redundantAssignment` errors:

```
src\game\client\ui.cpp:456:5: style: Redundant initialization for 'tw'. The initialized value is overwritten before it is read. [redundantInitialization]
 tw = TextRender()->TextWidth(0, Size, pText, -1, LabelProps.m_MaxWidth, &AlignedSize, &MaxCharacterHeightInLine);
    ^
src\game\client\ui.cpp:454:11: note: tw is initialized
 float tw = std::numeric_limits<float>::max();
          ^
src\game\client\ui.cpp:456:5: note: tw is overwritten
 tw = TextRender()->TextWidth(0, Size, pText, -1, LabelProps.m_MaxWidth, &AlignedSize, &MaxCharacterHeightInLine);
    ^
src\game\client\ui.cpp:529:5: style: Redundant initialization for 'tw'. The initialized value is overwritten before it is read. [redundantInitialization]
 tw = TextRender()->TextWidth(0, Size, pText, -1, LabelProps.m_MaxWidth, &AlignedSize, &MaxCharacterHeightInLine);
    ^
src\game\client\ui.cpp:527:11: note: tw is initialized
 float tw = std::numeric_limits<float>::max();
          ^
src\game\client\ui.cpp:529:5: note: tw is overwritten
 tw = TextRender()->TextWidth(0, Size, pText, -1, LabelProps.m_MaxWidth, &AlignedSize, &MaxCharacterHeightInLine);
    ^

src\game\editor\editor.cpp:6051:19: style: Variable 'm_Map.m_Modified' is reassigned a value before the old one has been used. [redundantAssignment]
 m_Map.m_Modified = false;
                  ^
src\game\editor\editor.cpp:6046:19: note: m_Map.m_Modified is assigned
 m_Map.m_Modified = false;
                  ^
src\game\editor\editor.cpp:6051:19: note: m_Map.m_Modified is overwritten
 m_Map.m_Modified = false;
                  ^

src\game\client\prediction\entities\character.cpp:1148:36: style: Variable 'm_LatestInput' is reassigned a value before the old one has been used. [redundantAssignment]
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                                   ^
src\game\client\prediction\entities\character.cpp:1134:16: note: m_LatestInput is assigned
 m_LatestInput = m_LatestPrevInput = m_PrevInput = m_Input = m_SavedInput;
               ^
src\game\client\prediction\entities\character.cpp:1148:36: note: m_LatestInput is overwritten
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                                   ^
src\game\client\prediction\entities\character.cpp:1148:20: style: Variable 'm_LatestPrevInput' is reassigned a value before the old one has been used. [redundantAssignment]
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                   ^
src\game\client\prediction\entities\character.cpp:1134:36: note: m_LatestPrevInput is assigned
 m_LatestInput = m_LatestPrevInput = m_PrevInput = m_Input = m_SavedInput;
                                   ^
src\game\client\prediction\entities\character.cpp:1148:20: note: m_LatestPrevInput is overwritten
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                   ^
src\game\client\prediction\entities\character.cpp:1148:50: style: Variable 'm_PrevInput' is reassigned a value before the old one has been used. [redundantAssignment]
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                                                 ^
src\game\client\prediction\entities\character.cpp:1134:50: note: m_PrevInput is assigned
 m_LatestInput = m_LatestPrevInput = m_PrevInput = m_Input = m_SavedInput;
                                                 ^
src\game\client\prediction\entities\character.cpp:1148:50: note: m_PrevInput is overwritten
 m_LatestPrevInput = m_LatestInput = m_PrevInput = m_SavedInput = m_Input;
                                                 ^
```
2022-11-29 23:32:29 +01:00
Robert Müller 4197e8d0b0 Fix bool being assigned to float variable
According to cppcheck's `assignBoolToFloat` error:

```
src\game\client\components\menus_settings.cpp:634:13: style: Boolean value assigned to floating point variable. [assignBoolToFloat]
  Highlight = (m_Dummy) ? g_Config.m_ClDummyDefaultEyes == CurrentEyeEmote : g_Config.m_ClPlayerDefaultEyes == CurrentEyeEmote;
            ^
src\game\client\gameclient.cpp:320:23: style: Boolean value assigned to floating point variable. [assignBoolToFloat]
 m_LastDummyConnected = false;
                      ^
src\game\client\gameclient.cpp:563:23: style: Boolean value assigned to floating point variable. [assignBoolToFloat]
 m_LastDummyConnected = false;
                      ^
```
2022-11-29 23:32:28 +01:00
Robert Müller 65aa584b9f Remove redundant conditional expressions
According to cppcheck's `redundantCondition` and `multiCondition` errors:

```
src\engine\client\backend\glsl_shader_compiler.cpp:70:39: style: Redundant condition: The condition '*(pBuff+1)' is redundant since '*(pBuff+1) == 'i'' is sufficient. [redundantCondition]
     if(*pBuff == ' ' && *(pBuff + 1) && *(pBuff + 1) == 'i' && *(pBuff + 2) == 'n')
                                      ^
src\engine\client\backend\glsl_shader_compiler.cpp:98:45: style: Redundant condition: The condition '*(pBuff+1)' is redundant since '*(pBuff+1) == 'u'' is sufficient. [redundantCondition]
      else if(*pBuff == 'o' && *(pBuff + 1) && *(pBuff + 1) == 'u' && *(pBuff + 2) == 't')
                                            ^

src\game\client\gameclient.cpp:1665:62: style: Redundant condition: m_aShowOthers[g_Config.m_ClDummy]!=SHOW_OTHERS_NOT_SET. 'A || (!A && B)' is equivalent to 'A || B' [redundantCondition]
 if(m_aShowOthers[g_Config.m_ClDummy] == SHOW_OTHERS_NOT_SET || (m_aShowOthers[g_Config.m_ClDummy] != SHOW_OTHERS_NOT_SET && m_aShowOthers[g_Config.m_ClDummy] != g_Config.m_ClShowOthers))
                                                             ^

src\game\client\prediction\entities\projectile.cpp:104:34: style: Redundant condition: pTargetChr. '!A || (A && B)' is equivalent to '!A || B' [redundantCondition]
  if(m_Explosive && (!pTargetChr || (pTargetChr && (!m_Freeze || (m_Type == WEAPON_SHOTGUN && Collide)))))
                                 ^

src\engine\client\backend\vulkan\backend_vulkan.cpp:6588:11: style: Expression is always true because 'else if' condition is opposite to previous condition at line 6578. [multiCondition]
  else if(!pCommand->m_ByResize)
          ^
src\engine\client\backend\vulkan\backend_vulkan.cpp:6578:14: note: first condition
  if(pCommand->m_ByResize)
             ^
src\engine\client\backend\vulkan\backend_vulkan.cpp:6588:11: note: else if condition is opposite to first condition
  else if(!pCommand->m_ByResize)
          ^
```
2022-11-29 23:32:28 +01:00
Robert Müller ca58bba82f Remove redundant bitwise operand
According to cppcheck's `badBitmaskCheck` error:

```
src\engine\client\client.cpp:422:26: style: Operator '|' with one operand equal to zero is redundant. [badBitmaskCheck]
  Packer.AddInt((0 << 1) | (pMsg->m_System ? 1 : 0)); // NETMSG_EX, NETMSGTYPE_EX
                         ^

src\engine\shared\snapshot.cpp:40:45: style: Operator '|' with one operand equal to zero is redundant. [badBitmaskCheck]
 int TypeItemIndex = GetItemIndex((0 << 16) | InternalType); // NETOBJTYPE_EX
                                            ^

src\engine\server\server.cpp:777:26: style: Operator '|' with one operand equal to zero is redundant. [badBitmaskCheck]
  Packer.AddInt((0 << 1) | (pMsg->m_System ? 1 : 0)); // NETMSG_EX, NETMSGTYPE_EX
                         ^
```
2022-11-29 23:32:28 +01:00
Robert Müller 45b645f890 Remove assignment of variable to self
According to cppcheck's `selfAssignment` error:

```
src\engine\client\backend\vulkan\backend_vulkan.cpp:5784:23: warning: Redundant assignment of 'DescrSetTextOutline' to itself. [selfAssignment]
  DescrSetTextOutline = DescrSetText;
                      ^
```
2022-11-29 23:32:27 +01:00
Robert Müller 54a13b1c12 Remove check for negative unsigned expression
According to cppcheck's `unsignedLessThanZero` error:

```
src\engine\shared\datafile.cpp:129:13: style: Checking if unsigned expression 'Bytes' is less than zero. [unsignedLessThanZero]
   if(Bytes <= 0)
            ^
```
2022-11-29 23:32:27 +01:00
Robert Müller 8e675878b0 Remove redundant null-checks
According to cppcheck's `nullPointerRedundantCheck` check:

```
src\game\client\components\menus_settings.cpp:729:8: warning: Either the condition 'pSkinToBeSelected==0' is redundant or there is possible null pointer dereference: pSkinToBeSelected. [nullPointerRedundantCheck]
   if((pSkinToBeSelected->GetName()[0] == 'x' && pSkinToBeSelected->GetName()[1] == '_'))
       ^
src\game\client\components\menus_settings.cpp:732:25: note: Assuming that condition 'pSkinToBeSelected==0' is not redundant
   if(pSkinToBeSelected == 0)
                        ^
src\game\client\components\menus_settings.cpp:729:8: note: Null pointer dereference
   if((pSkinToBeSelected->GetName()[0] == 'x' && pSkinToBeSelected->GetName()[1] == '_'))
       ^

src\game\editor\editor.cpp:5034:19: warning: Either the condition 'pEnvelope' is redundant or there is possible null pointer dereference: pEnvelope. [nullPointerRedundantCheck]
  float EndTime = pEnvelope->EndTime();
                  ^
src\game\editor\editor.cpp:5056:7: note: Assuming that condition 'pEnvelope' is not redundant
   if(pEnvelope)
      ^
src\game\editor\editor.cpp:5034:19: note: Null pointer dereference
  float EndTime = pEnvelope->EndTime();
                  ^
src\game\editor\editor.cpp:5038:3: warning: Either the condition 'pEnvelope' is redundant or there is possible null pointer dereference: pEnvelope. [nullPointerRedundantCheck]
  pEnvelope->FindTopBottom(s_ActiveChannels);
  ^
src\game\editor\editor.cpp:5056:7: note: Assuming that condition 'pEnvelope' is not redundant
   if(pEnvelope)
      ^
src\game\editor\editor.cpp:5038:3: note: Null pointer dereference
  pEnvelope->FindTopBottom(s_ActiveChannels);
  ^
src\game\editor\editor.cpp:5039:15: warning: Either the condition 'pEnvelope' is redundant or there is possible null pointer dereference: pEnvelope. [nullPointerRedundantCheck]
  float Top = pEnvelope->m_Top;
              ^
src\game\editor\editor.cpp:5056:7: note: Assuming that condition 'pEnvelope' is not redundant
   if(pEnvelope)
      ^
src\game\editor\editor.cpp:5039:15: note: Null pointer dereference
  float Top = pEnvelope->m_Top;
              ^
src\game\editor\editor.cpp:5040:18: warning: Either the condition 'pEnvelope' is redundant or there is possible null pointer dereference: pEnvelope. [nullPointerRedundantCheck]
  float Bottom = pEnvelope->m_Bottom;
                 ^
src\game\editor\editor.cpp:5056:7: note: Assuming that condition 'pEnvelope' is not redundant
   if(pEnvelope)
      ^
src\game\editor\editor.cpp:5040:18: note: Null pointer dereference
  float Bottom = pEnvelope->m_Bottom;
                 ^
src\game\editor\editor.cpp:5081:23: warning: Either the condition 'pEnvelope' is redundant or there is possible null pointer dereference: pEnvelope. [nullPointerRedundantCheck]
   for(int c = 0; c < pEnvelope->m_Channels; c++)
                      ^
src\game\editor\editor.cpp:5056:7: note: Assuming that condition 'pEnvelope' is not redundant
   if(pEnvelope)
      ^
src\game\editor\editor.cpp:5081:23: note: Null pointer dereference
   for(int c = 0; c < pEnvelope->m_Channels; c++)
                      ^
```
2022-11-29 23:32:27 +01:00
Robert Müller e134e4e488 Remove redundant conditions (always either true or false)
According to cppcheck's `knownConditionTrueFalse` error:

```
src\base\system.cpp:1776:11: style: The comparison 'bytes == 0' is always true. [knownConditionTrueFalse]
 if(bytes == 0 && sock->ipv4sock >= 0)
          ^
src\base\system.cpp:1742:14: note: 'bytes' is assigned value '0' here.
 int bytes = 0;
             ^
src\base\system.cpp:1776:11: note: The comparison 'bytes == 0' is always true.
 if(bytes == 0 && sock->ipv4sock >= 0)
          ^

src\game\editor\io.cpp:887:33: style: Condition 'pSoundsItem->m_Version>=1' is always true [knownConditionTrueFalse]
      if(pSoundsItem->m_Version >= 1)
                                ^
src\game\editor\io.cpp:874:33: note: Assuming that condition 'pSoundsItem->m_Version<1' is not redundant
      if(pSoundsItem->m_Version < 1 || pSoundsItem->m_Version > CMapItemLayerSounds::CURRENT_VERSION)
                                ^
src\game\editor\io.cpp:887:33: note: Condition 'pSoundsItem->m_Version>=1' is always true
      if(pSoundsItem->m_Version >= 1)
                                ^
src\game\editor\io.cpp:914:33: style: Condition 'pSoundsItem->m_Version>=1' is always true [knownConditionTrueFalse]
      if(pSoundsItem->m_Version >= 1)
                                ^
src\game\editor\io.cpp:901:33: note: Assuming that condition 'pSoundsItem->m_Version<1' is not redundant
      if(pSoundsItem->m_Version < 1 || pSoundsItem->m_Version > CMapItemLayerSounds::CURRENT_VERSION)
                                ^
src\game\editor\io.cpp:914:33: note: Condition 'pSoundsItem->m_Version>=1' is always true
      if(pSoundsItem->m_Version >= 1)
                                ^

src\engine\client\backend\opengl\backend_opengl.cpp:207:68: style: Condition '*pStr=='\0'' is always false [knownConditionTrueFalse]
   else if(LastWasNumber && (*pStr == '.' || *pStr == ' ' || *pStr == '\0'))
                                                                   ^

src\game\client\components\maplayers.cpp:851:110: style: Condition 'DoTextureCoords' is always true [knownConditionTrueFalse]
        mem_copy_special(pUploadData + sizeof(vec2), pTmpTileTexCoords, sizeof(vec3), vtmpTiles.size() * 4, (DoTextureCoords ? (sizeof(vec2)) : 0));
                                                                                                             ^
src\game\client\components\maplayers.cpp:849:11: note: Assuming that condition 'DoTextureCoords' is not redundant
       if(DoTextureCoords)
          ^

src\game\client\components\maplayers.cpp:851:110: note: Condition 'DoTextureCoords' is always true
        mem_copy_special(pUploadData + sizeof(vec2), pTmpTileTexCoords, sizeof(vec3), vtmpTiles.size() * 4, (DoTextureCoords ? (sizeof(vec2)) : 0));
                                                                                                             ^

src\game\client\prediction\gameworld.cpp:567:5: style: Condition 'm_pParent' is always true [knownConditionTrueFalse]
 if(m_pParent && m_pParent->m_pChild && m_pParent->m_pChild != this)
    ^

src\game\client\components\menu_background.cpp:271:7: style: Condition 'NeedImageLoading' is always true [knownConditionTrueFalse]
   if(NeedImageLoading)
      ^
src\game\client\components\menu_background.cpp:268:23: note: Assignment 'NeedImageLoading=true', assigned value is 1
   NeedImageLoading = true;
                      ^
src\game\client\components\menu_background.cpp:271:7: note: Condition 'NeedImageLoading' is always true
   if(NeedImageLoading)
      ^

src\game\editor\editor.cpp:4991:6: style: Condition 'pEnvelope' is always true [knownConditionTrueFalse]
  if(pEnvelope)
     ^
```
2022-11-29 23:32:26 +01:00
Robert Müller 39749a3ff8 Fix optional arguments of map_create_pixelart tool
According to cppcheck's `knownConditionTrueFalse` error:

```
src\tools\map_create_pixelart.cpp:58:24: style: Condition 'argc>=10' is always true [knownConditionTrueFalse]
 aArtOptions[0] = argc >= 10 ? str_toint(argv[10]) : true; //optimize
                       ^
src\tools\map_create_pixelart.cpp:34:10: note: Assuming that condition 'argc<11' is not redundant
 if(argc < 11 || argc > 12)
         ^
src\tools\map_create_pixelart.cpp:58:24: note: Condition 'argc>=10' is always true
 aArtOptions[0] = argc >= 10 ? str_toint(argv[10]) : true; //optimize
                       ^
src\tools\map_create_pixelart.cpp:59:24: style: Condition 'argc>=11' is always true [knownConditionTrueFalse]
 aArtOptions[1] = argc >= 11 ? str_toint(argv[11]) : false; //centralize
                       ^
src\tools\map_create_pixelart.cpp:34:10: note: Assuming condition 'argc<11' is false
 if(argc < 11 || argc > 12)
         ^
src\tools\map_create_pixelart.cpp:59:24: note: Condition 'argc>=11' is always true
 aArtOptions[1] = argc >= 11 ? str_toint(argv[11]) : false; //centralize
                       ^
```
2022-11-29 23:32:26 +01:00
Robert Müller be74dc9471 Return actual bool from bool function
According to cppcheck's `returnNonBoolInBooleanFunction` error.
2022-11-29 23:32:26 +01:00
Robert Müller fd208eaa1a Remove redundant variable assignments
The assigned values are never used, so the assignments can be removed or variable scopes can be reduced.

According to cppcheck's `unreadVariable` error.
2022-11-29 23:32:26 +01:00
Robert Müller 0a0ddf2145 Pass parameters by const reference instead of value when possible
According to cppcheck's `passedByValue` error.
2022-11-29 23:32:25 +01:00
Robert Müller 78876abd46 Remove unused members CColumn::m_Flags 2022-11-29 23:32:23 +01:00
Robert Müller 554fc19be0 Remove unused member SFontSizeChar::m_TouchTime 2022-11-29 23:28:37 +01:00
Robert Müller 94678ef3a3 Remove unused struct CDatafileData 2022-11-29 23:28:36 +01:00
Robert Müller 2e2cb47674 Fix client crash when launching with screenshot command
The client crashes when launching with `screenshot` in the command line, as the graphics are not available when the command is executed.
This is fixed by storing the command, so it's executed when everything is ready.
2022-11-29 23:08:52 +01:00
Robert Müller e07bd45e27 Fix stored commands using original callback instead of the chain
When stored commands (`CFGFLAG_STORE`) were executed with `CConsole::StoreCommands(false)`, the associated chained commands were not properly executed, if they were chained after the command has been stored (e.g. in `CMenus::OnInit`).
Storing the command saves the current callback and userdata, which were overridden by the chain callback and userdata, but the stored callback and userdata were not updated.
This is fixed by storing a pointer to the command itself, which will be updated when it is chained.

From teeworlds/teeworlds#2572.
2022-11-29 23:06:50 +01:00
Robert Müller 0688355d7b Fix key reader text flashing for one frame, refactoring
The key reader was displaying the old key for a frame. It now shows the new key immediately without flashing the old one after changing a bind.

Refactoring:

- The if-branches are restructured to be the same as on upstream.
- The function `GetKeyBindModifiersName` can be called without an additional check, because it returns an empty string when no modifier is pressed.
- The unused parameter `Checked` of the `DoButton_KeySelect` function is removed.

From teeworlds/teeworlds#2877.
2022-11-29 22:25:47 +01:00
Robert Müller 10433e0c71 Reset teams when restarting round
The state of teams was not reset when restarting a round with `restart`, which led to various issues (#5144):

- Switchers kept their previous state instead of being reset to the initial state after restarting.
- Teams that started racing sometimes could not be joined after restarting.
- Sometimes teams cannot finish a race after restarting. I cannot reproduce this issue, so I don't know if it's fixed by these changes.
2022-11-29 21:56:59 +01:00
Dennis Felsing 9912e44a9a Also remove appended / 2022-11-29 18:18:12 +01:00
Dennis Felsing 3fcf497850 Remove // in ddnet:// url handler 2022-11-29 18:15:09 +01:00
Vy0x2 ce9ad5b603 add reason to vote mutes, fix team chat 2022-11-27 18:58:09 +01:00
Robert Müller 0e77be2166 Fix client crash when unpacking a sixup packet
The client crashes when trying to unpack a packet that has the sixup flag set, as `CNetClient` does not pass pointers for the output parameters `pSecurityToken` and `pResponseToken` to `CNetBase::UnpackPacket`.
Since the client does not handle sixup packets, checks are added to return an error and ignore the packet instead of crashing due to a null pointer access.

This was found by fuzzing the data returned by `net_udp_recv` with radamsa.

```
==6200==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f8d0fb8ba56 bp 0x7ffcbf67c7f0 sp 0x7ffcbf67c7a8 T0)
==6200==The signal is caused by a WRITE memory access.
==6200==Hint: address points to the zero page.
    0 0x7f8d0fb8ba56  (/lib/x86_64-linux-gnu/libc.so.6+0xc4a56)
    1 0x563a7e250fbe in mem_copy src/base/system.cpp:208
    2 0x563a7e1bc6b6 in CNetBase::UnpackPacket(unsigned char*, int, CNetPacketConstruct*, bool&, int*, int*) src/engine/shared/network.cpp:263
    3 0x563a7e1bf57e in CNetClient::Recv(CNetChunk*) src/engine/shared/network_client.cpp:100
    4 0x563a7cfa76a2 in CClient::PumpNetwork() src/engine/client/client.cpp:2546
    5 0x563a7cfb7cf6 in CClient::Update() src/engine/client/client.cpp:2838
    6 0x563a7cfcfe47 in CClient::Run() src/engine/client/client.cpp:3214
    7 0x563a7d04c631 in main src/engine/client/client.cpp:4702
    8 0x7f8d0faf0d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    9 0x7f8d0faf0e3f in __libc_start_main_impl ../csu/libc-start.c:392
    10 0x563a7cb28754 in _start (build-asan/DDNet+0x2472754)

==8315==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f4accfe5a56 bp 0x7ffcf1318530 sp 0x7ffcf13184e8 T0)
==8315==The signal is caused by a WRITE memory access.
==8315==Hint: address points to the zero page.
    0 0x7f4accfe5a56  (/lib/x86_64-linux-gnu/libc.so.6+0xc4a56)
    1 0x560413603200 in mem_copy src/base/system.cpp:208
    2 0x56041356d9c7 in CNetBase::UnpackPacket(unsigned char*, int, CNetPacketConstruct*, bool&, int*, int*) src/engine/shared/network.cpp:224
    3 0x5604135717c0 in CNetClient::Recv(CNetChunk*) src/engine/shared/network_client.cpp:104
    4 0x5604123597e2 in CClient::PumpNetwork() src/engine/client/client.cpp:2546
    5 0x560412369e36 in CClient::Update() src/engine/client/client.cpp:2838
    6 0x560412381f87 in CClient::Run() src/engine/client/client.cpp:3214
    7 0x5604123fe771 in main src/engine/client/client.cpp:4702
    8 0x7f4accf4ad8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    9 0x7f4accf4ae3f in __libc_start_main_impl ../csu/libc-start.c:392
    10 0x560411eda894 in _start (build-asan/DDNet+0x2472894)
```
2022-11-24 21:12:40 +01:00
Robert Müller 5e06eefcd2 Implement smooth zoom for editor
Port the smooth zoom code from the ingame camera to the editor with some minor adjustments.

The smooth zoom animation time can be adjusted with the existing `cl_smooth_zoom_time` config variable.

Closes #2525.
2022-11-23 23:06:20 +01:00
bors[bot] 2333f8e353
Merge #6058
6058: Fix invalid demo cutting, Add slice highlighting r=Chairn a=VoxelDoesCode

Before, you could place an end slice before the beginning, creating a "zero second" demo, which doesn't play in client, and renders a corrupt file. I implemented a check where if the playhead is before the beginning slice, it won't place an end slice, and vice versa. 

I also added highlighting in between the slices, so that it's easier to see.
![image](https://user-images.githubusercontent.com/95713843/202870840-216df4d7-975e-496d-b122-c819ce7ae6ee.png)

## Checklist

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


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-11-22 10:24:48 +00:00
VoxelDoesCode cc2e40dd90 Reset slice markers if invalid 2022-11-21 20:19:58 -05:00
Robert Müller 26e35d3a56 Fix choppy demo seeking when start/end ticks are very large
Demo seeking for percent positions and relative time was choppy, when the first and last ticks of the demo are very large but close together (e.g. with 1308908156 to 1308905658, which are close to integer limit).
During the calculation of `WantedTick` both operands were promoted to `float`s, which caused the information of the smaller operand, i.e. the seeked percentage or relative time, to be mostly lost, so seeking was very inaccurate.
This is fixed by rounding the `float` operand to `int` before adding it to another `int`.
2022-11-21 00:22:46 +01:00
bors[bot] 87679f59a8
Merge #6061
6061: Add friend counter + Change alignment of player count text r=def- a=l-ouis

Added friend counter, changed the alignment of player count indicator to better accommodate friend counter + line up with the "Players" text at the top of the tab

![image](https://user-images.githubusercontent.com/69405348/202891241-b76899cf-e65a-4085-804b-0a6877468fbc.png)

Fixes #5911


## Checklist

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


Co-authored-by: louis <louisaltgeer@gmail.com>
2022-11-20 19:36:16 +00:00
louis d791fa3412 Modified layout
Player count right justified
Heart on left, number of friends below heart
Slightly reduced space for server name column
2022-11-20 13:26:53 -06:00
louis 739c77d3d7 Added threshold, skips to end/beginning
Threshold makes skipping multiple times in a row consistent

If no markers ahead or behind, will skip to beginning or end
2022-11-20 12:12:00 -06:00
Robert Müller 7ae5b1474a Add TYPE_ALL_OR_ABSOLUTE and TYPE_SAVE_OR_ABSOLUTE storage types
The types are translated to `TYPE_ALL`/`TYPE_SAVE` respectively if a given path is relative and to `TYPE_ABSOLUTE` if a path is absolute.

These types are only supported with the `OpenFile`, `ReadFile`, `ReadFileStr` and `GetCompletePath` methods.

This reduces duplicate code when calling the methods.
2022-11-20 16:07:40 +01:00
louis 1609422c95 fix clang format
removed blankspace
2022-11-20 08:52:01 -06:00
louis 615f8e9354 Update menus_browser.cpp
Added friend counter, changed alignment of player count indicator
2022-11-20 01:37:14 -06:00
louis 23287528ab Update menus_demo.cpp 2022-11-19 22:00:20 -06:00
louis a1680b30f7 Update menus_demo.cpp
fix clang style
2022-11-19 17:32:47 -06:00
louis 74c6c5c960 Add buttons+increased length
Added tick step buttons and jump to next/prev marker buttons

Increased width of demo controls panel

Centered the time multiplier
2022-11-19 16:36:57 -06:00
VoxelDoesCode 0761f4a8ae Fix invalid demo cutting, Add slice highlighting
Remove option (again)
2022-11-19 15:36:54 -05:00
bors[bot] 56088cb4b0
Merge #6054
6054: Fix editor crash when shifting left/right, fix wrong up/down shifting r=heinrich5991 a=Robyt3

Shifting left/right with a shift value greater than the layer's width crashed the game due to a heap-buffer-overflow.

Shifting up/down with a shift value greater or equal to half the layer's height did not correctly shift the entire layer.

The values of the enum constants `DIRECTION_*` are changed to consecutive numbers instead of exponents of two, as the directions cannot be combined together as flags.

Closes #6036.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-16 20:27:02 +00:00
Robert Müller 8c5bf10d44 Fix editor crash when shifting left/right, fix wrong up/down shifting
Shifting left/right with a shift value greater than the layer's width crashed the game due to a heap-buffer-overflow.

Shifting up/down with a shift value greater or equal to half the layer's height did not correctly shift the entire layer.

The values of the enum constants `DIRECTION_*` are changed to consecutive numbers instead of exponents of two, as the directions cannot be combined together as flags.

Closes #6036.
2022-11-16 20:55:44 +01:00
Robert Müller 4af20240fc Add Shift+G editor hotkey to toggle visibility of game layers
If any game layers are hidden, the hotkey will make them visible.
Else, if all game layers are visible, the hotkey will hide all of them.

Closes #4109.
2022-11-16 18:09:03 +01:00
Robert Müller ab9b6c2b80 Allow both shift keys to be used for all hotkeys
Handle both shift keys in some cases where only the left shift key was previously supported.

The `CChat::m_ReverseTAB` variable is removed because it's unnecessary.
2022-11-15 21:17:55 +01:00
Robert Müller 04be9d6e72 Add IInput::ShiftIsPressed and IInput::AltIsPressed
To avoid duplicate code when checking for both right and left shift or alt keys.
2022-11-15 21:17:55 +01:00
Robert Müller 26c95de743 Remove dead code that compares pointers of different types
This condition cannot be true, as `pGroup` is a `CLayerGroup *` but the layers are `CLayer *`/`CLayerTiles *`/`CLayerGame *` etc., which are not part of the same inheritance hierarchy.

The method `CLayerGroup::Render` already ensures that game layers are not rendered below other layers.
2022-11-15 21:17:55 +01:00
Robert Müller 91ba786b67 Only disable clipping if it was previously enabled 2022-11-15 21:17:55 +01:00
Dennis Felsing b5b15d2c6a Null-terminate string returned by mysql 2022-11-15 18:32:00 +01:00
bors[bot] b33c105fbc
Merge #5917
5917: report extra player info to master http r=def- a=edg-l

couldn't test yet

this doesnt show extra info on the client server list yet, just makes the server report it

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

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

## Checklist

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


Co-authored-by: Edgar Luque <git@edgarluque.com>
2022-11-14 13:27:51 +00:00
Edgar 4a506f03a6
report extra player info to master http 2022-11-14 08:04:34 +01:00
bors[bot] bc4a5ee6f5
Merge #6033
6033: Add more tests for hashing, `CSemaphore` and utf8 confusables r=heinrich5991 a=Robyt3



## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-12 20:28:52 +00:00
Robert Müller 7c63d3c277 Remove internal utf8 confusable functions from system.h
The functions `str_utf8_skeleton_begin` and `str_utf8_skeleton_next` and the `struct SKELETON` are only used internally, so they don't need to be exported.
2022-11-12 20:56:35 +01:00
Robert Müller 0bf31c671e Add tests for str_utf8_to_skeleton 2022-11-12 20:36:39 +01:00
Robert Müller dab6bbf4fd Add more tests for str_utf8_comp_confusable
Also check first string being shorter than second string. And check strings with equal and unequal prefix and suffix.
2022-11-12 20:36:38 +01:00
Robert Müller ab42651dc7 Add test for the CSemaphore wrapper 2022-11-12 20:36:38 +01:00
Robert Müller a113a03eaf Add tests for overloaded hash operators, use operator instead
Using `EXPECT_EQ` directly doesn't seem to register as code coverage for the `==` operators, so `EXPECT_TRUE` is used instead.
2022-11-12 20:36:38 +01:00
Robert Müller 7185f028f1 Reduce duplicate code by using loop for snapshot types 2022-11-12 20:31:44 +01:00
Robert Müller c988a71d3e Fix aliasing warnings in CClient::DemoPlayer_Play
Fix warnings with `-fstrict-aliasing` and `-Wstrict-aliasing=2` by using char array instead of array of char pointers:

```
src/engine/client/client.cpp: In member function 'virtual const char* CClient::DemoPlayer_Play(const char*, int)':
src/engine/client/client.cpp:3858:123: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 3858 |         m_aapSnapshots[g_Config.m_ClDummy][SNAP_CURRENT]->m_pSnap = (CSnapshot *)m_aaapDemorecSnapshotData[SNAP_CURRENT][0];
      |                                                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
src/engine/client/client.cpp:3859:126: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 3859 |         m_aapSnapshots[g_Config.m_ClDummy][SNAP_CURRENT]->m_pAltSnap = (CSnapshot *)m_aaapDemorecSnapshotData[SNAP_CURRENT][1];
      |                                                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
src/engine/client/client.cpp:3864:117: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 3864 |         m_aapSnapshots[g_Config.m_ClDummy][SNAP_PREV]->m_pSnap = (CSnapshot *)m_aaapDemorecSnapshotData[SNAP_PREV][0];
      |                                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
src/engine/client/client.cpp:3865:120: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 3865 |         m_aapSnapshots[g_Config.m_ClDummy][SNAP_PREV]->m_pAltSnap = (CSnapshot *)m_aaapDemorecSnapshotData[SNAP_PREV][1];
      |                                                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
```

Snapshot data during demo playback was being stored in an array of `char *` instead of an array of `char`, which caused above aliasing warnings and used 8 times more memory for the snapshot storage than being necessary.
2022-11-12 20:27:45 +01:00
Robert Müller ea06a13429 Fix aliasing warnings in CGameContext::OnMapChange
Fix warnings with `-fstrict-aliasing` and `-Wstrict-aliasing=2` by not casting the map reader data to `int *`:

```
src/game/server/gamecontext.cpp: In member function 'virtual void CGameContext::OnMapChange(char*, int)':
src/game/server/gamecontext.cpp:3623:56: warning: dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing]
 3623 |                                         pData = (int *)&MapInfo;
      |                                                        ^~~~~~~~
src/game/server/gamecontext.cpp:3631:48: warning: dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing]
 3631 |                                 pData = (int *)&MapInfo;
      |                                                ^~~~~~~~
```

As the map reader data is return as `void *` and never used as `int *`, the redundant cast is removed to fix the warnings.

Also improve readability by moving `pInfo` variable declaration.
2022-11-12 20:18:32 +01:00
VoxelDoesCode 5d1bec5a83 Change editor UI, fix an overflow bug.
clang

clang2
2022-11-11 20:36:15 -05:00
bors[bot] aef6a8b370
Merge #6024
6024: Fix CGun::Fire server crash (fixes #6023) r=Learath2 a=def-

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

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-11-11 10:32:15 +00:00
Dennis Felsing 3fff1fdc82 Don't cast write parameter for FindEntities
I think at the point where you use (CEntity **) apPlayersInRange the
compiler says this is a totally different value than apPlayersInRange
since they have a different type. And then it reorders the inlined
FindEntities code to be run afterwards, thus leading to undefined
behavior and crashes.
2022-11-09 23:08:00 +01:00
heinrich5991 80d72cf157 Fix being run from rust-analyzer with a clean environment
Detect that we're being run from rust-analyzer and don't link to C++
libraries in that case.

Fixes #6019.
2022-11-09 15:09:42 +01:00
bors[bot] 06e3eb5641
Merge #6017
6017: Minor refactoring of demo related code r=def- a=Robyt3

Extracted from #6016.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-11-06 22:00:54 +00:00
bors[bot] b21ba35225
Merge #5599
5599: Add support for Rust code in DDNet r=def- a=heinrich5991

The glue is done using the [cxx crate](https://cxx.rs/) on the Rust side.

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

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

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

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

---

The stuff in `src/rust-bridge` is generated using
```
cxxbridge src/engine/shared/rust_version.rs --output src/rust-bridge/engine/shared/rust_version.cpp --output src/rust-bridge/engine/shared/rust_version.h
cxxbridge src/engine/console.rs --output src/rust-bridge/cpp/console.cpp --output src/rust-bridge/cpp/console.h
```

Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-11-06 21:40:48 +00:00
Robert Müller bbf36a226c Remove dead code 2022-11-06 16:25:25 +01:00
Robert Müller c2d2093c89 Use . for object access instead of getting a pointer first 2022-11-06 16:25:25 +01:00
Robert Müller 2d1d7b9562 Replace duplicate condition with a check for empty string 2022-11-06 16:25:24 +01:00
Robert Müller 84c9506d3c Use loop for demo recorders to reduce duplicate code 2022-11-06 16:25:24 +01:00
bors[bot] 48d82e9bfd
Merge #6010 #6015
6010: Search for images/sounds in subfolders when readding in editor, show selection dialog if multiple files with the same are found, show error popup when file cannot be found r=heinrich5991 a=Robyt3

Search for the image/sound file in all subfolders of the mapres folder when using the "Readd" button in the editor.

Show an error popup when readding fails:

![errorpopup](https://user-images.githubusercontent.com/23437060/200087069-bb735f14-b56f-458a-9571-c013fc19e59d.png)

Show a selection dialog if multiple files with the same name are found in different subfolders:

![selectiondialog](https://user-images.githubusercontent.com/23437060/200125448-dccf47ba-d643-4f41-b256-eb90656ba693.png)


## Checklist

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


6015: Add tests for int packer r=heinrich5991 a=ChillerDragon

This is an effort to test the Integer packer code. It should hopefully also be useful as some kind of documentation for everyone trying to understand how ints are packed.

BTW github in my browser uses a weird angle for the slashes so it looks like this:

![image](https://user-images.githubusercontent.com/20344300/200165832-b35bae5c-6681-4a43-8a7c-b51b374b3da9.png)

In my vscode it looks nice tho:

![image](https://user-images.githubusercontent.com/20344300/200165853-c7cedc06-a053-4c4c-aad1-711c403e9b84.png)

Or in vim. So I blame the github web preview font being broken:

![image](https://user-images.githubusercontent.com/20344300/200165893-e30754eb-5570-433d-805d-3b8308ddd65d.png)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-11-06 14:10:27 +00:00
ChillerDragon 0211f79ef0 Add tests for int packer 2022-11-06 14:49:40 +01:00
Robert Müller fcec553599 Use pi instead of 3.14159f 2022-11-06 11:52:21 +01:00
Robert Müller 4d0cd7f807 Use traditional casts instead of functional-style casts 2022-11-06 11:52:21 +01:00
Robert Müller 83faed0952 Write sqlite file to storage unless given as absolute path 2022-11-05 16:32:45 +01:00
Robert Müller a62bf7c334 Write log files to storage unless given as absolute path 2022-11-05 16:30:24 +01:00
Robert Müller 964f839410 Show selection popup when multiple images/sounds with same name exist
When readding a sound/image and multiple files with the name exist, a popup is shown that allows the user to choose the wanted file.
If exactly one file is found, it is used without showing a dialog.
As before, if no file is found, an error message popup is shown.
2022-11-05 15:42:39 +01:00
Robert Müller 812a884c06 Add generic selection popup to editor
Add `CEditor::ShowPopupSelection` to show a generic selection popup.

This popups shows a message and buttons for all entries in a `std::set`. Exactly one entry can be selected and the selection will be available to the caller in the given `SSelectionPopupContext`.
2022-11-05 15:42:39 +01:00
Robert Müller 896dd4ecd4 Add IStorage::FindFiles to find all files with a specific name
This function searches in all subfolder of the given folder and fills the given `std::vector` with all files with the given filename.

A `std::set` is used to prevent duplicate entries when a file with the same path is present in multiple storage locations. In that case we only need the path once, as we only use it against the highest priority storage location anyway.
2022-11-05 15:42:39 +01:00
Robert Müller 940f5df225 Search for images/sounds in subfolders when readding, add error popup
Use `FindFile` to search for the image/sound file in all subfolders of the mapres folder when using the "Readd" button in the editor.

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

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

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

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

## Checklist

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


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



## Checklist

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


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

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

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

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

Pass `nullptr` instead of calculating unused `CUIRect` values.
2022-11-03 19:53:21 +01:00
Robert Müller abf795d9da Invoke static methods without a class instance
The methods `ReplaceImage` and `ReplaceSound` are static, so they should be called without an object.
2022-11-03 19:32:10 +01:00
Jupeyy 365c48413f Switch to Vulkan 1.1
Since the vulkan loader drops support for useful extensions (or the extension loading process changed between 1.0 & 1.1, not sure)
Which causes OBS not to work
2022-11-02 12:54:04 +01:00
bors[bot] e71ce8fcde
Merge #5998
5998: Fix Ctrl+F hotkey not checking for Ctrl key, minor improvement to tile details popup layout r=def- a=Robyt3


## Checklist

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


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

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

## Checklist

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


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

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

## Checklist

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


Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-11-01 10:29:53 +00:00
bors[bot] 1fe482232b
Merge #5991
5991: Handle all `MultiByteToWideChar` and `WideCharToMultiByte` return values r=def- a=Robyt3

Closes #5970.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-10-29 21:40:50 +00:00
Robert Müller 6501ae9b9d Add checks for remaining WideCharToMultiByte usages in system
Converting wide-char (UTF-16) to multi-byte (UTF-8) takes 1-2 wide-chars from the input and transforms them to 1-4 bytes, so having `char` and `WCHAR` buffers with equal static lengths means that this function can fail due to insufficient buffer sizes when the user has folder or files with very long names (many unicode codepoints).
Therefore checks are added that allow only the error `ERROR_INSUFFICIENT_BUFFER` when `WideCharToMultiByte` fails, which is expected on very long paths, as these would also lead to further errors later in the code. The respective functions will now fail with a return and ignore files that have too long names.
This could only completely be fixed using dynamically sized buffers for all paths, which seems like too much work and overhead.
Other errors are not expected and hence caught by the assertions, as those would indicate programming errors like wrong arguments being passed.

Reference: https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte
2022-10-29 21:17:48 +02:00
Robert Müller 6c30fb6f5a Remove duplicate buffer from fs_listdir functions
The second buffer was previously used when calling `fs_is_dir` explicity, but it has become from obsolete from #4657 by using the flag `FILE_ATTRIBUTE_DIRECTORY` instead.
2022-10-29 21:17:48 +02:00
Robert Müller 8bde109acb Use dynamic size for formatted Windows system messages
Extract `windows_format_system_message` and allocate appropriate buffer for the formatted system error messages, so messages of any length can be displayed.

The flag `FORMAT_MESSAGE_ALLOCATE_BUFFER` is used so `FormatMessageW` allocates the buffer which must later be freed with `LocalFree`.

The flag `FORMAT_MESSAGE_MAX_WIDTH_MASK` is also added so the formatted message will not contain any line breaks at the end, which would make log messages less readable.

Reference: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-formatmessagew
2022-10-29 21:17:47 +02:00
Robert Müller a1c1a8f972 Add assertions for all MultiByteToWideChar usages in system
Converting multi-byte (UTF-8) to wide-char (UTF-16) take 1-4 bytes from the input and transforms them to 1-2 wide-chars, so having `char` and `WCHAR` buffers with equal lengths should mean that this function can't fail due to insufficient buffer sizes, unless a path that's already too long for Windows is being used internally.
Other errors are also not expected, as those would indicate programming errors like wrong arguments being passed.

The maximum length for paths in the Win32 API is 260 characters. This limitation can be lifted in Windows 10, but it must be done explicitly (opt-in) both in the Windows Registry by the user and in the application's manifest by us.

References:

- https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar
- https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
2022-10-29 21:17:47 +02:00
Robert Müller 72991fbe9a Use dynamic buffer size in CLoggerWindowsDebugger
Make sure the Windows debugger logger does not fail when log messages are too long.

The first call to `MultiByteToWideChar` gets the required size of the wide-char buffer, which should be at least one for the null termination. The second call is expected to produce exactly the same number of characters.
2022-10-29 21:17:47 +02:00
Robert Müller f74797ae0c Use assertions in CWindowsConsoleLogger instead of error messages
The function `MultiByteToWideChar` can't fail unless wrong arguments are passed, when the buffer size is set correctly by calling the function twice. The returned buffer size on the second call should always match the buffer size determined with the first call.
2022-10-29 21:17:47 +02:00
def a237ee5f6d Improve callvote arguments by making them more specific
Should make it a bit clearer how to call a vote from F1
2022-10-29 14:45:24 +02:00
Robert Müller 6c8fa6b4f0 Rename variable aBuf to pBuf, use size_t for buffer size 2022-10-27 22:21:08 +02:00
Robert Müller d551617c34 Use str_copy instead of str_format with format "%s"
Using `str_format(aBuf, sizeof(aBuf), "%s", pStr)` is equivalent to `str_copy(aBuf, pStr, sizeof(aBuf))`. Using `str_copy` is more readable and also more efficient as there is no overhead from parsing the format string and from passing varargs.
2022-10-27 21:42:14 +02:00
Jupeyy 3b2dd73614 Rename config var to no weak only 2022-10-27 17:51:30 +02:00
fokkonaut cedc315a70 Fix physics change by weak hook fix (fixes #5769) 2022-10-27 17:44:54 +02:00
bors[bot] 47b351134a
Merge #5985
5985: Fix large editor popups being outside of screen, add margin r=def- a=Robyt3

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

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

Closes #5982.

## Checklist

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


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

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

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

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

This is fixed by getting the name of the current demo file from the demo player instead, when cutting a demo.
Though the cut demo will be saved to the last demo folder selected (or the demos directory) instead of being saved to the same directory as the original demo.
2022-10-24 20:14:04 +02:00
Robert Müller 3c1cd89ae6 Append file extension before checking for identical cut demo filename
The file extension needs to be appended to the cut demo name before checking whether the name matches the currently playing file, otherwise the "Please use a different name" error message is not shown and instead the "File already exists" question is shown.
2022-10-24 19:53:42 +02:00
Robert Müller be45604354 Fix demo file not being closed after showing error message
When entering the name of an existing demo file into the Slice demo dialog and pressing the Ok button twice, the file handle that's used for checking for the demo file's existence is not closed, hence the cut demo file cannot be deleted until the client is closed.
2022-10-24 19:48:44 +02:00
Robert Müller 5c11937543 Use fegetenv/fesetenv instead of _control87 on Windows
As `_control87` doesn't seem to be available for some MinGW compilers.

Closes #5969.
2022-10-23 10:59:53 +02:00
Robert Müller c0da3b93e4 Fix IME not being deactivated when editor is closed
Previously the IME was not deactivated when the editor is closed, so `SDL_TEXTINPUT` events where still being reported ingame after exiting the editor.
2022-10-21 21:31:21 +02:00
Robert Müller 75326e8393 Fix text input not working when entering editor with bind
When entering the editor with a custom bind (e.g. `bind e "cl_editor 1"`) or when opening it from the console while also immediately closing the console (e.g. with `cl_editor 1; toggle_local_console`), the IME state was not properly set to active, so SDL did not report any `SDL_TEXTINPUT` events, leading to editboxes in the editor not receiving any text.

The is fixed by always enabling the IME state when entering the editor, which was previously only done when using the Ctrl+Shift+E hotkey or coincidentally when the editor is activated while the IME is already active, i.e. when the menu or console is open.

Closes #5095.
2022-10-21 21:20:10 +02:00
Robert Müller f5a16c1c77 Fix crash in editor when using up/down keys on empty images list 2022-10-21 20:28:30 +02:00
Robert Müller 4a683e024a Fix crash in editor when using up/down keys on empty sounds list 2022-10-21 20:28:00 +02:00
bors[bot] 8feba4ecf6
Merge #5966
5966: Fix duplicate description of cl_default_zoom_level r=heinrich5991 a=def-

Since #5894 is not landing

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

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-10-21 11:53:55 +00:00
bors[bot] 9c6a187ee9
Merge #5965
5965: Don't print max value when there is none (fixes #5953) r=edg-l a=def-

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

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-10-21 07:35:19 +00:00
Dennis Felsing eb27b26d8d Also ignore min value 2022-10-21 00:34:44 +02:00
Dennis Felsing f7bc58b056 Fix duplicate description of cl_default_zoom_level
Since #5894 is not landing
2022-10-21 00:12:07 +02:00
Dennis Felsing 26a08360f8 Don't print max value when there is none (fixes #5953) 2022-10-21 00:09:30 +02:00
Robert Müller 73fe4e6ed4 Use str_copy instead of snprintf to copy strings 2022-10-20 20:56:58 +02:00
Robert Müller c4cf26ea81 Replace atol usages with str_toint, as type is int anyway
As `atol` does not provide any way to detect errors and can cause undefined behavior on errors, i.e. when the result cannot be represented as a `long`.

The `atol` function was only used in `priv_net_extract` for parsing the port, which is an `int` and not a `long`, so the existing `str_toint` is used instead.

References:

- https://wiki.sei.cmu.edu/confluence/display/c/ERR07-C.+Prefer+functions+that+support+error+checking+over+equivalent+functions+that+don%27t
- https://pubs.opengroup.org/onlinepubs/9699919799/functions/atol.html
2022-10-20 20:54:01 +02:00
Robert Müller 1469e88a79 Replace atof usages with strtod (str_tofloat wrapper)
As `atof` does not provide any way to detect errors and can cause undefined behavior on errors, i.e. when the result cannot be represented as a `float`.

References:

- https://wiki.sei.cmu.edu/confluence/display/c/ERR07-C.+Prefer+functions+that+support+error+checking+over+equivalent+functions+that+don%27t
- https://pubs.opengroup.org/onlinepubs/9699919799/functions/atof.html
2022-10-20 20:30:12 +02:00
Robert Müller 6b043bf3b2 Replace atoi usages with strtol (str_toint wrapper)
As `atoi` does not provide any way to detect errors and can cause undefined behavior on errors, i.e. when the result cannot be represented as an `int`.

References:

- https://wiki.sei.cmu.edu/confluence/display/c/ERR07-C.+Prefer+functions+that+support+error+checking+over+equivalent+functions+that+don%27t
- https://pubs.opengroup.org/onlinepubs/9699919799/functions/atoi.html
2022-10-20 20:30:11 +02:00
bors[bot] 53080e3e14
Merge #5938
5938: Hex Values in the editor's info feature r=heinrich5991 a=VoxelDoesCode

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

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

## Checklist

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


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-10-19 22:47:35 +00:00
heinrich5991 623a8935fb Add client_score_kind field to serverinfo
It specifies whether the scores are to be interpreted as times (string
value starting with "time") or as points (string value starting with
"points").
2022-10-20 00:43:38 +02:00
heinrich5991 d8053fba7d Unify time score handling in the server
It's now always -1 for "no time" or a nonnegative integer for the number
of seconds it took the player to finish the map.
2022-10-20 00:43:38 +02:00
heinrich5991 dcd76fd3e1 Add support for Rust code in DDNet
The glue is done using the [cxx crate](https://cxx.rs/) on the Rust
side.

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

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

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

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

---

The stuff in `src/rust-bridge` is generated using
```
cxxbridge src/engine/shared/rust_version.rs --output src/rust-bridge/engine/shared/rust_version.cpp --output src/rust-bridge/engine/shared/rust_version.h
cxxbridge src/engine/console.rs --output src/rust-bridge/cpp/console.cpp --output src/rust-bridge/cpp/console.h
```
2022-10-19 23:46:06 +02:00
Jupeyy b70fc39571 fix skin click ptr 2022-10-19 20:18:43 +02:00
Robert Müller 25e6eed0e8 Fix compilation with VS2022 with exception handling enabled
By moving the calling convention `APIENTRY`, which expands to `__stdcall`, inside the parenthesis.

```
Severity	Code	Description	Project	File	Line	Suppression State
Error	C2143	syntax error: missing ')' before '('	engine-shared	src\base\system.cpp	4242
Warning	C4229	anachronism used: modifiers on data are ignored	engine-shared	src\base\system.cpp	4242
Error	C2059	syntax error: ')'	engine-shared	src\base\system.cpp	4242
Error	C2059	syntax error: ')'	engine-shared	src\base\system.cpp	4242
Error	C3536	'exception_log_file_path_func': cannot be used before it is initialized	engine-shared	src\base\system.cpp	4246
Error	C2446	'==': no conversion from 'nullptr' to 'int'	engine-shared	src\base\system.cpp	4246
Error	C2064	term does not evaluate to a function taking 1 arguments	engine-shared	src\base\system.cpp	4249
```
2022-10-16 18:16:58 +02:00
bors[bot] 24207b741c
Merge #5947
5947: Fix client crash when server does not send gameinfo r=def- a=Robyt3

As reported by `@ChillerDragon` on Discord.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-10-15 19:20:25 +00:00
Robert Müller c78f71b2b9 Fix client crash when server does not send gameinfo 2022-10-15 19:43:26 +02:00
Robert Müller 0a6ad9cf9d Add tests for too small/large sha256_str and md5_str buffers
Rename `Expect` to `ExpectSha256` and `Expect2` to `ExpectMd5` for better readability.

Pass buffer size by template parameter to reduce duplicate source code.
2022-10-15 18:18:18 +02:00
Robert Müller a07c51b637 Use size_t for indices in digest_str 2022-10-15 18:08:41 +02:00
Robert Müller c0b5e8965e Refactor usages of sha256_str
- Pass the actual array size instead of using the constant.
- Use the string length to write sha256 string to file.
2022-10-15 18:06:45 +02:00
bors[bot] 9e4da2244a
Merge #5944
5944: Fix example name in mapbug description r=heinrich5991 a=Zwelf

Fix typo: 6c3d0e999b/src/game/mapbugs_list.h (L3)

## Checklist

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


Co-authored-by: Zwelf <zwelf@strct.cc>
2022-10-14 16:02:40 +00:00
Robert Müller 05eb1db436 Update zlib to version 1.2.13
Release notes: https://github.com/madler/zlib/releases/tag/v1.2.13
2022-10-14 14:53:24 +02:00
Zwelf 0e0e55eb43 Fix example name in mapbug description 2022-10-13 11:51:18 +02:00
heinrich5991 ea17fc753e Enable antispoof for vanilla by default
Having it disabled opens up the server for attacks.
2022-10-13 09:55:39 +02:00
bors[bot] 6c3d0e999b
Merge #5933 #5941
5933: Inline `Is(GameType)` functions and remove support for legacy 64 player info protocol r=def- a=heinrich5991

## Checklist

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


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

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

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

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-10-12 22:08:17 +00:00
bors[bot] bd3b4f2d50
Merge #5942
5942: Support unicode with ExcHndl, use upstream module offsets, handle errors r=def- a=Robyt3

Update Dr. Mingw (ExcHndl) to 0.9.8.

Use the new `ExcHndlSetLogFileNameW` function to set the exception log file name using wide characters, to support paths containing unicode.

It's not necessary to call `ExcHndlInit` explicitly after loading `exchndl.dll`, as the `DllMain` will already initialize the exception handler when the DLL is loaded. Module offsets are supported by upstream ExcHndl now, so we don't need to provide our own version that supplies the module offset to `ExcHndlInit` anymore. Upstream ExcHndl will also resolve the source code lines for addresses automatically, when the executable is build with debug information.

Handle the cases that the exception handling module cannot be loaded and that the `ExcHndlSetLogFileNameW` function cannot be found in the module.

Update `scripts/parse_drmingw.sh`:

- Parse both old and new module offsets.
- Use tabs instead of spaces consistently.
- Reset the ANSI color after printing colored messages.

Closes #5877.

Needs https://github.com/ddnet/ddnet-libs/pull/34.

Example crash logs:

- [crash_debug_old.RTP.txt](https://github.com/ddnet/ddnet/files/9768008/crash_debug_old.RTP.txt)
- [crash_debug_new.RTP.txt](https://github.com/ddnet/ddnet/files/9768011/crash_debug_new.RTP.txt)
- [crash_release_old.RTP.txt](https://github.com/ddnet/ddnet/files/9768010/crash_release_old.RTP.txt)
- [crash_release_new.RTP.txt](https://github.com/ddnet/ddnet/files/9768009/crash_release_new.RTP.txt)

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-10-12 21:44:43 +00:00
Jupeyy a804c3ca5b Get away from vector for skins
most of the time it uses the index just to get the skin, downloaded skins change the index.
Now its simply a heap object and downloaded skins load directly. Also the loading might be a bit faster bcs it had a loop lookup
Also O(1) lookup
2022-10-12 22:32:36 +02:00
Robert Müller fb317779fc Support unicode with ExcHndl, use upstream module offsets, handle errors
Update Dr. Mingw (ExcHndl) to 0.9.8.

Use the new `ExcHndlSetLogFileNameW` function to set the exception log file name using wide characters, to support paths containing unicode.

It's not necessary to call `ExcHndlInit` explicitly after loading `exchndl.dll`, as the `DllMain` will already initialize the exception handler when the DLL is loaded.
Module offsets are supported by upstream ExcHndl now, so we don't need to provide our own version that supplies the module offset to `ExcHndlInit` anymore.
Upstream ExcHndl will also resolve the source code lines for addresses automatically, when the executable is build with debug information.

Handle the cases that the exception handling module cannot be loaded and that the `ExcHndlSetLogFileNameW` function cannot be found in the module.

Update `scripts/parse_drmingw.sh`:

- Parse both old and new module offsets.
- Use tabs instead of spaces consistently.
- Reset the ANSI color after printing colored messages.
2022-10-12 21:11:35 +02:00
Robert Müller c68841a733 Ensure Windows DDE conversations are finished in open_link
Use `ShellExecuteExW` instead of `ShellExecuteW` to pass the additional flag `SEE_MASK_NOASYNC`. This should ensure that DDE (Dynamic data exchange) conversations are finished before the function returns, as it would otherwise be necessary to manually pump messages on the calling thread. DDE conversations may be initiated when shell extensions are loaded via `ShellExecute`. Failing to answer the DDE messages will block the calling UI thread and may cause a dead-lock.

The flag `SEE_MASK_FLAG_NO_UI` is used to prevent native error message popups when the link/file cannot be opened.

Additionally, the `ShellExecute` verb is changed from `"open"` to `NULL`, which will cause the default shell handler to be used instead, as the `"open"` verb may not be available for all targets. Though for most targets it will be the default verb anyway.

References:

- https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutew
- https://learn.microsoft.com/en-us/windows/win32/api/shellapi/ns-shellapi-shellexecuteinfow
- https://devblogs.microsoft.com/oldnewthing/20070430-00/?p=27063
- https://learn.microsoft.com/en-us/windows/win32/dataxchg/about-dynamic-data-exchange

Yet another attempt at solving #5744.
2022-10-12 17:18:57 +02:00
Robert Müller 4bb549b68e Initialize the Windows COM library on all threads
Use threading model `COINIT_APARTMENTTHREADED` on threads that own a window (the main client thread) and `COINIT_MULTITHREADED` on all other threads.

Add assertions to ensure that the COM library is initialized successfully and only once per thread.

References:

- https://learn.microsoft.com/en-us/windows/win32/learnwin32/initializing-the-com-library
- https://learn.microsoft.com/en-us/windows/win32/com/single-threaded-apartments
- https://learn.microsoft.com/en-us/windows/win32/com/multithreaded-apartments

Yet another attempt at solving #5744.
2022-10-12 17:18:57 +02:00
heinrich5991 a595936fb5 Remove chat timeout code fallback heuristic
KoG is now on the newest version, we no longer need this.
2022-10-12 16:12:02 +02:00
heinrich5991 150485e3b0 Remove support for legacy 64 player info protocol
It was only being used for "Leak IP" favorites and LAN servers. Since
KoG has upgraded to latest DDNet, there aren't much servers left that
don't understand the new 64 player info protocol.

Keywords: fstd, dtsf
2022-10-12 16:12:02 +02:00
VoxelDoesCode 484cb82872 Hex Values in the editor's info feature
Clang format before squash
2022-10-11 19:27:12 -04:00
heinrich5991 a97a597592 Inline Is(GameType) functions
They are used for two purposes, coloring gametypes in the serverbrowser
and enabling backward compatibility. These are independent, we shouldn't
add more stuff to the backward compatibility, hence I split them up and
inlined them.
2022-10-11 16:05:46 +02:00
bors[bot] 8de0247d00
Merge #5909
5909: Add favorite skins r=def- a=Jupeyy

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

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

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


## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-10-10 14:42:18 +00:00
def c2d1118c90 Only announce servers using Steam/Discord integration which are registered 2022-10-09 16:16:54 +02:00
bors[bot] 6d7df66448
Merge #5918
5918: Constify snap more (inspired by upstream) r=Robyt3 a=ChillerDragon

Incorporate const added in those upstream commits:
d86d576217
e6b8518b49

## Checklist

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


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-10-09 13:53:05 +00:00
bors[bot] 9a664c62e9
Merge #5924
5924: Grammer fix in snapshot doc "haven't" -> "hasn't" r=def- a=ChillerDragon

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

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

## Checklist

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


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-10-09 13:29:10 +00:00
ChillerDragon 6d0b2ee44c Grammer fixes in snapshot doc
Thanks to @def-
2022-10-09 15:24:09 +02:00
ChillerDragon 9982a7bad3 Constify snap more (inspired by upstream)
Incorporate const added in those upstream commits:
d86d576217
e6b8518b49
2022-10-09 15:12:12 +02:00
ChillerDragon b2285855f5 Remove unused SnapInvalidateItem
suggested by @Robyt3 <3
2022-10-09 15:11:58 +02:00
bors[bot] b7da20826d
Merge #5919
5919: Tweak the running visuals r=def- a=VoxelDoesCode

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

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



## Checklist

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


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-10-08 22:58:13 +00:00
VoxelDoesCode fc09212d43 Tweak the running visuals 2022-10-08 16:07:15 -04:00
bors[bot] 31b0c0a6cd
Merge #5916
5916: fix import on mastersrv r=heinrich5991 a=edg-l

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

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

## Checklist

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


Co-authored-by: Edgar Luque <git@edgarluque.com>
2022-10-07 19:35:34 +00:00
Edgar 5cfec69fad fix import on mastersrv 2022-10-07 21:32:53 +02:00
bors[bot] 665f829759
Merge #5915
5915: Don't overlap menu + debug messages (fixes #5914) r=Robyt3 a=def-

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-10-07 18:48:08 +00:00
Dennis Felsing 774f7a6f33 Don't overlap menu + debug messages (fixes #5914) 2022-10-07 19:03:20 +02:00
def 317b2df7c0 Support multiple values to search/exclude (fixes #4119) 2022-10-07 18:21:14 +02:00
Dennis Felsing c4463a3848 Only show ingame hint in Game tab
Since it looks ugly overlaid over the other tabs
2022-10-06 18:38:32 +02:00
Jupeyy fbc4c9cd6e Add favorite skins 2022-10-05 19:23:03 +02:00
bors[bot] d1463c62d1
Merge #5906
5906: Revert ingame menu close button, Add help text at bottom left when menu is open r=heinrich5991 a=def-

Even I got confused by it and accidentally hit power off button. Left side seems not popular for close either (#5888)

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

Add help text at bottom left when menu is open

![screenshot-20221003@000950](https://user-images.githubusercontent.com/2335377/193478531-58ade8e6-074f-4710-8543-66c6bddfc963.png)

> Revert "Don't show home button ingame"
>
> This reverts commit d3ff903d44.
>
> Revert "Move home button to very right so it is consistent with close button ingame (fixes #5881)"
>
> This reverts commit 9cc08cc9d3.
>
> Revert "Add close button to close ingame menu"
>
> This reverts commit cfcfb7b3f0.

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

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-10-05 11:38:17 +00:00
Robert Müller 3c5a9f7672 Print the operating system version on client/server launch 2022-10-03 13:19:31 +02:00
Robert Müller 1697231916 Handle non-default Windows directory in os_version_str
- Retrieve version information of `kernel32.dll` without providing a fixed path to the Windows directory, to handle the case that Windows is not installed in the default location `C:\Windows`. This works because `GetFileVersionInfoSizeW` and `GetFileVersionInfoW` use the search sequence defined by `LoadLibrary`, so they will find the DLL without the path explicitly being specified. The version is retrieved from `kernel32.dll` instead of `user32.dll`, as the former is more commonly used for this purpose.
- Use the unicode (wide character) functions consistently instead of the ANSI functions.
- Use the correct format specifier `%hu` for `unsigned short` (i.e. `WORD` in the Windows API).

References:

- https://learn.microsoft.com/en-us/windows/win32/api/winver/nf-winver-getfileversioninfosizew
- https://learn.microsoft.com/en-us/windows/win32/api/winver/nf-winver-getfileversioninfow
- https://stackoverflow.com/a/44672263/1708371
2022-10-03 13:17:26 +02:00
def 361622ec37 Add help text at bottom left when menu is open 2022-10-03 00:11:01 +02:00
def 9e5d830e34 Revert ingame menu close button
Even I got confused by it and accidentally hit power off button. Left
side seems not popular for close either (#5888)

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

> Revert "Don't show home button ingame"
>
> This reverts commit d3ff903d44.
>
> Revert "Move home button to very right so it is consistent with close button ingame (fixes #5881)"
>
> This reverts commit 9cc08cc9d3.
>
> Revert "Add close button to close ingame menu"
>
> This reverts commit cfcfb7b3f0.
2022-10-02 23:59:48 +02:00
def 55ff665894 Less logging when loading maps on expected path 2022-10-01 22:46:39 +02:00
Robert Müller 9d1f393c55 Fix unknown command handler for filenames containing spaces
Pass the original string to the unknown command callback instead of the parsed command, as the latter ends at the first whitespace, which breaks for unknown commands (filenames) containing spaces.

Closes #5902.
2022-10-01 20:10:59 +02:00
Robert Müller c924f6bb25 Use str_isspace in str_skip_(to_)whitespace(s), add tests
Update the `str_skip_to_whitespace(_const)` functions according to their documentation, which already stated that `\r` was also considered as whitespace.
2022-09-30 14:54:33 +02:00
Robert Müller 9472db419b Fix str_hex and add tests
- Properly null-terminate the destination buffer when the data size is zero.
- Fix early loop exit when destination buffer is too small for all data.
2022-09-30 14:54:33 +02:00
Robert Müller 3383b7dc0f Add tests for str_countchr, update documentation 2022-09-30 14:54:33 +02:00
Robert Müller b029452e99 Add tests for str_rchr, update documentation 2022-09-30 14:54:33 +02:00
Robert Müller da57768854 Add tests for str_clean_whitespaces, fix documentation 2022-09-30 14:54:33 +02:00
Robert Müller 6bc633ed35 Add tests for str_sanitize 2022-09-30 14:54:33 +02:00
Robert Müller 67fe41137e Add tests for str_sanitize_cc 2022-09-30 14:54:33 +02:00
Robert Müller 8c1735cda6 Extend tests of str_has_cc with other control characters
The character `\n` was checked redundantly. Now more obscure control characters are also checked instead.
2022-09-30 14:54:21 +02:00
Robert Müller 98848cde70 Use str_comp_filenames to sort maps and demos again
This means that digit characters in filenames will be comparsed as numbers instead of being compared as individual digits.

The use of this function was previously (d2f5714042) removed as it did not sort names case insensitively, whereas now it does.
2022-09-30 14:48:53 +02:00
Robert Müller 02a7913121 Sort filenames case insensitive with str_comp_filenames, add tests
This changes `str_comp_filenames` so it sorts filenames case insensitive while also comparing digits characters as numbers.

This makes filename sorting consistent with the behavior in Windows Explorer.
2022-09-30 14:48:52 +02:00
Robert Müller ce145cfa4e Improve str_trim_words and add tests
- Change argument and return value to `const char *`, as the string is not modified by this function.
- Use our own `str_isspace` instead of standard library `isspace`.
- Always trim leading whitespace to correctly handle inputs with leading whitespace.
2022-09-30 12:29:32 +02:00
Robert Müller e98728f8f0 Extend str_isspace to consider \r as whitespace, add documentation
This allows the function to be reused in more places where `\r` is also considered as whitespace.
2022-09-30 12:13:23 +02:00
Robert Müller 3176032a7b Fix spelling seperate -> separate 2022-09-29 18:54:40 +02:00
bors[bot] 5b4c0fb3a7
Merge #5887
5887: Don't show home button ingame r=heinrich5991 a=def-

Broken in #5882
Old:
![Screenshot 2022-09-27 at 13 01 39](https://user-images.githubusercontent.com/2335377/192509141-e95c7df4-707b-4364-af0b-9150ec63f470.png)
New:
![Screenshot 2022-09-27 at 13 02 59](https://user-images.githubusercontent.com/2335377/192509182-91eacebd-56f5-4604-917f-8b747d02949f.png)

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-29 08:30:56 +00:00
Robert Müller f97067738e Use CreateFolder instead of fs_makedir + GetPath
As the former method is a wrapper for the latter two with additional log messages on errors.
2022-09-27 16:33:24 +02:00
Robert Müller 5482571c69 Add assertions for invalid storage arguments 2022-09-27 16:33:24 +02:00
Robert Müller a3f5d1b924 Use TYPE_SAVE instead of 0 2022-09-27 16:33:24 +02:00
Robert Müller 4fd983dc03 Add missing error handling for RenameBinaryFile 2022-09-27 16:33:24 +02:00
Robert Müller 481fb33efa Show log message when a storage path cannot be added 2022-09-27 15:25:04 +02:00
Robert Müller 2db41124b5 Use for-each loop for array apDirs 2022-09-27 15:25:04 +02:00
Robert Müller e21f9c609b Remove unnecessary virtual of GetPath method 2022-09-27 15:25:04 +02:00
Robert Müller 6fbcfb6fd9 Move variable declarations 2022-09-27 15:25:04 +02:00
Robert Müller c5d96eb0f6 Rename variable p to pStorage 2022-09-27 15:25:04 +02:00
bors[bot] a32b6c6055
Merge #5889
5889: Fix windows build r=def- a=fokkonaut

Required for std::min

## Checklist

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


Co-authored-by: fokkonaut <35420825+fokkonaut@users.noreply.github.com>
2022-09-27 11:52:17 +00:00
fokkonaut a4383602c0 Fix windows build 2022-09-27 13:45:58 +02:00
fokkonaut 900417b84d Send laser objects as DDNetLaser with type (fixes #5885) 2022-09-27 13:25:20 +02:00
Dennis Felsing d3ff903d44 Don't show home button ingame
Broken in #5882
2022-09-27 13:03:16 +02:00
def 9cc08cc9d3 Move home button to very right so it is consistent with close button ingame (fixes #5881) 2022-09-26 19:02:41 +02:00
bors[bot] 0f6594f10b
Merge #5875
5875: Move `src/game/bezier.cpp/h` to `src/base/bezier.cpp/h` r=def- a=Robyt3

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

Closes #3334.

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

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

## Checklist

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


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

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

## Checklist

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


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

Closes #3334.
2022-09-24 20:53:59 +02:00
bors[bot] 3d1583d9a5
Merge #5871
5871: Fix skin prefix button container being used for multiple buttons r=heinrich5991 a=Robyt3

This meant that only the first skin prefix button could be activated.

Regression from #5633.

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

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

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-09-24 17:49:40 +00:00
Robert Müller 9625a4e521 Fix skin prefix button container being used for multiple buttons
This meant that only the first skin prefix button could be activated.

Regression from #5633.
2022-09-24 17:43:53 +02:00
Robert Müller 61f763ff2c Use GetCurrentDirectoryW instead of _wgetcwd
For more consistent usage of the Windows API. `_wgetcwd` seems to be a wrapper around `GetCurrentDirectoryW` anyway, at least in the [Wine API](https://source.winehq.org/ident?_i=_wgetcwd).

Pass the correct size of the wide char buffer instead of passing the size of the output parameter buffer.

Remove a nullptr check. The argument should never be null and we don't check for null arguments anywhere else.
2022-09-24 17:09:31 +02:00
Robert Müller 2ba67c2306 Use SetCurrentDirectoryW instead of _wchdir
For more consistent usage of the Windows API. `_wchdir` seems to be a wrapper around `SetCurrentDirectoryW` anyway, at least in the [Wine API](https://source.winehq.org/ident?_i=_wchdir).
2022-09-24 17:09:31 +02:00
Robert Müller 8fb79242bf Use CreateDirectoryW + GetLastError instead of _wmkdir + errno
For more consistent usage of the Windows API. `_wmkdir` seems to be a wrapper around `CreateDirectoryW` anyway, at least in the [Wine API](https://source.winehq.org/ident?_i=_wmkdir).
2022-09-24 17:09:31 +02:00
bors[bot] c61e5586ff
Merge #5867
5867: Use ddnet.org on manpages r=heinrich5991 a=def-

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

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

## Checklist

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


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

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

This fixes issue #5863.


## Checklist

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


Co-authored-by: Lukas Kitsche <lukaskitsche@posteo.de>
2022-09-23 23:24:58 +00:00
Dennis Felsing 17960e52b5 Add luk51 in credits 2022-09-24 01:05:00 +02:00
Lukas Kitsche 599eb18245 fix linting, will be squashed later 2022-09-24 00:56:43 +02:00
Lukas Kitsche 43aae1bd82 move refresh logic of browsertab into helper function 2022-09-23 19:59:18 +02:00
Robert Müller 5825d5eb7f Fix map file argument not opening editor with absolute paths 2022-09-23 19:54:12 +02:00
Dennis Felsing e290a407d6 Fix other occurences of DDNet.tw 2022-09-23 10:59:36 +02:00
Lukas Kitsche a5a191eb32 Merge branch 'master' of https://github.com/ddnet/ddnet into refresh-serverbrowser-when-disconnecting 2022-09-22 20:56:47 +02:00
Lukas Kitsche e5f3943f6e refresh serverbrowser when disconnecting / abort 2022-09-22 20:55:19 +02:00
Robert Müller 72194d28e7 Replace magic numbers with enum EShowEnvelope 2022-09-22 18:02:07 +02:00
Dennis Felsing cfcfb7b3f0 Add close button to close ingame menu
Suggested by cheeser0613 since new players don't know that Escape is the
only way to close it again
2022-09-22 09:49:54 +02:00
heinrich5991 884cf75cb8 Stop server if started with old curl and incompatible sv_register
This prevents accidentally falling victim to the bug #5858.
2022-09-22 00:09:02 +02:00
heinrich5991 4f2f3f4bba Only start registering once the server is fully started
This works around, i.e. fixes #5858 for curl versions < 7.77.0, as long
as the servers are only registered via IPv4 **OR** IPv6.

The bug that's being worked around is this:
84d2839740.

The bug makes curl reuse IPv6 connections when it is being requested to
connect via IPv4, making the registering fail. This commit works around
that by letting the server only register after having completely read
the config, so any `sv_register ipv4` should already be in effect.
2022-09-21 21:34:33 +02:00
bors[bot] bc8ec8c1d7
Merge #5856
5856: Fix receiving IPv6 packets after IPv4 ones on Linux r=def- a=heinrich5991

Previously, the socket addresses were truncated as the `msg_namelen` field is both input **and** output: After receiving an IPv4 packet, the socket address field would be too short for an IPv6 address.

## Checklist

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-09-19 23:30:52 +00:00
heinrich5991 47d06bd0ca Fix receiving IPv6 packets after IPv4 ones on Linux
Previously, the socket addresses were truncated as the `msg_namelen`
field is both input **and** output: After receiving an IPv4 packet, the
socket address field would be too short for an IPv6 address.
2022-09-20 01:06:56 +02:00
heinrich5991 28359fb23d Also print the CURLcode on failed requests
This should help debugging the empty error messages we sometimes get on
servers.
2022-09-19 15:06:27 +02:00
bors[bot] 069e5a7c9d
Merge #5848 #5851
5848: Remove cl_http_map_download r=heinrich5991 a=def-

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

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


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

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

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

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-09-18 11:40:11 +00:00
def fa80b157aa Respect reserved slots in old serverinfo
Noticed in https://github.com/ddnet/ddnet/pull/5850 that reserved slots
were not respected
2022-09-18 13:33:33 +02:00
def 3ed22cbe4e Send serverinfo when client joins
for GER3
2022-09-18 13:10:32 +02:00
def 9f4e883906 Remove cl_http_map_download 2022-09-18 01:03:15 +02:00
bors[bot] e61b850364
Merge #5843
5843: Laser menu tweaks; Changed some default colors r=def- a=VoxelDoesCode

fixes #5841 

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

## Checklist

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


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

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

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

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

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

## Checklist

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


Co-authored-by: Corantin H <archi0670@gmail.com>
2022-09-16 01:17:56 +00:00
bors[bot] e5fc394494
Merge #5835
5835: Update translations via script, new German translations r=heinrich5991 a=def-

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-16 00:58:44 +00:00
Dennis Felsing ef174a58a8 Fix TSA warnings in Clang 15 (fixes #5548)
src/engine/client/serverbrowser_http.cpp:147:1: warning: mutex 'ls.m_Lock' is still held at the end of function [-Wthread-safety-analysis]
}
^
2022-09-15 23:31:09 +02:00
Dennis Felsing 31cf68c65d Fix mismatched bound warning in map_replace_area and map_create_pixelart
src/tools/map_replace_area.cpp:644:38: warning: argument 'aLine' of type 'const float[2]' with mismatched bound [-Warray-parameter]
bool GetLineIntersection(const float aLine[2], const float Point)
                                     ^
src/tools/map_replace_area.cpp:55:37: note: previously declared as 'const float[]' here
bool GetLineIntersection(const float[], float);
                                    ^
2022-09-15 23:23:04 +02:00
Corantin H e52e443988 Editor: used max int value for goto min and max coordinates 2022-09-15 20:54:20 +02:00
Dennis Felsing 9a2835c9dd Update translations via script, new German translations
New English text for marking the beginning/end of a cut
2022-09-15 14:38:08 +02:00
bors[bot] 55703c971c
Merge #5829
5829: Add HTTPS map download URL field for game servers r=def- a=heinrich5991

This allows every game server to provide its own HTTPS server for map
downloads. Since the ingame protocol for downloading map data is very
inefficient, this is desirable. Previously, only servers hosted by DDNet
could benefit from this.

Security concerns:
- Attackers can find out whether a given HTTPS GET request matches a
  known answer.

  This isn't deemed to be problematic as no cookies for authentication
  are sent and only the whole response can be matched.

- Sending requests to honeypot URLs to get people in legal trouble.

  This seems to be already possible with HTML image embeds, so it can't
  be that bad™.

- Downloading huge files, filling up a player's disk. The players might
  cancel when seeing huge files.

  There's a generous limit of 1 GiB per map file.

- Downloading huge files transparently compressed with gzip. See above.

Fixes #5812.

## Checklist

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-09-15 08:54:46 +00:00
bors[bot] ed2b0f40b9
Merge #5639
5639: Add different laser colors for different types r=def- a=VoxelDoesCode

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

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

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

Huge thanks to Fokkonaut for finalizing this concept!

## Checklist

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


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

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

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

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

## Checklist

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


Co-authored-by: “sctt” <“sctt@sctt.it”>
2022-09-15 06:54:50 +00:00
“sctt” 73d883d16b Editor image reload: renamed reload into readd 2022-09-15 08:46:31 +02:00
heinrich5991 716e8cd7f4 Add HTTPS map download URL field for game servers
This allows every game server to provide its own HTTPS server for map
downloads. Since the ingame protocol for downloading map data is very
inefficient, this is desirable. Previously, only servers hosted by DDNet
could benefit from this.

Security concerns:
- Attackers can find out whether a given HTTPS GET request matches a
  known answer.

  This isn't deemed to be problematic as no cookies for authentication
  are sent and only the whole response can be matched.

- Sending requests to honeypot URLs to get people in legal trouble.

  This seems to be already possible with HTML image embeds, so it can't
  be that bad™.

- Downloading huge files, filling up a player's disk. The players might
  cancel when seeing huge files.

  There's a generous limit of 1 GiB per map file.

- Downloading huge files transparently compressed with gzip. See above.

Fixes #5812.
2022-09-15 02:08:35 +02:00
heinrich5991 0bf941e6c9 Add MaxResponseSize to limit HTTP response sizes 2022-09-15 02:08:35 +02:00
heinrich5991 cb2614ff5c Treat manual aborts the same way as errors for map downloads 2022-09-15 02:08:34 +02:00
heinrich5991 9f1dd0d3c4 Disallow HTTP (without S) requests by default
Add a non-saved config variable `http_allow_insecure` to re-enable HTTP
support; this is mostly useful for testing stuff.

Disallowing HTTP by default allows fewer insecure data to be sent and
received by the DDNet client.
2022-09-15 01:29:13 +02:00
fokkonaut 5deeb299fa Add DDNetLaser to have more info about a laser shot 2022-09-15 01:01:32 +02:00
VoxelDoesCode 03b90f4f3d Added new cl colors and tweaked the settings menu
Merging of DoLaserPreview and static int fix

Replace if else statement with switch function

Adjusted RenderDropDown header to match

static int cbuttoncontainer fix, potential bugs
2022-09-15 01:01:04 +02:00
heinrich5991 9b4371f18f Change log format
Remove square brackets to reduce the amount of space used.

Add log level indicator. The position between timestamp and system was
chosen because it is at a fixed position (unlike after the system) but
the log still remains naively sortable (which wouldn't happen if we were
to place it in front of the timestamp.

Before:
```
[2022-04-29 15:25:37][engine]: running on unix-linux-amd64
[2022-04-29 15:25:37][engine]: arch is little endian
[2022-04-29 15:25:37][storage]: added path '$USERDIR' ('/path/to/home/.teeworlds')
[2022-04-29 15:25:37][storage]: added path '$DATADIR' ('data')
[2022-04-29 15:25:37][storage]: added path '$CURRENTDIR' ('/path/to/ddnet')
[2022-04-29 15:25:37][host_lookup]: host='localhost' port=0 1
[2022-04-29 15:25:37][host_lookup]: host='localhost' port=0 2
[2022-04-29 15:25:37][console]: executing 'autoexec_server.cfg'
```

After:
```
2022-04-29 15:25:37 I engine: running on unix-linux-amd64
2022-04-29 15:25:37 I engine: arch is little endian
2022-04-29 15:25:37 I storage: added path '$USERDIR' ('/path/to/home/.teeworlds')
2022-04-29 15:25:37 I storage: added path '$DATADIR' ('data')
2022-04-29 15:25:37 I storage: added path '$CURRENTDIR' ('/path/to/ddnet')
2022-04-29 15:25:37 I host_lookup: host='localhost' port=0 1
2022-04-29 15:25:37 I host_lookup: host='localhost' port=0 2
2022-04-29 15:25:37 I console: executing 'autoexec_server.cfg'
```
2022-09-14 19:37:55 +02:00
bors[bot] b48ac7d5f4
Merge #5833
5833: Improve message on failed load r=heinrich5991 a=def-


![Screenshot 2022-09-13 at 20 31 20](https://user-images.githubusercontent.com/2335377/189982324-91639abd-6f5b-4248-85f9-5e03443e6182.png)

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-09-13 21:39:39 +00:00
Dennis Felsing 51c0bb1f43 Improve message on failed load 2022-09-13 20:30:30 +02:00
Dennis Felsing b26dd29a23 Use bindaddr for curl too (fixes #5831) 2022-09-13 19:45:17 +02:00
Dennis Felsing a67e30647e Add sv_sql_bindaddr (fixes #5830) 2022-09-13 17:09:53 +02:00
bors[bot] cef096ecd7
Merge #5820
5820: Editor: Added "Order" button in quads popup r=heinrich5991 a=sctt

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

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

## Checklist

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


Co-authored-by: “sctt” <“sctt@sctt.it”>
2022-09-11 22:44:13 +00:00
bors[bot] 766d9f66cc
Merge #5822
5822: Move skin info after the settings (settings can cause reload -> skin … r=heinrich5991 a=Jupeyy

…is invalid)
Also added an assert now, we dont want to render invalid textures ever since its always a logic bug

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-09-11 22:29:22 +00:00
heinrich5991 94446f65bd Ignore server info with control characters
This simply treats server info as invalid if it contains control
characters in any string.

Fixes #5826.
2022-09-11 23:42:05 +02:00
heinrich5991 acb0ce8a1e Unify string test naming 2022-09-11 23:40:32 +02:00
heinrich5991 911835f940 Add str_has_cc to check for control characters in strings 2022-09-11 23:39:16 +02:00
“sctt” 79fa29d8b8 editor: added order button in quads popup 2022-09-10 18:04:38 +02:00
Jupeyy f59f79e02f Move skin info after the settings (settings can cause reload -> skin is invalid) 2022-09-10 15:03:59 +02:00
“sctt” 39223dfd8a editor: added reload button for image and sound popups 2022-09-10 12:23:00 +02:00
Robert Müller 19a0544364 Fix editor layer image selection not working 2022-09-08 15:30:22 +02:00
Robert Müller 9a76ebdcb6 Save and restore FPU control word when calling ShellExecute
ShellExecute may load additional DLLs in the current context, which might change the FPU control word.

Another potential fix for #5744.

Sources:
- https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6457572
- https://web.archive.org/web/20070730055602/http://tolstoy.newcastle.edu.au/R/devel/06/02/4262.html
- http://www.delphigroups.info/2/d3/420953-2.html (only available in Google Cache for me)
- f4d80957e8/src/windows/native/sun/windows/awt_Desktop.cpp (L46-L49)
2022-09-05 22:18:39 +02:00
Robert Müller ff471b4d17 Minor refactoring: homogenise code structure of selection popups 2022-09-04 23:00:51 +02:00
Robert Müller 833f690c59 Refactor editor sound selection popup using CScrollRegion
Decrease popup size by remove the unused empty space designated for "previewing" sounds.
2022-09-04 22:59:33 +02:00
Robert Müller cef984294c Fix minimum/maximum values of editor properties
The Order-property maximum value was too large, so it was temporarily (only visually) possible to go beyond the maximum.

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

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



## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-09-03 21:34:32 +00:00
def c95a605fd7 Version 16.3.2 2022-09-03 23:15:55 +02:00
heinrich5991 5028423a0a Fix close messages not being shown when connecting
Previously, close messages were entirely ignored during the connection
process, this meant that ban messages weren't shown to players. Instead,
they'd see the standard "no answer from server yet" message.

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

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

## Checklist

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


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

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

## Checklist

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


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

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

By also handling the mouse scroll wheel as hotkeys, this fixes the scroll keys activating scroll regions while the controls binder is active.
2022-08-31 21:43:57 +02:00
bors[bot] 59db32e9c2
Merge #5763
5763: Fix png error handling by setting jmpbuf r=def- a=Jupeyy

else libpng will kill the thread on an error bcs it's a fatal error.

broken skin can be found in discord bugs channel weeb_okayu

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-08-31 08:57:02 +00:00
Robert Müller fe38caa7b4 Handle path/link arguments using the console argument parser
Add `IConsole::SetUnknownCommandCallback` to set a callback for unknown commands. The callback is used to handle connect links, .demo and .map files when parsing command line arguments.

This will allow paths/links to be passed at any argument position instead of only the first one.

And this fixes the command `play xyz.demo` not working due to `play ` being considered part of the path.
2022-08-30 22:17:04 +02:00
Robert Müller 13961db6a8 Allow demo/map arguments to be relative paths, allow using play
When passing .demo or .map paths as command line arguments, first check if the path can be found in the storage and then try resolving an absolute path.

Also delay execution of the `play` command until the client is ready so the command can be used from the command line. Although it doesn't work if there is only one argument, as this interferes with the .demo file handling.
2022-08-30 21:51:34 +02:00
def 91bc21c489 No need for lengthy semaphore names on macOS, pointer address is enough
Also check on init failure and at least log, same as on UNIX
2022-08-30 10:09:35 +02:00
def c479230d71 Use new ddnet.org domain 2022-08-30 10:09:06 +02:00
bors[bot] 3478146ea5
Merge #5784
5784: Suppress more events while skipping in demos, reset specifics components before long skips in demo r=def- a=Robyt3

Closes #5779.

## Checklist

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


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

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

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

## Checklist

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


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

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

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

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

## Checklist

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


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

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

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

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


## Checklist

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


Co-authored-by: VoxelDoesCode <bluheadcat@gmail.com>
2022-08-27 12:24:36 +00:00
Robert Müller a24ac108ce Always suppress events and update envelopes when skipping 2022-08-27 13:23:06 +02:00
Robert Müller bf16875a6f Add period/comma hotkeys to skip one tick forward/backward 2022-08-27 12:49:32 +02:00
Robert Müller 76cefa1c85 Faster and more precise demo skipping
- Approximate index of wanted keyframe to decrease linear search time.
- Only apply the magic `-5` to the Keyframe calculation, to make seeking with the mouse more accurate.
- After the method returns, the specified tick will be the _next_ tick being played instead of being the current tick.
2022-08-27 12:49:32 +02:00
Robert Müller 334bdad922 Fix demo intratick times not being updated when paused 2022-08-27 12:49:32 +02:00
Robert Müller 3ec4075ddb Move variable declarations closer to usages 2022-08-27 12:49:32 +02:00
Robert Müller d6628fe028 Rename variable LastSpeedChange to s_LastSpeedChange 2022-08-27 12:49:32 +02:00
Robert Müller 091f3b3e34 Rename variable PrevAmount to s_PrevAmount 2022-08-27 12:49:32 +02:00
Robert Müller 6f101f54af Rename method CDemoPlayer::time to Time 2022-08-27 12:49:32 +02:00
Robert Müller 64f326d626 Remove unused CDemoPlayer::NextFrame method 2022-08-27 11:39:03 +02:00
VoxelDoesCode 20e70b3172 Demo Tooltips, in courtesy of Chairn 2022-08-26 02:07:58 -04:00
VoxelDoesCode 0392f6655d Added an icon for Parent Directories 2022-08-25 18:44:27 -04:00
Robert Müller d369a5b693 Write messages to all active demo recorders 2022-08-25 17:57:04 +02:00
Robert Müller 63d0c8e170 Improve error message when map for demo cannot be found
Previously the playback did not start and no error messages was shown, when the map file cannot be found and no map data is embedded in the demo file.

Minor refactoring: Replace instances of `return pError` with semantically identical `return nullptr` to improve readability.
2022-08-25 17:57:04 +02:00
Robert Müller 3f1b702b90 Fix demos recorded without mapdata not being loadable
As the demo player skips the map data when loading the demo, the size of the map specified in the demo must be zero when no map data is embedded.
2022-08-25 17:57:04 +02:00
Robert Müller 5c2f162da2 Remove unused DemoRecorder_IsRecording method 2022-08-25 17:57:03 +02:00
Robert Müller 8d3351f046 Also record tunings for player demos 2022-08-25 17:57:03 +02:00
Robert Müller c7ddb0ac47 Pad player demo filename with zeros instead of spaces 2022-08-25 17:57:03 +02:00
Dennis Felsing 2ccca3a50a Fix memset compilation
/home/deen/isos/ddnet/ddnet-source/src/tools/map_create_pixelart.cpp: In function ‘int InsertPixelArtQuads(CQuad*, int&, const CImageInfo&, const int*, const int*, const bool*)’:
/home/deen/isos/ddnet/ddnet-source/src/tools/map_create_pixelart.cpp:110:9: error: ‘memset’ was not declared in this scope
  110 |         memset(aVisitedPixels, 0, sizeof(bool) * Img.m_Height * Img.m_Width);
      |         ^~~~~~
/home/deen/isos/ddnet/ddnet-source/src/tools/map_create_pixelart.cpp:8:1: note: ‘memset’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
    7 | #include <game/mapitems.h>
  +++ |+#include <cstring>
    8 |
2022-08-25 14:07:49 +02:00
VoxelDoesCode 216d4421ce Clang Format 2022-08-24 16:17:04 -04:00
“sctt” ff2c513ddc removed debug 2022-08-23 19:42:29 +02:00
“sctt” f066cca33a CICD fixes 2 for map_create_pixelart 2022-08-23 19:40:13 +02:00
“sctt” cb9680eaff Merge branch 'master' of https://github.com/sctt/ddnet 2022-08-23 19:17:19 +02:00
“sctt” 4013c0f68a CICD fixes for map_create_pixelart 2022-08-23 19:14:42 +02:00
sctt 9101a4f5ce
Merge branch 'ddnet:master' into master 2022-08-23 18:13:50 +02:00
“sctt” 0f14d76a69 Added map_create_pixelart tool 2022-08-23 18:12:15 +02:00
Robert Müller 638559b648 Refactor scrollable controls settings using CScrollRegion
Replace hacky usage of `UiDoListboxStart` with `CScrollRegion`.
2022-08-23 10:08:46 +02:00
Robert Müller 7c496dd5b4 Make ingame server info MOTD scrollable using CScrollRegion 2022-08-23 10:08:46 +02:00
Robert Müller 713b6584f0 Add str_countchr to count occurrences of a char in a string 2022-08-23 10:08:46 +02:00
Robert Müller 359beffff3 Refactor editor sound list using CScrollRegion 2022-08-23 10:08:46 +02:00
Robert Müller 5dc6c90a50 Refactor editor image list using CScrollRegion, split method 2022-08-23 10:08:45 +02:00
Robert Müller 9f01c6fe66 Refactor editor layer list using CScrollRegion 2022-08-23 10:08:45 +02:00
Robert Müller ad8f49fe79 Remove unnecessary indentation/scope 2022-08-23 10:08:42 +02:00
Robert Müller 4cdd36aed3 Remove redundant m_GuiActive checks
This condition is already checked before calling the methods.
2022-08-23 10:01:29 +02:00
Robert Müller 7b80ad1982 Refactor editor layer image selection popup using CScrollRegion
The width of the popup and list are also slightly increased to better support images with longer names.
2022-08-23 10:01:28 +02:00
Robert Müller f451a33361 Port CScrollRegion from upstream with some minor refactorings
Co-authored-by: LordSk <lordskelethom@gmail.com>
2022-08-23 10:01:28 +02:00
Robert Müller 9cbca642ea Rename CUIElement::Get to Rect
This makes it clear that the method is a getter for the rects.
2022-08-23 10:01:27 +02:00
Robert Müller 991b045a11 Remove unused CUIElement::m_ElementTime 2022-08-23 10:01:26 +02:00
bors[bot] 49bed71932
Merge #5696
5696: Add option for parallax-aware zoom r=def- a=Fireball-Teeworlds

## How this works

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

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

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

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

## Editor Screenshots

### Para Zoom controls

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

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

### Zoom Button

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

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

## In-Game Screenshots

Video: https://youtu.be/W7eXQN0gRFI

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

### Springlobe 3

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

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

### Beyond Dreams

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

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

## Checklist

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


Co-authored-by: Fireball <fireball.teeworlds@gmail.com>
2022-08-22 21:15:41 +00:00
Jupeyy dfaf3591c2 Fix png error handling by setting jmpbuf, else libpng will kill the thread 2022-08-22 17:47:28 +02:00
Dennis Felsing 83d26ff48c Version 16.3.1 2022-08-22 15:42:34 +02:00
bors[bot] 7765171559
Merge #5733
5733: Added map_find_env tool r=def- a=sctt


a simple tool which given an envelope id returns a list of all quads associated with that envelope, screenshot attached below.
![Screenshot from 2022-08-13 18-48-41](https://user-images.githubusercontent.com/3328841/184503762-521ff3c7-2c0f-47df-a0e6-e4b30f2826ec.png)

p.s.
deen told me its not a problem to commit these kind of map tools to ddnet

Co-authored-by: sctt <scottistefano91@gmail.com>
2022-08-22 09:07:40 +00:00
bors[bot] d2523d9053
Merge #5761
5761: Replace `POPUP_PURE` with generic `PopupMessage` r=def- a=Robyt3

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

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-21 15:02:55 +00:00
def 13cc5d08d9 Version 16.3 2022-08-21 17:00:23 +02:00
Robert Müller d3c9311156 Replace POPUP_PURE with generic PopupMessage 2022-08-21 13:25:06 +02:00
bors[bot] f355a3467f
Merge #5760
5760: Fix variable shadow warnings with MinGW r=def- a=Robyt3

```
ddnet/src/base/system.cpp: In function 'int byteval(const char*, unsigned char*)':
ddnet/src/base/system.cpp:3044:32: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3044 | static int byteval(const char *byte, unsigned char *dst)
      |                    ~~~~~~~~~~~~^~~~
In file included from msys64/mingw64/include/objbase.h:8,
                 from ddnet/src/base/system.cpp:68:
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
ddnet/src/base/system.cpp: In function 'unsigned char str_byte_next(const char**)':
ddnet/src/base/system.cpp:3557:23: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3557 |         unsigned char byte = **ptr;
      |                       ^~~~
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
ddnet/src/base/system.cpp: In function 'int str_utf8_decode(const char**)':
ddnet/src/base/system.cpp:3577:31: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3577 |                 unsigned char byte = str_byte_next(ptr);
      |                               ^~~~
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
```

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

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-21 09:08:57 +00:00
Robert Müller 64042d29df Fix variable shadow warnings with MinGW
```
ddnet/src/base/system.cpp: In function 'int byteval(const char*, unsigned char*)':
ddnet/src/base/system.cpp:3044:32: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3044 | static int byteval(const char *byte, unsigned char *dst)
      |                    ~~~~~~~~~~~~^~~~
In file included from msys64/mingw64/include/objbase.h:8,
                 from ddnet/src/base/system.cpp:68:
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
ddnet/src/base/system.cpp: In function 'unsigned char str_byte_next(const char**)':
ddnet/src/base/system.cpp:3557:23: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3557 |         unsigned char byte = **ptr;
      |                       ^~~~
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
ddnet/src/base/system.cpp: In function 'int str_utf8_decode(const char**)':
ddnet/src/base/system.cpp:3577:31: warning: declaration of 'byte' shadows a global declaration [-Wshadow]
 3577 |                 unsigned char byte = str_byte_next(ptr);
      |                               ^~~~
msys64/mingw64/include/rpcndr.h:63:25: note: shadowed declaration is here
   63 |   typedef unsigned char byte;
      |                         ^~~~
```
2022-08-21 10:44:08 +02:00
Robert Müller 37cadc5c09 Add CWindowsComLifecycle RAII wrapper for Windows COM library 2022-08-21 10:34:37 +02:00
bors[bot] 4fc6a5b924
Merge #5754 #5757
5754: Auto refresh skins when changing related settings r=def- a=Jupeyy

motivation: downloaded skins aren't resettet, e.g. if they failed before. config change -> resets everything

## Checklist

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


5757: Make file link absolute, add `fs_is_relative_path` r=def- a=Robyt3

This fixes links not opening for relative paths, as links like `file://temp/skins` cannot be resolved by the shell.

Closes #5746.

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-20 20:34:45 +00:00
Corantin H d81f15181e Use int for coordinates 2022-08-20 22:30:32 +02:00
Robert Müller 21fe945ca7 Make file link absolute, add fs_is_relative_path
This fixes links not opening for relative paths, as links like `file://temp/skins` cannot be resolved by the shell.
2022-08-20 20:56:46 +02:00
Corantin H ae8b9914aa Editor: added a goto button 2022-08-20 20:47:46 +02:00
Robert Müller ec55212c52 Fix symlink handling of fs_listdir
On Windows, the check was incorrectly using logical or instead of bitwise or. Checking for the flag `FILE_ATTRIBUTE_REPARSE_POINT` is not necessary, as the `FILE_ATTRIBUTE_DIRECTORY` will correctly be set when the target of a symbolic link is a directory. This otherwise causes symbolic links to files to be incorrectly handled as directories.

On Linux, the minor performance optimization of using `entry->d_type` is reverted and `fs_is_dir` is used instead. This internally uses `stat`, which correctly returns the attributes for the symbolic link targets.
2022-08-20 15:57:43 +02:00
Jupeyy 6e5c5cba8f Filter vanilla only skins at loading already 2022-08-20 14:39:25 +02:00
Jupeyy d1b8d53619 Auto refresh skins when changing related settings 2022-08-20 13:42:28 +02:00
bors[bot] 6a5d99daf1
Merge #5749
5749: Editor: added the possibility to duplicate layers r=def- a=archimede67

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

Suggested by Pulsar a few years ago, I finally had the motivation to do it. We can now duplicate any non-special layer (tiles, quads and sounds) thanks to a button just above the delete button.

![image](https://user-images.githubusercontent.com/13364635/185260070-cd5b4c8f-5827-457c-b505-176751003dbc.png)

For each duplicated layers, all the necessary properties are duplicated, for example name, color, flags, etc.
For a tile layer, all the placed tiles are copied. Same goes for a sound layer, all sources are copied. And for the quads layer, all the quads are duplicated.

## Checklist

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


Co-authored-by: Corantin H <archi0670@gmail.com>
2022-08-19 13:25:44 +00:00
Corantin H 29a3baaa75 Editor: added the possibility to duplicate layers 2022-08-19 13:20:50 +02:00
VoxelDoesCode fa98ad1e36 Remove the need for file_icons.png 2022-08-19 01:05:02 -04:00
bors[bot] ecc5ca5602
Merge #5750
5750: List symlinks in list_dir r=def- a=Patiga

This functionality was lost in 082e26d5b
In my case I have a lot of symlinks in the maps folder (Downloads, ddnet-maps, map_archive)

On windows, I have neither tested this behavior before nor after this patch. Could someone maybe try it out there?

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

## Checklist

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


Co-authored-by: Patiga <dev@patiga.eu>
2022-08-18 12:08:31 +00:00
Patiga b580b83d31 List symlinks in list_dir
This functionality was lost in 082e26d5b
In my case I have a lot of symlinks in the maps folder (Downloads,
ddnet-maps, map_archive)
2022-08-18 12:51:22 +02:00
VoxelDoesCode 1807bb7b1e Update icons and clean up 2022-08-17 20:28:24 -04:00
VoxelDoesCode 470ee65db9 DoButton_Sprite > DoButtonFontIcon 2022-08-17 04:28:09 -04:00
VoxelDoesCode a1617dcf56 Replace all images with unicode chars 2022-08-17 03:58:13 -04:00
Robert Müller f0b0d4c163 Improve "couldn't open..." error messages by listing target 2022-08-16 17:35:47 +02:00
Robert Müller f0c74f72ba Smooth console completion scrolling 2022-08-15 23:20:37 +02:00
Alexander Akulich 670f284194 Use GAME_NAME definition for engine initialization 2022-08-15 16:07:27 +03:00
Alexander Akulich 8ac84948c5 Extract server main() to its own file
Also extract CServerLogger to own files.
2022-08-15 16:07:27 +03:00
Alexander Akulich ec16daa4b4 CCharacter: Drop non-const IsAlive() getter 2022-08-15 15:05:59 +03:00
Alexander Akulich 301355d588 engine/server.h: Remove outdated comment 2022-08-15 15:05:59 +03:00
bors[bot] 4826eb1df0
Merge #5730
5730: Move `CUIRect` to separate file, move `CRenderTools::DrawUIRect/4` to `CUIRect::Draw/4`, merge `CUIEx` into `CUI` r=def- a=Robyt3

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

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

## Checklist

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


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

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

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-14 11:24:15 +00:00
Robert Müller 813522f1fc Add/use temporary variables to improve readability 2022-08-14 13:12:21 +02:00
Robert Müller 45a20ff277 Only load and unload normal tile layer data if necessary 2022-08-14 13:12:21 +02:00
sctt eab5fb10e3
Fixed index typo map_find_env 2022-08-13 21:54:56 +02:00
sctt 77fa0acbb1
Fixed index typo map_find_env 2022-08-13 21:49:53 +02:00
sctt 71622eabb4
Fix map_find_env style 2022-08-13 19:29:16 +02:00
sctt e21ade4294
Rename map_find_env to map_find_env.cpp 2022-08-13 19:10:03 +02:00
sctt c8b4b3f631
Added map_find_env tool 2022-08-13 18:53:56 +02:00
c0d3d3v 780c4db7dd
do an int check for m_FreezeEnd instad of float, becuase it is int 2022-08-13 15:43:38 +02:00
c0d3d3v 0aa46b54ea
small fix for #5729 2022-08-12 22:38:13 +02:00
Robert Müller 51fb3e9a22 Merge CUIEx class into CUI
There is no need to separate the UI in two classes anymore, as the dependency on `CRenderTools` has been removed.
2022-08-12 19:59:19 +02:00
Robert Müller 95550fd6a9 Move CRenderTools::DrawUIRect/4 to CUIRect::Draw/4
Use `ColorRGBA` instead of `vec4` for `Draw4`.
2022-08-12 19:37:08 +02:00
Robert Müller 7b390808bc Replace ui.h include with ui_rect.h, organize other includes 2022-08-12 19:37:08 +02:00
Robert Müller 680dd052d7 Add documentation for CUIRect::Inside 2022-08-12 19:37:07 +02:00
Robert Müller 49164dfcdf Improve argument names of CUIRect::Inside 2022-08-12 19:37:07 +02:00
Robert Müller b50309dd5c Move CUIRect class into its own files 2022-08-12 19:37:07 +02:00
Robert Müller 4005b82743 Move CRenderTools::DrawUIElRect to CUIElement::SUIElementRect::Draw
This method draws a particular UI element rectangle so it should be a member method.
2022-08-12 17:42:05 +02:00
Robert Müller 3b1ef5642b Refactor DrawRect* methods:
- use `CORNER_*` constants and add missing constants
- fix array variable names
- use `size_t`
- extract duplicate computation into constant
- use `ColorRGBA` instead of `vec4`
2022-08-12 17:42:05 +02:00
Robert Müller 2a21cd6eab Move all DrawRect* methods from CRenderTools to IGraphics
As the methods do not depend on any game components they are moved to the engine graphics interface.
2022-08-12 17:42:05 +02:00
Robert Müller 7b20009980 Move CUI::CORNER_* enum to IGraphics::CORNER_*
Entirely automatic replacement in preparation for moving rect drawing methods from `CRenderTools` to `IGraphics`.
2022-08-12 17:42:04 +02:00
Robert Müller 9ad097da4d Refactor DrawCircle:
- improve argument names
- remove duplicate computation by adding `SegmentsAngle`
- rename variable `Array` to `aItems`
- use `std::size` and `size_t`
- remove unnecessary temporary variables
2022-08-12 17:42:03 +02:00
Robert Müller 237fdc76db Move CRenderTools::DrawCircle to IGraphics::DrawCircle
As this method does not depend on any game components it is be moved to the engine graphics interface.
2022-08-12 17:42:03 +02:00
Robert Müller 967c92f5d6 Encapsulate CGraph member variables
Make the member variables private and add `SetMin` to replace a usage of the member variables in `CDebugHud`. For completeness/symmetry, `SetMax` is also added.
2022-08-12 16:13:23 +02:00
Robert Müller 8c88005a42 Rename variables Array to aLineItems / aColorVertices 2022-08-12 16:13:03 +02:00
Robert Müller 11e60d32f0 Reuse CGraph::InsertAt in Add to reduce duplicate code 2022-08-12 16:13:03 +02:00
Robert Müller 44ca1f0d7b Use size_t for indices, replace unused return value with assert
The return value of `CGraph::InsertAt` was not checked. All uses of the function pass a correct index, so the return value is replaced with an assertion.
2022-08-12 16:13:03 +02:00
Robert Müller 3daa177830 Remove restriction for CGraph::MAX_VALUES to be a power of two
By using `% MAX_VALUES` instead of `& (MAX_VALUES - 1)` to wrap the index. Both work the same, but the latter only does for powers of two.
2022-08-12 16:13:03 +02:00
Robert Müller b314db5454 Use CGraph::MAX_VALUES instead of magic value in debughud 2022-08-12 16:13:02 +02:00
Robert Müller 8e0a935d5c Combine CGraph::ScaleMin and ScaleMax into Scale
As the methods are always called at the same time, they can be combined. This also improves the performance, as the array only needs to be iterated once.
2022-08-12 16:12:55 +02:00
Robert Müller e99f7ab106 Extract StrCopyUntilSpace and use existing str_* functions
Minor refactoring to reduce duplicate code. Eventually this method could be extended to handle completion for other arguments except the first one.
2022-08-11 19:30:54 +02:00
Robert Müller 33bb576202 Show completion options for tune params in console
Currently supports `tune`, `tune_reset` and `toggle_tune`.

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

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

fixes #5716

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

Fixes #5641 
server side only

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-08-09 13:59:21 +00:00
bors[bot] dbe6d8cb29
Merge #5715
5715: Use djb2 for snapshot item hashlist r=def- a=Robyt3

The previous hash function was heavily biased towards the hash buckets 64-79, making those buckets overflow faster, which results in snapshot CRC errors and lags.

Using the djb2 hash yields an almost even distribution over the entire range of values.

Source for djb2: http://www.cse.yorku.ca/~oz/hash.html
(we incidentally use the same implementation for `str_quickhash`)

Sample which compares the usage of hash buckets in the test map from #5454 with the old and new hash function: [SnapshotHash.csv](https://github.com/ddnet/ddnet/files/9285148/SnapshotHash.csv) (this table also differentiates between the source and target of the snapshot delta)

Closes #4379.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-08-08 22:38:22 +00:00
Robert Müller 243ab7c2f0 Use djb2 for snapshot item hashlist
The previous hash function was heavily biased towards the hash buckets 64-79, making those buckets overflow faster, which results in snapshot CRC errors and lags.

Using the djb2 hash yields an almost even distribution over the entire range of values.

http://www.cse.yorku.ca/~oz/hash.html
2022-08-08 23:21:45 +02:00
Robert Müller 573aedc323 Extract magic constant 64 into HASHLIST_BUCKET_SIZE 2022-08-08 22:34:47 +02:00
Robert Müller b99b861e1c Extract common expression into CalcHashID function 2022-08-08 22:30:14 +02:00
Dennis Felsing 614a5b35bc Easter egg 2022-08-08 16:37:17 +02:00
Dennis Felsing 526861f924 Update language files, remove half-translated graphics warning
Thanks to cheeser0613 for report
2022-08-08 16:10:48 +02:00
Fireball 4ed997f304 Parallax Zoom: fix QuadEnvPoint scaling (and other UI distances) 2022-08-06 16:45:03 +01:00
bors[bot] aeca43fbdb
Merge #5706
5706: Fix shift-leftclick-drag with empty selection to delete (fixes #5705) r=C0D3D3V a=def-

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

## Checklist

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


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

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

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

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

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

Some refactoring to reduce duplicate code and to remove includes.

## Checklist

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


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

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

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

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

fixes #5675

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-07-31 21:11:15 +00:00
Chairn c651936f38 Use copy assignment rather than copy variable one by one 2022-07-31 22:43:43 +02:00
bors[bot] 730c54a603
Merge #5678
5678: Reset selected quads when switching layers (fixes #5673) r=Jupeyy a=def-

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-07-31 20:03:31 +00:00
Jupeyy 982139922c Fix editor image delete 2022-07-31 21:39:18 +02:00
Robert Müller 1d6dca8c24 Fix accesses to vector with index -1 by adding static button IDs 2022-07-31 13:13:53 +02:00
Robert Müller 344e50f76f Remove dead code 2022-07-31 13:10:03 +02:00
def 76e3db9725 Reset selected quads when switching layers (fixes #5673) 2022-07-31 09:45:06 +02:00
def b33cbdde0a Remove unused backend_opengles.h 2022-07-31 09:44:50 +02:00
def fc5cfb6f6c Remove CFlag dead code (fixes #5677) 2022-07-31 09:44:50 +02:00
def 734790a4aa Fix deprecation warning in ffmpeg 5.1 (fixes #5681) 2022-07-31 00:58:15 +02:00
Robert Müller 7f1a7795ee Fix tab and F10 keys working inconsistently in editor
By moving the calls to `KeyPress` from `CEditor::OnUpdate` to `OnRender`.
2022-07-30 13:31:00 +02:00
Dennis Felsing d520fe6177 Fix rotating plasma by Robyt3 (fixes #5666) 2022-07-28 15:42:11 +02:00
bors[bot] 9a3f526cb6
Merge #5614
5614: Fix clang-tidy 14 mingw issues (fixes #5612) r=heinrich5991 a=def-

Strangely I didn't get all of the errors.

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-07-27 10:45:54 +00:00
Dennis Felsing 9d6ccbe838 Version 16.2.2 2022-07-27 12:22:43 +02:00
def c94de9b764 Further clang-tidy 14 issues (fixes #5612) 2022-07-27 09:07:47 +02:00
def 1944bc7052 Ignore Stack address escape clang-tidy warnings
/media/ddnet/src/engine/server.h:135:3: error: Address of stack memory associated with local variable 'aBuf' is still referred to by the stack variable 'tmp' upon returning to the caller.  This will be a dangling reference [clang-analyzer-core.StackAddressEscape,-warnings-as-errors]
                return SendPackMsgOne(pMsg, Flags, ClientID);
                ^
/media/ddnet/src/game/server/gamecontext.cpp:4084:5: note: Assuming the condition is false
        if(pFilter[0])
           ^~~~~~~~~~
/media/ddnet/src/game/server/gamecontext.cpp:4084:2: note: Taking false branch
        if(pFilter[0])
        ^
/media/ddnet/src/game/server/gamecontext.cpp:4088:2: note: Calling 'CGameContext::SendChatTarget'
        SendChatTarget(ClientID, aBuf);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/game/server/gamecontext.cpp:401:5: note: Assuming field 'm_SvDemoChat' is not equal to 0
        if(g_Config.m_SvDemoChat)
           ^~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/game/server/gamecontext.cpp:401:2: note: Taking true branch
        if(g_Config.m_SvDemoChat)
        ^
/media/ddnet/src/game/server/gamecontext.cpp:402:3: note: Calling 'IServer::SendPackMsg'
                Server()->SendPackMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_NOSEND, -1);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:71:3: note: Taking true branch
                if(ClientID == -1)
                ^
/media/ddnet/src/engine/server.h:73:19: note: Assuming the condition is true
                        for(int i = 0; i < MaxClients(); i++)
                                       ^~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:73:4: note: Loop condition is true.  Entering loop body
                        for(int i = 0; i < MaxClients(); i++)
                        ^
/media/ddnet/src/engine/server.h:74:8: note: Assuming the condition is true
                                if(ClientIngame(i))
                                   ^~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:74:5: note: Taking true branch
                                if(ClientIngame(i))
                                ^
/media/ddnet/src/engine/server.h:77:15: note: Calling 'IServer::SendPackMsgTranslate'
                                        Result = SendPackMsgTranslate(&tmp, Flags, i);
                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:118:6: note: Assuming field 'm_ClientID' is >= 0
                if(pMsg->m_ClientID >= 0 && !Translate(pMsg->m_ClientID, ClientID))
                   ^~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:118:6: note: Left side of '&&' is true
/media/ddnet/src/engine/server.h:118:31: note: Assuming the condition is true
                if(pMsg->m_ClientID >= 0 && !Translate(pMsg->m_ClientID, ClientID))
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:118:3: note: Taking true branch
                if(pMsg->m_ClientID >= 0 && !Translate(pMsg->m_ClientID, ClientID))
                ^
/media/ddnet/src/engine/server.h:125:6: note: Assuming the condition is false
                if(IsSixup(ClientID))
                   ^~~~~~~~~~~~~~~~~
/media/ddnet/src/engine/server.h:125:3: note: Taking false branch
                if(IsSixup(ClientID))
                ^
/media/ddnet/src/engine/server.h:135:3: note: Address of stack memory associated with local variable 'aBuf' is still referred to by the stack variable 'tmp' upon returning to the caller.  This will be a dangling reference
                return SendPackMsgOne(pMsg, Flags, ClientID);
                ^
2022-07-27 09:07:20 +02:00
def 6fc2296a6e Ignore openssl deprecation warning for now (fixes #5597) 2022-07-27 09:06:57 +02:00
bors[bot] 53e9fd3599
Merge #5627
5627: Fix shift + left click in editor (fixes #5626) r=heinrich5991 a=def-

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-26 19:11:24 +00:00
bors[bot] e8667b6075
Merge #5658
5658: Fix game freezing up on duplicate snapshot r=def- a=Fireball-Teeworlds

If a duplicate snapshot is received (for the same tick), we add both to the SnapshotStorage and end up with the same snapshot as both Cur and Prev. This results in GameInfraTick returning "inf" and results in "NaN" downstream in a few places, getting the CollLine logic stuck.

Some debug info (tcpdump, gdb, perf): https://gist.github.com/Fireball-Teeworlds/ad0016d2551a2e4d4cb5691023493856

Apparently this doesn't really happen in the wild, unless you have a buggy network stack. In which case it happens frequently enough to pinpoint the issue :D

 (fixes #5657)

## Checklist

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


Co-authored-by: Fireball <fireball.teeworlds@gmail.com>
2022-07-26 13:46:40 +00:00
Fireball 9689301410 Fix game freezing up on duplicate snapshot
If a duplicate snapshot is received (for the same tick), we add both to the SnapshotStorage and end up with the same snapshot as both Cur and Prev. This results in GameInfraTick returning "inf" and results in "NaN" downstream in a few places, getting the CollLine logic stuck.

Apparently this doesn't really happen in the wild, unless you have a buggy network stack. In which case it happens frequently enough to pinpoint the issue :D
2022-07-24 21:57:05 +01:00
Robert Müller 1398936f54 Minor refactoring of CDemoPlayer::DoTick:
- Decrease variable scopes
- Use `bool` instead of `int`
2022-07-24 19:01:45 +02:00
Robert Müller 4c397e479a Refactor CSnapshotBuilder::Finish using TotalSize and OffsetSize 2022-07-24 18:04:48 +02:00
Robert Müller 3863d41623 Validate snapshot size and member variables and demo snapshots
Add `CSnapshot::IsValid` to check if a snapshot unpacked from a snapshot delta or demo is valid:
- ensure number of items and data size are not negative
- ensure that the actual size of the snapshot matches the size derived from its member variables
- ensure item offsets are within the valid range
- ensure item sizes are not negative

Add `CSnapshot::TotalSize` and `CSnapshot::OffsetSize` utility functions.

Minor improvements to related error messages.

Fixes buffer overflow:

```
==47744==ERROR: AddressSanitizer: global-buffer-overflow on address 0x558618e3767f at pc 0x558614b9bdfb bp 0x7ffe58a32cd0 sp 0x7ffe58a32cc0
READ of size 4 at 0x558618e3767f thread T0
    0x558614b9bdfa in CSnapshotItem::Type() const src/engine/shared/snapshot.h:16
    0x558615c3c911 in CSnapshot::GetItemType(int) const src/engine/shared/snapshot.cpp:29
    0x558614aebaba in CClient::UnpackAndValidateSnapshot(CSnapshot*, CSnapshot*) src/engine/client/client.cpp:2264
    0x558614af87cb in CClient::OnDemoPlayerSnapshot(void*, int) src/engine/client/client.cpp:2598
    0x558615b9db1a in CDemoPlayer::DoTick() src/engine/shared/demo.cpp:659
    0x558615babd3f in CDemoPlayer::Update(bool) src/engine/shared/demo.cpp:1007
    0x558614afb08b in CClient::Update() src/engine/client/client.cpp:2686
    0x558614b1d9eb in CClient::Run() src/engine/client/client.cpp:3296
    0x558614b8e64f in main src/engine/client/client.cpp:4761
```

And fixes a buffer overflow that manifests itself as an internal ASan error:

```
=================================================================
==4755==AddressSanitizer CHECK failed: ../../../../src/libsanitizer/asan/asan_descriptions.cc:79 "((0 && "Address is not in memory and not in shadow?")) != (0)" (0x0, 0x0)
    0x7f0bf5f368be in AsanCheckFailed ../../../../src/libsanitizer/asan/asan_rtl.cc:72
    0x7f0bf5f54eee in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cc:77
    0x7f0bf5e4cb6f in GetShadowKind ../../../../src/libsanitizer/asan/asan_descriptions.cc:79
    0x7f0bf5e4cb6f in __asan::GetShadowAddressInformation(unsigned long, __asan::ShadowAddressDescription*) ../../../../src/libsanitizer/asan/asan_descriptions.cc:95
    0x7f0bf5e4cb6f in __asan::GetShadowAddressInformation(unsigned long, __asan::ShadowAddressDescription*) ../../../../src/libsanitizer/asan/asan_descriptions.cc:92
    0x7f0bf5e4e386 in __asan::AddressDescription::AddressDescription(unsigned long, unsigned long, bool) ../../../../src/libsanitizer/asan/asan_descriptions.cc:440
    0x7f0bf5e50e94 in __asan::ErrorGeneric::ErrorGeneric(unsigned int, unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long) ../../../../src/libsanitizer/asan/asan_errors.cc:380
    0x7f0bf5f35f4d in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) ../../../../src/libsanitizer/asan/asan_report.cc:460
    0x7f0bf5e86f5e in __interceptor_memset ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:762
    0x558234873f1d in mem_zero src/base/system.cpp:213
    0x55823481fc27 in CSnapshotBuilder::NewItem(int, int, int) src/engine/shared/snapshot.cpp:675
    0x55823481be65 in CSnapshotDelta::UnpackDelta(CSnapshot*, CSnapshot*, void const*, int) src/engine/shared/snapshot.cpp:380
    0x558234776641 in CDemoPlayer::DoTick() src/engine/shared/demo.cpp:631
    0x5582347861a9 in CDemoPlayer::Update(bool) src/engine/shared/demo.cpp:1007
    0x5582336d4c7d in CClient::Update() src/engine/client/client.cpp:2695
    0x5582336f75dd in CClient::Run() src/engine/client/client.cpp:3305
    0x558233768241 in main src/engine/client/client.cpp:4770
```
2022-07-24 18:00:39 +02:00
Robert Müller 1b32e47173 Fix shift with negative exponent in TeamMask
```
src/game/server/teams.cpp:484:35: runtime error: shift exponent -1 is negative
    0x55d065b241c4 in CGameTeams::TeamMask(int, int, int) src/game/server/teams.cpp:484
    0x55d0657f92ed in CCharacter::TickDefered() src/game/server/entities/character.cpp:821
    0x55d065a5d04c in CGameWorld::Tick() src/game/server/gameworld.cpp:283
    0x55d0659327e6 in CGameContext::OnTick() src/game/server/gamecontext.cpp:852
    0x55d0656e6a88 in CServer::Run() src/engine/server/server.cpp:2807
    0x55d0657164f1 in main src/engine/server/server.cpp:3904
```
2022-07-22 16:42:56 +02:00
Jupeyy 88c4b69301 Add an option to remove weak hook & bounce 2022-07-21 17:04:16 +02:00
Robert Müller 95636da6d9 Fix out of bounds access with highlighted messages in server demos
```
src/game/client/components/chat.cpp:795:89: runtime error: index -1 out of bounds for type 'CClientData [64]'
    #0 0x55c133fd047a in CChat::AddLine(int, int, char const*) src/game/client/components/chat.cpp:795
    #1 0x55c133fc80b5 in CChat::OnMessage(int, void*) src/game/client/components/chat.cpp:570
    #2 0x55c134677688 in CGameClient::OnMessage(int, CUnpacker*, int, bool) src/game/client/gameclient.cpp:770
    #3 0x55c133c282d2 in CClient::OnDemoPlayerMessage(void*, int) src/engine/client/client.cpp:2627
    #4 0x55c134ccdcba in CDemoPlayer::DoTick() src/engine/shared/demo.cpp:679
    #5 0x55c134cdac81 in CDemoPlayer::Update(bool) src/engine/shared/demo.cpp:1007
    #6 0x55c133c2a08b in CClient::Update() src/engine/client/client.cpp:2686
    #7 0x55c133c4c9eb in CClient::Run() src/engine/client/client.cpp:3296
    #8 0x55c133cbd64f in main src/engine/client/client.cpp:4761
```
2022-07-21 15:32:11 +02:00
Robert Müller b4eee122dd Fix null pointer access in maplayers when the snapshot has no game info
```
src/game/client/components/maplayers.cpp:98:112: runtime error: member access within null pointer of type 'const struct CNetObj_GameInfo'
    #0 0x55d84eea9e1e in CMapLayers::EnvelopeEval(int, int, ColorRGBA&, void*) src/game/client/components/maplayers.cpp:98
    #1 0x55d84f518082 in CRenderTools::ForceRenderQuads(CQuad*, int, int, void (*)(int, int, ColorRGBA&, void*), void*, float) src/game/client/render_map.cpp:112
    #2 0x55d84f517ac7 in CRenderTools::RenderQuads(CQuad*, int, int, void (*)(int, int, ColorRGBA&, void*), void*) src/game/client/render_map.cpp:98
    #3 0x55d84eee10b0 in CMapLayers::OnRender() src/game/client/components/maplayers.cpp:1839
    #4 0x55d84f34b915 in CGameClient::OnRender() src/game/client/gameclient.cpp:640
    #5 0x55d84e8d44c2 in CClient::Render() src/engine/client/client.cpp:1222
    #6 0x55d84e92d1a0 in CClient::Run() src/engine/client/client.cpp:3370
    #7 0x55d84e99964f in main src/engine/client/client.cpp:4761
```
2022-07-21 15:28:31 +02:00
Jupeyy 2240ad2966 Fix spelling 2022-07-19 18:22:44 +02:00
Robert Müller c6cf0004a9 Fix names of static variables in settings menus 2022-07-18 21:51:46 +02:00
Robert Müller 687fd91414 Rename variable m_aEntries to m_vEntries 2022-07-18 21:43:59 +02:00
bors[bot] a9bc4ae113
Merge #5634
5634: Fix clang tidy accessing data pointer r=def- a=ChillerDragon

ddnet/src/engine/client/favorites.cpp:229:23: error: 'data' should be
used for accessing the data pointer instead of taking the address of the
0-th element [readability-container-data-pointer,-warnings-as-errors]
        int Index = pEntry - &m_aEntries[0];
                             ^~~~~~~~~~~~~~
                             (m_aEntries).data()

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

## Checklist

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


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-07-18 14:28:43 +00:00
bors[bot] 650800ea1e
Merge #5633
5633: Adapt upstreams CButtonContainer r=def- a=ChillerDragon

Introduce ``CButtonContainer`` which is used for fading text in teeworlds. There is no fading text in ddnet yet.
This change allows introducing such fading buttons but the main motivation for this change is easier copy & pasting code from ddnet to teeworlds code base and vice versa.

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [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: ChillerDragon <ChillerDragon@gmail.com>
2022-07-18 14:07:11 +00:00
ChillerDragon 1347860b2c Adapt upstreams CButtonContainer 2022-07-18 10:23:03 +02:00
Robert Müller b594a323a6 Change return type of CNetBase::IsSeqInBackroom from int to bool 2022-07-17 20:51:48 +02:00
Robert Müller 5f7d19d2e0 Use sizeof instead of hardcoded value 2022-07-17 20:51:11 +02:00
Robert Müller 4970a615d8 Remove dead code
The condition `Size < 1` is never true because the previous condition `Size < NET_PACKETHEADERSIZE` (`Size < 3`) already covers it.
2022-07-17 20:34:29 +02:00
ChillerDragon 0d4f38811e Fix clang tidy accessing data pointer
ddnet/src/engine/client/favorites.cpp:229:23: error: 'data' should be
used for accessing the data pointer instead of taking the address of the
0-th element [readability-container-data-pointer,-warnings-as-errors]
        int Index = pEntry - &m_aEntries[0];
                             ^~~~~~~~~~~~~~
                             (m_aEntries).data()
2022-07-16 16:00:38 +02:00
Alexander Akulich 04ff8f13c2 Menu: Fix a typo in loading state text 2022-07-14 23:40:23 +03:00
Alexander Akulich 9e4098f3a5 prediction/entity: Add GetPos() (sync the API with server/entity) 2022-07-14 23:40:23 +03:00
Alexander Akulich 5169369809 prediction/entity: Sync ID getter name with the server/entity 2022-07-14 23:40:23 +03:00
Alexander Akulich 1f264a042d CClient::DemoPlayer_Play: Load map info into m_CurrentServerInfo
This e.g. allows better heuristic in GetGameInfo() (from gameclient.cpp)
2022-07-14 23:38:20 +03:00
Alexander Akulich 6f6337cbf5 CDemoPlayer: Mark GetMapInfo() const 2022-07-14 23:38:20 +03:00
bors[bot] 482f15a711
Merge #5520 #5624
5520: Warn about pnglite-incompatible PNGs on load r=def- a=heinrich5991

This allows a larger range of PNGs to be loaded while still maintaining
backward compatibility with older clients by annoying the user.

This warning can be enabled by the `warn-pnglite-incompatible-images`
key in the https://info2.ddnet.tw/info JSON, if the key is not there or
the JSON hasn't been obtained yet, the warning is disabled. Since the
JSON is cached across restarts, it'll be effective for initially loaded
images from the second start.

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


5624: Move message copy inside `SendPackMsgTranslate` r=def- a=Robyt3

Fix clang warning: Address of stack memory associated with local variable 'aBuf' is still referred to by the stack variable 'tmp' upon returning to the caller.  This will be a dangling reference [clang-analyzer-core.StackAddressEscape]

Mark the input parameters as const pointers and mark the protocol message `Pack` methods as const.

And remove a null check that only serves to hide programmer errors.

## Checklist

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-07-14 16:38:08 +00:00
heinrich5991 994324b059 Warn about pnglite-incompatible PNGs on load
This allows a larger range of PNGs to be loaded while still maintaining
backward compatibility with older clients by annoying the user.

This warning can be enabled by the `warn-pnglite-incompatible-images`
key in the https://info2.ddnet.tw/info JSON, if the key is not there or
the JSON hasn't been obtained yet, the warning is disabled. Since the
JSON is cached across restarts, it'll be effective for initially loaded
images from the second start.
2022-07-14 18:22:46 +02:00
heinrich5991 4292c9ed77 Convert preprocessor #define to constexpr int 2022-07-14 18:22:46 +02:00
heinrich5991 44eb321d96 Fix name of an std::vector member 2022-07-14 18:22:44 +02:00
bors[bot] 96896ddf5c
Merge #5619
5619: Make UI inputs more secure r=def- a=C0D3D3V

fixes #3560 finally :) what a dream xD

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

## Checklist

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


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-07-14 16:17:55 +00:00
bors[bot] dafc3984dd
Merge #5511
5511: Rename cl_show_quads -> cl_showquads r=heinrich5991 a=def-

To reenable quads for everyone who accidentally disabled it or has the
bind to accidentally disable them

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-07-13 20:12:45 +00:00
Dennis Felsing de087bd80a Fix shift + left click in editor (fixes #5626) 2022-07-12 20:09:53 +02:00
heinrich5991 7c984df17a Fix UDP connectivity check
The nonsensical index of `m_aNetClients` was introduced during my
rebasing of #5205.

Fixes #5618.
2022-07-11 20:48:28 +02:00
Robert Müller d99ed6d811 Remove null check that potentially hides programming errors 2022-07-11 19:11:32 +02:00
Robert Müller ba1608529e Move message copy inside SendPackMsgTranslate
Fix clang warning: Address of stack memory associated with local variable 'aBuf' is still referred to by the stack variable 'tmp' upon returning to the caller.  This will be a dangling reference [clang-analyzer-core.StackAddressEscape]

Mark the input parameters as const pointers and mark the protocol message `Pack` methods as const.
2022-07-11 19:02:16 +02:00
c0d3d3v 27a4c494e9
Make UI inputs more secure 2022-07-11 18:56:36 +02:00
bors[bot] abc9929d35
Merge #5615
5615: Fix Text Alignments in Popups r=def- a=blueskyGH

Fixed the alignment issues in Popups.

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

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


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

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

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


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

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

Fixes #5158.

## Checklist

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


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

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

## Checklist

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


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

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

Fixes #5158.
2022-07-10 16:57:10 +02:00
heinrich5991 89a4a0c5c6 Only compare with old STUN server address if we have any 2022-07-10 16:53:15 +02:00
heinrich5991 a9bf09f769 Move websocket address handling out of the client 2022-07-10 16:53:12 +02:00
heinrich5991 6600024f24 Allow multiple addresses per server in the serverbrowser
Support is incomplete for `leak_ip_address_to_all_servers` (will only
ping the first address of each server) and for the `leak_ip` setting
(which will also only ping the first address of each server).
2022-07-10 16:52:07 +02:00
heinrich5991 2e34cf4d4b Make NETADDR comparable and hashable 2022-07-10 16:39:29 +02:00
Robert Müller 0d29e6fe3f Rename variable HoverTime -> m_HoverTime 2022-07-10 15:40:17 +02:00
Robert Müller fb1919b9be Fix spaces around documentation comments in tooltip.h 2022-07-10 15:40:17 +02:00
Robert Müller 35483177e8 Use else-if instead of duplicating condition 2022-07-10 15:40:17 +02:00
def eb14755501 Fix compilation in video.cpp
/home/deen/isos/ddnet/ddnet-source/src/engine/client/video.cpp:829:9: error: ‘c’ was not declared in this s
cope
  829 |         c->thread_count = 1;
      |         ^
2022-07-10 01:08:33 +02:00
bors[bot] e9f95dbefd
Merge #5598
5598: Fix the HUD bug I intoduced with  #5592 r=def- a=C0D3D3V

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

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

## Checklist

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


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

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

## Checklist

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


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

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

## Checklist

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


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

Huge renaming to match our rules

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

Further format static variables

Format almost all pointer names accordingly

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

clang-format

Fix CI fail

Fix misnamed non pointer as pointer and non array as array

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

clang-format

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

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

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

## Checklist

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


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



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

Should probably wait until after 16.2 release with them.

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

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

## Checklist

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


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

Recreates SnapEntities internally

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-07 10:41:22 +00:00
bors[bot] 5ab2491c24
Merge #5574
5574: Only MySQL >= 8.0.1 removed my_bool (fixes #5573) r=heinrich5991 a=def-

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

## Checklist

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


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

No matter if you use /timecp or rename

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-07-07 09:35:05 +00:00
Dennis Felsing aa18c1ee78 Only announce birthday once (fixes #5576)
No matter if you use /timecp or rename
2022-07-07 10:24:41 +02:00
Dennis Felsing 439a725d3b Only MySQL >= 8.0.1 removed my_bool (fixes #5573) 2022-07-07 09:44:13 +02:00
Chairn 2e8c5b3914 Split screen pos in independent variable. Format function declaration 2022-07-07 04:51:17 +02:00
bors[bot] a591fea1b2
Merge #5550
5550: Time checkpoints changes r=def- a=C0D3D3V

Fixes #5348

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

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

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

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

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


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-07-06 15:49:59 +00:00
c0d3d3v e6f1ef90de
send correct time diff on finish
send record when player joins or changes name
minor cleanup
2022-07-06 17:43:20 +02:00
Dennis Felsing ef9299c88d Also make gameclient aware that snapshots have been purged (fixes #5571)
Recreates SnapEntities internally
2022-07-06 15:42:05 +02:00
c0d3d3v ae80287c1b
Update checkpoint diff display to use time format with hours:minutes:centisecs
Add time diff to finish display.
Increase time the finish time display is displayed to 6 sec.
Allow to trigger time checkpoints out of order
2022-07-06 15:14:29 +02:00
c0d3d3v 498c2dbbcf
Renamed some time checkpoint related variables.
Init some of the time checkpoint variables explicitly
2022-07-06 15:13:55 +02:00
Chairn 32318a7c90 Reworked color system
Removed duplicate structs. Replaced 4 floats array with appropriate
struct where applicable
2022-07-06 11:39:51 +02:00
Chairn 27da8391dc Replace 2 floats array with vec2 where it makes sense 2022-07-06 11:39:43 +02:00
Jupeyy b3699fe9bc Remove useless GL 3.3 config 2022-07-05 20:02:19 +02:00
heinrich5991 e026bce50f Fix out of bounds read in checksum stuff 2022-07-05 10:26:05 +02:00
Jupeyy edc79e48cc Fix skindownload by only allowing move assignments 2022-07-04 18:24:34 +02:00
c0d3d3v a961151b32
Show also +0.00 split, and checkpoints close to start (<1sec) 2022-07-03 13:31:54 +02:00
bors[bot] b79bb7e62a
Merge #5547
5547: Minor tweaks to keep ODR across translation units r=def- a=Jupeyy

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

## Checklist

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


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-07-02 13:06:20 +00:00
Jupeyy 7250be6a95 Rename typedef 2022-07-02 14:43:41 +02:00
Jupeyy 50f8653c57 Minor tweaks to keep ODR across translation units 2022-07-02 14:25:16 +02:00
Robert Müller 8ee821c2f0 Remove unused #include <windows.h> in engine client 2022-07-02 14:02:42 +02:00
c0d3d3v f5519d1d88
Fix HUD on server we think that they are DDRace, but they are not 2022-07-01 13:13:06 +02:00
Robert Müller f3fbe891a6 Fix player input player flags translation with sixup
The sixup translated player flags were previously applied in `OnDirectInput` directly to the player input data.
However, the input data has already been copied at that point, so predicted inputs were using the incorrect flags.
This is fixed by moving the player flags translation to `OnClientPrepareInput`, which is called first and only once on each new player input before it is copied.
2022-07-01 00:00:17 +02:00
c0d3d3v 6869530314
Rename IsTCheckpoint to IsTeleCheckpoint and IsXCheckpoint to IsFTimeCheckpoint. And reduce code duplication 2022-07-01 00:00:03 +02:00
Robert Müller 6d0806f99d Fix engine client flags not being updated under some conditions
The flags were only being updated based on rather arbitrary conditions, so they could never reset to zero or reduced.
The flags are now always updated. The flags are only used in the output of the `status` command.
2022-06-30 23:55:03 +02:00
c0d3d3v 0bfb854a0e
Rename TILE_CHECKPOINT_XXX to TILE_TIME_CHECKPOINT_XXX 2022-06-30 23:41:40 +02:00
Robert Müller d9b0304adb Use sizeof instead of constant 2022-06-30 19:46:33 +02:00
Robert Müller d5594d8bd6 Fix variable name EntitesAreMasked -> EntitiesAreMasked 2022-06-30 19:45:10 +02:00
Robert Müller 3c7847a8d9 Fix variable name WasUnknwon -> WasUnknown 2022-06-30 19:44:29 +02:00
luk 1c340daeaa fix typo and comment 2022-06-30 17:04:29 +02:00
bors[bot] 5e7ec64292
Merge #5486
5486: Switch to loading screen, when map creation takes too long r=def- a=Jupeyy

Same as #4941 

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

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

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

## Checklist

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


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

This could potentially also be added to 16.2

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

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

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

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

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

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

## Checklist

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


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

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

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

Various refactoring in engine sound.

## Checklist

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


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

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

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

fixes #5455

## Checklist

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


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-06-29 11:35:37 +00:00
Robert Müller 4534996fbc Fix movement of envelope points with Info (Ctrl+I)
Co-authored-by: oy <tom_adams@web.de>
2022-06-28 22:25:55 +02:00
Robert Müller a765abf8e6 Merge IgnoreGrid variable declarations and definitions 2022-06-28 22:06:24 +02:00
BeaR b25c094daa Envelope preview: make last point editable 2022-06-28 19:29:09 +02:00
Robert Müller 16d9a69dd5 Print font name instead of address in log message, pFont -> font 2022-06-28 17:48:41 +02:00
Robert Müller b8d6298e29 Rename OpusFile to pOpusFile 2022-06-28 17:38:38 +02:00
Robert Müller d8e72ad862 Handle op_read errors and EOF 2022-06-28 17:38:05 +02:00
Robert Müller ac40efa263 Only apply size and color if changed, when editing multiple layers
To prevent the color of all layers from being reset to zero when changing just the size.
2022-06-27 23:20:09 +02:00
Robert Müller 70866d6d0c Fix names of SCommonPropState member variables 2022-06-27 23:20:09 +02:00
bors[bot] c231084daf
Merge #5515
5515: Include config info in help r=heinrich5991 a=def-

So it is clear what the default is

![screenshot-20220627@000811](https://user-images.githubusercontent.com/2335377/175835563-dd2abc4f-df83-43a7-bb60-7597d498aab7.png)
![screenshot-20220627@000545](https://user-images.githubusercontent.com/2335377/175835566-c983aa93-4a1d-471a-b183-1068050d196f.png)
![screenshot-20220627@000519](https://user-images.githubusercontent.com/2335377/175835569-796bcc4c-f9d2-4949-b1d5-b6dbb03be6d9.png)


## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [x] Tested in combination with possibly related configuration options
- [ ] Written a unit test 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-06-27 17:41:08 +00:00
Chairn a9ee57aeb7 Fix unsafe defines 2022-06-27 18:51:02 +02:00
Robert Müller 2e200c834d Use consistent sizeof expression for Mix calls 2022-06-27 17:55:28 +02:00
c0d3d3v 2090178c8e
Set default of cl_freezebars_alpha_inside_freeze to 0 2022-06-27 12:20:09 +02:00
c0d3d3v 59436b5e6d
Add default values to extended Net Objects 2022-06-27 01:11:19 +02:00
c0d3d3v f819afed6c
Print also extended NetObj and NetMsg Names
Show External NetObjects in Snapshot stats
2022-06-27 01:10:37 +02:00
c0d3d3v 00f28f2c8e
Unpack all 64 Parts of a splitted Snapshot 2022-06-27 01:10:37 +02:00
c0d3d3v 07cfda5593
remove rampvalue from ddnetcharacter 2022-06-27 01:10:37 +02:00
c0d3d3v df52df9d4a
move DDNetCharacterDisplayInfo to DDNetCharacter
- add default value option to NetworkValues
- rename m_FreezeTick to m_FreezeStart
2022-06-27 01:10:25 +02:00
def 4733cdc769 Abort skin downloads too (fixes #5505) 2022-06-27 00:39:00 +02:00
def b89dccab15 Include config info in help
So it is clear what the default is
2022-06-27 00:06:56 +02:00
Robert Müller 9390ae99b2 Fix OOB access when stopping a sound that has invalid samples 2022-06-26 22:43:32 +02:00
Robert Müller 9932bd76fb Update menu music state when the config variables change via console 2022-06-26 22:43:32 +02:00
Robert Müller 525527feb7 Add IsPlaying to sounds client component 2022-06-26 22:43:32 +02:00
Robert Müller b4a82b1b87 Reduce visibility of engine sound members and methods 2022-06-26 22:43:32 +02:00
Robert Müller 757d7d0068 Change m_SoundEnabled from int to bool 2022-06-26 22:43:32 +02:00
Robert Müller 82425f20d7 Handle WavpackUnpackSamples failure 2022-06-26 22:43:31 +02:00
Robert Müller a8949cb96b Fix log message context 2022-06-26 22:43:31 +02:00
Robert Müller d3e4ebf66a Simplify loop body and reduce duplicate code
It's not necessary to handle both channels separately so the loop can be simplified. The function `Int2Short` is replaced with equivalent `clamp`.
2022-06-26 22:43:31 +02:00
Robert Müller 1fb46b760c Code style: rename variable id to NextID 2022-06-26 22:43:31 +02:00
Robert Müller 4bc88712b9 Refactoring: move variable declarations in engine sound 2022-06-26 22:43:30 +02:00
Robert Müller 3db3f0af9c Code style: remove unnecessary indentation 2022-06-26 22:43:30 +02:00
Robert Müller 939c51bae1 Add IsPlaying to engine sound
To check if a specific sample is currently being played back.
2022-06-26 22:43:30 +02:00
def fca6baed63 Rename cl_show_quads -> cl_showquads
To reenable quads for everyone who accidentally disabled it or has the
bind to accidentally disable them
2022-06-26 20:51:53 +02:00
Robert Müller 8eb1f6888d Refactoring: use CGameWorld::Clear in CGameWorld::CopyWorld 2022-06-26 12:51:17 +02:00
Jupeyy b62894dad4 Switch to loading screen, when map creation takes too long 2022-06-26 11:56:56 +02:00
Robert Müller 2df4c4c668 Fix heap-use-after-free in CGameWorld::RemoveEntity
Entities have a pointer to their parent entity. If the parent entity is freed first, then freeing the child will cause access to the already freed parent.

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

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

Impressions: https://youtu.be/E770vGp4KKY

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


fixes #5149
fixes #198
closes #5159

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

## Checklist

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


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

## Checklist

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


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

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

## Checklist

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


Co-authored-by: Chairn <chairn.nq@hotmail.fr>
2022-06-25 21:49:43 +00:00
bors[bot] c5bf24692b
Merge #5502
5502: Add missing capability for GLES backend r=def- a=Jupeyy

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

## Checklist

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


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

This also allows the method to be used in the editor.
2022-06-25 17:15:55 +02:00
Robert Müller 25ad47bed2 Use DoIcon for ingame player GUI icons 2022-06-25 16:57:25 +02:00
Robert Müller 87cb948166 Clamp number of demo timeline markers to valid range 2022-06-25 16:57:25 +02:00
Robert Müller 5184cf5523 Add greyed out demo icon for invalid or not loaded demos 2022-06-25 16:57:24 +02:00
Robert Müller f727199060 Render demo file icon in name column, remove DoIcon centering 2022-06-25 16:36:09 +02:00
Jupeyy eb3406c4cf Add missing capability for GLES backend 2022-06-25 16:11:04 +02:00
c0d3d3v 706a06d4d4
clamp m_Armor, to prevent value correction on client side 2022-06-25 16:06:22 +02:00
c0d3d3v 4281df2429
Add new textures by ravie; Also add no gun hit for teleport gun 2022-06-25 16:05:38 +02:00
Chairn a50ddb75ff clang-format 2022-06-25 15:30:39 +02:00
Chairn 5f5b80ae57 Use [[fallthrough]] attribute rather than comment 2022-06-25 15:21:44 +02:00
Robert Müller 97e36fa4be Add optional color parameter to DoIcon 2022-06-25 13:43:40 +02:00
Robert Müller a530ce89d6 Rename DoButton_Icon to DoIcon and remove unused return value
As the function renders an icon and not a button.
2022-06-25 13:38:04 +02:00
c0d3d3v d78b3decd5
Revert to using conditions for the version check for capability chat messages; Remove ExcludeClientVersionAndHigher from CGameContext::SendChatTarget 2022-06-25 12:33:49 +02:00
c0d3d3v 6d098d866a
Remove ExcludeClientVersionAndHigher from CGameTeams::TeamMask; Add CGameContext::ClientsMaskExcludeClientVersionAndHigher 2022-06-25 11:16:59 +02:00
bors[bot] a62250792c
Merge #5490
5490: Try to fix dump_local_console (fixes #5488) r=heinrich5991 a=def-

Untested, but my hunch is that by not cutting off the last part the text
file will be correctly recognized as valid utf8

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

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-06-25 09:08:12 +00:00
bors[bot] 937a9cc0e2
Merge #5495
5495: Fix Android build r=heinrich5991 a=Jupeyy

- Video recorder off
- small fix in logger.cpp

Tested on Java-17

## 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-25 08:54:11 +00:00
Jupeyy a22a8dce1c Fix Android build 2022-06-25 10:43:24 +02:00
c0d3d3v dd1cdfcf2c
Add to some of the Sprite Arrays the array prefix 2022-06-25 10:39:39 +02:00
c0d3d3v ed2c514aa7
Change help text of cl_asset_extras 2022-06-25 10:28:54 +02:00
Dennis Felsing 4d43567948 Move twping to tools directory 2022-06-25 01:28:05 +02:00
Dennis Felsing 83267ed0a7
Update src/game/client/components/console.cpp
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-25 01:19:40 +02:00
Dennis Felsing 5dd2e5083b
Update src/game/client/components/console.cpp
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-06-25 01:19:32 +02:00
Dennis Felsing 8933ae8357 Try to fix dump_local_console (fixes #5488)
Untested, but my hunch is that by not cutting off the last part the text
file will be correctly recognized as valid utf8
2022-06-24 16:47:23 +02:00
bors[bot] 34da9f2282
Merge #5489
5489: Fix build with -DUPNP=ON r=def- a=ChillerDragon

We should have a CI that builds the same cmake settings as this arch package

https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ddnet-git

Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2022-06-24 13:58:00 +00:00
ChillerDragon 0163aa56ac Fix build with -DUPNP=ON 2022-06-24 14:16:29 +02:00
Dennis Felsing 805f6ac431 Fix win32 discord compilation
/home/deen/isos/ddnet/ddnet-source/src/engine/client/discord.cpp: In function ‘EDiscordResult (* GetDiscordCreate())(DiscordVersion, DiscordCreateParams*, IDiscordCore**)’:
/home/deen/isos/ddnet/ddnet-source/src/engine/client/discord.cpp:25:16: error: invalid conversion from ‘EDiscordResult (__attribute__((stdcall)) *)(DiscordVersion, DiscordCreateParams*, IDiscordCore**)’ {aka ‘EDiscordResult (__attribute__((stdcall)) *)(int, DiscordCreateParams*, IDiscordCore**)’} to ‘FDiscordCreate’ {aka ‘EDiscordResult (*)(int, DiscordCreateParams*, IDiscordCore**)’} [-fpermissive]
   25 |         return DiscordCreate;
      |                ^~~~~~~~~~~~~
      |                |
      |                EDiscordResult (__attribute__((stdcall)) *)(DiscordVersion, DiscordCreateParams*, IDiscordCore**) {aka EDiscordResult (__attribute__((stdcall)) *)(int, DiscordCreateParams*, IDiscordCore**)}
2022-06-24 10:06:04 +02:00
Robert Müller 52a78c45ef Fix memory leak of OpenGL 2 buffer object data
```
Direct leak of 216320 byte(s) in 3 object(s) allocated from:
    #0 0x7f5e05924808 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144
    #1 0x559b8ca66278 in CCommandProcessorFragment_OpenGL2::Cmd_CreateBufferObject(CCommandBuffer::SCommand_CreateBufferObject const*) src/engine/client/backend/opengl/backend_opengl.cpp:1901
    #2 0x559b8ca47fe7 in CCommandProcessorFragment_OpenGL::RunCommand(CCommandBuffer::SCommand const*) src/engine/client/backend/opengl/backend_opengl.cpp:1107
    #3 0x559b8cdf811b in CCommandProcessor_SDL_GL::RunBuffer(CCommandBuffer*) src/engine/client/backend_sdl.cpp:248
    #4 0x559b8cdf4262 in CGraphicsBackend_Threaded::ThreadFunc(void*) src/engine/client/backend_sdl.cpp:77
    #5 0x559b8dfc58a5 in thread_run src/base/system.cpp:721
    #6 0x7f5e03bf6608 in start_thread /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:477
```
2022-06-23 19:58:39 +02:00
bors[bot] 110eed9bae
Merge #5471
5471: map_replace_area: fixed implicit int to float conversions r=heinrich5991 a=sctt

fixes  #5469


Co-authored-by: f <scottistefano91@gmail.com>
2022-06-21 20:18:29 +00:00
f 222539e547 map_replace_area: removed standard inclusions 2022-06-21 21:21:49 +02:00
f 66099ab38d map_replace_area: fixed implicit int to float conversions 2022-06-21 21:04:54 +02:00
bors[bot] b75289df35
Merge #4829 #5343 #5465
4829: Added map_replace_area tool r=def- a=sctt

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

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

PoW screenshots attached below.

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

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

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

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

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

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

DEPENDS ON:

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

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

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

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

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

## Checklist

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


Co-authored-by: sctt <scottistefano91@gmail.com>
Co-authored-by: term <term@term.sinervis.pri>
Co-authored-by: f <scottistefano91@gmail.com>
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
Co-authored-by: def <dennis@felsin9.de>
Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2022-06-21 16:21:47 +00:00
f 9b0396e470 map_replace_area: hopefully last last fixes to pass CI tests 2022-06-21 17:37:55 +02:00
Robert Müller 81e24ce8e8 Only enable UI editbox hotkeys when UI is enabled
Fixes hotkeys triggering console input and UI editbox input at the same time when the console is open and a UI editbox is selected.
2022-06-21 17:19:03 +02:00
f a9d4ae44f2 map_replace_area: hopefully last fixes to pass CI tests 2022-06-21 17:13:57 +02:00
heinrich5991 4625b55ad6 Move PNG handling to src/engine/gfx
This way, it's no longer compiled into the server.
2022-06-21 15:26:23 +02:00
heinrich5991 923e9acf9c Run scripts/fix_style.py 2022-06-21 15:21:33 +02:00
f 8c392c9437 map_replace_area: other minor fixes to pass CI tests 2022-06-21 15:02:26 +02:00
f ce3577dac6 map_replace_area: fixed indentation 2022-06-21 14:47:27 +02:00
f 2112426206 map_replace_area: minor fixes to pass CI tests 2022-06-21 14:35:55 +02:00
heinrich5991 955084693d Refuse to load images of types not supported by pnglite
This allows us to think about backward compatibility while also
introducing libpng.
2022-06-21 13:37:14 +02:00
Jupeyy 65ad57a448 Change from pnglite to libpng for PNG reading
This is desirable mainly because libpng is maintained and pnglite is
not. pnglite was last updated in 2007 (15 years ago) and probably has a
lot of security vulnerabilities.

libpng is an actively maintained library also used by browsers like
Firefox or Chromium, so it's less likely to contain security
vulnerabilities, also it's more likely to be packaged by Linux
distributions.
2022-06-21 13:37:14 +02:00
bors[bot] 29be9a79fd
Merge #5461
5461: add penatly to the whole team r=def- a=BloodWod-513

this should fix it #5460

## Checklist

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


Co-authored-by: BloodWod-513 <dayn_2013@mail.ru>
2022-06-20 22:20:32 +00:00
Dennis Felsing af1f0de5fb
Merge pull request #5453 from Robyt3/Joystick-Close-Before-SDL-Quit
Fix segfault in `SDL_JoystickClose` on client quit
2022-06-20 23:47:59 +02:00
BloodWod-513 d7b5921759 refactoring pPlayer to pPrimaryPlayer 2022-06-20 22:01:10 +05:00
BloodWod-513 d58c5dfc9d add penatly to the whole team 2022-06-20 22:01:10 +05:00
term 46b500efef map_replace_area: handled layergroups parameters (offset/clip/parallax) with adaptation between source and dest map 2022-06-20 11:55:55 +02:00
sctt e207fa5c9f
Merge branch 'ddnet:master' into sctt-map_replace_area 2022-06-20 11:38:53 +02:00
Robert Müller 3f1f94c9d8 Fix segfault in SDL_JoystickClose on client quit
Instead of closing the joysticks manually, use `SDL_QuitSubSystem(SDL_INIT_JOYSTICK)` to quit the entire subsystem, which will also close all joysticks correctly.

The engine input destructor is replaced with a `Shutdown` method so we can control when it is called, i.e. before calling `SDL_Quit`, which forcefully quits all subsystems.

`CJoystick::Close` is removed as we don't need to close joysticks manually anymore.
2022-06-18 11:57:57 +02:00
Robert Müller 352734de56 Organize game-server includes 2022-06-17 20:32:56 +02:00
Robert Müller 2add5d5c3c Organize game-client and editor includes 2022-06-17 20:32:56 +02:00
Robert Müller a1851ed4e4 Organize engine-server includes 2022-06-17 20:32:56 +02:00
Robert Müller 23cce5415e Organize engine-client includes 2022-06-17 17:46:43 +02:00
Robert Müller 32707f6354 Remove unused CVideo constructor argument, organize includes 2022-06-17 17:39:26 +02:00
Robert Müller 2c9696cefd Use existing typedef instead of duplicating arguments 2022-06-17 17:39:26 +02:00
Robert Müller 4949645663 Organize game-shared includes 2022-06-17 17:39:25 +02:00
Robert Müller 0813fbb537 Move android log include to correct file 2022-06-17 17:39:25 +02:00
Robert Müller 557ee84001 Organize base includes 2022-06-17 17:39:25 +02:00
Robert Müller 4048bbbf5c Organize engine-shared includes 2022-06-17 17:39:24 +02:00
Robert Müller 0a4b1b9a7b Organize generated protocol includes 2022-06-17 17:39:24 +02:00
Robert Müller da5ec5a0d2 Include <iterator> instead of <array> for std::size
As `std::size` nominally resides in `<iterator>`.
2022-06-17 17:39:24 +02:00
bors[bot] d4f0e5cf5e
Merge #5445
5445: Fix editor value scrollers not working and panning being slow r=heinrich5991 a=Robyt3

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

Closes #5441.

And minor cleanup.

## Checklist

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


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

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

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

## Checklist

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


Co-authored-by: Lukas Kitsche <lukaskitsche@posteo>
2022-06-16 14:33:56 +00:00
Lukas Kitsche 379d93ae7b no goals hud when empty 2022-06-16 16:28:50 +02:00
Robert Müller dc52377fc5 Use ReadFile to read shader 2022-06-16 10:19:38 +02:00
Robert Müller de2744cb2a Use ReadFile to read opus sounds in editor 2022-06-16 10:19:37 +02:00
Robert Müller 0a463320cf Use ReadFile to load server maps 2022-06-16 10:19:37 +02:00
Robert Müller 5d49ee3684 Use ReadFile to load updater index json 2022-06-16 10:19:37 +02:00
Robert Müller ceca44ea23 Use io_read_all to load icon font 2022-06-16 10:19:37 +02:00
Robert Müller 74d7d4fe78 Use ReadFile to load wv/opus sound files 2022-06-16 10:19:37 +02:00
Robert Müller 7050022b08 Use ReadFile in CServerBrowser::LoadDDNetInfoJson 2022-06-16 10:19:36 +02:00
Robert Müller 93536b8977 Use io_read_all to load font files 2022-06-16 10:19:36 +02:00
Robert Müller c1c8797f84 Add IStorage::ReadFile and ReadFileStr:
Storage wrappers around `io_read_all` and `io_read_all_str`.
2022-06-16 10:19:36 +02:00
Robert Müller c7fb013607 Add io_read_all, io_read_all_str and mem_has_null:
- `io_read_all` reads all bytes from a file handle into a new buffer. It should only need one allocation per file in cases where the actual file size matches the expected file size. Otherwise it falls back to doubling the buffer size if the actual file size is larger than expected to avoid TOCTOU problems.
- `io_read_all_str` reads all bytes from a file handle into a new buffer and also ensures that the buffer is null-terminated and contains no other null-characters.
- `mem_has_null` is a utility used by `io_read_all_str` to ensure that no null-characters exist in the bytes read from the file.
2022-06-16 10:19:36 +02:00
c0d3d3v 781f2e7b57
add cl_show_jumps_indicator option 2022-06-15 22:05:44 +02:00
c0d3d3v f28b71d5cc
allow the server to also show old HUD elements (by @fokkonaut) 2022-06-15 22:05:43 +02:00
c0d3d3v 977d7d952c
Increase the size of dummy actions 2022-06-15 22:05:43 +02:00
c0d3d3v 6e8efa9204
Use 0 to 260 degree in Angle display, and do not display decimals of speed in debughd 2022-06-15 22:05:43 +02:00
c0d3d3v 44478b13ba
Add Opacity option for freeze bars inside freeze 2022-06-15 22:05:43 +02:00
c0d3d3v 51133dee2e
Add freezing snow flakes effect and fix 50HZ timer + add 10Hz Timer to particle system 2022-06-15 22:05:40 +02:00
c0d3d3v 2475e844e0
Add extras texture + asset tab 2022-06-15 22:03:52 +02:00
c0d3d3v 5cd0cc6040
send the weapon the player is really holding (except for ninjajetpack)
and render ninja skin in client if player is frozen

Do stll change the emote if a player with normal emote is freezed
2022-06-15 22:01:46 +02:00
c0d3d3v bba5027cea
show freezebar also inside freeze 2022-06-15 22:01:45 +02:00
c0d3d3v 167f2afc11
remove tile info messages and freeze/ninja stars for new clients using version checking 2022-06-15 22:01:35 +02:00
Chairn b80af9beb3 Fix wrongly corrected naming introduced in #5391 2022-06-15 21:09:57 +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] bbc447a995
Merge #5405
5405: mastersrv: Small convenience function r=def- a=heinrich5991

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test 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:30:35 +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
bors[bot] 1f4aa60391
Merge #5410
5410: Add `log_set_loglevel` instead of depending on engine config r=heinrich5991 a=Robyt3

Lets the logger have its own loglevel, which is set by the server and client initially after loading the config and when the `loglevel` config variable changes.

The default logger loglevel is `LEVEL_INFO`, so this fixes the log output not working when the config is not initialized (in tools). Closes #5349. Supersedes #5350.

## 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 21:33:37 +00:00
Robert Müller 92699de86c Add log_set_loglevel instead of depending on engine config 2022-06-13 23:21:41 +02: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 8757b1f41e Add joystick support to engine 2022-06-13 20:40:36 +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 135577b7f6 mastersrv: Small convenience function 2022-06-13 17:00:54 +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 e265a9f0a1 Remove useless float vector in vulkan backend 2022-06-11 21:43:45 +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
bors[bot] 37780cbe6f
Merge #5106
5106: Fix dummy intended tick sent to server r=def- a=sjrc6

fixes https://github.com/ddnet/ddnet/issues/5044

Currently the dummy gives the server the wrong IntendedTick aka PredTick which (I think) makes it impossible for the server to correctly order inputs if they come early (i.e. if you're playing with high prediction margin).

Currently with dummy copy if you switch dummy with high prediction margin it will almost always desync, with this change it doesn't desync. 

The only reason dummy works at all is because it relies on this code in the server to change the tick that was sent to be the current game tick, if you remove it then dummy hammer and dummy copy breaks but normal players are unaffected.

e9b59e72ff/src/engine/server/server.cpp (L1632-L1633) 

I marked this PR as draft because it seems to cause some unexpected side effects:

with this change if you use dummy copy in solo part your dummy will be visually delayed, this doesn't change anything but it's different from how it was before and I don't understand why. 

the sound effects from hooking with dummy copy are also not as synced as they are with the wrong tick being sent (not sure why) 

I also didn't test all dummy mechanics or any advanced dummy binds which might somehow rely on the broken behavior. 


With wrong tick sent to server:

https://user-images.githubusercontent.com/22122579/168413464-92a3a44b-3b75-4894-8fb0-54e64ff421fa.mp4

With correct tick:

https://user-images.githubusercontent.com/22122579/168413459-eb6f299c-260a-4ddb-9972-3dea504aef41.mp4






## 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: Tater <Mr.Potatooh@gmail.com>
2022-06-09 21:52:19 +00:00
Dennis Felsing d6e6599c8f Minor improvement for pagination
I thought I had committed this for #5375, but forgot
2022-06-09 11:24:19 +02:00
bors[bot] 16b8806302
Merge #5375
5375: Paginate bans (partially fixes #3691) r=Learath2 a=def-

20 elements per page, we have too many bot bans
![Screenshot 2022-06-08 at 23 53 16](https://user-images.githubusercontent.com/2335377/172724048-70d99f57-4e3c-451a-ada3-96affdf7cd6c.png)

## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test 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-09 09:03:16 +00:00
Dennis Felsing 2fceb1aa27 Paginate bans (partially fixes #3691)
20 elements per page, we have too many bot bans
2022-06-08 23:48:32 +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
def 5768e52a13 Minor fixes 2022-06-07 00:33:01 +02:00
Robert Müller 86e2d6791f Fix memory leak of CInput clipboard text 2022-06-06 22:14:05 +02:00
Robert Müller ec84e81e17 Replace Android-specific member variables with static variables 2022-06-06 22:14:05 +02:00
Robert Müller ff43b32257 Extract UpdateMouseState function 2022-06-06 22:06:56 +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 92503fccec Add comments, order functions, fix parameter names in engine input 2022-06-06 22:06:55 +02:00
bors[bot] 3ddc4d500b
Merge #5361
5361: Refactoring: Extract CLayerTiles::ShiftImpl, BrushFlipXImpl and BrushFlipYImpl to reduce duplicate code r=heinrich5991 a=Robyt3

There is still more duplicate code but it's tricky to extract.

## 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-06 12:00:09 +00:00
Robert Müller de199d08c0 Fix doxygen comments 2022-06-06 12:50:08 +02:00
Robert Müller e6bd84d4fd Extract CCmdlineFix to call cmdline_fix and cmdline_free automatically 2022-06-06 12:46:58 +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] d49b7b1561
Merge #5351
5351: Refactoring: Use MultiByteToWideChar instead of str_utf16le_encode r=heinrich5991 a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test 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-06 08:41:14 +00:00
Robert Müller fca867702e Add error messages when log message encoding cannot be converted 2022-06-06 10:28:47 +02:00
bors[bot] 62c13f2504
Merge #5360
5360: Don't write null byte r=heinrich5991 a=def-

Thanks to heinrich5991 for noticing: https://github.com/ddnet/ddnet/pull/5341#pullrequestreview-996061345

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-06-06 08:22:34 +00:00
def 8623381529 Don't write null byte
Thanks to heinrich5991 for noticing
2022-06-06 09:47:12 +02:00
trml 2b48c376d6 Fix input getter for dummy 2022-06-06 04:17:55 +02:00
bors[bot] ef5501c4da
Merge #5332
5332: Pass output parameter to WriteFile that is required on Windows 7 r=heinrich5991 a=Robyt3

Maybe closes #5322. I can't reproduce the crash. Can you try if this fixes it, `@Chairn?`

Looks like Windows 7 needs this parameter.

Alternative to #5331.

## 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-05 20:52:42 +00:00
bors[bot] eb92852adf
Merge #5344
5344: Log rcon messages (fixes #5342) r=heinrich5991 a=def-

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-06-05 20:32:12 +00:00
def de55d49c72 Fix motd undef behavior
Conditional jump or move depends on uninitialised value(s)
   at 0x2158DA: int IServer::SendPackMsg<CNetMsg_Sv_Motd, 0>(CNetMsg_Sv_Motd*, int, int) (server.h:73)
   by 0x1FE02F: CGameContext::SendMotd(int) (gamecontext.cpp:538)
   by 0x20A874: CGameContext::ConchainSpecialMotdupdate(IConsole::IResult*, void*, void (*)(IConsole::IResult*, void*), void*) (gamecontext.cpp:3124)
   by 0x145A23: CConsole::Con_Chain(IConsole::IResult*, void*) (console.cpp:1202)
   by 0x132086: CConsole::ExecuteLineStroked(int, char const*, int, bool) (console.cpp:528)
   by 0x1323A7: CConsole::ExecuteLine(char const*, int, bool) (console.cpp:582)
   by 0x1326B1: CConsole::ExecuteFile(char const*, int, bool, int) (console.cpp:625)
   by 0x1C60E9: main (server.cpp:3874)
 Uninitialised value was created by a heap allocation
   at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x1C5900: CreateServer() (server.cpp:3755)
   by 0x1C5C4C: main (server.cpp:3818)
2022-06-05 20:52:04 +02:00
Robert Müller 3dd2df285a Use MultiByteToWideChar instead of str_utf16le_encode 2022-06-05 20:51:56 +02:00
def 735b0bdf4a fifo: read() doesn't null-terminate!
valgrind found this with ChillerDragon's integration script extension
2022-06-05 20:15:55 +02:00
def 1db79fb493 Log rcon messages (fixes #5342) 2022-06-05 19:26:39 +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
def af3b1bb0e7 Log rcon messages (fixes #5342) 2022-06-05 12:44:15 +02:00
def ea5999d1da Don't write aAnsi when it's not filled (fixe #5340) 2022-06-05 11:30:54 +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
Robert Müller fda98a3ef4 Rename variables and use class in crapnet tool 2022-06-04 17:21:27 +02:00
Robert Müller 7fa3bb0842 Rename variables and use class in config_common.h 2022-06-04 17:21:26 +02:00
Robert Müller 8258effb33 Move/rename variable declarations in config_store 2022-06-04 17:21:26 +02:00
Robert Müller e8bd26857b Move/rename variable declarations in config_retrieve 2022-06-04 17:21:26 +02:00
Robert Müller 081881efcc Move variable declaration in dilate tool 2022-06-04 17:21:26 +02:00
Robert Müller 1f51e6e06a Fix variable name in dummy_map tool, add storage check 2022-06-04 17:21:26 +02:00
Robert Müller fbfbc78be4 Move/rename variable declarations in map_extract tool 2022-06-04 17:21:25 +02:00
Robert Müller 4bc1aeeb7a Move/rename variable declarations in map_convert_07 tool 2022-06-04 17:21:25 +02:00
Robert Müller d9848728e3 Move/rename variable declarations in map_diff tool, add checks 2022-06-04 17:21:25 +02:00
Robert Müller de3bb1ca8c Move/rename variable declarations in map_replace_image tool 2022-06-04 17:21:25 +02:00
Robert Müller 3003608e40 Move/rename variable declarations in map_resave tool 2022-06-04 17:21:25 +02:00
Robert Müller 1505fbe026 Move/rename variable declarations in map_optimize tool 2022-06-04 17:21:24 +02: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
Robert Müller e5d2b815eb Pass output parameter to WriteFile that is required on Windows 7 2022-06-03 15:55:57 +02: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
bors[bot] ce795572d2
Merge #5327
5327: Add CLockScope r=heinrich5991 a=def-

Remove unused lock and scope in threading.h

Not sure if this is preferred

We could also try switching to std::mutex and lock_guard

<!-- 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 10:58:17 +00:00
bors[bot] 6b7554f306
Merge #5325
5325: Reset colors at end of line (fixes #5324) r=heinrich5991 a=def-

`@ChillerDragon` Can you test this?

## 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 10:32:26 +00:00
Dennis Felsing 129205d6b9 Reset colors at end of line (fixes #5324) 2022-06-03 12:22:37 +02:00
Dennis Felsing 51909c19ab Add CLockScope
Remove unused lock and scope in threading.h

Not sure if this is preferred

We could also try switching to std::mutex
2022-06-03 12:21:23 +02:00
bors[bot] 2d53aeabce
Merge #5326
5326: Explicitly delete game server from list on shutdown r=def- a=heinrich5991

Also delete it explicitly when `sv_register` is set to register via less
protocols.

On shutdown, wait at most 1 second for the masterserver to respond,
otherwise allow up to 15 seconds.

Fixes https://github.com/ddnet/ddnet/issues/5157.

## Checklist

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
2022-06-03 09:41:37 +00:00
heinrich5991 7fccfaf211 Explicitly delete game server from list on shutdown
Also delete it explicitly when `sv_register` is set to register via less
protocols.

On shutdown, wait at most 1 second for the masterserver to respond,
otherwise allow up to 15 seconds.

Fixes #5157.
2022-06-03 11:27:47 +02:00
heinrich5991 ce08cc0e53 mastersrv: Add Action: delete to /ddnet/15/register
This will delete a server from the server list without a timeout,
allowing servers that want to stop registering or servers that shut down
gracefully to no longer appear in the server list.
2022-06-03 11:27:47 +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] 9dd46eb764
Merge #5260
5260: Pr thread safety negative r=heinrich5991 a=def-

WorkerThread is hard because `REQUIRES(!((CJobPool *)pUser)->m_Lock)` would require alias analysis or the function using that everywhere.

https://clang.llvm.org/docs/ThreadSafetyAnalysis.html#negative

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-06-01 11:17:30 +00:00
bors[bot] eab87e0d52
Merge #5291
5291: Windows: Use current console background color, restore original color on exit, refactoring r=heinrich5991 a=Robyt3

- Remember initial console foreground and background color.
- Use the original background color with the message specific foreground color, so it looks better when the console background color isn't black.
- Restore the initial console foreground and background color on exit instead of leaving the color be whatever was last used.
- Add locks to ensure `Log`-calls from different threads don't overlap their output/color.
- Refactoring: Replace numbers with color constants defined in `wincon.h` (4312d20923/include/wincon.h (L51-L67)).
- Refactoring: Slightly reorder the `if`s and remove redundant checks which are ensured by the `else-if` structure.

## 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-01 10:25:43 +00: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
bors[bot] 27ebe08c72
Merge #5290 #5293
5290: Don't output as much in normal STUN behavior r=def- a=heinrich5991

Log send errors with debug instead of error severity. They're normal in case a protocol stack isn't initialized supported by the host or if there's no route.

Don't periodically retry STUN if successful. Trying again for each connection establishment is enough. Previously, it
was re-requested every 10 minutes.

Fixes #5273.

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


5293: Cleanup: Remove dead code, don't print datafile debug per default, remove misused static CUIRect r=def- a=Robyt3

- Remove dead (commented out) code.
- Don't print detailed datafile log messages, unless the datafile specific `DEBUG` flag is set.
- Use `static int` instead of `static CUIRect` as UI element ID.

## Checklist

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


Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-05-31 18:54:56 +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
Robert Müller 7f24922b35 Print auxiliary datafile log messages only when DEBUG flag set 2022-05-31 19:32:07 +02:00
Robert Müller 2a8b2ad455 Add locks to windows loggers 2022-05-31 19:21:40 +02:00
heinrich5991 92f27bdb30 Don't periodically retry STUN if successful
Trying again for each connection establishment is enough. Previously, it
was re-requested every 10 minutes.

Fixes #5273.
2022-05-31 17:53:11 +02:00
heinrich5991 71d47c3329 Log send errors with debug instead of error severity
They're normal in case a protocol stack isn't initialized supported
by the host or if there's no route.

CC #5273
2022-05-31 17:49:11 +02:00
Robert Müller 2d7f67ddec Use current console background color, restore original color on exit 2022-05-31 17:48:28 +02:00
Robert Müller 95f244913f Remove duplicate conditional expressions 2022-05-31 17:48:28 +02:00
Robert Müller 2c04c00756 Use color constants in color_hsv_to_windows_console_color 2022-05-31 17:48:28 +02:00
bors[bot] d32b223636
Merge #5287 #5288
5287: Work around Windows's definition of `min`/`max` r=Jupeyy a=heinrich5991

This allows us to use `std::min`/`std::max`.

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

## Checklist

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


5288: Remove outdated comment r=Jupeyy a=heinrich5991

The string comparison isn't actually done anymore, it's now done via a
boolean flag.

## 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-05-31 15:43:15 +00:00
heinrich5991 d0ff8114d6 Remove outdated comment
The string comparison isn't actually done anymore, it's now done via a
boolean flag.
2022-05-31 17:33:00 +02:00
heinrich5991 eb2823231f Work around Windows's definition of min/max
This allows us to use `std::min`/`std::max`.
2022-05-31 17:26:35 +02:00
heinrich5991 9da3f5c359 Only show port forward message if there's a problem
Previously, it was always shown.

Fixes #5203.
2022-05-31 16:39:54 +02:00
Dennis Felsing e31fa7051e Fix clamp in CStun::Update (fixes #5282) 2022-05-31 13:31:43 +02:00
c0d3d3v 0914c1260b
add ellipsis again 2022-05-31 12:20:45 +02:00
bors[bot] 4183ad6b47
Merge #5179
5179: Add loglevel config (fixes #5178, fixes #5174) r=heinrich5991 a=def-

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-05-31 08:21:03 +00: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 0101e94a63 Organize engine-server includes 2022-05-29 21:24:43 +02:00
Robert Müller 4b36584ca1 Organize engine-client includes 2022-05-29 21:24:43 +02:00
Robert Müller c2f92c1e13 Organize game-shared includes 2022-05-29 20:02:22 +02:00
Robert Müller 31533d5e2a Organize engine-shared includes 2022-05-29 20:02:22 +02:00
Robert Müller 0af146eb3b Remove unused includes from base 2022-05-29 19:49:38 +02:00
def 3e60cd83d0 Time out for POST requests too (hopefully fixes #5198) 2022-05-29 19:15:36 +02:00
Robert Müller a3a594b2d8 Remove unused include from test 2022-05-29 13:10:49 +02:00
Robert Müller f632758381 Remove unused includes from tools 2022-05-29 13:10:49 +02:00
bors[bot] 1abe73c2ec
Merge #5272
5272: Handle failed socket creation (fixes #5267) r=heinrich5991 a=def-

by returning nullpointer, as the calling functions expect

Broken in 471bb441a1

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-05-29 08:50:00 +00:00
def d6c1c7790c Handle failed socket creation (fixes #5267)
by returning nullpointer, as the calling functions expect

Broken in 471bb441a1
2022-05-29 00:43:07 +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
bors[bot] 5fdb94e479
Merge #5268
5268: Execute the dragger_beam tick one tick earlier. And stop it one tick earlier r=def- a=C0D3D3V

fixes #5263

`@bencie`  could you please confirm it fixes the problem?

## 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-05-28 21:17:38 +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
Alexander Akulich a5f4c66fd5 vmath: Make vector2_base() constructors constexpr 2022-05-28 20:58:22 +03:00
bors[bot] 719e3e4385
Merge #5264 #5266
5264: Prevent users from setting port 1-1023 r=Jupeyy a=def-

Following user report that they set cl_port 1 and it didn't work

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


5266: Use std::make_unique (fixes #5166) r=Jupeyy a=def-

No idea why clang-tidy's modernize-... didn't work

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

## Checklist

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


Co-authored-by: def <dennis@felsin9.de>
2022-05-28 16:01:32 +00: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
def 19dcd44fbe Use std::make_unique (fixes #5166)
No idea why clang-tidy's modernize-... didn't work
2022-05-28 14:46:55 +02:00
def a3c1a4c540 Prevent users from setting port 1-1023
Following user report that they set cl_port 1 and it didn't work
2022-05-28 13:42:28 +02: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
Robert Müller c60931427a Use std::any_of instead of for-each loops 2022-05-28 10:45:15 +02:00
Jupeyy 23683a701e Remove alpha threshold from map_optmize 2022-05-28 09:15:08 +02:00
Chairn 39e3f52bf3 clang-format 2022-05-28 02:22:43 +02:00
Chairn 4cba284b68 Fix possible misuse of comma 2022-05-28 02:15:42 +02:00
Dennis Felsing 174b855774 Enable -Wthread-safety-negative (as suggested by Chairn) 2022-05-28 02:14:46 +02:00
bors[bot] ce9b16d6f6
Merge #5259
5259: reintroduce shotgun bug r=def- a=C0D3D3V

fixes #5258
bug got fixed by the math changes in 68bcd21eff

This fix introduces a hard coded velocity that the player would get like before. (It could be that this has slightly other behaviour, because before the produced NaN values where converted to ints in CCharacterCore::Quantize (so some other logic may be confronted with the NaN values before), but it should most likely not be noticeable because it is fast enough)

We could now make this bug optional, by adding it to our mapbugs, or adding a server setting for 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
- [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-05-27 23:23:37 +00:00
bors[bot] 4b3b0938fd
Merge #5255
5255: fix windows server crash on client spawn r=def- a=C0D3D3V

The continuation  of removing mem_zero over CCharacterCore.

I have tested the server in a Windows VM -> no crash

## Checklist

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


Co-authored-by: c0d3d3v <c0d3d3v@mag-keinen-spam.de>
2022-05-27 23:08:53 +00:00
c0d3d3v 04f1bbf59f
reintroduce shotgun bug 2022-05-28 00:58:33 +02:00
trml 85e86772b2 Don't keep track of characters in the predicted gameworld that are not in the snapshot and require pred characters to be alive 2022-05-28 00:07:31 +02:00
bors[bot] 59acac221c
Merge #5254 #5257
5254: Fix ingame menu button behavior when holding mouse button r=def- a=Robyt3

Fixes the following behavior:

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

As well as the following:

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

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

Closes #3560. Closes #5229.

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

## Checklist

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


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

Adopt changes from upstream.

## Checklist

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


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-05-27 18:37:17 +00:00
bors[bot] 862faa255a
Merge #5256
5256: Use double for traffic calculations r=def- a=Jupeyy

fixes #5207

Not going to rewrite rn since it relies on normilization of the time.
Hope this is enough, floats probs struggle with time_freq and time differences being so huge

## 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-05-27 18:19:38 +00:00
Robert Müller fccfbd5b70 Extract CRenderTools::RenderCursor 2022-05-27 19:43:12 +02:00
Robert Müller caa23bcfdd Move CMenus::UseMouseButtons to CUI::SetEnabled 2022-05-27 19:43:12 +02:00
Jupeyy d4b1bec6fe Use double for traffic calculations 2022-05-27 19:40:27 +02:00
c0d3d3v 55671e483a
fix windows server crash on client spawn 2022-05-27 19:21:43 +02:00
Robert Müller 31930951f0 Only allow buttons to be become hot while the mouse is not pressed 2022-05-27 19:07:56 +02:00
Robert Müller 910f01cbf2 Fix ingame menu buttons when mouse is held ingame and released in menu 2022-05-27 19:07:56 +02:00
Jupeyy d7cdc14819 Don't ever skip any frame 2022-05-27 17:54:58 +02:00
Robert Müller a0a0fa1322 Fix ingame menu buttons when mouse is held and released ingame 2022-05-27 17:45:30 +02:00
Robert Müller 6a72c5c38b Fix clang-analyzer-cplusplus.NewDelete (Use of memory after it is freed) 2022-05-27 16:41:14 +02:00
Robert Müller a2465605df Remove base/tl/range.h 2022-05-27 16:36:40 +02:00
Robert Müller f9d49bd53e Remove base/tl/allocator.h 2022-05-27 16:36:40 +02:00
Robert Müller 47098daa42 Remove base/tl/algorithm.h 2022-05-27 16:36:40 +02:00
Robert Müller ca309d6ef8 Remove base/tl/array.h 2022-05-27 16:36:39 +02:00
Robert Müller 0c69495522 Use std::vector instead of array in editor 2022-05-27 16:36:39 +02:00
Robert Müller 3f8fb732a3 Use std::vector<CKey> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller c6e195a399 Use std::vector<CNameBan> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller 4a023342b7 Use std::vector<CName> instead of array, adjust variable name 2022-05-27 16:31:18 +02:00
Robert Müller ce54a0d075 Use std::vector<CMenuImage> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller 24ad383211 Use std::vector<CSourceQueueEntry> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller d3eb9d6fe7 Use std::vector<std::string> instead of array 2022-05-27 16:31:18 +02:00
Robert Müller 0f097a0490 Use std::vector<char *> instead of array in gamecontext 2022-05-27 12:13:30 +02:00
Robert Müller 80103888ea Use std::vector<char *> instead of array in config_store 2022-05-27 12:13:30 +02:00
Robert Müller b9c52f7e31 Use SetActiveItem(nullptr) instead of SetActiveItem(0) 2022-05-27 11:59:14 +02:00
Robert Müller 2b02bd449b Prevent lock of UI
Co-authored-by: oy <tom_adams@web.de>
2022-05-27 11:53:05 +02:00
bors[bot] 7348bf4d56
Merge #5246
5246: Use std::vector instead of sorted_array, remove base/tl/sorted_array.h r=def- a=heinrich5991

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

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

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

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

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

## Checklist

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

Co-authored-by: Robert Müller <robytemueller@gmail.com>
2022-05-27 08:51:55 +00:00
bors[bot] 61c81fa0f2
Merge #5240
5240: Fix crash when graphics init failed (fixes #5237) r=heinrich5991 a=def-

## Checklist

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


Co-authored-by: Dennis Felsing <dennis@felsin9.de>
2022-05-26 22:17:15 +00:00
Robert Müller de1de5e7bd Use emplace_back for CFriendItem 2022-05-27 00:14:07 +02:00
Robert Müller 476af1286d Use emplace_back for CCommand, fix member variable names 2022-05-27 00:13:26 +02:00
Robert Müller d0b5d096f5 Use emplace_back for CString 2022-05-27 00:03:13 +02:00
Robert Müller bea74f3d4f Remove base/tl/sorted_array.h 2022-05-27 00:03:13 +02:00
Robert Müller a76cdb254e Use std::vector<CDownloadSkin> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 0859da7e6a Use std::vector<CSkin> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller ae8f5e87c7 Use std::vector<CNameIndexed> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 5cc76d286f Use std::vector<CGhostItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller b24f318450 Use std::vector<CFriendItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller de23bf912d Use std::vector<CString> instead of sorted_array, improve string search 2022-05-27 00:03:13 +02:00
Robert Müller 359093cab8 Use std::vector<CDemoItem> instead of sorted_array 2022-05-27 00:03:13 +02:00
Robert Müller 96c97d5bb7 Use std::vector for assets menu list items instead of sorted_array 2022-05-26 23:49:30 +02:00
Robert Müller 2ea0c49f8b Use std::vector<CCommand> instead of sorted_array 2022-05-26 23:49:30 +02:00
Robert Müller 662cb58132 Use std::vector<CFilelistItem> instead of sorted_array 2022-05-26 23:49:30 +02:00
Robert Müller 0032f6f2c2 Use std::vector<CCountryFlag> instead of sorted_array 2022-05-26 23:49:27 +02:00