13:19 < Hausdorff> So I've been looking through the code some, and finally am piecing together how things work. 13:19 < Hausdorff> 80% of my confusion was solved when I realized just how liberally everything gets passed through the kernel. 13:25 < Hausdorff> GameServer()->OnSnap(i); m_SnapshotBuilder.finish(pData); // And now we have a snapshot! 13:26 < Hausdorff> It took me a few minutes to figure out how IServer used IGameServer. To a functional programmer, this method is very bewildering :D 14:55 <+rand> same for every programmer 15:57 <@minus> it's very runtimey design 16:09 <+rand> i wonder if building a server/client from scratch, or at least using the right protocol, is worth considering 16:19 < Hausdorff> rintimey design :D 16:21 < Hausdorff> runtimey* 16:39 < Hausdorff> So, how should I make my client connected to a modded server? 16:40 < Hausdorff> It seems like a versioning hash is generated when I build the server normally, preventing a client from connecting to a server that wasn't built from the same code... 16:40 < Hausdorff> Should I lie about the hash? 16:45 < Hausdorff> Or uh, I guess the hash only depends on certain files? 16:51 < Hausdorff> Right, CHash("src/game/generated/nethash.cpp", "src/engine/shared/protocol.h", "src/game/generated/protocol.h", "src/game/tuning.h", "src/game/gamecore.cpp", network_header) 16:54 < Hausdorff> If, say, I want to implement a flag to "freeze" a player like in ddrace, I'll just have to carry that data separately (from CCharacterCore) and kill character velocity in ... IGameController::Snap, I guess 16:58 < Hausdorff> Or actually, I could put that in CCharacter. 17:01 <@heinrich5991> Hausdorff: just lie about the hash