Название | : | Game Engine Programming: A Simple Package Format |
Продолжительность | : | 3.31.45 |
Дата публикации | : | |
Просмотров | : | 46 rb |
|
You want that memcpy in the put because otherwise you might get unaligned memory write which can crash the program depending on the cpu architecture Comment from : No tux no bux |
|
You're like the Da Vinci of modern gaming and i can just watch one of your sort of,, behind the scenes'' videos and just leave the comment That's pretty sweet Comment from : koosa |
|
Middle endian is a thing For example, 32-bit integers on a PDP-11 0xcafebabe would be stored as 0xfe 0xca 0xbe 0xba Comment from : → to the knee |
|
I know I come late, but I find myself asking: "Why not 'just' use a good TAR library both for creating and reading the package?" I feel like it fit most, if not all, the prerequisite? Comment from : Larandar |
|
This is great The problem was simple enough, so that I could understand everything and I learned a view things For example, at first I did not understand why the ToC would be at the end of the file intuitively I would defenitely think, that a ToC should be at the start of the file However, after your simple explanation it was obvious why having it at the end of the file is more efficient (when adding content later on) Furthermore you seemed to be in a good mood, which made this really enjoyable Comment from : Tim Treichel |
|
3:01:20 Why even keep /data/levels/ ? This is the levels package, right? You could specify a base path in the package header or something if you wanted to preserve that and just have arms_lengthv2/allentities as the file name (or, since everything is actually allentities right now, just arms_lengthv2) Comment from : NKCSS |
|
1:24:00 why not add a version number at the start? That way you don't have to just padd out 'reserved' stuff now; just implement what you need, version the load/create; that way you can just write what you need, when you need to update it later, you can if you want, and a migration/upgrade would just be read_specific_version, write_new_version (specify any additional data it would need) Comment from : NKCSS |
|
I thought you would build it in a way, that, while developing, if a file exists on disk, you'd load that, if not, read it from the package; that way, you can have your packaged up contents, but still work on stuff without having to constantly repackage, but from the first 14 minutes, it seems like you went for an on/off toggle approach I wonder why that is; will watch the other 3h15m to see if I find out 😊 Comment from : NKCSS |
|
Thanks for the video! It was nice and self-contained, with a lot of good best practices Loved how it all came together in the end on the real game The way Jai efficiently casts between types (and << thing to get bytes) makes me feel very data-aware as a programmer, something high level languages try to abstract away Your build times are blazingly fast Thanks for sharing Comment from : Tim Wheeler |
|
I feel like it's so rare that I find a video of Jonathan Blow not deeply in the middle of something Kinda refreshing watch someone cook something up relatively from scratch Comment from : Isaac Lee |
|
Are there links to the very first episodes of working on a package format? Comment from : Limit Holdem |
|
Out of curiosity: have you considered using hashes of the filename / IDs instead of a string path? That would allow for fixed-size Entry_Info and save some package/memory sizebrbrComplexity not worth the performance gains? Comment from : Stardidi |
|
i remember sitting in a lecture at my university (Graz, Austria) first semester, was convinced lectures are importantbrive watched your channel before starting to study and looked up to Jonathan as a mentor!brbri skipped game-dev-days at my uni becuase i had a lecture - 2 days later i learned that you gave a talk at my small univerity while i was in a lecture without mandatory attendance, missing your talk It still hurts a few years later!brbrThanks for being such a great person, you care to share, it's just lovely Comment from : slicxx |
|
Welcome back! :) Comment from : Spider |
|
You can probably use this system to create save files too right? Comment from : 2nafish117 |
|
At 2:26:10, you're doing that ugly array cast Consider adding an array_cast(type, array) as a standard helper function, because array casts are quite common when working with memory at a low level brbrD has their normal casting mechanism handle that case In D, you can just do cast(byte[]) on a float array and it would do the same thing you did there This is arguably worse than having a function, because it adds more meaning to the already overloaded cast keyword brbrAnyway, my point is, I think the language should provide cleaner means of doing that sort of thing Comment from : antonofka9018 |
|
Is there a strong reason as to why the TOC goes at the end of the file rather than straight after the header? Comment from : Lloyd Goodall |
|
12:10 I figured that we did streaming I/O (whether lines or chunks) because of disk latency and support for streams/pipes which are super prevalent in Unix command line applications Of course, streaming is often unnecessary complexity, but the difference from loading the file and executing the processing on the CPU is still orders of magnitude, so it's hard to make a definitive statement for all workloads Comment from : Doru Min |
|
Glad to see you back on YouTube Love your videos Comment from : SamuraiNak |
|
Nit-pick: I think you missed a reserved u32 in the TOC header struct (bytes 4-7 are non-explicit padding) Comment from : Sam Lee |
|
Hi Jonathan, I hope you are doing wellbrI’d like to thank you for your work on The Witness and for sharing these videos on Youtube brbrSometimes technical about game design, programming and sometimes more on the human side, talking about mental health, perception and development, they are relevant and quite welcome!brbrThanks! Comment from : FlyingScarf |
|
by reserving memory for a file (instead of just mmapping it) you're forcing the VM system to page that file out to swap instead of just being able to discard it if you have a read-only file on disk, and you're fine with it remaining so, you're pretty much ialways/i better off mmapping the file than loading it into memory appropriate use of madvise and FILE_FLAG_SEQUENTIAL_SCAN is advised Comment from : Spongman |
|
What's with the "" in the function name (1:56:02) ? Is it ignored by the compiler to let the dev align the function names properly ? Comment from : Aldric Bocquet |
|
OMG! I'm so happy! Comment from : Темирбек Рахимгалиев |
|
you could just zip it Comment from : Jkauppa |
|
Soog these blogs are back You gave me some ideas and inspired me a lot Comment from : Dima Rich |
|
0:50 all_paint_data only one per level, total count 705 - excuse me what? Comment from : bruterasta |
|
Holly shit official upload Comment from : bruterasta |
|
Is the source available? Would it be available? Comment from : junosoft |
|
Oh yes, the "simp" format Comment from : Celia |
|
Yesssssss Comment from : Serge Solkatten |
|
I'm less familiar with this language; what does the [] array syntax do? Comment from : Sam Auciello |
|
Nice to see you back on YouTube! Comment from : Rick |
|
My man uploaded in 360p Comment from : Georgi Hadzhiev |
|
Wonderfully put:br"This is actually a very true thing across all software development: When you're solving a specific problem you can often be very efficient, and when you're solving a general problem you often can't be very efficient, because efficiency requires assumptions, or invariants you can guarantee, and the more general you are trying to be, the fewer invariants you can guarantee" - Jon Blow 2022 Comment from : TheTasteful Toastie |
|
Great topic Comment from : Double |
|
For those interested, Twitch VOD link until YouTube finishes processing something other than 360p: wwwtwitchtv/videos/1267465449 Comment from : Menko |
|
Welcome back on YouTube, king Comment from : 32 gigs |
Game Engine Programming: Animation File Format, part 2. РѕС‚ : Jonathan Blow Download Full Episodes | The Most Watched videos of all time |
Job Letter Format for class 11 and 12 | Letter writing in English | Job Application Format РѕС‚ : Apex Coaching Center Download Full Episodes | The Most Watched videos of all time |
Format of email writing 2023 || Email writing format РѕС‚ : SAZ education Download Full Episodes | The Most Watched videos of all time |
Procedure Oriented Programming and Object Oriented Programming - Java Programming Tutorial РѕС‚ : Ekeeda Download Full Episodes | The Most Watched videos of all time |
This game engine is essential if you want to create a video game #opensource #gamedev #programming РѕС‚ : Coding with Lewis Download Full Episodes | The Most Watched videos of all time |
Is Unity a bad game engine!? ??? #technology #programming #software #gamedev #gaming РѕС‚ : Coding with Lewis Download Full Episodes | The Most Watched videos of all time |
What GAME ENGINE should you use? ? #programming #tech #code #software #gamedev #technology #gaming РѕС‚ : Coding with Lewis Download Full Episodes | The Most Watched videos of all time |
Game Engine Programming: Fog of War 1 РѕС‚ : Jonathan Blow Download Full Episodes | The Most Watched videos of all time |
Adding an Engine Runtime (Play/Stop Buttons) | Coding a 2D Game Engine in Java #39 РѕС‚ : GamesWithGabe Download Full Episodes | The Most Watched videos of all time |
Knapsack Problem using Dynamic Programming Part I | Dynamic Programming | Lec 65 | DAA РѕС‚ : CSE Guru Download Full Episodes | The Most Watched videos of all time |