


exec myfolder/somesubfolder/config.cfg because there is no way to list files from the console or even better auto complete paths.
It should autocomplete all active storage locations. This feature will leak the file structure but exec already leaks most file contents so thats not much worse from a security perspective i guess.
terminate called after throwing an instance of 'std::bad_function_call'
what(): bad_function_call#define TRY_CALLBACK(a, b, c) { dbg_assert(bool(b), a " callback has no candidate."); b c; }
...
TRY_CALLBACK("Operation failed", fnOperationFailedCallback, (LOAD_ERROR_DIRECTORY_UNREADABLE, &it))
// instead of fnOperationFailedCallback(LOADLOAD_ERROR_DIRECTORY_UNREADABLE, &it);
so i could handle this error without catching an exception
const char *GetPath(int Type, const char *pDir, char *pBuffer, unsigned BufferSize)
in CStorage is not a part of the interface (edited)







std::string is okay if the alternative would be to malloc/free some buffer anyway

v prefix for std::vector and not for other collections like std::set
a (edited)






a for normal arrays and std::array and v for std::vector, we don't use prefixes for other iterable collections like std::set and std::list









a ONLY for T[] arrays and v ONLY for std::vector specifically is weird



template <typename T>
void doStuff(const std::initializer_list<T> &args) {
for(const auto &it : args) {
// stuff
}
}
doStuff<int>({1, 5, 2, 7, 12});



std::vector would be better here because you can just create a vector from an initializer list IIRC














DDNet "connect ger.ddnet.tw"









npm i teeworlds. There are no other projects in the npm registry using teeworlds.


































std::span will replace all brace params so in C++26 explicit initializer_list constructors might become obsolete 


























































1




version: '3'
services:
db:
container_name: db
image: mariadb
restart: always
volumes:
- /opt/volumes/bombay/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: pw
MYSQL_USER: tw
MYSQL_PASSWORD: pw
MYSQL_DATABASE: bw
networks:
- bombay
v3royal:
container_name: v3royal
depends_on:
- db
image: bombay:latest
restart: always
volumes:
- /opt/volumes/bombay/v3royal/data:/blockworlds/data
networks:
- bombay
ports:
- 149.202.19.227:8404:8404/udp
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin
restart: always
networks:
- traefik
- bombay
labels:
traefik.enable: true
traefik.http.routers.phpmyadmin.entrypoints: websecure
traefik.http.routers.phpmyadmin.rule: Host(`url`)
traefik.http.services.phpmyadmin.loadbalancer.server.port: 80
environment:
- PMA_ARBITRARY=1
networks:
bombay:
external: true
name: bombay
traefik:
external: true
name: traefik
but here's an example















tw_srv:
container_name: tw_srv
image: bombay:latest
restart: always
environment:
TW_sv_name: "This is a test server"
...




























































= and +=
























yaml
yaml:
- sucks
- so bad

fn no() -> i8 {}








































4 times now

























for(auto &pLayer : m_vpLayers)
{
if(pLayer->m_Visible)
{
if(pLayer->m_Type == LAYERTYPE_TILES)
{
CLayerTiles *pTiles = static_cast<CLayerTiles *>(pLayer);
if(pTiles->m_Game || pTiles->m_Front || pTiles->m_Tele || pTiles->m_Speedup || pTiles->m_Tune || pTiles->m_Switch)
continue;
}
if(m_pMap->m_pEditor->m_ShowDetail || !(pLayer->m_Flags & LAYERFLAG_DETAIL))
pLayer->Render();
}
}
for(auto &pLayer : m_vpLayers)
{
if(pLayer->m_Visible && pLayer->m_Type == LAYERTYPE_TILES && pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
{
CLayerTiles *pTiles = static_cast<CLayerTiles *>(pLayer);
if(pTiles->m_Game || pTiles->m_Front || pTiles->m_Tele || pTiles->m_Speedup || pTiles->m_Tune || pTiles->m_Switch)
{
pLayer->Render();
}
}
} at CLayerGroup::Render() on game/editor/editor.cpp




(pLayer->m_Visible && pLayer->m_Type == LAYERTYPE_TILES) and then (pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer) under the same if?


(pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
evaluates to true
CLayerGroup::Render() should I merge those to for loops into one?

pLayer->Render() works?



(pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
evaluates to true 









CLayerGroup::Render() should I merge those to for loops into one?
1




UIElement.Rect(0)->m_Y != pRect->h, so any UI rect using m_HintCanChangePositionOrSize would be updated every frame (although, no UI element currently uses this hint).
Additionally, checks for changed rounding size and corners are added so UI elements are updated when those are changed.






