is presently its sole maintainer,
You can support him:
Recap and set the stage for the day
Run the game to see our debug collision volumes, and determine to implement room-based collision volumes
handmade_entity.h: Add CollisionVolume to the entity struct and propagate that change
handmade_sim_region.cpp: Introduce EntityOverlapsEntity(), remove EntitiesOverlap() and continue propagating CollisionVolume
handmade_math.h: Introduce a version of HasArea() that takes a rectangle3, and continue propagating the entity struct change
Run the game to see that the volumes are being offset unnecessarily
handmade_entity.cpp: Prevent UpdateAndRenderEntites() from calling DrawVolume()
Run the game to see that we are back to something relatively sane
handmade_entity.cpp: Enable UpdateAndRenderEntites() to colour the collision volumes according to whether they are colliding
Run the game to see our properly bounded rooms
handmade_world_mode.cpp: Make AddStandardRoom() only bias the floor tiles upwards
Run the game to see what that looks like
handmade_world_mode.cpp: Make PlayWorld() increase the TypicalFloorHeight, run the game to see how that height feels and note a graphical artefact when going downstairs
handmade_world_mode.cpp: Try to increase the tile size, and decrease the hero size in an effort to combat that clipping artefact when on the stairs
Run the game and consider fixing the problem by moving the camera over to the stairs
handmade_world_mode.cpp: Temporarily make AddStandardRoom() generate the stairwell in the centre and run the game to see that the artefact does not occur
handmade_sim_region.cpp: Consider giving the camera a physical location in the world, which gets unpacked into the sim region
Blackboard: Camera Target Position
handmade_sim_region.cpp: Construct the notion of a camera target position in UpdateCameraForEntityMovement()
Run the game and note that the camera is currently unable to articulate to the game where it is trying to view
handmade_sim_region.cpp: Make UpdateCameraForEntityMovement() position the camera in a sim region
handmade_world_mode.cpp: Make UpdateAndRenderWorld() set the SimulationCenter based on the camera target
Run the game and consider how best to locate the camera in the world
handmade_world_mode.h: Add OffsetZ to the game_camera struct for UpdateCameraForEntityMovement()
Run the game to see that the focusing still works
handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() and UpdateAndRenderWorld() to lock the camera to the hero's location
Run the game to see the camera following the hero
handmade_sim_region.cpp: Introduce the notion of a SpecialCamera region in UpdateCameraForEntityMovement()
handmade_world_mode.cpp: Enable AddStandardRoom() to create a collision volume which triggers the SpecialCamera
Run the game to see our collision volume
handmade_world_mode.cpp: Temporarily disable the familiars, and extend the collision volume upwards
Run the game to try triggering that collision volume
kknewkles Q: Hi Casey! Two questions: 1) How come RAD aren't owning every avenue of compression in existence, like video codecs? and 2) Will Handmade Hero at some point be beautifully, 2D-animated like the excellent, excellent Hollow Knight, that everyone should play, by the way?
sausagesuperb Q: Why don't you search and replace for the new short sexy data types
kknewkles Q: That was Shovel Knight! Hollow Knight is a new game!
0xdeadbeefh Q: Is the camera for this game gonna be plenty smart or just a little smart? In this staircase I imagine you might want to measure the velocity of the player to not have it affect the camera if the player is rushing straight past
handmade_sim_region.cpp: Prevent the camera from panning to the staircase unless the hero is traversing the stairs
Run the game to see how that works
macielda Q: Is the Debug Text draw order still inverted? It seems so by the looks of the Debug text. Is the profiler still working?
teamrandb Q: Greetings Casey! Last week during the wonderful Handmade Chat you demonstrated how to dynamically create code in memory. You have mentioned in the past how you do a fair bit of meta-programming and I always envisioned that you would generate C / C++ code to files. When you tackle meta-programming, do you write out to disk first and then have it compiled? Do you do it all in memory similar to what you did last week? Combination of both?
jezzi23 Q: Hey Casey. I was messing around with 4x4 matrix multiplication implementations and whipped out ten variations, some of which naive and others more optimal with SIMD. Out of curiosity I performance tested them all on MSVC, clang and gcc. I was very surprised by the results as the compilers seem to be doing very different things for this simple task. For example, on gcc the naive versions sometimes beat what I thought would be optimal SIMD (seems like it was able to output better intrinsics) but on clang it was the opposite. MSVC seems to have failed at unrolling a loop and all implementations were crap except for a manually unrolled SIMD version. I realize this is a rathole of a problem but is this really where we're at in terms of the philosophy of "write once and let each compiler do the best thing for the platform"? Any thoughts?
macielda Q: I remember you mentioned at some point that you were really interested in Salt & Sanctuary. Have you played it? Did you work on that game?
wordisnull Q: Can you please explain once more why you kept CameraOffsetZ? Is it for movement beetwen tilemaps or for something else?
Blackboard: Encoding the location the camera is looking at
m0re85 Q: If it's too off-topic I'll ask tomorrow during pre-stream, follow up on devirtualization: Your main criticism about virtual functions was the overhead you get from the indirection, so with devirtualization would you consider using them, or are there any other downsides compared to tagged unions?
Close it down with a plug of @AsafGartner's searcher [see Resources, Handmade Hero Annotations Search]