Recreating Wolfenstein 3D in F#
summary
Recreates Wolfenstein 3D using F# + Fable and cross‑compiles to desktop .NET with Silk/OpenGL, implementing an actual rasterized ray caster (320-column DDA per frame), texture mapping by writing into a byte array, depth-sorted 2D sprites including orientable sprites (8 directions + animation frames), and decompresses original assets with RLE plus Carmack compression. Code is on GitHub, rendering and AI are implemented, the browser and desktop builds run though a desktop demo briefly crashes during the talk; development took about 4–6 months.
AI-written summary · about
chapters (23)
- 0:00Recreating Wolfenstein 3D intro
- 1:36Why F# for Wolfenstein 3D
- 3:21Quick game demo
- 4:27Key principles of Wolfenstein 3D
- 6:34Project planning approach
- 8:16Ray casting fundamentals
- 12:48Digital Differential Analysis
- 15:15Wall height and fisheye fix
- 17:20F# ray caster implementation
- 20:31Canvas to byte arrays switch
- 23:40Adding textures to ray caster
- 28:19Loading game objects and enemies
- 31:06Sprite orientation and enemy AI
- 39:07Enemy AI states and behavior
- 41:13Compression algorithms in Wolfenstein 3D
- 43:24Game assets and graphics formats
- 44:26Desktop target with .NET and OpenGL
- 45:48Desktop version live demo
- 46:32Project timeline and experience
- 48:19Would I do this again
- 51:24Personal background and math skills
- 52:29Ray caster NuGet packages
- 54:13Q&A
related talks
30mA whirlwind tour of creating an F# version of the classic Wolfenstein 3D
33mRun your favorite games everywhere with WASM: the BlazorDoom use case
29mHow I Ported Doom to the Browser with WebAssembly
56mFrom Hell to Heaven: Porting Doom to MAUI
44mRethinking compilers with live coding
24mFrom C to Ruby: Porting Doom
59mPlaying Video Games One Frame at a Time
56mFrom Hell to Heaven: Porting Doom to MAUI
