And the fan remade base game is itself a mod of the second major version of the engine of the original game's sequel.
Playing Black Mesa: Blue Shift made me realize that I'm playing a fan remake of an expansion pack of the original game in the form of a mod of the fan remake.
I can definitely understand that. It’s tricky, because a managed-side object that represents a UnityEngine.Object is almost entirely useless when the native-side object has been destroyed.
I do think it might have been better to have had a specific “IsAlive()” function from the beginning, however.
this discovery only happened due to my own experimentation. the game does nothing to help figure this out. also “new” and “accolades available” are useful outside of the DLC so this solution kinda sucks.
okay I figured it out. you have to open the map, open the filters menu, and hide “new”, “accolades available”, and “expeditions”. only THEN will the DLC not show on the map and the GPS won’t route you to them. also you have to make sure you don’t already have your GPS marker on a DLC map marker.
I’m curious to know more about your take on this! Do you think this functionality should be removed and replaced with some other mechanism?
Everything about this is engineered to minimize usability and maximize FOMO. It’s a horrible, manipulative practice.
Example: You use the in-game GPS to say “I want to race”. It routes you to the nearest one. If that race happens to be part of DLC you don’t own… the game doesn’t care. Maybe you don’t know you don’t own it and you attempt to begin the race. An unskippable trailer for the DLC begins playing.
Has there ever been a better simile than “Sort of stretched, like butter scraped over too much bread”? Bilbo really speaks my language.
Playing Forza Horizon 5 without all of the available paid DLC is one of the worst experiences of capitalism intersecting with gaming that you can experience.
There is no greater anguish than going to a Wikipedia page, seeing "Not to be confused with _____" at the top and realizing that you were, in fact, confused with.
I'm really excited to finally get to the point to where I can make simple games, and serialization is another big step towards that. Next up is scene creation. Until next time!★
Back with some more #sorbet3d updates! This time: serialization! I'm using the wonderful cereal library here to save/load the editor camera's entt components to a json file. I've also reorganized the project multiple times, resulting in a much better separation between header and source files... 🧵
holy shit The Last of Us Season 2, Episode 6 was SO well done. The scene at the end was absolutely incredible.
Switching #sorbet3D from *.sln and *.vcxproj to CMake was somehow simultaneously easy and horrific. Like, is find_package necessary or not?! It feels nicer though, I have more control over everything. Keeping vcpkg is a huge plus, too. Will definitely use cmake going forward #gamedev #indiedev
#sorbet3D engine update: I've got camera controls, an input module, flipped OpenGL's Z axis, removed my event system in favor of the one included with entt, fixed up my transform math, and enabled backface culling. until next time! ★ #gamedev #indiedev
Finally lots of architectural changes, leaning more on SDL3, and bug fixes (specifically for memory access patterns). I also integrated a basic assets system that allows for engine/editor/game asset separation and access (Suzanne and her shaders are currently engine assets).
That’s all for now!~★
Proper MVP matrices are now setup used for rendering. The model matrix is properly derived from transform components. View and Projection from a camera component are next!
Leaning way harder into ENTT. Suzanne is now an entity with mesh renderer and transform components. Systems dedicated to submitting meshes for rendering and this debug spinning from these gifs have been implemented.
Mesh normals! This also comes with a separation of the CPU and GPU data for meshes. You interact with the CPU side and the GPU data is loaded and unloaded on demand as-needed, or manually. It’ll be very easy to do stuff like deleting the CPU data from memory while keeping the GPU data for rendering.
Obligatory step accomplished: integrating the ubiquitous dearIMGUI. This functionality lives in a dedicated Editor DLL, which is automatically loaded by the engine if present at launch. There’s SO much more under the hood that’s been done… 🧵#gamedev #indiedev #sorbet3D
I would recommend looking into "Root Motion" if you haven't already.
Here's where I'm at now. I've got a proper MVP matrix setup, wrapped the render data for the mesh into a dedicated class that doesn't require recreation from the source asset every frame. I'm now able to manipulate the "camera" via the view matrix and the model with the model matrix.
Got vertex colors working, added a wireframe mode toggle, and started rendering with indices. At this point I'm still recreating all of the render data manually every frame and rotating the verts on the CPU. Also remembered to actually enable depth testing.
Not the very first thing I rendered, but the first rendered mesh loaded from disk is this... poorly executed Suzanne. I was only giving OpenGL verts, no indices. If you do that, you need to provide duplicate verts to form proper triangles. I wasn't doing that, hence the broken result.
Started working on my first engine this weekend. I'm calling it Sorbet 3D. It's written in C++20 and uses SDL3, OpenGL, entt, assimp, joltphysics, glad, and glm. Here's some GIFs of the milestones I've hit so far... 🧵 #gamedev #indiedev #engine #3d
This might be the worst description for a piece of media on a streaming platform.
I think I'm permanently moving over to Bluesky from Mastodon. It'll be kinda empty on my account until I do, though.
This genuinely shook me to my core. #Oblivion #OblivionRemastered