

stdout_output_level for printing to stdout, console_output_level for
printing to local console and remote console and loglevel for the log
file.
Keep the old log level filters 0 for info and more severe, 1 for debug
and more severe and 2 for trace and more severe, introducing -1 for
warn, and -2 for error. -3 will show no log messages at all.









































SendChatTarget is cleaner than doing the version check at the call site?






SendChatTarget(1, OnlyForVersionGreaterThan=5), it seems weird to not just check it locally








if(x < 5) DoFunction() over DoFunctionIfLessThan(5)



SendChatTarget function isn't really nice)




















c++
char aBuff[IO_MAX_PATH_LENGTH];
    if(str_comp(pAssetItem->m_aName, "default") == 0)
    {
        str_format(aBuff, sizeof(aBuff), "%s.png", pAssetName);
        CImageInfo ImgInfo;
        if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
        {
            pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
            pGraphics->FreePNG(&ImgInfo);
        }
    }
    else
    {
        str_format(aBuff, sizeof(aBuff), "assets/%s/%s.png", pAssetName, pAssetItem->m_aName);
        CImageInfo ImgInfo;
        if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
        {
            pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
            pGraphics->FreePNG(&ImgInfo);
        }
        else
        {
            str_format(aBuff, sizeof(aBuff), "assets/%s/%s/%s.png", pAssetName, pAssetItem->m_aName, pAssetName);
            if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
            {
                pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
                pGraphics->FreePNG(&ImgInfo);
            }
        }
    }








c++
char aBuff[IO_MAX_PATH_LENGTH];
    if(str_comp(pAssetItem->m_aName, "default") == 0)
    {
        str_format(aBuff, sizeof(aBuff), "%s.png", pAssetName);
        CImageInfo ImgInfo;
        if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
        {
            pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
            pGraphics->FreePNG(&ImgInfo);
        }
    }
    else
    {
        str_format(aBuff, sizeof(aBuff), "assets/%s/%s.png", pAssetName, pAssetItem->m_aName);
        CImageInfo ImgInfo;
        if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
        {
            pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
            pGraphics->FreePNG(&ImgInfo);
        }
        else
        {
            str_format(aBuff, sizeof(aBuff), "assets/%s/%s/%s.png", pAssetName, pAssetItem->m_aName, pAssetName);
            if(pGraphics->LoadPNG(&ImgInfo, aBuff, IStorage::TYPE_ALL))
            {
                pAssetItem->m_RenderTexture = pGraphics->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, ImgInfo.m_Format, 0);
                pGraphics->FreePNG(&ImgInfo);
            }
        }
    } void LoadPNGFromPath(char* aBuf, idkthetype* RenderTexture)




















































class CMatDefault : public CTuneParams  //CTuneParams is not allowed to contain virtual functions
{
public:
    CMatDefault() = default;
    virtual int GetSkidSound();
    virtual float GetSkidThreshold() { return 500.0f; }
    virtual float GetDynamicAcceleration(float Velocity) { return m_GroundControlAccel; }
};







+1 to statically calculate the number of parameters without relying on the size of any classes
m_NumTuningParamters++; to the macro is easy, but the class needs to be readable as an int*, WAIT can't I write an operator for that 



















import discord
if messageIsValid()
    addReactions()










c7fb013 Add io_read_all, io_read_all_str and mem_has_null: - Robyt3
c1c8797 Add IStorage::ReadFile and ReadFileStr: - Robyt3
93536b8 Use io_read_all to load font files - Robyt3
7050022 Use ReadFile in CServerBrowser::LoadDDNetInfoJson - Robyt3
74d7d4f Use ReadFile to load wv/opus sound files - Robyt3
ceca44e Use io_read_all to load icon font - Robyt3
5d49ee3 Use ReadFile to load updater index json - Robyt3
0a46332 Use ReadFile to load server maps - Robyt3
de2744c Use ReadFile to read opus sounds in editor - Robyt3
dc52377 Use ReadFile to read shader - Robyt3
992723d Merge #5430 - bors[bot]



rename manpage it talks about files
rename isn't limited to files in linux






renameat2 









|| or && because i did ( cond1 || (cond2 && cond3)) 

(cond1 || cond2 && cond3) what then?&& comes first because its 'stronger'? (edited)
(cond1 || cond2 && cond3) is the same as (cond1 || (cond2 && cond3))
((cond1 || cond2) && cond3)











CCharacter *pChar = ChatHelper()->GameClient()->m_GameWorld.GetCharacterByID(ChatHelper()->GameClient()->m_LocalIDs[g_Config.m_ClDummy]);
			if(pChar)
				continue;
			vec2 Self = pChar->m_Pos;






















pkill -f electron it loses messages. It messes up message order.


































































































m_MaterialIsLoaded should be set to false







 2

dc52377fc59f41f8687ca4176ba73196d7790e69 is the first bad commit
commit dc52377fc59f41f8687ca4176ba73196d7790e69
Author: Robert Müller 
Date:   Tue Jun 14 21:27:10 2022 +0200
    Use `ReadFile` to read shader
 src/engine/client/backend/vulkan/backend_vulkan.cpp | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)
```
bt
#0  0x0000000007cfc5c5 in vkGetInstanceProcAddr ()
   from C:\Windows\system32\nvoglv64.dll
#1  0x0000000000661007 ...






























reserve instead of resize but of course that wouldn't set the actual size of the vector after I copy in the data. 
Closes #5442.




























Check out the DDNet Wiki by Patiga & Zwelf on wiki.ddnet.tw
Check out DDNet's Discord server on ddnet.tw/discord
Check out DDNet's TeamSpeak server hosted by laxa on ts.ddnet.twCheck out the DDNet Wiki by Patiga & Zwelf on wiki.ddnet.tw
Check out the DDNet Discord server on ddnet.tw/discord
Check out the DDNet TeamSpeak server hosted by laxa on ts.ddnet.tw

