How to Make Multiplayer Online Games

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[afterschoolchan] I am plebs thank you my lord [nicesoftware] Tell me more about your IDE [idkncc] pog [artemchan] ffs is with the keyboard question? [iselgrey] now I'm afraid to know about the keyboard [linuxseller] Hurray, I can type [cordaincords] bomberman 3d Pog [cephon_altera] you managed to get it to 40 FPS, what did you change? [in2077_] pog [cotoli] Hi there! Did you manage to fix your FPS problems? [alexandersupertramp29] can shaders be used here [lucas_t_a] wtf it is fast now? [kaktu8s] e [afterschoolchan] Porthnite [valseki] @AlexanderSupertramp29 no [cordaincords] ad-hoc multi? [theentropyshard] @AlexanderSupertramp29 everything is rendered on a cpu, shaders make no sense in here [g4sacs] 30 FPS now RyuChamp RyuChamp RyuChamp [nuclearshadow14] @alexandersupertramp29 shader effects can be implemented directly on cpu since it's cpu renderered [melar666] use tcp Right [zkronk] how hard can it be? [cactusvacuum] sounds fun [victor_vickie] Didnt you make a chat app in rust [afterschoolchan] Websocket [nxthor] take chat, and replace tcp with udp :) [g4sacs] Websocket Server ? [matt_j3] There are some good WebRTC wrappers out there [dfl0__] true because future features rely on that [shitman_pog] true [g4sacs] True [sn0wcr4sh_] damn [rajarshikhatua100] if you heard that's probably wrong, unless it's GOD [dfl0__] this is going to be such a good watch because i have never done networking either [vinostry] Feels like cap lowkey [shpirtman] Just press «add multiplayer» in Unity Kappa Kappa [magikmw] This is easly solved by making all your games in a client server model even if it's single player only Kappa [cordaincords] tsodin.io [victor_vickie] Io game [g4sacs] Sounds good [iselgrey] good old agario [stausee1337] stausee1337 subscribed at Tier 1. They've subscribed for 8 months! Tsoding making a .io game [victor_vickie] Command pattern? [mrbuttlicker] nymnHUH [abraomd] No touch? [theentropyshard] stick of joy LUL [brambasiel] Kappa [pigm0] network packet , is a kind of input [brambasiel] you ruined the word joystick for me [asirgi_remyga] this much i understand [g4sacs] Would you run the Server or should guys spawn that when they want to play ? [cpiber] @pigm0 but it's asynchronous, unlike the other inputs [mopcpayc] @Tsoding HeyGuys [mattanimation] howdy howdy [theentropyshard] scientists in 80's designing internet: [pigm0] @cpiber for the server point of view it's not async [shitman_pog] Stadia [tw_int] Just for tsofing's laptop [dfl0__] tsoding is about to reinvent the web again [theentropyshard] clown-circus architecture lesgo [zulleyy3] multithreading with message passing [theentropyshard] polymorphism woah [magikmw] This only breaks down if you're trying to do anything "real time". Latency is nontrivial in mp. [namanpurii] stateful server oh no [rajarshikhatua100] power ~ infinity™ [marcio_neto] And you know what? You can get very far with this simple solution! I actually run something like that in prod [afterschoolchan] Server with Rust [abraomd] But the server will hold only the state, the engine will run on the client [dfl0__] so will each clients unique “session” be stored with cookies or something? [magikmw] Server client and libs can be one cargo workspace [shootthemz] or starting new app from the terminal [nigelwithrow] this stream is going to be very educational [magikmw] Also security / cheating prevention comes to mind as a nontrivial issue you don't have in singleplayer [kselnaag] NPU now [iselgrey] @AfterSchoolChan client to rust server. Or "clitorus" if you will [g4sacs] All conncected system are one system [luisrebaixado] with CUDA you can make programs to run GPU and get back to cpu [butterscotchtoffee] OSFrog [pigeonguidedmissile] send over the diff [g4sacs] Game State, Client state [afterschoolchan] State validation? [codecat69] !today [dfl0__] that way no perceivable input lag? [butterscotchtoffee] !today urmom [rajarshikhatua100] \(◎o◎)/ [jiko_] !today [keshancs] that mfcka is cheating Kappa [alymikky97] what a bitch holding the key [marcio_neto] Nice, we’ve just invented event sourcing from scratch [maxremzii] That KeyF***er is holding his mother to the right [graatagold] couldn't this lead to drift? [abraomd] And if your connection is dows people will call you a damn camper [saltyarch] So maybe do peer to peer? And not proxy it over server.. Just send it to all connections ? [mopcpayc] SeemsGood [asirgi_remyga] yes sir [matt_j3] I've built a multiplayer engine that runs native as well as Webassembly, but as a hobby [marcio_neto] I works with something close to that. This works very well. [shootthemz] cant we somehow just find the differences in state and just update that? [zkronk] vulnerable for cheating? [maxremzii] SeemsGoodmakes sense to me [nytedoom] Client side prediction because of lag (sending velocity not position) [dhontecillas] i think it is .. there was a paper long long time ago called something like "dead recokining" [marcio_neto] *work [pigeonguidedmissile] sounds like a plan, no idea if that's "the right way" [magikmw] I'm not a pro, but from what I've learned it's the basics [usiten] Depends on the application you are making, should work for your use case but opens the door too local manipulation of memory [sn0wcr4sh_] i have no fkn clue but sounds like it works [dfl0__] we shall find out [butterscotchtoffee] tsodinZezin tinytofuLurk tsodinZezin [g4sacs] Good start [little_orkman] private/public state? [alymikky97] @sn0wcr4sh_ yup lets see xdd [dfl0__] it sounds like client to client would also be possible, but that seems more convoluted [iselgrey] at some point, instead of constantly broadcasting the actions of everyone to compute, you may just broadcast the state anyway? [magikmw] Sending the entire state to clients is prone to cheating tho, if the entire state shouldn't be known to all [alexandersupertramp29] you will write server in javascript? [theentropyshard] GameOfCircle [ezxgh] !today [g4sacs] Server in golang ? [abitranis] I this case the render's from client side? [g4sacs] Or in ts to reuse Code ? [wer1346] How about throwing away that shit and starting creating a porn site [nxthor] MGP confirmed [ialiiulelo] There's this rollback multiplayer that Slippi made for Smash Melee that's super solid. I don't know if it's possible to find info on it [alymikky97] is C suitable for this stuff ? [maxremzii] Eventually you will upload it to urmom? [pigeonguidedmissile] @alymikky97 it's a general purpose language.. so yes, you can build it in scratch if you want [cotoli] For new projects, nah [marcio_neto] ES here [ialiiulelo] It tends to be ES but not all [elfjsf] A lot of staff still on commonjs [fabiohbfreitas] still a lot o projects on commonjs Sadge [shpirtman] I wouldn't know, I'm not a web dev. Oh, wait, I am, but I do backend Kappa Kappa [stainlesssteel45] it's hard to migrate an old application to modules so primarly new applications [kikos_0] i think even react doesn't come in ESM yet [pigeonguidedmissile] but we need to fill the sprint with random crap at work Kappa [shitman_pog] tea ass PepeThink [qnioa] what do you work with? i mean, i guess you're a programmer, but more specifically @Tsoding [g4sacs] I wrote js but the rabbit hole does Not interrest me Just want to create cool UI LUL [fabiohbfreitas] @pigeonGuidedMissile - [ ] fill backlog [afterschoolchan] Jai ass [mopcpayc] le server mon ami, less goo! [kselnaag] J ass [ivantheragingpython] yo wassup [matt_j3] Try to have your server + client running in the same app, talking to each other with a websocket to itself, so you're not running two things at once [shpirtman] !still xhtml [mrbotka] xhtml in 2023 KEKW [codecat69] !still 2023 [mrbotka] 2023 in 2023 KEKW [fabiohbfreitas] Pog [stainlesssteel45] таґі [dfl0__] vs code can do that in 2-3 business days [afterschoolchan] Vim for today? [theentropyshard] !still help I am still [mrbotka] help I am still in 2023 KEKW [mopcpayc] can yo xbex du dat! [alymikky97] !tab yea [mrbotka] @alymikky97 command `tab` does not exist [mrbuttlicker] docnotL ayayaya [ryuktan] That, aj [ryuktan] That and much more [ialiiulelo] i'm a layman so I use VSCode please don't beat me [idkncc] npm ls [pigeonguidedmissile] with npm that would be a forest KEKW [abraomd] Definelty have some leftPad around somewhere [skul_d] KEKW [idkncc] pog [sn0wcr4sh_] lol [crasty] --all [xhausting_] --all [ialiiulelo] you ask too many questions for a JS developer [mryasser2194] depth ? [bigardidev] hello my man, may i ask what's the prototype all about? i just got into the stream [g4sacs] what the hell [skul_d] LUL [fabiohbfreitas] KEKW classic [saltyarch] LUL [mopcpayc] NotLikeThis [alymikky97] xdd [pigeonguidedmissile] KEKW [grinsepilz] alles scheiße [idkncc] LUL [rndm_dev] hidden? what do you mean hidden? Kappa [nightmarerookie] LUL [cactusvacuum] sneaky bastards LUL [dfl0__] so shameless omg [guamsoup] sneaky jay azz devs [afterschoolchan] has-symbol lol [sama004] it should be npm forest [kikos_0] no i think it's too noisy otherwise that's only one dependency [marcio_neto] Now check the size of node_modules lol [xhausting_] need to support node 0.4 man [matt_j3] npm barf [theentropyshard] url-join 4.0.1 kekw [skul_d] because for a normal project it would hang your cpu LUL [tasercake] you don’t wanna know MaxLOL [crasty] as a js dev, i never use this, as I would be in even deeper shame than I am now in LULW [ivantheragingpython] webdaps [butterscotchtoffee] OSFrog [shivanshukantprasad] do a wc -l ? [bigardidev] this node_modules has at least 10gb in size [x_egoist] no sir, nothing here other than 2 dependencies. nothing to see here. [mopcpayc] NPeepeeM [timadiss] tweet it NOW [pigeonguidedmissile] 2gb node_modules directory, project is not even started KEKW [ryuktan] Ansiety max level [cactusvacuum] it's a feature (protecting you from reality) [stainlesssteel45] javascript llvm backend when [g4sacs] Buy more HDD when using js [ialiiulelo] @pigeonGuidedMissile actually hello world is being logged Kappa [crasty] @cactusvacuum yeah, saving you from mental trauma [afterschoolchan] All those gigabytes are just for configuration files. The content is no more than a function [mryasser2194] is it a joke if its true? [theentropyshard] constantly watching js [soma_san2020] ei bro how are you ? [cheaplean] chat yall are so smart, dont know what any of yall are saying NotLikeThis LUL :) [ryuktan] Put that generated .js files in another fólder, pls [sir_xin] sir_xin subscribed with Prime. [darekry] sending game state to clients sounds like hot reloading... [clouddjr] If someone told me I would see "node_modules" dir on your stream, I wouldn't believe them [pigeonguidedmissile] @IaliIulelo it's all a conspiracy by the RAM manufacturers. they need to sell more [fabiohbfreitas] nice [theentropyshard] @clouddjr he is webdev now [cactusvacuum] ship it [bigardidev] isn't it wss? [bigardidev] for web socket secure [g4sacs] Webdevs does new node websocket not build in? [idkncc] we don't need security [luisrebaixado] browsers now have kinda of an UDP with HTTP3, i think its called webtransport idk? [xhausting_] @types [aspectro2] @types/ws [daveywobbles] @types/ws [kikos_0] it is already typed i think [bigardidev] he don't trust us [alby407] Wait, what year is it? Tsoding is using Jay Ass?? [bigardidev] FeelsBadMan [sir_xin] @BigardiDEV That's just the name of the protocol, similar to how https is just called http generally [reeeee_tech] !today [dfl0__] types [cococov] S [dfl0__] not typed [marcio_neto] little typo [いせええゔあ (iseeeva)] types [mryasser2194] types not typed [ialiiulelo] @pigeonGuidedMissile Breidan Eich swimmin in pools full of cash [bigardidev] @sir_xin thanks [mrbuttlicker] tsodinTriggered [cryptoahash] Hello Hello MrZozin [theentropyshard] @Alby407 2024 spares no one [cococov] delete the ass [cococov] as [bigardidev] @cococov D: [mrbuttlicker] @cococov nymnHUH [alby407] tsodinCry [bigardidev] i hate this undefined so much [mopcpayc] le socket! j'aime! [fabiohbfreitas] 42069 [afterschoolchan] 6942 [the_oronco] port 42069 [soma_san2020] do you a debagging ??' [sama004] this guy uses semicolons in js [theentropyshard] @sama004 i tell you more: he uses semicolons is python [bigardidev] @sama004 as any good programmer Kappa [elfjsf] type: "module" in package.json [sockthedev] "type": "module" in your package.json [ivantheragingpython] mjs [sockthedev] to make it default treat js as esm [leiswatch] mjs extensions [arsem] michael jackson script [marcio_neto] type: “module” in package.json [idkncc] cjs mjs js [sn0wcr4sh_] @arsem lol [g4sacs] @arsem LUL [ebrahim354] just use require like a man [marcio_neto] This is awful [desgracia007] @marcio_neto Yes [firebytez] yes [mini__bomba] best source ever [dfl0__] it’s cool good to know.. :D [zainith] PepeLaughW [sama004] its cool man [desgracia007] "type":"module" [bigardidev] LUL [crasty] to be fair, this is node.js awfulness [veins1] NotLikeThis [cococov] cool GlitchCat [fabiohbfreitas] mjs vs mts KEKW [abraomd] It's a cute extention [nightmarerookie] LUL 󠀀 [g4sacs] Why this is not Standart i dont understand [idkncc] waiting for .beeline [arsem] POGGERS .mts [mopcpayc] JOI [little_orkman] mts alle [firebytez] haters gonna hate B) [fonter_] wait till they find .env [leiswatch] mjs, cjs, type module in package json is such a mess [lazyman32] as a web developer I get sad seeing you use real languages and how much I'm missing out [artemchan] geez, lelax [cordaincords] `file` developer just got more angry [marcio_neto] CMAKE for JS when [bigardidev] when .tsoding extension releases? [cococov] cool driven development [suheugene] Why [mrbuttlicker] peepoHappy cool extension [zainith] While you've been looking for the difference between .cjs and .mts, there's 2 new front-end frameworks zozin FeelsGoodMan [theentropyshard] @BigardiDEV rather a domain zone [butterscotchtoffee] brain_rot.tsx.mts OSFrog [idkncc] mike tyson script [afterschoolchan] Mountain Script [bigardidev] meow this script [roysten_] enable the fruit salad [firebytez] just add "type":"module" to package.json and use .ts/.js [butterscotchtoffee] @firebytez succ OSFrog [bigardidev] isn't there a "ready" event so you can print the listening only after this is really ready to listen? [g4sacs] Listen on 0.0.0.0? [suheugene] @firebytez ts is not as cool as mts [ivantheragingpython] type="module" [fabiohbfreitas] ^ [theentropyshard] Gordon Freeman enters the chat [bigardidev] morgan freeman > [bigardidev] Lister [mrbuttlicker] WAYTOODANK [mrbuttlicker] what is he listing LULW [bigardidev] he is a great lister [cryptoahash] emacs magic [theentropyshard] coding as 4 people NotLikeThis [alexandersupertramp29] can your vim do that? [mopcpayc] oui tres bien! [matt_j3] boom [trinsic_gg] where are the three other people? NotLikeThis [ebrahim354] can your vim do that [fabiohbfreitas] Pog [bigardidev] Pog [butterscotchtoffee] tinytofuDance [ivantheragingpython] boom [bigardidev] ship it [crasty] Pog [theentropyshard] who is connected chat [cryptoahash] dub dub dub [skul_d] can your c do that [artikgz] Who is somebody? monkaS [zainith] Sorry BibleThump [bigardidev] somebody saaaaaaaaaaved me [artikgz] was told me [dfl0__] websocket speed run [idkncc] got hijacked in js [fabiohbfreitas] monkaS [mopcpayc] can your nds do that? [ezxgh] somebody is unknow hacker [sig0null] I'm tuning in late, is this also involving the 3d stuff? [bigardidev] hi, somebody here [nkemdilim] no, nobody here [nkemdilim] move along [dfl0__] some kind of auto incrementing id [g4sacs] Error callback for Handling disconnect? [bigardidev] no its patrick [lostalgorithm] VoHiYo [nkemdilim] patrick Pog [nikudaruma1338] @BigardiDEV LUL [theentropyshard] @BigardiDEV lmao [theentropyshard] veb saket [replicator__] There's too few useEffect and react server components here lol noob Kappa [mopcpayc] hello word [crasty] key can be only string or Symbol i thing widepeepoSad [dfl0__] well can’t you pass the information? [theentropyshard] handshake [crasty] *think [kselnaag] isomorphism detected =D [cryptoahash] or stream it through the websocket [marcio_neto] This is already starting to look like my project structure [alexandersupertramp29] what mts does again? [urineluckboy] LUL [g4sacs] What the hell [nkemdilim] lmao [idkncc] wat [dfl0__] consent is important [fabiohbfreitas] KEKW [zainith] FeelsGoodMan N O I C E [saylontheflux] ResidentSleeper [g4sacs] JS backend is a crime [cryptoahash] Let the server stream the needed data to the client [cpiber] remove extension [butterscotchtoffee] LUL [valseki] they made webdev so difficult [brambasiel] i still dont understand this part [idkncc] maybe .mjs should be in import [fabiohbfreitas] mts = cooler extension [nkemdilim] it's 2024, no wonder it needs consent [zainith] Everything is behind a feature flag in Typescript. [noctu4] ☑️ i consent [g4sacs] Why not default [shreyassanthu] classic typescript [dfl0__] gatekeeping ts [cpiber] compatibility, it does not change the file extension in the js code [afterschoolchan] Just enable everything [cpiber] just remove the extension [suheugene] You can do without extension [shreyassanthu] I'd just recommend you use bun or something [shreyassanthu] This is why js sucka [rajarshikhatua100] wat the efu is t... [tasercake] time to bin JavaScript [erielle04] Web Dev: can of worms [idkncc] nn.js [cococov] just chage the type in package.json and avoid this problems [mohamed0xf] is thing will get uploaded to youtube ? [suheugene] Because you are supposed to import without extension [ezxgh] ypu are going to reinvent entire web someday for sure haha [shreyassanthu] because module resolution in node is a disaster that's why [mopcpayc] metal java solid [crasty] @shreyassanthu yeah [g4sacs] Why Microsoft? [marcs77] !today [g4sacs] LUL [fabiohbfreitas] micr OMEGALUL s OMEGALUL ft [ebrahim354] players need IDs? [ebrahim354] and like a protocol to send an ID with every event [shreyassanthu] sockets are fine but if you have to do reconnections and stuff you do need IDs [afterschoolchan] Just use date [idkncc] uuid [suheugene] id: Math.random() [dfl0__] can just autoincrement no? [fr3tje] isn't the websocket itself the id? [plyndzol] incremental number [g4sacs] Could we Reuse the IP from the websocket Conn? [kikos_0] md4 obviously [kselnaag] uniqe nicknames =D [marcio_neto] uuid [i_only_know_tactics26] var id = 0; [fabiohbfreitas] crypto.randomuuid [dfl0__] yeah starting from 1 [skul_d] count++ [shreyassanthu] crypto.randomUUID [tzorake] iota++ [theentropyshard] math random id KEKW [brambasiel] twitter snowflakes Kappa [i_only_know_tactics26] Its all fun and games, until it overflows [dfl0__] it can just be players size + 1 [artikgz] just name the counter C so you can do C++ 5Head [dfl0__] makes so much sense [ebrahim354] @i_only_know_tactics26 in 1k+ years [cryptoahash] lol [dfl0__] self aware [ivanmisustin] LOL [fabiohbfreitas] OMEGALUL [marcio_neto] Lol [shreyassanthu] that's a tweet [dfl0__] new tweet about that [asskayyy] what kind of a game is that? [cryptoahash] fokking snowflakes [g4sacs] -1 [matt_j3] Doom 3 does something cool where the entity ID is the entity number (in an entity array), shifted and OR'd with an incrementing value id = (entityNumber << bits) | counter [dfl0__] and in teitter [qnioa] wtf i use twitter daily and i've never heard of twitter snoflakes [shreyassanthu] "supposed to" [theentropyshard] tech communities in twitter [yashj7] uuid better [anantacodes] !today [tasercake] UUIDv7 [g4sacs] Send also the world height, widht etc [at290690] everybody is a special twitter snowflake [sn0wcr4sh_] @at290690 lol [ivanmisustin] go full in [idkncc] messagepack [shreyassanthu] bson [sofiman] mongodb [shreyassanthu] Mongo db uses it [fonter_] MongoDB [marcio_neto] bson [kasticus] mongodb [i_only_know_tactics26] Mongo uses bson [anantacodes] mongo [cryptoahash] msgpack I mostly use [theentropyshard] basically minecraft nbt [marcio_neto] Yup [lostalgorithm] mongo db uses 16mb of it [shreyassanthu] use flatbuffers [i_only_know_tactics26] Got asked this in interview as well [cryptoahash] msgpack is fine [mopcpayc] сын бох [shreyassanthu] flatbuffers or protobufs is what I prefer [dfl0__] why can’t the id be the number of players + 1 instead of having a separate counter? [ivanmisustin] i am not sure if json being slow is going to be an issue for a game of this scale [progfix] !today [cryptoahash] https://msgpack.org/ [ebrahim354] userId, cmd [friendlyfire1978] quite long ts coding before c compiler was mentioned [shreyassanthu] @ivanmisustin yeah and json parse is pretty fast in most browsers [g4sacs] Or " Start" [theentropyshard] @dfl0__ because you will have duplicate ids when players leave and join [idkncc] or handshake [crasty] if you were a true js dev, now is the time you would add a whole auth system that lets you authenticate using google, email, etc. a database, at least 3 microservices, put the whole thing on edge and, and... REEeee [kikos_0] you need to stringify [fabiohbfreitas] JSON.stringify [g4sacs] Is there no sendJson? [theentropyshard] JSON.cringify [i_only_know_tactics26] @theentropyshard KEKW [fxs2008] !ban JSON [mrbotka] JSON has been banned [ebrahim354] you only get the ip with onclose [island_moonlight] what's mts PepeThink [crasty] @island_moonlight a cool ts file [fabiohbfreitas] @island_moonlight typescript with esmodules OMEGALUL [idkncc] show player's ip when he disconnects for fun [iselgrey] has left the game [darekry] just cast rx_buff* to game_stat struct. ez [shreyassanthu] you will need it send messages from one socket to a different one [asskayyy] @crasty bro hes using counter for ids KEKW [i_only_know_tactics26] @island_moonlight muh ts [theentropyshard] @idkncc that mf doesnt want to play with us so here is his ip Kappa [g4sacs] wss [cryptoahash] Players will be seeing all the id's flowing over the websocket, id spofing here we come [asskayyy] ws.on("close" , fn) [i_only_know_tactics26] @cryptoahash aren't those isolated? [shreyassanthu] because javascript [fr3tje] backward compatibility [idkncc] onclose is probably legacy stuff [theentropyshard] there must be only 12341413 ways of doing it. [shreyassanthu] years of "progress" [asskayyy] they have it for that one person [alexandersupertramp29] open new tab? [sn0wcr4sh_] nice [asskayyy] EZ [kikos_0] Nice [dfl0__] can you store the player session in cookies? [theentropyshard] ddos'ed localhost [tasercake] what if you have 2 players? [cryptoahash] Open new tab [fabiohbfreitas] EZ [tobias_funk] Ship it [shreyassanthu] I mean yes [iselgrey] new tab [ivanmisustin] ready to play [fxs2008] @Tsoding open two tabs [kinslay3r] Already better gameplay than ForkKnife [g4sacs] Why should there be a diffrence? [ebrahim354] does Map stringify the ws object ? [tasercake] Sweet! [theentropyshard] works like a charm [shreyassanthu] closures mentioned [ardnys35] smol brek [tcpstream] tsodinCry tsodinCry tsodinCry tsodinCry [galois] I don't know why but it sounds good to separate hello from sending the current state [sn0wcr4sh_] lol [yitzhakbetan] yitzhakbetan subscribed with Prime. [stainlesssteel45] дейта [kikos_0] potato [theentropyshard] DATAA [unbandit2006] day ta [blockgaymer] day-teh [ardnys35] day-tuh [iselgrey] data [fxs2008] @Tsoding here's a guy explaining some stuff about the making multiplayer game: https://www.youtube.com/watch?v=3tQ6EtZEGIk maybe be usefull [arsem] both [nikudaruma1338] Daten [wanderboy_] Some pronounce is as day-tuh [johnnb2] dartar [artemchan] Dota [thetinkeringee] It depends on the person. [wanderboy_] And some like dah tah [ardnys35] datums [blockgaymer] the second it recieves something that isnt a string, your client will implode [shitman_pog] its cool that you don't need to worry about tcp/udp stuff [emopandazzz] корект [safarsofar] Hello Mr. Зозин [blockgaymer] Someone quick, send something that isn't a string to his client so it will implode! [tonebacas] common mjs? typo? [idkncc] try from .mts [tonebacas] nvm i don't know what i'm talking about [ipinzi] access? [zainith] I think you can do `common['Hello']` @Tsoding [enamogel] Sorry if many people have asked this, but did you get any further in optimizing streaming performance? [blockgaymer] you could also do `import * from "common.mjs"` to import everything [tasercake] time for Zod? [cryptoahash] @enamogel Yes he fixed it by compiling obs from scratch [slay29] Welcome to the Typescript haha [mrbuttlicker] Tsus [enamogel] @cryptoahash oh really! cool [gagid666] 'pro' in obj is best js can do [leiswatch] yeah, you have to do that by yourself or install a package like zod or yup [suheugene] TS does not do any runtime checks at any time [schiavoanto] ඩ [zainith] @Tsoding Check assert functions on TS docs [afterschoolchan] Nah just trust the program bro [vloood] ts fake types [slay29] I use class validator [mohamed0xf] satisfies keyword [kikos_0] aren't we going to the kind field for that? [mohamed0xf] satisfies [brambasiel] types dont get transpiled to js i think [mrbuttlicker] PepeLaughW stackoverflow [mopcpayc] wzwzwzwzwzwz(c) [skul_d] KEKW [fabiohbfreitas] OMEGALUL [afterschoolchan] Kekw [dexterc] KEKW [fonter_] PepeLaughW [blockgaymer] KEKW [idkncc] thats very helpful [kikos_0] KEKW [ebrahim354] XD [shitman_pog] KEKW [mrbuttlicker] i knew it OMEGALUL [cryptoahash] There always is a way [idkncc] pog [wifehackercd] OMEGALUL [brambasiel] everything is possible if you do it yourself! [blockgaymer] you could use zod [ipinzi] then there ISNT a way [tiny_goliath] wait what thats dumb [bah4ie] XD [rachitm022] @Tsoding you can use zod to do that [wanderboy_] @cryptoahash but you have to implement it yourself, don't forget that [tcpstream] tsodinCry [blockgaymer] Checkout ZOD js @Tsoding [mohamed0xf] https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-9.html [cryptoahash] lol [kinslay3r] Classic stackoverflow [fonter_] so JS is a cool language if you fix it yourself [blockgaymer] https://zod.dev/ [afterschoolchan] But that's cool though I am expecting another library [kikos_0] and it's literally checking the type of the prop inside KEKW [blockgaymer] @Tsoding checkout Zod JS, it can do what you want [ebrahim354] so basically just a ton of if statements [cactusvacuum] "implementing it yourself" hottest new js framework [zainith] @Tsoding Just to be clear, typeguards validates for the TS compile within a specific block, Assert functions validates from the point the function is called, onwards, and it specifically throws in runtime [bylkauser] hello hello [tobias_funk] so this answer is just write a validation function lol [stainlesssteel45] hell yeah [ipinzi] @cactusvacuum i recommend this framework [blockgaymer] Checkout Zod [safarsofar] I like how always the first links to the answers are purple, so we already checked them in the past but we programmers have a collective syntax dementia) [theentropyshard] called smart-casting in kotlin [slay29] Check out class validator, its dependency but it /works/ [vloood] inb4 sprinkling zod & invariant checks everywhere [blockgaymer] https://zod.dev/ can do what you want easily right now [stainlesssteel45] @slay29 cmon bru [ardnys35] well let's write it kotlin before it's too late [bylkauser] what are we making here [zainith] That's correct [ruikkuripuli] Either narrow in normal type guards, or use user-defined one to "forcibly" say so [zainith] Yep [theentropyshard] @ardnys35 his machine will explode if he will use jvm [dexterc] 5Head [blockgaymer] Will it explode if he uses ZOD [tasercake] @bylkauser multiplayer game with websockets [wanderboy_] the disgrace, the humilliation [bylkauser] oh thanks @Tasercake [dfl0__] yeah this would be so much better for those safety [dfl0__] type* [ledents] Probably because of performance [ipinzi] oversight lol [blockgaymer] @Tsoding lookup zod js [ruikkuripuli] There is a package for that LUL [slay29] @stainlesssteel45 I once went into s pithole that he is about to enter and im not suggesting it [skul_d] you need to put "AllowAutoGenerateTypeGuards" Kappa [bylkauser] Beacause MICROSOFT [ardnys35] @TheEntropyShard i see lol [praem90] enable strict types in typescript? [dfl0__] job security that’s why [dexterc] LUL [tzorake] you are asking to much Kappa [spqcivitatum] just implement it yourself FeelsDankMan [fabiohbfreitas] KEKW [blockgaymer] lookup zod js [blockgaymer] zod can do what you need [hovsater] What is it polyfilling? [dfl0__] yeah you have to give consent [ruikkuripuli] Zod could be interesting though [afterschoolchan] DIY [idkncc] file an issue and it will be implemented in 1-3 business years [dexterc] dont look up zod [blockgaymer] https://zod.dev/ [tasercake] @praem90 that’s still not a runtime check, which is what’s needed here [tasercake] KEKW [afterschoolchan] DIYScript [hipp0po] Hey! You have very good accent. Are you Russian-speaker?) [darksol41] Zod rune? [safarsofar] mr aZodzin [blockgaymer] zod is good, zod is great [ebrahim354] you made fun of the answer and then used it [fonter_] so much code for event prop and type [theentropyshard] do double return when you are sure you want to return from function [praem90] No need [mrrealmgrinder] MrRealmGrinder subscribed with Prime. They've subscribed for 2 months, currently on a 2 month streak! Hello mr zozin [blockgaymer] @Tsoding checkout zod [blackshadow4reai] arg?.kind === "Hello" [cryptoahash] Everytime I see === I look away [wanderboy_] Guys, you've mentioned ZOD too many times. He probably already saw your messages. [namasteoriginally] my mom exist!!!!! [tasercake] you really want Zod here [idkncc] "urmom" is undefined BibleThump [ivanmisustin] ohno typeof undefined [wanderboy_] He doesn't want to use Zod, period LUL [zainith] @Tsoding runtime checks are those functions, guards are only communication with the TS compiler, doesn't fail on rutime with explicit errors https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/#assertion-functions [asskayyy] I've heard js coders dont care about performance, is that true? [ardnys35] what was that [artikgz] kotlin gigabased [fabiohbfreitas] Tsus [idkncc] sussy packet [blockgaymer] it will crash if it recieves non-json [fonter_] disconnect player [cryptoahash] kill client [theentropyshard] ban that mf [iselgrey] ban [namasteoriginally] rm -rf [krutofar] "urmon" "bogus amogus" LUL [afterschoolchan] Buy more RAM [mrbuttlicker] abogus Tsus [aliretn] reboot server [wanderboy_] @asskayyy On the contrary, my kind sir... But you could write some awful and low-performant code with JS as well [destinywaits] fr [theentropyshard] truck of ids [blockgaymer] your clientwill crash if it recieves non-json data [cryptoahash] Client is trying to do something fishy, disconnect the mofo [slay29] Reset myId on socket close [afterschoolchan] What is bogus-amogus? [ipinzi] magic spell [blockgaymer] he is rewriting netty io [cryptoahash] lol [veins1] LUL [krutofar] It's getting even suss [artikgz] sus + message = sussage [theentropyshard] bogus amogus fokus pokus [ardnys35] sus as in suspend? [ruikkuripuli] Is it easier/better to tightly couple the client + server state machines or handle all types of messages in the client and just keep a state machine on that side, if that makes sense? [ebrahim354] why would the server send a bogus-amogus message [wanderboy_] @ArtikGz noted [shootthemz] i started getting the feeling ts is just getting on your way [ipinzi] @ebrahim354 good point [cryptoahash] Server should be the truth, never should send amogus [theentropyshard] single source of truth [ipinzi] amogus client only...us [halcyyyon] @ebrahim354 maybe the server is faulty. maybe it’s not really the server [slay29] You can use prototypes so you can automatically attach function to variable instead making common librabry [afterschoolchan] Bogus amogus galapagus [iselgrey] already hacked [cryptoahash] lol [marianlime] how do i learn programming and not languages ? [emopandazzz] @marianlime by watching streams and learning russian [aliretn] player undefined LUL classic js [sig0null] Pick a language and do the programming [theentropyshard] kekw [halcyyyon] touch favicon.ico NotLikeThis [skul_d] not [object object] Sadge [sig0null] Languages are pretty much all the same, don't worry about them [afterschoolchan] Player's Undefined Battle Ground [tobs_on_twitch] tsoding writing mike tyson script??? [blockgaymer] Call Of Duty: Undefined [idkncc] Connected player NaN with username "[object Object]" [theentropyshard] Undefined of Null: Any [blockgaymer] undefined is undefined [marianlime] @Emopandazzz sounds easy enough [ivanmisustin] aren't different frame rates of players going to be an issue? [ebrahim354] the interface checkers could be in common.mjs no? [cryptoahash] @ivanmisustin yes [tonebacas] @ivanmisustin we'll get there [ivanmisustin] monkaS [dfl0__] @ivanmisustin that’s why i think tickrates exist [ivanmisustin] yeah, that's going to be fun [praem90] You should compare arg === number [praem90] not arg.id [tobs_on_twitch] typeof(arg) not arg.id [mrbuttlicker] PepeLaughW semicolons [liquidor] @ivanmisustin Lots of papers online if you wanna get into all those issues and how to solve them :) [haydermabood] Number.isInteger() [blockgaymer] arg.id.arg.id is not a number [namasteoriginally] typeof(arg) not arg.id [pigm0] !isNan( ) ? [tobs_on_twitch] isNumber you wrote typeof(arg.id) instead of typeof(arg) mr zozin sir [cryptoahash] But doesnt everyone receive the same websocket stream data? [wanderboy_] Interesting, I was trying to implement something similar to this with WebSockets but I decided to use socket.io instead xd [ivanmisustin] @dfl0__ don't they also exist to limit network bandwidth [agitsahinn] which ide is this [cryptoahash] @AgitSahinn emacs [emopandazzz] @AgitSahinn VsCode [ivanmisustin] so if your game runs at 120 fps you dont send 120 packets/s [aerodashe] Careful you are checking arg.id not arg in isNumber [liquidor] @AgitSahinn notepad [ivanmisustin] this is vimacs [smarniw] @AgitSahinn sublime text [afterschoolchan] Will the client be able to handle new message while recalculating the state? [lemouchoirdexari] event loop [aliretn] @smarniw IntelliJ Idea [dfl0__] @ivanmisustin well that too, it’s a mixture of both. you can say that it’s to limit the bandwidth for everyone *equally* [dfl0__] in a sense [kselnaag] 30 or 60 ? [lesiegedexari] TPS ? [ivanmisustin] @dfl0__ makes sense [blackshadow4reai] life is one big event loop [blockgaymer] oh no [lemouchoirdexari] why don"t we call tick()? [aliretn] normal language Kappa [praem90] Why dont you use setInterval over setTimeout? [thearte04] You could write the server in a normal language and just keep the clients in JS insanity [blockgaymer] why not use setInterval [cryptoahash] onTick() yes, a tick is 1 fps frame. [ipinzi] think it has a different time interval [rboati] use a queue for messages [murgaaaaaaaaaaa] interval repeats timeout ends [tobs_on_twitch] interval runs multiple times [liquidor] With setTimeout you risk being delayed by +ms over time as code execution can take time. With setInterval you guarantee an executation at X interval [philosophicaldarkness] with setInterval you run a function repeatedly, with setTimeout you run the function only once at a delayed time [tobs_on_twitch] exactly, recursive timeout is gigachad way [liquidor] @tobs_on_twitch With a delta sure :P [murgaaaaaaaaaaa] just attack a variable to it and u can do clearInterval(variable) [murgaaaaaaaaaaa] attach [shpirtman] Unless you make `tick` async function [shpirtman] and use awaits in it [tobs_on_twitch] chat is he using "node:ws"? [repeataftermeimfree] For reliable timing you need to use the service worker API. [tobs_on_twitch] wait node:ws doesnt exist, im' so dumb [aliretn] language for newbies? Kappa [ebrahim354] @tobs_on_twitch just ws [ledents] There's an issue with setInterval is that if the function you call takes more time to complete than the interval it will start to create a backlog of things to execute and you'll be using 100% of the CPU .. [marcio_neto] Yeah, this is the way [brooklyndev] why is this necessary? [kevaron_28] Hi [tcpstream] You like fixed sticks? [imporiumguy] Chat, can I know the name of the font? [lemouchoirdexari] why happens if it takes more time to process events than the tick? [lemouchoirdexari] what* [ebrahim354] event loop with in event loop let's go [fabiohbfreitas] @ImporiumGuy Iosevka [imporiumguy] @fabiohbfreitas Thank you <3 [blackshadow4reai] can you not use process.nextTick(). i think that will run the function you pass at the end of current tick [computersdontcompost] @lemouchoirdexari it will start lagging [lemouchoirdexari] @ComputersDontCompost well, it's a game, so it's a feature Kappa [kevaron_28] tsodinFeels tsodinFeels tsodinFeels [blockgaymer] spread the player [blockgaymer] ...player [cryptoahash] OBServer subscribes for events [shpirtman] @lemouchoirdexari it prints in the console "Can't keep up! Is the server oveloaded?" Kappa Kappa [halcyyyon] when do we add compression? :) [dexterc] Generic ? [jopestpe] @Tsoding will you include stairs or jumping in the game later on? [ipinzi] @ComputersDontCompost would just process on the next tick if it was handled in the event and prevent lag [lesiegedexari] @lemouchoirdexari FamilyMan FamilyMan FamilyMan [blockgaymer] you should spread the player [suheugene] Math.max(1000/SERVER_FPS - timeElapsed, 0) [mattanimation] phine? [lemouchoirdexari] @ShpirtMan LUL [mrbuttlicker] @BlockGaymer nymnHUH [lemouchoirdexari] @LESIEGEDEXARI les membres de la guilde sont partout MyAvatar [blockgaymer] { ...player } will add id, x, y automatically [blockgaymer] @Tsoding ^ [mattanimation] le spread [kevaron_28] !today [ifoks] what a hatecrime D: [ebrahim354] map player to socket [ebrahim354] 2 maps [zainith] D: [builder404] Are you enjoying Germany these days? Good summer weather? [mopcpayc] SeemsGood [blockgaymer] he put a socket in the player omg [ivanmisustin] can your rust do that [kselnaag] =D [ebrahim354] 2 maps man [afterschoolchan] This is becoming unmanageable [liquidor] How about a shared/common Enum for the message kinds? [mattanimation] have a Record<string, Websocket> [tasercake] Wouldn’t this be open to ID spoofing? [cryptoahash] yup [tiny_goliath] @Tasercake yes [builder404] Are you enjoying Germany these days? Good summer weather? @Tsoding [logitz_] No, meaning yes [lemouchoirdexari] LUL [philosophicaldarkness] @builder404 :)))))) [zainith] LUL [dexterc] lol [idkncc] LUL [iwas_official] KEKW [mattanimation] lulz [tiagodinis33] chat is goin crazy [builder404] Yet Kappa [mattanimation] das rooskie [ardnys35] gute abend herr zozin wdym no germnay [midiantv] client side prediction and server reconciliation when? [lemouchoirdexari] Keking [halcyyyon] @tasercake we will probably need sessions/hashes soon [shpirtman] haufen scheisse [0xfraso] !today [ardnys35] !when [mrbotka] @ardnys35 is tomorrow POGGERS [lemouchoirdexari] we drop the db [mopcpayc] the game will be called ZOZENNIA [zainith] @lemouchoirdexari this [lemouchoirdexari] @zainith no db, no proof [hrederik] is incorrect to check on undefined in this way @Tsoding you need to use typeof [blockgaymer] zozonia [builder404] no proof, no crime [builder404] ez [lemouchoirdexari] KEKW [kevaron_28] @hrederik tsodinJS [ifoks] no face no case [tiny_goliath] @builder404 we forgot the logs. Fantastic even less proof! [builder404] How many times a week do you clean your keyboard [tasercake] server-signed IDs might make sense at some point I guess [blockgaymer] you cant set eventQueue.length to 0, thats not possible right? [blockgaymer] that wont work [ifoks] @BlockGaymer of course [zainith] @lemouchoirdexari LGTM!! Ship it! [liquidor] Does PlayerJoin and PlayerJoined have to be different? Was thinking they could just be the same, no? [ebrahim354] maybe just store the eventQueue [cryptoahash] Oh yes it is isolated, I was not aware of that. I thought a websocket worked the same as multicast streams.. I am stupid. [blockgaymer] players.entries() [ectryliz] wss.clients.forEach ? [computersdontcompost] websocket can receive multiple messages after some delay because of how it works. especially over wifi connection. it produces annoying lags [tiagodinis33] you can also do for(let value of values) [hakkology] Hakkology subscribed with Prime. [tiagodinis33] does the same as .forEach but without lambda [blockgaymer] for (const player of players.values() [braincompiler_av] for (var [key, value] of players) [kselnaag] Who cares ? send to everyone [tiagodinis33] var :skull: [tiagodinis33] imagine using var in 2024 [blockgaymer] var 💀💀 [kevaron_28] Cheer100 tsodinPogging tsodinPogging [blockgaymer] spread the other player [okleako] is this new project or implementation of the online mode for prev? 🤔 [lemouchoirdexari] VAR Keking [donutbatman] !today [idkncc] otherPlayer [aliretn] 5Head [iseedarknessinyoureyes] hey I wonder what language is it? [donutbatman] What game are we making multiplayer? [braincompiler_av] @tiagodinis33 Than use const or let, its the example from mdn [tiagodinis33] @okleako multiplayer implementation for the raycasting project [tobs_on_twitch] @IseeDarknessInYourEyes mike tyson script [blockgaymer] michael jackson script was the best [donutbatman] You doing a p2p implimentation? [lemouchoirdexari] @IseeDarknessInYourEyes Angular 45 [okleako] @tiagodinis33, thanks [midiantv] isn't setInterval better for the server tick? [donutbatman] JSON strings are the most efficient way to send data right? Kappa [blockgaymer] make a whole new packet system [mrrealmgrinder] !today [ipinzi] @DonutBatman looks like auth [sailazaray] POGGERS [thearte04] if it compiles it works tsodinZezin [tobs_on_twitch] @DonutBatman i gzip my json Kappa [aliretn] bogus-amogus Kappa [blockgaymer] the isNumber mistake [cryptoahash] @tobs_on_twitch I msgpack my json [blockgaymer] xD [tiagodinis33] AM-AM-AM-AM-AM-AMOGUS [blockgaymer] isNumber is checking arg.id [blockgaymer] not arg [saylontheflux] isNumber [pigm0] 0 is falsy ? [namasteoriginally] isNumber is wrong [blockgaymer] isNumber is wrong [aliretn] chat let him debug [summeeer] !github [mrbotka] @summeeer command `github` does not exist [halcyyyon] isNumber is wrong apparently Kappa [ebrahim354] welcome to js [aliretn] chat don't spoil Kappa [lemouchoirdexari] backseating developers is crazy [tobs_on_twitch] isNumber(arg: unknown) would be better [lemouchoirdexari] Kappa [iseedarknessinyoureyes] no way, when I code I dont have chat Kappa [tobs_on_twitch] @Tsoding unknown would have type checked that [builder404] Do you zoom in for our sake, or do you just love big fat text [kevaron_28] @IseeDarknessInYourEyes tsodinSleep tsodinSleep tsodinSleep [lemouchoirdexari] OHHH PepeHands [liquidor] Shared Player and then extend from it on server and client with extra stuff [ebrahim354] I called it [longor1996] Interface extends interface? :3 [putrefatos1] F [hollyluck] Omit [aliretn] oh no! [builder404] Yeah the guy said you needed two [builder404] maps n shit [tiagodinis33] Literally coupled player to networking [kikos_0] second map for sockets [dexterc] XD [ectryliz] that's awful 😭 [aliretn] OOP Kappa [ebrahim354] noooooo [sig0null] Should associate sockets with events [liquidor] This is the way [builder404] Do you feel the pain now Kappa [easyzeee] we're just gonna extend this [kikos_0] or that RIP KEKW [tasercake] perfection [ipinzi] ServerPlayer extends Player lolz [dexterc] p-oop [lemouchoirdexari] Pogey [blockgaymer] poop [builder404] Germany would be proud of you @Tsoding [tiagodinis33] OU OU OU OU OU OU P [friendlyfire1978] O-O Pipi [iseedarknessinyoureyes] can u do it more?... [pigm0] lasagna code starting now [philosophicaldarkness] this guy can beat box [brambasiel] putting the java in javascript [ebrahim354] can your c# do that [namfrifrufi] what's the benefit of an "import type"? [builder404] never give up [tiagodinis33] @ebrahim354 C# can copy java [builder404] But can you use Rust inside C# [longor1996] @builder404 you can, soon... someone is working on it >:3 [liquidor] CANVAS TIME [builder404] kekk [aliretn] WutFace [sailazaray] annalu2Gostupidgocrazy [idkncc] canvas speedrun [charliesc2] Let's canvas this shit up! [dfl0__] each player is div [nothalfright] PogChamp [lemouchoirdexari] PepeThink canvas tiiiime [builder404] Time for a pizza ball [sig0null] tsodinZezin [kselnaag] ITS canvas time ! \o/ [ruikkuripuli] shouldn't canvas be on client side? [ledents] No we can't do go in typescript [ruikkuripuli] oh sorry it is im blind [builder404] Go is irrelevant [builder404] TypeScript is king [putrefatos1] @namfrifrufi if im not mistaken, you import a class and use it as a type [sig0null] Is go actually any fun? [charliesc2] Btw Tsoding could you stop putting out content so fast? I'm still watching you code DED on YouTube and I'm starting to fear I'll never catch up to real-time? Maybe take a year or so off? [builder404] yeah youre not catching up Chalie, none of us have yet [kevaron_28] @CharlieSC2 XDDDD [idkncc] @CharlieSC2 NotLikeThis [aliretn] @CharlieSC2 watch at x2 speed [ebrahim354] @CharlieSC2 he creates offline streams and ships them [lemouchoirdexari] is it IE8 compatible ? PepeSuspicious [charliesc2] LUL [builder404] We are just watching an AI right now [builder404] A great AI [builder404] Real TSCoding is somewhere in Germany right now [philosophicaldarkness] @builder404 I had my suspicions, but now it's confirmed [kikos_0] EZ [idkncc] is it Netscape Navigator compatible? [fabiohbfreitas] EZ [builder404] LUL [sig0null] Watching you makes me want to program but I'm always at work 🙃 [ebrahim354] I'm here for the sync of frames honestly [builder404] what's this .mts LUL [alexandersupertramp29] @sig0null what do you do at work [dfl0__] bogus application already frame dropping kekw [idkncc] @builder404 Mike Tyson Script [yannickwhorst] lmao [sailazaray] POGGERS [putrefatos1] @idkncc thats a good name for a programming language [smarniw] lmao [shpirtman] mobile tele systems [internetowestatystyki] xdd [tiagodinis33] Micro Type Soft [tobs_on_twitch] i made that joke twice now and he didn't notice :( [shiiroitorii2] Every memory leak results in getting an uppercut through the monitor [iseedarknessinyoureyes] Make Typo Script [yannickwhorst] !today [dfl0__] microsoft embedded its name into typescript file extension so now it’s .mts meaning microsoft type script [dfl0__] Kappa [charliesc2] Does mr zozin have any tutorial-style vids where he shows all these emacs shortcuts he's using to fly around between docs / code / whatever. [sailazaray] annalu2Essie [iseedarknessinyoureyes] @tobs_on_twitch we know real hero's face [dfl0__] you can do random for now though [mattanimation] red rectet [kevaron_28] @dfl0__ Tf RuleFive [brambasiel] @CharlieSC2 old video on 'tsoding' channel [brambasiel] for emacs config [tobs_on_twitch] @IseeDarknessInYourEyes PunchTrees [sailazaray] annalu2Sway [charliesc2] @brambasiel You got a source for your boy? [lemouchoirdexari] the hitbox? [liquidor] color = player.id.toString(16) ? :P [longor1996] Rectangle half extent, weeey [putrefatos1] KEKW [charliesc2] LUL [aliretn] KEKW [fabiohbfreitas] KEKW [hakkology] kewl [dfl0__] @kevaron_28 was a joke it’s for am modules [hal_9] KEKW [margarinmolle] lmfao [brambasiel] @CharlieSC2 no links in chat i think [josephflucas] mom dont fit screen [putrefatos1] first try [aliretn] PogChamp [tonebacas] Pog one player [kikos_0] EZ 󠀀 [dfl0__] PogChamp [fabiohbfreitas] Pog [sailazaray] POGGERS [tonebacas] two Pog [idkncc] POG [logitz_] Pog [yannickwhorst] POG [vivatjavascript] POGGERS [hal_9] bam [kselnaag] O_O [dfl0__] that’s actually so cool [echoes2165] Pogey [smarniw] ez [putrefatos1] first try POGGERS [tiagodinis33] POOOOG [lemouchoirdexari] Two red squares wow [aliretn] POGGERS [sailazaray] annalu2Happybella [ebrahim354] disconnect [thearte04] "pog" [lorymaster] tsodinPogging [kevaron_28] @dfl0__ I know tsodinPog tsodinPog [tobbelol] 3!!! [dexterc] let chat connect too [thearte04] PogChamp [g4sacs] Good work [idkncc] appearing red squares in 2 hours [ipinzi] pos packets [kselnaag] and names [tukanwrk] PogChamp [tobbelol] client side prediction Pog [dfl0__] tick rate [tiagodinis33] every tick [g4sacs] Half of the fps? [ipinzi] tick rate interpolate [putrefatos1] just fyi u can use nodemon to hot reload server on each :w [marcio_neto] type Event = PlayerLeft | PlayerJoined [tiagodinis33] probably making a broadcast function would be useful [codemonad] time to ship our next vintage story [nextdo0r] !uptime [mrbotka] @nextdo0r command `uptime` does not exist [putrefatos1] "some dumbass has left the game" [avertae] what if you want to make some fancy "bézier" fade out animation for left players? [g4sacs] 2am RyuChamp how could you handle this with your normal Job RyuChamp [ebrahim354] they are doing bogos-amugos [cryptoahash] Nice! [familjegaming] nice [ifoks] BLAZINGLY FAST [halcyyyon] magic [putrefatos1] first try bitches [fabiohbfreitas] Pog [sailazaray] POGGY [dfl0__] @avertae this is just for testing multiplayer functionality to be implemented into the raycasted game. this isn’t a game of its own [g4sacs] No e [alexandersupertramp29] you will connect this to raycast app? [russjr08] SeemsGood [dfl0__] what about delta of position? or is this the same [avertae] @dfl0__ it was about player coord for leave, nvm [longor1996] Why not compass directions? :( [putrefatos1] have u ever been a js professional dev? [mattanimation] enum would work [arkzats] you want Record<direction, boolean> [ebrahim354] add idle ? [codemonad] are we planned to implementing rollback netcode [sailazaray] GivePLZ [at290690] awesome possum [putrefatos1] KEKW [fabiohbfreitas] KEKW [longor1996] static typing goes brrr [mattanimation] can your cap'n proto do dat? [kevaron_28] tsodinPause tsodinPause tsodinPause [smarniw] mike tyson script shill era [urineluckboy] bullish [midiantv] client prediction and server reconciliation when? [ifoks] deploy on push [pejnozaur] @MidianTV dont forget server authoritive [brambasiel] wait? so this is not specific to tRCP and react server components? [red_santar] !todday [mrbotka] @red_santar command `todday` does not exist [kaze0197] Record<direction, boolean> would look better tsodinZezin [red_santar] !today [tiagodinis33] @pejnozaur server is always the dictator of everything in multiplayer games [familjegaming] will it only send new messages on update? so if i go left, it only send left once to other player, and hten use last state? [red_santar] uf this topic is pretty interesting i will watch the VOD later [cryptoahash] replicating the bombs is going to be interesting. [ipinzi] @MidianTV client prediction and recon is usually used for non deterministic physics systems. He is also sending keys so it should be authoritative in the end [sailazaray] PrideUwu [kaze0197] Boolean() should also work [marcio_neto] type [tiagodinis33] use Record<Direction, boolean> [midiantv] @ipinzi That doesn't really matter does it? Unless you want to see jittery movement if you're always gonna wait for server response [arkzats] also you should try `const directions = ["left", "right", etc]; type Direction = typeof directions[number];` [sailazaray] POGGERS [familjegaming] if you have physics based movement, do you calculate that for each player, or only for your own player, and just let the others be 3d cordinates where they exist in the world [fantasmo55] @Tsoding What is this language [avertae] what other code monstrocities await us along the stream? POGGERS [marcio_neto] @fantasmo55 typescript [familjegaming] okie nice, [iercan_] are you planning to do csp + reconciliation + interpolation? [cryptoahash] Server should also check if the speed, or location of a player is correct. [iercan_] client side prediction sorry [longor1996] Also called the "lockstep model" in game networking. :3 [kaze0197] do checkout `satisfies` operator [cryptoahash] As we could send fake locations to the server to cheat :) [dfl0__] client side prediction is probably useful for precise and fast paced multiplayer but i doubt it would be needed for this [ipinzi] @MidianTV won't be jittery just slightly delayed. you can always interpolate result without prediction [hovhadovah] one (annoying) difference is that you can redeclare interfaces and TypeScript actually extends the base interface w/ extra props. can't do that with types [arkzats] you can extend interface, you can't extend type, but type can be enumerable [halcyyyon] are the collision rules on the server only or on server too? [zedalaye] Hello, World. [ivche1337] are we writing a server? [xsipaj22] do you prefer C or C++ ? [tcpstream] who needs enums when you have type guards [familjegaming] I just remembered something, I think websocket is not syncronous in javascript or? [tonebacas] cheater D: [avertae] strong cheat detection Keepo [alexandersupertramp29] auch [tetix] ahhahahaahahha [ivanmisustin] ban that bitch [dfl0__] already anticheat Pog [halcyyyon] this was the spoofing question earlier [shpirtman] VAC ban [lorymaster] Websocket police kicks you if you don't show the ID [dfl0__] what about cheating by sending wrong info for same player id [mrrealmgrinder] You're kicking but still adding to the queue tsodinD [marcio_neto] Wouldn't you have to return early after ws.close()? [tcpstream] return to prevent always pushing to queue? [kasticus] you probly need to add return; after ws.close() [zedalaye] don't you need to exit after ws.close() (or do you miss a else) ? [ipinzi] you have a semi [ipinzi] after playermoving [ivche1337] chat irrelevant KEKW [alexandersupertramp29] tamaguchi [familjegaming] :D [ipinzi] secret semi [longor1996] Aren't exported constants globally shared? Changing moving might be a problem... [familjegaming] you can use ws.onmessage also i think [sailazaray] POGGERS [liquidor] Can you use the event enum for the cases in the switch? [alexandersupertramp29] this project is seperate from raycast? [longor1996] iz to be integrated into [alexandersupertramp29] pinh? [alexandersupertramp29] ping? [liquidor] requestAnimationFrame is usually 60 ? [tribrut0] I am top tier at physical simulations, with my neighbour [blueberryking] Oh I like this case ...: {} break; notation :) [marcio_neto] Could work [ipinzi] should be ok [familjegaming] yes [liquidor] stopMoving probably want to add some final position data for sync [rajarshikhatua100] decentralisation [ipinzi] ....brain melting.. try it out lol [longor1996] Eventual consistency, weeey [tonebacas] random, but keep track of the synched players, so you don't leave anyone out for too long [shitman_pog] p2p or server-client? [wonshtrum] that's called client-side prediction I think [avertae] e-sports nightmare right there LUL [familjegaming] you can randomize the list of players.. then remove each players you have synched [afoobar42] Omg im glad that im doing stupid backend programming and dont worry about all that multiplayer shit [mykdor] IamMoving [avertae] @afoobar42 did not you ever implement distibuted transactions ot what? LUL [longor1996] C2S / S2C [familjegaming] A mom oving [afoobar42] @avertae no im dumb [ebrahim354] x, y should be like target position? [avertae] @afoobar42 backend is multiplayer on steroid LUL [ebrahim354] in player moving [artemchan] @afoobar42 and honest i guess Kappa [ipinzi] not sure how the random reconciliation will work on long key presses, I'm interested to find out [liquidor] @ipinzi message on keydown and message on keyup [ipinzi] @Liquidor he was talking about long key presses without key up for a long time [liquidor] Ah alright. Just got here :) [trebacztrebunio] !tod [mrbotka] @trebacztrebunio command `tod` does not exist [codecat69] !vim [mrbotka] @codecat69 command `vim` does not exist [greenknight15] Amazing [alexandersupertramp29] play again? [mrtast] pog [tcpstream] do it again I didn’t see [idkncc] Can your MS Word do that? [dfl0__] emacs multiple cursors > vim macros? [alexandersupertramp29] you do that with plugin? [ifoks] my intellij can do that :> [sailazaray] PartyHat [uvvw] WOW [cryptoahash] Emacs Magixxx [familjegaming] my emacs can do that. i just do not know the keybind :D [tcpstream] Emagix [alorianlib] Record<string, Direction> is also nice alias [familjegaming] ctrl+x ctrl+c is everything i need to know right now [avertae] new level of equality Pog !=== [valseki] @Avertae im waiting for them to add it to the next ecmascript version [valseki] the 'I really mean it' equality operators [marcio_neto] One extra = sign [sanderjannes] When is zozin starting a gaming channel? Kappa [desu_used] classic [desu_used] I don't even blame you for this [greenknight15] Lmfao [tonebacas] very very strictly equal for real [dfl0__] more type safety of course [urineluckboy] truthfulness is a spectrum in js [idkncc] ==== – more more precise equals [ifoks] ==== -> deep equals [vivatjavascript] its true, the best web devs only write using ============ [uvvw] =========D [marcio_neto] Legend says if you add enougn = signs, it does static checking for you [dfl0__] super duper strictly equal (please) [idkncc] ≈ – maybe equals [desu_used] fun fact: perl has ~= operator [familjegaming] ~= = maybe equal? :D [tiagodinis33] @idkncc normal == is already like that [desu_used] correct [ivanmisustin] lua has ~= [cryptoahash] D als has ~= [lostmarblerv] regex yep [at290690] if you use ======= it even borrow checks [cryptoahash] also* [liquidor] lua uses ~= as well [idkncc] @tiagodinis33 forgot NotLikeThis [tcpstream] 🏳️‍🌈 sus equals [ifoks] sus-ing [tiagodinis33] @idkncc == rougly equal [tiagodinis33] === normal equal [q__o] ==== carbon copy [lostmarblerv] carbon copy would be a single = [wintercoding] Is websocket fast enough for real-time multiplayer? [magikmw] ===== equal but odd [tcpstream] Object [computersdontcompost] ==== throws when not equal [ivanmisustin] classic javascript [desu_used] it's alive [sailazaray] annalu2Essie [greenknight15] Pog [uvvw] Pog [mykdor] All you needed is to add a message [mrrealmgrinder] You only scrolled the page tsodinIsntThatPog [lifeez] пог [wintercoding] When client-side prediction? peepoPls [liquidor] LUL [uvvw] LUL [wintercoding] Damn it. I missed it Sadge [afoobar42] Its horrible to test and debug [marcio_neto] Maybe log the queue length [familjegaming] oh and also later maybe only send players that the player can see (if the play area is larger than the screen in the future) [mykdor] dont you filter out your own events? [wintercoding] I wonder if Packet Sender can send WS packets. It exists on Linux too [greenknight15] Is the canvas redrawing? [peterramaldes] It's really nice see how much you like the 69. [wintercoding] xdd [greenknight15] Wow [familjegaming] yay [dfl0__] PagBounce [sailazaray] annalu2Gostupidgocrazy [wintercoding] Lets goooo [afoobar42] First try [valseki] tsodinPog [ivanmisustin] Kreygasm [uvvw] Pog [cryptoahash] hehe [fabiohbfreitas] Pog [marcio_neto] Close lol [wintercoding] LUL [lostmarblerv] twins [vivatjavascript] single player multiplayer [suheugene] But it isn't a circle, it's a square [codecat69] LUL [mrrealmgrinder] First try tsodinPog [familjegaming] oh, did you set the websocket to the player? [wintercoding] Clooose [sanderjannes] good enough LUL [blueberryking] Entanglement 5Head [tcpstream] synchronized swimmers [longor1996] DEFAULT_MOVING is globally shared between players. [wintercoding] Ready to ship [lifeez] multiplayer in multiplayer [wintercoding] LGTM [q__o] doesnt work for me, firefox says unable to connect Kappa [demki] yes [suheugene] Closest one, shadowing [ifoks] it shadows yes [marcio_neto] It should [familjegaming] you need to set an id to the websocket connection, if you have not doen that [tzorake] shadowed [greenknight15] Needs a cookie per window or something for ws stickiness? [familjegaming] no you can set the websocket on connection to the players object [wintercoding] D: [longor1996] Told ya so :D [alexandersupertramp29] BIZZARE [urineluckboy] LUL [mrrealmgrinder] tsodinIsntThatPog yay [shpirtman] DRY [demki] this is why I usually freeze my default values [tcpstream] @longor1996 predicted the future [daimyoo__] whats mts????????? [demki] but it is annoying [nulligor] hello zozi o7 [computersdontcompost] @daimyoo__ ьщвгду ензуыскшзе [lostmarblerv] @GreenKnight15 A cookie would let a player rejoin a game. [marcio_neto] {... common.DEFAULT_ MOVING } [suheugene] @daimyoo__ mike tyson script [mnbjhu] Imagine if it's because both windows are receiving the key inputs [computersdontcompost] @daimyoo__ module typescript [avertae] copy-pasta just better LUL [sailazaray] DinoDance [familjegaming] nice nice :D [wintercoding] LETS GOOO [cactusvacuum] pog [cryptoahash] LFG [leprajon] ship it [marcio_neto] Noice [demki] !today [ivanmisustin] POG [brooklyndev] deploy it to urmom! [coldlover] diagonal? [avertae] publish this we go streess-test LUL [greenknight15] Really impressive for a few hours, just saying [alexandersupertramp29] different colors on every connect [lifeez] hello world POg [fabiohbfreitas] Pog ppHop [nulligor] eepers online? pog [longor1996] Nametags? [wintercoding] Its a liiitle laggy but meh [suheugene] These aren't circles! [marcio_neto] Still more functional than cyberpunk [kselnaag] names or ID must be printed [dfl0__] you can also maybe render the id within the square [mnbjhu] "I'm actually quite scared to deploy to my mum" [q__o] @SuhEugene you cant make circles out of pixels [ifoks] FPS counter when [alexandersupertramp29] make different collors on every new connection? [familjegaming] Different colors of the players would be nice to see them easier [thearte04] How about random color for each player? [liquidor] fillStyle = `#${(100000 + id*100).toString(16)}` or somethign ugly like that LUL [charliesc2] what happens if you put ".gitignore" in gitignore? [dfl0__] random hue [tw_int] HSV(id, s, v) [wintercoding] Making an agario type game? Or what kind of game plan do you have [keshancs] nicknames for each player [afoobar42] @charliesc2 big bang [biryukovsky] hey tsoding how is your sleeping schedule? [lifeez] @CharlieSC2 Kappa [suheugene] @q__o Good point [dfl0__] @wintercoding this is just testing to implement multiplayer to raycasted game [wintercoding] @dfl0__ ooo [longor1996] HSL, not HSV? [kselnaag] hsl [joebanescu] hsl [longor1996] iirc you can do that with decorators... or something. [sofiman] style is not a number ! [sanderjannes] bv life is hard [dfl0__] for microsoft workers, more hours worked = more pay [mykdor] style isString [tzorake] style is not a a number [dfl0__] thus, unnecessary features LUl [alexandersupertramp29] go syntax [tcpstream] typeof style should be string bot number [pigm0] ts with runtime check = runetimescript [dfl0__] unlike js [mrrealmgrinder] you're checking isNumber(style) instead of isString(style) [tnkhanh] correctness is important is good, right? [shpirtman] js is neither correct nor convenient [dfl0__] @tnkhanh yes but that’s why it’s hard to make a balance between correctness and convenience [halcyyyon] what if random style is white? [dfl0__] @halcyyyon it can’t because value is 50 [shpirtman] didn't restart? [sanderjannes] ghost xd [changojuje] Hi :DD [alexandersupertramp29] hue, saturation, lightness [lostmarblerv] Luminance [codecat69] l = value [layonme64] H S L [dexterc] its hoe [abitranis] lightness is alpha, no? [halcyyyon] SeemsGood [cryptoahash] Thanks for the description [tzorake] handy [sanderjannes] for me only rgb exists Kappa [alexandersupertramp29] its not rgba [cryptoahash] Never [nemethg_] I imagine this is good for delta-encoding as well if needed [dfl0__] hsl is very human readable yeah [lifeez] @sanderjannes true [keshancs] 5 years in web dev and never used hsl and never knew how to use it kekw [sanderjannes] But my philips hue lamp must know it LUL [avertae] js fucked up even in correct hsv naming LUL [dfl0__] i find myself being able to imagine rgb or hex colors too just not nearly as convenient [fabiohbfreitas] WAYTOODANK [charliesc2] No thank hue [familjegaming] someone said HSL was a bit more cpu intensive, but I dont see how that would be matter [demki] alpha is for blending, HSV/HSL is for color [lorymaster] RGB is how a physicist thinks of color, HSL is how an artist thinks of light [sailazaray] PrideUwu [dfl0__] what is the technical difference between hsv and hsl though? [urineluckboy] yep [cryptoahash] makes sense [mopcpayc] tsodinSleep [alexandersupertramp29] value - light? [lostmarblerv] They are the same [dfl0__] i always use them interchangeably [demki] HSV and HSL are just different calculation to make academic people happy [liquidor] Couldn't Saturation and Light be defined on the client then? If the only data value is the Hue? [suheugene] v = darkness, l = lightness [longor1996] @LoryMaster A physicist thinks of light color as wavelength :P [demki] or a frequency [inner_sun] You'll still have some cases where a color's perceived brightness is lower/higher just changing the hue but yeah HSL is nice [demki] This is why some of the models take the human vision into account [shpirtman] maybe you didn't restart the server? [waielal] Have you looked into LCH color model? It produces colors with similar lightness when changing its hue parameter [mrrealmgrinder] are you actually sending back the correct PlayerJoined message? You're only checking the queue, or is there no difference? [mrrealmgrinder] ah LUL [alexandersupertramp29] shaise [greenknight15] Ah [lostmarblerv] Maybe if typescript had types [liquidor] Time to create some protocol functions to create the message ojbects :P [mohamed0xf] you can use satisfies [sailazaray] <3 [dfl0__] wrap around? [sanderjannes] Fine im dumb too [inthevibe] What up Mr Tsoding. [aspectro2] this prototype will be used on raycasting? [cryptoahash] @Aspectro2 yup [familjegaming] is there any easy way to make the colors safe for colorblindness? [lostmarblerv] What's the gameplay gonna be? [darekry] is this Tron-like game? [coldlover] on x,y not dx,dy [mrrealmgrinder] tsodinIsntThatPog [ifoks] its 3 am go sleeping :D [urineluckboy] classic [sanderjannes] Always have to fix it urself in this language haha [avertae] can we have proper js? Keepo [nigelwithrow] remember how someone from chat confused you about this formula [lveliarl] jizzscript SleepingHard [alexandersupertramp29] hand tailored mod [familjegaming] perfect for asteroids game [sailazaray] DinoDance [greenknight15] Super cool [alexandersupertramp29] 69 [ifoks] 1500 [lveliarl] 1 billion:) [halcyyyon] how often do we sync? (missed that part) [lveliarl] :) [changojuje] 1 :D [afelix_5] he(g8) höö(c2) [kselnaag] ~10% of viewers [epicus_dingonious] does the game only run on the server? [tobs_on_twitch] my player size is bigger than your player size tsodinClown [cryptoahash] I am off, see you soon. <3 [lostmarblerv] Put players in a queue like AAA games LUL [mykdor] you should do reeturn on other ws.close() also [afelix_5] Wow, long stream! I like it. [lveliarl] check out urmom [mrrealmgrinder] tsodinPog [greenknight15] Yup [fabiohbfreitas] Pog [idkncc] pushing repo to urmom [alexandersupertramp29] wow [urineluckboy] really cool [lveliarl] Stare [mrrealmgrinder] the repo is now in urmom [internetowestatystyki] sick [alexandersupertramp29] learning something new every time watching you [afoobar42] @alexandersupertramp29 + [greenknight15] F [dexterc] KEKW [vivatjavascript] huh [fabiohbfreitas] KEKW [mrrealmgrinder] tsodinD [changojuje] :v [timberbro] pspEhehe pspEhehe [cotoli] Oops [urineluckboy] what could possibly go wrong Kappa [lostmarblerv] very safe, deploy it [halcyyyon] cheap way: touch index.html [avertae] go deeper to urmom [jus1d] allow us to hack u [familjegaming] do not forget the isArray module. the best nodejs module [jus1d] pls [darekry] ../../../etc/shadow [dexterc] you dont trust us D: [lostmarblerv] Good default [idkncc] urmom got hacked [sanderjannes] so i cant get in urmom [darekry] :( [greenknight15] Perfect 😂 [lostmarblerv] So you get a 404 if the file doesn't exist and 403 if it exists? [ifoks] using urmon as a cdn [ebrahim354] I think I saw a bug like an hour a go [binarytoshokan] Hmm, I thought it should still return 404 not 403... as you don't want to share that there is a directory with that name. [longor1996] Just 0.0.0.0 it! :D [ebrahim354] you disconnect in an if statement then send data to an already closed socket [masteragentmiyazaki] Is this a game you are making in the js game editor you have been creating in the recent yt videos? [dexterc] ass [alexandersupertramp29] your moms -s [ultra_hush] s stands for ASS [lveliarl] ass we can gachiHYPER [mrrealmgrinder] zozin doesn't remember ass tsodinCry [piipos] ass tsodinZezin [halcyyyon] what about a forced timeout/close? one person can consume all 69 connections with a casual poll to the socket [tsoding] 45.146.253.5 [tsoding] http://45.146.253.5:6969/ [codecat69] localhost [lemouchoirdexari] hell no [dexterc] no KEKW [lemouchoirdexari] KekingHard [unbandit2006] joined [hhexo] hell no lmao [ultra_hush] SSL_ERROR_RX_RECORD_TOO_LONG [lveliarl] joink my ip EZ [idkncc] u forgot change web socket url [mopcpayc] HACK TIME [lostmarblerv] I won't give you my IP that easily [alexandersupertramp29] getting hacked that it [sanderjannes] im scard [avertae] it tries to open ws on localhost?? [thelummen] @Tsoding 5 year old video of you learning/teaching JS ! Buffed and balled like a bouncer at a night club [masteragentmiyazaki] Can't connect to it [gona01] LUL [masteragentmiyazaki] times out [abitranis] unable to connect.. [tiagodinis33] you could probably read the address from a file [liquidor] Time to use .env or an environment config.mts ? [lostmarblerv] you could use location.host ? [greenknight15] Do it live [hhexo] based [dexterc] GIGACHAD [kselnaag] hotfixed =D [dexterc] wth [halcyyyon] woohoo [abitranis] connected [urineluckboy] cool [ifoks] i dont know who i am [dexterc] lol [fabiohbfreitas] WAYTOODANK [mrrealmgrinder] BWOAH [darekry] i am green one [alexandersupertramp29] i dont see my block [dfl0__] yeah hard to tell who is me [cautionnerd] WAYTOODANK [urineluckboy] too many greens [mopcpayc] PogChamp PogChamp PogChamp [alexandersupertramp29] i dont see myself [alexandersupertramp29] on my screen [piipos] dot env is bullshit nyanPls [ifoks] it rubberbands :D [jj55qs] reminds me slitherio [familjegaming] its game of life simulation [mnbjhu] What AI are you using?? they look like my ranked team mates [idkncc] pog [vivatjavascript] POGGERS [dexterc] lol [gona01] very cool [dfl0__] maybe add outline for client [lveliarl] but funny number [lveliarl] Sadge [urineluckboy] it should have some clear indication which one are you [familjegaming] can you add a /playername on the url? and show playername [sofiman] internet speed battleroyale [alexandersupertramp29] anyone see's block on screen? [tonebacas] well [familjegaming] or just randomize a name :) [lveliarl] PepeLaughW [mnbjhu] I see ads [abitranis] white screen.. [lostmarblerv] You could have multiple arenas and the winners play each other, like tetris 100 [dfl0__] limitation also too much because new user created on refresh [greenknight15] Totally awesome stream thanks tsoding [tonebacas] Clap [unbandit2006] idk i was having probs on firefox [dfl0__] thanks for the long stream tsoding! [sailazaray] 2020Glitchy [familjegaming] looked nice [unbandit2006] thank you tsoding [smarniw] @Unbandit2006 same [grumpy_edge] very cool stream <3 [urineluckboy] gg [kselnaag] bb [russjr08] Have a good one and take care! [smarniw] <3 [idkncc] bye o/ [dfl0__] super fun and educational [mopcpayc] very cool stream, thx [mrrealmgrinder] <3 [sailazaray] <3 [n3ki4qq] yeah, thank you <# [sofiman] <3 <3 <3 [fabiohbfreitas] Thanks for stream <# [halcyyyon] very cool, nice one [familjegaming] Thank you [dfl0__] <3 [fabiohbfreitas] Thanks for stream <# 󠀀 [viciousgg1] awesome work
Info
Channel: Tsoding Daily
Views: 16,526
Rating: undefined out of 5
Keywords:
Id: Ih9OkNeg7v8
Channel Id: undefined
Length: 197min 56sec (11876 seconds)
Published: Fri Jul 12 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.