00:08 < bridge> c legit better than c++ 00:13 < bridge> I just have a better overview of what is actually happening in c and the goal is to optimize so it was pretty logical 08:47 < bridge> morning c99 enjoyers and others 09:09 < bridge> morning nix-collect-garbage enjoyers and others 09:19 < bridge> why not nobyC 09:20 < bridge> it secures your code with included code obfuscation mechanisms 09:23 < bridge> :cat_cracked_hehe: 09:25 < bridge> true 12:11 < bridge> heyyy grenade works xd 12:11 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354050150544314418/image.png?ex=67e3e0f8&is=67e28f78&hm=b875584d3b4200a03432904b1f86db6a2fa4fb04e444ffffcd918b84e5c2a044& 12:19 < bridge> int main() { printf("Test %s passed", test1); }; 12:19 < bridge> ```cpp 12:19 < bridge> int main() { 12:19 < bridge> printf("Test %s passed", test1); 12:19 < bridge> }; 12:19 < bridge> ``` 12:19 < bridge> ```c 12:19 < bridge> int main() { 12:19 < bridge> printf("Test %s passed", test1); 12:19 < bridge> }; 12:19 < bridge> ``` 12:19 < bridge> where did you get my code from??? 12:20 < bridge> You leaked :monkalaugh: 12:20 < bridge> You leaked your memory :monkalaugh: 12:21 < bridge> bad c99 BTW 12:21 < bridge> should me main(void) 12:22 < bridge> int main( int argc, char**argv) aah moment 12:22 < bridge> int main( int argc, char** argv) aah moment 12:23 < bridge> char**argv is valid 12:23 < bridge> 💀 12:24 < bridge> i would never. asan and ubsan are my brothers 12:24 < bridge> :kek: fair enough 12:31 < bridge> now i'll have to do more tests so i get more info about whats working and whats not xd 12:32 < bridge> @milkeeycat daily lang dev, trait checks 12:32 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354055256102932533/image.png?ex=67e3e5ba&is=67e2943a&hm=5b8c30a3fa73893d43405742aa505bb29e34a5387d54fb54d92eabaa6ec83efd& 12:32 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354055256652382280/image.png?ex=67e3e5ba&is=67e2943a&hm=b2b349e3d0a7288f8523cf55d89336585252d2d1eed63c98faa2916e6143a893& 12:32 < bridge> hi milkycat 12:32 < bridge> did you fix stackoverflow bug? 12:33 < bridge> what bug? send example xd 12:33 < bridge> ig didn't fix :lol: 12:33 < bridge> maybe i did 12:33 < bridge> idk i do lot of stuff xd 12:35 < bridge> also, I need a rust pro advice on how to organize structs, because my current way is bad and it doesn't work :feelsbadman: 12:38 < bridge> @milkeeycat wdym by organize structs 12:38 < bridge> project org is a bit subjective but overall simply separate into modules what makes sense 12:41 < bridge> @ryozuki 12:42 < bridge> ohh indeed 12:42 < bridge> we dont check if a type is sized yet 12:42 < bridge> xd 12:43 < bridge> @milkeeycat ty for testing 12:43 < bridge> added an issue 12:43 < bridge> xd 12:44 < bridge> programming langs have so many edge cases xd 12:45 < bridge> I remember when I sent in this chat a screenshot of stackoverflow when I made the same struct in my language xd 12:45 < bridge> lmao 12:46 < bridge> oh wow 12:46 < bridge> issues in github now have "type" 12:46 < bridge> in addition to labels 12:46 < bridge> https://github.com/ddnet/ddnet/issues/9882 12:46 < bridge> check, i added it here 12:55 < bridge> Im making a compiler backend and there're a few structs: 12:55 < bridge> - `Module` stores global types and functions 12:55 < bridge> - `Function` stores virtual registers & basic blocks 12:55 < bridge> - `BasicBlock` stores instructions which reference virtual registers & globals 12:55 < bridge> 12:56 < bridge> I'd like to have a function like `fn instr_bin(&mut self, lhs: Operand, rhs: Operand, kind: BinOp) -> RegisterId` on `BasicBlock` 12:56 < bridge> but this function would have to insert a new item in registers vec which is in `Function` but it's not possible because `Function` 12:56 < bridge> is already mutably borrowed to get `BasicBlock` from `Function`'s vector. 13:01 < bridge> You know what would solve this? A language that isn't so strict 13:01 < bridge> yep 13:01 < bridge> gimme my pointers :feelsbadman: 13:01 < bridge> "oh borrow checker, why dont you fucking borrow a chill pill, ive programmed lots in c i know what im fucking doing" 13:02 < bridge> then keep programming in C 😬 13:02 < bridge> because i wanted to learn rust 13:02 < bridge> but the borrow checker wanted to borrow my life 13:02 < bridge> but it was already mutably borrowed 13:02 < bridge> by me 13:02 < bridge> so it was just not happening 13:03 < bridge> arenas solved my problems with making compilers in rust 13:03 < bridge> pls do check this https://docs.rs/typed-generational-arena/latest/typed_generational_arena/ 13:04 < bridge> in my irvm backend a instruction returns a value, which is basically a instruction id iirc 13:04 < bridge> Why do you need to mutably borrow function? 13:04 < bridge> https://github.com/edg-l/irvm 13:05 < bridge> i was checking your code yesterday :kek: 13:05 < bridge> ```rust 13:05 < bridge> /// Terminator default to Ret. 13:05 < bridge> #[derive(Debug, Clone)] 13:05 < bridge> pub struct Block { 13:05 < bridge> // The id is always set, but this is needed because first we need to 13:05 < bridge> // insert the block into the arena to get an id. 13:05 < bridge> pub(crate) id: Option, 13:05 < bridge> /// Arguments are made to model phi nodes. 13:05 < bridge> arguments: Vec, 13:05 < bridge> /// The instructions within this block. 13:05 < bridge> instructions: StandardSlab<(Location, Instruction)>, 13:05 < bridge> /// the terminator of this block 13:05 < bridge> terminator: Terminator, 13:05 < bridge> last_instr_idx: Option, 13:05 < bridge> } 13:05 < bridge> ``` 13:05 < bridge> It's always borrow checker my beloved, until you need to use indexes for everything to work around the borrow checker. Smh 13:05 < bridge> ```rust 13:05 < bridge> pub fn instr_div( 13:05 < bridge> &mut self, 13:05 < bridge> lhs: &Operand, 13:06 < bridge> rhs: &Operand, 13:06 < bridge> signed: bool, 13:06 < bridge> exact: bool, 13:06 < bridge> location: Location, 13:06 < bridge> ) -> Result { 13:06 < bridge> if lhs.get_type() != rhs.get_type() { 13:06 < bridge> return Err(Error::TypeMismatch { 13:06 < bridge> found: rhs.get_type(), 13:06 < bridge> expected: lhs.get_type(), 13:06 < bridge> }); 13:06 < bridge> } 13:06 < bridge> 13:06 < bridge> let result_type = lhs.get_type(); 13:06 < bridge> let idx = self.add_instr(( 13:06 < bridge> location, 13:06 < bridge> Instruction::BinaryOp(BinaryOp::Div { 13:06 < bridge> lhs: lhs.clone(), 13:06 < bridge> rhs: rhs.clone(), 13:06 < bridge> signed, 13:06 < bridge> exact, 13:06 < bridge> }), 13:06 < bridge> )); 13:06 < bridge> 13:06 < bridge> Ok(Operand::Value(self.id(), idx, result_type)) 13:06 < bridge> } 13:06 < bridge> ``` 13:06 < bridge> this is implemented on block 13:06 < bridge> 13:06 < bridge> and in my case I have to insert an element in `Function`'s vector 13:07 < bridge> dont use vec 13:07 < bridge> use the arena kek 13:07 < bridge> https://tenor.com/view/anime-loli-gif-20946617 13:07 < bridge> just take a look at this repo 13:07 < bridge> it has module function block 13:07 < bridge> too 13:07 < bridge> i saw what you did 13:08 < bridge> and i could do like this 13:08 < bridge> i saw how you did 13:08 < bridge> But why is this not working, borrowck isn't that stupid. It can split borrow over disjoint fields of a struct 13:08 < bridge> @learath2 imagine u have a &mut Function 13:08 < bridge> and from the function you get a &mut Block 13:09 < bridge> its problematic 13:09 < bridge> @milkeeycat one strategy i also use often is to pass by value and return the value 13:09 < bridge> so the function owns it 13:09 < bridge> and returns when its done 13:10 < bridge> but i like my arenas better 13:10 < bridge> with the arena i have a id for a block and a operand can simply store the id of the block, the id of the instruction and the debug location 13:10 < bridge> without anu reference 13:10 < bridge> btw add globals 13:10 < bridge> kek 13:16 < bridge> Not visible for me using the old issue design. What problem do issue types even solve? We already have labels with the same semantic. 13:16 < bridge> idk ask m$$ xd 13:17 < bridge> i think issue types are org wide labels 13:17 < bridge> but u can only have 1 per issue I think 13:17 < bridge> > Some folks have tried to use labels in order to do this - however labels are tied to repositories and label syntax can drift across repos. This makes triaging issues across repos difficult. 13:17 < bridge> > 13:17 < bridge> > We believe that by creating a shared language to standardize work items across repositories we'll unlock reporting and automation use-cases. 13:18 < bridge> Seems pointless for DDNet 13:18 < bridge> https://github.com/github/roadmap/issues/837 13:21 < bridge> @remakepower even if there is a bug, making the text container update every frame is not the solution 13:23 < bridge> @remakepower even if there is a bug, making the text container update every frame is not the solution (context: ) 13:24 < bridge> but why? do you need another &mut borrow of Function? you can derive an &mut borrow of both the block and the registers vec just fine from that single function borrow 13:27 < bridge> i would need to see the code to know what problem he has 13:27 < bridge> but idk if u have q block borrowed u cant add another to the vec 13:27 < bridge> iirc 13:27 < bridge> problems like this 13:28 < bridge> with a index the borrows become like "atomic" and lot of problems disappear 13:28 < bridge> ```rust 13:28 < bridge> struct BasicBlock {} 13:28 < bridge> impl BasicBlock { 13:28 < bridge> fn bar(&mut self, regvec: &mut Vec) { 13:28 < bridge> regvec.push(10); 13:28 < bridge> } 13:28 < bridge> } 13:28 < bridge> 13:28 < bridge> struct Function { 13:28 < bridge> registers: Vec, 13:28 < bridge> blocks: Vec, 13:28 < bridge> } 13:28 < bridge> 13:28 < bridge> fn foo(func: &mut Function) { 13:28 < bridge> let block = &mut blocks[0]; 13:28 < bridge> block.bar(&mut func.registers); 13:28 < bridge> } 13:28 < bridge> ``` 13:28 < bridge> 13:28 < bridge> should(tm) be completely legal 13:28 < bridge> did u try it 13:29 < bridge> from the looks of it yeah 13:29 < bridge> https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=a2b211afeff5ebb56e48ee628140b8fb compiles fine 13:30 < bridge> ig with more code its harder 13:30 < bridge> Anyway, yeah without seeing more can't really say, but you can have nested and split borrows just fine 13:30 < bridge> There are some limitations to split borrows, like arrays and vecs, those you need to explicitly split borrow 13:31 < bridge> I only though of passing `Function` not it's field xd 13:31 < bridge> Passing the entire function deeper, yeah that would be an issue 13:32 < bridge> Do you need to though? 13:32 < bridge> probably no 13:32 < bridge> But I think it's still looks not cool, so I'll do something similar to what Ryo did 13:32 < bridge> borrow checker is complaining legitimately if you are passing down the entire function, splits are allowed because they are truly disjoint 13:33 < bridge> Why does it need access to the registers vec? Can't it just return a slice of registerids that can get pushed outside instead? 13:33 < bridge> can any other entities than players and projectiles pass through entities? 13:34 < bridge> can any other entities than players and projectiles pass through teles? 13:34 < bridge> can any other entities than players and projectiles pass through teles? 13:34 < bridge> No (but hooks can, but they are not entities) 13:35 < bridge> ah right 13:35 < bridge> not lasers? 13:36 < bridge> Hm, I actually don't remember 13:38 < bridge> isnt laser a cproj 13:39 < bridge> no xd 13:39 < bridge> its a CLaser 13:41 < bridge> lasers can tele too, I took a quick look 13:41 < bridge> ok thx 13:48 < bridge> :deen_star: 13:49 < bridge> 13:49 < bridge> another version controls config chad 13:49 < bridge> What's this? It said the file is built but it can't be found 13:49 < bridge> `[build] [1/3 0% :: 0.051] Generating debug/libddnet_engine_shared.a 13:49 < bridge> [build] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.14s 13:49 < bridge> [build] [3/3 66% :: 0.531] Linking CXX executable DDNet.exe 13:49 < bridge> [build] FAILED: DDNet.exe 13:49 < bridge> [build] C:\WINDOWS\system32\cmd.exe /C "cd . && C:\msys64\mingw64\bin\clang++.exe -g -mwindows @CMakeFiles\game-client.rsp -o DDNet.exe -Wl,--out-implib,libDDNet.dll.a -Wl,--major-image-version,0,--minor-image-version,0 && cd ." 13:49 < bridge> [build] clang++: error: no such file or directory: 'debug/libddnet_engine_shared.a'` 13:50 < bridge> dafuq is this behaviour xdd 13:50 < bridge> it makes sense if you look at the code but still xD 13:50 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354075073073516596/2025-03-25_13-49-59.mp4?ex=67e3f82e&is=67e2a6ae&hm=ae5bc882e6fd1aa31e633c869cc22b4c152eb586aed11c49aeac2ba11eaf926a& 13:53 < bridge> magic 13:58 < bridge> cant fix im sure maps use it 13:58 < bridge> Tower fantast OST 13:58 < bridge> Tower fantasy OST 14:05 < bridge> Corpse party OST 14:58 < bridge> i want to make capslock a usable bind, is having platform speciifc code okay since sdl doesnt support it? 15:09 < bridge> (need to disable capslock on press) 15:17 < bridge> I've been using capslock and suffering the consequences lol, this would be appreciated 15:18 < bridge> yeah i really want capslock its the only naturually reachable key which is unbound 15:18 < bridge> or just switch to ESDF like a true gamer 15:18 < bridge> that is true 15:18 < bridge> that would open up more keys 15:19 < bridge> i might do that 15:19 < bridge> but for now i want capslock usable 15:19 < bridge> gah i cant add more libraries 15:20 < bridge> https://tronche.com/gui/x/xlib/input/keyboard-and-pointer-settings.html 15:20 < bridge> you can control led and led mode 15:20 < bridge> idk if due to jank that actually controls capslock 15:33 < bridge> No, add support to SDL instead :justatest: 15:36 < bridge> sdl3 doesnt have that either 15:36 < bridge> it has a fake one which just reports false values 15:39 < bridge> Open issue or PR on SDL I'd say. I don't think the complexity of adding another library for this is worth it for DDNet when you can also just remap your keyboard anyway. 15:39 < bridge> sdl includes and links the relevant library for whatever video drivers are supported 15:40 < bridge> you can get away with just xlib but its ... long 15:42 < bridge> Yeah, so input features should also be implemented in SDL, that's what it's for 15:42 < bridge> 😭 15:42 < bridge> Yeah, so input features should also be implemented in SDL directly, that's what it's for 15:44 < bridge> 15:44 < bridge> 12643 [sweat_eo](https://cdn.discordapp.com/emojis/606572005227233355.webp?size=48&name=sweat_eo) 15:44 < bridge> [12643](https://cdn.discordapp.com/emojis/606572005227233355.webp?size=48&name=sweat_eo) 15:45 < bridge> Thanks, for opening an upstream issue 15:58 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354107168697352273/image.png?ex=67e41613&is=67e2c493&hm=c59066e604f3d989f593833d21f19c960069d002870968b9239a7b2b2557f25f& 16:01 < bridge> Isn't the entire point of SDL abstracting away stuff "managed by the OS"? 16:02 < bridge> yeah.... 16:02 < bridge> should i write "so why do you handle windows then" 16:04 < bridge> rebinding keyboard thru os is horribly jank though 16:04 < bridge> beacuse it effects the entire os 16:04 < bridge> and you do wnat some capslock functionality in game 16:04 < bridge> just when youre not in game without chat open 16:19 < bridge> ``` 16:19 < bridge> [build] [ 29%] Building CXX object CMakeFiles/engine-shared.dir/src/base/unicode/tolower.cpp.o 16:19 < bridge> [build] In file included from /mnt/data/Projects/ddnet/src/base/system.cpp:19: 16:19 < bridge> [build] /mnt/data/Projects/ddnet/src/base/system.cpp: In function ‘void net_addr_str(const NETADDR*, char*, int, bool)’: 16:19 < bridge> [build] /mnt/data/Projects/ddnet/src/base/system.cpp:1171:35: error: format not a string literal and no format arguments [-Werror=format-security] 16:19 < bridge> [build] 1171 | dbg_assert(false, error); 16:19 < bridge> [build] | ^~~~~ 16:19 < bridge> [build] /mnt/data/Projects/ddnet/src/base/system.h:87:60: note: in definition of macro ‘dbg_assert’ 16:19 < bridge> [build] 87 | dbg_assert_imp(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ 16:19 < bridge> [build] | ^~~ 16:19 < bridge> [build] At global scope: 16:20 < bridge> [build] cc1plus: note: unrecognized command-line option ‘-Wno-nullability-completeness’ may have been intended to silence earlier diagnostics 16:20 < bridge> [build] cc1plus: some warnings being treated as errors 16:20 < bridge> [build] make[2]: *** [CMakeFiles/engine-shared.dir/build.make:929: CMakeFiles/engine-shared.dir/src/base/system.cpp.o] Error 1 16:20 < bridge> [build] make[2]: *** Waiting for unfinished jobs.... 16:20 < bridge> [build] make[1]: *** [CMakeFiles/Makefile2:327: CMakeFiles/engine-shared.dir/all] Error 2 16:20 < bridge> [build] make[1]: *** Waiting for unfinished jobs.... 16:20 < bridge> [build] [ 29%] Built target glew 16:20 < bridge> ``` 16:20 < bridge> 16:20 < bridge> getting this on master :justatest: 16:20 < bridge> dbg_assert_imp is wrong 16:21 < bridge> you need to change it or add atleast 1 arg to dbg_assert 16:22 < bridge> i didn't do anything 16:22 < bridge> this is master 16:22 < bridge> your compiler is probably being... strict 16:22 < bridge> for some reason 16:22 < bridge> if you comment out the lines it will compile 16:23 < bridge> maybe a new warning, happens in c/c++ all the time 16:23 < bridge> nvm fixed it 16:24 < bridge> nix assumed gcc when i only has clang but clang still symlinked to gcc families and it is just all messed up? i'm guessing. 16:24 < bridge> nvm 16:24 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354113778144379044/image.png?ex=67e41c3a&is=67e2caba&hm=48035a64c843410416b3f09c3636a3498b0de4c2d573ead3c6bbae2e836146b0& 16:24 < bridge> @blaiszephyr what does this do 16:24 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354113794435055626/image.png?ex=67e41c3e&is=67e2cabe&hm=b1b3728f8efc53076ca213086daf3346e10d11b365dfd7ddc76b7cf1b9436985& 16:25 < bridge> it should be vaopt anywya for standards sake right 16:29 < bridge> nix by default has an stdenv within a shell 16:29 < bridge> 16:29 < bridge> this overrides it to use clang 16:29 < bridge> https://ryantm.github.io/nixpkgs/stdenv/stdenv/ 16:29 < bridge> ok 16:29 < bridge> thanks 16:29 < bridge> btw are you on x or wayland 16:29 < bridge> That's C++20 16:29 < bridge> are we not there yet 16:29 < bridge> hyprland/wayland, i do have xwayland for certain apps tho 16:30 < bridge> isnt ddnet still on C++11 ? 16:30 < bridge> ah nvm then 16:30 < bridge> i feel like ive seen quite a cpp20 things 16:30 < bridge> 17iirc 16:30 < bridge> afair there was a PR to upgrade to C++17 16:30 < bridge> not sure if it went through tho 16:31 < bridge> 😬 maybe i'll just switch to an x session for a moment. the photopea thing i've been packaging had a ozone hint i wonder if it breaks on x 16:31 < bridge> ozone_wayland moment? 16:31 < bridge> ozone/wayland moment? 16:31 < bridge> ye 16:31 < bridge> i use wayland so i'm just packaging it for myself 16:31 < bridge> you can just test if it breaks by setting NIXOS_OZONE_WL to 0 iirc 16:31 < bridge> you can just test if it breaks by setting NIXOS_OZONE_WL to 0 ig 16:32 < bridge> #6552 16:32 < bridge> https://github.com/ddnet/ddnet/issues/6552 16:32 < bridge> i actually hardcoded the chromium args so it always defaults to wayland without any env 16:32 < bridge> so i'm just trying to see if it break on x 16:32 < bridge> :nouis: 16:35 < bridge> when will applications learn 16:35 < bridge> to just use xdg_session_type 16:35 < bridge> XDG_SESSION_TYPE=x11 16:35 < bridge> i mean chroimum probably does that. i didn't code the native part 16:35 < bridge> just making sure 16:35 < bridge> chromium doesnt do that 16:36 < bridge> anyway it does work on X 16:36 < bridge> anyway it does work on x 16:36 < bridge> `chromium --enable-features=UseOzonePlatform --ozone-platform=$XDG_SESSION_TYPE $@` 16:36 < bridge> no idea way but it launches fine 16:36 < bridge> no idea why but it launches fine 16:37 < bridge> `--ozone-platform-hint=auto --enable-wayland-ime` i actually hardcoded these in 16:39 < bridge> Main 16:47 < bridge> Main 16:48 < bridge> Niam 16:51 < bridge> * [ ] Tested the change ingame 16:51 < bridge> 16:51 < bridge> oh lord! 16:52 < bridge> is this more bot client shit 16:52 < bridge> nah 16:52 < bridge> its tee position of your dummy shown on the right side just like your current position is 16:52 < bridge> but it adds weird sprites to it 16:53 < bridge> oh the PR history shows he had a custom dummy command 16:53 < bridge> Its a cheat thi 16:53 < bridge> oh the PR history shows he had a custom dummy command that he removed 16:53 < bridge> 16:53 < bridge> It modifies the dummy input xd 16:53 < bridge> Its a cheat tho 16:54 < bridge> yeah i just saw 16:54 < bridge> lmao 16:54 < bridge> this has to be the third person PR'ing his cheats accidentally 16:55 < bridge> i dont think this is cheats 16:55 < bridge> this is just more ui for dummy 16:55 < bridge> apart from that, idk what thats doing here 16:55 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354121534238625802/image.png?ex=67e42374&is=67e2d1f4&hm=afb652d4705fa2ba27b7feec6013ec92d98b94bc78be794a32771fab7716a96c& 16:55 < bridge> Yea that's a cheat xd 16:55 < bridge> oops 16:56 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354121654841643100/image.png?ex=67e42390&is=67e2d210&hm=115f0565cd718ec04b39ae3cacaef946c3b89ddb20b434e26acf28b5cb498e73& 16:56 < bridge> wait till he finds out how to delete history 16:56 < bridge> Solly stop posting cheats in dev chat 16:56 < bridge> he'll be unstoppable 16:56 < bridge> im so confused about this roundbaout way of cheating 16:56 < bridge> its to flex how good they are with dummy to their friends 16:57 < bridge> this looks like to obscure the fact that they have a way to control direction 16:57 < bridge> "OmG ThIs GuY JuSt TriPlEPSEuDoCaRriEd Me ThrOugH StrOngHolD" 16:58 < bridge> i diun do nu-in 17:00 < bridge> new tile idea: kill block that only kills dummies 17:00 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354122878924357632/2025-03-25_23-59-11.mp4?ex=67e424b4&is=67e2d334&hm=4e54dac33f6092156a1cbdf60ab9cb9cdf681b2ebf7715de20a30d06ff7b3218& 17:00 < bridge> useful for dummy psudeo chuds and dummy maps 17:01 < bridge> get clamped 17:01 < bridge> no :( 17:01 < bridge> I don't like clamp 17:01 < bridge> real properties of someone would ask their owner if they may speak at all. 👀 17:01 < bridge> It's running my performance 17:02 < bridge> you prefer this? https://discord.com/channels/252358080522747904/757720336274948198/1353892578113884220 17:02 < bridge> *ruining 17:03 < bridge> Big T making the most borderline client out there <3 17:03 < bridge> Or is this a DDNet client bug that I'm not aware of? 17:04 < bridge> is the top left with scale mouse position 17:04 < bridge> tw sends mouse pos as int, makes the game unplayable for me (i use low mouse distance) 17:05 < bridge> top left regular player, i hacked server to send targetpos * 1000, bottom right is spec 17:05 < bridge> oke 17:06 < bridge> i won't pr anyway 17:06 < bridge> so teero doesn't get performance issues 17:06 < bridge> if anyone actually wants to fix it feel free to do so 17:19 < bridge> o;< 17:19 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354127667292540928/image.png?ex=67e4292a&is=67e2d7aa&hm=e31b15c0f31f1476ee9fab14c167662646e76702313b88dd07b811ba0ec88648& 17:32 < bridge> can we merge #9898? :heartw: 17:32 < bridge> https://github.com/ddnet/ddnet/pull/9898 17:57 < bridge> finally a new ddnet-rs update 18:02 < bridge> XD 18:02 < bridge> I remapped capslock to esc 18:02 < bridge> way better 18:03 < bridge> i dont know why sdl is against it 18:03 < bridge> ddnet is against it cuz platform dependent code is bad, but thats why sdl exists 18:06 < bridge> Removing bound checking would make ddnet physics 100% faster 18:06 < bridge> I mean everything is getting clamped 18:06 < bridge> It is so bad 18:06 < bridge> I don't think I will support this bs 18:07 < bridge> maploader will insert a barrier around the map 18:08 < bridge> thank you :heartw: 18:24 < bridge> beautiful, now we can add doors to the editor show entities feature 😊 18:25 < bridge> yes! 18:26 < bridge> as a non mapper i appreciate this feature 18:26 < bridge> i dont understand how doors work 18:43 < bridge> :D 18:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354148810229813311/image.png?ex=67e43cdb&is=67e2eb5b&hm=df7fe9110b14e6159939462c3f2c251b6e859b71f914d6aeb3a314e66163928b& 18:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354148810707701881/image.png?ex=67e43cdb&is=67e2eb5b&hm=f6795a6e005284e660a4d5443f683c7394dc47a09fa8bc673c316b04d75ae934& 18:44 < bridge> no user vars cuz cheaters ): 18:44 < bridge> i hope people cant spoof communities 👀 18:46 < bridge> tbf keyboards shouldn't even come w capslock 18:46 < bridge> i rebind mine to fn 18:46 < bridge> I Use Capslock To Make The First Letter Capital, Fite Me And My Ineffecient Typing Of Capitals 19:22 < bridge> hmm_no 19:28 < bridge> Do we have a js tee renderer that supports coloring somewhere? 19:39 < bridge> is the ddnet.org getting a rework?? :o 19:41 < bridge> pretty sure thats related to discord rich presence 19:41 < bridge> aww 19:41 < bridge> @sans._. didn't you work on smith like that ? 19:41 < bridge> @sans._. didn't you work on smth like that ? 19:41 < bridge> No, some internal tooling 19:41 < bridge> Hacks, I knew it 19:42 < bridge> bot clients arent allowed on ddnet sorry 19:42 < bridge> It's the audit tool for moderators, so we can see who is doing what better 19:42 < bridge> Oh Lord :HUHH: 19:42 < bridge> Stop working on it pls 19:42 < bridge> If we already have a renderer I want to add a small tee next to the mod names for quick access 19:42 < bridge> melon u will be fine 19:42 < bridge> It's broken for good, not worth it trust 19:42 < bridge> melon you join clb once 19:42 < bridge> and you will be top mod 19:42 < bridge> moderators take notes 19:43 < bridge> if you wanna be the top mod join clb 19:43 < bridge> NO YOU DON'T UNDERSTAND THEY CAN SEE THE COMMANDS I DID 19:43 < bridge> :Aware: 19:43 < bridge> gg 19:43 < bridge> Can confirm 19:46 < bridge> But yeah iirc sans had something, tho it may have been typescript 19:46 < bridge> Not js 19:46 < bridge> I bet you use `kill_pl all` all the time 19:46 < bridge> typescript is fine too 19:46 < bridge> @sans._. wakey wakey admin requires your assistance :cat_woah: 19:54 < bridge> i swear he’s posted it like 3 times 19:54 < bridge> https://github.com/Sans3108/DDNet/blob/master/src/classes/skins/TeeSkin6.ts 20:04 < bridge> okay 20:04 < bridge> ah fuck this xdd 20:04 < bridge> discord is messing up my benchmarks 20:04 < bridge> this is bad 20:04 < bridge> bye 20:05 < bridge> with all these new updates, is there anything i need to do in order to assist in anything? 20:27 < ws-client> yes pls fix this new issue https://github.com/ddnet/ddnet/issues/1610 21:04 < bridge> 🥔 21:04 < bridge> https://github.com/AlexIsTheGuy/TeeAssembler-2.0 21:04 < bridge> 21:04 < bridge> I helped make it correct 21:04 < bridge> 21:04 < bridge> 21:04 < bridge> I helped make it correct 21:04 < bridge> #9901 is now also ready 🥳 21:04 < bridge> https://github.com/ddnet/ddnet/pull/9901 21:06 < bridge> commits not squashed 🙂 21:07 < bridge> why do we still tell people to do that 21:07 < bridge> there is a button when you merge that lets you squash them 21:07 < bridge> idk tbh 21:07 < bridge> when you use the button it doesnt make the commit for someone who merged too 21:07 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354185059720237167/image.png?ex=67e45e9d&is=67e30d1d&hm=37d826a8800a3348a4f65c6e810ac586d12a66d5b94a814d77ebcb2b1361a06a& 21:08 < bridge> yea and commit history would be less spammed 21:08 < bridge> without the "Merge pull request #" 21:08 < bridge> no that's good 21:08 < bridge> you want those 21:08 < bridge> :justatest: 21:09 < bridge> so my basic git bash knowledge was for nothing?? 21:09 < bridge> wtf did my rebase do, what 21:09 < bridge> nah 😦 21:09 < bridge> did you look why the visual bug with zoom out happens? 21:10 < bridge> it doesnt happen with hookline so that might help 21:12 < bridge> hookline doesn't have an outline, I know why this happens 21:13 < bridge> the game doesn't positions between inside and outside goes under a pixel and we don't have anti aliasign enabled 21:13 < bridge> let me check if this fixes it 21:13 < furo> @totar I think it's because that feature is not available for merge queue. 21:16 < bridge> @kebscs this is where it starts happening with 8x anti aliasing ... 21:16 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354187117835845712/screenshot_2025-03-25_21-15-28.png?ex=67e46088&is=67e30f08&hm=1cbe447de69578925521b10cffcf2642005ed27073f7d3dc8e3f0ae6cbc0bb6d& 21:17 < bridge> what am i looking at 21:17 < bridge> at least I believe so :justatest: 21:17 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1354187468055773338/Unbenannt.PNG?ex=67e460db&is=67e30f5b&hm=5c40ea08ac0252acc051c3afd917d760625c1096c7cf4033d336ed908becb4c2& 21:17 < bridge> oh 21:17 < bridge> funny doors 21:17 < bridge> i guess ddnet's graphics too havey for antialiasing 21:17 < bridge> ^why is the outline not rendered kebs? bug report is out 21:17 < bridge> thats why disabled 21:18 < bridge> i guess ddnet's graphics too heavy for antialiasing 21:18 < bridge> Not with the merge queue 21:19 < bridge> and since youre the speedup guy 21:19 < bridge> why are they so have to render 21:20 < bridge> why are they so heave to render 21:20 < bridge> why are they so heavt to render 21:20 < bridge> why are they so heavy to render 21:20 < bridge> even enabling ingame entities in editor isnt that laggy 21:20 < bridge> do you use vulcan backend? 21:20 < bridge> ye 21:20 < bridge> yes 21:20 < bridge> if not, because they render a sprite for every tile which is then rotated 21:21 < ChillerDragon> furo: irc pog 21:21 < bridge> otherwise it's a tile overlay, with 2 text overlays which is heavy 21:21 < bridge> text - unfortunately - isn't very liked by teeworlds rendering 21:22 < bridge> cant you make a text contianaer :) 21:23 < bridge> Entities text rendering is already using a similar mechanism AFAIK 21:23 < bridge> text conditioner 21:23 < bridge> im on vulcan and even with single number is worse than other layers 21:26 < bridge> idk, I already removed the background there 21:26 < bridge> I am currently working on refactoring the maplayers anyway, but I still have a quad couting problem 21:29 < bridge> in editor or what? 21:29 < bridge> ingame it should be fast 21:30 < bridge> yes editor 21:30 < bridge> @robyt3 or others can you help me a bit with rendering logic? 21:30 < bridge> I got as feedback: 21:30 < bridge> > Add a quad container containing two sprites instead of creating and uploading two quad items for every laser door handle every frame. 21:30 < bridge> ``` 21:30 < bridge> Graphics()->TextureClear(); 21:30 < bridge> Graphics()->QuadsBegin(); 21:30 < bridge> 21:30 < bridge> // do outline 21:30 < bridge> Graphics()->SetColor(OuterColor); 21:30 < bridge> float Width = 8.0f; 21:30 < bridge> IGraphics::CQuadItem OuterRect(Pos.x, Pos.y, 2 * Width, 2 * Width); 21:30 < bridge> Graphics()->QuadsDraw(&OuterRect, 1); 21:30 < bridge> 21:30 < bridge> // do inner 21:30 < bridge> Graphics()->SetColor(InnerColor); 21:30 < bridge> Width = 6.0f; 21:31 < bridge> IGraphics::CQuadItem InnerRect(Pos.x, Pos.y, 2 * Width, 2 * Width); 21:31 < bridge> Graphics()->QuadsDraw(&InnerRect, 1); 21:31 < bridge> Graphics()->QuadsEnd(); 21:31 < bridge> ``` 21:31 < bridge> yeah editor is really slow 21:31 < bridge> @robyt3 or others can you help me a bit with rendering logic? 21:31 < bridge> I got as feedback: 21:31 < bridge> > Add a quad container containing two sprites instead of creating and uploading two quad items for every laser door handle every frame. 21:31 < bridge> ```C++ 21:31 < bridge> Graphics()->TextureClear(); 21:31 < bridge> Graphics()->QuadsBegin(); 21:31 < bridge> 21:31 < bridge> // do outline 21:31 < bridge> Graphics()->SetColor(OuterColor); 21:31 < bridge> float Width = 8.0f; 21:31 < bridge> IGraphics::CQuadItem OuterRect(Pos.x, Pos.y, 2 * Width, 2 * Width); 21:31 < bridge> Graphics()->QuadsDraw(&OuterRect, 1); 21:31 < bridge> 21:31 < bridge> // do inner 21:31 < bridge> Graphics()->SetColor(InnerColor); 21:31 < bridge> Width = 6.0f; 21:31 < bridge> IGraphics::CQuadItem InnerRect(Pos.x, Pos.y, 2 * Width, 2 * Width); 21:31 < bridge> Graphics()->QuadsDraw(&InnerRect, 1); 21:31 < bridge> Graphics()->QuadsEnd(); 21:31 < bridge> ``` 21:31 < bridge> it uses the legacy vanilla way to render stuff by creating tile per tile and upload it every frame 21:32 < bridge> I mean I could put them in an array 21:32 < bridge> Check the other code using `CreateQuadContainer` 21:33 < bridge> The idea is the create a container only once in `OnInit`, then later you can reuse the same quaditems (the have a constant size) and only change their position 21:33 < bridge> The idea is the create a container only once in `OnInit`, then later you can reuse the same quad items (they have a constant size) and only change their position 21:36 < bridge> There already is an items quad container, can I reuse it or do I need a new one? 21:36 < bridge> Do you happen to know how we make this work for gl1 btw? 21:37 < bridge> yeah, seems fine to put all input the existing container 21:37 < bridge> yeah, seems fine to put all the existing container 21:37 < bridge> yeah, seems fine to put all into the existing container 21:37 < bridge> it simply buffers the quads and renders them like other stuff in gl1 21:43 < bridge> Maybe someone knows how to run mariadb on linux, or how to fix these errors? I just don't understand why it doesn't work for me 21:43 < bridge> 21:43 < bridge> ```md 21:43 < bridge> × mariadb.service - MariaDB 11.7.2 database server 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB. 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [Note] InnoDB: log sequence number 0; transaction id 3 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [Note] Plugin 'wsrep-provider' is disabled. 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [ERROR] Could not open mysql.plugin table: "Unknown storage engine 'Aria'". Some plugins may be not loaded 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [ERROR] Failed to initialize plugins. 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc mariadbd[60191]: 2025-03-25 22:38:20 0 [ERROR] Aborting 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc systemd[1]: mariadb.service: Failed with result 'exit-code'. 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc systemd[1]: Failed to start MariaDB 11.7.2 database server. 21:43 < bridge> Mar 25 22:38:20 filoqcus-pc systemd[1]: mariadb.service: Consumed 177ms CPU time, 358.2M memory peak. 21:44 < bridge> ``` 21:52 < bridge> @robyt3 how do I handle different colors there? 21:54 < bridge> Color should always be white in `OnInit`, then later set the color to what you want when rendering from the sprite 21:54 < bridge> Same as the other laser head sprites 21:55 < bridge> Color should always be white in `OnInit`, then later set the color to what you want when rendering from the quad container 21:57 < bridge> even better, i can use one single quad and rescale it, same is done for the other one as well 22:11 < bridge> last thing I don't understand is why the sprites are always rendered in the middle why QuadsEx is not 🤷‍♂️ 22:11 < bridge> last thing I don't understand is why the sprites are always rendered in the middle and QuadsEx is not 🤷‍♂️ 22:13 < bridge> The `QuadsDraw` function draws quads centered at the position whereas `QuadsDrawTL` draws top-left aligned, but I don't like `QuadsDraw` because it modifies the argument being passed in 22:13 < bridge> I used RenderQuadContainerEx now 22:14 < bridge> for me this is all purple magic 22:31 < bridge> ```C++ 22:31 < bridge> 606 | m_DoorHeadOffset = Graphics()->QuadContainerAddQuads(m_ItemsQuadContainerIndex, &brick, 1); 22:31 < bridge> | ~~~~~ 22:31 < bridge> | Brick 22:31 < bridge> ``` 22:31 < bridge> Really 😠 🧱 22:38 < bridge> @ryozuki in the end I changed `Operand` to this 22:38 < bridge> ```rust 22:38 < bridge> pub enum Operand { 22:38 < bridge> Global(GlobalPtr), // Rc 22:38 < bridge> Local { instr_id: InstructionId, ty: Ty }, 22:38 < bridge> Param(ParamPtr), // Rc 22:38 < bridge> Const(Const), 22:38 < bridge> } 22:38 < bridge> ``` 22:38 < bridge> and now I don't need to to borrow `Function` 22:42 < bridge> @hectavoxel any idea for the other laser heads? I don't know, we could change the grabber, as it's head is never shown anyways (or is it?) and the shotgun maybe, but idk 22:44 < bridge> nice like i do kinda 22:45 < bridge> I didn't want to make Param variant look like `(usize, Ty)` because a parameter is already stored in `Function` and I didn't want to copy it xd 22:56 < bridge> hmm, but this way I can't easily insert an instruction in specific location 23:54 < bridge> gn other and others 23:56 < bridge> what if im not other 23:58 < bridge> gn other, others and the rest