From 5f50109993f4b3132af1359ea122e5a1bd133fdc Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Wed, 7 Mar 2018 21:48:09 +0000 Subject: [PATCH] Fix some incorrectly converted annotations Also apply some :speech categorisation --- cmuratori/hero/code/code003.hmml | 8 ++++---- cmuratori/hero/code/code004.hmml | 2 +- cmuratori/hero/code/code005.hmml | 2 +- cmuratori/hero/code/code007.hmml | 2 +- cmuratori/hero/code/code008.hmml | 2 +- cmuratori/hero/code/code009.hmml | 4 ++-- cmuratori/hero/code/code010.hmml | 2 +- cmuratori/hero/code/code011.hmml | 2 +- cmuratori/hero/code/code012.hmml | 4 ++-- cmuratori/hero/code/code013.hmml | 4 ++-- cmuratori/hero/code/code014.hmml | 4 ++-- cmuratori/hero/code/code015.hmml | 2 +- cmuratori/hero/code/code016.hmml | 2 +- cmuratori/hero/code/code017.hmml | 4 ++-- cmuratori/hero/code/code018.hmml | 2 +- cmuratori/hero/code/code019.hmml | 4 ++-- cmuratori/hero/code/code020.hmml | 4 ++-- cmuratori/hero/code/code021.hmml | 2 +- cmuratori/hero/code/code022.hmml | 2 +- cmuratori/hero/code/code023.hmml | 4 ++-- cmuratori/hero/code/code024.hmml | 4 ++-- cmuratori/hero/code/code025.hmml | 2 +- cmuratori/hero/code/code026.hmml | 2 +- cmuratori/hero/code/code027.hmml | 2 +- cmuratori/hero/code/code028.hmml | 2 +- cmuratori/hero/code/code029.hmml | 2 +- cmuratori/hero/code/code030.hmml | 2 +- cmuratori/hero/code/code031.hmml | 4 ++-- cmuratori/hero/code/code032.hmml | 2 +- cmuratori/hero/code/code033.hmml | 4 ++-- cmuratori/hero/code/code034.hmml | 4 ++-- cmuratori/hero/code/code035.hmml | 4 ++-- cmuratori/hero/code/code036.hmml | 2 +- cmuratori/hero/code/code037.hmml | 2 +- cmuratori/hero/code/code038.hmml | 2 +- cmuratori/hero/code/code039.hmml | 4 ++-- cmuratori/hero/code/code040.hmml | 2 +- cmuratori/hero/code/code041.hmml | 4 ++-- cmuratori/hero/code/code042.hmml | 2 +- cmuratori/hero/code/code043.hmml | 2 +- cmuratori/hero/code/code044.hmml | 2 +- cmuratori/hero/code/code045.hmml | 2 +- cmuratori/hero/code/code046.hmml | 2 +- cmuratori/hero/code/code047.hmml | 2 +- cmuratori/hero/code/code048.hmml | 2 +- cmuratori/hero/code/code049.hmml | 2 +- cmuratori/hero/code/code050.hmml | 2 +- cmuratori/hero/code/code051.hmml | 2 +- cmuratori/hero/code/code052.hmml | 4 ++-- cmuratori/hero/code/code053.hmml | 4 ++-- cmuratori/hero/code/code054.hmml | 4 ++-- cmuratori/hero/code/code055.hmml | 4 ++-- cmuratori/hero/code/code056.hmml | 4 ++-- cmuratori/hero/code/code057.hmml | 4 ++-- cmuratori/hero/code/code058.hmml | 4 ++-- cmuratori/hero/code/code059.hmml | 4 ++-- cmuratori/hero/code/code060.hmml | 2 +- cmuratori/hero/code/code061.hmml | 4 ++-- cmuratori/hero/code/code062.hmml | 4 ++-- cmuratori/hero/code/code063.hmml | 2 +- cmuratori/hero/code/code064.hmml | 2 +- cmuratori/hero/code/code065.hmml | 2 +- cmuratori/hero/code/code066.hmml | 2 +- cmuratori/hero/code/code067.hmml | 2 +- cmuratori/hero/code/code068.hmml | 2 +- cmuratori/hero/code/code069.hmml | 2 +- cmuratori/hero/code/code070.hmml | 2 +- cmuratori/hero/code/code071.hmml | 4 ++-- cmuratori/hero/code/code072.hmml | 4 ++-- cmuratori/hero/code/code073.hmml | 4 ++-- cmuratori/hero/code/code074.hmml | 4 ++-- cmuratori/hero/code/code075.hmml | 4 ++-- cmuratori/hero/code/code076.hmml | 4 ++-- cmuratori/hero/code/code077.hmml | 4 ++-- cmuratori/hero/code/code078.hmml | 4 ++-- cmuratori/hero/code/code079.hmml | 4 ++-- cmuratori/hero/code/code080.hmml | 4 ++-- cmuratori/hero/code/code081.hmml | 4 ++-- cmuratori/hero/code/code082.hmml | 4 ++-- cmuratori/hero/code/code083.hmml | 8 ++++---- cmuratori/hero/code/code084.hmml | 4 ++-- cmuratori/hero/code/code085.hmml | 4 ++-- cmuratori/hero/code/code086.hmml | 4 ++-- cmuratori/hero/code/code087.hmml | 4 ++-- cmuratori/hero/code/code088.hmml | 4 ++-- cmuratori/hero/code/code089.hmml | 4 ++-- cmuratori/hero/code/code090.hmml | 4 ++-- cmuratori/hero/code/code091.hmml | 4 ++-- cmuratori/hero/code/code092.hmml | 4 ++-- cmuratori/hero/code/code093.hmml | 2 +- cmuratori/hero/code/code094.hmml | 4 ++-- cmuratori/hero/code/code095.hmml | 4 ++-- cmuratori/hero/code/code096.hmml | 4 ++-- cmuratori/hero/code/code097.hmml | 4 ++-- cmuratori/hero/code/code098.hmml | 4 ++-- cmuratori/hero/code/code099.hmml | 4 ++-- cmuratori/hero/code/code100.hmml | 2 +- cmuratori/hero/code/code102.hmml | 2 +- cmuratori/hero/code/code103.hmml | 4 ++-- cmuratori/hero/code/code104.hmml | 4 ++-- cmuratori/hero/code/code105.hmml | 4 ++-- cmuratori/hero/code/code106.hmml | 4 ++-- cmuratori/hero/code/code107.hmml | 4 ++-- cmuratori/hero/code/code108.hmml | 4 ++-- cmuratori/hero/code/code109.hmml | 4 ++-- cmuratori/hero/code/code110.hmml | 4 ++-- cmuratori/hero/code/code111.hmml | 4 ++-- cmuratori/hero/code/code112.hmml | 4 ++-- cmuratori/hero/code/code113.hmml | 4 ++-- cmuratori/hero/code/code114.hmml | 4 ++-- cmuratori/hero/code/code115.hmml | 4 ++-- cmuratori/hero/code/code116.hmml | 6 +++--- cmuratori/hero/code/code117.hmml | 4 ++-- cmuratori/hero/code/code118.hmml | 4 ++-- cmuratori/hero/code/code119.hmml | 2 +- cmuratori/hero/code/code120.hmml | 2 +- cmuratori/hero/code/code121.hmml | 2 +- cmuratori/hero/code/code122.hmml | 2 +- cmuratori/hero/code/code123.hmml | 6 +++--- cmuratori/hero/code/code124.hmml | 4 ++-- cmuratori/hero/code/code125.hmml | 4 ++-- cmuratori/hero/code/code126.hmml | 4 ++-- cmuratori/hero/code/code127.hmml | 4 ++-- cmuratori/hero/code/code128.hmml | 4 ++-- cmuratori/hero/code/code129.hmml | 4 ++-- cmuratori/hero/code/code130.hmml | 4 ++-- cmuratori/hero/code/code131.hmml | 4 ++-- cmuratori/hero/code/code132.hmml | 4 ++-- cmuratori/hero/code/code133.hmml | 4 ++-- cmuratori/hero/code/code134.hmml | 4 ++-- cmuratori/hero/code/code135.hmml | 4 ++-- cmuratori/hero/code/code136.hmml | 4 ++-- cmuratori/hero/code/code137.hmml | 4 ++-- cmuratori/hero/code/code138.hmml | 4 ++-- cmuratori/hero/code/code139.hmml | 4 ++-- cmuratori/hero/code/code140.hmml | 4 ++-- cmuratori/hero/code/code142.hmml | 2 +- cmuratori/hero/code/code143.hmml | 2 +- cmuratori/hero/code/code144.hmml | 2 +- cmuratori/hero/code/code145.hmml | 2 +- cmuratori/hero/code/code147.hmml | 2 +- cmuratori/hero/code/code148.hmml | 2 +- cmuratori/hero/code/code149.hmml | 2 +- cmuratori/hero/code/code150.hmml | 6 +++--- cmuratori/hero/code/code151.hmml | 8 ++++---- cmuratori/hero/code/code152.hmml | 2 +- cmuratori/hero/code/code153.hmml | 2 +- cmuratori/hero/code/code154.hmml | 2 +- cmuratori/hero/code/code155.hmml | 2 +- cmuratori/hero/code/code156.hmml | 2 +- cmuratori/hero/code/code157.hmml | 2 +- cmuratori/hero/code/code158.hmml | 2 +- cmuratori/hero/code/code159.hmml | 2 +- cmuratori/hero/code/code160.hmml | 2 +- cmuratori/hero/code/code161.hmml | 2 +- cmuratori/hero/code/code162.hmml | 4 ++-- cmuratori/hero/code/code163.hmml | 8 ++++---- cmuratori/hero/code/code164.hmml | 4 ++-- cmuratori/hero/code/code165.hmml | 4 ++-- cmuratori/hero/code/code166.hmml | 4 ++-- cmuratori/hero/code/code167.hmml | 4 ++-- cmuratori/hero/code/code168.hmml | 4 ++-- cmuratori/hero/code/code169.hmml | 6 +++--- cmuratori/hero/code/code170.hmml | 4 ++-- cmuratori/hero/code/code171.hmml | 4 ++-- cmuratori/hero/code/code172.hmml | 4 ++-- cmuratori/hero/code/code173.hmml | 4 ++-- cmuratori/hero/code/code174.hmml | 4 ++-- cmuratori/hero/code/code175.hmml | 4 ++-- cmuratori/hero/code/code176.hmml | 4 ++-- cmuratori/hero/code/code177.hmml | 4 ++-- cmuratori/hero/code/code178.hmml | 4 ++-- cmuratori/hero/code/code179.hmml | 4 ++-- cmuratori/hero/code/code180.hmml | 6 +++--- cmuratori/hero/code/code181.hmml | 4 ++-- cmuratori/hero/code/code182.hmml | 4 ++-- cmuratori/hero/code/code183.hmml | 4 ++-- cmuratori/hero/code/code184.hmml | 4 ++-- cmuratori/hero/code/code185.hmml | 4 ++-- cmuratori/hero/code/code186.hmml | 4 ++-- cmuratori/hero/code/code187.hmml | 4 ++-- cmuratori/hero/code/code188.hmml | 4 ++-- cmuratori/hero/code/code189.hmml | 4 ++-- cmuratori/hero/code/code190.hmml | 4 ++-- cmuratori/hero/code/code191.hmml | 4 ++-- cmuratori/hero/code/code192.hmml | 4 ++-- cmuratori/hero/code/code193.hmml | 4 ++-- cmuratori/hero/code/code194.hmml | 12 ++++++------ cmuratori/hero/code/code195.hmml | 4 ++-- cmuratori/hero/code/code196.hmml | 4 ++-- cmuratori/hero/code/code197.hmml | 6 +++--- cmuratori/hero/code/code198.hmml | 4 ++-- cmuratori/hero/code/code199.hmml | 4 ++-- cmuratori/hero/code/code200.hmml | 4 ++-- cmuratori/hero/code/code201.hmml | 4 ++-- cmuratori/hero/code/code202.hmml | 4 ++-- cmuratori/hero/code/code203.hmml | 6 +++--- cmuratori/hero/code/code204.hmml | 6 +++--- cmuratori/hero/code/code205.hmml | 8 ++++---- cmuratori/hero/code/code206.hmml | 4 ++-- cmuratori/hero/code/code207.hmml | 6 +++--- cmuratori/hero/code/code208.hmml | 8 ++++---- cmuratori/hero/code/code209.hmml | 6 +++--- cmuratori/hero/code/code210.hmml | 4 ++-- cmuratori/hero/code/code211.hmml | 4 ++-- cmuratori/hero/code/code212.hmml | 6 +++--- cmuratori/hero/code/code213.hmml | 4 ++-- cmuratori/hero/code/code214.hmml | 4 ++-- cmuratori/hero/code/code215.hmml | 4 ++-- cmuratori/hero/code/code216.hmml | 8 ++++---- cmuratori/hero/code/code217.hmml | 6 +++--- cmuratori/hero/code/code218.hmml | 6 +++--- cmuratori/hero/code/code219.hmml | 9 ++++++--- cmuratori/hero/code/code220.hmml | 4 ++-- cmuratori/hero/code/code221.hmml | 4 ++-- cmuratori/hero/code/code222.hmml | 4 ++-- cmuratori/hero/code/code223.hmml | 4 ++-- cmuratori/hero/code/code224.hmml | 4 ++-- cmuratori/hero/code/code225.hmml | 4 ++-- cmuratori/hero/code/code226.hmml | 4 ++-- cmuratori/hero/code/code227.hmml | 4 ++-- cmuratori/hero/code/code228.hmml | 4 ++-- cmuratori/hero/code/code229.hmml | 6 +++--- cmuratori/hero/code/code230.hmml | 4 ++-- cmuratori/hero/code/code231.hmml | 4 ++-- cmuratori/hero/code/code232.hmml | 4 ++-- cmuratori/hero/code/code233.hmml | 4 ++-- cmuratori/hero/code/code234.hmml | 4 ++-- cmuratori/hero/code/code235.hmml | 4 ++-- cmuratori/hero/code/code236.hmml | 4 ++-- cmuratori/hero/code/code237.hmml | 4 ++-- cmuratori/hero/code/code238.hmml | 4 ++-- cmuratori/hero/code/code239.hmml | 4 ++-- cmuratori/hero/code/code240.hmml | 4 ++-- cmuratori/hero/code/code241.hmml | 4 ++-- cmuratori/hero/code/code242.hmml | 4 ++-- cmuratori/hero/code/code243.hmml | 6 +++--- cmuratori/hero/code/code244.hmml | 4 ++-- cmuratori/hero/code/code245.hmml | 4 ++-- cmuratori/hero/code/code246.hmml | 6 +++--- cmuratori/hero/code/code247.hmml | 4 ++-- cmuratori/hero/code/code248.hmml | 4 ++-- cmuratori/hero/code/code249.hmml | 4 ++-- cmuratori/hero/code/code250.hmml | 4 ++-- cmuratori/hero/code/code251.hmml | 6 +++--- cmuratori/hero/code/code252.hmml | 2 +- cmuratori/hero/code/code253.hmml | 4 ++-- cmuratori/hero/code/code254.hmml | 6 +++--- cmuratori/hero/code/code255.hmml | 6 +++--- cmuratori/hero/code/code256.hmml | 10 +++++----- cmuratori/hero/code/code257.hmml | 6 +++--- cmuratori/hero/code/code258.hmml | 12 ++++++------ cmuratori/hero/code/code259.hmml | 4 ++-- cmuratori/hero/code/code260.hmml | 6 +++--- cmuratori/hero/code/code261.hmml | 6 +++--- cmuratori/hero/code/code262.hmml | 6 +++--- cmuratori/hero/code/code263.hmml | 4 ++-- cmuratori/hero/code/code264.hmml | 4 ++-- cmuratori/hero/code/code265.hmml | 4 ++-- cmuratori/hero/code/code266.hmml | 6 +++--- cmuratori/hero/code/code267.hmml | 6 +++--- cmuratori/hero/code/code268.hmml | 4 ++-- cmuratori/hero/code/code269.hmml | 6 +++--- cmuratori/hero/code/code270.hmml | 6 +++--- cmuratori/hero/code/code271.hmml | 6 +++--- cmuratori/hero/code/code272.hmml | 6 +++--- cmuratori/hero/code/code273.hmml | 6 +++--- cmuratori/hero/code/code274.hmml | 4 ++-- cmuratori/hero/code/code275.hmml | 4 ++-- cmuratori/hero/code/code276.hmml | 6 +++--- cmuratori/hero/code/code277.hmml | 6 +++--- cmuratori/hero/code/code278.hmml | 4 ++-- cmuratori/hero/code/code279.hmml | 4 ++-- cmuratori/hero/code/code280.hmml | 4 ++-- cmuratori/hero/code/code281.hmml | 4 ++-- cmuratori/hero/code/code282.hmml | 4 ++-- cmuratori/hero/code/code283.hmml | 4 ++-- cmuratori/hero/code/code284.hmml | 6 +++--- cmuratori/hero/code/code285.hmml | 4 ++-- cmuratori/hero/code/code286.hmml | 4 ++-- cmuratori/hero/code/code287.hmml | 6 +++--- cmuratori/hero/code/code288.hmml | 4 ++-- cmuratori/hero/code/code289.hmml | 4 ++-- cmuratori/hero/code/code290.hmml | 4 ++-- cmuratori/hero/code/code291.hmml | 4 ++-- cmuratori/hero/code/code292.hmml | 4 ++-- cmuratori/hero/code/code293.hmml | 6 +++--- cmuratori/hero/code/code294.hmml | 4 ++-- cmuratori/hero/code/code295.hmml | 8 ++++---- cmuratori/hero/code/code296.hmml | 4 ++-- cmuratori/hero/code/code297.hmml | 4 ++-- cmuratori/hero/code/code298.hmml | 4 ++-- cmuratori/hero/code/code299.hmml | 4 ++-- cmuratori/hero/code/code300.hmml | 4 ++-- cmuratori/hero/code/code301.hmml | 4 ++-- cmuratori/hero/code/code302.hmml | 4 ++-- cmuratori/hero/code/code303.hmml | 4 ++-- cmuratori/hero/code/code304.hmml | 4 ++-- cmuratori/hero/code/code305.hmml | 4 ++-- cmuratori/hero/code/code306.hmml | 2 +- cmuratori/hero/code/code307.hmml | 4 ++-- cmuratori/hero/code/code308.hmml | 4 ++-- cmuratori/hero/code/code309.hmml | 4 ++-- cmuratori/hero/code/code310.hmml | 4 ++-- cmuratori/hero/code/code311.hmml | 8 ++++---- cmuratori/hero/code/code312.hmml | 4 ++-- cmuratori/hero/code/code313.hmml | 4 ++-- cmuratori/hero/code/code314.hmml | 4 ++-- cmuratori/hero/code/code315.hmml | 6 +++--- cmuratori/hero/code/code316.hmml | 6 +++--- cmuratori/hero/code/code317.hmml | 4 ++-- cmuratori/hero/code/code318.hmml | 4 ++-- cmuratori/hero/code/code319.hmml | 4 ++-- cmuratori/hero/code/code320.hmml | 6 +++--- cmuratori/hero/code/code321.hmml | 4 ++-- cmuratori/hero/code/code322.hmml | 4 ++-- cmuratori/hero/code/code323.hmml | 4 ++-- cmuratori/hero/code/code324.hmml | 4 ++-- cmuratori/hero/code/code325.hmml | 4 ++-- cmuratori/hero/code/code326.hmml | 4 ++-- cmuratori/hero/code/code327.hmml | 6 +++--- cmuratori/hero/code/code328.hmml | 4 ++-- cmuratori/hero/code/code329.hmml | 4 ++-- cmuratori/hero/code/code330.hmml | 4 ++-- cmuratori/hero/code/code331.hmml | 4 ++-- cmuratori/hero/code/code332.hmml | 4 ++-- cmuratori/hero/code/code333.hmml | 4 ++-- cmuratori/hero/code/code334.hmml | 4 ++-- cmuratori/hero/code/code335.hmml | 4 ++-- cmuratori/hero/code/code336.hmml | 4 ++-- cmuratori/hero/code/code337.hmml | 4 ++-- cmuratori/hero/code/code338.hmml | 4 ++-- cmuratori/hero/code/code339.hmml | 4 ++-- cmuratori/hero/code/code340.hmml | 4 ++-- cmuratori/hero/code/code341.hmml | 4 ++-- cmuratori/hero/code/code342.hmml | 4 ++-- cmuratori/hero/code/code343.hmml | 4 ++-- cmuratori/hero/code/code344.hmml | 6 +++--- cmuratori/hero/code/code345.hmml | 6 +++--- cmuratori/hero/code/code346.hmml | 4 ++-- cmuratori/hero/code/code347.hmml | 4 ++-- cmuratori/hero/code/code348.hmml | 6 +++--- cmuratori/hero/code/code349.hmml | 8 ++++---- cmuratori/hero/code/code350.hmml | 6 +++--- cmuratori/hero/code/code351.hmml | 6 +++--- cmuratori/hero/code/code352.hmml | 4 ++-- cmuratori/hero/code/code353.hmml | 4 ++-- cmuratori/hero/code/code354.hmml | 4 ++-- cmuratori/hero/code/code355.hmml | 4 ++-- cmuratori/hero/code/code356.hmml | 4 ++-- cmuratori/hero/code/code357.hmml | 8 ++++---- cmuratori/hero/code/code358.hmml | 4 ++-- cmuratori/hero/code/code359.hmml | 4 ++-- cmuratori/hero/code/code360.hmml | 4 ++-- cmuratori/hero/code/code361.hmml | 6 +++--- cmuratori/hero/code/code362.hmml | 4 ++-- cmuratori/hero/code/code363.hmml | 4 ++-- cmuratori/hero/code/code364.hmml | 4 ++-- cmuratori/hero/code/code365.hmml | 4 ++-- cmuratori/hero/code/code366.hmml | 6 +++--- cmuratori/hero/code/code367.hmml | 4 ++-- cmuratori/hero/code/code368.hmml | 6 +++--- cmuratori/hero/code/code369.hmml | 4 ++-- cmuratori/hero/code/code370.hmml | 4 ++-- cmuratori/hero/code/code371.hmml | 4 ++-- cmuratori/hero/code/code372.hmml | 4 ++-- cmuratori/hero/code/code373.hmml | 4 ++-- cmuratori/hero/code/code374.hmml | 4 ++-- cmuratori/hero/code/code375.hmml | 4 ++-- cmuratori/hero/code/code376.hmml | 4 ++-- cmuratori/hero/code/code377.hmml | 4 ++-- cmuratori/hero/code/code378.hmml | 4 ++-- cmuratori/hero/code/code379.hmml | 4 ++-- cmuratori/hero/code/code380.hmml | 4 ++-- cmuratori/hero/code/code381.hmml | 4 ++-- cmuratori/hero/code/code382.hmml | 4 ++-- cmuratori/hero/code/code383.hmml | 8 ++++---- cmuratori/hero/code/code384.hmml | 6 +++--- cmuratori/hero/code/code385.hmml | 4 ++-- cmuratori/hero/code/code386.hmml | 6 +++--- cmuratori/hero/code/code387.hmml | 4 ++-- cmuratori/hero/code/code388.hmml | 4 ++-- cmuratori/hero/code/code389.hmml | 4 ++-- cmuratori/hero/code/code390.hmml | 4 ++-- cmuratori/hero/code/code391.hmml | 4 ++-- cmuratori/hero/code/code392.hmml | 4 ++-- cmuratori/hero/code/code393.hmml | 4 ++-- cmuratori/hero/code/code394.hmml | 4 ++-- cmuratori/hero/code/code395.hmml | 4 ++-- cmuratori/hero/code/code396.hmml | 4 ++-- cmuratori/hero/code/code397.hmml | 4 ++-- cmuratori/hero/code/code398.hmml | 4 ++-- cmuratori/hero/code/code399.hmml | 4 ++-- cmuratori/hero/code/code400.hmml | 4 ++-- cmuratori/hero/code/code401.hmml | 4 ++-- cmuratori/hero/code/code402.hmml | 4 ++-- cmuratori/hero/code/code403.hmml | 6 +++--- cmuratori/hero/code/code404.hmml | 4 ++-- cmuratori/hero/code/code405.hmml | 2 +- cmuratori/hero/code/code406.hmml | 6 +++--- cmuratori/hero/code/code407.hmml | 4 ++-- cmuratori/hero/code/code408.hmml | 6 +++--- cmuratori/hero/code/code409.hmml | 2 +- cmuratori/hero/code/code410.hmml | 4 ++-- cmuratori/hero/code/code411.hmml | 4 ++-- cmuratori/hero/code/code417.hmml | 2 +- cmuratori/hero/misc/basic_emacs.hmml | 4 ++-- cmuratori/hero/ray/ray00.hmml | 8 ++++---- cmuratori/hero/ray/ray01.hmml | 6 +++--- cmuratori/hero/ray/ray02.hmml | 2 +- cmuratori/hero/ray/ray03.hmml | 6 +++--- 411 files changed, 846 insertions(+), 843 deletions(-) diff --git a/cmuratori/hero/code/code003.hmml b/cmuratori/hero/code/code003.hmml index 9523215..a2aaabb 100644 --- a/cmuratori/hero/code/code003.hmml +++ b/cmuratori/hero/code/code003.hmml @@ -14,8 +14,8 @@ [38:31][CreateDIBSection() usage and explanation] [48:19][About freeing and creating a new DIBSection] [53:42][Device context and Win32ResizeDIBSection()] -[1:03:23][Q&A] -[1:03:37][ssylvan: Remark on not needing to use CreateDIBSection/CreateCompatibleDC and just allocating the array ourselves] +[1:03:23][Q&A][:speech] +[1:03:37][@ssylvan][Remark on not needing to use CreateDIBSection/CreateCompatibleDC and just allocating the array ourselves] [1:06:47][Remark on the change to the archiving of Q&A sessions (they are now combined with the main day video)] [1:08:37][Will you be using sleep()?] [1:08:59][Could you go back through how you got Visual Studio to cooperate?] @@ -23,10 +23,10 @@ [1:12:20][Are you going to do a more detailed Intro To C series alongside this one?] [1:13:40][Can you explain what exactly a void* is? A pointer to nothing?] [1:20:03][Any new thoughts on IMGUI since you made that video a few years ago?] -[1:21:15][ssylvan: Follow up on the previous remark about StretchDIBits, it can take a custom array as long as it is DWORD aligned] +[1:21:15][@ssylvan][Follow up on the previous remark about StretchDIBits, it can take a custom array as long as it is DWORD aligned] [1:23:13][When will the source be available?] [1:23:30][When using emacs, I find it hard to use meta key with F and B to skip words, how do you do it so fast?] [1:23:48][How come !=0 is true in C, and return values of main and functions is 0 if everything is okay?] -[1:26:18][Sean Barrett: Remark on functions with multiple return values "Pre ANSI C didn't allow return structs"] +[1:26:18][@nothings2][Remark on functions with multiple return values "Pre ANSI C didn't allow return structs"] [1:28:24][Any reason you put the type in a line above the function name?] [/video] diff --git a/cmuratori/hero/code/code004.hmml b/cmuratori/hero/code/code004.hmml index 925c0d3..ac92835 100644 --- a/cmuratori/hero/code/code004.hmml +++ b/cmuratori/hero/code/code004.hmml @@ -29,7 +29,7 @@ [54:25][Changing DrawWeirdGradient() to use a 32-bit pointer and write each pixel in one call using bitwise operations] [58:38][Verification of lack of memory leaks] [59:44][TOTAL SYSTEM MELTDOWN] -[1:02:07][Q&A] +[1:02:07][Q&A][:speech] [1:02:10][Is there a reason you prefer using 0 instead of NULL?] [1:03:18][Clarification about sized typedefs] [1:04:58][What would happen if you called malloc() instead of VirtualAlloc()?] diff --git a/cmuratori/hero/code/code005.hmml b/cmuratori/hero/code/code005.hmml index 4d441d1..c774a1c 100644 --- a/cmuratori/hero/code/code005.hmml +++ b/cmuratori/hero/code/code005.hmml @@ -17,7 +17,7 @@ [52:44][Deep dive on the size of the stack] [55:50][STACK OVERFLOW ACHIEVED] [1:01:45][Step-through resumed] -[1:23:35][Q&A] +[1:23:35][Q&A][:speech] [1:24:06][Would it be a good or bad idea to get one DeviceContext at the beginning of the program and use that for every iteration of the main loop?] [1:26:06][Chihuahua on speed confirmed] [1:26:22][Why do you tell Windows you handle messages you don't really handle?] diff --git a/cmuratori/hero/code/code007.hmml b/cmuratori/hero/code/code007.hmml index edf979b..d2a65d5 100644 --- a/cmuratori/hero/code/code007.hmml +++ b/cmuratori/hero/code/code007.hmml @@ -14,7 +14,7 @@ [51:36][Creating and Configuring the Secondary Buffer] [56:38][Let's try it] [1:00:46][Final Thoughts] -[1:02:05][Q&A] +[1:02:05][Q&A][:speech] [1:04:05][Fixing WaveFormat order] [1:06:07][Do you use data-structures like linked-list, binary trees..?] [1:06:34][Can you explain again why you need two buffers instead of just doing everything in one?] diff --git a/cmuratori/hero/code/code008.hmml b/cmuratori/hero/code/code008.hmml index dcc9f02..ab61377 100644 --- a/cmuratori/hero/code/code008.hmml +++ b/cmuratori/hero/code/code008.hmml @@ -18,7 +18,7 @@ [59:22][Don't forget to Unlock the buffer] [1:00:58][Final Thoughts] [1:02:17][Review of mod operation and how we used it] -[1:10:30][Q&A] +[1:10:30][Q&A][:speech] [1:11:09][Will future broacasts use this Europe-friendly time?] [1:11:21][Why not XAudio2?] [1:12:43][Are we going to factor sound playing to a seperate function?] diff --git a/cmuratori/hero/code/code009.hmml b/cmuratori/hero/code/code009.hmml index a230160..940cb39 100644 --- a/cmuratori/hero/code/code009.hmml +++ b/cmuratori/hero/code/code009.hmml @@ -18,7 +18,7 @@ [1:03:46][Where did it go?] [1:04:08][Eureka!] [1:05:22][Victory] -[1:09:52][Q&A] +[1:09:52][Q&A][:speech] [1:10:07][In D this bug couldn't have happened. D always initializes variables.] [1:13:36][How do you know that ByteToLock is far enough ahead of the PlayCursor?] [1:15:40][Try \[compiling with\] -W3 or -W4] @@ -46,5 +46,5 @@ [1:50:47][Can we do an episode on emacs?] [1:51:33][Fix: XInput - missing dependencies] [1:53:45][Fix: Arithmetic for stick values] -[2:01:55][Sign off] +[2:01:55][Sign off][:speech] [/video] diff --git a/cmuratori/hero/code/code010.hmml b/cmuratori/hero/code/code010.hmml index c677df2..1577c24 100644 --- a/cmuratori/hero/code/code010.hmml +++ b/cmuratori/hero/code/code010.hmml @@ -15,7 +15,7 @@ [56:43][Use wsprintf() to print our timings as floats] [59:18][A bit more about wsprintf()] [1:02:05][Final Thoughts] -[1:04:32][Q&A] +[1:04:32][Q&A][:speech] [1:04:46][RDTSC returns unsigned int] [1:05:28][Explanation of how C handles division based on type] [1:07:34][How compiler optimizations affect the execution time] diff --git a/cmuratori/hero/code/code011.hmml b/cmuratori/hero/code/code011.hmml index f42155c..5fe110b 100644 --- a/cmuratori/hero/code/code011.hmml +++ b/cmuratori/hero/code/code011.hmml @@ -13,7 +13,7 @@ [44:31][Game as a service to the OS (architecture style 2)] [47:15][Implementing style 2] [51:30][GameUpdateAndRender() - moving RenderWeirdGradient to game code] -[1:01:00][Q&A] +[1:01:00][Q&A][:speech] [1:01:23][Seems 'unsafe' to include the platform independent code after including the platform specific headers] [1:03:22][Would you always orchestrate how you do threading in the platform layer or does it make sense for the platform layer to also provide a more generic threading job service?] [1:05:12][You said last stream you didn't really like showing the FPS because you didn't find it useful. Can you explain that?] diff --git a/cmuratori/hero/code/code012.hmml b/cmuratori/hero/code/code012.hmml index be8ef48..18a8614 100644 --- a/cmuratori/hero/code/code012.hmml +++ b/cmuratori/hero/code/code012.hmml @@ -18,7 +18,7 @@ [53:54][The remaining jank] [57:27][Tweak the build.bat] [58:47][Final Thoughts] -[59:30][Q&A] +[59:30][Q&A][:speech] [1:00:16][Will we use alloca to store pointers to game objects that are local to the player?] [1:04:29][If the DirectSound Lock fails, you'll pass garbage pointers to the game logic.] [1:05:31][When you say 60fps may not be feasible do you mean on non-PC platforms?] @@ -39,5 +39,5 @@ [1:31:11][I've heard the brain treats sounds within 10ms as in-sync?] [1:31:39][When you work with temporary memory are there dangers? How do we protect against them?] [1:33:21][As a rhythm game player, I can notice audio sync off as little as 10ms...] -[1:35:03][Sign Off] +[1:35:03][Sign Off][:speech] [/video] diff --git a/cmuratori/hero/code/code013.hmml b/cmuratori/hero/code/code013.hmml index aa411a9..ab42f9c 100644 --- a/cmuratori/hero/code/code013.hmml +++ b/cmuratori/hero/code/code013.hmml @@ -23,7 +23,7 @@ [58:50][But Casey, what about the stick?] [1:00:11][Normalizing our stick values] [1:04:54][Wrap up and Final Thoughts] -[1:06:55][Q&A] +[1:06:55][Q&A][:speech] [1:07:05][When normalizing the thumbstick value, is it worse to just add 32768 then multiply it by 2/65535 then subtract 1? I don't like the necessary if statement personally.] [1:08:45][Nitpick, but is it a bit misleading that the half transition count is zero or one, rather than an actual count?] [1:09:17][Will we be completely ignoring platform code for most of the rest of the series?] @@ -45,5 +45,5 @@ [1:28:25][Would you be fine with people using the platform as a base for making their own games, with attribution?] [1:29:49][How much will you need to explore other platforms before knowing what the abstraction API will look like?] [1:30:26][What kinds of numerical methods are used in game physics?] -[1:31:26][Final Wrap Up] +[1:31:26][Final Wrap Up][:speech] [/video] diff --git a/cmuratori/hero/code/code014.hmml b/cmuratori/hero/code/code014.hmml index c83b217..7f689d2 100644 --- a/cmuratori/hero/code/code014.hmml +++ b/cmuratori/hero/code/code014.hmml @@ -23,7 +23,7 @@ [51:30][Debugging] [55:07][Mission accomplished.] [56:24][TODO: Pass timing info to game] -[58:24][Q&A] +[58:24][Q&A][:speech] [59:20][Reasoning behind Main Memory Pool vs Dynamic Allocation?] [1:03:31][Why use the void* in game_memory?] [1:04:13][Elaborate on Permanent vs Transient storage?] @@ -50,5 +50,5 @@ [1:29:27][Did you pass different flags to VirtualAlloc for permanent and transient storage?] [1:29:54][What are the 'other reasons' for specifying a BaseAddress.] [1:31:01][Is it possible the pool will be fragmented?] -[1:33:10][Sign Off] +[1:33:10][Sign Off][:speech] [/video] diff --git a/cmuratori/hero/code/code015.hmml b/cmuratori/hero/code/code015.hmml index 93c349e..f6a1e6b 100644 --- a/cmuratori/hero/code/code015.hmml +++ b/cmuratori/hero/code/code015.hmml @@ -17,7 +17,7 @@ [56:40][Editing the .emacs file] [58:27][Breaking the .emacs file] [1:00:19][An IMPORTANT note on the safety of file I/O code] -[1:02:15][Q&A] +[1:02:15][Q&A][:speech] [1:02:54][Will the game be able to carry on in spite of some big time failure, like a graphics device reset. And does software rendering make that easier to deal with?] [1:04:28][Would it make sense to call normal GetFileSize() and then assert that the high 32-bit value is zero?] [1:06:00][Would it be useful for us to write our own allocation function that specifically allocates sections of our already-reserved temporary memory? I am having trouble understanding why we are doing separate allocations.] diff --git a/cmuratori/hero/code/code016.hmml b/cmuratori/hero/code/code016.hmml index 1edd5b6..2f71336 100644 --- a/cmuratori/hero/code/code016.hmml +++ b/cmuratori/hero/code/code016.hmml @@ -11,7 +11,7 @@ [41:25][-Fm Creating a map file and looking at it] [46:10][Why the names are mangled in the .map file produced with the compiler switch of -Fm] [50:10][Start moving keyboard input into the non-platform code] -[1:02:52][Q&A] +[1:02:52][Q&A][:speech] [1:04:33][Question: -Oi , Why would anyone not want it active] [1:06:02][Question: How do we add -Wx -W4 to the commandline switches if developing in VisualStudio] [1:07:07][Question: Would turning on -Od be a good idea to use in the normal build] diff --git a/cmuratori/hero/code/code017.hmml b/cmuratori/hero/code/code017.hmml index fea90eb..f8484fc 100644 --- a/cmuratori/hero/code/code017.hmml +++ b/cmuratori/hero/code/code017.hmml @@ -21,7 +21,7 @@ [56:44][Why did we overrun the buffer?] [59:26][Adding some last minute keyboard inputs] [1:00:06][Final Thoughts] -[1:02:28][Q&A] +[1:02:28][Q&A][:speech] [1:02:50][Check the array in the Buttons union, you might want 12 now that you've added start and back] [1:08:54][Is that some copypasta, or is it really supposed to be all MoveLefts?] [1:11:24][Could it be good to apply some integration on the keys, so we don't just set the value to binary -1/1?] @@ -38,5 +38,5 @@ [1:33:17][You deleted the Min/Max macro TODO...] [1:34:03][So when you use the ZeroController, why not just go *NewKeyboardController = {}?] [1:35:29][stddef should include offsetof(), you can use that to make your assert a little simpler.] -[1:37:56][Final Wrap-Up] +[1:37:56][Final Wrap-Up][:speech] [/video] diff --git a/cmuratori/hero/code/code018.hmml b/cmuratori/hero/code/code018.hmml index f158b5b..02e420a 100644 --- a/cmuratori/hero/code/code018.hmml +++ b/cmuratori/hero/code/code018.hmml @@ -11,7 +11,7 @@ [40:41][Compressing/Refactoring Clocking stats] [49:05][Implementing sleep to not melt our CPU] [53:20][Setting the Windows scheduler granularity with timeBeginPeriod()] -[1:00:30][Q&A] +[1:00:30][Q&A][:speech] [1:01:08][Question: If we are locking the frame rate. Would that not mean that someone with a lower end computer, would have a slower game speed to others] [1:02:41][Question: Even if you could get the refresh rate of the monitor, how do you sync with it on the vertical blink] [1:03:52][Question: Doesn't the sleep function go in the surrounding IF instead of the WHILE loop] diff --git a/cmuratori/hero/code/code019.hmml b/cmuratori/hero/code/code019.hmml index 8e7da07..dbec06b 100644 --- a/cmuratori/hero/code/code019.hmml +++ b/cmuratori/hero/code/code019.hmml @@ -22,7 +22,7 @@ [1:12:00][How much granularity we have] [1:16:20][Audio latency issue found] [1:19:50][Closing remarks] -[1:20:28][Q&A] +[1:20:28][Q&A][:speech] [1:21:13][Are you setup to use ASI Sound Drivers?] [1:22:05][Is your audio pointer code calculating independently of the variable-fixed visual frames per second?] [1:24:35][What sort of problems can high audio latency introduce?] @@ -35,5 +35,5 @@ [1:40:14][Would rendering at 60 FPS help with the audio latency?] [1:41:16][Could you change latency values?] [1:41:33][Is it possible that OBS is affecting the audio latency?] -[1:42:02][Closing remarks] +[1:42:02][Closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code020.hmml b/cmuratori/hero/code/code020.hmml index 79f7f5e..c54faaf 100644 --- a/cmuratori/hero/code/code020.hmml +++ b/cmuratori/hero/code/code020.hmml @@ -43,7 +43,7 @@ [2:10:53][Improving our estimate of the PlayCursor position to reduce latency] [2:17:59][Taking a look at how our estimate lines up] [2:19:13][Drawing our 480 sample jitter window] -[2:22:15][Q&A] +[2:22:15][Q&A][:speech] [2:22:58][Did you try the audio without OBS?] [2:24:15][Is it inexpensive to query for the play cursor and the write cursor?] [2:25:03][Audio seems to be the most complex part until now, which will be the next most complicated thing?] @@ -58,5 +58,5 @@ [2:39:55][Callback to earlier half of question: (I'm sorry if I'm being slow, but I don't truly understand why the audio is skipping.) The original audio skipped when we moved the latency to be inside of three frames.] [2:42:25][If it's not too much of an issue, can we have line numbers on the side when you are coding so we can get a grip of where you are.] [2:43:08][It's more likely to be the accumulation of a small value onto a larger value that is a numerical problem. Mantissas not lining up.] -[2:44:03][Wrap-up] +[2:44:03][Wrap-up][:speech] [/video] diff --git a/cmuratori/hero/code/code021.hmml b/cmuratori/hero/code/code021.hmml index eef9900..007e428 100644 --- a/cmuratori/hero/code/code021.hmml +++ b/cmuratori/hero/code/code021.hmml @@ -13,7 +13,7 @@ [50:17][Moving local persist variables from the dll to game_state] [52:31][Avoid locking the dll to allow rewriting] [1:02:00][Episode recap] -[1:03:37][Q&A] +[1:03:37][Q&A][:speech] [1:03:51][-LD to build a dll and removing incremental building] [1:06:23][Question: We have small code right now. How does dynamic linking and compiling to an exe work with huge games that are multiple gigs?] [1:07:39][Casey spoils tomorrows stream by telling people not to spoil it] diff --git a/cmuratori/hero/code/code022.hmml b/cmuratori/hero/code/code022.hmml index 1bde412..fc4ebb1 100644 --- a/cmuratori/hero/code/code022.hmml +++ b/cmuratori/hero/code/code022.hmml @@ -8,7 +8,7 @@ [35:00][Compare File Times] [39:49][Finding the the dir of the executable so we can find the .dll] [50:25][String Processing Code] -[1:01:25][Q&A] +[1:01:25][Q&A][:speech] [1:02:24][Question: How do you manage to time your coding so perfectly] [1:02:34][Question: You mentioned yesterday you had something from a previous days but never did] [1:03:31][Question: Will this capability be in the shipping game or will it only be for debuging] diff --git a/cmuratori/hero/code/code023.hmml b/cmuratori/hero/code/code023.hmml index 727e16c..16b2f71 100644 --- a/cmuratori/hero/code/code023.hmml +++ b/cmuratori/hero/code/code023.hmml @@ -26,7 +26,7 @@ [59:47][Transparent Window! And Access Violation!] [1:01:56][Improvements to transparent window.] [1:03:47][Final Thoughts] -[1:06:24][Q&A] +[1:06:24][Q&A][:speech] [1:06:50][Does Win32PlayBackInput need to return status in case the file read fails and/or reaches the end, since in those cases the function output data structures will be stale or invalid?] [1:08:36][Will this break when you make changes to the game_state structure?] [1:11:30][Why didn't you use a switch for all the VKCode stuff?] @@ -53,5 +53,5 @@ [1:38:43][Couldn't you create an offset pointer struct which overloads the unary * operator?] [1:40:43][Have you got some good explanation on how you architect code, is that in the text you wrote about your work on the Witness?] [1:42:06][I have to spend a lot of time unlearning what I was taught just to get to features which should be easy, but were made hard by the kind of programming I learned in school. Have you had a similar painful unlearning process?] -[1:44:51][Wrap-up] +[1:44:51][Wrap-up][:speech] [/video] diff --git a/cmuratori/hero/code/code024.hmml b/cmuratori/hero/code/code024.hmml index 0c7cf63..69c418d 100644 --- a/cmuratori/hero/code/code024.hmml +++ b/cmuratori/hero/code/code024.hmml @@ -24,7 +24,7 @@ [1:04:06][So what are large pages?] [1:05:26][Changing VirtualAlloc() to use large pages] [1:07:18][Putting aside the large page support for later] -[1:08:26][Q&A] +[1:08:26][Q&A][:speech] [1:09:50][Can we go over really fast an overview of the game recording code?] [1:14:16][When you're saving the game_state snapshot, how big is the file?] [1:15:25][Can you check if the StringLength() needs a win32 prefix, or is this game code?] @@ -49,5 +49,5 @@ [1:34:21][Do you think the recording technique will run into problems if we have multiple threads using the game_state?] [1:35:07][If VirtualAlloc() does not guarantee contiguous memory, could this pose a hindrance to cache optimizations?] [1:36:45][Where can I get earlier versions of the code? The link only gives me the latest version.] -[1:37:15][Wrap-up] +[1:37:15][Wrap-up][:speech] [/video] diff --git a/cmuratori/hero/code/code025.hmml b/cmuratori/hero/code/code025.hmml index 2fab4ea..9668a85 100644 --- a/cmuratori/hero/code/code025.hmml +++ b/cmuratori/hero/code/code025.hmml @@ -28,7 +28,7 @@ [1:25:16][Looking at multiple sequential records] [1:28:16][Removing/disabling some debug code for now] [1:30:29][Final Thoughts] -[1:31:47][Q&A] +[1:31:47][Q&A][:speech] [1:32:47][Maybe first copy is causing alloc and zero on fault, maybe a second copy would be fast] [1:35:28][An interesting part of this project is that you're implementing all the compenents yourself that you'd take as given in an existing game engine. That said, do you intend for these components to be reusable in future projects?] [1:36:32][Why the pig hat?] diff --git a/cmuratori/hero/code/code026.hmml b/cmuratori/hero/code/code026.hmml index c3cdbe8..9029086 100644 --- a/cmuratori/hero/code/code026.hmml +++ b/cmuratori/hero/code/code026.hmml @@ -44,5 +44,5 @@ [1:24:20][Whennn willl youuu worrrkkk onnn theee gammmeeee?!?!?!?!?!11!!] [1:24:53][Will we make a physics engine?] [1:25:17][Is it okay to post a js/html5 port on my github?] -[1:26:54][Thanks / Next time on... / Holiday Hours] +[1:26:54][Thanks / Next time on... / Holiday Hours][:speech] [/video] diff --git a/cmuratori/hero/code/code027.hmml b/cmuratori/hero/code/code027.hmml index 74e1925..984b251 100644 --- a/cmuratori/hero/code/code027.hmml +++ b/cmuratori/hero/code/code027.hmml @@ -62,5 +62,5 @@ [1:39:01][What if MinX and MaxX are both less than 0?] [1:40:05][In a perfect world... Pokemans? \[no\]] [1:40:29][Moral message? Hired a writer?] -[1:40:47][Handy Links / Holiday Hours / Happy Coding] +[1:40:47][Handy Links / Holiday Hours / Happy Coding][:speech] [/video] diff --git a/cmuratori/hero/code/code028.hmml b/cmuratori/hero/code/code028.hmml index 966a53b..e0bdc7c 100644 --- a/cmuratori/hero/code/code028.hmml +++ b/cmuratori/hero/code/code028.hmml @@ -8,7 +8,7 @@ [37:32][Getting a player to the screen] [46:26][Basic character movement] [48:00][Debugging slow player movement] -[58:34][Q&A] +[58:34][Q&A][:speech] [59:00][Question: Is Sleep() still making us miscalculate the fps] [1:01:15][Question: dtForFrame is only in one of the inputs] [1:03:07][Question: Maybe we should sync our frames with vsync due to it dropping our frames] diff --git a/cmuratori/hero/code/code029.hmml b/cmuratori/hero/code/code029.hmml index eff07b6..aa1c28d 100644 --- a/cmuratori/hero/code/code029.hmml +++ b/cmuratori/hero/code/code029.hmml @@ -11,7 +11,7 @@ [43:56][About storing all tilemaps in one big structure] [50:28][Start on storing and accessing multiple tilemaps and the world struct] [1:01:00][Short recap on where we are] -[1:02:16][Q&A] +[1:02:16][Q&A][:speech] [1:03:10][John Blow points out we haven't initialised the world struct members] [1:03:43][Question: Why does player sometimes stop a pixel before the wall?] [1:14:36][Question: Are your variables for tilemaps too similar to each other or am I just easily confused?] diff --git a/cmuratori/hero/code/code030.hmml b/cmuratori/hero/code/code030.hmml index d3e55ef..3512e62 100644 --- a/cmuratori/hero/code/code030.hmml +++ b/cmuratori/hero/code/code030.hmml @@ -8,7 +8,7 @@ [42:55][Storing X and Y positions relative to the tile] [56:07][Moving the player on to the new tilemap] [1:00:49][Floor instead of truncate] -[1:10:48][Q&A] +[1:10:48][Q&A][:speech] [1:11:52][Question: Can you talk about the inline keyword? Do you apply any strategies to make sure the compiler does not ignore the request?] [1:13:13][Question: Are we using C or C++?] [1:14:47][Question: How did we start the code for the game?] diff --git a/cmuratori/hero/code/code031.hmml b/cmuratori/hero/code/code031.hmml index 464c2ad..4537927 100644 --- a/cmuratori/hero/code/code031.hmml +++ b/cmuratori/hero/code/code031.hmml @@ -13,7 +13,7 @@ [40:04][Defining size in pixels and meters] [48:00][TODO: Packing our tilemap indexes] [57:34][TODO: Resolution-independent tile-relative position] -[59:28][Q&A] +[59:28][Q&A][:speech] [1:00:04][Will we be making a map editor?] [1:00:25][What were you talking about in terms of fast floor?] [1:01:09][Do enough people have SSE4? (n.b. steam hardware survey: ~77% have SSE4, ~99.8% SSE3)] @@ -30,5 +30,5 @@ [1:27:14][Line-drawing suggestion] [1:28:03][Will you be able to find ARM equivalents to your intel-specific instructions?] [1:29:36][How are we going to deal with different types of tiles?] -[1:30:35][Week Roadmap / Outro] +[1:30:35][Week Roadmap / Outro][:speech] [/video] diff --git a/cmuratori/hero/code/code032.hmml b/cmuratori/hero/code/code032.hmml index 6867ed3..6c7bad4 100644 --- a/cmuratori/hero/code/code032.hmml +++ b/cmuratori/hero/code/code032.hmml @@ -8,7 +8,7 @@ [50:04][Back to changing movement units] [53:40][Casey enjoying the little things] [57:41][Debugging player position] -[1:03:42][Q&A] +[1:03:42][Q&A][:speech] [1:04:19][Would this be the time to put on screen text for debug info?] [1:05:15][What is the variable called 'Gray'?] [1:05:55][How does the difficulty of conceptualising this type of code compare to say coding the backend to a web application?] diff --git a/cmuratori/hero/code/code033.hmml b/cmuratori/hero/code/code033.hmml index 8ad2e40..d431ab1 100644 --- a/cmuratori/hero/code/code033.hmml +++ b/cmuratori/hero/code/code033.hmml @@ -19,7 +19,7 @@ [1:00:48][success] [1:01:20][greed: simple scrolling] [1:07:39][success again... finally] -[1:08:24][Q&A] +[1:08:24][Q&A][:speech] [1:09:06][Why not compute the chunk mask from the chunk shift?] [1:14:04][How did you generate the map? (A: he hasn't yet, it was typed in)] [1:14:26][How will you do a third dimension in the new coordinate system?] @@ -35,5 +35,5 @@ [1:27:03][Will you be checking code complexity, introducing smaller functions?] [1:27:43][Did you set up a Kickstarter?] [1:28:08][Wouldn't it be nice if tiles were 1.0m instead of 1.4m?] -[1:28:53][Closing thoughts] +[1:28:53][Closing thoughts][:speech] [/video] diff --git a/cmuratori/hero/code/code034.hmml b/cmuratori/hero/code/code034.hmml index a1cc9e3..e229934 100644 --- a/cmuratori/hero/code/code034.hmml +++ b/cmuratori/hero/code/code034.hmml @@ -15,7 +15,7 @@ [1:04:30][Going for it] [1:09:10][Fate] [1:11:00][Summary of the day] -[1:14:40][Q&A] +[1:14:40][Q&A][:speech] [1:16:05][Garlandobloom says hi.] [1:16:18][Can you explain the motivation behind controlling the page granularity.] [1:22:35][Is the memory arena for more temporary objects than we're storing in the game state directly?] @@ -34,5 +34,5 @@ [1:43:28][Is memory access slower than MOV?] [1:44:45][Why are tiles used? What is the real benefit of tile mapping?] [1:46:02][Remark on x87] -[1:46:32][Conclusion] +[1:46:32][Conclusion][:speech] [/video] diff --git a/cmuratori/hero/code/code035.hmml b/cmuratori/hero/code/code035.hmml index b29cd97..6f4848d 100644 --- a/cmuratori/hero/code/code035.hmml +++ b/cmuratori/hero/code/code035.hmml @@ -14,7 +14,7 @@ [48:50][Adding the ability to go up and down] [56:50][Continue the madness and add some stairs] [1:03:50][Up and down] -[1:07:00][Q&A] +[1:07:00][Q&A][:speech] [1:07:42][Would you use DeMorgan's Laws?] [1:10:18][Do you have emacs commands with Visual Studio?] [1:10:45][Have you already decided what PRNG algorithm you're going to use?] @@ -36,5 +36,5 @@ [1:39:01][Are you worried about memory leaks?] [1:39:31][Are ternaries bad?] [1:40:02][Why is not possible to save the full map?] -[1:40:25][Conclusion] +[1:40:25][Conclusion][:speech] [/video] diff --git a/cmuratori/hero/code/code036.hmml b/cmuratori/hero/code/code036.hmml index 3a6309c..871f9e0 100644 --- a/cmuratori/hero/code/code036.hmml +++ b/cmuratori/hero/code/code036.hmml @@ -18,7 +18,7 @@ [49:00][Processing the BMP file header] [50:43][Packing a struct to avoid padding] [53:53][Processing the BMP pixels] -[59:20][Q&A] +[59:20][Q&A][:speech] [59:44][Perfect pitch would sell that!] [1:00:58][I missed the part where you handled the endianness of the file, or are bitmaps always the same?] [1:01:56][Do you prefer #pragma pack or gcc-like annotation?] diff --git a/cmuratori/hero/code/code037.hmml b/cmuratori/hero/code/code037.hmml index db7b2cf..9b674e0 100644 --- a/cmuratori/hero/code/code037.hmml +++ b/cmuratori/hero/code/code037.hmml @@ -14,7 +14,7 @@ [45:07][Displaying hero bitmaps] [46:10][Debugging busted hero bitmaps] [1:03:08][Getting more info from the bitmap headers] -[1:07:37][Q&A] +[1:07:37][Q&A][:speech] [1:08:10][Stream spots a typo] [1:08:40][Stream spots another typo] [1:09:09][Will we stick to using bitmaps for the duration of handmade hero, or delve into the lands of PNG?] diff --git a/cmuratori/hero/code/code038.hmml b/cmuratori/hero/code/code038.hmml index fded5e5..a56da6b 100644 --- a/cmuratori/hero/code/code038.hmml +++ b/cmuratori/hero/code/code038.hmml @@ -21,7 +21,7 @@ [0:58:45][How the 't' works in the linear blend formula] [1:00:35][Implementing the floating point version of linear blend] [1:06:55][Drawing the herohead at the location of the player] -[1:07:23][Q&A] +[1:07:23][Q&A][:speech] [1:08:06][Stream spots a typo!] [1:08:37][Stream suggests to assert the bitmap assertion mode!] [1:09:12][You do not need #pragma intrinsic if you include ] diff --git a/cmuratori/hero/code/code039.hmml b/cmuratori/hero/code/code039.hmml index cc8884f..a79cb1f 100644 --- a/cmuratori/hero/code/code039.hmml +++ b/cmuratori/hero/code/code039.hmml @@ -23,7 +23,7 @@ [0:51:40][Checking the framerate] [0:52:38][Fixing live code loading] [0:59:29][Testing if hotloading is still functioning] -[1:00:35][Q&A] +[1:00:35][Q&A][:speech] [1:01:46][Can you do that live code with a function call? That could just be a poke. -Geneticspecies] [1:02:05][Enumerations. Am I correct to say you've not used them in Handmade Hero yet? I'm guessing this is simply because it's too early to know what will eventually require enumerations and not some other reason.] [1:02:38][Why not layer the individual bodyparts into a single bitmap that way you only have to draw one image instead of three?] @@ -44,5 +44,5 @@ [1:24:24][How does this test code help with the future architecture since it all gets dumped?] [1:26:05][I'm not sure if this is true. I'm assuming you're making the guy clip when leaving the screen, but why make it clip if you can just make it follow the yellow box which might clip the guy itself. Again I really..] [1:26:35][If streaming assets will be required to display all visual information will their be some type of manual limit placed on the procedural generation to ensure that all assets will never be required for a single room?] -[1:27:00][End Q&A and closing statements] +[1:27:00][End Q&A and closing statements][:speech] [/video] diff --git a/cmuratori/hero/code/code040.hmml b/cmuratori/hero/code/code040.hmml index a0b2224..f71548b 100644 --- a/cmuratori/hero/code/code040.hmml +++ b/cmuratori/hero/code/code040.hmml @@ -18,7 +18,7 @@ [0:51:09][Discussion on his method of going fullscreen in Windows] [0:54:45][Going over the notes] [0:55:30]['Hackey' way to fill the entire screen with the game] -[0:58:50][Q&A] +[0:58:50][Q&A][:speech] [0:59:57][You said you want your artist to leave an alpha apron around your bitmaps. Why is that?] [1:02:15][Sour trolli worms or Haribo gummy bears?] [1:02:36][We've got a fair bit of if statements that clamp values. Would a macro make sense?] diff --git a/cmuratori/hero/code/code041.hmml b/cmuratori/hero/code/code041.hmml index 3b5e3fe..f8be888 100644 --- a/cmuratori/hero/code/code041.hmml +++ b/cmuratori/hero/code/code041.hmml @@ -20,11 +20,11 @@ [58:32][Operations Research] [59:48][Probability & Statistics] [1:00:10][Discrete mathematics] -[1:02:33][Q&A] +[1:02:33][Q&A][:speech] [1:03:11][Do you even breathe bro?] [1:03:20][Doesn't toroidal topology also apply to spheres?] [1:07:58][Laptop battery dies] -[1:10:07][Q&A Resumes] +[1:10:07][Q&A Resumes][:speech] [1:10:36][Is it important to clarify many of these subjects can be learned when you need them, not needed as a baseline?] [1:11:41][Most of 3D games is in euclidian geometry] [1:12:25][What happens in partial differential equations if Scott Meyers is in a gorilla suit..] diff --git a/cmuratori/hero/code/code042.hmml b/cmuratori/hero/code/code042.hmml index 3581073..0a51ab9 100644 --- a/cmuratori/hero/code/code042.hmml +++ b/cmuratori/hero/code/code042.hmml @@ -17,7 +17,7 @@ [37:46][Multiplication in Vector Space] [43:30][Adding vector routines to the code] [48:25][Replacing scalar code with vector code.] -[1:01:53][Q&A] +[1:01:53][Q&A][:speech] [1:02:28][How do union types work in C++ and what are the drawbacks?] [1:04:42][About vector conventions] [1:05:07][In the first version of vector, weren't you just missing an anonymous struct in the union?] diff --git a/cmuratori/hero/code/code043.hmml b/cmuratori/hero/code/code043.hmml index a03c243..d76d8d0 100644 --- a/cmuratori/hero/code/code043.hmml +++ b/cmuratori/hero/code/code043.hmml @@ -16,7 +16,7 @@ [49:13][A look at the game now. We notice player has no friction.] [51:22][Implementing some friction.] [58:26][Closing remarks.] -[1:00:40][Q&A] +[1:00:40][Q&A][:speech] [1:01:23][Why use real physics and not something custom you can handtune?] [1:06:59][Why not add an opposite directional deceleration when collisions occur?] [1:07:29][Are you concerned that actual physics will retract from the beauty and elegance of the worlds greatest jump code?] diff --git a/cmuratori/hero/code/code044.hmml b/cmuratori/hero/code/code044.hmml index 369c4b9..86cace2 100644 --- a/cmuratori/hero/code/code044.hmml +++ b/cmuratori/hero/code/code044.hmml @@ -16,7 +16,7 @@ [50:25][Challenge to the stream: how do you run along the wall?] [51:51][Answer to the challenge] [53:28][Discussion on sticky behavior] -[58:13][Q&A] +[58:13][Q&A][:speech] [59:31][Can you explain again why the hero was sticking against the wall?] [1:02:43][When do we scale down the hero?] [1:03:11][Have you considered using sin(0) to sin(90) as a non-linear inertia curve?] diff --git a/cmuratori/hero/code/code045.hmml b/cmuratori/hero/code/code045.hmml index 785e690..9e55382 100644 --- a/cmuratori/hero/code/code045.hmml +++ b/cmuratori/hero/code/code045.hmml @@ -20,7 +20,7 @@ [47:20][How to perform the search] [56:00][Getting the length of a vector] [57:40][Cleaning up to finish on day 46] -[58:47][Q&A] +[58:47][Q&A][:speech] [1:00:01][Why different versions of GetTileValue()?] [1:03:57][You start variables uppercase and structs lowercase. Why?] [1:04:47][When npc's are introduced, will they reuse some of the code shown here?] diff --git a/cmuratori/hero/code/code046.hmml b/cmuratori/hero/code/code046.hmml index ac1b79f..a2747fb 100644 --- a/cmuratori/hero/code/code046.hmml +++ b/cmuratori/hero/code/code046.hmml @@ -27,7 +27,7 @@ [0:52:09][What we're going to do tomorrow] [0:53:00][BRB, controller!] [0:53:59][Demo of mult-player support] -[0:54:30][Q&A] +[0:54:30][Q&A][:speech] [0:55:08][On split-screen what kind of resolution were you thinking for each?] [0:56:15][You once said visualizing problems is never a wasted effort. Should we use it for collision detection?] [0:56:52][Are entities just for players or all game objects?] diff --git a/cmuratori/hero/code/code047.hmml b/cmuratori/hero/code/code047.hmml index 00f3c60..d44f925 100644 --- a/cmuratori/hero/code/code047.hmml +++ b/cmuratori/hero/code/code047.hmml @@ -17,7 +17,7 @@ [38:30][Implementing the new collision code] [40:40][How to find the tiles to check] [45:50][What to do about multiple wall collisions] -[54:13][Q&A] +[54:13][Q&A][:speech] [55:25][Why did you change from search in p to search in t?] [59:32][How does it handle the state of two separate players on different floors?] [1:00:18][Why is the code complexity for p-search so much bigger than t-search?] diff --git a/cmuratori/hero/code/code048.hmml b/cmuratori/hero/code/code048.hmml index 47eb457..ad6df27 100644 --- a/cmuratori/hero/code/code048.hmml +++ b/cmuratori/hero/code/code048.hmml @@ -15,7 +15,7 @@ [32:50][More collision bugs; time to write a better collision detection system!] [33:38][Observing the problems with the current collision detection system] [35:25][What we want from the new system] -[43:26][Q&A] +[43:26][Q&A][:speech] [43:53][Can you change the whiteboard colors?] [46:33][Do you plan on getting into calculus to get better collision detection?] [47:05][Do you think any need to prototype some features in some other language?] diff --git a/cmuratori/hero/code/code049.hmml b/cmuratori/hero/code/code049.hmml index af330de..acdc968 100644 --- a/cmuratori/hero/code/code049.hmml +++ b/cmuratori/hero/code/code049.hmml @@ -14,7 +14,7 @@ [45:50][Making the collision detection better using areas instead of points] [48:00][Fixing canonicalization] [53:14][Talking about the future of the tile map] -[56:50][Q&A] +[56:50][Q&A][:speech] [58:09][Do you use diagrams a lot in your actual work?] [58:26][What do you recommend for learning c++?] [58:45][Try setting handmade hero start at the midpoint between tiles] diff --git a/cmuratori/hero/code/code050.hmml b/cmuratori/hero/code/code050.hmml index 4f4021d..6bec54b 100644 --- a/cmuratori/hero/code/code050.hmml +++ b/cmuratori/hero/code/code050.hmml @@ -23,7 +23,7 @@ [1:04:20][Debugging first loop through the wall collision loop] [1:09:58][Debugging the second loop through the wall collision loop] [1:18:05][Moment of enlightenment] -[1:19:22][Q&A] +[1:19:22][Q&A][:speech] [1:21:05][Why is the heros head 1.5 meters in diameter?] [1:21:29][How would you handle concave objects with Minkowski?] [1:22:41][Why isn't the game split up in smaller, more modular files?] diff --git a/cmuratori/hero/code/code051.hmml b/cmuratori/hero/code/code051.hmml index a6f77bd..94eac8c 100644 --- a/cmuratori/hero/code/code051.hmml +++ b/cmuratori/hero/code/code051.hmml @@ -18,7 +18,7 @@ [48:53][Updating InitializePlayer] [52:05][Updating AddEntity] [54:25][Getting the code compiling again] -[59:46][Q&A] +[59:46][Q&A][:speech] [1:00:15][How about hot/cold/frozen instead of high/low/dormant?] [1:01:10][Chat reminds: wrap intrinsic rotations \[code change\]] [1:05:28][Is it a good idea to update the low entities in a separate thread?] diff --git a/cmuratori/hero/code/code052.hmml b/cmuratori/hero/code/code052.hmml index 28b1b4b..34b1dd6 100644 --- a/cmuratori/hero/code/code052.hmml +++ b/cmuratori/hero/code/code052.hmml @@ -19,7 +19,7 @@ [42:05][Debugging sticky collisions] [44:57][Restoring camera movement] [50:58][Todos for tomorrow] -[53:23][Q&A] +[53:23][Q&A][:speech] [54:13][Why can't infrequent entity updates happen in the entity's update logic?] [56:57][Why do you want to use a 3D vector for position when the Z value is always going to be an integer?] [1:01:25][Does Minkowski collision detection have to be axis-aligned?] @@ -45,5 +45,5 @@ [1:37:50][The rectangle box which you have alpha assigned, is that the same box you would assign hit points to in case the character is injured by enemies or obstacles?] [1:39:05][How common or practical is pixel by pixel collision check vs overall shapes collision check? Which one is more interesting to you?] [1:39:50][What are your thoughts on the Allegro library?] -[1:40:00][Stream end] +[1:40:00][Stream end][:speech] [/video] diff --git a/cmuratori/hero/code/code053.hmml b/cmuratori/hero/code/code053.hmml index 6624980..63c44d3 100644 --- a/cmuratori/hero/code/code053.hmml +++ b/cmuratori/hero/code/code053.hmml @@ -16,7 +16,7 @@ [50:13][Adding entities to the high entity set that are close to the camera] [55:09][Calling SetCamera at the start of the game] [58:15][Out of time! Where we'll start tomorrow] -[59:19][Q&A] +[59:19][Q&A][:speech] [1:00:02][Aren't some of the signs in the MinTileX wrong?] [1:01:12][What does “internal” modifier which is applied to the SetCamera function? I mean what is the difference between non-static and static function?] [1:07:10][Why do we consider a wall an entity?] @@ -30,5 +30,5 @@ [1:17:15][Have you ever played Path of Exile or heard of it? They have this desync problem that they claim is unfixable because they handle stuff server-side. Just wondering if you have heard of that game and its notorious bugs.] [1:17:57][Are you using a stylus in Krita or a mouse?] [1:18:18][Does forcing a game to a certain refresh rate introduce lag?] -[1:19:08][End] +[1:19:08][End][:speech] [/video] diff --git a/cmuratori/hero/code/code054.hmml b/cmuratori/hero/code/code054.hmml index 4e31e32..2136bde 100644 --- a/cmuratori/hero/code/code054.hmml +++ b/cmuratori/hero/code/code054.hmml @@ -16,7 +16,7 @@ [46:05][Handling controlling entities] [53:54][Debugging crashes] [55:50][Debugging missing walls and positioning problems] -[1:02:08][Q&A] +[1:02:08][Q&A][:speech] [1:03:12][Is there an advantage of making the size of the LowEntity and HighEntity arrays a power of two?] [1:04:22][This is a third-person game right?] [1:04:34][What process would you have gone through for creating the controls and movement if this were a 2D side-scrolling platformer?] @@ -29,5 +29,5 @@ [1:12:57][Will Handmade Hero always be 20 scale feet tall?] [1:13:06][What are you drinking?] [1:13:16][(follow-up) What I call a slot map is an array that can have arbitrary empty slots and each slot has a version number for self-validation.] -[1:15:20][End] +[1:15:20][End][:speech] [/video] diff --git a/cmuratori/hero/code/code055.hmml b/cmuratori/hero/code/code055.hmml index 6f1577e..d7eca00 100644 --- a/cmuratori/hero/code/code055.hmml +++ b/cmuratori/hero/code/code055.hmml @@ -13,7 +13,7 @@ [47:10][Reviewing the code that has been written] [58:00][Moving the world origin] [1:00:45][Debugging missing entities] -[1:09:50][Q&A] +[1:09:50][Q&A][:speech] [1:10:34][Why not center the world at 0,0,0 and use signed ints for the tile position? \[code change\]] [1:15:42][Is a hash map essentially just a creatively shaped tile chunk? If that's the case could you preempt the hash function by contributing more bits from the Z coordinate as opposed to the X and Y for a towery map for example? Am I thinking about this right?] [1:19:11][What do you think about, and do you ever do, “free” optimizations in early or late stage development such as \[…\] and instead trying to fail as early as possible? Best case scenario you only did one comparision rather than four.] @@ -37,5 +37,5 @@ [1:41:43][Can you visualize the shape of the map so I can understand why a hash table is better than an array?] [1:44:40][The randomized map only goes up and to the right at the moment. Is it good enough to catch bugs?] [1:45:07][Will the renderer be a separate piece of code as like the platform player so that it can be substituted with something like OpenGL?] -[1:45:18][End] +[1:45:18][End][:speech] [/video] diff --git a/cmuratori/hero/code/code056.hmml b/cmuratori/hero/code/code056.hmml index b6ed18d..bffabd9 100644 --- a/cmuratori/hero/code/code056.hmml +++ b/cmuratori/hero/code/code056.hmml @@ -13,7 +13,7 @@ [41:45][Renaming tile_map to world] [55:55][Debugging refactoring] [57:00][Recap] -[58:37][Q&A] +[58:37][Q&A][:speech] [58:59][Do you still expect the gameplay to be broadly grid-based even without tiles?] [59:44][Could you use reflection to help handle the entities and world chunks?] [1:00:53][Will everything in the game be an entity even if it does not need collision detection or movement?] @@ -28,5 +28,5 @@ [1:10:38][Seeing that the computer handles 1 million entities without lagging, do we really need to worry about the performance hit coming from one extra pointer dereference?] [1:12:30][Will entities be able to transfer from one chunk to another?] [1:12:52][Will we start using the entity system for something other than players/walls soon or will the renderer come first?] -[1:13:58][End] +[1:13:58][End][:speech] [/video] diff --git a/cmuratori/hero/code/code057.hmml b/cmuratori/hero/code/code057.hmml index 2f08b34..0b3b71b 100644 --- a/cmuratori/hero/code/code057.hmml +++ b/cmuratori/hero/code/code057.hmml @@ -24,7 +24,7 @@ [58:34][Write ChunkPositionFromTilePosition] [1:02:12][Unplug and plug the keyboard back in] [1:03:03][handmade_world.cpp: Finish cleaning up] -[1:04:14][Q&A] +[1:04:14][Q&A][:speech] [1:05:39][Q: Can you please go over the lasagne code again that goes through the linked list and moves around the entities? And can you remove the note in RecanonicalizeCoord about toroidal topology?] [1:15:22][Q: Are you dropping frames? Things are glitchy] [1:15:51][Q: Do you use Bink for videos?] @@ -35,5 +35,5 @@ [1:19:04][Q: Why do you need if(Chunk) after Assert(Chunk)?] [1:19:26][Q: Can you please explain, when you comment your code, what's the logic of having less comments on very big chunks of code?] [1:21:37][Q: When you said the code today wasn't that performance critical, I instantly thought about a machine gun - stone thrower battle just across a chunk edge] -[1:22:01][We are done with questions] +[1:22:01][We are done with questions][:speech] [/video] diff --git a/cmuratori/hero/code/code058.hmml b/cmuratori/hero/code/code058.hmml index 6ea2e95..d59ead0 100644 --- a/cmuratori/hero/code/code058.hmml +++ b/cmuratori/hero/code/code058.hmml @@ -34,7 +34,7 @@ [52:51][Assets: Find the base point for the tree in GIMP] [53:37][handmade.cpp: Set the tree's alignment and do DrawRectangle as well] [54:32][Run the game and observe our new trees in their correct positions] -[57:44][Q&A] +[57:44][Q&A][:speech] [58:52][Q: For zooming out, could you somehow modify MetersToPixels to make things smaller as you zoom?] [59:39][Q: What is inline v2?] [1:01:04][Q: Why use Emacs versus Visual Studio's IDE?] @@ -60,5 +60,5 @@ [1:23:15][Q: Do you plan to use some form of logging for debugging purposes?] [1:23:48][Q: When you remove a LowEntity from the Chunk list, you swap another into its place. Won't that mess with references?] [1:24:15][@happy_vertex][Even for slow frequency entities?] -[1:24:59][We have come to the end of the questions] +[1:24:59][We have come to the end of the questions][:speech] [/video] diff --git a/cmuratori/hero/code/code059.hmml b/cmuratori/hero/code/code059.hmml index 51da780..58ca14d 100644 --- a/cmuratori/hero/code/code059.hmml +++ b/cmuratori/hero/code/code059.hmml @@ -26,7 +26,7 @@ [53:51][Run the game and tweak the Familiar's logic] [54:48][Moment of realisation: The player's speed is baked into MoveEntity] [55:04][Make the Familiar move at half the speed of the Hero and check it out in-game] -[56:41][Q&A] +[56:41][Q&A][:speech] [58:09][Q: Why "Monstar" and not "Monster"?] [58:58][Q: If someone rewrites your code using OOP and it runs faster, what would you do?] [59:24][Q: Why do you want to be able to outrun your familiar? Doesn't having to stop for him to catch up get annoying?] @@ -47,5 +47,5 @@ [1:35:25][Q: CameraTileY + OffsetY not OffsetX in AddFamiliar call] [1:36:04][Q: I was very glad to hear that you deem classes to be basically garbage. I spent too much time with C# trying to learn object inter-jugglery between them] [1:36:19][Q: About the chaining familiars, could each familiar check if the hero has a familiar already and, if it does, then try to follow the familiar instead?] -[1:36:44][We've come to the end of the questions] +[1:36:44][We've come to the end of the questions][:speech] [/video] diff --git a/cmuratori/hero/code/code060.hmml b/cmuratori/hero/code/code060.hmml index d2a98a4..8b873b0 100644 --- a/cmuratori/hero/code/code060.hmml +++ b/cmuratori/hero/code/code060.hmml @@ -21,7 +21,7 @@ [46:03][Fix jump hitpoints] [46:19][Basic v3 and v4] [51:56][Explain why templates are bad] -[55:14][Q&A] +[55:14][Q&A][:speech] [56:17][Q: Isn't making a struct for HP is preprogramming a little?] [57:48][Q: Why not just use HitPointMax = 12 instead of dividing into 3 hearts and 4 segments?] [58:24][Q: I noticed the floating head was always behind the player. Are you going to go for a depth buffer approach or draw back-to-front to handle this?] diff --git a/cmuratori/hero/code/code061.hmml b/cmuratori/hero/code/code061.hmml index 810dff7..0ffcdc7 100644 --- a/cmuratori/hero/code/code061.hmml +++ b/cmuratori/hero/code/code061.hmml @@ -19,7 +19,7 @@ [1:02:38][Find out that the CameraSpaceP of Sword is completely garbage] [1:03:43][Make ChangeEntityLocation update the new world_postion properly] [1:06:53][Run the game to verify whether the bug is fixed or not] -[1:08:02][Q&A] +[1:08:02][Q&A][:speech] [1:08:45][@jackkrozzer][What do you mean that Visual Studio is horrible at showing variables, and how are you programming in Emacs and running it in Visual Studio?] [1:11:52][@roflraging][When doing exploratory / experimental programming, I find it difficult to decide between seeing things through or switching to a different approach. There have been many times where I start off on a path and things are going great, but eventually I stall due to some unforeseen problem. Often, I spend a crazy amount of time thinking about how to solve / get around the problem, even in simple ways. Analysis paralysis if you will. Any suggestions? Literally, just keep on writing code, no matter how dumb it is?] [1:20:08][@ttbjm][Will you handle the case where a sword and a monstar would hit each other but are moving toward each other so fast that they pass through each other without colliding in a single frame?] @@ -33,5 +33,5 @@ [1:35:11][@teh_guppy][Would there have been an easier language to program the game in?] [1:37:36][@ezioauditorerevs][To be able to surpass C++ as the defacto language to code games in, what would you have to do as a language that would make you better than C++?] [1:38:17][@drtwox][CAN I HAVE A WITNESS BETA KEY!!!] -[1:38:28][Wrap it up for the day] +[1:38:28][Wrap it up for the day][:speech] [/video] diff --git a/cmuratori/hero/code/code062.hmml b/cmuratori/hero/code/code062.hmml index 2d24bd8..584ed91 100644 --- a/cmuratori/hero/code/code062.hmml +++ b/cmuratori/hero/code/code062.hmml @@ -19,7 +19,7 @@ [54:59][Realize that the bug is caused by the hacky code Casey just wrote] [56:11][Run the game and do some hookshot things] [56:51][Explain how these hookshot things happen] -[1:00:24][Q&A] +[1:00:24][Q&A][:speech] [1:01:01][@boondoggle42][Owl of SHAME!!!] [1:01:40][@senjai][Do you ever use gdb?] [1:01:46][@senjai][Do you test more than just using asserts?] @@ -37,5 +37,5 @@ [1:13:50][@btngames][What will we do at 3PM PST when this game is finished?] [1:15:19][@celibdor][Are you happy with the current progress?] [1:15:59][@xxxefwe][More than memory footprint I was thinking about unwanted side effects, i.e. code that deals with the transfer of properties ends up triggering hard to debug shenanigans with the positioning etc.] -[1:17:13][Wrap it up] +[1:17:13][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code063.hmml b/cmuratori/hero/code/code063.hmml index 722642c..4c8ea9f 100644 --- a/cmuratori/hero/code/code063.hmml +++ b/cmuratori/hero/code/code063.hmml @@ -23,7 +23,7 @@ [51:04][Moving camera position update from main loop to EndSim] [51:48][Adjusting rendering for simulation regions] [56:00][Wrapping up for today - fixing compiler errors] -[59:10][Q&A] +[59:10][Q&A][:speech] [59:46][Recommendation for names - instead of stored entities you could have stasis_entity and stasis_region; for the high frequency, you would keep the sim_region and sim_entity.] [1:00:29][Since we know that an entity's speed is bounded, couldn't we calculate a sim_region with bounds such that no entity can move outside of it during the frame? That way anything that the entity could collide with would be pulled into the sim_region?] [1:02:29][How many TODOs do you have?] diff --git a/cmuratori/hero/code/code064.hmml b/cmuratori/hero/code/code064.hmml index 972f2a0..ad72179 100644 --- a/cmuratori/hero/code/code064.hmml +++ b/cmuratori/hero/code/code064.hmml @@ -20,7 +20,7 @@ [48:54][Addressing compiler errors] [50:27][Porting MoveEntity code to work with simulation regions] [56:29][Leaving notes for remainder of simulation region work] -[57:03][Q&A] +[57:03][Q&A][:speech] [58:53][Why don't you upload chat logs with videos somehow?] [1:01:08][There's a bug in your random number table. The numbers are limited to a range.] [1:02:15][Could explain your naming conventions or explanations behind using them? I've never seen a style similar to yours - it seems inverted.] diff --git a/cmuratori/hero/code/code065.hmml b/cmuratori/hero/code/code065.hmml index ffb1da7..9ef8e7f 100644 --- a/cmuratori/hero/code/code065.hmml +++ b/cmuratori/hero/code/code065.hmml @@ -24,7 +24,7 @@ [1:00:02][Adding epsilon to IsCanonical to prevent assertion] [1:01:35][Debugging camera positioning] [1:04:20][Adding TODOs since we have to stop for today] -[1:06:21][Q&A] +[1:06:21][Q&A][:speech] [1:07:13][Assuming we don't go wandering too much on our own, which week has accumulated enough code base for a basic, simple, fully functional game?] [1:09:04][Regarding high and low entities, would the following solution work? Using one entity struct, all entities are stored in one array, and frequently update the entity if the entity is within camera bounds, and use low-frequency updating if it's outside the camera bounds?] [1:11:45][Can you give a high-level overview of how entities work now? I get it in bits and pieces, but this week has lost me.] diff --git a/cmuratori/hero/code/code066.hmml b/cmuratori/hero/code/code066.hmml index 0cdf4dd..d850bd2 100644 --- a/cmuratori/hero/code/code066.hmml +++ b/cmuratori/hero/code/code066.hmml @@ -18,7 +18,7 @@ [46:39][Why is the sword's shadow so dark? - Multiple swords] [50:21][Guarding against having multiple entities in sim_region with same storage index] [57:23][Preventing sword being reset when holding down key] -[58:42][Q&A] +[58:42][Q&A][:speech] [1:00:06][Does the current collision code support walls that are not 90 degrees? Say if the wall is at 45 degrees, would the collision code still work?] [1:03:28][Why not set a boolean value 'to be removed'? It seems like setting the position to an arbitrary position isn't as explicit as setting a flag to say that the entity should be removed on the next update frame.] [1:05:03][The rearranging of code did \[introduce\] some errors into the code. Is this normal for daily coding?] diff --git a/cmuratori/hero/code/code067.hmml b/cmuratori/hero/code/code067.hmml index 9737165..87221f1 100644 --- a/cmuratori/hero/code/code067.hmml +++ b/cmuratori/hero/code/code067.hmml @@ -17,7 +17,7 @@ [46:23][Implementing alternative #2] [51:12][Bug fixing - MoveEntity shouldn't be called for non-moving or non-spatial entities] [53:27][The sword shouldn't be moving forever...] -[55:34][Q&A] +[55:34][Q&A][:speech] [56:42][How will collision be done with moving backgrounds? Such as mazes and moving tiles? Or that won't be in this game?] [59:36][Why don't we use .c instead of .cpp?] [1:00:03][When you started with enums, why did you start with (1 << 1) instead of (1 << 0?)] diff --git a/cmuratori/hero/code/code068.hmml b/cmuratori/hero/code/code068.hmml index bc9a68a..84908f0 100644 --- a/cmuratori/hero/code/code068.hmml +++ b/cmuratori/hero/code/code068.hmml @@ -16,7 +16,7 @@ [42:55][Alternative to entity type double dispatch - fundamental quality double dispatch] [47:26][Starting to add entity type double dispatch first for collision handling] [54:30][Why sword-monstar collision won't work quite yet - need to respond to collisions but not stop movement] -[58:26][Q&A] +[58:26][Q&A][:speech] [59:40][How long in your opinion does it take to become fluent on Emacs?] [1:00:10][Could an entity have multiple fundamental quality property things?] [1:02:11][When are you planning to add depth sorting?] diff --git a/cmuratori/hero/code/code069.hmml b/cmuratori/hero/code/code069.hmml index fd69a34..739fa51 100644 --- a/cmuratori/hero/code/code069.hmml +++ b/cmuratori/hero/code/code069.hmml @@ -11,7 +11,7 @@ [43:37][Problem - Don't want to keep on adding new collision rules] [47:16][Clearing collision rules for an entity] [58:15][Debugging collision rule code] -[1:04:05][Q&A] +[1:04:05][Q&A][:speech] [1:05:03][What stops us from programming a game that directly boots into BIOS (hooks up to hardware as low as possible basically)?] [1:07:11][Do you ever use function pointers?] [1:09:07][Should the thrown entity have the player's direction/speed added to its thrown speed/direction so you cannot catch your own throws?] diff --git a/cmuratori/hero/code/code070.hmml b/cmuratori/hero/code/code070.hmml index a92199a..b97e956 100644 --- a/cmuratori/hero/code/code070.hmml +++ b/cmuratori/hero/code/code070.hmml @@ -22,7 +22,7 @@ [50:33][TODO: Rudimentary world gen - Map display] [51:34][Will you be carrying multiple items?] [52:08][Sorting the TODO lists] -[56:42][Q&A] +[56:42][Q&A][:speech] [57:22][Isn't doing this list thinking too far ahead or thinking too far according to your compression-oriented programming?] [59:15][In the GetHashFromStorageIndex function, you do some bit-twiddling to map hash value into hash index. Is there a reason that you didn't just compute hash index as hash index = hash value MOD array count?] [1:03:19][Right now the familiar lags behind since it moves slower than the player. There may be many legitimate situations where the player and familiar may be separated. Have you considered implementing a proportional integral derivative controller for its speed?] diff --git a/cmuratori/hero/code/code071.hmml b/cmuratori/hero/code/code071.hmml index 0754f1c..b8f1d67 100644 --- a/cmuratori/hero/code/code071.hmml +++ b/cmuratori/hero/code/code071.hmml @@ -26,7 +26,7 @@ [48:01][Make sure that rectangle bound set up properly] [48:33][Blackboard: Explain what we want to make sure in more detail] [56:57][The bug might be Casey broke something in terms of how to store things into chunk position] -[58:13][Q&A] +[58:13][Q&A][:speech] [58:51][@plainflavored][Have you considered using macros that take a name and operator to paste in simple vector functions?] [1:00:02][@llorton][What kind of almond milk are you drinking?] [1:00:12][@donotputmeonpizza][Do you have any suggestions on how to keep up with your 5 episodes a week, when me and my friend have only started watching your videos from the beginning last week?] @@ -50,5 +50,5 @@ [1:21:08][@drtwox][Do you think RK4 integration is "overkill" for a 2D game like Handmade Hero?] [1:24:25][@mymlyreen][Hi, just tuned in so it might have been mentioned before, but why are you using assertions in non-test code?] [1:29:38][@d7samurai][What about having two regions - one outer and one inner, include entities that move into the inner and exclude entities that move out of the outer - so there's a "margin" that allows some moving without ping-ponging right across a hard in / out line?] -[1:31:13][Call it] +[1:31:13][Call it][:speech] [/video] diff --git a/cmuratori/hero/code/code072.hmml b/cmuratori/hero/code/code072.hmml index 7abb454..9452b27 100644 --- a/cmuratori/hero/code/code072.hmml +++ b/cmuratori/hero/code/code072.hmml @@ -16,7 +16,7 @@ [33:30][Diagramming the problem] [36:16][Related problem: finding colliding entities outside the test area] [42:12][Implementation of the simpler option] -[57:41][Q&A] +[57:41][Q&A][:speech] [59:41][@pseudonym73][We had a bit of a troll problem today. Hang on] [1:00:23][@garlandobloom][Pasta was gross] [1:00:37][@bruno51615][What was your grade on APCS?] @@ -43,5 +43,5 @@ [1:23:59][@d74g0n][Will there be a Handmade Hero Convention annually, after game release?] [1:24:25][@erdomina][Are you implementing any advanced data structures and would you recommend learning assembly to aid in optimizing C programs? Any tips on practice?] [1:26:09][@ddengster][Is there such a thing as a 'hardware' cursor as compared to a 'software' mouse cursor?] -[1:28:20][We are out of time] +[1:28:20][We are out of time][:speech] [/video] diff --git a/cmuratori/hero/code/code073.hmml b/cmuratori/hero/code/code073.hmml index db39f7d..10aee40 100644 --- a/cmuratori/hero/code/code073.hmml +++ b/cmuratori/hero/code/code073.hmml @@ -23,7 +23,7 @@ [57:27][handmade.cpp: Intrdouce RemoveCollisionRule] [59:07][handmade.h: Introduce pairwise_collision_rule_flag] [1:00:29][TODO(casey): Transient collision rules! Clear based on flag] -[1:03:04][Q&A] +[1:03:04][Q&A][:speech] [1:04:43][Q: Why did you decide to code at, like, 4?] [1:05:20][Q: Glad to see the A-A B-B collision detection code come up. Took me way too long to figure that one out] [1:09:50][Q: You mentioned yesterday about choosing between two ways to solve the problem of large entities that overlap the sim region but are not in the selected chunks. It looked to me like you could use both solutions. If the entity is larger than the max entity size, still allow it and use the add it twice approach. Would this get you all the advantages of both with neither of the disadvantages?] @@ -33,5 +33,5 @@ [1:13:57][Q: All of the these algorithms all specify convex shapes. Is there anything usable for concave shapes, or is it usually always the case that it's better to just split up a concave shape into multiple convex shapes?] [1:15:11][Q: About the TODO list, you mentioned a while back that you want to code some sort of zooming out that would let you see entities outside the sim region] [1:15:30][Q: An episode on metaprogramming, please?] -[1:16:18][We're out of time] +[1:16:18][We're out of time][:speech] [/video] diff --git a/cmuratori/hero/code/code074.hmml b/cmuratori/hero/code/code074.hmml index d465323..b27913b 100644 --- a/cmuratori/hero/code/code074.hmml +++ b/cmuratori/hero/code/code074.hmml @@ -48,7 +48,7 @@ [1:04:57][Run the game and find that we're getting closer] [1:06:40][handmade_sim_region.cpp: Additionally test the entities' Z planes to determine if they CanCollide] [1:07:07][Run the game and find that we're sort of getting there] -[1:08:40][Q&A] +[1:08:40][Q&A][:speech] [1:09:11][@duroate][Is the familiar going to be programmed to be able to go through the stairwell or instantly teleported to the floor?] [1:10:04][@jackkrozzer][When are we going to do priority for which sprite is in front and in the background? (I don't know what that is called)] [1:12:02][@duroate][You mentioned that you'll be able to attack from below / above. Will you be able to do that on the stairwell?] @@ -68,5 +68,5 @@ [1:26:54][@jackkrozzer][Okay, so you know how we have the camera space and then there's a space outside that we can't see but entities are still moving? Will we need to edit that code to make it work on "Vertical" floors? It's okay if you don't get it. I may be thinking too far in] [1:28:02][@shadowrelic][Would we use a fixed, discrete animation for moving up and down stairs a la Link to the Past, or would the goal be to make movement seamless?] [1:29:04][@xghost7][How much lines of code do you have at the moment?] -[1:29:55][That is the end] +[1:29:55][That is the end][:speech] [/video] diff --git a/cmuratori/hero/code/code075.hmml b/cmuratori/hero/code/code075.hmml index ff47c4d..dd0ce2e 100644 --- a/cmuratori/hero/code/code075.hmml +++ b/cmuratori/hero/code/code075.hmml @@ -37,7 +37,7 @@ [53:47][handmade.h: TODO(casey) Need to make a solid concept of ground levels so the camera can be freely placed in Z and have multiple ground levels in one sim region] [54:33][Run the game and note that the Familiar and Monstar are erroneously getting snapped up to our Z level] [55:19][handmade.cpp: Tweak entities' positions based on their Z level] -[58:33][Q&A] +[58:33][Q&A][:speech] [59:18][@abnercoimbre][I'm guessing the engine will manage arbitrarily high ground levels? Would you really want that? Gameplay such as projecting attacks to a monstar below does sound fun] [1:00:48][@programgamer][Why not use the X and Y positions as they appear on the screen for detecting sim regions?] [1:01:18][@marco_castorina][Should you also check the "stair step" at the top of the top of the stairs? It seems you can exit earlier than at the bottom] @@ -55,5 +55,5 @@ [1:14:34][@programgamer][If the camera were far away enough from the player, would the player go into a simpler routine like the rest of the entities?] [1:14:56][@rooctag][Should the possible collision test use the TestHitEntity instead of the TestEntity or are they the same? Can you briefly go over the flow of the HitEntity changes?] [1:21:30][@rooctag][You could now cancel out the first HitThis == true and not do other checks] -[1:23:06][We have agreed to go on break for a week] +[1:23:06][We have agreed to go on break for a week][:speech] [/video] diff --git a/cmuratori/hero/code/code076.hmml b/cmuratori/hero/code/code076.hmml index 537ccba..a19bede 100644 --- a/cmuratori/hero/code/code076.hmml +++ b/cmuratori/hero/code/code076.hmml @@ -31,7 +31,7 @@ [58:06][Run the game and see where we're at] [58:40][Debugger: Step into AddGroundedEntity] [59:27][handmade.cpp: Consider fixing the drawing code] -[1:01:56][Q&A] +[1:01:56][Q&A][:speech] [1:03:02][Q: That kid you just created is around two foot tall] [1:03:30][Q: Better data is at halls.md[ref site="Moose & Doc" @@ -49,5 +49,5 @@ [1:20:02][Q: Is this in C++?] [1:21:11][Q: Does C++ compiler generate hidden code like constructors, copy constructors, etc., in the way that you structuring the game?] [1:22:54][Q: Do you use the STL at all in your code?] -[1:24:18][Call it] +[1:24:18][Call it][:speech] [/video] diff --git a/cmuratori/hero/code/code077.hmml b/cmuratori/hero/code/code077.hmml index 40c297d..2409189 100644 --- a/cmuratori/hero/code/code077.hmml +++ b/cmuratori/hero/code/code077.hmml @@ -29,7 +29,7 @@ [44:01][handmade_sim_region.cpp: Convert HandleOverlap and SpeculativeCollide to use GetStairGround] [46:55][Run the game and find that that fixed our problem] [47:28][handmade_sim_region.cpp: SpeculativeCollide needs to know whether we're coming on to or moving off a stairwell] -[50:41][Q&A] +[50:41][Q&A][:speech] [52:15][Q: Do you use Clang on Linux?] [52:48][Q: What is the best way to learn C++ from absolute scratch on my own?] [53:56][Q: Do you know anything about Voxpel programming?] @@ -57,5 +57,5 @@ [1:16:18][Q: What is the best way to build a game when you know how to program but you have no art skills? Hire an artist to do it for you? That is my Achilles' heel, but I want to make a game on my own[ref site="Mini Metro" url="http://dinopoloclub.com/minimetro/"]] -[1:18:18][We have come to the end] +[1:18:18][We have come to the end][:speech] [/video] diff --git a/cmuratori/hero/code/code078.hmml b/cmuratori/hero/code/code078.hmml index 2496204..1c8734f 100644 --- a/cmuratori/hero/code/code078.hmml +++ b/cmuratori/hero/code/code078.hmml @@ -32,7 +32,7 @@ [59:50][Run the game and note the weird effect of gravity while falling down the stairwell] [1:01:04][handmade_sim_region.cpp: Set Drag.Z = 0.0f] [1:01:49][Run the game and fall down the stairwell] -[1:02:08][Q&A] +[1:02:08][Q&A][:speech] [1:02:38][Run and jump around] [1:03:36][@rsxole][Can we get a sneak preview of the fundamental types arena?] [1:03:43][Blackboard: Fundamental Types Arena] @@ -46,5 +46,5 @@ [1:13:31][@blah238][How are you laying out your levels currently and are you going to make a level editor?] [1:14:20][@childphotography][Is knowing Big O notation important in the game programming industry?] [1:15:08][@starchypancakes][You mentioned further ways of partitioning collisions past breaking it up into regions. What would some of those be?] -[1:15:56][End that for today] +[1:15:56][End that for today][:speech] [/video] diff --git a/cmuratori/hero/code/code079.hmml b/cmuratori/hero/code/code079.hmml index bb3c168..79f5afa 100644 --- a/cmuratori/hero/code/code079.hmml +++ b/cmuratori/hero/code/code079.hmml @@ -27,7 +27,7 @@ [1:00:07][Debugger: Step into PushRectOutline] [1:02:10][handmade.cpp: Multiply the Dim by half] [1:02:59][Run the game and see our correctly drawing outline] -[1:03:45][Q&A] +[1:03:45][Q&A][:speech] [1:05:07][@nigna][What setup do you use for debugging on Linux?] [1:07:01][@t3amkill3r][Can you upload the videos somewhere else? YouTube is blocked in China. I would like to watch from the beginning] [1:07:44][@l4t33d][When doing the vertical movement, would it be reasonable to take two measurements: one at current position, then one at "final moved" position, and average the movement?] @@ -59,5 +59,5 @@ [1:30:30][@panic00][Can you rename the stream to Casey's Little Kindergarten?] [1:30:58][@protongaming][One day you said you lost hope in Microsoft, and now you say you complain so they can fix it?] [1:33:58][@dasmehdi][Was git an example, or do you feel there are problems with it? Curious to hear] -[1:35:42][Call it there] +[1:35:42][Call it there][:speech] [/video] diff --git a/cmuratori/hero/code/code080.hmml b/cmuratori/hero/code/code080.hmml index 0f9e26b..cb190da 100644 --- a/cmuratori/hero/code/code080.hmml +++ b/cmuratori/hero/code/code080.hmml @@ -27,7 +27,7 @@ [54:03][handmade_sim_region.cpp: Initialise tMaxTest to our current tMax] [54:34][Run the game and find that everything seems pretty good, but still a little janky] [54:55][Set the stage for next week] -[55:33][Q&A] +[55:33][Q&A][:speech] [55:43][Consult the TODO list] [58:14][@a_pulsing_mage][Can you explain the LengthOf(array) macro, and the sizeof pointers?] [1:06:19][@ttbjm][Will the space entities be used for the collision optimization you were talking about in an earlier stream? o(n^2) stuff] @@ -37,5 +37,5 @@ [1:10:04][@dmitsuki][Do you dislike templates?] [1:11:17][@samfosteriam][How will you handle something like an explosion that affects all things in an area? Then it's not 1 entity colliding with another] [1:12:09][@flynnspixel][What do you think about the new Vulkan API?] -[1:13:15][Wrap things up] +[1:13:15][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code081.hmml b/cmuratori/hero/code/code081.hmml index ca64296..822aa59 100644 --- a/cmuratori/hero/code/code081.hmml +++ b/cmuratori/hero/code/code081.hmml @@ -21,7 +21,7 @@ [53:17][Parameterise loaded_bitmap] [58:10][Restart the game] [58:30][Tuft it up][quote 42] -[59:36][Q&A] +[59:36][Q&A][:speech] [1:00:29][On the fancy autoload dll stuff] [1:01:52][Q: Is there an art team working on this game?] [1:02:41][@mmozeiko][Max random number should be set to fixed number 100000\[...\] because in episode 35 when you went to random.org you chose to generate random numbers from 0 up to that number] @@ -34,5 +34,5 @@ [1:21:09][Q: Based on the stream, it appears that you need to know math to do this type of activity. Is that correct?] [1:22:13][Blackboard: Casey's Plan vs. MegaTexture] [1:32:47][Q: Why do you think John Carmack is a hack and when are you going to say it to his face?] -[1:36:06][Conclusion] +[1:36:06][Conclusion][:speech] [/video] diff --git a/cmuratori/hero/code/code082.hmml b/cmuratori/hero/code/code082.hmml index 5ebc466..ced8481 100644 --- a/cmuratori/hero/code/code082.hmml +++ b/cmuratori/hero/code/code082.hmml @@ -30,7 +30,7 @@ [56:00][Implement MakeEmptyBitmap] [1:00:22][Set the alpha channel of the composited bitmap] [1:04:45][Recap today's work] -[1:06:14][Q&A] +[1:06:14][Q&A][:speech] [1:07:02][Q: Casey, I missed the earlier part of the feed, but what was the intention of moving the ground plane with the player?] [1:07:37][Q: Why aren't RandomUnilateral and RandomBilateral not just using the implementation of RandomBetween? Seems like a pretty clear violation of DRY, although I realise you aren't currently intending for this code to be extremely clean right now] [1:11:19][Someone wants a cloc count] @@ -46,5 +46,5 @@ [1:25:37][Q: I think you've used an aggregate initialiser in one place with random_series being seeded, i.e. you only have one call to RandomSeed but you have at least...] [1:26:53][Q: Initially, you put BytesPerPixel into the bitmap structure because it can be useful. Then I asked you to remove it because it never changes, and you did that. But ten or so episodes later you added it back because it would be useful. And now you're removing it again. This is funny] [1:27:45][Q: You fix Random to be uniform by generating a full 32bit random number, do mod next power of 2 choice count, then check if result is less than choice count. If not, repeat the whole process] -[1:28:18][The end of another full-power episode of Handmade Hero, which was dedicated to Abner Coimbre] +[1:28:18][The end of another full-power episode of Handmade Hero, which was dedicated to Abner Coimbre][:speech] [/video] diff --git a/cmuratori/hero/code/code083.hmml b/cmuratori/hero/code/code083.hmml index 6aff78c..b7dcce8 100644 --- a/cmuratori/hero/code/code083.hmml +++ b/cmuratori/hero/code/code083.hmml @@ -26,14 +26,14 @@ [1:25:37][Re-enable DrawTestGround] [1:27:04][Put CAlpha back in] [1:30:13][Check the equation] -[1:32:37][Q&A] +[1:32:37][Q&A][:speech] [1:33:18][Q: According to \[a website\], to fix the Wacom driver without restarting, stop and start Wacom Professional Tablet Service] [1:35:00][Q: Being Happy, Sleepy and Sneezy, you do realise you're just four dwarves short of a whole crew?] [1:36:07][@mr4thdimention][So if I understand correctly (sorry if my interpretation just confuses anyone), the reason off-screen rendering was incorrect before pre-multiplied alpha was that, after blending, things in the texture - the colours there - were pre-multiplied because they were multiplied when they were put in the texture. If, for some reason, you didn't want to optimise your code, you could also divide the colour channel by the alpha to get it back to un-pre-multiplied. Is this a reasonable understanding of the issue?] [1:42:55][Q: Can you give a small example of what the decompression step between SimEntity and StoredEntity will look like?] [1:43:24][@drive137][Q: Maybe we should set a way for you to see things like that kind of help, if someone finds a good possible solution. No, I don't know how] [1:43:55][Blackboard: A lot of equationing] -[1:44:43][Wrap up the stream with a brief recap...] -[1:46:14][...a peek into the future...] -[1:49:29][...and closing remarks] +[1:44:43][Wrap up the stream with a brief recap...][:speech] +[1:46:14][...a peek into the future...][:speech] +[1:49:29][...and closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code084.hmml b/cmuratori/hero/code/code084.hmml index 5cae823..2ec68ba 100644 --- a/cmuratori/hero/code/code084.hmml +++ b/cmuratori/hero/code/code084.hmml @@ -23,7 +23,7 @@ [47:08][Blackboard: Tiling considerations] [48:38][Turn DrawTestGround into DrawGroundChunk] [54:28][View the results in-game] -[55:08][Q&A] +[55:08][Q&A][:speech] [55:58][Q: Why don't we fill the entire game window instead of having all that black space?] [58:29][Q: Are some of these issues with dealing with display on multiple levels stemming from the lack of a Z-coordinate for the camera to just do a lerp on?] [1:01:03][Q: If no one's asking related questions, could you ballpark a time-frame when adding a font and text rendering system will become useful or necessary?] @@ -34,5 +34,5 @@ [1:07:38][Q: What is your programming experience as before Handmade Hero?] [1:08:42][Q: How many different classes are you having to use already?] [1:10:30][Q: Is there a simple way to explain pointers and references in C++?] -[1:16:30][Closing remarks] +[1:16:30][Closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code085.hmml b/cmuratori/hero/code/code085.hmml index 3afed51..b98482f 100644 --- a/cmuratori/hero/code/code085.hmml +++ b/cmuratori/hero/code/code085.hmml @@ -34,10 +34,10 @@ [53:13][Step through the code] [54:54][FillGroundChunk] [58:00][View the results in-game] -[59:11][Q&A] +[59:11][Q&A][:speech] [59:35][@garlandobloom][Q: What is the most expired food you have ever eaten?] [59:51][Q: Could you explain what pop and push are, and how they work?] [1:01:29][Blackboard: Memory is a big line!] [1:10:49][Q: How will the ground texture chunking handle adjacent rooms with different types of ground?] -[1:13:29][Closing remarks] +[1:13:29][Closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code086.hmml b/cmuratori/hero/code/code086.hmml index 91aff31..a332c1c 100644 --- a/cmuratori/hero/code/code086.hmml +++ b/cmuratori/hero/code/code086.hmml @@ -34,7 +34,7 @@ [1:05:10][Find out why those chunks aren't getting produced until the Hero walks on them] [1:07:01][This was working totally perfectly] [1:07:53][Problem solved] -[1:08:41][Q&A] +[1:08:41][Q&A][:speech] [1:09:27][Q: What is Muratori syntax?] [1:10:32][Q: Will the random ground splats be based on some seed so that the ground buffer can be regenerated the same as it was after it gets evicted?] [1:11:13][Q: I'm sure it's been asked a bunch, but any tips for what language to start with and how to start?] @@ -45,5 +45,5 @@ [1:19:11][@miblo][Couldn't you set the SimBounds expansion from the screen dimensions or CameraBoundsInMeters or something? Hope I'm understanding it correctly] [1:20:30][Q: Will you be implementing dynamic lighting or any deferred rendering for lots of real lights, etc?] [1:22:45][Q: Is there anyone you can suggest for a hardcore render guy?] -[1:23:40][Closing remarks] +[1:23:40][Closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code087.hmml b/cmuratori/hero/code/code087.hmml index c87abf9..1d0e2e7 100644 --- a/cmuratori/hero/code/code087.hmml +++ b/cmuratori/hero/code/code087.hmml @@ -35,7 +35,7 @@ [49:00][Shuffle the code] [49:46][Count how many GroundBuffers fit on the screen] [50:16][Assess our current situation] -[51:26][Q&A] +[51:26][Q&A][:speech] [52:04][@jazzy_josh][Are the randomly generated floor tiles being cached yet?] [52:20][@freddukes][Do you think having things in place like static cast to put more checks, e.g. int to pointer, is useful over standard C-style cast which just ignores all type-checking? Wouldn't a static cast have found that bug at the start of the stream?] [55:29][@QuickliGames][Do you think the clumpiness is actually due to splat distance from the centre of the chunks?] @@ -44,5 +44,5 @@ [1:01:12][@maato_][Are there still places where the background colour shows through the ground tiles?] [1:02:39][@cmbasckeira][Is this Chunk code already prepared for adding holes to the ground?] [1:07:01][@insofaras][Could you make code that ensures a certain frame-rate but uses extra available time to generate the ground textures in the background, maybe generating a low-quality version first to avoid having no texture at all?] -[1:08:58][Recap, a glimpse into the future and closing remarks] +[1:08:58][Recap, a glimpse into the future and closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code088.hmml b/cmuratori/hero/code/code088.hmml index c527873..328b47d 100644 --- a/cmuratori/hero/code/code088.hmml +++ b/cmuratori/hero/code/code088.hmml @@ -52,7 +52,7 @@ [54:46][Blackboard: PieceGroup] [56:23][Blackboard: Compression Oriented Programming] [56:57][Blackboard: render_group] -[58:19][Q&A] +[58:19][Q&A][:speech] [59:16][@miblo][Will things like filters end up in the render_group?] [1:00:55][@cezonezor][How long will the renderer take?] [1:02:29][@poohshoes][Could you give us examples of what some of the simpler things will be in the render_group?] @@ -65,5 +65,5 @@ [1:08:45][@boondoggle42][Will our hero always be taller than the treetops?] [1:09:58][We've finished early... or have we?] [1:10:19][@abnercoimbre][Are we keeping the 5PM schedule?] -[1:12:06][Wrap it up with a recap and closing remarks] +[1:12:06][Wrap it up with a recap and closing remarks][:speech] [/video] diff --git a/cmuratori/hero/code/code089.hmml b/cmuratori/hero/code/code089.hmml index ef95e25..9aa9777 100644 --- a/cmuratori/hero/code/code089.hmml +++ b/cmuratori/hero/code/code089.hmml @@ -45,7 +45,7 @@ [58:24][Pull out the EntityBasis computation] [59:58][Clean up] [1:01:32][See where we're at] -[1:01:38][Q&A] +[1:01:38][Q&A][:speech] [1:03:15][@pseudonym73][Warning! There may be lots of prestream questions today] [1:03:57][@phantomu][When you meet a bug in the game and are able to recreate it, will you get a bug line in the programming, or how does it work?] [1:04:36][@wardinsc][Is it worth aligning render_entries?] @@ -54,5 +54,5 @@ [1:09:03][@aooaooa][Why use pointers over references?] [1:10:31][@terminalgain][About Mantle, were you aware AMD dropped development for it and put a lot of that manpower into helping push Vulkan?] [1:11:23][@mr4thdimention][The PushBuffer is an abstraction layer relying on memory for communication instead of a bunch of functions, if I understand correctly. Is that how you prefer API design in general?] -[1:13:03][We are done here] +[1:13:03][We are done here][:speech] [/video] diff --git a/cmuratori/hero/code/code090.hmml b/cmuratori/hero/code/code090.hmml index bae3b8b..0c7e793 100644 --- a/cmuratori/hero/code/code090.hmml +++ b/cmuratori/hero/code/code090.hmml @@ -41,11 +41,11 @@ [55:30][Blackboard: Pretend we had some third universal basis] [57:29][Blackboard: How does Casey move a point from world space into screen space?] [1:01:17][Blackboard: Preview what we're going to do] -[1:03:08][Q&A] +[1:03:08][Q&A][:speech] [1:03:41][@mr4thdimention][Would you represent the origin of coordinate systems in a universal coordinate system?] [1:06:25][@nicstop][A few streams ago you said you'd prefer to call functions through a macro and then forgot to explain why] [1:07:06][@e10dee4d][Why is the familiar moving left to right, or did I miss something?] [1:07:32][@cubercaleb][Why are computer coordinates upside-down?] [1:12:30][@twinduoq][How important is it to know how to make a game engine vs simply using one? And if you were to use DirectX libraries, how much would the code differ?] -[1:21:06][Wrap it up with a brief recap and a glimpse into the future] +[1:21:06][Wrap it up with a brief recap and a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code091.hmml b/cmuratori/hero/code/code091.hmml index f610255..916f61f 100644 --- a/cmuratori/hero/code/code091.hmml +++ b/cmuratori/hero/code/code091.hmml @@ -35,7 +35,7 @@ [54:19][Play with those axes] [55:26][Do we have pie?][quote 47] [56:08][Continue playing] -[57:27][Q&A] +[57:27][Q&A][:speech] [59:26][@abnercoimbre][Do you usually worry a lot about naming schemes? You always seem to choose a good enough name and move on] [59:48][@naysayer88][Is that the variable?] [1:00:10][@kirre1000][How can you draw so fast? Do you use a draw pad and pen?] @@ -47,5 +47,5 @@ [1:05:20][Go nuts with that] [1:05:55][@cdawzrd][Time-dependent colour][quote 48] [1:07:11][@cubercaleb][Needs more dots] -[1:07:40][Call it done for the day, with special mention made of that weird pulsating thing and a glimpse into the future][quote 49] +[1:07:40][Call it done for the day, with special mention made of that weird pulsating thing and a glimpse into the future][:speech][quote 49] [/video] diff --git a/cmuratori/hero/code/code092.hmml b/cmuratori/hero/code/code092.hmml index ae95ad1..3abc988 100644 --- a/cmuratori/hero/code/code092.hmml +++ b/cmuratori/hero/code/code092.hmml @@ -49,7 +49,7 @@ [50:58][Check the code] [51:40][Find our typo and restore our buffer pre-step] [52:15][Re-enable our edge test and consider further work] -[53:08][Q&A] +[53:08][Q&A][:speech] [53:54][@d7samurai][What are your computer specs?] [55:14][@powerc9k][Is it weird that I got really excited once the rotated fill got faster?] [56:06][@wardinsc][Would skewing the axes still work?] @@ -63,5 +63,5 @@ [1:06:07][Blackboard: Texture sampling handles anti-aliasing for the alpha'd bitmaps] [1:07:57][Check out our hilarious little shape and review our progress] [1:09:37][@garlandobloom][Historically, did we ever do anti-aliasing with CPU rendering?] -[1:11:52][Postpone anything more until tomorrow, with a potential plan of action] +[1:11:52][Postpone anything more until tomorrow, with a potential plan of action][:speech] [/video] diff --git a/cmuratori/hero/code/code093.hmml b/cmuratori/hero/code/code093.hmml index d109915..c06e351 100644 --- a/cmuratori/hero/code/code093.hmml +++ b/cmuratori/hero/code/code093.hmml @@ -56,5 +56,5 @@ [1:19:54][@guit4rfreak][Will the different renderers be in the platform layer?] [1:20:19][@log_2][I saw a great video on youtube called 'Computer Color is Broken' from minutephysics that talks about how blending colours is usually incorrectly done. Without relying on 3rd party libraries, you have an opportunity to do it correctly.] [1:22:21][@miblo][Remember when you introduced RenderGroup the other week? Is this subpixel rendering lerp one of the things that will go in the RenderGroup?] -[1:23:16][Call it for today with a recap and a glimpse into the future] +[1:23:16][Call it for today with a recap and a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code094.hmml b/cmuratori/hero/code/code094.hmml index 8bc7222..43c0595 100644 --- a/cmuratori/hero/code/code094.hmml +++ b/cmuratori/hero/code/code094.hmml @@ -39,7 +39,7 @@ [53:07][Live tinting] [55:37][Premultiply the alpha properly] [57:08][Blackboard: Premultiplied alpha] -[59:09][Q&A] +[59:09][Q&A][:speech] [59:37][@ashkanhoss29][What would be the visual artifact of using 2 instead of 2.2 for the gamma?] [1:01:28][@garlandobloom][Q: Also need to do additive color tinting for full expressiveness] [1:02:11][@krohnos][I have a CS background but am 2 months behind on coding this. It is much easier to follow when I'm not trying to type myself. How detrimental would it be to my understanding to watch and just stop coding if I get too far behind? Sometimes when you're moving things around, I have to watch that bit 2-3 times] @@ -54,5 +54,5 @@ [1:14:47][@differentname][Do all monitors use the same 2.2 curve?] [1:16:23][@cubercaleb][Is raising the color value to 2 instead of 2.2 really going to save that much processing power?] [1:18:11][@kikokat][I got stuck implementing a Bitshift + PRNG in your engine, thanks for showing a code comment about 'Wang Hashing' earlier which was just what I needed] -[1:18:46][Wrap it up for today] +[1:18:46][Wrap it up for today][:speech] [/video] diff --git a/cmuratori/hero/code/code095.hmml b/cmuratori/hero/code/code095.hmml index cce31a4..6180b22 100644 --- a/cmuratori/hero/code/code095.hmml +++ b/cmuratori/hero/code/code095.hmml @@ -34,7 +34,7 @@ page="Optimization Best Practices" url="https://msdn.microsoft.com/en-us/library/ms235601.aspx"]] [50:52][Try wrapping everything else in a #pragma optimize off] -[54:25][Q&A] +[54:25][Q&A][:speech] [55:39][@arbesfeld][Why can't you compile OpenGL code to C to make a software renderer?] [56:00][@mr4thdimention][Is it useful to be able to debug with optimizations on? Do you think you might be able to show how to do that at some point?] [56:40][Demonstrate /Zo compiler flag[ref @@ -51,5 +51,5 @@ [1:12:27][@grumpygiant256][Any reason why you write 'Texel.a + Dest.a - Texel.a*Dest.a' instead of just 'InvRSA*Dest.a + Texel.a', which would match the RGB channels?] [1:12:54][Rearrange these calculations and keep on keeping on condensing] [1:15:54][@andsz_][Wasn't the alpha channel authored with nonlinear colors?] -[1:16:32][Call it a day] +[1:16:32][Call it a day][:speech] [/video] diff --git a/cmuratori/hero/code/code096.hmml b/cmuratori/hero/code/code096.hmml index dfebbfa..cfbd304 100644 --- a/cmuratori/hero/code/code096.hmml +++ b/cmuratori/hero/code/code096.hmml @@ -21,7 +21,7 @@ [44:22][Blackboard: What do we do in 2D?] [46:22][Blackboard: Normal maps] [48:19][Blackboard: We don't know what the light field is] -[53:19][Q&A] +[53:19][Q&A][:speech] [54:18][@cubercaleb][So is this why animation studios like Pixar have super computers for the rendering?] [55:31][@ttbjm][What about shadows?] [56:09][Blackboard: Shadow maps] @@ -77,5 +77,5 @@ [1:54:33][@ice_engine][Why is it easier to represent light as photons and not particles in 3D programs?] [1:55:08][@irdumbs][Rendering light in environments and events approaching the speed of light. How to do it?] [1:55:24][@doctoromega][PBR lightning? Quick run down on how it works?] -[1:55:41][We have come to the end] +[1:55:41][We have come to the end][:speech] [/video] diff --git a/cmuratori/hero/code/code097.hmml b/cmuratori/hero/code/code097.hmml index 754e7f6..cded845 100644 --- a/cmuratori/hero/code/code097.hmml +++ b/cmuratori/hero/code/code097.hmml @@ -32,7 +32,7 @@ [59:24][Throw in a Normal.z calculation for now and finish MakeSphereNormalMap] [1:02:43][Add Normalize to handmade_math.h] [1:03:49][Compile and see it in-game] -[1:04:18][Q&A] +[1:04:18][Q&A][:speech] [1:05:02][@dsjimenez][Your 2D art already seems to have some shading. Will that just represent ambient lighting when mixed with this dynamic lighting you're trying to do?] [1:05:57][@miblo][In MakeSphereNormalMap, should 'Y < Bitmap->Width;' be 'Y < Bitmap->Height;'?] [1:06:15][@tenbroya][How far do you think you can increase the capabilities of an engine like this before you start to suffer from performance constraints due to using only the CPU (vs GPU)?] @@ -41,5 +41,5 @@ [1:12:05][@timbertoes][Is your lighting lookup a similar technique to MatCaps used in other software?] [1:12:20][@lukeultra][What benefits do you see from using the extra time it takes to create your own engine from scratch? Is it worth it in your opinion?] [1:12:35][@pseudonym73][The catch is that it's going to take the Sqrt of a negative number if you're outside the sphere] -[1:14:03][We have come to the end of the questions] +[1:14:03][We have come to the end of the questions][:speech] [/video] diff --git a/cmuratori/hero/code/code098.hmml b/cmuratori/hero/code/code098.hmml index c57f022..2f10616 100644 --- a/cmuratori/hero/code/code098.hmml +++ b/cmuratori/hero/code/code098.hmml @@ -34,7 +34,7 @@ [45:24][Blackboard: Picking from the environment map] [47:51][Nullify the Middle sample and make SampleEnvironmentMap produce values we can use] [55:33][Look forward to next week] -[56:28][Q&A] +[56:28][Q&A][:speech] [57:42][Recap today's cleaning up] [58:21][@pseudonym73][When you lerp two normals, you probably won't get a normalised vector. There are a few things you can do about that. Would you briefly comment on your thoughts about this?] [1:01:41][@chronaldragon][Q: how are we going to sample lights when calculating the pixel values for each sprite? Will there be a list of all the lights? Or will that be a parameter of some sort?] @@ -47,5 +47,5 @@ [1:12:37][gasto5 Q; Will the effect end up like a bump map effect?] [1:12:54][@deadvertex][Could we do reflections by using our frame buffer as an environment map when drawing the bitmap?] [1:13:17][@pseudonym73][If you imagine the surface as an implicit function f(x,y,z) = 0, it's the gradient of THAT function. Which is the same as the cross product of the two surface tangents.] -[1:14:44][We have come to the end of the questions] +[1:14:44][We have come to the end of the questions][:speech] [/video] diff --git a/cmuratori/hero/code/code099.hmml b/cmuratori/hero/code/code099.hmml index a674782..b7b7d5b 100644 --- a/cmuratori/hero/code/code099.hmml +++ b/cmuratori/hero/code/code099.hmml @@ -23,7 +23,7 @@ [48:08][Take a look at what we were doing in SampleEnvironmentMap] [48:40][Use the Normal to look up into the environment_map] [49:25][View it in-game] -[50:35][Q&A] +[50:35][Q&A][:speech] [51:30][@poohshoes][In the MoveEntity function you have two variables that are never used: NewPlayerP and OldPlayerP. Will you delete them for me?] [52:28][@ttbjm][Would this scheme let you have a pool of water reflect a starry sky?] [53:25][Blackboard: Reflecting a starry sky in a pool of water] @@ -44,5 +44,5 @@ [1:16:03][Check it out in-game and then drive it off an animated parameter] [1:18:06][@miblo][Will light get reflected horizontally from walls etc. in this scheme?] [1:18:53][@andsz_][Yay! Now we can oversaturate] -[1:19:08][Close down] +[1:19:08][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code100.hmml b/cmuratori/hero/code/code100.hmml index 516f521..3be9c5d 100644 --- a/cmuratori/hero/code/code100.hmml +++ b/cmuratori/hero/code/code100.hmml @@ -26,7 +26,7 @@ [47:53][Tweak the Normal] [49:01][Check out the reflective sphere in-game] [49:56][Consider investigating what's going wrong with the Top map] -[51:46][Q&A] +[51:46][Q&A][:speech] [52:50][@thesizik][You could try creating a normal map with a more predictable reflection, rather than a sphere] [53:53][@andsz_][Is the Y-axis correctly set in the normal map?] [54:58][@pseudonym73][A pyramid was suggested by a couple of people] diff --git a/cmuratori/hero/code/code102.hmml b/cmuratori/hero/code/code102.hmml index 3a93f7b..fb8d8b8 100644 --- a/cmuratori/hero/code/code102.hmml +++ b/cmuratori/hero/code/code102.hmml @@ -35,5 +35,5 @@ [1:20:50][@flaturated][How would the anomaly shift if the sphere were to move up and down instead of left and right?] [1:22:40][@grumpygiant256][Wondering if it shouldn't maybe be " / fabs(SampleDirection.y)"?] [1:26:04][@stelar7][Show the sampling on the texture?] -[1:28:40][The stream's over] +[1:28:40][The stream's over][:speech] [/video] diff --git a/cmuratori/hero/code/code103.hmml b/cmuratori/hero/code/code103.hmml index 855ca9f..de7774b 100644 --- a/cmuratori/hero/code/code103.hmml +++ b/cmuratori/hero/code/code103.hmml @@ -20,7 +20,7 @@ [42:59][Set OriginY in order to pass it to ZDiff] [44:06][Turn off the sampling overdraw and darken the sphere] [44:59][Check out our stable sphere and allow it to move around again] -[46:34][Q&A] +[46:34][Q&A][:speech] [47:08][@d7samurai][The reflection is "inverted" - the edge should be the center and vice versa] [47:13][@garlandobloom][Q: Reflection I think is backwards, at least vertically] [47:53][@teknorath][How long do you anticipate it will take before we get into more game-designey type topics rather than building up the engine?] @@ -41,5 +41,5 @@ [1:12:28][Kill it for today and glimpse into the future] [1:13:07][The green dude is tough][quote 68] [1:15:27][@ttbjm][What about Fresnel!!!] -[1:16:45][Wrap it up for today] +[1:16:45][Wrap it up for today][:speech] [/video] diff --git a/cmuratori/hero/code/code104.hmml b/cmuratori/hero/code/code104.hmml index 8df4b9e..0df9c24 100644 --- a/cmuratori/hero/code/code104.hmml +++ b/cmuratori/hero/code/code104.hmml @@ -26,7 +26,7 @@ [46:07][Flip the sign of ChunkOffsetY in FillGroundChunk] [46:31][On the importance of focusing on whatever it is that you're focusing on, and to know when to stop and correct things] [48:27][Casey thinks we're in good shape there] -[49:07][Q&A] +[49:07][Q&A][:speech] [50:51][@chronaldragon][Q: Has this work fixed the normal map issue or will we need to address that specifically?] [51:46][@tloch14][Do you think that making the Y component to be bottom-up will also help make sense of game mechanics like gravity?] [52:34][@glasses_boy][Will we be implementing a matrix/affine transform in order to handle changes to coordinate systems?] @@ -37,5 +37,5 @@ [1:02:41][@pseudonym73][It's more correct to call that the "translation part". The entire upper part is affine] [1:05:17][@chochmah][When you exit the program, Visual Studio says that there are about 8 threads terminated. Is there more than one thread in Handmade Hero right now?] [1:07:15][@cubercaleb][Would it be possible to have the renderer set up so the world curves back as you move along the Y-axis?] -[1:10:44][Go ahead and end] +[1:10:44][Go ahead and end][:speech] [/video] diff --git a/cmuratori/hero/code/code105.hmml b/cmuratori/hero/code/code105.hmml index 4e71eaa..f4ff244 100644 --- a/cmuratori/hero/code/code105.hmml +++ b/cmuratori/hero/code/code105.hmml @@ -18,7 +18,7 @@ [52:03][Blackboard: How the EntityBasis is conceptualised] [53:54][Only use the EntityBaseP.z for scaling] [54:31][Check it out in-game, scrutinising the jumping] -[56:37][Q&A] +[56:37][Q&A][:speech] [57:38][@stelar7][Why are you using AlignX and AlignY, instead of a v2 (in bitmap)?] [1:00:08][@stelar7][Shouldn't the shadow move somewhat up when he jumps (because of the angled viewport)?] [1:00:51][@cubercaleb][Could you make the circle reflect a bitmap like a tree if you wanted?] @@ -37,5 +37,5 @@ [1:15:08][@stelar7]["Un-optimized"? Don't you have -O2 on?] [1:16:20][@ttbjm][Will the shadow be reflected in the normal map?] [1:16:37][@gasto5][Will the particles effects system interact with the normal maps?] -[1:17:30][Go ahead and close things down for the day, then] +[1:17:30][Go ahead and close things down for the day, then][:speech] [/video] diff --git a/cmuratori/hero/code/code106.hmml b/cmuratori/hero/code/code106.hmml index 5502942..b800e6d 100644 --- a/cmuratori/hero/code/code106.hmml +++ b/cmuratori/hero/code/code106.hmml @@ -30,7 +30,7 @@ [49:23][Consider the weird notion of Y-displacement for Z] [50:50][Set GlobalAlpha to 0 and try turning off that Y-displacement] [53:50][We want Z-slices] -[57:11][Q&A] +[57:11][Q&A][:speech] [57:40][@pseudonym73][Did I see that correctly, that the ground shadow jumps along with the hero?] [58:17][@ifingerbangedurcat][Slightly off topic but, can you quickly go over the concept behind MoveSpec? Why not have every entity have their own velocity/drag, etc. values instead? Just for organization?] [59:06][@mr4thdimention][Is the jump a real mechanic or just for making the system robust?] @@ -45,5 +45,5 @@ [1:07:18][@garlandobloom][Everybody knows Hatoful Boyfriend] [1:08:24][@stelar7][Have you seen/heard of "Hunie Pop" then?] [1:09:04][@abnercoimbre][Q: That's a wrap?] -[1:09:35][That is a wrap, Abner] +[1:09:35][That is a wrap, Abner][:speech] [/video] diff --git a/cmuratori/hero/code/code107.hmml b/cmuratori/hero/code/code107.hmml index f3dcde1..5bedb79 100644 --- a/cmuratori/hero/code/code107.hmml +++ b/cmuratori/hero/code/code107.hmml @@ -27,10 +27,10 @@ [53:15][Check out the fade and get the FadeBottom working] [56:21][Check it all out and stagger the stairwell location] [57:22][Walk down the levels and note some issues to work on] -[59:49][Q&A] +[59:49][Q&A][:speech] [1:00:16][@ttbjm][Why were some of the trees upside down?] [1:02:17][@cubercaleb][Are the head and body entities off to the side supposed to scale with the main character?] [1:06:19][@blah238][What is Z-fighting and is it something that you have to worry about in a game like this?] [1:06:51][Blackboard: Z-Fighting] -[1:19:35][Stream is over] +[1:19:35][Stream is over][:speech] [/video] diff --git a/cmuratori/hero/code/code108.hmml b/cmuratori/hero/code/code108.hmml index 55761ab..61bf8cd 100644 --- a/cmuratori/hero/code/code108.hmml +++ b/cmuratori/hero/code/code108.hmml @@ -10,7 +10,7 @@ [47:35][Moment of realisation: Our offset is still happening in pixels] [48:59][Do the perspective computation in pixels and work on the values] [1:00:00][Blackboard: Do the maths one more time] -[1:04:07][Q&A] +[1:04:07][Q&A][:speech] [1:04:53][@jamesamurr][Is squinting analogous to closing a camera's aperture?] [1:05:42][@stelar7][Are you intending to multiply by XYZ and not just the XY as the variable says?] [1:06:11][@ideograham][Wasn't the room height 8 meters? That's about 3 times the height of a normal room, so you have to increase the focal length to compress everything] @@ -36,5 +36,5 @@ [1:30:08][@stelar7][Will you cover things like patching and downloading code from the internet?] [1:30:28][@sonicphi][Are you planning on implementing some kind of shader support?] [1:31:29][@ninjin420][Will this game have a Collector's Edition? I want a plastic dragon in it for $150] -[1:32:35][It's dinner time] +[1:32:35][It's dinner time][:speech] [/video] diff --git a/cmuratori/hero/code/code109.hmml b/cmuratori/hero/code/code109.hmml index 13388a4..de74fef 100644 --- a/cmuratori/hero/code/code109.hmml +++ b/cmuratori/hero/code/code109.hmml @@ -21,7 +21,7 @@ [51:36][Clean this stuff up] [56:20][Base MetersToPixels off the ScreenDim.x] [59:07][Demonstrate this resolution-independence] -[1:04:34][Q&A] +[1:04:34][Q&A][:speech] [1:05:38][@grumpygiant256][Should the hero/tree sizes not be dictated by the resolution of the art, i.e. to maintain constant pixel density?] [1:07:32][@mr4thdimention][If you want your game to be full screen, how would you want to handle screens with different aspect ratios?] [1:08:18][@garlandobloom][Q: Baby familiars] @@ -37,5 +37,5 @@ [1:21:20][@thesizik][Double Semicolon!] [1:21:56][@abnercoimbre][Q: Seems we ran out of questions. Thank you for streaming, it's always a privilege! Pre-stream was painful, though] [1:22:02][Thank you to the moderators: @garlandobloom, @abnercoimbre, @chronaldragon and @drive137] -[1:23:58][Look forward to the future] +[1:23:58][Look forward to the future][:speech] [/video] diff --git a/cmuratori/hero/code/code110.hmml b/cmuratori/hero/code/code110.hmml index 19df19d..e575051 100644 --- a/cmuratori/hero/code/code110.hmml +++ b/cmuratori/hero/code/code110.hmml @@ -22,7 +22,7 @@ [56:51][Draw the CameraBoundsInMeters, SimBounds and SimRegion->Bounds] [57:49]['Too Many Rects' by Casey Muratori][quote 81] [58:33][Take a look at it all and start to investigate why entities are not getting pulled in up to the SimRegion->Bounds] -[1:03:17][Q&A] +[1:03:17][Q&A][:speech] [1:03:56][@grumpygiant256][Will the 'Too Many Rects' song be on the soundtrack album?] [1:04:10][@robotchocolatedino][Should the MetersToPixels value take the pixel density of the monitor into account?] [1:04:58][Blackboard: How we're parameterising things at the moment] @@ -34,5 +34,5 @@ [1:17:45][@krohnos][Is the non-smooth movement at higher zoom levels due to not being optimized or some sort of issue with sub-pixel smoothness?] [1:18:06][@davidthomas426][Would it look different if you scale WidthOfMonitor and FocalLength together, constrained to the same ratio?] [1:19:56][@novynn][Could you put a slider for the user to change their distance to the camera at the start of the game, like some games do with gamma?] -[1:20:43][We're about done] +[1:20:43][We're about done][:speech] [/video] diff --git a/cmuratori/hero/code/code111.hmml b/cmuratori/hero/code/code111.hmml index aba0f76..04cb197 100644 --- a/cmuratori/hero/code/code111.hmml +++ b/cmuratori/hero/code/code111.hmml @@ -24,7 +24,7 @@ [37:42][Look at that frame rate] [43:13][Only render ground layers that are close to the camera] [45:54][Consider optimising some of the renderer] -[49:20][Q&A] +[49:20][Q&A][:speech] [49:47][@stelar7][There are 15 mins left of the stream, since you went over in the prestream] [50:22][@d7samurai][No stream tomorrow, right?] [50:26][@grumpygiant256][How are you going to handle the ground chunks on the further layers which disappear while still on-screen? Will you need to expand the visibility range based on layer distance?] @@ -38,5 +38,5 @@ [1:01:04][@robrobby][hen all RAM (even on GPU) is used, when the game is put into background (switching a short time to another application) all the memory has to be swapped in and out, right, even to the GPU? Or what strategy is used to prevent swapping in and out of big memory chunks?] [1:02:25][@garlandobloom][Q: Are we rotating and scaling the splats on the ground chunks to get the maximum variability?] [1:03:09][@soysaucethekid][I noticed the hero's head would clip through the trees (i.e. trees on the top part of the room) on occasion and then it would fix itself. What's causing that?] -[1:03:55][Close this down] +[1:03:55][Close this down][:speech] [/video] diff --git a/cmuratori/hero/code/code112.hmml b/cmuratori/hero/code/code112.hmml index b5cde8f..af1c7c8 100644 --- a/cmuratori/hero/code/code112.hmml +++ b/cmuratori/hero/code/code112.hmml @@ -19,7 +19,7 @@ [52:42][Blackboard: Optimization, the platform] [55:07][Blackboard: So that is optimization][quote 83] [55:25][Blackboard: Efficiency] -[59:30][Q&A] +[59:30][Q&A][:speech] [1:00:13][@atomiclich][Would you be willing to make more blackboard episodes? This is very informative] [1:00:46][@grumpygiant256][Are you going to be using anything like VTune for measuring performance?] [1:01:26][@bakeheart][How are instructions written in cache memory?] @@ -35,5 +35,5 @@ [1:19:44][@zjadekkarenvae][What do you tell someone who doesn't like emacs?] [1:20:39][@bakeheart][Does hyperthreading reduce maximum bandwidth because it has to switch between states, or can both states operate at the same time?] [1:21:20][@quatzequatel][In your experience what drives the "good enough" optimization and how do the novice guys get a handle on that?] -[1:24:00][Wrap things up] +[1:24:00][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code113.hmml b/cmuratori/hero/code/code113.hmml index c088a7e..855b61a 100644 --- a/cmuratori/hero/code/code113.hmml +++ b/cmuratori/hero/code/code113.hmml @@ -27,7 +27,7 @@ [48:58][Understanding ballpark timings] [51:53][Make an estimate] [1:00:48][AVX-512 hype] -[1:01:15][Q&A] +[1:01:15][Q&A][:speech] [1:01:54][@grumpygiant256][Why no text labels on the counters?] [1:02:10][@childz][I'm sorry if this is something you've gone over before, but can you explain the difference between new and malloc() in C++ and when each is useful?] [1:03:04][@mrcowking][Is your handwriting as bad in real life as it is with a tablet?] @@ -36,5 +36,5 @@ [1:04:07][@braincruser][Is it possible to Quad-pump every operation?] [1:07:29][@braincruser][I meant, put it in wide instruction (SIMD)] [1:09:02][@garryjohanson][Would you talk Jeff into doing an optimization stream where you are the TA?] -[1:10:01][That is the end of the stream] +[1:10:01][That is the end of the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code114.hmml b/cmuratori/hero/code/code114.hmml index 5e32fb8..8585dbb 100644 --- a/cmuratori/hero/code/code114.hmml +++ b/cmuratori/hero/code/code114.hmml @@ -29,7 +29,7 @@ [48:43][Set the stage for SIMD] [50:45][Consider solidifying texture boundaries] [51:53][Leave it for today] -[53:09][Q&A] +[53:09][Q&A][:speech] [53:28][@braincruser][The way the code is written now you have a very long dependency chain (between instructions). Will you break down the code to remove it?] [56:42][@stelar7][Why did you write float instead of real32 this stream?] [57:14][@stelar7][Why use -O2 instead of -O3 or -Ofast (possibly with -fverbose-asm)?] @@ -59,5 +59,5 @@ url="https://software.intel.com/sites/landingpage/IntrinsicsGuide/"]] [1:16:51][@braincruser][FMA is fused multiply add] [1:18:48][@andsz_][Yeah, looks like different caps bits] -[1:19:23][Wrap things up] +[1:19:23][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code115.hmml b/cmuratori/hero/code/code115.hmml index 4de0ec4..7596429 100644 --- a/cmuratori/hero/code/code115.hmml +++ b/cmuratori/hero/code/code115.hmml @@ -27,7 +27,7 @@ [59:42][handmade_render_group.cpp: Walk through the routine] [1:01:53][Load in the Pixels from the right place] [1:02:33][Run, note that we're back to some semblance of good, and glimpse into the future] -[1:04:06][Q&A] +[1:04:06][Q&A][:speech] [1:04:30][@thesizik][Would it be faster to unpack pixels using a union of an int32 with a struct of 4 int8's, instead of doing 4 shifts and masks per pixel?] [1:05:15][@houb_][Why don't we go: Y<2 and X<2 and go through in blocks, instead of a line?] [1:07:44][@culver_fly][Is it better if we calculate if the pixel should be filled and queue it up and only do the calculations once we hit 4 of them?] @@ -60,5 +60,5 @@ url="http://llvm.org/docs/Vectorizers.html"]] [1:33:54][@rooctag][Do you have to take the instruction cache into account? Or is it large enough?] [1:34:39][@goodoldmalk][How does intrinsics and parallel processing work together? Does each CPU have registers to do intrinsics? If so, could we increase X-fold the number of pixel rendering in our code if we computed in parallel?] -[1:35:33][Wrap things up] +[1:35:33][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code116.hmml b/cmuratori/hero/code/code116.hmml index 940c2e8..873fbad 100644 --- a/cmuratori/hero/code/code116.hmml +++ b/cmuratori/hero/code/code116.hmml @@ -39,7 +39,7 @@ [1:02:54][handmade_render_group.cpp: Finish doing the SIMD here] [1:07:32][Run and note that we're creeping forwards \[121cy/h\]] [1:08:06][Recap and glimpse into the future of doing the Loads and Repack in SIMD] -[1:11:08][Q&A] +[1:11:08][Q&A][:speech] [1:11:32][@kknewkles][How do you cover multiple CPU technologies intrinsic-wise? Preprocessor switches on dedicated intrinsics for each? Also, whom to read on ASM? I'm thinking Mike Abrash?] [1:13:09][@houb_][We have come from 385 cycles to ~123. Does something like the 80%-20% rule apply? Do you think we will get down to 50 cycles?] [1:15:22][@maexono][The way we use mmSquare, does it calculate the argument twice?] @@ -63,6 +63,6 @@ [1:42:52][@theitchyninja][How long have you been working on this and when do you think you will finish?] [1:43:29][@gasto5][re you going to optimize gameplay code as well?] [1:43:45][@houb_][Have you heard of the JayStation2 Project from Jaymin Kessler, working with the Raspberry Pi 2 B+?] -[1:44:03][Close things down with a recap of the week's optimisation work] -[1:48:03][Shout out to the mods] +[1:44:03][Close things down with a recap of the week's optimisation work][:speech] +[1:48:03][Shout out to the mods][:speech] [/video] diff --git a/cmuratori/hero/code/code117.hmml b/cmuratori/hero/code/code117.hmml index 9bfd430..81afa86 100644 --- a/cmuratori/hero/code/code117.hmml +++ b/cmuratori/hero/code/code117.hmml @@ -35,7 +35,7 @@ [1:04:22][Blackboard: Alignment] [1:05:54][handmade_render_group.cpp: Issue _mm_storeu_si128 to cause the compiler to use the (unaligned) mov instruction] [1:07:23][Recap and glimpse into the future] -[1:08:30][Q&A] +[1:08:30][Q&A][:speech] [1:09:59][@braincruser][Will the operations be reordered to reduce the number of ops and load / stores?] [1:12:01][@mmozeiko][You are calculating Out like or(or(or(r, g), b), a). Would it be better to do it like this: or(or(r, g), or(b, a)), so first two or's are not dependent on each other?] [1:14:57][handmade_render_group.cpp: Write it the way mmozeiko suggests] @@ -52,5 +52,5 @@ [1:28:01][@gasto5][I don't understand how one optimizes by using the intrinsic or function] [1:28:51][@mmozeiko][_mm_cvttps_epi32 always truncates. Would that be better than messing with rounding mode?] [1:30:45][handmade_render_group.cpp: Switch to _mm_cvttps_epi32] -[1:32:50][Wrap up] +[1:32:50][Wrap up][:speech] [/video] diff --git a/cmuratori/hero/code/code118.hmml b/cmuratori/hero/code/code118.hmml index dd1f04d..3aa91e5 100644 --- a/cmuratori/hero/code/code118.hmml +++ b/cmuratori/hero/code/code118.hmml @@ -45,7 +45,7 @@ [0:56:50][Doing the Texels the same way as Dest] [0:58:05][Working texel read, and...almost 50cy/pixel] [0:59:25][What if there's nothing in the mask?] -[1:01:19][Q&A] +[1:01:19][Q&A][:speech] [1:02:03][@grumpygiant256][Could you not just align the X coord to a 4-pixel boundary up front, and thereby use aligned loads and stores?] [1:03:03][@garlandobloom][Are you pulling this code over into ground splats soon?] [1:05:15][@ostrovskivlad][Is it me or after this whole SIMD conversion the cycles per pixel are much more consistent?] @@ -61,5 +61,5 @@ [1:25:45][@hellotanjent][Is the SSE code doing any cache prefetch or hinting stuff yet?] [1:27:12][@allaizn][Couldn't we use a half-float instead of floats as we don't need that much precision with only 255 discrete values?] [1:28:50][@ttbjm][Is the normal map code going to be converted to SIMD?] -[1:29:27][End of the stream] +[1:29:27][End of the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code119.hmml b/cmuratori/hero/code/code119.hmml index a173875..c8e6c27 100644 --- a/cmuratori/hero/code/code119.hmml +++ b/cmuratori/hero/code/code119.hmml @@ -40,7 +40,7 @@ [1:00:28][gamma is costing only ~6 cycles] [1:01:05][This is a reasonably optimized pixel loop] [1:01:32][Agenda for next session: Optimize outside/around the pixel loop.] -[1:01:56][Q&A] +[1:01:56][Q&A][:speech] [1:02:09][@stelar7][Is this what you were looking for?] [1:03:16][Nehalem diagram: Only one FPU?] [1:05:52][@grumpygiant256][Worth timing the load/stores with no ALU ops to see how much we're memory bound?] diff --git a/cmuratori/hero/code/code120.hmml b/cmuratori/hero/code/code120.hmml index d578861..1120a87 100644 --- a/cmuratori/hero/code/code120.hmml +++ b/cmuratori/hero/code/code120.hmml @@ -48,7 +48,7 @@ [1:13:44][Throughput bottleneck: Inter-iteration? Good question for Fabian] [1:13:59][Total number of micro-ops have gotten smaller - 350 vs 306 vs. 283 but throughput is worse] [1:15:56][Could use the same technique when loading the destination, but probably not a good idea] -[1:17:01][Q&A] +[1:17:01][Q&A][:speech] [1:17:30][@cubercaleb][CP stands for Critical path] [1:18:13][@flaturated][IACA was showing Port 1 as the bottleneck, so reducing multplies won't help] [1:19:05][@stelar7][Inter-iteration means that run x of the loop depends on the prior run] diff --git a/cmuratori/hero/code/code121.hmml b/cmuratori/hero/code/code121.hmml index 0d85b2c..14e92bc 100644 --- a/cmuratori/hero/code/code121.hmml +++ b/cmuratori/hero/code/code121.hmml @@ -60,7 +60,7 @@ [3:49:20][Break the screen up into pieces and render them separately] [3:54:34][Stretch your legs, Casey] [3:56:28][We can finally end the stream] -[3:57:07][Q&A] +[3:57:07][Q&A][:speech] [3:57:12][@rygorous][a) your top and right clip is off-by-1!] [3:59:54][@mmozeiko][_mm_mullo_epi32 is SSE4 intrinsic] [4:04:57][@mmozeiko][Will you revert yesterday changes where you changed bilinear pixel unpacking code from float mul to int mul? It was faster with float mul.] diff --git a/cmuratori/hero/code/code122.hmml b/cmuratori/hero/code/code122.hmml index 175f2fb..0a7feba 100644 --- a/cmuratori/hero/code/code122.hmml +++ b/cmuratori/hero/code/code122.hmml @@ -39,7 +39,7 @@ url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658]] [57:27][Hype up building without CRT] [58:36][The compiler doesn't know about threading] -[1:00:03][Q&A] +[1:00:03][Q&A][:speech] [1:00:27][@knozza][What does closing the handle of a thread do for you when you release the handle to the OS? Does it open up resources and increase performance?] [1:01:32][@woodkami][Doesn't increasing the number of threads to match the hyperthreads count increase cross-core/cross-context switches, thus making it less efficient for small operations?] [1:03:21][@microhive][Is there any advantage to creating a separate process to render the graphics in the context of game development?] diff --git a/cmuratori/hero/code/code123.hmml b/cmuratori/hero/code/code123.hmml index d04a55d..cf3f387 100644 --- a/cmuratori/hero/code/code123.hmml +++ b/cmuratori/hero/code/code123.hmml @@ -24,7 +24,7 @@ [52:32][Explain what's happening] [54:50][The writes to EntryCount are not in order] [57:04][The reads are not in order] -[58:14][Q&A] +[58:14][Q&A][:speech] [58:40][@tenbroya][Is your use of "for (;;)" instead of "while(1)" a stylistic choice or is there a benefit / drawback I'm missing?] [1:00:17][@gasto5][What's the problem with not being interlocked and seeing the same value, as your "TODO" suggests?] [1:02:39][Blackboard: Why two threads did the same work] @@ -41,6 +41,6 @@ [1:19:16][@cubercaleb][Later in the development cycle, will you go over threading for other operating systems like Mac and Linux?] [1:19:45][@rc1290][What are the advantages of having a queue of jobs, instead of creating a thread every time you add a job?] [1:20:04][Blackboard: Overlap vs Performance] -[1:24:50][Recap and glimpse into the future] -[1:28:08][Close things down] +[1:24:50][Recap and glimpse into the future][:speech] +[1:28:08][Close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code124.hmml b/cmuratori/hero/code/code124.hmml index 17ad5e3..b004b62 100644 --- a/cmuratori/hero/code/code124.hmml +++ b/cmuratori/hero/code/code124.hmml @@ -25,7 +25,7 @@ [0:53:27][How we'll use the semaphore] [0:54:26][Testing the semaphore] [0:56:50][Work for tomorrow] -[0:57:13][Q&A] +[0:57:13][Q&A][:speech] [0:58:24][@d7samurai][In the visual studio output window you can right click and deselect some of the stuff] [0:58:56][@cubercaleb][Why does this have to be so complicated??] [0:59:37][@rc1290][Why did you put the memory barrier in a macro when it's platform-specific code?] @@ -41,5 +41,5 @@ [1:15:05][Blackboard: Transactional Memory] [1:18:58][@abnercoimbre][Transactional memory is often advocated as an easier-to-use replacement for locks that avoids any possibility of a deadlock, so I wanted your thoughts.] [1:21:04][@plainflavored][Why are we building a generic work distribution when the tiled renderer is designed to cleanly split up the work anyway?] -[1:22:45][Wrapping things up] +[1:22:45][Wrapping things up][:speech] [/video] diff --git a/cmuratori/hero/code/code125.hmml b/cmuratori/hero/code/code125.hmml index d326e96..3463ca3 100644 --- a/cmuratori/hero/code/code125.hmml +++ b/cmuratori/hero/code/code125.hmml @@ -31,7 +31,7 @@ [54:58][Compile and run and crash][quote 101] [55:22][Moment of realisation: Gotta increment by the correct value] [55:32][Recap and glimpse into the multithreaded future] -[56:09][Q&A] +[56:09][Q&A][:speech] [57:35][@BrainCruser][Will you start new threads for every queue that you make?] [59:29][@niegrfiegr0][Still don't understand the use of volatile and memory barrier] [59:53][Blackboard: Memory and Code Fences] @@ -54,5 +54,5 @@ [1:19:26][@zuurr_][(Not an expert at all, which was part of why I asked the question) False sharing causes the processor to skip the cache when different threads access stuff on the same cache line] [1:21:41][@Pseudonym73][Actually, I can think of one use case for a compiler fence without a memory fence: writing to CPU special registers like control registers or MSRs] [1:22:34][@kemosabe76][Getting back into C/C++ coding after many years. Don't know why you are mixing C-style structs and C++ structs?] -[1:22:52][Close things down] +[1:22:52][Close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code126.hmml b/cmuratori/hero/code/code126.hmml index 28a0d05..1952cb6 100644 --- a/cmuratori/hero/code/code126.hmml +++ b/cmuratori/hero/code/code126.hmml @@ -22,7 +22,7 @@ [0:51:06][Debugging the FIFO wrapping] [0:55:50][Fixing the completion goal code] [0:59:00][Working multithreaded rendering!] -[1:02:23][Q&A] +[1:02:23][Q&A][:speech] [1:02:58][@andsz_][Since the workloads don't complete in order what if one workload takes very long while the other threads wrap around in the queue such that a new workload overwrites the slot with the one that is still running?] [1:04:26][@miblo][Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?][quote 109] [1:08:27][@powerc9k][Can we tell how much faster it is now that it's multithreaded?] @@ -44,5 +44,5 @@ [1:27:15][@powerc9k][Is the archive going to save this correctly?] [1:27:41][@robotchocolatedino][Would it be easier to implement the queue as a linked list so it has no maximum size? Since we never need to traverse the list it should still be fast.] [1:28:56][@robrobby][In the rolling buffer you check each entry to be filled before writing a new one in and otherwise skip to the next slot?] -[1:29:39][Done for the day.] +[1:29:39][Done for the day.][:speech] [/video] diff --git a/cmuratori/hero/code/code127.hmml b/cmuratori/hero/code/code127.hmml index b75a3cb..c045a08 100644 --- a/cmuratori/hero/code/code127.hmml +++ b/cmuratori/hero/code/code127.hmml @@ -30,7 +30,7 @@ [54:10][handmade_platform.h: Introduce Align16] [55:13][Everything looks fine at 1920x1080] [56:13][handmade.cpp: Setup the PlatformAddEntry and PlatformCompleteAllWork at the beginning] -[58:00][Q&A] +[58:00][Q&A][:speech] [58:43][@robotchocolatedino][The bitmap memory size calculation squares BytesPerPixel which allocates more memory than necessary] [58:50][win32_handmade.cpp: Remove the multiplication by BytesPerPixel] [59:19][@ttbjm][Can you test if weird resolutions actually are working?] @@ -43,5 +43,5 @@ [1:11:50][@pragmascrypt][Will you keep the rendering of the two lines on separate hyperthreads?] [1:13:33][@terrorscout][So this game is going to be a 4K Zelda 1-style game?] [1:14:43][Assess our progress and glimpse into the future of tightening up the renderer] -[1:16:38][Shut things down here] +[1:16:38][Shut things down here][:speech] [/video] diff --git a/cmuratori/hero/code/code128.hmml b/cmuratori/hero/code/code128.hmml index abdaafd..0f09af1 100644 --- a/cmuratori/hero/code/code128.hmml +++ b/cmuratori/hero/code/code128.hmml @@ -14,7 +14,7 @@ [0:53:45][Testing the changes] [0:54:47][Making render transforms work in debug] [0:56:25][Musings on the engine so far] -[0:57:51][Q&A] +[0:57:51][Q&A][:speech] [0:59:05][@vellyx][Everything works the first time because you think out loud.] [0:59:51][@gasto5][Does the yellow part represent the loaded bitmaps?] [1:02:20][@mojobojo][What does it mean to invalidate cache?] @@ -30,5 +30,5 @@ [1:21:14][@robrobby][What do you expect will be the boost using OpenGL/D3D for blitting?] [1:21:51][@rasoilo][Is there a concept of local space / model space / camera space / clip space in the renderer that is analgous to the kinds of translations in OpenGL/D3D that you would want?] [1:23:15][@vaporpowaaa][Unrelated to the stream, I found a video where you explain quaternion double cover, but there is no explanation of quaternions. Would you consider doing on in the near future?] -[1:24:20][Finishing it up] +[1:24:20][Finishing it up][:speech] [/video] diff --git a/cmuratori/hero/code/code129.hmml b/cmuratori/hero/code/code129.hmml index 9d4ce8e..018cc8d 100644 --- a/cmuratori/hero/code/code129.hmml +++ b/cmuratori/hero/code/code129.hmml @@ -36,7 +36,7 @@ [52:50][Create a checkerboard pattern to accentuate the seams] [54:47][See the seams] [55:45][build.bat: Switch to -O2 and run around the world] -[56:24][Q&A] +[56:24][Q&A][:speech] [57:18][@dmitsuki][When do we make everything hardware accelerated to get the amazing powers of ROTATION?] [57:56][handmade_render_group.cpp: Demo rotation] [1:00:47][@robrobby][Will we see how to find "expensive" functions that are called between frames? So far we SIMD only the pixel renderer right now, because we know] @@ -61,5 +61,5 @@ [1:17:58][@noxy_key][Do you plan on commenting the code before releasing the engine?] [1:19:24][@robrobby][It's just insane that we can have so many laggy games today when CPUs / GPUs are that fast... Thank you for bringing some light into the reasons for that (bad programming and/or languages)] [1:22:59][@kededro][Is unsafe memory key for high-performance optimizations needed for modern-day games? I've heard this is the key reason memory-safe languages like Rust and Haskell won't be able to take over for extremely low-latency applications or drivers, but I don't know enough about the domain] -[1:25:41][Shut things down] +[1:25:41][Shut things down][:speech] [/video] diff --git a/cmuratori/hero/code/code130.hmml b/cmuratori/hero/code/code130.hmml index 371c52e..715a0cf 100644 --- a/cmuratori/hero/code/code130.hmml +++ b/cmuratori/hero/code/code130.hmml @@ -20,7 +20,7 @@ [0:54:05][Adding the ground chunk work to the queue] [0:56:45][Abort mission, not enough time] [0:57:24][Crash due to alignment problems] -[1:00:00][Q&A] +[1:00:00][Q&A][:speech] [1:00:50][@garlandobloom][Good stream today. Sometimes it goes really great] [1:01:21][@quikligames][The Ground Chunks render differently every time you go upstairs and come back down. Are you planning on fixing that before Z-sorting?] [1:02:08][@abnercoimbre][Can you address the recurring question: "This stream isn't about making games?" I'm tired of trying to explain what this stream is about] @@ -33,5 +33,5 @@ [1:09:23][@sssmcgrath][You say "3 work weeks" but do you feel like you could maintain this pace 8 hours a day?] [1:10:51][@ttbjm][It seems like the ground chunks are only getting generated when they would actually be visible, not before. When you get the ground chunk into the low priority queue, will empty ground be visible for 1 or 2 frames while they are being generated?] [1:11:37][@btngames][Do you think at the end / near end, someone like Jon Blow would be interested in making a game with the Handmade Hero engine in a similar format to see how the game design phase evolves the engine? I know at Pixar they get new and interesting results with unplanned collaboration between artist and engineer] -[1:12:22][Wrap things up] +[1:12:22][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code131.hmml b/cmuratori/hero/code/code131.hmml index bf9ea41..a5920fa 100644 --- a/cmuratori/hero/code/code131.hmml +++ b/cmuratori/hero/code/code131.hmml @@ -47,7 +47,7 @@ [1:08:38][handmade.cpp: Set Task->BeingUsed = true in BeginTaskWithMemory] [1:08:52][Run the game successfully] [1:09:32][handmade_render_group.cpp: Reenable the debug camera] -[1:11:13][Q&A] +[1:11:13][Q&A][:speech] [1:12:02][@nicstop][If one of the task_with_memory, which has several task_with_memory in front of it, calls EndTaskWithMemory first, will the stuff in front of it be screwed up? Or is this case not possible? Because I have a feeling that I don't understand something] [1:12:28][Blackboard: What goes in the arenas and how they work] [1:14:49][@poohshoes][We already had memory reserved for the GroundBuffers. Why couldn't we just use that memory for the threaded stuff?] @@ -56,5 +56,5 @@ [1:19:29][@noxy_key][So you've basically constructed a task pool for ground chunks to run on another thread. Can you use this mechanism for other types of tasks as well?] [1:19:49][@poohshoes][Why not put the stuff at the top of the transient arena (i.e. ground chunk bitmaps) into the permanent storage?] [1:20:09][@ankut][Why does it flash magenta once in a while? Is it because we're drawing without the work being finished?] -[1:20:40][Wrap things up] +[1:20:40][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code132.hmml b/cmuratori/hero/code/code132.hmml index 9a10bfd..34c9c4e 100644 --- a/cmuratori/hero/code/code132.hmml +++ b/cmuratori/hero/code/code132.hmml @@ -18,7 +18,7 @@ [54:22][Anticipate mr4thdimention's editor 4coder] [58:31][Cleaning up] [1:00:14][We background-load now][quote 113] -[1:01:01][Q&A] +[1:01:01][Q&A][:speech] [1:01:20][@robrobby][Is it useful when assets can be modified from outside (file on disk overwrite, maybe even in memory) and still work in-game? Is it now supported after an asset is loaded, as I could not see any callback to check if a file is modified, as your glazing speed refactoring was way too fast for me?] [1:02:50][@robotchocolatedino][In load_asset_work, where is the memory for the filenames stored?] [1:04:30][@robrobby][What are the trade-offs to give him more power forcing render pushes out of the rendering queue order?] @@ -34,5 +34,5 @@ [1:17:37][@coolsebz][What would be a good way to expand asset streaming to support increasing level of details? (What I'm thinking of is loading a smaller version of the asset first and then the bigger size resources)] [1:19:24][@dontrunaway2][I recently started from the beginning of the series (on 13 atm). Do you suggest watching all of the Q&As or just going episode -> episode?] [1:20:38][@emeseles][How infuriating is it to deal with massive asset pipelines dealing with dozens of pieces of software on a large AAA project?] -[1:22:48][Call it a day] +[1:22:48][Call it a day][:speech] [/video] diff --git a/cmuratori/hero/code/code133.hmml b/cmuratori/hero/code/code133.hmml index b25a9bd..a2ad374 100644 --- a/cmuratori/hero/code/code133.hmml +++ b/cmuratori/hero/code/code133.hmml @@ -33,7 +33,7 @@ [53:39][Explain how PickBest could work] [55:50][handmade.h: Introduce asset_group] [56:50][Get it compiling and leave it for now] -[57:20][Q&A] +[57:20][Q&A][:speech] [57:38][@robotchocolatedino][In PickBest, would you want other types of falloffs when computing the difference?] [57:57][@xyane][When compiling for 64bit, shouldn't you be using _InterlockedCompareExchange64?] [58:29][@quikligames][In your example of having 32 GB of assets uncompressed and 2 GB of space for them, are there techniques you can use to tell whether you will need more than 2 GB at one time?] @@ -59,5 +59,5 @@ [1:20:23][Song: 'Q's & A's' by Casey Muratori] [1:20:39][@mrstone56][Does porting the rendering to be done on the GPU mean you have to write a renderer completely separate to the CPU one, or is most of the groundwork done by having the CPU renderer done?] [1:22:24][@cubercaleb][I thought you hated both DRM and cloud-based stuff (based off of Jeff and Casey Show)] -[1:24:00][Go get some ramen][quote 115] +[1:24:00][Go get some ramen][:speech][quote 115] [/video] diff --git a/cmuratori/hero/code/code134.hmml b/cmuratori/hero/code/code134.hmml index ecdc4df..111998f 100644 --- a/cmuratori/hero/code/code134.hmml +++ b/cmuratori/hero/code/code134.hmml @@ -16,7 +16,7 @@ [46:02][Loading bitmaps using type info] [54:20][Debugging missing trees][quote 116] [55:05][There's a Count and a range][quote 117] -[1:00:11][Q&A] +[1:00:11][Q&A][:speech] [1:00:46][@abnercoimbre][You won't be using any formal database for the game, correct? Why?] [1:04:29][@vagrantaisystem][Is there any way I can download these episodes to watch on the go?] [1:05:48][@kruzaa][Why code is C as opposed to Java?] @@ -29,5 +29,5 @@ [1:13:23][@ttbjm][Can you run cloc.exe again?] [1:14:19][@kruzaa][Have you ever used Unity3D? If so, would you recommend it?] [1:14:24][@captainkraft][What advice do you have for relatively new programmers who are trying to ditch the OOP mindset and move onto things like Data Oriented Design and Compression Oriented Design?] -[1:22:36][Wrap things up] +[1:22:36][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code135.hmml b/cmuratori/hero/code/code135.hmml index 6921a8c..51b82f1 100644 --- a/cmuratori/hero/code/code135.hmml +++ b/cmuratori/hero/code/code135.hmml @@ -40,7 +40,7 @@ [55:24][Debugger: Look through FillGroundChunk] [56:11][handmade.cpp: Setup RenderGroup, Buffer and Task near the top of FillGroundChunk] [56:56][Run the game and recap today's progress] -[58:05][Q&A] +[58:05][Q&A][:speech] [58:42][@noxy_key][What do you mean when you say to write "usage code first"? Also, is there any special handling of Asset 0? I am unclear on this] [1:00:45][@garlandobloom][You used some uint32_t in t here instead of uint32] [1:01:41][@miblo][Are you expecting a new batch of art from Yangtian?] @@ -63,5 +63,5 @@ [1:27:45][@ciastek3214][Seems to me nobody at Microsoft has any idea about why Windows is still even working properly] [1:32:23][@gasto5][Isn't the huge amount of the dependencies an inevitability of complex software like a modern full OS for productivity desktop?] [1:35:33][@sssmcgrath][Do you know that your channel runs ads for an eSports gambling site?] -[1:36:29][Wrap it up] +[1:36:29][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code136.hmml b/cmuratori/hero/code/code136.hmml index f9689c0..5841cda 100644 --- a/cmuratori/hero/code/code136.hmml +++ b/cmuratori/hero/code/code136.hmml @@ -15,7 +15,7 @@ [45:00][Debugging broken directions] [49:58][Temporary fix: Shift the domain] [51:15][Tomorrow's task: Correct periodic handling] -[51:57][Q&A] +[51:57][Q&A][:speech] [52:16][@abnercoimbre][It's a bit delayed, so bear with us] [52:54][@robotchocolatedino][Could all tag matching be periodic and then we just make the period really large when we don't want it to wrap?] [54:02][@abnercoimbre][The hero has separate bitmaps for his sprite. Will this be a recurring thing for other kinds of sprites in the game?] @@ -29,5 +29,5 @@ [1:05:04][@robotchocolatedino][Will you implement asset loading priority? For example, the player should probably load first so that you're not invisible in the beginning] [1:05:31][@coolsebz][Would it be a good idea to switch to using Matrices for Rotation (so further down the line it's easier to implement scale and transform)?] [1:06:40][@cubercaleb][Maybe this is something I missed, but are you using cmath's atan2?] -[1:07:30][Call it] +[1:07:30][Call it][:speech] [/video] diff --git a/cmuratori/hero/code/code137.hmml b/cmuratori/hero/code/code137.hmml index a65abac..9a5ce9d 100644 --- a/cmuratori/hero/code/code137.hmml +++ b/cmuratori/hero/code/code137.hmml @@ -30,7 +30,7 @@ [53:03][#define RIFF_CODE] [55:12][Parse the WAVE_header for its IDs] [56:34][Leave it there and glimpse into the future] -[57:58][Q&A] +[57:58][Q&A][:speech] [58:30][@cubercaleb][For getting the character sprite couldn't you just do the following? int sprite_to_load = (angle + (180 / sprites)) / (360 / sprites) % sprites] [59:59][@kelimion][ChronalDragon and I had a combined question about the audio asset struct. Will it need a SoundLoopable, or LoopStart / LoopEnd (with LoopEnd == -1 meaning a one-shot sound)] [1:00:40][@soysaucethekid][Plans for implementing other audio formats like MP3?] @@ -38,5 +38,5 @@ [1:04:48][@cubercaleb][Yeah, but why would people patent a file extension?] [1:05:32][@stelar7][FLAC is 50% the size of WAV, so it's useful for lossless compression] [1:08:36][@cubercaleb][So is that why RAD doesn't patent any of their stuff?] -[1:08:56][Wind things down] +[1:08:56][Wind things down][:speech] [/video] diff --git a/cmuratori/hero/code/code138.hmml b/cmuratori/hero/code/code138.hmml index 465df3d..79c536b 100644 --- a/cmuratori/hero/code/code138.hmml +++ b/cmuratori/hero/code/code138.hmml @@ -50,7 +50,7 @@ [1:03:09][win32_handmade.cpp: Set GameUpdateHz to MonitorRefreshHz / 2.0f] [1:03:21][Run the game and hear it all playing correctly] [1:03:59][handmade.cpp: Play music_test.wav] -[1:04:16][Q&A] +[1:04:16][Q&A][:speech] [1:04:45][@robotchocolatedino][You could try uninterleaving the channels in place like this: http://imgur.com/ZcDu4Tb] [1:05:50][@pseudonym73][Probably the second-easiest way to deinterleave is multi-pass. Swap R0/L1, R2/L3, L4/L5 etc. Then do the same with two-sample blocks, four-sample blocks, etc. Easiest way is to deinterleave directly into mix/output buffer.] [1:06:18][@desuused][Why do you need to un-interleave sound? When you play it, you still have to read both left and right values] @@ -60,5 +60,5 @@ [1:15:18][@marumoto][If you think of your interleaved data as an Nx2 matrix, then transposition can be viewed as interleaving. Here is an in-place way to do it: https://goo.gl/fgPmrg] [1:16:08][@rpg_ignis][Thank you] [1:18:05][@pragmascrypt][Why do you want to change the PCM data in place instead of compacting it to just the information you need and allocating extra space?] -[1:19:09][Wrap it up] +[1:19:09][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code139.hmml b/cmuratori/hero/code/code139.hmml index ffc5143..20a4a35 100644 --- a/cmuratori/hero/code/code139.hmml +++ b/cmuratori/hero/code/code139.hmml @@ -12,7 +12,7 @@ [43:42][Blackboard: Modulation and Interpolation] [50:14][Blackboard: Pitch] [56:17][Blackboard: Set the stage for tomorrow] -[57:58][Q&A] +[57:58][Q&A][:speech] [58:22][@insofaras][You said panning is just a function of volume, but could it also mix a portion of one source channel into the other output channel (for stereo)?] [1:03:08][@cubercaleb][Earlier in the stream you were describing audio in relation to light and you mentioned how sound is volumetric. But isn't light also volumetric?] [1:12:08][@SoysauceTheKid][No special sound effects such as reverb?] @@ -21,5 +21,5 @@ [1:14:54][@Miblo][Won't we also want at least a low-pass filter for audio coming from, for example, the other side of a wall?] [1:15:50][@ttbjm][Some older sound cards could do cross-talk cancellation to try to do 3d sound with 2 or 4 speakers instead of with headphones, do you have any experience with this?] [1:16:07][@hyco24][What is a good way to get sound to bounce off objects more realistically? (i.e., walls, cars, etc.)] -[1:17:22][Call it a day] +[1:17:22][Call it a day][:speech] [/video] diff --git a/cmuratori/hero/code/code140.hmml b/cmuratori/hero/code/code140.hmml index 1a5ad4e..8b68d7c 100644 --- a/cmuratori/hero/code/code140.hmml +++ b/cmuratori/hero/code/code140.hmml @@ -34,7 +34,7 @@ [1:01:28][Debugger: Step through the playing_sound linked list] [1:04:44][handmade.cpp: Reset SamplesPlayed to 0 in PlaySound] [1:05:33][Run the game and hear our sound] -[1:06:20][Q&A] +[1:06:20][Q&A][:speech] [1:07:33][@robrobby][s the sound buffer logarithmic or linear (decibel or linear values) and do we (have to) account for that in building the sums for the buffer?] [1:08:04][@allgamesnetworkvideo][Do you already have someone composing the soundtrack?] [1:09:52][@tfnw][A reminder about the parameter order in InterlockedIncrement and the bug it covers up] @@ -51,5 +51,5 @@ [1:22:54][Blackboard: Separating asset data from instance data] [1:24:35][@cubercaleb][Why use a linked list as opposed to another data structure like a vector?] [1:25:52][@waterlimon][But can you take the output of the sound summer mechanism and play that?] -[1:26:08][Go ahead and call it] +[1:26:08][Go ahead and call it][:speech] [/video] diff --git a/cmuratori/hero/code/code142.hmml b/cmuratori/hero/code/code142.hmml index 2421403..a0f6fe1 100644 --- a/cmuratori/hero/code/code142.hmml +++ b/cmuratori/hero/code/code142.hmml @@ -13,7 +13,7 @@ [00:45:25][Alternative approach: linear interpolation between beginning and end volumes] [00:46:42][Alternative approach: backsolving to hit the target volume at the end of the loop] [00:48:11][Testing ChangeVolume interactively] -[00:53:08][Q&A] +[00:53:08][Q&A][:speech] [00:53:49][@constantinopol][Can you show again how you skipped a failed assertion, by going to disassembly?] [01:00:10][@swampy_butt][Would there be any case where you would like to increase volume non-linearly?] [01:02:01][@flyingsand][So far you can just change the volume of individual sounds. Should we be able to change the volume of the master output as well?] diff --git a/cmuratori/hero/code/code143.hmml b/cmuratori/hero/code/code143.hmml index 17c7e8f..5dc2a02 100644 --- a/cmuratori/hero/code/code143.hmml +++ b/cmuratori/hero/code/code143.hmml @@ -16,7 +16,7 @@ [00:44:55][Flushing queues before reloading game code] [00:46:47][Copying strings out of the game code block to avoid crashing after hot code reloading] [00:48:37][Implementing PushString] -[00:54:43][Q&A] +[00:54:43][Q&A][:speech] [00:55:28][@djonahstag][How would you pan a sample slightly left or right in volume?] [01:03:07][@kelimion][Would this pitch shift be animated as well, like you enter a time-dilated area and pitch-shifts in a second or two as you cross a barrier] [01:04:02][@cubercaleb][If you wanted to pitch-shift the music without changing the speed couldn't you just do a quick and dirty linear interpolation between the current sample and the next sample?] diff --git a/cmuratori/hero/code/code144.hmml b/cmuratori/hero/code/code144.hmml index 6a33b0c..f85665f 100644 --- a/cmuratori/hero/code/code144.hmml +++ b/cmuratori/hero/code/code144.hmml @@ -19,7 +19,7 @@ [00:55:45][Using aligned loads and stores] [00:57:24][Plan for next episode] [01:01:30][More 2s complement. Full example] -[01:11:30][Q&A] +[01:11:30][Q&A][:speech] [01:11:37][@cubercaleb][Why isn't 2's complement used for floating-point numbers if it makes signed arithmetic easy?] [01:16:35][@poohshoes][Are you not going to profile it too see how much faster it gets?] [01:16:55][@dr_s80][When you implemented streaming in chunks of audio; I believe the code actually loads the entire file (with a platform layer VirtualAlloc) for each chunk. Is this just an artifact of the debug nature of that code?] diff --git a/cmuratori/hero/code/code145.hmml b/cmuratori/hero/code/code145.hmml index 039d5fc..77985f7 100644 --- a/cmuratori/hero/code/code145.hmml +++ b/cmuratori/hero/code/code145.hmml @@ -12,7 +12,7 @@ [00:52:52][Trouble SIMDizing the loads of the bilinear case] [00:56:53][Loading samples one by one for the bilinear case, not by blocks of eight samples] [1:07:07][Take a listen in-game][quote 135] -[01:08:19][Q&A] +[01:08:19][Q&A][:speech] [01:10:19][@inquarry][What's in the 8 bits we've been working on? Is it frequency and volume?] [01:10:45][@gasto5][Why is there a command override Od with O2 in the build output?] [01:11:32][@h2_66o][Can you skip the 0.0f*dSample and only do 1.0f, 2.0f, 3.0f ?] diff --git a/cmuratori/hero/code/code147.hmml b/cmuratori/hero/code/code147.hmml index 8cb298f..f820a8b 100644 --- a/cmuratori/hero/code/code147.hmml +++ b/cmuratori/hero/code/code147.hmml @@ -12,7 +12,7 @@ [00:28:59][Making a program that writes a dummy asset file] [00:31:46][One example of when to use libraries] [00:48:28][Simplifying the asset structures by getting rid of SlotID] -[01:06:16][Q&A] +[01:06:16][Q&A][:speech] [01:06:39][@liqwidice][How many lines of code is the project so far?] [01:07:44][@constantinopol][You mention LZ compression of assets. Will we write the compression algorithm?] [01:08:21][@liqwidice][Are we using bitmaps for any other reason than how easily they can be processed?] diff --git a/cmuratori/hero/code/code148.hmml b/cmuratori/hero/code/code148.hmml index 06829db..edab687 100644 --- a/cmuratori/hero/code/code148.hmml +++ b/cmuratori/hero/code/code148.hmml @@ -17,7 +17,7 @@ [00:52:51][Writing out the arrays] [00:58:42][Stepping through the code] [01:06:05][Hex editing the resulting file] -[01:07:35][Q&A] +[01:07:35][Q&A][:speech] [01:08:02][@gasto5][Why is a position for a stream a bad idea?] [01:17:00][@insofaras][Are you concerned that "trusting" the file format could have security concerns, e.g. someone could say they've made some modded assets, and give out a specially crafted .hha file that runs arbitrary code?] [01:21:09][@snovind92][What is the main difference between using asserts in your code and writing separate test functions/programs that check your results, and when do you choose one over the other?] diff --git a/cmuratori/hero/code/code149.hmml b/cmuratori/hero/code/code149.hmml index 22c6878..443430a 100644 --- a/cmuratori/hero/code/code149.hmml +++ b/cmuratori/hero/code/code149.hmml @@ -21,7 +21,7 @@ [00:54:00][Referencing the asset file loaded into memory] [00:56:56][Straight casting of the header file as an hha header struct, and checking the magic value and version] [00:59:19][Stepping through the code] -[01:00:17][Q&A] +[01:00:17][Q&A][:speech] [01:00:56][@pra_nda][How long has this been going for?] [01:01:20][@gasto5][What does flat-loaded mean?] [01:03:49][@ciastek3214][What is the benefit of keeping all assets in one file as opposed to making different asset files dedicated to each type of asset?] diff --git a/cmuratori/hero/code/code150.hmml b/cmuratori/hero/code/code150.hmml index 44964bd..84c1bf9 100644 --- a/cmuratori/hero/code/code150.hmml +++ b/cmuratori/hero/code/code150.hmml @@ -21,7 +21,7 @@ [00:49:11][Organizing our assets by asset type by looping multiple times over all files] [00:49:51][Do this in a super janky way][quote 138] [00:55:30][Including a TagBase in the asset_file struct to rebase its tags] -[01:00:22][Q&A] +[01:00:22][Q&A][:speech] [01:01:31][@drumboy354][What's your general rule for making a variable a pointer versus not?] [01:11:24][@sssmcgrath][I don't completely understand your aversion to using the C standard library... is this just a hmh thing for teaching? Or do you just never use the standard library?] [01:15:41][@insofaras][How and where will user save data be stored?] @@ -34,6 +34,6 @@ [01:18:11][@rosssylibus][How far do you think you are in terms of stream days from implementing game logic in terms of play vs platform?] [01:18:47][@bakunda][I just got two Rpi2s, what do you think about the Rpi2 in general?] [01:18:55][@meloaananas][What do you think about Intel INDE?] -[01:20:08][End of the off-topic Q&A] -[01:20:35][On the joy of building your engine from the ground up] +[01:20:08][End of the off-topic Q&A][:speech] +[01:20:35][On the joy of building your engine from the ground up][:speech] [/video] diff --git a/cmuratori/hero/code/code151.hmml b/cmuratori/hero/code/code151.hmml index 2c355db..7d326fa 100644 --- a/cmuratori/hero/code/code151.hmml +++ b/cmuratori/hero/code/code151.hmml @@ -19,11 +19,11 @@ [00:51:45][Reserving space for bitmaps] [00:52:58][Filling out the work order struct] [01:00:12][The win32 file routines are still not finished but our time is up, so let's leave the code in a running state] -[01:01:35][Q&A] +[01:01:35][Q&A][:speech] [01:01:52][@insofaras][With this system, is it possible to add an updated version of an asset in a new .hha file without modifying the original? How would the IDs work in this case?] [01:06:52][@tobeypeters][What will get rid of the initial flicker of the character at startup?] [01:08:05][@rosssylibus][As a programmer implementing a game with fairly simple graphics, any suggestions on finding somebody to commission art assets from or similar if you don't happen to know a good digital artist?] -[01:08:52][End of Q&A] -[01:09:02][Review of tasks left to finish the asset system] -[01:11:23][Review of upcoming tasks] +[01:08:52][End of Q&A][:speech] +[01:09:02][Review of tasks left to finish the asset system][:speech] +[01:11:23][Review of upcoming tasks][:speech] [/video] diff --git a/cmuratori/hero/code/code152.hmml b/cmuratori/hero/code/code152.hmml index e8c387b..25e48f5 100644 --- a/cmuratori/hero/code/code152.hmml +++ b/cmuratori/hero/code/code152.hmml @@ -33,7 +33,7 @@ [01:02:14][Visual Studio fails to show size information on symbols outside the current running executable] [01:05:00][The null asset triggers an assertion. We ignore it for the moment] [01:05:46][It (mostly) works!] -[01:06:25][Q&A] +[01:06:25][Q&A][:speech] [01:07:25][@bigmonachus][What do you use when you need something more dynamic than arenas? Default to VirtualAlloc/malloc? Something completely different?] [01:09:33][@insofaras][How "handmade" are you going to go on the Linux version?] [01:10:50][@quatzequatel][Kind of off-topic do you usually have that much luck not getting bugs?] diff --git a/cmuratori/hero/code/code153.hmml b/cmuratori/hero/code/code153.hmml index 1f7010d..7c9ddd1 100644 --- a/cmuratori/hero/code/code153.hmml +++ b/cmuratori/hero/code/code153.hmml @@ -18,7 +18,7 @@ [00:34:32][Remapping the next id to play to take into account multiple asset files] [00:42:32][Deciding against remapping the next id to play in favor of explicit looping and chaining of sounds] [00:48:12][Implementing GetNextSoundInChain] -[00:51:50][Q&A] +[00:51:50][Q&A][:speech] [00:52:45][@duckbillphil][Can we do advanced and then looped sounds?] [00:54:54][@antirg][If you're doing the id.value += 1, won't you eventually loop off the last sound asset?] [00:56:15][@jvhn][Can I watch when you first started writing this game?] diff --git a/cmuratori/hero/code/code154.hmml b/cmuratori/hero/code/code154.hmml index 641b75e..769e3a7 100644 --- a/cmuratori/hero/code/code154.hmml +++ b/cmuratori/hero/code/code154.hmml @@ -23,7 +23,7 @@ [00:44:28][Parameterizing the file extension] [00:46:05][Write your own string system if you work with strings frequently] [00:48:37][Possible extensions to the file API] -[00:50:07][Q&A] +[00:50:07][Q&A][:speech] [00:51:15][@ttbjm][Does the save file need to use this system now?] [00:52:29][@kirroyale27][How do you feel now that you finished this?] [00:53:27][@d7samurai][Socapex insists that the STL *is* the language and that you therefore should use "strings" from it] diff --git a/cmuratori/hero/code/code155.hmml b/cmuratori/hero/code/code155.hmml index de88840..1a3805b 100644 --- a/cmuratori/hero/code/code155.hmml +++ b/cmuratori/hero/code/code155.hmml @@ -23,7 +23,7 @@ [00:49:23][Fun selecting different sprites] [00:50:12][Color randomization] [00:53:53][A more explicit way of ramping colors up and down] -[01:00:59][Q&A] +[01:00:59][Q&A][:speech] [01:01:34][@naysayer88][For a while I have felt that interpolating particles in RGB leads to results that are dull and muddy. I have been wanting to try YCrCb or maybe even LAB sometime. I guess you can compensate via splines through RGB but I think you'd be doing a lot of tweaky work all the time to get better results (even though YCrCb is just a linear transformation, I think there's a substantial amount of skew.)] [01:03:09][@rohit_n][Will particle pre-warming be supported?] [01:04:23][@effect0r][When you were messing with the z direction, it seems kind of like a puddle on the ground] diff --git a/cmuratori/hero/code/code156.hmml b/cmuratori/hero/code/code156.hmml index 08d363c..8320355 100644 --- a/cmuratori/hero/code/code156.hmml +++ b/cmuratori/hero/code/code156.hmml @@ -20,7 +20,7 @@ [01:03:25][Discussion of possible improvements to the simulation] [01:04:00][Taking advantage of the density gradient to achieve better results] [01:08:00][We still don't use the mean velocity of particles inside each cell] -[01:08:53][Q&A] +[01:08:53][Q&A][:speech] [01:09:18][@andsz_][I suppose adding some friction to dP.x might help] [01:10:41][@braincruser][Try reducing the size of the individual cells] [01:13:23][@quikligames][The back of the head would make a better particle than the side of the head] diff --git a/cmuratori/hero/code/code157.hmml b/cmuratori/hero/code/code157.hmml index d0b489c..fb35b35 100644 --- a/cmuratori/hero/code/code157.hmml +++ b/cmuratori/hero/code/code157.hmml @@ -17,7 +17,7 @@ [00:52:54][Determining ahead of time when we're going to hit our memory limit] [00:54:00][We can't free assets to make room for new ones from inside a call to LoadBitmap] [00:55:35][We can mark bitmaps as freed between frames. Two options: a) deferring LoadBitmap calls till the end of the frame and b) keeping some amount of free space to make loading always possible] -[00:57:44][Q&A] +[00:57:44][Q&A][:speech] [00:57:57][@pseudonym73][It's official: Assets are now handles] [00:58:37][@robotchocolatedino][Would there be a benefit to using a 2-level cache for storing compressed and uncompressed assets?] [00:59:35][@marumoto][Is there any performance reason to not use malloc and free?] diff --git a/cmuratori/hero/code/code158.hmml b/cmuratori/hero/code/code158.hmml index 03823fb..3558c42 100644 --- a/cmuratori/hero/code/code158.hmml +++ b/cmuratori/hero/code/code158.hmml @@ -24,7 +24,7 @@ [01:02:18][Initial sentinel setup] [01:04:33][We should avoid evicting locked assets] [01:07:32][Types of doubly linked lists and overview of their implementation] -[01:10:00][Q&A] +[01:10:00][Q&A][:speech] [01:10:05][@noxy_key][What function owns the pointer to the head of linked list?] [01:10:16][@zuurr_][Isn't a linked list what you're always told not to do if you're care about the cache at all?] [01:11:45][@insofaras][Could the platform_allocate_memory function allocate a few bytes more than requested and store the size there to avoid it having to be passed to the free function?] diff --git a/cmuratori/hero/code/code159.hmml b/cmuratori/hero/code/code159.hmml index 83e918c..9470d8a 100644 --- a/cmuratori/hero/code/code159.hmml +++ b/cmuratori/hero/code/code159.hmml @@ -19,7 +19,7 @@ [00:52:49][Storing the size of the loaded asset instead of its type] [00:54:01][Some debugging] [00:58:39][Removing GetSizeOfAsset] -[01:00:55][Q&A] +[01:00:55][Q&A][:speech] [01:01:43][@ttbjm][Your head was over the window when you were looking at the commit size] [01:02:59][@constantinopol][The linked-list way of computing least-used asset seems like a simple and neat trick. What are its drawbacks?] [01:05:58][@manicthenobody][Garlandobloom may be too drunk today] diff --git a/cmuratori/hero/code/code160.hmml b/cmuratori/hero/code/code160.hmml index 711ec8b..c1ad1ac 100644 --- a/cmuratori/hero/code/code160.hmml +++ b/cmuratori/hero/code/code160.hmml @@ -18,7 +18,7 @@ [00:50:12][FindBlockForSize] [00:52:26][Conditionally splitting the memory block used to store an asset as a function of its remaining capacity] [00:56:35][Recovering memory blocks inside ReleaseAssetMemory] -[00:58:15][Q&A] +[00:58:15][Q&A][:speech] [00:59:40][@jameswidman][Given that this is an optimization problem, it seems like we'll want to have a system for profiling asset use and eviction (and check its output periodically as the game and assets grow over the next year or so). Should this be on the agenda in the near term?] [01:01:13][@graeme7][I'm not clear on what happens in the else when we fail to find a block, could you go over it?] [01:03:43][@constantinopol][Why do we need to check the remaining size > threshold ? Why not just use the remaining size if it satisfies the request size?] diff --git a/cmuratori/hero/code/code161.hmml b/cmuratori/hero/code/code161.hmml index abffee9..df0d84a 100644 --- a/cmuratori/hero/code/code161.hmml +++ b/cmuratori/hero/code/code161.hmml @@ -13,7 +13,7 @@ [00:40:26][Making the code work properly with Unicode file names] [00:42:28][wchar_t] [00:47:41][Isolating the game code from the concept of file extensions] -[00:53:04][Q&A] +[00:53:04][Q&A][:speech] [00:53:26][@kknewkles][First rays of Moscow sun bid you Good Evening, Casey. I humbly request to be granted two off-topic questions (maybe near the end?)] [00:53:55][@blah238][I asked a similar question yesterday, but I guess it wasn't clear. Have you thought about how the asset system could work with 3rd party mods? Say someone wants to make a mod that adds new graphics, sounds and/or game logic. How hard would it be to implement a mod loader, Steam Workshop support, etc?] [00:55:23][@ttbjm][Should there be a way to say if one of the hero assets are loaded then they all should be loaded and not evicted?] diff --git a/cmuratori/hero/code/code162.hmml b/cmuratori/hero/code/code162.hmml index c935378..a777e9e 100644 --- a/cmuratori/hero/code/code162.hmml +++ b/cmuratori/hero/code/code162.hmml @@ -20,7 +20,7 @@ [41:32][3) Use prerasterized fonts] [43:47][Approaching prerasterized fonts] [47:01][Plan for the next episode] -[49:27][Q&A] +[49:27][Q&A][:speech] [49:53][@ttbjm][Aren't there licensing concerns with fonts?] [53:20][@gasto5][Will you support Unicode in Handmade Hero?] [53:30][@graeme7][Could we not pre-rasterise our fonts whenever the resolution is changed / at run time basically?] @@ -49,5 +49,5 @@ [1:17:20][@bkboggy][But don't you think you're not being completely fair to the other crowd, who are not going to lower level? For example, I love and care about lower level stuff, but to pay my bills I have to be able to output an application within 10th of the time it would take me if I did everything at lower level. I have no choice but to rely on WPF and C#] [1:19:05][@wolkentreiber][It's not enough to see a good tool once to understand that modern tools are bad. I feel like you also need to be a pretty good programmer, which is far from where most of us are now. If you are a mediocre programmer, you won't feel it. Do you agree?] [1:21:08][@ThisisAtticus][Would you take a job in the mafia if they gave you a perfect version of Emacs and Visual Studio?] -[1:21:32][Close it down] +[1:21:32][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code163.hmml b/cmuratori/hero/code/code163.hmml index 76acfb1..d06c00f 100644 --- a/cmuratori/hero/code/code163.hmml +++ b/cmuratori/hero/code/code163.hmml @@ -39,7 +39,7 @@ [1:02:37][Try to change the heads to be fonts][quote 156] [1:03:03][Filtering which letters spew out of the fountain] [1:07:29][Library success!][quote 157] -[1:08:56][Q&A] +[1:08:56][Q&A][:speech] [1:09:16][@TheSizik][The 'A' is the best match for the null terminator] [1:09:53][@JamesWidman][Until tonight, I thought there was a use case for CMake (which is that, if the user compiles the program, it finds libraries so that you don't need to know where they're installed). But now... it seems the STB way is the only reasonable default. I think I'm done with CMake for the foreseeable future] [1:11:32][@zuurr_][External libraries, malloc/free, what's next, a java virtual machine?] @@ -56,7 +56,7 @@ [1:18:29][@kknewkles][I don't look for a practical advice, just interested how you do it now. Often my friends tell me "I can't give you an objective answer/data" "screw it, I want YOUR opinion!"] [1:19:39][@kknewkles][ONE MORE! Ever thought of special episodes with guests/bonus episodes done on specific topics by someone else (being a rad debugger with Jeff or being a splendor deitial programmer with Fabian)?] [1:20:30][@gasto5][Is formatting coming tomorrow?] -[1:21:02][dgc2002 Q: I've heard you mention a "new language" someone is developing. Could you mention the name/creator? I Usually listen to Handmade Hero in my car on my way to work so I can't write it down if I hear it] -[1:21:56][Go to bed] -[1:25:35][See you on the internet, Casey][quote 158] +[1:21:02][@dgc2002][I've heard you mention a "new language" someone is developing. Could you mention the name/creator? I Usually listen to Handmade Hero in my car on my way to work so I can't write it down if I hear it] +[1:21:56][Go to bed][:speech] +[1:25:35][See you on the internet, Casey][:speech][quote 158] [/video] diff --git a/cmuratori/hero/code/code164.hmml b/cmuratori/hero/code/code164.hmml index fea522f..6311951 100644 --- a/cmuratori/hero/code/code164.hmml +++ b/cmuratori/hero/code/code164.hmml @@ -37,7 +37,7 @@ [47:52][Resorting to solid alpha to inspect the bounding boxes] [52:54][Scanning the bitmap to get the bounding box of the glyph manually] [57:41][Adding a one-pixel empty border] -[59:40][Q&A] +[59:40][Q&A][:speech] [1:00:19][@insofaras][Can the fonts have outlines?] [1:00:43][@gasto5][What did you mean by "backing bitmap"?] [1:03:16][@cubercaleb][I love how stb_truetype is easier and arguably better than the windows api version] @@ -53,5 +53,5 @@ [1:14:29][@BonusRocket][What GUI toolkit do you recommend?] [1:15:12][@SoysauceTheKid][Would CLEARTYPE_QUALITY instead of ANTIALIASED_QUALITY make a difference?] [1:15:30][Blackboard: LCD pixel elements] -[1:17:12][That's all she wrote] +[1:17:12][That's all she wrote][:speech] [/video] diff --git a/cmuratori/hero/code/code165.hmml b/cmuratori/hero/code/code165.hmml index 5346fa0..4f7e319 100644 --- a/cmuratori/hero/code/code165.hmml +++ b/cmuratori/hero/code/code165.hmml @@ -27,7 +27,7 @@ [55:28][Updating the GenerationID] [57:24][Compressing GetBitmap and GetSound together] [1:01:50][Leaving the code in a working state (although we are still not finished)] -[1:03:57][Q&A] +[1:03:57][Q&A][:speech] [1:04:52][@Sharlock93][Hey Casey, can you do a 2-min recap of everything done today?] [1:07:49][@andsz_][How often do you actually implement something from a paper?] [1:08:45][@SvK151][What would be the worst case scenario if you had multiple threads trying to remove an asset? Couldn't you just wait till no thread was trying to remove the asset?] @@ -43,5 +43,5 @@ [1:21:07][@hitmanatee][Any update on what algorithm you are using to do laundry these days?] [1:21:50][@EzyFool][Never mind, my keyboard & my internet seem to be dying, I'll wait 'til tomorrow] [1:22:11][@Sharlock93][I think we should do a detour and make a simple ray tracer] -[1:22:43][Wind it down] +[1:22:43][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code166.hmml b/cmuratori/hero/code/code166.hmml index fbe5d72..d5dcf66 100644 --- a/cmuratori/hero/code/code166.hmml +++ b/cmuratori/hero/code/code166.hmml @@ -25,7 +25,7 @@ [1:01:59][Implementing FinishRenderGroup] [1:03:40][We still need to thoroughly test today's code] [1:03:41][NOTE: (There are ten more minutes of programming in the answer to Q:1:21:19)] -[1:04:51][Q&A] +[1:04:51][Q&A][:speech] [1:05:30][@TheSizik][__sync_add_and_fetch returns the new value] [1:05:43][@mmozeiko][Please don't cast Value to (long*) for __sync_fetch_and_add, it will generate wrong code on 64-bit Linux/OSX] [1:06:17][@RobotChocolateDino][What's the advantage of calling load bitmaps from other threads? Wouldn't it be better to just have PushBitmap fail when called from other threads so that there are no assets missing from the ground chunks and so that all the bitmap memory could be acquired on the main thread? The ground chunks could probably wait one frame to have their assets loaded if they are prefetched ahead of time] @@ -40,5 +40,5 @@ [1:34:59][@mvargasmoran][How difficult would be to make this boot alone in a Raspberry Pi or something like that?] [1:35:11][@OsmanTheBlack][load_asset_work for u64 !size_t] [1:36:08][@RobotChocolateDino][Would dedicating one thread to asset loaded which has an atomic queue be a bad idea?] -[1:37:39][Wind it down] +[1:37:39][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code167.hmml b/cmuratori/hero/code/code167.hmml index 4f04422..d52ed76 100644 --- a/cmuratori/hero/code/code167.hmml +++ b/cmuratori/hero/code/code167.hmml @@ -19,7 +19,7 @@ [42:14][Reintroducing the 1-pixel apron around the glyphs] [47:26][Testing today's changes] [48:12][Checking our results against Wordpad's font rendering] -[49:23][Q&A] +[49:23][Q&A][:speech] [50:13][@marius_av][You should have passed GetDC(0) to CreateCompatibleBitmap, not CreateCompatibleDC. But that's fine, you would still have to use a different method to access bitmap data efficiently] [50:50][@MrMuffles869][Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?] [51:30][@waterlimon][Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?] @@ -37,5 +37,5 @@ [1:02:39][@abnercoimbre][Q: We're out of questions, but you made my life difficult tonight XD. You know I'm under NDAs like you. YOU KNOW HOW IT IS, BRO] [1:03:46][@Zamar037][The chat wants you to play the Vista video again] [1:03:54][@dgmtv][Should I stop using templates for my containers and adopt void* for ever?] -[1:06:02][Wind this down] +[1:06:02][Wind this down][:speech] [/video] diff --git a/cmuratori/hero/code/code168.hmml b/cmuratori/hero/code/code168.hmml index 2c5aa52..b8d045d 100644 --- a/cmuratori/hero/code/code168.hmml +++ b/cmuratori/hero/code/code168.hmml @@ -32,7 +32,7 @@ [50:53][Resetting AtY to a more appropriate position] [51:40][Resetting LeftEdge a more appropriate position] [52:10][Testing what we have so far and preview of coming attractions] -[54:11][Q&A] +[54:11][Q&A][:speech] [54:34][@Kelimion][Will you be addressing the subscript, superscript, en-space, em-space and other types of space tomorrow as well?] [56:33][@BrainCruser][Will you add edges to the font?] [57:00][@Renroh][What's the difference between making a game in C++ and making a game in Java?] @@ -51,5 +51,5 @@ [1:21:01][@IxNoxidexI][Around how many more episodes until the switch from software rendering to hardware rendering?] [1:21:23][@cubercaleb][Can you rotate and transform the text?] [1:22:57][Implement font scale code parsing] -[1:24:50][Stream has ended] +[1:24:50][Stream has ended][:speech] [/video] diff --git a/cmuratori/hero/code/code169.hmml b/cmuratori/hero/code/code169.hmml index 114d645..935fa98 100644 --- a/cmuratori/hero/code/code169.hmml +++ b/cmuratori/hero/code/code169.hmml @@ -29,7 +29,7 @@ [52:30][More consistent horizontal spacing] [53:58][Summary of pending tasks related to font rendering and drawing] [54:30][Applying gamma to correct the alpha blending of fonts] -[1:00:03][Q&A] +[1:00:03][Q&A][:speech] [1:00:31][@ChronalDragon][Does stb_truetype provide text metrics for this sort of thing? Will you show how to get them from the stb lib on stream?] [1:01:37][@mseery][Will you be covering right-to-left text?] [1:02:05][@TactileDactyl][Do you have any proprietary dependencies?] @@ -46,6 +46,6 @@ [1:14:11][@iTz_Kaj][Why not use block-based sprite fonts for debugging and avoid the Windows font headache?] [1:15:13][@mojo123X][What do you use for version control at work?] [1:15:59][@mseery][Who is John Galt?] -[1:16:22][Close it down] -[1:16:44][We didn't need those electrons][quote 175] +[1:16:22][Close it down][:speech] +[1:16:44][We didn't need those electrons][:speech][quote 175] [/video] diff --git a/cmuratori/hero/code/code170.hmml b/cmuratori/hero/code/code170.hmml index 4daed44..95411f6 100644 --- a/cmuratori/hero/code/code170.hmml +++ b/cmuratori/hero/code/code170.hmml @@ -31,7 +31,7 @@ [53:16][Computing the size taken by the font data] [54:00][Leaving the code in a compiling state] [57:48][Try to run, expecting it to explode][quote 178] -[58:57][Q&A] +[58:57][Q&A][:speech] [59:20][@evraire][Did you run the asset builder?] [1:00:28][@cubercaleb][Missed part of the stream, can you give context on why you want the meta-programming thing?] [1:02:36][@RobotChocolateDino][How would you make the font tables more sparse so you don't need to store kerning for pairs that probably wont get drawn, like ww?] @@ -41,5 +41,5 @@ [1:07:32][@ijustwantfood][Which Chinese dialect are you thinking of supporting?] [1:08:35][@ejunkie64][How big do you think the game will be in the end?][quote 179] [1:08:51][@OstrovskiVlad][How about right-to-left languages?] -[1:10:01][We ended the questions right as the stream ended] +[1:10:01][We ended the questions right as the stream ended][:speech] [/video] diff --git a/cmuratori/hero/code/code171.hmml b/cmuratori/hero/code/code171.hmml index 7f5620d..cf3f26f 100644 --- a/cmuratori/hero/code/code171.hmml +++ b/cmuratori/hero/code/code171.hmml @@ -18,7 +18,7 @@ [45:22][Loading the font data from the asset file] [45:45][The codepoint loading gets tricky when using more than one asset file...] [50:48][...but we can do the codepoint rebasing per file!] -[57:35][Q&A] +[57:35][Q&A][:speech] [58:05][@abnercoimbre][Give us a sec] [58:25][@garlandobloom][I tried to explain to someone that a color is just a uint32 and I am not sure I got it across] [59:01][Blackboard: "Color" -> Ambiguous term!] @@ -31,5 +31,5 @@ [1:16:44][@Robrobby][So you care about the stack memory. When would you start to really measure it, or is some gut feeling enough? I would never had that idea before not getting an actual error] [1:17:15][@TheSizik][What is HDR?] [1:18:51][@EnemyMouse][Do you think there will be a time when CPU and main bandwidth is fast enough to replace GPUs entirely, going back to the days of software renderers?] -[1:19:12][Wind things down for dinner] +[1:19:12][Wind things down for dinner][:speech] [/video] diff --git a/cmuratori/hero/code/code172.hmml b/cmuratori/hero/code/code172.hmml index cafa9fa..dbb9837 100644 --- a/cmuratori/hero/code/code172.hmml +++ b/cmuratori/hero/code/code172.hmml @@ -33,7 +33,7 @@ [54:27][We still have to see how our glyph bounding box detection interacts with the system's kerning information] [57:01][The alignment based on the bounding boxes was already correct and we didn't need the ABCs] [1:00:30][Modifying the TextOutW call in the asset packer to allow Windows to paint glyphs to the left of the specified drawing point in the font Device Context] -[1:03:14][Q&A] +[1:03:14][Q&A][:speech] [1:03:37][@Robrobby][Could you use another text sample like "AVA WA Ta"] [1:04:22][Learn something new about Arial and Helvetica] [1:06:22][@bkboggy][How do you know so much about fonts?] @@ -58,5 +58,5 @@ [1:21:12][@quartertron][What's behind the curtain?] [1:21:24][@garlandobloom][Facade was kinda interesting. One time I typoed the first thing I said to the guy when he opened the door and he just scowled, shut the door in my face and then the game faded to black and ended] [1:21:46][Check our edges] -[1:22:23][Close things down here] +[1:22:23][Close things down here][:speech] [/video] diff --git a/cmuratori/hero/code/code173.hmml b/cmuratori/hero/code/code173.hmml index ef3259b..25988a4 100644 --- a/cmuratori/hero/code/code173.hmml +++ b/cmuratori/hero/code/code173.hmml @@ -28,7 +28,7 @@ [49:45][No kerning for characters following the null codepoint] [50:57][Is it even possible to match Windows' kerning exactly?] [51:30][We'll have to compress the font ranges to support kerning for other languages] -[55:51][Q&A] +[55:51][Q&A][:speech] [57:01][@Miblo][The more I see the kerning in Notepad, compared to yours, the more awful it looks to me] [57:24][@Pseudonym73][I realise that this is uncharted territory, but it seems to me that font rendering is taking more time than the rest of the renderer. Is that normal?] [1:00:29][@dmitsuki][Isn't Japanese evenly spaced?] @@ -62,5 +62,5 @@ url="http://www.w3.org/2007/02/japanese-layout/docs/aligned/japanese-layout-requirements-en.html#en-subheading1_2_3"], 3. Tsumegumi for Japanese kerning] [1:22:23][@Robrobby][When thinking Adobe has a market value of over 40billion, why no great programmer wants to do a better Photoshop?] [1:24:40][@dmitsuki][There are actually a lot of people competing with Photoshop, and you are using one of those products on stream right now...] -[1:26:01][Wind it down] +[1:26:01][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code174.hmml b/cmuratori/hero/code/code174.hmml index f0e4949..560624e 100644 --- a/cmuratori/hero/code/code174.hmml +++ b/cmuratori/hero/code/code174.hmml @@ -38,7 +38,7 @@ [53:04][Starting to implement the partial storage of the HorizontalAdvance table] [56:12][On freeing things][quote 194] [56:21][Leaving the code in a compiling state before the end of the stream] -[59:07][Q&A] +[59:07][Q&A][:speech] [59:26][@bkboggy][I noticed that you rarely comment your code. Your comments mostly consist of TODO comments. What are your thoughts on commenting your code, considering a lot of it is pretty complicated, unless of course you don't see it as such? Or do you think that since you write good code, it doesn't require comments to be readable?] [1:01:59][@robrobby][Why was your first calculation of the GlyphTable index size too big (64k) and reduced to 2k, and still later went full-on 64k again? What changed the size?] [1:02:54][@ijustwantfood][Would it be a good practice to comment after writing all your code for others?] @@ -47,5 +47,5 @@ [1:07:06][@jameswidman][My comment-writing rule for a while has been: "code should clearly tell you what is being done; comments, if you need them, should only tell you why"] [1:07:55][@drmumba][How long have you been coding (years)?] [1:08:03][@abnercoimbre][When will you implement the chocolate wine fountain?] -[1:08:39][Call it] +[1:08:39][Call it][:speech] [/video] diff --git a/cmuratori/hero/code/code175.hmml b/cmuratori/hero/code/code175.hmml index ae89f3c..7a96b9d 100644 --- a/cmuratori/hero/code/code175.hmml +++ b/cmuratori/hero/code/code175.hmml @@ -28,7 +28,7 @@ [43:28][Displaying the handmade owl unicode codepoints] [44:08][We egged Casey on][quote 201] [51:10][The kanji codepoints are there but not kerned properly] -[52:20][Q&A] +[52:20][Q&A][:speech] [53:39][@ChronalDragon][So, are we done with fonts now? Moving on to other parts of the debug?] [54:32][@ijustwantfood][So what will we be moving onto next week?] [55:13][@InstantKafka][Any chance you could use a different font for the editor? Hard to tell difference between 0s and 8s] @@ -56,5 +56,5 @@ [1:17:48][@constantinopol][Vertical cursor navigation is easier to follow in a mono font] [1:18:05][@cubercaleb][Tried to use grep in Emacs: the program crashed] [1:18:26][@elxenoaizd][How do you handle introspection / metadata to build your editor inspection tools?] -[1:19:05][Wind it down] +[1:19:05][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code176.hmml b/cmuratori/hero/code/code176.hmml index dc0980c..3e366c3 100644 --- a/cmuratori/hero/code/code176.hmml +++ b/cmuratori/hero/code/code176.hmml @@ -25,7 +25,7 @@ [57:11]["I just kind of ruined The Variable"][quote 202] [1:01:03][Review of the inner workings of the new cycle counter interface] [1:02:15][Testing that the code still runs after today's changes] -[1:02:37][Q&A] +[1:02:37][Q&A][:speech] [1:03:22][@SoysauceTheKid][Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)] [1:04:48][@Psi9][Why not use a simple template? That would remove storing the ID, e.g. template struct timed_block {};] [1:05:50][@insofaras][Would you agree that there is a similarity between test driven development and "writing the usage code first"?] @@ -34,5 +34,5 @@ [1:08:55][@jfcatalan][Do you get Heisenbugs, where the bug happens only when there's not any debug code running?] [1:10:18][@InstantKafka][So the destructor gets called right when it goes out of scope?][quote 203] [1:14:08][@abnercoimbre][Community fight] -[1:14:25][Close this down and wrap up another episode of Handmade Hero] +[1:14:25][Close this down and wrap up another episode of Handmade Hero][:speech] [/video] diff --git a/cmuratori/hero/code/code177.hmml b/cmuratori/hero/code/code177.hmml index 8ae2103..4ab6363 100644 --- a/cmuratori/hero/code/code177.hmml +++ b/cmuratori/hero/code/code177.hmml @@ -37,7 +37,7 @@ [51:00][Identifying our debug counters using the file names stored in the debug arrays] [51:40][It works!] [52:09][What we have accomplished today] -[53:08][Q&A] +[53:08][Q&A][:speech] [54:16][@elxenoaizd][There's an alternative way to start / end the counter instead of using constructor / destructor pair, and you don't have to store the data in the struct. Maybe not as convenient but it's worth mentioning. I use it quite often when I have to 'begin X' -- write code -- 'end X'. It's basically a hacked / tweaked version of C#'s 'using' statement. I think you'll find it interesting] [55:13][Write out elxenoaizd's suggestion] [56:33][@JamesWidman][I feel like I missed something: why does the array name need to be different between builds?] @@ -58,5 +58,5 @@ [1:14:03][handmade.cpp: Demo bad programming practice] [1:16:32][@insofaras][How would you handle parsing errors / exceptions in a recursive decent parser?] [1:16:48][@waterlimon][Internet says __COUNTER__ started on VC++] -[1:17:53][Spin it down] +[1:17:53][Spin it down][:speech] [/video] diff --git a/cmuratori/hero/code/code178.hmml b/cmuratori/hero/code/code178.hmml index 6560990..0110c18 100644 --- a/cmuratori/hero/code/code178.hmml +++ b/cmuratori/hero/code/code178.hmml @@ -38,7 +38,7 @@ [58:48][Reporting also the line number of TIMED_BLOCKs] [59:45][Adding some more TIMED_BLOCKs] [1:00:30][The path of least resistance should be the right path, so that doing the right thing is never drudge work] -[1:01:10][Q&A] +[1:01:10][Q&A][:speech] [1:01:36][@andsz_][This was, again, pretty awesome! Thank you] [1:01:44][@TheBuzzSaw][Wouldn't a union be helpful for that HitCount_CycleCount? It just seems unnecessary having to remember their offsets and / or lengths] [1:02:14][@elxenoaizd][Yesterday I asked about preprocessor constants other than __FILE__, __LINE__ etc. I did some searching and found out about __TIME__ and __DATE__. Maybe it's useful for us to include a date-time stamp in some of our logs?] @@ -68,5 +68,5 @@ [1:28:20][@gasto5][What's wrong with pointers to inline functions?] [1:28:59][@elxenoaizd][Why you skips my questions?] [1:29:09][@BIurberry][Did you get a degree in CS? What's your background on programming?] -[1:29:42][Wind it down] +[1:29:42][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code179.hmml b/cmuratori/hero/code/code179.hmml index 360fa99..ac33bf3 100644 --- a/cmuratori/hero/code/code179.hmml +++ b/cmuratori/hero/code/code179.hmml @@ -22,7 +22,7 @@ [58:03][Printing out the statistics] [58:49][The output looks incorrect because we're not using the appropriate type specifier for the timers in _snprintf_s] [59:43][(Blackboard) Deriving the correct expression for the average cycles/hit. (Although it should be hits/cycle; see Q at 1:07:29)] -[1:05:44][Q&A] +[1:05:44][Q&A][:speech] [1:06:15][Song: 'Questions For Me' by Casey Muratori] [1:06:25][@elxenoaizd][Is a C compiler faster in compiling C code than a C++ compiler compiling C-like C++?] [1:07:23][@TheSizik][Shouldn't it be CycleOverHit?] @@ -42,5 +42,5 @@ [1:19:41][@CaptainKraft][Your thoughts on using a scripting language with the game engine?] [1:20:04][@blah238][For the performance counters, could you perhaps color-code them according to how far outside of an ideal or expected range they are? Similarly is there a way to (roughly) estimate the ideal cycle count of a function?] [1:20:46][@Childz][I have an interview tomorrow and I'm going to have to whiteboard. How to not be nervous?] -[1:25:54][That's about it for today] +[1:25:54][That's about it for today][:speech] [/video] diff --git a/cmuratori/hero/code/code180.hmml b/cmuratori/hero/code/code180.hmml index c9e0767..ea4bf83 100644 --- a/cmuratori/hero/code/code180.hmml +++ b/cmuratori/hero/code/code180.hmml @@ -31,7 +31,7 @@ [57:10][Testing the color-coded rectangles. The plot doesn't look right] [57:53][We never bothered to stack the rectangles!] [58:29][It works now and the majority of the time is spent inside the GameUpdateAndRender function] -[59:52][Q&A] +[59:52][Q&A][:speech] [1:01:41][@BrainCruser][Doesn't the multi-core rendering screw up your timing?] [1:02:37][@ifingerbangedurcat][Can you briefly explain how it tracks how long it takes the frame to work and the render engine to work if rendering the debug is part of that work? Also a suggestion, use a key to toggle the debug display to see the game] [1:05:52][@garlandobloom][Did you get 4coder set up?] @@ -43,6 +43,6 @@ [1:15:00][@inquarry][Will HH be optimized for GPUs or are you sticking to CPU render? Will that be an arduous task or pretty straight forward?] [1:15:32][@ciutchism][If I have a simple app concept that I can't code myself because I'm a scrub, is there any good way to get somebody to make an app for me that is somewhat simplistic and we split profits or even I just get 10%? I don't care about the profits I just want to help develop the app] [1:16:12][@SeargeDP][Why are you not using visual studio to write your code? It seems to be a windows machine you are working on] -[1:16:51][Close outta here] -[1:17:25][Announcement: GitHub private repository now available for those who preorder the source] +[1:16:51][Close outta here][:speech] +[1:17:25][Announcement: GitHub private repository now available for those who preorder the source][:speech] [/video] diff --git a/cmuratori/hero/code/code181.hmml b/cmuratori/hero/code/code181.hmml index ab06b63..fea9d19 100644 --- a/cmuratori/hero/code/code181.hmml +++ b/cmuratori/hero/code/code181.hmml @@ -40,7 +40,7 @@ [1:02:21][Fixing compilation errors] [1:03:59][Accessing the filenames, function names and line numbers of debug_records] [1:06:50][The log-based system seems to be working] -[1:07:37][Q&A] +[1:07:37][Q&A][:speech] [1:08:04][@elxenoaizd][You mentioned that you use a known base address for your memory management. Could you talk a bit more about that? Does that mean I can now find things by just offsetting from that address, and does it mean that if I fwrite this whole block I'll essentially be fwriting the whole game?] [1:09:02][@butwhynot1][You can specify which functions to optimize by enabling optimization on the command line and surrounding code you don't want optimized with #pragma optimize("", off) ..... #pragma optimize("", on)] [1:09:51][@elxenoaizd][Do you ever find use size_t or do you just use u32, u64, etc?] @@ -50,5 +50,5 @@ [1:12:35][@JamesWidman][How will we avoid collecting or displaying stats on debug-rendering code?] [1:12:53][@plain_flavored][Are profilers as bad as debuggers?] [1:12:58][@inliferty][What do you think about checked exceptions?] -[1:13:29][Thanks and a few words on preordering the source and using the GitHub repositories] +[1:13:29][Thanks and a few words on preordering the source and using the GitHub repositories][:speech] [/video] diff --git a/cmuratori/hero/code/code182.hmml b/cmuratori/hero/code/code182.hmml index e80dbdf..c6c2b6f 100644 --- a/cmuratori/hero/code/code182.hmml +++ b/cmuratori/hero/code/code182.hmml @@ -36,7 +36,7 @@ [58:46][Testing. There's a bug] [1:00:42][Getting rid of GlobalDebugEventArray] [1:01:10][And... we're back!] -[1:01:50][Q&A] +[1:01:50][Q&A][:speech] [1:02:38][@elxenoaizd][What do you think is an effective way to get better at assembly? Go over a book / tutorial? Read the code disassembly in VS? Mike Acton can look at a piece of code for a couple of seconds and estimate how many cycles it takes and what the assembly code for it is. I'd like to reach that level one day] [1:04:57][@Pseudonym73][We're actually a pre-recorded laugh track] [1:05:08][@insofaras][How would you deal with switching between multiple APIs in a single application (like software / hardware renderer)? Would it be structured similar to the platform layer?] @@ -48,5 +48,5 @@ [1:18:48][@thegujhack][Why are you making an engine instead of a game?] [1:21:27][@elxenoaizd][Do you think implementing a regex matcher is worth it / useful for meta programming?] [1:21:41][@obiwanus][You seem to be pretty unhappy with the quality of modern software. Do you think programmers were better in the past? Is the software you produce always flawless and bugless? Asking seriously, just trying to understand your point more clearly. Thanks][quote 225] -[1:27:21][Wrap it up] +[1:27:21][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code183.hmml b/cmuratori/hero/code/code183.hmml index 8fe8116..83d5120 100644 --- a/cmuratori/hero/code/code183.hmml +++ b/cmuratori/hero/code/code183.hmml @@ -42,7 +42,7 @@ [59:33][Instead of two ping-pong arrays, we have now sixty-four] [1:00:30][Now we can look across frames and we don't need the snapshots anymore] [1:01:20][Not as good as a circular buffer but it will do] -[1:02:43][Q&A] +[1:02:43][Q&A][:speech] [1:03:11][@Hotspur_][Are you going to start the hardware renderer before starting on game logic? Or are you going to wait until software doesn't cut it? Or are you waiting for Vulkan?] [1:04:09][@TheiBurley][Do you just use the blue line selector and green cursor to make it easier to follow on stream, or is that how you normally like it? I feel like it would get fatiguing on the eyes] [1:04:34][@elxenoaizd][When do you think it is a good idea to use somebody else's library / system instead of implementing our own? (e.g. Do you use anything from the C standard library?)] @@ -51,5 +51,5 @@ [1:08:02][@JamesWidman][In the debug display, are we going to see something like Brendan Gregg's flame graphs (where function call depth is represented on the Y axis)?] [1:08:27][@insofaras][I think a lot of people would like to see how to write a hardware renderer, myself included][quote 226] [1:10:33][@CaptainKraft][Getting good at writing game engines: make lots of them or work on a few larger ones and continue improving them?] -[1:12:07][Close it down] +[1:12:07][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code184.hmml b/cmuratori/hero/code/code184.hmml index edcce12..c0bdfe4 100644 --- a/cmuratori/hero/code/code184.hmml +++ b/cmuratori/hero/code/code184.hmml @@ -24,7 +24,7 @@ [49:25][We'll ignore all events preceding the first frame marker we encounter] [50:20][Figuring out the relative clock of events inside a frame] [52:18]["I liked how that completed to nothings"][quote 230] -[55:56][Q&A] +[55:56][Q&A][:speech] [56:57][@andsz_][You could have made your loop this way: for(u32 EventArrayIndex = InvalidEventArrayIndex + 1; EventArrayIndex != InvalidEventArrayIndex; EventArrayIndex = (EventArrayIndex + 1) % MAX_DEBUG_FRAME_COUNT) { ... }; Or did you want to save the modulo?] [58:39][@ChronalDragon][Might not have a ton of on-topic questions. Chat was a bit... distracted] [58:45][@elxenoaizd][What would be the most important things you'd look at when hiring a programmer? What type of questions would you ask? Does he have to have, like, 20+ years of experience?] @@ -47,5 +47,5 @@ [1:11:07][@Cx00][What time do you usually go to sleep?] [1:11:13][@vtlmks][Could you please expand on what you meant by "in the future there won't be dedicated hardware for graphics"? You mean it'll be more CPU cores and ray tracing instead?] [1:12:34][@Dragonkinn02][Would you think in the next 5-10 years they'll move us from 64-bit to 128 bit?] -[1:12:53][Wind it on down] +[1:12:53][Wind it on down][:speech] [/video] diff --git a/cmuratori/hero/code/code185.hmml b/cmuratori/hero/code/code185.hmml index 5bdbc70..cef2f41 100644 --- a/cmuratori/hero/code/code185.hmml +++ b/cmuratori/hero/code/code185.hmml @@ -38,7 +38,7 @@ [59:06][Let's hardcode the FrameBarScale for the moment for debugging purposes] [1:00:22][The debug visualization is still not showing properly] [1:03:32][We were not multiplying the scaling factor by the chart height] -[1:04:34][Q&A] +[1:04:34][Q&A][:speech] [1:05:38][@insofaras][Is there still going to be a debug visualization of the asset memory chunks?] [1:06:01][@XEnDash][Can you make a mini episode about project management, outsourcing, freelance hiring, etc.? Programming is great but making a game takes more. If not, can you point to good resources on the topic?] [1:06:20][@elxenoaizd][Do you use the same memory model as in HMH when writing utilities or meta programs, or do you just malloc and it wouldn't matter because the thing runs once, does its thing and closes?] @@ -48,5 +48,5 @@ [1:13:03][@elxenoaizd][Thank you very much for mentioning cmirror. It addresses a lot of my issues directly and is much more human readable. What was the GetToken written for? For config files? Doesn't seem like for C code] [1:13:44][@XEnDash][How will you debug the OpenGL / Direct3D stuff when you will ship?] [1:16:13][@davidthomas426][Did I misunderstand mollyrocket.com update, or should there be a comic there today having something to do with your project?][quote 234] -[1:17:50][Wrap up here] +[1:17:50][Wrap up here][:speech] [/video] diff --git a/cmuratori/hero/code/code186.hmml b/cmuratori/hero/code/code186.hmml index 1a4e401..cc2225f 100644 --- a/cmuratori/hero/code/code186.hmml +++ b/cmuratori/hero/code/code186.hmml @@ -31,7 +31,7 @@ [1:01:30][Checking that EventArrayIndex is aligned to 8-byte boundaries] [1:06:15][Outsourcing the problem to the stream] [1:06:53][We could debug the problem in isolation, on a simpler version of the code] -[1:07:37][Q&A] +[1:07:37][Q&A][:speech] [1:08:04][@TheSizik][Try running without timing DrawRectangle] [1:10:44][@Bobo_the_bearded][The MSDN documentation for __readgsqword states "These intrinsics are only available in kernel mode, and the routines are only available as intrinsics". If this is the case, how were you able to use __readgsqword to read out the thread ID? (I'm not really sure what the difference between kernel mode and user mode is)] [1:12:10][@qwoodmansee][You said that it seems to work normally for a little while, then stops working when it's under stress. Maybe let the threads run wild for a little while, then freeze them? Or is this not possible with the debugger?] @@ -45,5 +45,5 @@ [1:29:02][@SerialQwiller][If I remember correctly from the other day, you discard events if buffers are full. Are you sure all buffers are big enough?] [1:29:50][build.bat: Switch to -O2] [1:31:09][@TheSizik][Could it be threads running across a frame boundary?] -[1:33:01][Leave it in a state where it is broken][quote 237] +[1:33:01][Leave it in a state where it is broken][:speech][quote 237] [/video] diff --git a/cmuratori/hero/code/code187.hmml b/cmuratori/hero/code/code187.hmml index 477f291..aa12443 100644 --- a/cmuratori/hero/code/code187.hmml +++ b/cmuratori/hero/code/code187.hmml @@ -33,7 +33,7 @@ [54:34][Without drawing the debug rectangles, it goes down to 91 ms/frame] [55:45][Disabling debug event recording, we get back to our original performance] [59:14][Our collation of the debug records is very expensive] -[1:00:36][Q&A] +[1:00:36][Q&A][:speech] [1:01:05][@quartertron][What's your favourite bug of all time?] [1:01:48][@serge_rgb][Often when I'm debugging, I have to stop myself from changing stuff at random because of mental laziness, hoping for "an even number of sign errors". Do you ever have that urge? If so, has it diminished as you have become more experienced?[ref site="Casey's Blog" @@ -52,5 +52,5 @@ [1:15:24][@slash1221][If I don't have a credit card, is there another way to buy it?] [1:16:09][@CaptainKraft][You brought up your devlog: do you think that writing a devlog is good for the writer, the readers, or both?] [1:16:25][@CaptainKraft][It sounds like the debugger is not only a tool to find out what is going wrong, but to detect when things are going to go wrong. Is that a fair assumption? I never thought of a debugger as something that keeps me "situationally aware". That sounds like a great idea] -[1:17:46][We have come to the end of the stream] +[1:17:46][We have come to the end of the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code188.hmml b/cmuratori/hero/code/code188.hmml index 887c703..48ba648 100644 --- a/cmuratori/hero/code/code188.hmml +++ b/cmuratori/hero/code/code188.hmml @@ -28,7 +28,7 @@ [48:45][Clearing the half-transition count at the start of each frame] [50:36][See if we can write something that's not total garbage][quote 243] [52:17][Testing. It works] -[53:07][Q&A] +[53:07][Q&A][:speech] [53:31][@quartertron][Put the Pig Hat on the Owl] [53:45][@Sharlock93][You had four Owl of Shame moments] [53:56][@insofaras][Mouse code bugged for over 150 days, bring on the Owl] @@ -48,5 +48,5 @@ [1:02:09][@Eggsodragon][I noticed in task manager that all of my Steam games are 32-bit processes. Is there a really good reason to compile games in 32-bits rather than 64?] [1:03:20][@SoysauceTheKid][The debug display is for processing time. Are you going to do any visuals for memory usage?] [1:04:04][@Sharlock93][Would you be willing to do a 1-2 hour prestream?] -[1:04:20][Wind it down][quote 244] +[1:04:20][Wind it down][:speech][quote 244] [/video] diff --git a/cmuratori/hero/code/code189.hmml b/cmuratori/hero/code/code189.hmml index a1ced87..019b3b7 100644 --- a/cmuratori/hero/code/code189.hmml +++ b/cmuratori/hero/code/code189.hmml @@ -44,7 +44,7 @@ [49:10][Testing. It works now but sometimes we still hit the maximum limit of regions per frame] [51:20][Implementing TextOutAt, a DEBUGTextLine with explicit positioning] [54:12][Moving the time block debug information next to the mouse pointer] -[56:36][Q&A] +[56:36][Q&A][:speech] [57:00][@insofaras][Are the events keeping the same colors across frames? The long one looks like it keeps changing] [57:32][handmade_debug.cpp: Make the colors persist across frames] [1:00:04][handmade_debug.h: Add ColorIndex to debug_frame_region] @@ -72,5 +72,5 @@ [1:16:26][@cubercaleb][Do you know why one of the worker threads started after the others?] [1:17:16][@AlephAnt][Every once in a while it seems like a frame gets missed; I've noticed that happens in things I do as well. Is there a way to get around that reliably?] [1:18:36][@elxenoaizd][What do you think of the theory that says we already know everything, all the knowledge there is, but we just don't remember it? So when we study, etc. we start remembering things...] -[1:20:17][Announce an announcement and sign off] +[1:20:17][Announce an announcement and sign off][:speech] [/video] diff --git a/cmuratori/hero/code/code190.hmml b/cmuratori/hero/code/code190.hmml index 1698ce6..10f6673 100644 --- a/cmuratori/hero/code/code190.hmml +++ b/cmuratori/hero/code/code190.hmml @@ -27,8 +27,8 @@ [49:57][Adjusting lane heights] [53:37][Displaying the profile rectangle so that we can debug the code that scales and positions it] [56:41][Fixing lane heights] -[1:01:00][Q&A] +[1:01:00][Q&A][:speech] [1:01:40][@Miblo][I appreciate that there are more robust ways of implementing such things, but would it be practical to use the debug data to drive some of the game's visual effects, e.g. fire or, more likely, some otherworldly magical entity or the display on an in-game computer? Maybe it could be a sort of Easter Egg for those of us who know how the game's made] [1:02:45][@elxenoaizd][There are magenta spikes in the debug graph that happens so fast we don't have time to click on them. How do we plan to catch those? Having the ability to step-over frame-by-frame would be useful, methinks. Another idea is to have the debug text left off at the last rect position we hovered at] -[1:04:38][Wrap it up] +[1:04:38][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code191.hmml b/cmuratori/hero/code/code191.hmml index ab9e76b..36a39ba 100644 --- a/cmuratori/hero/code/code191.hmml +++ b/cmuratori/hero/code/code191.hmml @@ -33,7 +33,7 @@ [56:30][Testing it] [58:39][Placing the radial menu relative to the mouse position at the time it was invoked] [59:53][Coming attractions] -[1:00:37][Q&A] +[1:00:37][Q&A][:speech] [1:01:04][@andsz_][I think you added v3.xy for v3-to-v2 conversion] [1:01:46][@elxenoaizd][Even if the menus in the circle get cluttered, we could make it so that each button in the circle lead us to another circle / layer / subset of buttons] [1:02:17][@Sharlock93][Can you explain a bit more on that closure stuff and how to do it in C? I didn't quite understand it] @@ -47,5 +47,5 @@ [1:15:33][@Psi9][Since draw rectangle quickly is in its own translation unit, are you going to write that code in straight ASM instead of C / intrinsics?] [1:15:50][@cubercaleb][Wait, isn't 4coder already better than Emacs?] [1:16:10][@cubercaleb][Can you go into detail on I/O Completion Ports since you brought them up?] -[1:16:25][Wind it down] +[1:16:25][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code192.hmml b/cmuratori/hero/code/code192.hmml index 0e2f20c..9e834c5 100644 --- a/cmuratori/hero/code/code192.hmml +++ b/cmuratori/hero/code/code192.hmml @@ -42,7 +42,7 @@ [1:02:05][Signalling the ongoing recompilation graphically] [1:03:21][Find that platform_api doesn't have DEBUGGetProcessState][quote 254] [1:03:38][Apologise for the slang][quote 255] -[1:04:49][Q&A] +[1:04:49][Q&A][:speech] [1:05:31][@powerc9k][Why be able to compile from the game if we can do it from the editor? Is it just to be cool?] [1:06:30][@ChronalDragon][Compile in mr4th's editor and do all of the game development work from in-game?] [1:06:51][@andsz_][I like how it's "STARTUPINFO", but "PROCESS_INFORMATION". Inconsistency even in a single small part of the WinAPI... Do such things annoy you in a "professional" API?] @@ -57,5 +57,5 @@ [1:12:48][@powerc9k][Why does it zoom out?] [1:13:02][@Radar_CS][Are you using sublime?] [1:13:07][@Quantumplation][Can you add a radial menu for debug camera, instead of piggybacking off toggle graph? It's bugging me] -[1:13:19][Shut down] +[1:13:19][Shut down][:speech] [/video] diff --git a/cmuratori/hero/code/code193.hmml b/cmuratori/hero/code/code193.hmml index 2d6f093..f70a705 100644 --- a/cmuratori/hero/code/code193.hmml +++ b/cmuratori/hero/code/code193.hmml @@ -40,12 +40,12 @@ [50:00][Coloring menu items depending on their value] [51:08][Testing. The menu should not select an action when we remain at its center] [52:06][The compilation process is a bit slow, but we can skip the compilation of the asset builder] -[53:23][Q&A] +[53:23][Q&A][:speech] [54:45][@Flederfalter][I don't understand why a single if-statement would be expensive if we do it at runtime. Can you give an example?] [1:07:54][@elxenoaizd][Why are we adding // b32 comment in the config file?] [1:08:30][@TheSizik][Can you toggle the debug options while looping?] [1:13:06][@andsz_][You should add an optimization switch to the UI at some point] [1:14:02][@andsz_][Wouldn't -O2 optimize those dead branches out?] [1:14:41][@ingenero][Could you have an option to either recompile or simply toggle an "if"? It seems like most of the time you would use the regular "if" so the change is instantaneous, but in extreme cases you could easily just do the recompile option] -[1:16:25][We are overtime] +[1:16:25][We are overtime][:speech] [/video] diff --git a/cmuratori/hero/code/code194.hmml b/cmuratori/hero/code/code194.hmml index 9434541..223eea0 100644 --- a/cmuratori/hero/code/code194.hmml +++ b/cmuratori/hero/code/code194.hmml @@ -21,7 +21,7 @@ [1:00:51][handmade_debug.cpp: Reinsert DEBUGUI_ at the front of the debug variables] [1:01:21][Debugger: Continue stepping through] [1:01:42][handmade_debug.cpp: Recap what we've done] -[1:02:57][Q&A] +[1:02:57][Q&A][:speech] [1:03:33][@elxenoaizd][Can we make it an option to toggle between optimized and debug builds from the debug menu?] [1:05:19][@ifingerbangedurcat][Can you run the tool to see how many lines of code we have?] [1:05:39][@elxenoaizd][Wouldn't it be prettier visually in our config files to be indented according to their group depth, that way we know which variables belong to which group? (i.e. variables in the root group don't have any indentation, group depth 1 will have a single level of indentation etc.)] @@ -34,7 +34,7 @@ [1:11:52][@aceflameseer][Can we sometimes see you play a game on twitch, like Jon does? Just a chill out stream. Would love to hear your opinion on many different games] [1:12:20][@Kemosabe76][What about a Handmade Certification for games? A badge of honour, could be placed in a splash screen or in the credits. Products use certifications, e.g. Australian Made. Could be organised at the conference] [1:13:32][@powerc9k][Thanks to you, I was able to implement dynamic code reloading for my project too! Saving me a ton of time] -[1:13:46][Naysayer88: Why Do I Have No Straem. I payed the micropayment] +[1:13:46][@Naysayer88][Why Do I Have No Straem. I payed the micropayment] [1:14:28][handmade_platform.h: Implement the suggestions from the forums to enable SDL Handmade to run on Linux and OS X[ref site="Handmade Hero Forums" page="Linux / OS X Support" @@ -42,14 +42,14 @@ [1:21:23][@Stephenlast][Does the idea for having your compile_switch / variable_switch speed cake involve compiling code out with "if(0)"?] [1:21:45][@Naysayer88][Why dont you use lua are you dumb] [1:22:47][@registerat1on][How do you handle multithreading?] -[1:23:02][rumcode Q: You inspired me to forget about my years of commercial experience writing RMGUIs and go and implement an IMGUI for my game engine. I love coding again!] -[1:23:16][Miblo elxenoaizd: Someone asked a Q: about PushStruct on that day, so I'm guessing Casey MIGHT have introduced it then] -[1:23:23][insobot Q: Damn?] +[1:23:02][@rumcode][Q: You inspired me to forget about my years of commercial experience writing RMGUIs and go and implement an IMGUI for my game engine. I love coding again!] +[1:23:16][@Miblo][@elxenoaizd: Someone asked a Q: about PushStruct on that day, so I'm guessing Casey MIGHT have introduced it then] +[1:23:23][@insobot][Q: Damn?] [1:23:27][@ud][How long have you been making games?] [1:23:47][@nxsy][Check unmatched parenthesis in #elif in ThreadID extraction] [1:24:07][@cubercaleb][What?] [1:24:12][@registerat1on][Does streaming your development motivate you to do more / or more consistently?] [1:24:36][@effect0r][Did you use _snprintf or sprintf? The define is saying "change snprintf to _snprintf"] [1:25:18][@registerat1on][Do you use any type of documentation or design for this project? What types of documents have you produced / planning to produce for this project?] -[1:26:02][Wrap it up] +[1:26:02][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code195.hmml b/cmuratori/hero/code/code195.hmml index 3877ae3..7debc60 100644 --- a/cmuratori/hero/code/code195.hmml +++ b/cmuratori/hero/code/code195.hmml @@ -41,7 +41,7 @@ [1:00:05][Run the game and see that it all looks pretty good] [1:00:46][handmade_debug.cpp: Create a bunch more debug variable types] [1:04:16][Run the game, assess our progress and glimpse into the future] -[1:05:36][Q&A] +[1:05:36][Q&A][:speech] [1:06:03][@andsz_][That was pretty bools, man!] [1:06:08][@Sharlock93][Casey, we hear cutlery. Maybe skip Q&A and eat?] [1:06:28][@elxenoaizd][Why aren't the + and - signs not shown for the group labels?] @@ -64,5 +64,5 @@ [1:17:02][@budsan][In case the debug variables header is messed up, can we check easily if a debug variable is not defined and set some default value?] [1:17:20][@elxenoaizd][How would you implement your own string without having them being null terminated? Bundle the char* with a count variable?] [1:17:38][@elxenoaizd][Handmade Certification] -[1:19:33][Wrap it up] +[1:19:33][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code196.hmml b/cmuratori/hero/code/code196.hmml index b49ddb8..70c71da 100644 --- a/cmuratori/hero/code/code196.hmml +++ b/cmuratori/hero/code/code196.hmml @@ -24,12 +24,12 @@ [54:25][Debugger: Step in to DEBUGDrawMainMenu to find where everybody went] [55:33][handmade_debug.cpp: Flip the order of the values passed to DebugState->Hierarchy.UIP] [55:52][Run the game and find that it's all working] -[56:31][Q&A] +[56:31][Q&A][:speech] [57:06][@ijustwantfood][Once you finish making the game, you you do a live playthrough?] [58:57][@TheSizik][We're getting close to 200 episodes; how long do you think until you start on the game proper?] [1:02:38][@cubercaleb][Does this mean a proper RNG is around the corner?] [1:04:57][@Lkey144][Did you already cover the Minkowski difference on stream?] [1:06:06][@RC1290][Could you explain the difference between how IMGUI is often implemented, and how you think it should work again? It went a bit fast for me] [1:07:53][@Sabre173][Would you ever consider doing a 24-hour stream that was create X app or game from start to finish in one stream?] -[1:09:10][Close] +[1:09:10][Close][:speech] [/video] diff --git a/cmuratori/hero/code/code197.hmml b/cmuratori/hero/code/code197.hmml index b86d90d..4846aa5 100644 --- a/cmuratori/hero/code/code197.hmml +++ b/cmuratori/hero/code/code197.hmml @@ -33,7 +33,7 @@ [56:01][It's working!] [56:24][Normally we would set the size of the display by measuring the distance from the point where the down-click happened to the current position, but this is internal debug code] [57:53][Introducing a root group] -[58:45][Q&A] +[58:45][Q&A][:speech] [59:19][@panic00][Do you think this way of structuring UI code could be used to build a full application, or is it just useful for debug UIs? What extra things do you think you'd need to add to make it useful for a full app UI?] [1:02:10][@Connor_Rentz][Were you nervous the first time you streamed Handmade Hero?] [1:03:58][@thebiggianthead2][What do you think about GCC and its dbg?] @@ -49,7 +49,7 @@ [1:17:26][@graeme7][Star Citizen is crashing and burning] [1:19:36][@coreactivities][How did you end up working on The Witness, and what is it like to get jobs as a 'freelancer'?] [1:20:30][@StarchyPancakes][If Star Citizen _does_ end up delivering, do you think it has the potential to change the current publisher AAA model or do you think it will be a one-shot regardless of its success?] -[1:21:42][Start to wind it down] +[1:21:42][Start to wind it down][:speech] [1:23:22][@Popcorn0x90][Wait, is there a limit?] -[1:24:47][Finish winding it down] +[1:24:47][Finish winding it down][:speech] [/video] diff --git a/cmuratori/hero/code/code198.hmml b/cmuratori/hero/code/code198.hmml index ae30f5b..de109de 100644 --- a/cmuratori/hero/code/code198.hmml +++ b/cmuratori/hero/code/code198.hmml @@ -35,7 +35,7 @@ [1:05:25][Run the game and try that again] [1:05:55][handmade_debug.cpp: Move Assert(Var)] [1:06:22][Run the game and check out our tearing and moving abilities] -[1:07:00][Q&A] +[1:07:00][Q&A][:speech] [1:07:47][@Connor_Rentz][No questions] [1:08:04][@elxenoaizd][You mentioned that encapsulation is good but not in the OOP way. Could you elaborate then in which way you mean?] [1:09:09][@insofaras][Are the menu items spaced evenly vertically? Looks a bit odd to me] @@ -53,5 +53,5 @@ [1:21:02][@Angrycrow][Is 'sentinel' a design pattern that will help with making the torn instances of the UI independent, or is that terminology that you've gained in years of tool development? Now that I understand what you meant by 'tearing' the interface, it seems really useful for isolating instances of hierarchies] [1:21:31][@Longboolean][Not a huge deal, but the labels no longer show if clicking them will expand or minimize them. Also at a glance it is not clear what is a category and what is a var] [1:21:48][@plain_flavored][Which game console had the worst SDK?] -[1:22:16][Wrap it up] +[1:22:16][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code199.hmml b/cmuratori/hero/code/code199.hmml index fcdc165..8e66cf8 100644 --- a/cmuratori/hero/code/code199.hmml +++ b/cmuratori/hero/code/code199.hmml @@ -38,7 +38,7 @@ [51:53][Run the game and consider the aspect ratio] [53:03][handmade_debug.cpp: Implement the same resizing for the bitmap as for the font] [55:53][Run the game and find that the resizing works much better] -[59:04][Q&A] +[59:04][Q&A][:speech] [1:00:57][@ingenero][Maybe I'm misunderstanding, but is it desired behavior for the "tear" feature to tear all groups below it even if they are on the same level in the hierarchy? I would think you would only want to tear the current group and subgroups, not other groups on the same level. For example, you wouldn't want the "profile" group to get torn when you tear the "particles" group] [1:02:16][@boondoggle42][If I bought a ticket for the Con that I can't use, can I donate it to someone?] [1:02:34][@evraire][Can the new bitmap display be torn off as well?] @@ -46,5 +46,5 @@ [1:05:39][@insofaras][Is it worth doing so much UI work if the game will not feature much UI?] [1:07:12][@TheSizik][Can you add variables to change the match vectors?] [1:08:34][@branigor][Will there be a menu system like pressing start in Zelda to change items? Nothing fancy, but just something to get us started on how to do it] -[1:09:56][Assume that we have Q:'d out] +[1:09:56][Assume that we have Q:'d out][:speech] [/video] diff --git a/cmuratori/hero/code/code200.hmml b/cmuratori/hero/code/code200.hmml index a8ffb1c..7d5ffee 100644 --- a/cmuratori/hero/code/code200.hmml +++ b/cmuratori/hero/code/code200.hmml @@ -15,10 +15,10 @@ [54:20][handmade_debug.cpp: Only push the rects if the Element has a Size and stop making Text elements Sizeable] [55:05][handmade_debug.cpp: Add the DefaultInteraction] [56:03][Run the game and see that everything seems to be working pretty well] -[57:45][Q&A] +[57:45][Q&A][:speech] [1:00:30][@theGeekPirate][Why don't you connect to chat with your desktop?] [1:02:47][Set the stage for the evening and wind it down[ref site="Casey's Blog" page="Working on The Witness, Part 11" - url="http://mollyrocket.com/casey/stream_0019.html"]] + url="http://mollyrocket.com/casey/stream_0019.html"]][:speech] [/video] diff --git a/cmuratori/hero/code/code201.hmml b/cmuratori/hero/code/code201.hmml index 7f8c4ad..555d650 100644 --- a/cmuratori/hero/code/code201.hmml +++ b/cmuratori/hero/code/code201.hmml @@ -30,7 +30,7 @@ [41:51][Consider using a caching-centric system] [44:41][handmade_debug.h and handmade_debug_variables.h: Start to implement a caching-centric system] [1:04:17][Pause this temporarily and turn off HANDMADE_INTERNAL] -[1:04:57][Q&A] +[1:04:57][Q&A][:speech] [1:05:25][@insofaras][Now that the amount of debug code is getting larger, will you create a debug debug system to debug the debug code?] [1:06:04][@Manicthenobody][Is this the link you were looking for earlier for MartinCohen?[ref site="infocobuild" @@ -48,5 +48,5 @@ [1:15:26][@garryjohanson][Do you think it would be totz baller to make a GUI visual language for game scripting like what Unreal has?] [1:16:14][Blackboard: Visual Scripting] [1:18:35][@quartertron][Couldn't you collate just the last frame every frame instead of doing all of them in chunks?] -[1:20:22][Close this down] +[1:20:22][Close this down][:speech] [/video] diff --git a/cmuratori/hero/code/code202.hmml b/cmuratori/hero/code/code202.hmml index 7357c96..d7d1076 100644 --- a/cmuratori/hero/code/code202.hmml +++ b/cmuratori/hero/code/code202.hmml @@ -33,7 +33,7 @@ [1:01:18][Correctly spell "variable"][quote 269] [1:01:27][handmade_debug.cpp: Finish cleaning up compile errors] [1:03:49]["That's the end of that"][quote 271] -[1:04:51][Q&A] +[1:04:51][Q&A][:speech] [1:05:19][@TheSizik][Does it work?] [1:07:32][@diaboIix17][Earlier in the stream you said that you once spent 10 weeks on a problem. What was that problem?] [1:09:03][@insofaras][Have you considered using intrusive linked lists like those in the Linux kernel that use offsetof()] @@ -46,5 +46,5 @@ [1:14:35][@Angrycrow][Can you give me a quick rundown again of how you're substituting the stack for instances of the debug view?] [1:15:01][@MartinCohen][So what do you use as a "formatting language" usually?] [1:15:55][@cubercaleb][Is this how you do UI in your other programs?] -[1:16:44][Call it done] +[1:16:44][Call it done][:speech] [/video] diff --git a/cmuratori/hero/code/code203.hmml b/cmuratori/hero/code/code203.hmml index 3fa4c7c..5583fe6 100644 --- a/cmuratori/hero/code/code203.hmml +++ b/cmuratori/hero/code/code203.hmml @@ -39,11 +39,11 @@ [54:18][handmade_debug.h: Make DebugIDFromLink and VarLinkInteraction take the Tree] [55:35][Run the game and see that the state is isolated] [56:38][Recap today's work] -[57:50][Q&A] +[57:50][Q&A][:speech] [58:14][@mykevelli][Pure design question. In GetDebugViewFor() your method is named such that it's a query but it appears to be a command in some cases (in that it changes the state of the system). I've heard that you typically want to avoid this. Do you agree? Is there a reason you did this?] [59:53][@elxenoaizd][Do you think learning all the algorithms and data structures is a must, or is it OK to learn them when the need for one of them rises? Or is it one of those things that you have to learn beforehand in order to know if you need them or not?] [1:02:01][@Insobot][4bugger... No libraries. You need a new game maker?] -[1:02:16][quartertron Q: Binary search tree is a subset of BTree, I think] +[1:02:16][@quartertron][Q: Binary search tree is a subset of BTree, I think] [1:03:07][@Rfh666][About your memory allocation (way back when): Shouldn't the amount of memory you allocate depend on the size of the world chosen by the user? As it is, it is fixed at compile time (if I understand correctly)] [1:05:29][@elxenoaizd][I would like to be a tools programmer / game tech writer like you, but I'm still learning things so I'm not fully qualified to work as one. I'm thinking of working in a simple game company where the qualifications aren't so hardcore (maybe they use Unity or whatever), and at the same time do my private low-level self-learning. Good idea? Yes / No] [1:08:35][@bewbilicious][What are your plans for streaming once you complete this game?] @@ -51,5 +51,5 @@ [1:10:09][@quartertron][I'd like to see a Blender pre-stream demo] [1:10:30][@TheSizik][Would you consider doing a short off-hours stream to show people how you do things (like metaprogramming) that you won't get to touch on in Handmade Hero?] [1:11:08][@Roots2D][Hey, love catching the stream when I can. What language do you recommend as a beginner programmer looking to get into game development?] -[1:14:51][Stream is over] +[1:14:51][Stream is over][:speech] [/video] diff --git a/cmuratori/hero/code/code204.hmml b/cmuratori/hero/code/code204.hmml index 2274663..115dc13 100644 --- a/cmuratori/hero/code/code204.hmml +++ b/cmuratori/hero/code/code204.hmml @@ -48,7 +48,7 @@ [1:11:21][handmade.cpp: Add RenderGroup->Transform.DistanceAboveTarget to PushRect] [1:14:17][handmade_render_group.cpp: Introduce CompleteUnproject] [1:22:27][Run the game and conclude that we'll want to clean up what's happening in the projection] -[1:23:49][Q&A] +[1:23:49][Q&A][:speech] [1:24:18][@ijustwantfood][The lag is real] [1:24:44][@conloncs][How will the focal length factor in? Will you have FOV stuff?] [1:26:03][@insobot][Elvin?] @@ -66,6 +66,6 @@ [1:40:48][handmade.cpp: Correctly set Transform.OffsetP] [1:41:11][Run the game and find it in the right place] [1:44:17][On getting bitten by a feature][quote 272] -[1:44:39][Lament this 2.5D nonsense] -[1:45:15][Glimpse into the future and wrap it up] +[1:44:39][Lament this 2.5D nonsense][:speech] +[1:45:15][Glimpse into the future and wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code205.hmml b/cmuratori/hero/code/code205.hmml index b0fabf3..a86eb15 100644 --- a/cmuratori/hero/code/code205.hmml +++ b/cmuratori/hero/code/code205.hmml @@ -30,7 +30,7 @@ [48:55][handmade_debug.cpp: Unproject the MouseP] [49:56][handmade_render_group.cpp: Compute UnprojectXY] [51:13][Run the game and see that we have our picking back] -[51:51][Q&A] +[51:51][Q&A][:speech] [53:15][@Mr4thDimention][I'm a little unclear about what pressure is keeping you from doing the Z math exactly like you would in 3D] [53:28][Blackboard: Conceptualising Z] [59:45][@rdwindmill][Where are you going to draw the labels for entity properties?] @@ -47,13 +47,13 @@ [1:14:02][Look forward to tomorrow's Devstreamathon[ref site="Twitch" page="Devstreamathon" - url="http://www.twitch.tv/devstreamathon"] and consider supporting Hitbox] + url="http://www.twitch.tv/devstreamathon"] and consider supporting Hitbox][:speech] [1:15:13][@actbinary][[ref site=Restream url=https://restream.io/]] [1:15:39][@SwagKitty69][Why did Jon get banned?] -[1:17:09][Wrap it up] +[1:17:09][Wrap it up][:speech] [1:18:43][Announcement: The speaker list for HandmadeCon 2015 will be announced on Monday[ref site="HandmadeCon" - url="http://handmadecon.org/"]] + url="http://handmadecon.org/"]][:speech] [/video] diff --git a/cmuratori/hero/code/code206.hmml b/cmuratori/hero/code/code206.hmml index 8ccf69f..8f72ba6 100644 --- a/cmuratori/hero/code/code206.hmml +++ b/cmuratori/hero/code/code206.hmml @@ -38,7 +38,7 @@ [56:04][simple_preprocessor.cpp: Introduce RequireToken] [56:59][simple_preprocessor.cpp: Provide the ability to print out the DEBUG_VALUE] [1:00:43][Run the preprocessor and see what happens] -[1:01:55][Q&A] +[1:01:55][Q&A][:speech] [1:02:52][@paulsm1th][It seems like you are doing recursive descent parsing. Is that how you would describe it?] [1:03:35][Blackboard: Recursive Descent Parser] [1:05:04][simple_preprocessor.cpp: Introduce a more recursive example of ParseMember] @@ -53,5 +53,5 @@ [1:18:39][@cvaucher][I'm writing a parser that looks pretty similar to this, but it runs on multi-GB files which takes a while. Any common approaches to use SIMD/multithreading to speed up text parsing? Seems more difficult since the characters aren't "independent" in the way pixels are] [1:20:18][@desophos][This stream makes me feel like an extremely inferior and incompetent programmer. Do you approve of this?] [1:22:58][@paulsm1th][How does metaprogramming change your workflow? Can you talk about incorporating generated code with the "regular" C files?] -[1:25:52][Wrap up] +[1:25:52][Wrap up][:speech] [/video] diff --git a/cmuratori/hero/code/code207.hmml b/cmuratori/hero/code/code207.hmml index aafb553..58ba761 100644 --- a/cmuratori/hero/code/code207.hmml +++ b/cmuratori/hero/code/code207.hmml @@ -49,7 +49,7 @@ [1:03:47][handmade_sim_region.h and handmade.h: Introduce counted_pointer] [1:04:43][simple_preprocessor.cpp: Note that the parser must be aware of how to handle these counted pointers] [1:05:20][On building on our knowledge to progress from basic introspection to metaprogramming] -[1:06:24][Q&A] +[1:06:24][Q&A][:speech] [1:07:22][@ChronalDragon][So when you say you've built up multiple layers of metaprogramming, do you mean your metaprograms output things like what we wrote today?] [1:07:59][@nxsy][Isn't offsetof fairly safe to rely on with remotely recent compilers?] [1:08:26][handmade.cpp: Try using offsetof] @@ -70,6 +70,6 @@ [1:24:15][@JamesWidman][I'm looking forward to additional visualizers in the debug view (e.g. a small grid view with a dot or line from (0,0) to represent a v2 along with the decimal digits). Do you think that would be worthwhile?] [1:25:28][@garryjohanson][Do you ever metaprogram the sims stuff and the job queue?] [1:27:31][@vSealos][Is there any feature you would add to Jai?] -[1:30:58][Close it down] -[1:33:14][Announcement: F2P discussion between Casey and Shawn McGrath on Thursday] +[1:30:58][Close it down][:speech] +[1:33:14][Announcement: F2P discussion between Casey and Shawn McGrath on Thursday][:speech] [/video] diff --git a/cmuratori/hero/code/code208.hmml b/cmuratori/hero/code/code208.hmml index fc0204e..ae2c8d0 100644 --- a/cmuratori/hero/code/code208.hmml +++ b/cmuratori/hero/code/code208.hmml @@ -22,7 +22,7 @@ [52:29][handmade_debug.cpp: Introduce AllocateOpenDebugBlock] [54:50][handmade_debug.cpp: Introduce DeallocateOpenDebugBlock] [56:00][Run the game and see that there's no change] -[56:20][Q&A] +[56:20][Q&A][:speech] [56:58][@ThisisAtticus][Great stream today! Could you explain how this code works?[ref site="Wikipedia" page="Fast inverse square root" @@ -48,10 +48,10 @@ [1:16:27][@elxenoaizd][Any tips on reading books? I find it really hard to read them. I do enjoy their table of contents, gets me excited, but when I read on it gets quite boring] [1:20:16][@sssmcgrath][Have you read "Linear Algebra Done Right?" by Sheldon Axler? I always recommend it to people who ask me about linear algebra] [1:22:03][@ThisisAtticus][On that note, how do you deal with some of the generally poor social skills in programming / math fields? Noticing this more and more lately, unfortunately] -[1:25:18][Safely call it a day] -[1:26:35][Announcement: F2P discussion between Casey and Shawn McGrath on Thursday] +[1:25:18][Safely call it a day][:speech] +[1:26:35][Announcement: F2P discussion between Casey and Shawn McGrath on Thursday][:speech] [1:27:23][Announcement: The speaker list for HandmadeCon 2015 will be announced next Monday[ref site="Twitter" page="@cmuratori" - url="https://twitter.com/cmuratori"]] + url="https://twitter.com/cmuratori"]][:speech] [/video] diff --git a/cmuratori/hero/code/code209.hmml b/cmuratori/hero/code/code209.hmml index 5c8d0d8..f5f3534 100644 --- a/cmuratori/hero/code/code209.hmml +++ b/cmuratori/hero/code/code209.hmml @@ -37,11 +37,11 @@ [1:03:51][handmade_platform.h: Determine that we wrap the array when we hit frame 32] [1:05:35][handmade_debug.cpp: Make RestartCollation happen one frame earlier] [1:06:06][Run the game and see that the entity picker is working] -[1:06:44][Q&A] +[1:06:44][Q&A][:speech] [1:08:29][@Zamar037][We've been on the debug code for quite a while. How much longer do you think it will take before we're finished?] [1:11:33][@Stephenlast][Do you ever use data breakpoints? I find them helpful when some value is changing somewhere but you're not sure where] [1:13:19][@JamesWidman][Does the design of this debug system differ significantly from the debug systems you've worked on for other games?] [1:13:43][@ChronalDragon][(Not SUPER on topic, feel free to skip): How do you treat GL handles in your own code? Are they handled by the asset system or by something else?] -[1:14:30][Call it] -[1:14:42][Announcement: F2P discussion between Casey and Shawn McGrath after tomorrow's stream] +[1:14:30][Call it][:speech] +[1:14:42][Announcement: F2P discussion between Casey and Shawn McGrath after tomorrow's stream][:speech] [/video] diff --git a/cmuratori/hero/code/code210.hmml b/cmuratori/hero/code/code210.hmml index fa1dda8..f40623a 100644 --- a/cmuratori/hero/code/code210.hmml +++ b/cmuratori/hero/code/code210.hmml @@ -43,7 +43,7 @@ [1:00:18][handmade_debug.cpp: Read through the routine] [1:01:35][handmade_debug.cpp: Set the Link->Children] [1:02:01][Run the game and note that we're getting a little bit closer] -[1:02:40][Q&A] +[1:02:40][Q&A][:speech] [1:03:22][@insobot][It's expected. I've got more to do?] [1:04:06][@quartertron][Why call it Sentinel instead of Head even though it is a sentinel?] [1:04:41][@theGeekPirate][What's your favourite data structure?] @@ -61,5 +61,5 @@ [1:17:13][@Ikkir_Isth][How long do you think it will take before someone makes a Linux debugger that can rival Visual Studios?] [1:17:54][@erdomina][What do you think of programming competitions? Have you participated in any?] [1:18:08][@mrbass21][What role do you think software security has in modern gaming? Is it not worth wasting CPU cycles to guard against different exploits? How good of a job is the game industry doing in implementing it and should they be doing more or less?] -[1:23:35][Close down the Q&A and get the chat link setup for Mr McGrath] +[1:23:35][Close down the Q&A and get the chat link setup for Mr McGrath][:speech] [/video] diff --git a/cmuratori/hero/code/code211.hmml b/cmuratori/hero/code/code211.hmml index 99b887c..7f5868a 100644 --- a/cmuratori/hero/code/code211.hmml +++ b/cmuratori/hero/code/code211.hmml @@ -46,7 +46,7 @@ [49:14][Debugger: Inspect Stack and Depth] [50:34][handmade_debug.cpp: Try doing RestartCollation on every frame] [52:02][Run the game and find that it was an overwriting problem] -[52:50][Q&A] +[52:50][Q&A][:speech] [53:59][@hwd2ro][Will you get back to game related coding next week?] [54:34][@fierydrake][Do you ever wear the piggie hat at work?] [54:57][@elxenoaizd][What would be the thing that would impress you on a programmer's resume?] @@ -61,5 +61,5 @@ [1:08:49][@elxenoaizd][What's more impressive: previous projects + practical experience vs college degree?] [1:09:40][@JamesWidman][Compilers generally ignore the 'register' keyword] [1:10:54][@xDeadBringerx][Ever thinking about running Handmade Hero through cachegrind?] -[1:13:05][Wind it down] +[1:13:05][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code212.hmml b/cmuratori/hero/code/code212.hmml index eea288c..bfee609 100644 --- a/cmuratori/hero/code/code212.hmml +++ b/cmuratori/hero/code/code212.hmml @@ -23,7 +23,7 @@ [44:56][Run the game see that it doesn't look very exciting] [45:09][handmade_debug.cpp: Clear the NextHotInteraction when we end] [45:47][Run the game and see that we're in much better shape] -[47:14][Q&A] +[47:14][Q&A][:speech] [47:40][@ChronalDragon][You technically have 15 more minutes since we started late] [48:25][Use the 10 remaining minutes to nefarious ends][quote 287] [48:37][handmade_debug_interface.h: Make DEBUG_HIGHLIGHTED take *Color] @@ -61,9 +61,9 @@ [1:16:12][@VeezyTreezy][The getters and setters are less performant too, right?] [1:16:21][@cubercaleb][I know you mostly work on code in smaller groups of people, although what is it like to program in teams and how does the work get split?] [1:17:10][@TheSizik][What about the downside that you don't know whether a value you're accessing does a function call or not?] -[1:17:55][Wrap this up] +[1:17:55][Wrap this up][:speech] [1:18:26][Announcement: The speaker list for HandmadeCon 2015 is up[ref site="Molly Rocket" page="HandmadeCon 2015 Schedule" - url="http://mollyrocket.com/news_0006.html"]] + url="http://mollyrocket.com/news_0006.html"]][:speech] [/video] diff --git a/cmuratori/hero/code/code213.hmml b/cmuratori/hero/code/code213.hmml index 0d1384d..0696169 100644 --- a/cmuratori/hero/code/code213.hmml +++ b/cmuratori/hero/code/code213.hmml @@ -20,7 +20,7 @@ [50:53][handmade_debug_interface.h: Implement the ability to compile out the entire debug system] [1:03:29][handmade_config.h: Manually rebuild the file] [1:05:03][Run the game and see that everything is working properly] -[1:05:29][Q&A] +[1:05:29][Q&A][:speech] [1:05:43][hmh_bot Clojure is a bad language] [1:05:58][@Psi9][Why use getkeystate() instead of WM_KEYDOWN / WM_KEYUP?] [1:07:51][@elxenoaizd][I don't have much experience in it, but you mentioned the RTTI in C++ is not as good. Could you explain a bit why?] @@ -40,5 +40,5 @@ [1:27:38][@boondoggle42][Could you list the important features a good graphical debugger should have?] [1:28:43][@gasto5][Are you one of those that thinks that previously DirectX was better than OpenGL, but now is the opposite?] [1:28:55][@Kemosabe76][Do you know how far has metaprogramming come along in other fields? I can imagine researchers using genetic algorithms to self enhance code] -[1:29:11][Spin things down] +[1:29:11][Spin things down][:speech] [/video] diff --git a/cmuratori/hero/code/code214.hmml b/cmuratori/hero/code/code214.hmml index d2d2065..a85b8e1 100644 --- a/cmuratori/hero/code/code214.hmml +++ b/cmuratori/hero/code/code214.hmml @@ -32,7 +32,7 @@ [52:22][win32_handmade.cpp: Revert the number of threads used] [52:55][Debugger: Break into DEBUG_IF and Go to Disassembly] [55:21][handmade_debug.cpp: Find that RestartCollation keeps rereading the events and adding them] -[58:57][Q&A] +[58:57][Q&A][:speech] [59:23][@desuused][Variable initiation hack in DEBUG_IF macro makes my internal code quality kitten sad. Would it be possible to move that initiation to struct ""method""?] [59:55][@btnGames][Persisting the DEBUGValue between live code loading is great, I didn't understand what you were doing but then I got it with the demo, really cool. I had conflated the value of a variable with the value of debug of the variable. Small addition for a huge benefit] [1:02:20][@btnGames][Are you sad that you didn't fix Collation? If no more questions come in it would be neat to see it now, so you're not sad] @@ -47,5 +47,5 @@ [1:11:38][@Manicthenobody][How did you keep up that awesome beat just now?] [1:11:51][@thenightysfly][What type of games do you prefer?] [1:12:39][@elxenoaizd][Not elven but elzen] -[1:13:08][Wind it down] +[1:13:08][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code215.hmml b/cmuratori/hero/code/code215.hmml index 2ababfa..f0c9d7f 100644 --- a/cmuratori/hero/code/code215.hmml +++ b/cmuratori/hero/code/code215.hmml @@ -29,7 +29,7 @@ [1:08:56][Run the game and see that we still hit the Arena->Size assertion] [1:09:41][handmade_debug_interface.h: Ensure that the debug system can be compiled out] [1:10:41][Run the game and see that we're back to our super speedy software rendered world] -[1:10:53][Q&A] +[1:10:53][Q&A][:speech] [1:12:51][@evraire][Once collation is done, will we get hierarchies going next?] [1:13:51][@quartertron][Are you going to do some tricks for compile time string searches or something?] [1:14:04][@groggeh][The last software company I worked at, you would fail a code review MISERABLY right now. How do you feel about those practices?] @@ -42,5 +42,5 @@ [1:22:06][@Mysterious_J_][I've never thought about metaprogramming much before, and it sounds really interesting. Do you have any recommendations for more information on it?] [1:22:30][@LOstTGM][What happens with the particles' (more simplified) collision detection if you at the same time hold and drag the window's title bar, since the game timer will be paused when the window is in the drag / size message loop built into Windows?] [1:24:32][@Dragonmaster047][How would you "abstract" a math library as in, the game / engine uses a v2 / v3 / v4 class and you have to use graphics libs with predefined vector classes they use for rendering but you don't want to couple your game with one of these libs?] -[1:25:27][Close down] +[1:25:27][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code216.hmml b/cmuratori/hero/code/code216.hmml index 81ab624..680019c 100644 --- a/cmuratori/hero/code/code216.hmml +++ b/cmuratori/hero/code/code216.hmml @@ -26,7 +26,7 @@ [1:00:51][handmade_debug.cpp: Continue fixing compile errors] [1:01:23][handmade_debug.cpp: #define DebugPushStruct and consider building in the Push functions to the arenas proper] [1:02:52][Compile and run the game, run out of memory and hit our "Not implemented"] -[1:03:48][Q&A] +[1:03:48][Q&A][:speech] [1:04:15][@m1el][Have you heard of the DTrace tool? It allows dynamic tracing on running binaries and also kernel! (Not available on windows, though)] [1:04:38][@elxenoaizd][You mentioned in the prestream a 'dynamic' memory_arena. How does that actually work since we allocate memory only once? What happens when the arena is full?] [1:05:45][@mojo123X][You've mentioned the term "Collation" on this episode and several previous episodes. What exactly do you mean when you use that term?] @@ -46,12 +46,12 @@ [1:19:33][@andsz_][There are libs that allow allocating and freeing multiple chunks of memory during runtime. How would you specify malloc / free for them in an arena-based game like Handmade Hero?] [1:21:26][@jim0_o][The int use in question was a lot in SIMD'ing DrawRectangle -> DrawRectangleQuickly, and my version of the code is crashing on "Access violation reading location" when casting Pixel to __m128i at the start. Could iterating with int vs int32 be the reason?] [1:22:11][@elxenoaizd][What do you think of pass by reference and references? I think they obfuscate the code because it's harder now to see from the calling site to find out if an object is passed by value (copy) or we are actually passing an address of it to modify it] -[1:25:47][Wind it down] +[1:25:47][Wind it down][:speech] [1:26:54][Announcement: Handmade Hero Forums are now hosted on HandmadeDev.org[ref site="HandmadeDev" page="Handmade Hero Central" - url="https://hero.handmadedev.org/jace/schedule/"]] + url="https://hero.handmadedev.org/jace/schedule/"]][:speech] [1:28:04][Announcement: HandmadeCon 2015[ref site="HandmadeCon" - url="http://handmadecon.org/"]] + url="http://handmadecon.org/"]][:speech] [/video] diff --git a/cmuratori/hero/code/code217.hmml b/cmuratori/hero/code/code217.hmml index 35b560d..3177d6e 100644 --- a/cmuratori/hero/code/code217.hmml +++ b/cmuratori/hero/code/code217.hmml @@ -23,7 +23,7 @@ [59:16][handmade_debug_interface.h: #define UniqueFileCounterString] [1:01:22][handmade_debug_interface.h: Remove FileName and LineNumber] [1:01:54][handmade_debug.cpp: Introduce HashThisEvent but turn off HANDMADE_INTERNAL] -[1:02:22][Q&A] +[1:02:22][Q&A][:speech] [1:03:53][@elxenoaizd][For UI programming, what do you think of the MVC (Model View Controller) pattern? Is it of any practical use?] [1:06:47][@sssmcgrath][Could you talk a bit about other debug system-y stuff you've done before? I've done all sorts of debug systems, not much like what you're doing now, and I'm curious what other stuff you may have done (just high level description, one-sentence descriptions are fine). Thanks!] [1:11:13][@Kr1zz0][Can you explain what the macro-nastiness exactly does? Why do you have two underscore "levels"?] @@ -33,6 +33,6 @@ [1:20:21][@elxenoaizd][What if we just blur the edges of the shadows? (Gaussian blur)] [1:21:03][@elxenoaizd][Do you think namespaces actually solve the problem of naming collisions? Or there's no need for them and the usual C-style 'SystemName_Function' suffices?] [1:21:32][@cubercaleb][Yes, but how is Windows any different, don't you need to compile Windows programs on Windows?] -[1:26:10][On overcoming world hunger][quote 301] -[1:27:02][Close it down] +[1:26:10][On overcoming world hunger][:speech][quote 301] +[1:27:02][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code218.hmml b/cmuratori/hero/code/code218.hmml index 241c1f6..dd8a68f 100644 --- a/cmuratori/hero/code/code218.hmml +++ b/cmuratori/hero/code/code218.hmml @@ -44,7 +44,7 @@ [53:57][Debugger: Step into StoreEvent and ensure that everything's still working properly] [55:10][Warn against eating more lunch than we can reasonably digest][quote 316] [55:43]["There's always lunch tomorrow"][quote 317] -[56:02][Q&A] +[56:02][Q&A][:speech] [56:32][@Miblo][When we come to do the AI system, do you think it'd be reasonable to give the dudes a "gather lunch" behaviour?] [56:50][@insofaras][What did you have for lunch?] [57:24][@doritosranger][Imagine that you're young again and you're eating your lunch and you can choose between a C and Java-like language in what you can work with memory in much C-like way but that language would say you how to implement some ideas (like a Python is about line offsets, which is not good I think)? What would you choose then and why?] @@ -67,6 +67,6 @@ [1:14:42][@ImJustRoids][Do you think there really hasn't been a good language since C, period? Or just that there haven't been any good languages that do what C can, like a good "competitor"? For example, if someone needs a small app, use C regardless or some higher languages are good for that (in your opinion)?] [1:16:00][@insofaras][What if it doesn't pool strings and two same string literals get different addresses? Would the system lose its lunch?] [1:17:06][Pseudonym73: Note that "good language" is relative to what you're doing. I've done things in Prolog that I wouldn't want to do in C] -[1:20:14][Wind down] -[1:22:34]["Don't forget to eat lunch"][quote 318] +[1:20:14][Wind down][:speech] +[1:22:34]["Don't forget to eat lunch"][:speech][quote 318] [/video] diff --git a/cmuratori/hero/code/code219.hmml b/cmuratori/hero/code/code219.hmml index d5006b8..05a406f 100644 --- a/cmuratori/hero/code/code219.hmml +++ b/cmuratori/hero/code/code219.hmml @@ -45,7 +45,7 @@ [1:01:43][Debugging why multiple interactions are being highlighted as hot] [1:02:11][Found the bug] [1:03:08][Everything running correctly] -[1:03:45][Q&A] +[1:03:45][Q&A][:speech] [1:04:11][@d7samurai][was this the 'depression oriented programming' approach i keep hearing about?] [1:04:32][@m1el][you pass string length together with pointer to string data in several places. Do you think it would be better to create a string struct that holds length and a data point?] [1:05:13][@vidster88][You've talked a lot about languages lately, have you taken a look at Swift at all? Thoughts?] @@ -72,6 +72,9 @@ [1:23:46][@jayp2][Pseudo coder question: How would one go about learning Assembly language? And are compilers/linkers written in that?] [1:26:12][@reimaginedgames][would you ever think about using C# or python?] [1:26:27][@yoonfan][how do you approach getting an overview of a large code base, like clang or the linux kernel?] -[1:27:28][Wind down] -[1:28:06][Support episode guide extraordinaire miblo: https://www.patreon.com/miblo] +[1:27:28][Wind down][:speech] +[1:28:06][Support episode guide extraordinaire @Miblo[ref + site=Patreon + page="Matt Mascarenhas is creating annotations for Handmade Hero" + url=https://www.patreon.com/miblo]][:research] [/video] diff --git a/cmuratori/hero/code/code220.hmml b/cmuratori/hero/code/code220.hmml index 7c1b7bd..9eddb56 100644 --- a/cmuratori/hero/code/code220.hmml +++ b/cmuratori/hero/code/code220.hmml @@ -52,7 +52,7 @@ [1:02:10][Noticing problems related to the debug_id changing every frame for data block values] [1:03:55][Solving the problem by using event GUIDs to get stable debug_ids for data block values instead of the associated debug_stored_event address which wasn't stable] [1:05:42][Game running with the problem resolved] -[1:06:41][Q&A] +[1:06:41][Q&A][:speech] [1:07:06][@plain_flavored][What is the debug collator?] [1:08:33][@longboolean][https://hero.handmadedev.org/forum/code-discussion/902-day-211-gcc-clang-build-report] [1:14:10][@ChronalDragon][How do game devs you work with typically handle temporary / non-shipping sound effects?] @@ -66,5 +66,5 @@ [1:23:49][@elxenoaizd][If a programming job wasn't available to you, what type of work would you be interested in doing other than programming for a living?] [1:24:10][@actbinary][What do you think of dlc then? ;)] [1:26:41][@BrutalABK][Do you play MMOs, if so, how do you feel about the way they do their leveling?] -[1:26:52][Wind down] +[1:26:52][Wind down][:speech] [/video] diff --git a/cmuratori/hero/code/code221.hmml b/cmuratori/hero/code/code221.hmml index 1162957..caae1ba 100644 --- a/cmuratori/hero/code/code221.hmml +++ b/cmuratori/hero/code/code221.hmml @@ -35,7 +35,7 @@ [47:59][handmade_cutscene.cpp: Place the layers] [57:03][Note that the only problem we have left is that we're zooming towards nothing] [57:43][handmade_cutscene.cpp: Introduce CameraOffset and set the focus point] -[1:00:31][Q&A] +[1:00:31][Q&A][:speech] [1:01:31][@AlephAnt][Would you normally want to get the position / scale for each layer from the artist? If so, how would you go about doing that?] [1:03:19][@StrickenDown][I am new to programming and know intermediate Java only. Can you explain what you use emacs for if you're using Visual Studio?] [1:03:49][@cubercaleb][I think you should move the skylight up a tad bit] @@ -74,5 +74,5 @@ [1:26:58][@ChronalDragon][It may be obvious but there is an entire class of programmers that seem to think otherwise] [1:27:12][@CaptainKraft][Did you notice the triforce in the windows?] [1:27:43][@Pseudonym73][One of my mentors used to say that there should be a book called "Algorithms, Data Structures, and Tradeoffs"] -[1:28:01][Wrap things up] +[1:28:01][Wrap things up][:speech] [/video] diff --git a/cmuratori/hero/code/code222.hmml b/cmuratori/hero/code/code222.hmml index c4b9a98..32348ce 100644 --- a/cmuratori/hero/code/code222.hmml +++ b/cmuratori/hero/code/code222.hmml @@ -28,7 +28,7 @@ [58:01]["That is video games"][quote 336] [58:43][handmade_cutscene.cpp: Compose Shot 6] [59:33][When Krampus comes into the picture][quote 337] -[1:05:21][Q&A] +[1:05:21][Q&A][:speech] [1:05:52][@Fyoucon][Why not pass how long each cutscene is instead of it being the same for all cutscenes?] [1:06:26][@graeme7][For the weird camera movement scene what do you think about interpolating against a curve instead of linearly?] [1:07:08][@ttbjm][Yangtian's art is awesome!] @@ -56,5 +56,5 @@ [1:33:08][win32_handmade.cpp: Temporarily switch to using a smaller backbuffer] [1:34:28][@Mr4thDimention][Floor and Ceil are difficult?] [1:35:39][@actbinary][Why do we want to redo sin()?] -[1:37:17][Call it a night] +[1:37:17][Call it a night][:speech] [/video] diff --git a/cmuratori/hero/code/code223.hmml b/cmuratori/hero/code/code223.hmml index 4ca6847..7374ede 100644 --- a/cmuratori/hero/code/code223.hmml +++ b/cmuratori/hero/code/code223.hmml @@ -13,7 +13,7 @@ [46:37][Debugger: Step into RenderCutscene] [47:37][handmade_cutscene.cpp: Introduce b32 PrettyStupid to indicate the end of the cutscene] [48:08][Run the game and see our cutscene happening] -[50:56][Q&A] +[50:56][Q&A][:speech] [51:14][@Evine][Will there be hat DLC?] [51:45][@abnercoimbre][Wait for more Q's] [51:49][@CurlingChamp][Do you prefer OpenGL or DirectX?] @@ -65,5 +65,5 @@ [1:25:22][@cubercaleb][Does bi-linear filtering hold up in 3D?] [1:26:19][@Imapushover][Handmade cut scene screensaver for Christmas?] [1:26:39][@Miblo][Yeah, as far as I can tell, you set the NearClipPlane pretty darn arbitrarily] -[1:27:00][Call it day] +[1:27:00][Call it day][:speech] [/video] diff --git a/cmuratori/hero/code/code224.hmml b/cmuratori/hero/code/code224.hmml index 5032c47..309a76c 100644 --- a/cmuratori/hero/code/code224.hmml +++ b/cmuratori/hero/code/code224.hmml @@ -43,7 +43,7 @@ [50:56][handmade_cutscene.cpp: Note that the cutscene will no longer be hot reloadable] [51:59][handmade_cutscene.cpp: AdvanceCutscene to allow multiple cutscenes] [52:29][Run the game, test our new functionality and consider making the cutscenes reset] -[54:40][Q&A] +[54:40][Q&A][:speech] [55:17][@insofaras][Would adding a BlockUntilLoaded style function be a good idea to make sure even slower computers have all layers loaded before the scene starts?] [55:54][handmade_cutscene.cpp: Turn off the prefetches] [57:07][handmade.cpp: Check for AllResourcesPresent before doing TiledRenderGroupToOutput] @@ -56,5 +56,5 @@ site=MSDN page="UpdateLayeredWindow function" url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms633556]] -[1:16:55][Shut it down] +[1:16:55][Shut it down][:speech] [/video] diff --git a/cmuratori/hero/code/code225.hmml b/cmuratori/hero/code/code225.hmml index dc32f67..188cb73 100644 --- a/cmuratori/hero/code/code225.hmml +++ b/cmuratori/hero/code/code225.hmml @@ -30,7 +30,7 @@ [46:46][win32_handmade.cpp: Introduce InitFader, BeginFadein and BeginFadeOut] [53:37][win32_handmade.cpp: Only do BeginFadeToDesktop if Win32Fade_Inactive] [54:28][Run the game and see that we're working properly] -[54:59][Q&A] +[54:59][Q&A][:speech] [55:44][@m1el][Casey, you need one more state to wait for alpha-enabled window to show, because you might have the same bug when you fade to desktop] [57:25][@SteelGolem][Your fading setup seems overcomplicated to me. Why not just take a screenshot, blit that to the back buffer, and fade that? What platforms wouldn't that work for?] [1:00:26][@insofaras][Why are you using a second window for the fade in, instead of just fading in the main window?] @@ -43,5 +43,5 @@ [1:10:35][handmade_cutscene.cpp: Implement fade to black between cutscene shots] [1:12:56][Run the game and see that fade] [1:13:27][Note that the alpha must be gamma corrected] -[1:16:41][We are out of time] +[1:16:41][We are out of time][:speech] [/video] diff --git a/cmuratori/hero/code/code226.hmml b/cmuratori/hero/code/code226.hmml index c859aad..cd8367e 100644 --- a/cmuratori/hero/code/code226.hmml +++ b/cmuratori/hero/code/code226.hmml @@ -25,7 +25,7 @@ [1:01:46][Adjusting the creation of memory arenas in the initialization code] [1:05:14][Fixing the remaining compile errors] [1:06:41][Out of time, running the game with the world mode currently inaccessible until the cleanup work is completed at a later date] -[1:07:08][Q&A] +[1:07:08][Q&A][:speech] [1:08:07][@actbinary][How do the memory areas work?] [1:08:31][@blah238][Well since no one's asking, have you heard about AMD open sourcing a lot of their GPU stuff?] [1:09:48][@XEnDash][Should the world mode changing be prefetched like the cut-scenes changing?] @@ -34,5 +34,5 @@ [1:11:18][@evraire][Sorry slow night, the chat erupted into a flame war over the exclusion of option menus in games \:-P] [1:11:36][@Culver_Fly][I wonder if there's a specific reason you put the 3 game_mode structs into a union?] [1:11:48][@elxenoaizd][So I have this generic USB controller that's not being detected by XInput, any ideas how to go about detecting it? Use DirectInput? Or try to use an Xbox controller emulator or something?] -[1:12:53][Wrap up] +[1:12:53][Wrap up][:speech] [/video] diff --git a/cmuratori/hero/code/code227.hmml b/cmuratori/hero/code/code227.hmml index bd8d7df..138d685 100644 --- a/cmuratori/hero/code/code227.hmml +++ b/cmuratori/hero/code/code227.hmml @@ -24,7 +24,7 @@ [53:00][Testing the title-screen code] [53:44][Quickly debugging and fixing a cut-scene crash related to mode switching] [55:29][Game running with all 3 game modes working as intended] -[56:40][Q&A] +[56:40][Q&A][:speech] [56:57][@SoysauceTheKid][Could you leverage your debug code when trying to find the right values you want for the intro cutscene in realtime instead of recompiling?] [57:20][@garlandobloom][Add some credits and boom! We're done!] [57:37][@Danyguag][How do you terminate or end each thread at the end?] @@ -39,5 +39,5 @@ [1:08:44][@SteelGolem][Do you generally do cutscene code before gameplay code when you're working on a game?] [1:12:32][@elxenoaizd][Are we in a point where we're close to have to need to implement mixins?] [1:12:53][@pragmascrypt][Will c++17 modules solve the #include dependency problem?] -[1:15:51][Wrap up, episode guide info] +[1:15:51][Wrap up, episode guide info][:speech] [/video] diff --git a/cmuratori/hero/code/code228.hmml b/cmuratori/hero/code/code228.hmml index 4084c6b..7c76bfe 100644 --- a/cmuratori/hero/code/code228.hmml +++ b/cmuratori/hero/code/code228.hmml @@ -26,7 +26,7 @@ [53:11][handmade_render_group.h: Add PushBufferElementCount to render_group to let us know how many elements have been pushed] [55:27][handmade_render_group.cpp: Introduce struct tile_sort_entry and use it in RenderGroupToOutput] [1:00:55][Run the game and see that it still works fine] -[1:01:31][Q&A] +[1:01:31][Q&A][:speech] [1:02:06][@serge_rgb][Could you tell us roughly how the expanding arena would be implemented?] [1:02:57][@insofaras][Is the lower level memory arena thing you mentioned for PC basically just what malloc / VirtualAlloc does?] [1:03:25][@SimonDenton][I got the K & R book to learn C. Any other useful resources? I take online stuff with a grain of salt] @@ -47,5 +47,5 @@ [1:12:08][@actbinary][Can you give a quick overview of the way memory is managed at the moment? PushArena / BeginTempArena, etc?] [1:12:46][Blackboard: Memory Arenas] [1:14:21][@Alfwich][Are you still using .bat file compilations?] -[1:14:45][Wrap it up] +[1:14:45][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code229.hmml b/cmuratori/hero/code/code229.hmml index 9cc7ba2..ed7ce09 100644 --- a/cmuratori/hero/code/code229.hmml +++ b/cmuratori/hero/code/code229.hmml @@ -34,7 +34,7 @@ [53:08][Run the game and see that the sorting is working properly] [53:59][handmade_world_mode.cpp: Increase the zBias and then apply the bias in the correct place] [56:00][Run the game and see that it all works correctly now (apart from the torso being in front all the time)] -[56:28][Q&A] +[56:28][Q&A][:speech] [57:20][@Danyguag][Do you know the Vulkan release date?] [57:56][@insobot][Well?] [58:09][@grimjoey][Can you talk about pros and cons of heapsort and quicksort, and / or explain quaternions?] @@ -47,6 +47,6 @@ [1:07:07][@CFlickster][Are we going raid Shawn McGrath's stream tomorrow night after this one?] [1:07:31][@slashac][How do you disable syntax highlight in Emacs while keeping comment and macro highlighted?] [1:08:50][@TheLagScript][Is your Visual Studio "custom" theme anywhere? I really like it] -[1:09:54][Wrap it up] -[1:11:20][Shout out to HandmadeDev, who are building a community site for projects like Handmade Hero, with nicer forums] +[1:09:54][Wrap it up][:speech] +[1:11:20][Shout out to HandmadeDev, who are building a community site for projects like Handmade Hero, with nicer forums][:speech] [/video] diff --git a/cmuratori/hero/code/code230.hmml b/cmuratori/hero/code/code230.hmml index 55cb1a0..e571a18 100644 --- a/cmuratori/hero/code/code230.hmml +++ b/cmuratori/hero/code/code230.hmml @@ -26,7 +26,7 @@ [45:18][handmade_render_group.h: Introduce DefaultUprightTransform and DefaultFlatTransform] [46:59][handmade_render_group.cpp and handmade_debug.cpp: Propagate these changes] [59:51][Run the game and find that everything is exactly the same] -[1:00:44][Q&A] +[1:00:44][Q&A][:speech] [1:01:25][@abnercoimbre][Brace yourself] [1:01:53][@Connor_Rentz][What is your preferred sorting method?] [1:03:33][@LaresYamoir][Hi Casey. I'm currently working on an OpenGL framework for games. Wanted to ask whether I can use the code up to Day 023 (Live Code Editing), with the intend of making a commercial game eventually with it. Might be important to note that I'm also streaming, so the code might be visible sometimes when I stream framework development] @@ -47,5 +47,5 @@ [1:22:41][@quartertron][That's what I was afraid of but thought maybe you had some trick like a messed up precomputed alpha] [1:23:17][@ttbjm][I know we just got over the holiday break, but will there be a break in Handmade Hero when The Witness launches? If it's a possibility, it might be better to ask the community if they want that] [1:23:36][@Robrobby][Are you productive / feel good at programming no matter how many hours you work per week?] -[1:24:41][Close up shop and glimpse into the future] +[1:24:41][Close up shop and glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code231.hmml b/cmuratori/hero/code/code231.hmml index 2648c73..7d5b50b 100644 --- a/cmuratori/hero/code/code231.hmml +++ b/cmuratori/hero/code/code231.hmml @@ -23,7 +23,7 @@ [1:04:30][Blackboard: Compare these two algorithms] [1:07:08][Blackboard: Divide and conquer algorithms are O(n log n)] [1:08:35][Blackboard: Solidify the concept of the merge sort algorithm and "dynamic programming"] -[1:14:28][Q&A] +[1:14:28][Q&A][:speech] [1:14:56][@quartertron][NP stands for Nondeterministic Polynomial. Plus some other minor problems. Otherwise, well done] [1:16:39][@cubercaleb][For the record the remark I made earlier about Rust was not serious. Also, isn't mergesort n*log(n)?] [1:17:08][@Longboolean][So unit testing a function that computes a path for the traveling salesman problem would require writing the algorithm twice, the second one testing the first?] @@ -43,5 +43,5 @@ [1:33:54][@Connor_Rentz][By the way, 8^2 doesn't equal 16] [1:37:31][@quartertron][I shall dig through my copy of Computers and Intractability by Gary and Johnson tonight] [1:37:41][@quartertron][Hmm, first sentence contains the word whimsical so it's looking good so far] -[1:38:09][Wrap up with a recap] +[1:38:09][Wrap up with a recap][:speech] [/video] diff --git a/cmuratori/hero/code/code232.hmml b/cmuratori/hero/code/code232.hmml index 7d21680..542df9c 100644 --- a/cmuratori/hero/code/code232.hmml +++ b/cmuratori/hero/code/code232.hmml @@ -21,7 +21,7 @@ [50:45][Blackboard: Using randomness to potentially improve the running time of algorithms] [52:21][Blackboard: Radix sort] [57:43][Blackboard: (Pseudo) Insertion sort] -[1:00:34][Q&A] +[1:00:34][Q&A][:speech] [1:01:28][@SnowyCrystalz][So why would you not always do radix sort with a sort(sizeof(), data_)?] [1:01:46][Blackboard: On using the most appropriate sorting algorithm for the dataset] [1:12:12][@SvK151][Any news on potential Pat Wyatt guest stream to go more in-depth with the network stuff?] @@ -42,5 +42,5 @@ [1:25:44][@NoRaD91][I mean, how you actually went about solving the problems, it seems so close for weeks, then... cliffhanger] [1:27:01][@SnowyCrystalz][I read a post the other day that said syntax coloring is bad for programming practices and enforces skimming rather then understanding. Do you agree or not?] [1:27:59][@NoRaD91][Now I know that I have to buy a game to find out, that's fine. Thank you] -[1:29:14][Wind down] +[1:29:14][Wind down][:speech] [/video] diff --git a/cmuratori/hero/code/code233.hmml b/cmuratori/hero/code/code233.hmml index 997b25d..316e22c 100644 --- a/cmuratori/hero/code/code233.hmml +++ b/cmuratori/hero/code/code233.hmml @@ -26,10 +26,10 @@ [1:10:43][Blackboard: On the apparent need to store those back pointers] [1:13:15][handmade_render_group.cpp: Make MergeSort take some temporary storage and rewrite SortEntries to use that storage] [1:19:29][Debugger: Hit an assertion before fixing the test and seeing that the sort is correct] -[1:23:49][Q&A] +[1:23:49][Q&A][:speech] [1:24:09][@insofaras][I didn't look this up so it might not work, but came up with: whenever an element from the upper half is chosen, put it in place in the lower half, shift the upper half down to fill the space that the chosen element used to take up, and store the non-chosen element from the lower half in the new space at the end of the upper half, setting the lower half's read pointer to that end bit. Thoughts?] [1:25:08][@AlephAnt][Off-topic, but I made a post about the 2^(2^n)) arguments for TSP on the forums, if you're interested] [1:25:19][@robertogracia][Could you post the bit of rotation math in the pre-stream in the Youtube Channel?] [1:25:38][@fierydrake][One of the variants in the Wikipedia article claims only one slot + O(1) extra pointers, required.] -[1:28:02][Wrap it up] +[1:28:02][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code234.hmml b/cmuratori/hero/code/code234.hmml index 0926ccd..073d846 100644 --- a/cmuratori/hero/code/code234.hmml +++ b/cmuratori/hero/code/code234.hmml @@ -23,7 +23,7 @@ [55:39][handmade_render_group.cpp: Feed some basic values to SortEntries and inspect them] [1:00:41][Baby Owl of Shame Moment: We need to iterate on the ByteIndex in eights] [1:01:33][Run the game and see that it works now] -[1:02:26][Q&A] +[1:02:26][Q&A][:speech] [1:02:54][@ratchetfreak][Why didn't you build merge sort from the bottom up? It makes ping-ponging the buffers much easier] [1:03:56][@fod669][Your radix sort looks like it's O(8n) because you're doing two passes over the list per byte. Couldn't you make it O(5n) by getting all the offsets / counts in one pass at the cost of 3 more 256 element arrays?] [1:06:19][@elxenoaizd][Off-topic: I'm a bit confused about axis-angle rotations vs quaternion rotations. I thought quaternions do represent an angle and axis of rotation. What's the difference?] @@ -33,5 +33,5 @@ [1:10:17][Blackboard: "exp map"] [1:11:53][@insofaras][I noticed the frame times are growing quite large now. Are you planning to optimize the software renderer further or switch to a hardware accelerated scheme?] [1:12:25][win32_handmade.cpp: Switch down to 960x540, disable the debug system and run the game] -[1:14:13][Shut down the stream] +[1:14:13][Shut down the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code235.hmml b/cmuratori/hero/code/code235.hmml index 9475217..fd1a108 100644 --- a/cmuratori/hero/code/code235.hmml +++ b/cmuratori/hero/code/code235.hmml @@ -18,7 +18,7 @@ page="PIXELFORMATDESCRIPTOR" url="https://msdn.microsoft.com/en-us/library/dd368826.aspx"]] [44:08][win32_handmade.cpp: Initialise this struct] -[56:19][Q&A] +[56:19][Q&A][:speech] [56:29][@pragmascrypt][Funny the pink didn't show up on the stream. OBS problem?] [56:35][@Connor_Rentz][We all just saw a black screen, not a pink screen...] [57:03][@cubercaleb][According to this you should use 32 for the ColorBit[ref @@ -51,5 +51,5 @@ [1:17:54][@slashac][How bad is an if statement in a shader?] [1:18:13][@Vidster88][Have you ever programmed for a console?] [1:18:42][@Longboolean][Linux has windows vista beat] -[1:19:50][Wind it down] +[1:19:50][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code236.hmml b/cmuratori/hero/code/code236.hmml index 8fad6cc..e50730c 100644 --- a/cmuratori/hero/code/code236.hmml +++ b/cmuratori/hero/code/code236.hmml @@ -17,7 +17,7 @@ [41:16][Blackboard: How we program for the GPU] [46:14][Blackboard: "Pushbuffer"] [53:26][Blackboard: Plan for tomorrow] -[56:38][Q&A] +[56:38][Q&A][:speech] [57:04][@ratchetfreak][You can instead of two triangles use a single triangle twice as big. It avoids the overdraw at the diagonal] [58:33][@kknewkles][Quick CPU question: All it does on barebones physics level is run electrons through if-statements, right? (Go left, go right, etc., with transistors)] [59:34][@NoRaD91][Can't you run a Xeon Phi as your main processor, or did they make them dedicated only? Not like price / performance makes sense there] @@ -48,5 +48,5 @@ [1:26:29][@cubercaleb][Restrict doesn't seem to work with vs2013 / 2015] [1:26:48][@NoRaD91][Isn't Restrict, like, stupid limited though? And you don't have Alias (one that's definitive at least)] [1:27:18][@Neitchzehrer][Why is it that games get more difficult to play as Windows OS gets more advanced, i.e. playing a game from Windows XP on Windows 7?] -[1:28:00][Wind down] +[1:28:00][Wind down][:speech] [/video] diff --git a/cmuratori/hero/code/code237.hmml b/cmuratori/hero/code/code237.hmml index aa024cd..d7f9c2c 100644 --- a/cmuratori/hero/code/code237.hmml +++ b/cmuratori/hero/code/code237.hmml @@ -28,7 +28,7 @@ [1:01:14][win32_handmade.cpp: Explain these parameters] [1:04:34][Run the game and see that we actually are there yet] [1:04:49]["It's all a lie"][quote 354] -[1:06:17][Q&A] +[1:06:17][Q&A][:speech] [1:06:56][@ratchetfreak][You used static instead of local_persist for Init] [1:07:04][win32_handmade.cpp: Introduce global_variable GLuint BlitTextureHandle] [1:08:32][@nxsy][Can we verify the vsync somehow?] @@ -46,5 +46,5 @@ [1:22:39][@sssmcgrath][I dunno if this is applicable to the last question, I literally just got here, but glTexSubImage2D could be faster than glTexImage2D] [1:23:03][Blackboard: glTexImage2D vs glTexSubImage2D] [1:29:26][@quartertron][At what point in that chain of gl commands does the card actually get involved? Command dependent? Driver dependent?] -[1:30:02][Wrap it up] +[1:30:02][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code238.hmml b/cmuratori/hero/code/code238.hmml index d883a36..4841605 100644 --- a/cmuratori/hero/code/code238.hmml +++ b/cmuratori/hero/code/code238.hmml @@ -20,7 +20,7 @@ [47:54][Run the game and see that everything does not just work] [48:13][Blackboard: Mathematical vs Computational matrix multiplication] [53:26][win32_handmade.cpp: Re-encode the Proj array for OpenGL's benefit] -[56:17][Q&A] +[56:17][Q&A][:speech] [57:04][@Insobot][I'm gonna start? Yeah i installed a driver software company. Kapp?] [57:16][@Boorocks998][What keyboard layout do you use?] [57:27][@cubercaleb][Will handmade_opengl.cpp be included in the platform layer or game layer?] @@ -33,5 +33,5 @@ [1:03:06][@LOstTGM][I feel uncomfortable with floating points representing pixels. Have you ever had problems with OpenGL and floating point values, like passing them to shaders, or texture coordinates?] [1:05:25][@AdiAdiABXze][Do you use any EBO (element buffer object) or VBO (vertex buffer object) in your OpenGL code? If no, why?] [1:08:35][@LOstTGM][Did you do your own glOrtho call when you set up the projection matrix? Also, thanks for all the matrix explanations] -[1:11:56][Stream has ended] +[1:11:56][Stream has ended][:speech] [/video] diff --git a/cmuratori/hero/code/code239.hmml b/cmuratori/hero/code/code239.hmml index 8054ab6..54517b4 100644 --- a/cmuratori/hero/code/code239.hmml +++ b/cmuratori/hero/code/code239.hmml @@ -28,7 +28,7 @@ [41:56][Run the game again and note that we look a lot more like the software renderer, but that our ground chunks are now messed up] [46:47][Describe the problems with the current architecture, enabling the debug system in the process] [50:56][Blackboard: The previous and new flows of data] -[55:21][Q&A] +[55:21][Q&A][:speech] [56:12][@Cynokron][Why did you choose OpenGL over DirectX?][quote 360] [1:00:34][@TheSizik][Did you notice that the ground tiles changed when you introduced sorting?] [1:01:18][@Mr4thDimention][I've asked this before, but I want to hear your case again, what specific things make a data-protocol based interface better than one with function calls?] @@ -46,5 +46,5 @@ [1:20:26][@BradSheridanMN][You stated that the APIs are very similar, but is there a visual effect that can be accomplished on DirectX and not on OpenGL or vice versa?] [1:21:00][@andsz_][Is there a good reason why windows OpenGL headers only offer the old legacy stuff while other platforms add new stuff?] [1:21:53][@cubercaleb][At some point can you go over the pros and cons of the different graphics APIs?] -[1:25:01][Call it a day] +[1:25:01][Call it a day][:speech] [/video] diff --git a/cmuratori/hero/code/code240.hmml b/cmuratori/hero/code/code240.hmml index 60d4e82..9e7331e 100644 --- a/cmuratori/hero/code/code240.hmml +++ b/cmuratori/hero/code/code240.hmml @@ -12,7 +12,7 @@ [40:47][handmade_render_group.cpp Work through the compile errors] [58:19]["These ground chunks have been nothing but annoying the entire time..."][quote 362] [1:00:54][handmade.cpp: Continue cleaning up the compile errors] -[1:12:26][Q&A] +[1:12:26][Q&A][:speech] [1:13:10][@mmozeiko][So no more hot code reloading for renderer code?] [1:14:02][@kknewkles][Did you see the Handmade Quake? Can you confirm whether it's of Handmade quality?] [1:14:18][@cubercaleb][Casey, you seem to have a grudge for the ground chunks. Do you really hate them that much?] @@ -22,5 +22,5 @@ [1:17:23][build.bat: Leave a note from The Management] [1:18:15][@slay3rk][Why are you wearing earbuds? Are you listening to something?] [1:18:28][@kknewkles][Would you at some point compile a list of "stuff programmers should know"? I'd like some beginner level pointers like "these are algorithms / algorithm types you should know", sorting being one type and such] -[1:19:51][Wrap it up] +[1:19:51][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code241.hmml b/cmuratori/hero/code/code241.hmml index 098935f..67048bc 100644 --- a/cmuratori/hero/code/code241.hmml +++ b/cmuratori/hero/code/code241.hmml @@ -37,7 +37,7 @@ [1:01:40][Blackboard: ARB - "Architecture Review Board"] [1:02:46][win32_handmade.cpp: Comment out the checks to see if the extensions are available] [1:03:34][Run the game and find that we have actual sRGB rendering happening] -[1:04:35][Q&A] +[1:04:35][Q&A][:speech] [1:05:35][@insofaras][Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?] [1:06:08][@TheSizik][Can you fix the Santa sorting?] [1:06:20][handmade_cutscene.cpp: Fix the Santa sorting] @@ -64,5 +64,5 @@ [1:24:27][@Colt_Zero][Would it be better to minimize or maximize how much you do per frame? Like, would it be better to make your program take any time that it would be waiting for VSync, and instead focus it on performing more computations, even potentially computing things ahead of time?] [1:25:24][@Tybereon][How do you easily detect if VSync is active?] [1:25:51][@macielda][How do I VSync and prevent tearing with a dual-monitor setup? Is it any different than a single-monitor setup? \[see Resources\]] -[1:27:23][Conclude] +[1:27:23][Conclude][:speech] [/video] diff --git a/cmuratori/hero/code/code242.hmml b/cmuratori/hero/code/code242.hmml index 15e07e8..d665db5 100644 --- a/cmuratori/hero/code/code242.hmml +++ b/cmuratori/hero/code/code242.hmml @@ -21,7 +21,7 @@ [59:33]["And now it's like Mr. Doesn't-Want-To-Do-That-For-Me"][quote 366] [1:00:04][handmade_opengl.cpp: #define GL_SHADING_LANGUAGE_VERSION and use it in OpenGLGetInfo] [1:01:27][Debugger: Step into OpenGLGetInfo and inspect the ShadingLanguageVersion] -[1:02:04][Q&A] +[1:02:04][Q&A][:speech] [1:02:46][@Ikkir_Isth][Looking at winXP and cards, looks like they need GL 2.0 as the 'max' they can support, more or less (if you use era cards)] [1:03:23][@Razoul05][In the function OpenGLGetInfo why did you do an "#if 0 ... #else ... #endif" rather than just commenting it out?] [1:03:52][@insofaras][For sRGB do you also have to set WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB when you choose the pixel format or is that something different?[ref @@ -34,5 +34,5 @@ [1:10:19][Blackboard: sRGB] [1:16:58][@andsz_][I just checked my Dell monitor. It has Adobe RGB as well as sRGB modes and they look fairly different. So what's the better one?] [1:18:34][@garlandobloom][I've heard a lot of monitors aren't even really 32-bit color. Sometimes less with dithering in the monitor] -[1:19:18][Shut down now] +[1:19:18][Shut down now][:speech] [/video] diff --git a/cmuratori/hero/code/code243.hmml b/cmuratori/hero/code/code243.hmml index a961e60..54e7868 100644 --- a/cmuratori/hero/code/code243.hmml +++ b/cmuratori/hero/code/code243.hmml @@ -31,7 +31,7 @@ [1:28:01]["The stream actually hasn't ended..."][quote 395] [1:34:08][handmade_asset.h: Add AssetType to asset_memory_header] [1:39:56][Run the game, see nothing and leave it at that] -[1:41:21][Q&A] +[1:41:21][Q&A][:speech] [1:41:30][@Miblo][Are we missing a Day in the episode guide? The guide only goes up to Day 242, but today's overlay was saying Day 244] [1:42:39][@garryjohanson][Is it possible to tell OpenGL which graphics card to use if you have more than one in a given machine?] [1:45:26][@cubercaleb][Is it really a good idea to keep the DC around forever? What if the user changes their monitor config while Handmade Hero is running?] @@ -44,6 +44,6 @@ [1:52:58][@ffsjs][It was just for entertainment reasons, I wasn't implying anything else. Jeff saying: "you know, I really don't like the name of that "variable""] [1:54:01][@cubercaleb][How the heck do you even read code with one letter variables?] [1:56:55][@ffsjs][Thank you for the stream. We are not doing a good job asking relevant questions, obviously] -[1:57:59][Wrap it up for now] -[1:58:34][Promote 4coder] +[1:57:59][Wrap it up for now][:speech] +[1:58:34][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code244.hmml b/cmuratori/hero/code/code244.hmml index 31ec513..a043dae 100644 --- a/cmuratori/hero/code/code244.hmml +++ b/cmuratori/hero/code/code244.hmml @@ -25,7 +25,7 @@ page="ARB_framebuffer_sRGB" url="https://www.opengl.org/registry/specs/ARB/framebuffer_sRGB.txt"]] [45:04][win32_handmade.cpp: typedef these WINAPI wgl_ functions and enable the extensions in Win32InitOpenGL] -[1:08:48][Q&A] +[1:08:48][Q&A][:speech] [1:09:10][@yoonfan][Don't you have a race condition according to the C11 and C++11 memory models when you set the texture handle from the worker thread and read it on the rendering thread without any synchronization? I think you need to use an atomic operation or the compiler could mess up the generated code] [1:10:43][@cubercaleb][Why don't you render directly to the backbuffer at Molly?] [1:14:20][@brokenopcode][FYI, no you can't change pixel format once it's been set. Need to create a temp window & context, get the wgl*arb function pointers, then destroy context & window and create new window and context with wgl*arb. Very annoying but that's how it works on windows as far as I know] @@ -35,5 +35,5 @@ [1:18:10][@gasto5][Where did you upload the 4coder videos?] [1:18:33][@d7samurai][Yes, D3D11, too] [1:18:58][@cubercaleb][Couldn't you also use a PBO for streaming in textures?] -[1:20:35][Wrap it up] +[1:20:35][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code245.hmml b/cmuratori/hero/code/code245.hmml index e03c8fb..9b5d02d 100644 --- a/cmuratori/hero/code/code245.hmml +++ b/cmuratori/hero/code/code245.hmml @@ -25,7 +25,7 @@ [54:47][...and see stuff that we cannot see on stream][quote 400] [55:37][win32_handmade.cpp: Set WGL_DOUBLE_BUFFER_ARB to GL_FALSE for the benefit of the stream] [56:03][Run the game for us all to see] -[57:26][Q&A] +[57:26][Q&A][:speech] [57:40][@cubercaleb][Aren't pretty much all games double buffered? If so, why doesn't OBS have problems capturing game footage for other games?] [58:55][@longboolean][Does this mean Handmade Hero cannot be let's played?] [59:34][@nxsy][There's a scene switcher plugin in OBS] @@ -37,5 +37,5 @@ [1:09:06][@dudeinbasement1][Could we do sRGB with a shader and not with glEnable?] [1:10:34][@erdomina][Are we still going to do work on the debug UI?] [1:11:07][@cubercaleb][Every time you go to answer a question and the cutscene loops, a pink screen appears] -[1:12:08][Wrap it up] +[1:12:08][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code246.hmml b/cmuratori/hero/code/code246.hmml index 89e00ee..2758bca 100644 --- a/cmuratori/hero/code/code246.hmml +++ b/cmuratori/hero/code/code246.hmml @@ -28,10 +28,10 @@ [37:54][Run the game and test out our hot code reloading] [41:40][win32_handmade.cpp: Note that the Entry.Callback is not in the same place between builds and consider how to solve this problem] [44:19][todo.txt: Update the TODO file] -[46:53][Q&A] +[46:53][Q&A][:speech] [47:01][@Pseudonym73]["So what shall we do for the next 20 min? Maintain the TODO file"] [47:45][@Cubercaleb][There is a bug in the new GL code, the if(!) you added is not checking the sRGB variable but a different one] -[53:42][insobot: Thank you to imperiumtactics for following the channel! <3] +[53:42][@insobot][Thank you to imperiumtactics for following the channel! <3] [54:12][@Garryjohanson][Totally serious when I say you should write an API book. I would never think of lots of stuff] [55:20][@SoysauceTheKid][For the keyboard / gamepad inputs, can HalfTransitionCount ever go beyond 1? Or is it there if you put the input getting on a separate thread?] [57:40][@Cubercaleb][Kind of graphics / Windows related: Why do so many games, especially Source games handle Alt-Tab poorly?] @@ -65,5 +65,5 @@ [1:32:43][@ugurkodak][Do you work on another game project other than Handmade Hero?] [1:33:21][@Mr4thDimention][Is fork a good API or a bad API?] [1:34:39][@bob_burrough][Forgive me if already asked: GDC is next week. What Handmade Hero representation at GDC?] -[1:35:48][Wind things down] +[1:35:48][Wind things down][:speech] [/video] diff --git a/cmuratori/hero/code/code247.hmml b/cmuratori/hero/code/code247.hmml index 56bfff1..2ced127 100644 --- a/cmuratori/hero/code/code247.hmml +++ b/cmuratori/hero/code/code247.hmml @@ -39,7 +39,7 @@ [51:18][win32_handmade.cpp - Moving (and afterwards eliminating) Global_Renderer_UseSoftware from handmade_config.h and creating an enum with the rendering type, which allows to manage the Win32DisplayBufferInWindow cases better.] [57:13][win32_handmade.cpp - The reason for ordering the enum components is for having the 0 value being the default] [58:18][Plans for next day: hooking up debug printout for editing and maybe cleanup] -[58:57][Q&A] +[58:57][Q&A][:speech] [1:00:30][@dino27_1988][Casey, at what point is it _bad_ to separate everything into multiple files, and when is it _good_?] [1:07:36][@dino27_1988][Okay, so basically personal preference, compile time, and external impositions. Thank you very much for your answer \:)] [1:07:46][@rohit_n][Does "texture download" on this stream mean "glTexImage2D"?] @@ -50,5 +50,5 @@ [1:15:47][@dudeinbasement1][Programming style - why do you have the function return on the preceeding line? Is it just so that the function name is in the first column?] [1:17:02][@StrangeZak][Yeah I don't know what the deal was, when I asked about inlining last night it blew up everywhere.] [1:18:53][@Garryjohanson][I was messing around with loop unrolling by hand and got massive speedups, any idea why would that be?] -[1:19:55][Wind things down] +[1:19:55][Wind things down][:speech] [/video] diff --git a/cmuratori/hero/code/code248.hmml b/cmuratori/hero/code/code248.hmml index b07b943..5611024 100644 --- a/cmuratori/hero/code/code248.hmml +++ b/cmuratori/hero/code/code248.hmml @@ -21,7 +21,7 @@ [1:03:06][Run the game and see our fully truncated event names] [1:03:16][handmade.cpp: Stuff all of our control variables under #if HANDMADE_INTERNAL from handmade_config.h] [1:05:47][Run the game and see all of our values in the debug view] -[1:07:08][Q&A] +[1:07:08][Q&A][:speech] [1:07:33][@Hotspur_][The "Per Frame arena space remaining" debug counter is always going down! Is this okay?] [1:08:08][@Garryjohanson][You mentioned a book that introduces relational databases. I lost the link[ref site="Jim Gray and Andreas Reuter" @@ -37,5 +37,5 @@ [1:17:13][@trueblue32][What language do you think is best for programming games?] [1:18:44][@ezysigh][The handles are just int ids numbered from 0, which map to per-process fd-table in kernel space] [1:19:11][@dino27_1988][Will you consider using Jon's language soon? Even just for trying stuff?] -[1:19:34][Close down, thank you] +[1:19:34][Close down, thank you][:speech] [/video] diff --git a/cmuratori/hero/code/code249.hmml b/cmuratori/hero/code/code249.hmml index ce8c23a..c03650d 100644 --- a/cmuratori/hero/code/code249.hmml +++ b/cmuratori/hero/code/code249.hmml @@ -29,7 +29,7 @@ [56:31][Remove Name from the END_BLOCK macro] [57:05][Another benefit of using a "Single Compilation Unit Build" is that if we want to preprocess a file, we can easily do it] [59:32][Temporarily remove -DHANDMADE_INTERNAL=1 switch from the build.bat file and fix other build errors on data blocks] -[1:02:01][Q&A] +[1:02:01][Q&A][:speech] [1:02:42][@Cubercaleb][How the heck do you quickly get back into some obtuse code that you haven't looked at in 6 months?] -[1:03:48][Wrap up. Thank you] +[1:03:48][Wrap up. Thank you][:speech] [/video] diff --git a/cmuratori/hero/code/code250.hmml b/cmuratori/hero/code/code250.hmml index 2b3dfdd..1ca7aa9 100644 --- a/cmuratori/hero/code/code250.hmml +++ b/cmuratori/hero/code/code250.hmml @@ -25,7 +25,7 @@ [50:21][handmade_debug.cpp: Reassigning the correct GUID when storing events so that they are safe across hot-reloads] [53:47][Changing the pre-storing of the GUID with the already extracted name] [54:28][Changing the separators from underscores to slashes] -[56:40][Q&A] +[56:40][Q&A][:speech] [56:56][@desuused][Please use the following hash computation: HashValue = HashValue * 65599 + *Scan; (sdbm, source: http://www.cse.yorku.ca/~oz/hash.html). Simply using a sum of chars *will* produce a lot of collisions. (source: http://programmers.stackexchange.com/a/145633)] [1:00:47][@Pseudonym73][Yes, the reasoning behind the hash is that it's used for symbols in ELF. If you think about it, symbols tend to come in clusters: i, j, k, x1, x2, x3 etc. ElfHash is designed to behave sensibly in that case] [1:03:29][@caffeine_storm][Do you have a stream schedule?] @@ -38,5 +38,5 @@ [1:22:20][@x13pixels][I'll keep that in mind] [1:22:54][@Mojobojo][Why was it passed in that structure? I was specifically looking for the delta time variable and that was the last place I expected it to be] [1:24:13][@Mojobojo][To add on, since each player has their own input struct, passing it through each one when it's going to be the same for each player seems redundant] -[1:25:39][Wrap up. Thank you] +[1:25:39][Wrap up. Thank you][:speech] [/video] diff --git a/cmuratori/hero/code/code251.hmml b/cmuratori/hero/code/code251.hmml index 2eea54b..b5b1137 100644 --- a/cmuratori/hero/code/code251.hmml +++ b/cmuratori/hero/code/code251.hmml @@ -31,7 +31,7 @@ [49:51][handmade.cpp: Call DEBUG_B32] [50:36][Debugger: Run the game, see that the debug values are still not editable and start to investigate why] [52:14][handmade_debug_interface.h: Provisionally introduce the notion of needing to DEBUGHandleValueEdit in DEBUG_B32 and DEBUG_VALUE] -[55:37][Q&A] +[55:37][Q&A][:speech] [56:12][@dino27_1988][Wednesday, you talked about Microsoft's Xbox process to detect which vertex was closest to another to form quads / tris / faces. Do you have the math behind that or maybe a link about it? I tried looking for it since then without any success] [56:46][Blackboard: Triface meshes and "locality"] [1:06:13]["It's just a full tristrip and it touches itself maximally"][quote 411] @@ -48,8 +48,8 @@ [1:23:49][shell.bat: set _NO_DEBUG_HEAP=1 in order to disable the debug heap] [1:25:47][Debugger: Run the game and note that the startup is now probably a little faster] [1:27:52][Explain the debug heap] -[1:28:46][Close down] +[1:28:46][Close down][:speech] [1:29:34][Promote Handmade After Dark[ref site="Handmade After Dark" - url="http://handmadedev.org/handmade-after-dark/"]] + url="http://handmadedev.org/handmade-after-dark/"]][:research] [/video] diff --git a/cmuratori/hero/code/code252.hmml b/cmuratori/hero/code/code252.hmml index 4a4cae3..6a03f7e 100644 --- a/cmuratori/hero/code/code252.hmml +++ b/cmuratori/hero/code/code252.hmml @@ -33,5 +33,5 @@ [1:22:20][handmade_world_mode.cpp: Provide the ability to toggle the GroundChunks] [1:25:56][handmade.cpp: Put GroundChunksOn in the menu] [1:26:19][Run the game and toggle the GroundChunks] -[1:27:19][Close this down] +[1:27:19][Close this down][:speech] [/video] diff --git a/cmuratori/hero/code/code253.hmml b/cmuratori/hero/code/code253.hmml index d5f3274..f1d2ae4 100644 --- a/cmuratori/hero/code/code253.hmml +++ b/cmuratori/hero/code/code253.hmml @@ -29,12 +29,12 @@ [59:01][Debugger: Step into CloneVariableGroup and inspect the Result] [1:01:11][handmade_debug.cpp: Replace SubGroup with Dest->Children in CloneVariableLink] [1:01:35][Run the game and tear off some elements] -[1:04:04][Q&A] +[1:04:04][Q&A][:speech] [1:04:48][@diaboiix17][Dude's still up there, just to let you know] [1:04:55][@andsz_][The guy actually thought it was a binary tree and that he would be on the ground if he gets to the leaves...] [1:05:36][@dudeinbasement1][What is the debug code to other code ratio now?] [1:07:20][@thesizik][What happens if you try to modify a dynamic variable, e.g. player position?] [1:08:48][@brokenopcode][In CloneVariableGroup() ... sizeof (Name) - 1, should this be the string length, not size of pointer - 1?] [1:09:11][handmade_debug.cpp: Pass the correct calculation to CreateVariableGroup in CloneVariableGroup] -[1:10:34][Wrap it up] +[1:10:34][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code254.hmml b/cmuratori/hero/code/code254.hmml index b410908..863c1e9 100644 --- a/cmuratori/hero/code/code254.hmml +++ b/cmuratori/hero/code/code254.hmml @@ -19,7 +19,7 @@ [45:09][Run the game and check out the debug visualisation] [48:01][handmade_debug.cpp: Make DrawProfileIn draw one frame] [1:10:21][Run the game and check out the correct debug visualisation][quote 425] -[1:11:10][Q&A] +[1:11:10][Q&A][:speech] [1:11:35][handmade_debug.cpp: Convert a PointerToU32 down to CloseEvent->GUID] [1:12:47][@garryjohanson][What do you think of using a "call tree" to track dependencies across multi-threading?] [1:13:33][@erdomina][What command do you use to change from cutscene to game] @@ -40,6 +40,6 @@ [1:30:33]["It would be weird..."][quote 427] [1:30:42][@abnercoimbre][Q: It has to do with won_3d and an interview with him] [1:31:29][@abnercoimbre][Q: It's not a live interview...] -[1:31:40][Close down the stream] -[1:32:16][Recommend Won Chun][quote 428] +[1:31:40][Close down the stream][:speech] +[1:32:16][Recommend Won Chun][:speech][quote 428] [/video] diff --git a/cmuratori/hero/code/code255.hmml b/cmuratori/hero/code/code255.hmml index 35f1917..4a8c246 100644 --- a/cmuratori/hero/code/code255.hmml +++ b/cmuratori/hero/code/code255.hmml @@ -24,7 +24,7 @@ [1:06:35][Debugger: Step into DrawProfileIn and inspect the RootEvent] [1:08:06][handmade_debug.cpp: Correctly set the Node's Duration] [1:10:48][Run the game and admire the bizarre results] -[1:11:11][Q&A] +[1:11:11][Q&A][:speech] [1:11:51][@insobot][Need to find a whole os is that we get a taste again... For some! Implementing merge?] [1:12:00][@grumpygiant256][Will the day-counter overflow tomorrow, or will The Variable provide more bits for us?] [1:12:17][@desuused][How are you going to celebrate Handmade Hero episode 0xFF?] @@ -39,6 +39,6 @@ [1:20:07][Run the game and witness a very slow fade] [1:21:11][build.bat: Stop linking with opengl32.lib] [1:22:02][win32_handmade.cpp: Switch back to OpenGL and witness a longer startup] -[1:22:48][Wind down, wrap it up] -[1:23:47][Anticipate new 4coder] +[1:22:48][Wind down, wrap it up][:speech] +[1:23:47][Anticipate new 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code256.hmml b/cmuratori/hero/code/code256.hmml index 61d2517..3c9a547 100644 --- a/cmuratori/hero/code/code256.hmml +++ b/cmuratori/hero/code/code256.hmml @@ -36,9 +36,9 @@ [56:18][Demo the bug with switching between the renderers] [57:27][win32_handmade.cpp: Introduce OpenGLReservedBlitTexture and set one of them Win32InitOpenGL] [58:57][Run the game and see that we now no longer have that bug, but do have a bug with pixel centers for the fonts] -[1:00:40][Q&A] +[1:00:40][Q&A][:speech] [1:01:08][@cmuratori][@insobot What do you think of Microsoft's Tay bot?] -[1:01:22][insobot @cmuratori Oh wow. I guess i should say? Wow, thought i came] +[1:01:22][@insobot][@cmuratori Oh wow. I guess i should say? Wow, thought i came] [1:01:30][@garlandobloom][Q: Can't remember what OpenGL considers the center of the pixel...?] [1:02:50][@jameswidman][Is romp just a synonym for clobber?] [1:02:56][@zargy][Will the opening cutscene be narrated?] @@ -46,7 +46,7 @@ [1:05:42][@cubercaleb][I actually prefer the fonts that the software renderer produces. Is there anything we can do to make them look that way in GL?] [1:06:36][@lailynn7][Recommended entry-level programming language for aspiring game devs?] [1:10:54][@longboolean][Is there anything that can be done to help make it easier to hover / click on the debug visualization?] -[1:12:06][insobot @popcorn0x90 You can implement most of it, replacing most of] +[1:12:06][@insobot][@popcorn0x90 You can implement most of it, replacing most of] [1:12:13][@ginger_bill][Are all the textures transferred every frame?] [1:14:40][@cubercaleb][In the debug UI will we be able to click on a frame and have it blit that frame?] [1:15:42][@xxmyrrdinxx][Could you explain in what consist the dynamic resolution? Texture rescale, viewport rescale?] @@ -54,6 +54,6 @@ [1:16:38][@hwd2ro][What about checking for memory leaks?] [1:17:38][@zach211w][At what point would you make the transition from a more basic language like JavaScript over to a language like C?] [1:21:55][@dudeinbasement1][Sorry, have a fail-safe to see when we stutter to pause the system and debug it] -[1:23:05][Close] -[1:24:02][Promote 4coder] +[1:23:05][Close][:speech] +[1:24:02][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code257.hmml b/cmuratori/hero/code/code257.hmml index e717749..40a436e 100644 --- a/cmuratori/hero/code/code257.hmml +++ b/cmuratori/hero/code/code257.hmml @@ -30,7 +30,7 @@ [1:17:32]["So complicated. I rather enjoy it, though"][quote 438] [1:17:36][handmade_debug.h: Make open_debug_block not store the entire debug_event but instead just store the data we want] [1:20:24][Run the game and see that we're still losing our profile] -[1:21:19][Q&A] +[1:21:19][Q&A][:speech] [1:21:36][@desuused][Would it be reasonable to separate the debug UI into a separate program that communicates with the game over pipes / sockets? The game won't hold the debug data and won't waste cycles on debug collation, debug rendering; if game crashes, you can still inspect frames, or even save them to the disk independently of the game running] [1:23:09][@badflydog][You are referring to GlobalDebugTable outside a HANDMADE_INTERNAL guard, when you initialize it in UpdateAndRender] [1:23:25][@Miblo][Casey, your stream overlay disappeared at some point this evening. I'm pretty darn sure it might have happened out of protest when you removed the beautiful fade, so it could be worth reimplementing that, if only in the interest of overlay stability] @@ -49,6 +49,6 @@ [1:32:22][@btngames][Do you think it would be neat to save a DebugUI "layout" with torn elements open as they were last?] [1:33:02][@mr4thdimention][I include it in 4coder at the $10 level] [1:33:30][@badflydog][Is it possible to use with the $5 build?] -[1:33:49][Call it a day] -[1:34:26][Promote 4coder] +[1:33:49][Call it a day][:speech] +[1:34:26][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code258.hmml b/cmuratori/hero/code/code258.hmml index 6307a3c..596e3c9 100644 --- a/cmuratori/hero/code/code258.hmml +++ b/cmuratori/hero/code/code258.hmml @@ -25,7 +25,7 @@ [40:23][Admire the lovely profiler][quote 443] [40:55][build.bat: Switch to -O2 and see how the profiler fares] [41:56][Happy puppy][quote 445] -[42:03][Q&A] +[42:03][Q&A][:speech] [42:40][@erafo][Not sure if this was asked before but is it worth to use static_cast instead of a C-style cast that does static_cast, dynamic_cast and reinterpret_cast, if you know that you only need the first?] [43:32][Demo: C-style cast] [48:19][Demo: C++ dynamic_cast] @@ -35,12 +35,12 @@ [54:15][@rooster441][For string manipulation, is there a library worth to use in C/C++? I could do it with Python but I'd like to use C] [54:57][@deepmist][You are spending a lot of time on debug tools before you need them. Is it going to be worth it?] [58:07][@cubercaleb][Speaking of string libraries, what kinds of things do you think should be in a good string library?] -[59:36][insobot @expixel: Hand banana hero. You rock] +[59:36][@insobot][@expixel: Hand banana hero. You rock] [59:40][Andrew Chronister: "Insobot is a national treasure"][quote 444] [1:00:01][@cubercaleb][Does using VirtualAlloc and reserving a lot of memory upfront count?] [1:01:16][@cubercaleb][Well I meant using MEM_RESERVE then MEM_COMMIT so that you can append quickly without the copy] -[1:01:40][Go eat dinner] -[1:02:24][Promote Martins Mozeiko] -[1:03:05][Mention HandmadeCon 2016] -[1:03:46][Promote 4coder] +[1:01:40][Go eat dinner][:speech] +[1:02:24][Promote Martins Mozeiko][:speech] +[1:03:05][Mention HandmadeCon 2016][:speech] +[1:03:46][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code259.hmml b/cmuratori/hero/code/code259.hmml index 3e989c0..bb13e5e 100644 --- a/cmuratori/hero/code/code259.hmml +++ b/cmuratori/hero/code/code259.hmml @@ -29,12 +29,12 @@ [59:07][handmade_opengl.cpp: Support the ARB versions of our extensions] [1:01:25][GitHub: Close issue #8] [1:02:59][Debugger: Break into OpenGLGetInfo and see what extensions this GPU supports] -[1:04:40][Q&A] +[1:04:40][Q&A][:speech] [1:05:37][@desuused][I've implemented a quick and dirty flame graph for Handmade Hero] [1:06:23][@erdomina][Is the stream being off tomorrow an April Fool's joke?] [1:06:40][@cubercaleb][What happened to the software rendered performance? It was running at 30 FPS a few months ago! Even without -O2 it was pretty decent] [1:07:07][build.bat: Switch to -O2 and watch the profiler] [1:09:01][win32_handmade.cpp: Switch to Win32RenderType_RenderSoftware_DisplayGDI and again watch the profiler] [1:11:12][@cubercaleb][So let me get this straight, modern PCI-E connections have several GB/s of bandwidth and yet it takes several frames to upload a texture for the backbuffer?] -[1:13:20][Go eat some dinner] +[1:13:20][Go eat some dinner][:speech] [/video] diff --git a/cmuratori/hero/code/code260.hmml b/cmuratori/hero/code/code260.hmml index 03dd412..701b91c 100644 --- a/cmuratori/hero/code/code260.hmml +++ b/cmuratori/hero/code/code260.hmml @@ -27,7 +27,7 @@ [1:01:12][Debugger: Break on ZoomInteraction, inspect the values and find that we're currently picking the wrong Frame] [1:04:46][handmade_debug.cpp: Search for the correct Frame to set the RootNode] [1:06:58][Run the game and successfully try out the beautiful zoom] -[1:09:28][Q&A] +[1:09:28][Q&A][:speech] [1:10:11][@deepmist:][Are you as productive in a single 8 hour period as you are on the show over 8 sessions?] [1:10:38][@Popcorn0x90][Do you have that in your current game at work?] [1:10:54][@jessem3y3r][Is our debug tooling sophisticated enough to detect OS slowness, i.e. problems with heap / mem performance, etc?[ref @@ -40,6 +40,6 @@ [1:14:05][@Popcorn0x90][Yes profiler!] [1:14:10][@guitarm87][I discovered why I didn't see the font rendering. I'm on a 2560 x 1440 screen with 200% DPI scaling. Do I have to use a specific resolution to make it work?] [1:14:59][@erdomina][Was there a factor in not implementing moving backwards in the threading system?] -[1:17:27][Call it] -[1:18:20][Promote 4coder] +[1:17:27][Call it][:speech] +[1:18:20][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code261.hmml b/cmuratori/hero/code/code261.hmml index 55f75c7..dbf77ae 100644 --- a/cmuratori/hero/code/code261.hmml +++ b/cmuratori/hero/code/code261.hmml @@ -21,7 +21,7 @@ [1:09:33][handmade_debug.cpp: Conditionally do a FREELIST_DEALLOCATE in FreeFrame] [1:12:58][handmade_debug.cpp: Scrutinise FreeFrame and do a ZeroStruct on *ElementFrame] [1:14:48][Run the game and reiterate the fact that we're leaking memory] -[1:16:25][Q&A] +[1:16:25][Q&A][:speech] [1:17:10][@EnemyMouse][Do you need to wrap that + FrameOrdinal in the FreeFrame function?] [1:17:48][handmade_debug.cpp: Assert that FrameOrdinal is less than DEBUG_FRAME_COUNT] [1:19:08][handmade_debug.cpp: Keep track of the FreedEventCount] @@ -39,6 +39,6 @@ [1:31:10][handmade_debug.cpp: Disable the recursion for now and run the game] [1:32:39][@zilarrezko][What if you aren't really learning from Handmade Hero? Where I've gone through episodes 1-28 about four times and I thought I knew how to do so. I tried to make the simplified win32 layer to get to the independent layer, and I found that I couldn't do it. The documentation was rough and I forgot what things did what. What would you say to people who find that they aren't learning?] [1:35:29][handmade_debug.cpp: Switch from DrawProfileIn to DrawFrameBars and view the profiler] -[1:36:10][Call it] -[1:37:42][Promote 4coder] +[1:36:10][Call it][:speech] +[1:37:42][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code262.hmml b/cmuratori/hero/code/code262.hmml index 5c0459e..4749d31 100644 --- a/cmuratori/hero/code/code262.hmml +++ b/cmuratori/hero/code/code262.hmml @@ -26,7 +26,7 @@ [53:53][Run the game and make sure the profiler still works] [54:04][handmade_debug.cpp: Space the EventRects based on the TotalClock] [58:38][Run the game and view our beautiful profiler] -[59:33][Q&A] +[59:33][Q&A][:speech] [1:00:02][@insobot][Relationship status it's complicated for the movement to be it's own main function inside?] [1:01:30][@cvaucher][Reasons performance was so bad with the new debug view? Isn't this still way fewer tris than a typical 3D game? Is the framerate reasonable if you switch to solid rectangles vs outlines?] [1:03:56][@boogie0815][Will you make the UI immediate mode?] @@ -36,6 +36,6 @@ [1:06:54][@zennmystic][Are we going to do the batch way then?] [1:07:23][@dudeinbasement1][(Off-topic) Have you ever defined structures inside of functions?] [1:09:17][@sixdegreesofgaming][Is there any advantage to making physics dependent on framerate other than convenience?] -[1:11:18][Wrap it up] -[1:12:22][Promote 4coder] +[1:11:18][Wrap it up][:speech] +[1:12:22][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code263.hmml b/cmuratori/hero/code/code263.hmml index c21710f..94d9324 100644 --- a/cmuratori/hero/code/code263.hmml +++ b/cmuratori/hero/code/code263.hmml @@ -38,10 +38,10 @@ [55:13][handmade_debug.cpp: Implement the ability to pause the profiler] [57:30][Run the game and try pausing the profiler] [58:21][Demonstrate the fact that we track all of the data] -[1:00:00][Q&A] +[1:00:00][Q&A][:speech] [1:00:31][@fwe4][How much would it cost to save draw buffer snapshots so when you pause you can show the visual state it was in, or maybe save enough data to recentre the frame?] [1:03:09][@mongorians][It is impossible to keep the entire codebase in mind when developing a larger project? How does this impact "code design" decisions in Handmade Hero? What about other, larger projects (e.g. AAA titles)?] [1:05:04][@glhrmfrts][Originally by @Scykoh: "Is the engine portion expected to be the largest chunk of the Handmade Hero project?"] [1:06:55][@culver_fly][Can you please explain again the problem with texture loading? Why does it not work occasionally?] -[1:07:54][Wrap it up and glimpse into the future] +[1:07:54][Wrap it up and glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code264.hmml b/cmuratori/hero/code/code264.hmml index 46d3869..67b0837 100644 --- a/cmuratori/hero/code/code264.hmml +++ b/cmuratori/hero/code/code264.hmml @@ -21,7 +21,7 @@ [56:36][handmade_debug.cpp: Indent in AdvanceElement rather than EndElement] [58:24][handmade_debug.cpp: Make BasicTextElement more responsive] [1:00:14][Run the game and see the highlighting on hover] -[1:02:23][Q&A] +[1:02:23][Q&A][:speech] [1:03:23][@cubercaleb][(Not a serious question) Why not just import npm and use left pad to indent the strings?] [1:03:52][@thesizik][I think you were selecting the ground as an entity?] [1:04:06][@pseudonym73][\[see Resources, John W. Peterson\]] @@ -33,5 +33,5 @@ [1:10:43][@jessem3y3r][You were mentioning before about objects arising as a natural consequence of properly engineered code as the system requires. But do you do not mean a C++ object? So what do you mean as an object?] [1:11:14][handmade_render_group.h: Demonstrate how "objects" fall naturally out of the code] [1:16:10][@cubercaleb][You have a typo in the comment for object_transform] -[1:17:14][Close it down] +[1:17:14][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code265.hmml b/cmuratori/hero/code/code265.hmml index e34df2e..5d5d686 100644 --- a/cmuratori/hero/code/code265.hmml +++ b/cmuratori/hero/code/code265.hmml @@ -18,7 +18,7 @@ [51:40][Run the game and see that our indentation bugs are gone] [53:28][handmade_debug_ui.cpp: Make the buttons look like buttons] [1:00:43][Run the game and admire our new buttons] -[1:01:31][Q&A] +[1:01:31][Q&A][:speech] [1:02:09][@fyoucon][Remember to include your new casey_custom in the repo!] [1:02:34][@insobot][Spoilers. Holy *** I managed about two months, the plane are reflected when no window currently has the intro?] [1:03:02][@longboolean][Could you explain your "poor man's lambda"? How it works, how it is like a lambda and how it is not?] @@ -26,5 +26,5 @@ [1:07:51][@thesizik][Do you ever turn on unused function / variable warnings?] [1:08:02][@qwoodmansee][I am currently working on a 3D OpenGL project and implementing collision detection. I've been introduced to the idea of changing my vector space so my character is a perfect unit sphere (which should make collision detection easier). Do you have any opinion on this approach?] [1:08:51][Blackboard: Using a sphere for collision detection] -[1:10:30][Close this up] +[1:10:30][Close this up][:speech] [/video] diff --git a/cmuratori/hero/code/code266.hmml b/cmuratori/hero/code/code266.hmml index 68e2fca..fbcbb7c 100644 --- a/cmuratori/hero/code/code266.hmml +++ b/cmuratori/hero/code/code266.hmml @@ -20,7 +20,7 @@ [52:44][handmade_debug.cpp: Add the Count and Percentage to the list] [55:03][Run the game and view our TopClocksList] [56:11]["We won't add up to 100%"][quote 469] -[58:00][Q&A] +[58:00][Q&A][:speech] [59:22][@gunngames][Can I avoid taxation by reinvesting into capital gains?] [59:44][@dudeinbasement1][Why won't we add to ~100%?] [1:00:42][@sssmcgrath][How would you self-update an exe? Right now I have a second exe that copies a file that overwrites the current exe. So main exe calls updateme.exe, closes itself, updateme sleeps for 1/2 second, then copies... There's gotta be something smarter] @@ -43,6 +43,6 @@ [1:31:00][win32_handmade.cpp: Fix the condition of Win32TimeIsValid] [1:34:10][Try to replace handmade.exe with ColorCop.exe] [1:35:16][Debugger: Try to launch and kill][quote 471] -[1:37:15][Wind things down] -[1:38:27][Promote 4coder] +[1:37:15][Wind things down][:speech] +[1:38:27][Promote 4coder][:speech] [/video] diff --git a/cmuratori/hero/code/code267.hmml b/cmuratori/hero/code/code267.hmml index e0a9b76..88b5234 100644 --- a/cmuratori/hero/code/code267.hmml +++ b/cmuratori/hero/code/code267.hmml @@ -40,7 +40,7 @@ [1:28:00][handmade_render.cpp: Implement clipping in the software renderer] [1:29:12][Blackboard: Intersecting tiles] [1:32:01][View the profiler and see that it clips in both renderers] -[1:32:30][Q&A] +[1:32:30][Q&A][:speech] [1:34:11][@Popcorn0x90][What are top three reason for FPS to go down?] [1:34:36][@sonoftheright][Will ClipRect be used outside of debug, and where?] [1:35:46][@fierydrake][Can you elaborate on the ODE you plan to replace your drag function with in MoveEntity?] @@ -53,8 +53,8 @@ [1:45:05][handmade_render.cpp: Ignore DrawRectangle and "Pixel Fill"] [1:47:14][@longboolean][What does OpenGL do when you enable gl_scissor_test? What is it testing for?] [1:47:35][Blackboard: glScissor] -[1:48:22][Wrap it up] +[1:48:22][Wrap it up][:speech] [1:48:46][build.bat: Switch back to -Od and -DHANDMADE_SLOW=1] [1:48:50][todo.txt: Update the TODO list] -[1:49:54][Announce that the forums will be going down this weekend \[note: actually the 22nd April\]] +[1:49:54][Announce that the forums will be going down this weekend \[note: actually the 22nd April\]][:speech] [/video] diff --git a/cmuratori/hero/code/code268.hmml b/cmuratori/hero/code/code268.hmml index cf829ce..cc0d438 100644 --- a/cmuratori/hero/code/code268.hmml +++ b/cmuratori/hero/code/code268.hmml @@ -12,7 +12,7 @@ [56:49][View our profiler and see that cloning works again] [56:59][handmade_debug.cpp: Make CloneVariableLink just do the direct clone and return it] [59:05][Test cloning the profiler] -[59:59][Q&A] +[59:59][Q&A][:speech] [1:00:43][@garryjohanson][I feel I kinda lost the forecast for the trees this episode. Would you mind recapping?] [1:01:06][Blackboard: Linked structs] [1:12:52][Blackboard: Walking the tree with a recursive function] @@ -20,5 +20,5 @@ [1:17:08][Blackboard: Cache friendliness] [1:21:12][@pseudonym73][Concurrency also matters. Linked lists can be better if you need multiple threads working on the list at the same time] [1:21:48][@cubercaleb][How do you feel about object pools as a sort of middle ground between linked lists and arrays?] -[1:24:19][Wrap it up] +[1:24:19][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code269.hmml b/cmuratori/hero/code/code269.hmml index 6577d7e..d16e2a7 100644 --- a/cmuratori/hero/code/code269.hmml +++ b/cmuratori/hero/code/code269.hmml @@ -26,7 +26,7 @@ [46:24][View the profile and find that our clipping is restored to proper working order] [47:07][handmade_debug.cpp: Make the Root print out arbitrary stuff] [58:07][View our new info in the menu] -[58:24][Q&A] +[58:24][Q&A][:speech] [59:07][@oammar][What is the purpose of the internal syntax?] [1:00:04][@cubercaleb][I loath how the compiler tells you there is a param mismatch instead of telling you a list of actual params vs the ones you typed. It could at least try to be helpful! Is this an unsolved problem in computer science?] [1:00:56][@jessem3y3r][What were the abbreviations in the new menu header?] @@ -45,8 +45,8 @@ [1:45:59][handmade_debug.cpp: Label these occupancy graphs] [1:48:08]["It's all white, like Donald Trump's America"][quote 474] [1:48:17][Run the game and view our labeled occupancy graphs] -[1:50:20][Close down for now] +[1:50:20][Close down for now][:speech] [1:50:45][Announce that the Handmade Hero forums will be going down this weekend while Handmade Network launches[ref site="Handmade Network" - url="https://handmade.network/"]] + url="https://handmade.network/"]][:research] [/video] diff --git a/cmuratori/hero/code/code270.hmml b/cmuratori/hero/code/code270.hmml index 0adc64b..35545f6 100644 --- a/cmuratori/hero/code/code270.hmml +++ b/cmuratori/hero/code/code270.hmml @@ -18,7 +18,7 @@ [48:12][Run the game, continuously move upwards and investigate why] [54:08][handmade_world_mode.cpp: Stop making space bar trigger the jump] [54:54][Run the game and stay on the floor] -[55:08][Q&A] +[55:08][Q&A][:speech] [56:46][@chronaldragon][So how will this tile-based movement work? Will you still be able to move freely within a tile, or will the character actually "snap" to a tile?] [57:06][@fyoucon][When will we sort out the coordinate system?] [57:31][@friggodin][Is it possible to get access to the source code if I lost access to my old email account?] @@ -31,8 +31,8 @@ [1:06:53][@Rbnelr][So if modern CPUs usually reorder or merge writes, how do they use memory mapped registers? Can you even bit-bang a serial protocol with it?] [1:09:30][@longboolean][What is the plan with rendering when the hero walks behind a piece of terrain that is on a higher level, and obscures the hero?] [1:09:59][@jim0_o][Will this system fix the collision areas getting stuck in each other if stacked, e.g. two heroes loading at the same position?] -[1:10:48][Shut down] +[1:10:48][Shut down][:speech] [1:11:16][Announce that the Handmade Hero forums will be going down this weekend while Handmade Network launches[ref site="Handmade Network" - url="https://handmade.network/"]] + url="https://handmade.network/"]][:research] [/video] diff --git a/cmuratori/hero/code/code271.hmml b/cmuratori/hero/code/code271.hmml index ff6730f..fcdee10 100644 --- a/cmuratori/hero/code/code271.hmml +++ b/cmuratori/hero/code/code271.hmml @@ -17,7 +17,7 @@ [57:05][Run the game and see the body accelerate towards the head] [59:38]["My body will track me, but it will never come to rest"][quote 477] [1:00:10]["I want the head to snap back to the body when you stop pushing"][quote 478] -[1:00:29][Q&A] +[1:00:29][Q&A][:speech] [1:00:58][@yoonfan][When I write event-driven code, I am often forced to use dynamic memory allocation to preserve some state until it is needed by the callback. How do you deal with those situations?] [1:03:35][@robrobby][Would the Handmade debug view enable viewing structs like world mode?] [1:03:58][@longboolean][When moving diagonally, will it be clear to the player which way the body will go to get to the diagonal entity? Right now it seems kind of random] @@ -32,8 +32,8 @@ [1:18:01][Run the game, see the tiles and move around on them] [1:18:40][@chronaldragon][At the end of Q&A, can you announce a reminder that the forums are going down shortly?] [1:18:54][handmade_world_mode.cpp: #if 0 that tile drawing] -[1:19:08][Close up shop] +[1:19:08][Close up shop][:speech] [1:20:05][Announce that the Handmade Hero forums will be going down very soon while Handmade Network launches[ref site="Handmade Network" - url="https://handmade.network/"]] + url="https://handmade.network/"]][:research] [/video] diff --git a/cmuratori/hero/code/code272.hmml b/cmuratori/hero/code/code272.hmml index 0cea2af..866f0f9 100644 --- a/cmuratori/hero/code/code272.hmml +++ b/cmuratori/hero/code/code272.hmml @@ -19,7 +19,7 @@ [56:26][handmade_world_mode.cpp: Make the hop parabolic] [57:03][Run the game and see the parabolic hop] [58:28][A few words on the concept of reducing algorithms down to a smaller set of variables] -[59:07][Q&A] +[59:07][Q&A][:speech] [59:36][@chronaldragon][No Q&A because xanbot banned hmd_bot] [1:00:21][@cubercaleb][That hopping looks so cool. Can we see a little more of it?] [1:01:23][@lazerstalker][How did you split the head from the body?] @@ -43,9 +43,9 @@ [1:17:28][@ineville][Have you seen very much of apple's Swift? What are your thoughts on it now that it is open source?] [1:17:47][@chronaldragon][How come I have to declare a political party in order to vote in the presidential primary] [1:18:25][Assets: Check out the tree bitmap, and note that the reason for clipped-like looking tree assets is that they don't have the 1-pixel apron] -[1:21:12][Wind down] +[1:21:12][Wind down][:speech] [1:21:59][Announce the upgraded forum site on Handmade Network[ref site="" page="Handmade Hero Forums" - url="https://hero.handmade.network/forums"]] + url="https://hero.handmade.network/forums"]][:research] [/video] diff --git a/cmuratori/hero/code/code273.hmml b/cmuratori/hero/code/code273.hmml index 70a15b0..1927a69 100644 --- a/cmuratori/hero/code/code273.hmml +++ b/cmuratori/hero/code/code273.hmml @@ -29,7 +29,7 @@ [1:01:39][handmade_world_mode.cpp: Give the animation some follow-through on the landing] [1:02:14][Run the game and check out the hop] [1:02:48][handmade_world_mode.cpp: Speed the hop back up again and check it out] -[1:03:50][Q&A] +[1:03:50][Q&A][:speech] [1:04:12][handmade_world_mode.cpp: Set the Entity->FacingDirection] [1:04:45][@thesizik][What's the difference between B-splines and Bezier curves?] [1:05:00][Blackboard: Bezier vs B-spline curves] @@ -55,7 +55,7 @@ [1:27:03][@cubercaleb][What do you have to say about the researchers that claim that java can be faster than C++ at times?] [1:28:33][@sssmcgrath][It's pretty great. Also, re: metaprogramming, did you see Per Vognsen's btree metaprogramming thingy? Apparently it copies Jeff Roberts' AVL-tree configurability scheme] [1:28:47][@omnitechnomancer][Runescape is a browser based MMO] -[1:30:41][dudeinbasement1 Q: Minecraft was ported to C++ I thought] +[1:30:41][@dudeinbasement1][Q: Minecraft was ported to C++ I thought] [1:31:09][@cubercaleb][The win10 edition is C++] -[1:31:44][Wrap it up] +[1:31:44][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code274.hmml b/cmuratori/hero/code/code274.hmml index eedf0e9..0909a73 100644 --- a/cmuratori/hero/code/code274.hmml +++ b/cmuratori/hero/code/code274.hmml @@ -29,7 +29,7 @@ [1:07:59][handmade_world_mode.cpp: Recenter the head] [1:16:13][handmade_world_mode.cpp: Introduce a non-normalised ddP2 in order to compute the spring] [1:17:21][Run the game and see that the problem is fixed] -[1:17:56][Q&A] +[1:17:56][Q&A][:speech] [1:18:30][@Miblo][The other day ingenero likened the new movement to Crypt of the Necrodancer. I like that game and see where they're coming from, but Handmade Hero already looks like it feels so much sweeter to play] [1:19:04][@ffsjs][I've probably missed it, but what exactly prompted switching the hero movement from analogue-rolling to digital-tile-based-wiggle-hopping?] [1:19:44][@cpots][Does math exist?] @@ -43,5 +43,5 @@ [1:26:16][@macielda][Why would I use an animation package instead of doing what you just did (and whatever you will do)?] [1:28:56][@trevnewt][Is there any plan for eventual addition of music?] [1:29:34][@garryjohanson][Ham-handed Q, could you use neural networks and make something like Boston Dynamics 'BigDog'?] -[1:31:17][Close it up] +[1:31:17][Close it up][:speech] [/video] diff --git a/cmuratori/hero/code/code275.hmml b/cmuratori/hero/code/code275.hmml index f35a712..52b80e8 100644 --- a/cmuratori/hero/code/code275.hmml +++ b/cmuratori/hero/code/code275.hmml @@ -27,7 +27,7 @@ [47:05][handmade_render_group.cpp: Make PushBitmap and GetBitmapDim take XAxis and YAxis] [50:57][handmade_world_mode.cpp: Make the body's YAxis point towards the head] [58:51][Run the game and admire the stretching] -[59:42][Q&A] +[59:42][Q&A][:speech] [1:00:19][@soysaucethekid][Zircon encrusted tweezers? Are you moving to Montana soon?] [1:00:33][@fr0styninja][Why does our limbless hero need suffer in such gruesome ways] [1:00:59][@twitch_makes_me_itch][Do I need the payed version of Mischief to change the background color?] @@ -47,5 +47,5 @@ [1:17:42][@garlandobloom][I used to do like fixed FPS, so it was fine, but I've changed. Hold on I'll look it up] [1:18:04][Blackboard: GarlandoBloom's camera movement] [1:21:06][@jim0_o][Plans on adding camera shake or blur or similar if the hero gets hit or a bolder hits the ground near the hero?] -[1:22:04][Wrap it up] +[1:22:04][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code276.hmml b/cmuratori/hero/code/code276.hmml index 68db9ef..c88a3c7 100644 --- a/cmuratori/hero/code/code276.hmml +++ b/cmuratori/hero/code/code276.hmml @@ -19,7 +19,7 @@ [47:32][handmade_world_mode.cpp: Delay the recentering] [49:55][handmade_math.h: Introduce ClampAboveZero] [52:41][Run the game and try out the delayed recentering] -[55:07][Q&A] +[55:07][Q&A][:speech] [55:31][@fr0styninja][Do you think like a sort of rhythmic based movement where the hero would have to wait a bit before being able to move again (say he's getting ready for a jump instead of stamina-lessly jumping around non-stop) could perhaps help in this situation? Realise it's a design decision and might not be what you're looking for, but perhaps you haven't entertained the idea] [56:21][@ttbjm][Do you think rotating the torso would help?] [57:12][@cubercaleb][For the Q&A can you have the hero walk around on a live loop?] @@ -35,9 +35,9 @@ [1:07:47][@longboolean][Would it help if the body stayed on the tile, but the cape was positioned between the body and the head?] [1:08:21][Consider asking Yangtian for art that is more top-down] [1:09:48][@thesizik][Perhaps a minimum stretch length so you don't get disappearing bitmaps while moving down?] -[1:10:03][Close up] +[1:10:03][Close up][:speech] [1:10:41][Announcement: HandmadeCon 2016[ref site="Molly Rocket" page="HandmadeCon 2016" - url="http://mollyrocket.com/news_0033.html"]] + url="http://mollyrocket.com/news_0033.html"]][:research] [/video] diff --git a/cmuratori/hero/code/code277.hmml b/cmuratori/hero/code/code277.hmml index c3017ec..f4ae24d 100644 --- a/cmuratori/hero/code/code277.hmml +++ b/cmuratori/hero/code/code277.hmml @@ -16,7 +16,7 @@ [46:47][Blackboard: One epically huge entity struct] [51:24][Blackboard: Sparse matrix solver] [52:37][Blackboard: Summary of the plan] -[54:37][Q&A] +[54:37][Q&A][:speech] [55:36][@xdafal][Can you talk about the dynamic dispatch?] [56:09][Blackboard: Dispatch] [1:00:53][Blackboard: C++'s implementation of dynamic dispatch] @@ -34,6 +34,6 @@ [1:23:54][@soysaucethekid][Will the entity system include things such as particle effects?] [1:24:33][@xdafal][Did you play Bomberman?] [1:24:37][@sssmcgrath][You can't stand the Street Fighter pause but you liked the Mortal Kombat rotoscope?] -[1:25:27][demetrispanos Yeah that seems reasonable, it does seem unlikely that you'd get 300 entities needing 60FPS simulation except, as you say, bullet hell with bullets-as-entities rather than being their own optimized thing] -[1:27:37][Close down] +[1:25:27][@demetrispanos][Yeah that seems reasonable, it does seem unlikely that you'd get 300 entities needing 60FPS simulation except, as you say, bullet hell with bullets-as-entities rather than being their own optimized thing] +[1:27:37][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code278.hmml b/cmuratori/hero/code/code278.hmml index e99830a..c79f2ac 100644 --- a/cmuratori/hero/code/code278.hmml +++ b/cmuratori/hero/code/code278.hmml @@ -17,9 +17,9 @@ [37:06][handmade_world_mode.cpp: Introduce BeginLowEntity and EndLowEntity and split AddLowEntity out into these functions in order to create a low entity and then pack it into its actual position location] [47:43][handmade_world_mode.cpp: Introduce PackEntityIntoChunk to be called in EndLowEntity] [49:17][handmade_sim_region.cpp and handmade_world_mode.cpp: Work through a plethora of compile errors to use entity_id] -[1:04:49][Q&A] +[1:04:49][Q&A][:speech] [1:05:49][@wrenga][This is more of a meta-question but I found myself placing TODOs in my code at places that I don't want to deal with while I work on something else. However, as we all procrastinate, how come back to the TODOs?] [1:06:53][@rbdjellyfish][What's the highest number of errors you've ever had after compiling?] [1:07:09][@Miblo][I arrived too late to the prestream to let you know that yesterday's episode hasn't yet made its way to YouTube] -[1:07:30][Wrap it up] +[1:07:30][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code279.hmml b/cmuratori/hero/code/code279.hmml index a4cb9c4..b95d65c 100644 --- a/cmuratori/hero/code/code279.hmml +++ b/cmuratori/hero/code/code279.hmml @@ -19,7 +19,7 @@ [1:01:01][handmade_world.cpp: Split GetWorldChunk out to GetWorldChunkInternal in order to provide multiple entry points] [1:07:43][Run the game and let it crash and burn] [1:08:13][handmade_world_mode.h: Support creating multiple entities at the same time] -[1:11:49][Q&A] +[1:11:49][Q&A][:speech] [1:12:47][Blackboard: Using a Pointer to a Pointer to enable editing of chunks] [1:16:17][@novynn][How are you finding Milton? I didn't catch the start of the stream sorry] [1:17:38][@paulsix][How do you pronounce your name?] @@ -29,5 +29,5 @@ [1:20:32][@paulsix][Couldn't you avoid having to compress the entities if you used some unions in the entity?] [1:21:19][@elxenoanizd][How are you finding 4coder so far? Any features you find missing? Is it worth getting into coming from emacs?] [1:22:35][@paulsix][What do you think of the other more data-oriented entity system implementations online (like anax, EntityX, etc.)?] -[1:23:55][Wrap it up] +[1:23:55][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code280.hmml b/cmuratori/hero/code/code280.hmml index 7247285..142693a 100644 --- a/cmuratori/hero/code/code280.hmml +++ b/cmuratori/hero/code/code280.hmml @@ -24,7 +24,7 @@ [56:42][Run the game and find that we can go off the screen okay] [56:58][handmade_sim_region.cpp: Set the Entity->P and chunk movements at the end of EndSim] [57:48][Run the game and find that the camera does now follow the hero] -[58:42][Q&A] +[58:42][Q&A][:speech] [1:00:25][@dustinten][Is there any real difference between #ifndef and #if !defined? I always use the first but I see you use the latter] [1:00:55][@dudeinbasement1][Do you feel like we take steps backward when we get into code we haven't been in in a while, e.g. the problems with moving the screen?] [1:01:22][@grub_smub][Do you use a lot of header files?] @@ -39,5 +39,5 @@ [1:14:14][@Jim0_o][How is your arm now? Any chance of a streamathon?] [1:14:39][@dudeinbasement1][CTime needs cloc built-in] [1:15:37][@J_vanRijn][Re code coverage, when Farbrausch was trying to cut down size of Kkrieger they wrote a quick code coverage tool called Lekktor and because someone didn't use a certain key in the menu, the code to handle it was left out in the released version] -[1:20:33][Wrap it up] +[1:20:33][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code281.hmml b/cmuratori/hero/code/code281.hmml index 391d338..93cbd2b 100644 --- a/cmuratori/hero/code/code281.hmml +++ b/cmuratori/hero/code/code281.hmml @@ -21,7 +21,7 @@ [59:52][Run the game and enjoy the camera movement] [1:01:48][handmade_sim_region.cpp: Update the Entity->P before computing the CameraOffset] [1:03:55][Run the game and see that the glitch is gone] -[1:04:05][Q&A] +[1:04:05][Q&A][:speech] [1:05:00][@cubercaleb][Are you concerned about the player seeing outside the boundaries of the map or seeing into other rooms when the camera zooms out?] [1:05:22][@gasto5][So, no more smooth scrolling?] [1:05:47][@soysaucethekid][I know the rooms are going to fit the screen, but will there be variable sized rooms with the camera making it fit to the screen?] @@ -31,5 +31,5 @@ [1:09:29][@popcorn][You press start when before you enter a room and the link will end up on top of the screen] [1:10:27][Blackboard: Our coherent sense of world space vs What may be happening in Link's Awakening] [1:13:07][@sgtcarnaval][If you want a good hysteresis example a heater controller does the job] -[1:14:13][We are done] +[1:14:13][We are done][:speech] [/video] diff --git a/cmuratori/hero/code/code282.hmml b/cmuratori/hero/code/code282.hmml index a362fcd..cc214ee 100644 --- a/cmuratori/hero/code/code282.hmml +++ b/cmuratori/hero/code/code282.hmml @@ -27,7 +27,7 @@ [50:22][handmade_world_mode.cpp: Add another column of trees to the room] [51:43][Run the game, trigger the fade and explain the problem with alpha blending multiple faded entities] [55:04][handmade_render_group.h: Consider ways to blend the alpha] -[58:24][Q&A] +[58:24][Q&A][:speech] [59:04][@Miblo][That up / down camera movement looks so cool. I do hope the terrain height of the rooms makes good use of this] [59:42][@insofaras][Could you do something with GL_MIN / GL_MAX blend equation for the alpha?] [1:03:12][@deras007][Can you create the word of warcraft game?] @@ -43,5 +43,5 @@ page="Particle lighting test" url="https://www.youtube.com/watch?v=VWHyTeEu31U"]] [1:24:58][@cosmiczord][I thought most games were only designed to max out console hardware?] -[1:25:55][Wrap it up] +[1:25:55][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code283.hmml b/cmuratori/hero/code/code283.hmml index 373b2be..29a6a74 100644 --- a/cmuratori/hero/code/code283.hmml +++ b/cmuratori/hero/code/code283.hmml @@ -28,12 +28,12 @@ [1:15:54][Run the game and try standing on the FloatyThingForNow] [1:16:50][handmade_world_mode.cpp: Make AddStandardRoom add only the FloatyThingForNow at its location] [1:18:06][Run the game and try again to stand on the FloatyThingForNow] -[1:19:35][Q&A] +[1:19:35][Q&A][:speech] [1:20:22][@Miblo][This sounds like a job for hysteresis, if I understand it right] [1:21:04][@ejgremlin][They implemented a structured editor for greenfoot] [1:21:41][@connor_rentz][So, we are planning to have the head detached forever?] [1:22:09][@abner][Where are the gloves? You will program in custom glove movement, right?] [1:22:27][@ChronalDragon][Any idea when you plan on adding in the correct-perspective art so that the hero looks less strange?] [1:22:51][@longboolean][So in theory you could test this by adding a second hero with the xbox controller and making sure they don't stand on the same tile?] -[1:23:24][Close this down] +[1:23:24][Close this down][:speech] [/video] diff --git a/cmuratori/hero/code/code284.hmml b/cmuratori/hero/code/code284.hmml index a058259..f35735d 100644 --- a/cmuratori/hero/code/code284.hmml +++ b/cmuratori/hero/code/code284.hmml @@ -21,7 +21,7 @@ [1:25:05][Blackboard: How the FloatyThingForNow messes with the relative coordinate system] [1:27:20][handmade_world_mode.cpp: Set the P.z as a delta for now and then hop onto the FloatyThingForNow and find that the bug has gone] [1:28:39][Blackboard: sine and cosine as derivatives of each other] -[1:35:06][Q&A] +[1:35:06][Q&A][:speech] [1:36:06][@klemensbaum][Is there a geometric explanation for the quaternion sandwich product? Where does the formula q * p * conj(q) come from?] [1:37:00][@mr4thdimention][I am a bit unclear on why the relative positioning of Z worked. Is Z rebased somewhere in the code?] [1:38:33][@zakssi][I'm still quite newbie on programming, but wouldn't commenting your code a bit more help in situations like today?] @@ -43,6 +43,6 @@ [2:21:02][Blackboard: Inserting and expanding the identity] [2:25:43][@klemensbaum][Thank you, very insightful explanation. Can you recommend a book where I can learn more about these kinds of things? How did you learn it all in such an intuitive way?] [2:29:21][@jameswidman][Would any of this have been mentioned in the comments in the Granny source code, or is it considered "obvious" to people working in that context?] -[2:30:51][Wrap it up] -[2:31:32][Relaunch the awesome Milton and find that everything is saved and undoable] +[2:30:51][Wrap it up][:speech] +[2:31:32][Relaunch the awesome ~Milton and find that everything is saved and undoable] [/video] diff --git a/cmuratori/hero/code/code285.hmml b/cmuratori/hero/code/code285.hmml index bad1d7e..d7e9f14 100644 --- a/cmuratori/hero/code/code285.hmml +++ b/cmuratori/hero/code/code285.hmml @@ -22,7 +22,7 @@ [45:13][Run the game, try adding new heroes and enjoy the weirdness] [47:04][handmade_world_mode.cpp: Consider making AddPlayer more robust] [53:31][handmade_world_mode.cpp: Set HeroesExist in both cases, run the game and consider keeping AddPlayer as it is] -[54:41][Q&A] +[54:41][Q&A][:speech] [55:22][@stropheum][This debug world just gets progressively weirder every day] [56:34][@remele][Why don't the cloned players jump to points when their head moves over them?] [57:21][handmade_world_mode.cpp: Make the hopping happen whether or not a controller is controlling the hero] @@ -40,6 +40,6 @@ [1:13:06][Run the game and spawn some correctly positioned heroes] [1:13:30][handmade_world_mode.cpp: Make DebugSpawn not override us] [1:13:54][Run the game and just add new people] -[1:16:05][Wind up] +[1:16:05][Wind up][:speech] [1:16:08][4coder: Recap the one weirdness with the if \[see 1:03:13\]] [/video] diff --git a/cmuratori/hero/code/code286.hmml b/cmuratori/hero/code/code286.hmml index bdca698..10ffeb4 100644 --- a/cmuratori/hero/code/code286.hmml +++ b/cmuratori/hero/code/code286.hmml @@ -12,7 +12,7 @@ [51:48][handmade_entity.h: Introduce ReferenceIsValid, entity_stored_reference and ReferencesAreEqual] [56:41][handmade_world_mode.cpp: Make PackEntityReferenceArray correctly pack these variably-sized paired entities] [1:03:39][handmade_world.cpp, handmade_sim_region.cpp and handmade_world_mode.cpp: Fix compile errors] -[1:07:57][Q&A] +[1:07:57][Q&A][:speech] [1:08:27][@andsz_][A fairly simple way to describe or understand the infinity norm is to draw the unit hyperspheres for each of those common norms. The 1-norm would be a diamond shape, 2-norm is the regular circle / hypersphere, 3-norm gets more squareish / hypercubish and so on. You'd quickly see that this series converges towards a square / hypercube] [1:09:02][@filiadelski][Have you seen Scott Meyer's talk on CPU caches? He talks about how it's better to store data of the same type together in memory because they end up on the same cache line, which is good for performance. Is this something that you think about, or will cover in Handmade Hero?] [1:11:22][@blah238][Could you use the entity pairing concept for a vehicle-occupant relationship, like an airship and its passenger(s)? And, if so, (how) would movement work on it?] @@ -20,5 +20,5 @@ [1:15:10][@guitarm87][Is it not possible to subscribe to forum posts anymore now since the new stuff was made I don't get any posts to my mail] [1:15:57][@omnitechnomancer][Subscribe doesn't make it ad-free anymore, as far as I know] [1:18:29][@Mr4thDimention][This entity reference stuff feels premature to me since I don't think we have a lot of examples of how it will be used. Are you doing it now for a particular reason?] -[1:21:25][Close down] +[1:21:25][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code287.hmml b/cmuratori/hero/code/code287.hmml index 1ff6edd..4d1aaef 100644 --- a/cmuratori/hero/code/code287.hmml +++ b/cmuratori/hero/code/code287.hmml @@ -25,7 +25,7 @@ [56:10][handmade.h: Change entity_id to brain_id in controlled_hero] [57:05][handmade_world_mode.cpp: Fix compile errors] [1:01:07][handmade_world_mode.cpp: Make AddPlayer return a brain_id] -[1:02:02][Q&A] +[1:02:02][Q&A][:speech] [1:04:16][@Miblo][I must have missed the bit about the snake. What is that?] [1:05:47][@nbm][It's actually a millipede] [1:06:10][@unrealdesign][How long do you hope this will go on for? Do you see yourself doing different game once this is finished?] @@ -37,9 +37,9 @@ [1:16:28][@paganheart][On the note of UML, how much / often would you say you deal with that at work, if at all? In the gamedev industry, anyway] [1:16:42][@guitarm87][Good answer, I understand what you mean. Just do it enough and you'll see what works. Experience. Thanks!] [1:16:50][@elyasm][Have you thought about using Vulkan? It is super low-level access to hardware] -[1:17:11][Wrap it up] +[1:17:11][Wrap it up][:speech] [1:18:14][Announce AndrewJDR's annotated_cpp repository[ref site="GitHub" page="HandmadeHero/annotated_cpp" - url="https://github.com/HandmadeHero/annotated_cpp"]] + url="https://github.com/HandmadeHero/annotated_cpp"]][:research] [/video] diff --git a/cmuratori/hero/code/code288.hmml b/cmuratori/hero/code/code288.hmml index 2d05a20..36af37a 100644 --- a/cmuratori/hero/code/code288.hmml +++ b/cmuratori/hero/code/code288.hmml @@ -27,7 +27,7 @@ [55:49][handmade_entity.h: #define BrainSlotFor in order to name the slots using pointer arithmetic] [1:00:25][Rant on compiler vendors making programmers' lives difficult] [1:01:32][handmade_entity.h: Introduce BrainSlotFor_ to return a brain_slot] -[1:02:31][Q&A] +[1:02:31][Q&A][:speech] [1:02:48][@fr0styninja][Can we have a look at the ctime stats so far?] [1:04:39][@dudeinbasement1][What will we do for the "production" Assert?] [1:04:56][@Miblo][May this brain system allow for things like two characters carrying a felled tree between them, with both of their brains controlling the movement of the tree?] @@ -37,5 +37,5 @@ [1:12:32][@josianmarriott][I was thinking defining whole new types of entities] [1:14:20][@josianmarriott][I guess there's no way to mitigate dll security concerns?] [1:16:00][@saticmotion][So all the brain code is now in the switch(Brain->Type). How many brains do you expect to have? What if we have 100 brains, will you keep all the code there?] -[1:16:38][We are out of time] +[1:16:38][We are out of time][:speech] [/video] diff --git a/cmuratori/hero/code/code289.hmml b/cmuratori/hero/code/code289.hmml index cc10be7..c971d0a 100644 --- a/cmuratori/hero/code/code289.hmml +++ b/cmuratori/hero/code/code289.hmml @@ -28,7 +28,7 @@ [57:26][Run the game and see the trees] [57:45][handmade_world_mode.cpp: Temporarily make AddWall apply some EffectsEntropy to the Piece->Color] [59:17][Run the game and admire the randomly coloured trees] -[1:00:12][Q&A] +[1:00:12][Q&A][:speech] [1:02:05][@anonymous519][Recently came across this[ref site="Emery D. Berger, Benjamin G. Zorn and Kathryn S. McKinley" page="Reconsidering Custom Memory Allocation" @@ -45,5 +45,5 @@ [1:15:36][@billdstrong][Would we do anything differently if we wanted to have HDR capabilities in the game?] [1:16:25][@realist_01][Can you answer my previous question? People would like to see your pre-streams on YouTube] [1:17:11][@anonymous519][The reason I ask is because I really like the idea of allocating up front and managing all memory myself as in Handmade Hero, but I'm not sure if I'm just shooting myself in the foot by not using malloc / free] -[1:20:23][Wrap it up] +[1:20:23][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code290.hmml b/cmuratori/hero/code/code290.hmml index c3383b0..4b4c16e 100644 --- a/cmuratori/hero/code/code290.hmml +++ b/cmuratori/hero/code/code290.hmml @@ -23,7 +23,7 @@ [53:18][handmade_brain.h: Make BrainSlotFor_ take Type] [54:45][handmade_entity.h: Remove BrainType from entity and deal with the resultant compile errors] [56:42][Run the game and find that nothing has changed] -[56:49][Q&A] +[56:49][Q&A][:speech] [57:33][@quarter][Were you trapped in an elevator today?] [57:47][@themarsalla][If you are nuking the concept of an entity type but still keeping everything tightly bound in the brain, what real gain does all of this work give us? Didn't we just shift responsibility into the brain?] [59:49][@abner][After all this time, are finally you used to programming live? Is this a comfortable habit now?] @@ -38,5 +38,5 @@ [1:16:38][handmade_world_mode.cpp: Make AddMonstar set a brain] [1:17:03][Run the game and mind-control the monstar and the familiar] [1:18:03][@arkandosde][When will we implement the zombie brain?] -[1:18:46][Wrap it up] +[1:18:46][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code291.hmml b/cmuratori/hero/code/code291.hmml index f8af38d..ee493b5 100644 --- a/cmuratori/hero/code/code291.hmml +++ b/cmuratori/hero/code/code291.hmml @@ -25,7 +25,7 @@ [55:41][handmade_world_mode.cpp: Make AddStandardRoom call AddFamiliar and make AddFamiliar take world_position P and traversable_reference StandingOn] [57:07][Run the game and see our Familiar occupying its square] [57:32][handmade_entity.h: Remove Moveable from entity_flags] -[58:57][Q&A] +[58:57][Q&A][:speech] [59:50][@gasto5][Why are the textures not loading properly sometimes?] [1:00:51][@mmassi][Why the decision to make the game grid-based?] [1:01:00][@fr0styninja][There were sirens earlier. Is #manintree back at it again?] @@ -41,5 +41,5 @@ [1:14:08][@sirfindel][Do you have positive or negative thoughts when it comes to learning and using Python for building applications?] [1:14:24][@metaled32bit][MSDN came on 2 CDs] [1:15:04][@tickleforce][Which programming languages do you use regularly?] -[1:15:35][Thanks] +[1:15:35][Thanks][:speech] [/video] diff --git a/cmuratori/hero/code/code292.hmml b/cmuratori/hero/code/code292.hmml index 0a082a0..bd23822 100644 --- a/cmuratori/hero/code/code292.hmml +++ b/cmuratori/hero/code/code292.hmml @@ -22,7 +22,7 @@ [46:00][Run the game and watch the simulation] [51:25][Consider encouraging entities to move towards us from adjacent rooms] [56:42][todo.txt: Update the TODOs and add an Entity System note for geographically disparate entities] -[58:54][Q&A] +[58:54][Q&A][:speech] [59:43][@badflydog][Wasn't today an off-day?] [1:00:09][@cubercaleb][Can the compiler really mess up the pointer arithmetic? I mean, it is just integer ops, can't be that hard to mess up] [1:02:28][@longboolean][So is the way to fix the snake from getting stuck to just allow it to run over itself or to make the snake AI smart enough to not trap itself?] @@ -50,5 +50,5 @@ page="Designing and Evaluating Reusable Components" url=https://www.youtube.com/watch?v=ZQ5_u8Lgvyk]] [1:11:10][@busy_beaver][Well I've got GJK + EPA implemented in 2D and GJK in 3D, but I am a bit struggling at EPA in 3D] -[1:12:23][Wrap it up] +[1:12:23][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code293.hmml b/cmuratori/hero/code/code293.hmml index 7c2d0de..16379e9 100644 --- a/cmuratori/hero/code/code293.hmml +++ b/cmuratori/hero/code/code293.hmml @@ -23,11 +23,11 @@ [56:11][handmade_sim_region.cpp: Introduce GetClosestEntityWithBrain and closest_entity] [1:00:17][handmade_brain.cpp: Make ExecuteBrain call GetClosestEntityWithBrain for the Familiar] [1:01:44][Run the game and see that it works beautifully] -[1:01:59][Q&A] +[1:01:59][Q&A][:speech] [1:02:44][@garryjohanson][Any thoughts on multithreading the entity system?] -[1:03:01][insobot ++ and += to reduce memory useage...] +[1:03:01][@insobot][++ and += to reduce memory useage...] [1:06:07][@evraire][How many more times will you get hit with the texture upload issue before you actually fix it?] [1:06:42][@roam00010011][Do you have a max entity count at the sim region on the debug display?] [1:09:26][@serge_rgb][(Out of topic) Milton seems to be treating Wacom input as mouse input. Restart Milton? Will look into it] -[1:10:40][Close things down] +[1:10:40][Close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code294.hmml b/cmuratori/hero/code/code294.hmml index 0abb53f..1b63ce7 100644 --- a/cmuratori/hero/code/code294.hmml +++ b/cmuratori/hero/code/code294.hmml @@ -21,7 +21,7 @@ [55:33][Run the game and try out the swipe] [59:22][handmade_math.h: Introduce Triangle01] [1:00:26][handmade_world_mode.cpp: Make UpdateAndRenderWorld call Triangle01 and then run the game to try it out] -[1:01:04][Q&A] +[1:01:04][Q&A][:speech] [1:01:47][@popcorn][Will it support Nintendo's power gloves?] [1:02:17][@soysaucethekid][Are chain attacks going to be in by any chance (i.e. slash slash thrust)?] [1:03:16][@novynn][What are your thoughts on switching to simulating adjacent rooms rather than using the simulation apron?] @@ -32,5 +32,5 @@ [1:08:42][@sssmcgrath][Have you played Planescape: Torment? Handmade Hero totally needs a Morte-style familiar] [1:09:24][@wellingguzman][Will attacking be interrupt? Such as attacking unanimated entity, or someone attacked the player from behind and it jump opposite to the attack (e.g. old Zelda)?] [1:10:45][@duroate][Why not leave the glove swipe to the artist / animator of the game?] -[1:12:28][Wind down, with a glimpse into the future and some thoughts on how alive the world is starting to feel] +[1:12:28][Wind down, with a glimpse into the future and some thoughts on how alive the world is starting to feel][:speech] [/video] diff --git a/cmuratori/hero/code/code295.hmml b/cmuratori/hero/code/code295.hmml index d8a2617..7e8e4bd 100644 --- a/cmuratori/hero/code/code295.hmml +++ b/cmuratori/hero/code/code295.hmml @@ -44,9 +44,9 @@ [1:13:34][Profiler: Find that TraversableRendering is the most expensive] [1:14:33][handmade_world_mode.cpp: #if 0 the PushRectOutline calls for the traversables] [1:15:35][Consider turning on the optimiser just for these traversable drawing routines or blowing out the PushRect functions to be more explicit] -[1:16:19][Q&A] -[1:17:21][cmuratori @insobot Do you have a question for me?] -[1:17:28][insobot @cmuratori: Duuuuude] +[1:16:19][Q&A][:speech] +[1:17:21][@cmuratori][@insobot Do you have a question for me?] +[1:17:28][@insobot][@cmuratori: Duuuuude] [1:17:34][@serge_rgb][How much longer does it take to build Handmade Hero with release optimizations?] [1:18:24][Debugger: Demo the insufficiency of MSVC's debug information in optimised builds] [1:22:59][@cubercaleb][The switch is -Zo] @@ -58,5 +58,5 @@ [1:28:22][@wellingguzman][Having many levels of rooms and having entities in each level actively executing, wouldn't that be heavy / expensive? Or have you think in a performance solution or a level limitation?] [1:29:17][@longboolean][Is there a way to tell the compiler to optimize just a particular section of the code? If not, how would you work around that?] [1:31:07][@cubercaleb][Clang++ is worse. Honestly, why can't the PDB just say "Hey, you are at this instruction? Okay, the value is in this register / address or whatever"?] -[1:33:46][Wind it down] +[1:33:46][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code296.hmml b/cmuratori/hero/code/code296.hmml index aee65ef..e0ce151 100644 --- a/cmuratori/hero/code/code296.hmml +++ b/cmuratori/hero/code/code296.hmml @@ -31,12 +31,12 @@ [1:07:32][handmade_world_mode.cpp: Enable the correct blending in UpdateAndRenderWorld] [1:07:55][handmade_world_mode.cpp: Initialise a BackgroundColor in UpdateAndRenderWorld and pass this to Clear and the GlobalColor for the lowest floors] [1:08:55][Run the game and see the haze happening] -[1:09:27][Q&A] +[1:09:27][Q&A][:speech] [1:10:03][@thesizik][One thing you could try is having the center of the perspective projection be the player's position, so things on other levels line up straight] [1:10:29][@soysaucethekid][The Hadamard transform seems like it can be used for a lot of things. What is it doing in handmade_world.cpp in the subtract function?] [1:10:56][Blackboard: Hadamard Product \~= Diagonal Matrix] [1:16:32][@cubercaleb][For the record, a circle with an x would be the tensor product] [1:17:25][@jayp2][Would it be difficult to implement textured or just different fog colors, so you could make, for instance, vignetted fog?] [1:19:46][@shabiel][How did you finally discover the gamma correction bug? What was the clue that made you say ah ha?] -[1:21:05][Wind it down] +[1:21:05][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code297.hmml b/cmuratori/hero/code/code297.hmml index bac7763..568cbd6 100644 --- a/cmuratori/hero/code/code297.hmml +++ b/cmuratori/hero/code/code297.hmml @@ -20,7 +20,7 @@ [54:35][Consider reducing the system down to two slices] [59:14][handmade_render_group.cpp: Make PushClipRect take a clip_rect_fx] [1:00:06][Run the game and see that the slices are not being perspective transformed] -[1:00:49][Q&A] +[1:00:49][Q&A][:speech] [1:01:28][@insofaras][I added some preliminary moderation code to insobot. At the moment it will just print out when it would time out] [1:03:24][@epigone00][It's been a while, did I see you programming without wrist braces? Are you not affected anymore?] [1:06:24][@guitarm87][Is Jeff Atwood a good programmer?] @@ -31,5 +31,5 @@ url="http://www.puremotionphysicaltherapy.com/"]] [1:15:57][@cyberdr8gon][As someone back at Episode 054, how far gone am I? Haha, just kidding. Thanks for everything, Casey!] [1:16:35][@neitchzehrer][Do you find that your hands shake when holding a drinking glass? That's the only time my hands shake at all] -[1:17:15][Wind it on down] +[1:17:15][Wind it on down][:speech] [/video] diff --git a/cmuratori/hero/code/code298.hmml b/cmuratori/hero/code/code298.hmml index a223f13..8dcd0e6 100644 --- a/cmuratori/hero/code/code298.hmml +++ b/cmuratori/hero/code/code298.hmml @@ -14,7 +14,7 @@ [59:57][handmade_render_group.cpp: Revert changes in GetRenderEntityBasisP for the time being] [1:01:18][Run the game and see the havoc] [1:02:18][handmade_entity.cpp: Plan for handling articulated figures next week] -[1:05:31][Q&A] +[1:05:31][Q&A][:speech] [1:06:12][@kknewkles][Kind of didn't get it from the email - are you still up to putting a break sometime soon and make a little intro series to programming?] [1:07:18][@dr_s80][Another use case to consider for the Y- / Z-sorting: "flat" things laying on top of other "flat" things (like a rug on a floor). How would the Y-sort position be set in this case, especially if the thing on top was larger than the thing(s) it was laying on?] [1:09:03][@kknewkles][You wanted to go a bit more serious than Intro to C early on. Maybe you changed your mind since] @@ -22,5 +22,5 @@ [1:11:06][Blackboard: Sorting rugs and floors] [1:14:44][Blackboard: Considering this in 3D] [1:17:13][@acoto87][Maybe you need to sort the objects separately in both Y and Z and then solve the conflicts if an object A is before object B in the Y-sort and in reverse order in the Z-sort?] -[1:20:28][Close down, to be continued...] +[1:20:28][Close down, to be continued...][:speech] [/video] diff --git a/cmuratori/hero/code/code299.hmml b/cmuratori/hero/code/code299.hmml index aec35dd..1865476 100644 --- a/cmuratori/hero/code/code299.hmml +++ b/cmuratori/hero/code/code299.hmml @@ -14,7 +14,7 @@ [41:50][Blackboard: The problem of Y inside a single cell] [46:32][Blackboard: The case with a tilted camera looking down on a hero standing on a rug] [49:53][Blackboard: Using the closest point entities have in common to determine the sorting] -[58:34][Q&A] +[58:34][Q&A][:speech] [59:59][@sssmcgrath][If you're only concerned about sprites that exist on more than one cell, why not split the polygons on cell boundaries? There can't be that many / can't be that expensive?] -[1:02:28][Wind down] +[1:02:28][Wind down][:speech] [/video] diff --git a/cmuratori/hero/code/code300.hmml b/cmuratori/hero/code/code300.hmml index 4dab28e..cc91ade 100644 --- a/cmuratori/hero/code/code300.hmml +++ b/cmuratori/hero/code/code300.hmml @@ -17,12 +17,12 @@ [50:32][handmade_sort.cpp: Introduce sort_sprite_bound and make MergeSort() take it] [52:59][handmade_sort.cpp: Introduce IsInFrontOf() in order to handle our three cases] [1:02:07][handmade_sort.cpp: Introduce a Swap() that takes sort_sprite_bound] -[1:02:38][Q&A] +[1:02:38][Q&A][:speech] [1:02:58][@thesizik][Isn't it Y (vertical) sprites that have YMin == YMax?] [1:03:17][handmade_sort.cpp: Correct the sense of BothZSprites in IsInFrontOf()] [1:03:31][@zouchk42][You always do == float comparisons. How can you ensure those will ever return true because of float precision?] [1:05:01][@longboolean][In the Y overlaps Z case, what about cliff sides that are holding up the ground sprites (so elevated ground isn't just floating there)? Would that cause an issue with anything?] [1:05:20][Blackboard: Breaking problematic sprites into two pieces] [1:06:37][@mvandevander][I literally did the "float ==" thing last week and considered it acceptable for that exact reason, because I was just checking if a value had just been set by me to an exact value on the previous frame or whatever] -[1:09:29][Close it down] +[1:09:29][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code301.hmml b/cmuratori/hero/code/code301.hmml index 738d940..636dd8b 100644 --- a/cmuratori/hero/code/code301.hmml +++ b/cmuratori/hero/code/code301.hmml @@ -31,7 +31,7 @@ [53:36][handmade_entity.cpp: Make UpdateAndRenderEntities() draw entities in Z without flattening them to the plane] [54:39][Run the game and find that we're not getting the expected sort] [55:05][build.bat: Enable HANDMADE_INTERNAL] -[56:08][Q&A] +[56:08][Q&A][:speech] [57:05][@andrewrussellnet][Hey Casey, managed to make the stream today. Just wanted to pop in and say hi] [58:40][@cvaucher][The coordinates used for the sort rules are world space, right? Would another approach be to sort the screen space coordinates from the top of the screen down?] [59:14][Blackboard: Cases against being able to sort screen space without Z] @@ -40,5 +40,5 @@ [1:12:47][@magik603][How do you clean all the directories without deleting them?] [1:14:25][Demo Math Visualizations] [1:23:00][@andrewrussellnet][That was really awesome to see! Thanks!] -[1:23:28][Close it on up] +[1:23:28][Close it on up][:speech] [/video] diff --git a/cmuratori/hero/code/code302.hmml b/cmuratori/hero/code/code302.hmml index 4dae68f..2969b9f 100644 --- a/cmuratori/hero/code/code302.hmml +++ b/cmuratori/hero/code/code302.hmml @@ -20,7 +20,7 @@ [49:45][handmade_math.h: Introduce a version of RectanglesIntersect() that takes rectangle2] [52:31][handmade_sort.cpp: Consider partitioning the screen in order to build this graph and potentially using the Z-buffer] [55:40][handmade_sort.cpp: Consider leveraging the screen partitioning in order to optimise the software renderer] -[56:15][Q&A] +[56:15][Q&A][:speech] [57:03][@roam00010011][How much more work would you have to do to get a full 3D sorting?] [58:47][@roam00010011][I mean, use fake 3D data, since our cards are essentially flat, we can give an epsilon width to it for the sorting] [59:15][Blackboard: Sorting 3D objects] @@ -29,5 +29,5 @@ [1:14:23][@insofaras][Sorry if this was already answered, but what was the issue with a "return a_z != b_z ? a_z - b_z \: a_y - b_y" style total ordering?] [1:14:41][Blackboard: The problem with sorting heroes behind walls on rugs on tiles] [1:19:02][@insofaras][Would the Y then Z sort work if Z is quantized to room layers, and sprites are split where they cross layers (and maybe the ground is special cased)?] -[1:20:10][Wind it down] +[1:20:10][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code303.hmml b/cmuratori/hero/code/code303.hmml index dd71f2d..474a8cd 100644 --- a/cmuratori/hero/code/code303.hmml +++ b/cmuratori/hero/code/code303.hmml @@ -42,7 +42,7 @@ [1:01:17][Debugger: Run the game and catch some sprites that our test thinks are incorrectly sorted] [1:02:39][handmade_sort.cpp: Temporarily toggle SortEntries() to do only the partial ordering check] [1:02:54][Run the game and see the visual results] -[1:03:12][Q&A] +[1:03:12][Q&A][:speech] [1:05:37][@roam00010011][I'm trying to take a different approach, using the projected sprites on the screen to sort, and using the min / max y values (up) as a depth sorting key] [1:06:19][@roam00010011][Working on it] [1:07:24][@staythirsty90][What is a full stack developer?] @@ -51,5 +51,5 @@ [1:12:52][@Miblo][At the start you mentioned "insertion sort" and potentially automatically getting a binary tree representation of the sprites. What happened to that idea, assuming I roughly understand correctly what you've done?] [1:13:11][Blackboard: Graph sort] [1:14:49][@roam00010011][How do you transform the sprites from world to screen coordinates?] -[1:15:11][That's it for today] +[1:15:11][That's it for today][:speech] [/video] diff --git a/cmuratori/hero/code/code304.hmml b/cmuratori/hero/code/code304.hmml index 99ebbe1..a737273 100644 --- a/cmuratori/hero/code/code304.hmml +++ b/cmuratori/hero/code/code304.hmml @@ -24,7 +24,7 @@ [55:09][handmade_sort.cpp: Prevent BuildSpriteGraph() from calling PushStruct()] [55:53][win32_handmade.cpp: Prevent Win32DisplayBufferInWindow() from calling SortEntries()] [56:16][Run the game and find that the entries aren't sorted but that we don't crash] -[56:26][Q&A] +[56:26][Q&A][:speech] [57:50][@wasenabled][Did you discuss why you are using recursion and any concerns with stack overflows?] [59:04][@bryanwwag][Working with graphs can be difficult; do you have any techniques for debugging them other than observing screen renders, or is that mostly sufficient?] [1:00:46][@roam00010011][Okay for real, did you address the possibility for intersecting sprites?] @@ -35,5 +35,5 @@ [1:02:02][@hopollo][Do you know the dev Garry Newman? If yes, what do you think about his work?] [1:02:40][sssmcgrath I stopped using Razer's drivers as soon as you needed an account] [1:03:03][@filiadelski][What's that shirt?] -[1:04:00][Wind it down] +[1:04:00][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code305.hmml b/cmuratori/hero/code/code305.hmml index 0d0e161..b679c98 100644 --- a/cmuratori/hero/code/code305.hmml +++ b/cmuratori/hero/code/code305.hmml @@ -23,7 +23,7 @@ [56:10][handmade_render.cpp: Explain how RecursiveFromToBack() is working] [58:30][handmade_render_group.cpp: Make PushRenderElement_() clear Flags] [59:42][Run the game, confirm that our sort isn't working and consider how to make it work] -[1:02:43][Q&A] +[1:02:43][Q&A][:speech] [1:04:32][@insobot][Line 31?] [1:06:05][@roam00010011][Since no on-topic, off-topic: Will the final game be orthographic?] [1:06:42][@bryanwwag][When you're calculating pre-allocated buffer locations with offsets, do you find the pointer bugs that pop up sometimes difficult to track down, or is that kind of a non-issue when you do it often enough?] @@ -35,5 +35,5 @@ [1:15:47][Recollections of the Rainbow 100 and Turbo Pascal] [1:20:46][@roam00010011][Did you program on the Amiga?] [1:21:07][@pseudonym73][Did it have Word Star key bindings? That's really the test] -[1:21:14][Close down] +[1:21:14][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code306.hmml b/cmuratori/hero/code/code306.hmml index c9e3002..271198b 100644 --- a/cmuratori/hero/code/code306.hmml +++ b/cmuratori/hero/code/code306.hmml @@ -45,5 +45,5 @@ [1:05:27][handmade_render_group.cpp: Make BeginRenderGroup() rather than Perspective() take the PixelWidth and PixelHeight in order to compute the ScreenArea, and call PushClipRect()] [1:09:26][handmade_world_mode.cpp: Make AddStandardRoom() create one tile] [1:09:57][Run the game and see that our sort appears to handle our Y-sprites just fine, but that our Z-sprites are all messed] -[1:10:32][Defer questions until Monday and end it now] +[1:10:32][Defer questions until Monday and end it now][:speech] [/video] diff --git a/cmuratori/hero/code/code307.hmml b/cmuratori/hero/code/code307.hmml index 89fa840..66ea1e0 100644 --- a/cmuratori/hero/code/code307.hmml +++ b/cmuratori/hero/code/code307.hmml @@ -46,11 +46,11 @@ [58:04][handmade_render.cpp: Make WalkSpriteGraph() and RecursiveFromToBack() work in tandem with that HitCycle] [59:34][handmade_opengl.cpp: Make OpenGLRenderCommands() only draw the sprite bounds for sprites that cycle] [1:00:20][Run the game and see no cycles] -[1:00:59][Q&A] +[1:00:59][Q&A][:speech] [1:01:25][@insobot][Wherefore art thou... Can't wait to watch that stream begins?] [1:02:26][@abner][Programming won't necessarily be in your life forever. I feel like you will eventually settle down and write fiction novels] [1:02:40][@chronaldragon][How do you decide when a problem is complex enough to need visualization?] [1:05:51][@roam00010011][Is the build graph still O(n^2)?] [1:07:51][@Hjortshoej][When can we download JACS Season 5?] -[1:08:15][Wrap it up] +[1:08:15][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code308.hmml b/cmuratori/hero/code/code308.hmml index 44b1029..b1abab9 100644 --- a/cmuratori/hero/code/code308.hmml +++ b/cmuratori/hero/code/code308.hmml @@ -24,7 +24,7 @@ [54:07][Blackboard: How IsInFrontOf() is working] [55:30][Run the game and illustrate the possibility that we may actually be in okay shape here] [56:50][handmade_world_mode.cpp: Toggle AddMonstar() and AddFamiliar() back on] -[58:02][Q&A] +[58:02][Q&A][:speech] [59:05][@insobot][I couldn't drop that into The Witness, then. FailFish Really. Kappa?] [59:26][@blah238][It looks like the torso sprite occasionally draws on top of the head sprite, e.g. going up stairs] [1:00:01][Blackboard: How the hero is constructed] @@ -38,5 +38,5 @@ [1:17:12][@melg1][What do you think about unit testing and test driven development applied to C++ code? Is this technique really useful and worth trying?] [1:26:42][@roam00010011][It's because you are the only programmer! When working in a team that will use your code, you need const] [1:29:24][@sssmcgrath][I programmed in 100% const correct for 5 years. Never again] -[1:29:41][Close it on out] +[1:29:41][Close it on out][:speech] [/video] diff --git a/cmuratori/hero/code/code309.hmml b/cmuratori/hero/code/code309.hmml index abfd81c..6f27191 100644 --- a/cmuratori/hero/code/code309.hmml +++ b/cmuratori/hero/code/code309.hmml @@ -25,7 +25,7 @@ [53:38][handmade_render.cpp: Make BuildSpriteGraph() compute the InvCellDim] [56:24][handmade_render.cpp: Make GetGridSpan() work a little differently] [59:59][Run the game and note that we are now bucketing] -[1:00:22][Q&A] +[1:00:22][Q&A][:speech] [1:01:26][@themikedx][Using the grid system, do you think that would be good to use for pixel perfect collision?] [1:01:51][Blackboard: Determining whether rectangles and then possibly pixels intersect] [1:03:54][@thesizik][Why not have the debug overlay render to a separate layer, and have it draw in the order submitted instead of wasting time sorting?] @@ -34,5 +34,5 @@ [1:08:25][@fyoucon][Something exciting happening over at Molly Rocket?] [1:08:39][@dan020][Can using C programming optimize the game more than C++?] [1:12:55][@uplinkcoder][RTTI] -[1:14:09][Wind it down] +[1:14:09][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code310.hmml b/cmuratori/hero/code/code310.hmml index 8e94308..4a981ff 100644 --- a/cmuratori/hero/code/code310.hmml +++ b/cmuratori/hero/code/code310.hmml @@ -25,7 +25,7 @@ [53:00][Blackboard: Why put the daisy-chaining into the actual sorting system] [55:21][handmade_render_group.cpp: Provisionally make PushRenderElement_() only sort a NewElement, otherwise merge the Existing entry] [1:01:23][Compile and run properly] -[1:01:34][Q&A] +[1:01:34][Q&A][:speech] [1:02:07][@Miblo][Thanks to the grid partitioning, do we now have a convenient way of doing the graph sort in SIMD, possibly processing four grid squares, or four sprites within a square, at once? Or is it not quite that simple?] [1:05:38][@themikedx][With regards to the flags and the order checking, if you are &ing the flags with the id, to test if you have seen it before, what happens when another item does the same check and &s it with the same (changed) unit? Doesn't that make the result different to the check flags & mask = id for the new item? Did I miss something (or did you & the flags with the mask before you set the id to clear it (the old id) first?] [1:06:59][Blackboard: How the Flags and the Sprite_IndexMask is working] @@ -33,5 +33,5 @@ [1:13:39][@goodpau6][Will we ever do any network programming on Handmade Hero (i.e. multiplayer)?] [1:14:08][@bryanwwag][I love how you said "we don't want to solve this with hacks" for a particular sorting condition. Do you think the engine should cover most / all boundary conditions or is there room for "boundary hacks" in certain / extreme circumstances?] [1:14:53][Blackboard: On not having the necessary information to do a correct sort in 2D] -[1:17:45][Close down] +[1:17:45][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code311.hmml b/cmuratori/hero/code/code311.hmml index 7e1df70..6034700 100644 --- a/cmuratori/hero/code/code311.hmml +++ b/cmuratori/hero/code/code311.hmml @@ -16,8 +16,8 @@ [40:44][handmade_world_mode.cpp: Stop those AddPiece() calls from taking such tweaky values] [42:36][Consider how to articulate the intention that one sprite (e.g. the head) must always draw in front of another (e.g. the aggregated body)] [49:55][Blackboard: Manual Edge Specification] -[53:48][Q&A] -[56:18][cmuratori: How do I get insobot to ask a question?] -[56:54]["insobot is kind of a national treasure"][quote 502] -[56:58][Close it down] +[53:48][Q&A][:speech] +[56:18][@cmuratori][How do I get insobot to ask a question?] +[56:54]["insobot is kind of a national treasure"][:speech][quote 502] +[56:58][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code312.hmml b/cmuratori/hero/code/code312.hmml index 94d0a8b..6e576e6 100644 --- a/cmuratori/hero/code/code312.hmml +++ b/cmuratori/hero/code/code312.hmml @@ -29,7 +29,7 @@ [48:01][Run the game and see that we're in a better situation, but not quite perfect] [50:49][Toggle on GlobalShowSortGroups and identify that, when the sorting is incorrect, we have a cycle] [53:58]["Thank you, Mr Cycle Detection"][quote 503] -[54:15][Q&A] +[54:15][Q&A][:speech] [54:55][@thesizik][Perhaps breaking the cycle on the in-front / behind pair?] [56:49][@LongBoolean][Will there ever be a case when the character's facing direction will change what we want for the sort order? I can think of a possible case if the characters had arms. Does the current method take these cases into account?] [57:34][@Miblo][Looking forward to rewatching that simplification from early on. I don't think I quite followed that live] @@ -41,5 +41,5 @@ [1:10:55][There is no wheel][quote 504] [1:15:52][On love and money] [1:16:34]["Your goal has to be that the reason you want money is to make games, not the reason you make games is to make money"][quote 505] -[1:19:03][Close up shop] +[1:19:03][Close up shop][:speech] [/video] diff --git a/cmuratori/hero/code/code313.hmml b/cmuratori/hero/code/code313.hmml index b1db8e9..306e62d 100644 --- a/cmuratori/hero/code/code313.hmml +++ b/cmuratori/hero/code/code313.hmml @@ -25,12 +25,12 @@ [54:20][Debugger: Break into ChunkPositionFromTilePosition() and inspect the offset values] [57:38][Debugger: Break into ConvertToLayerRelative() and inspect the Z values] [59:50][handmade_entity.cpp: Provisionally compute the relative layer we want for the entities] -[1:02:06][Q&A] +[1:02:06][Q&A][:speech] [1:03:47][@insobot][Um. Because undefined behavior?] [1:04:30][@telepathyy][What keyboard do you have?] [1:05:40]["Like putting your finger in a cloud"][quote 506] [1:06:00][@bestofluck][Do you expect that the final game will contain enough sprites to warrant using a texture atlas to reduce the number of texture binds per frame?] [1:08:33][@khorm][I don't understand why the "base" Z value of each floor would be negative, it seems really contrived. It seems very logical to me to have 0 as as the "bottom". Maybe it has to do with rendering? I have not followed the latest shows] [1:09:50][Blackboard: Canonical Point for a Chunk] -[1:13:22][Wrap it up] +[1:13:22][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code314.hmml b/cmuratori/hero/code/code314.hmml index 82da216..cded728 100644 --- a/cmuratori/hero/code/code314.hmml +++ b/cmuratori/hero/code/code314.hmml @@ -35,8 +35,8 @@ [53:57][handmade_render.cpp: Make BuildSpriteGraph() take and return NodeIndexA, which SortEntries() will pass to it] [57:07][Run the game and see that we have no change] [57:22][build.bat: Switch back to -Od, run the game and enable the sort groups] -[58:15][Q&A] +[58:15][Q&A][:speech] [58:44][@Miblo][Where are all those familiars coming from?!] [1:01:15][@jheringa][Snake looks broken?] -[1:06:47][Wrap it up] +[1:06:47][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code315.hmml b/cmuratori/hero/code/code315.hmml index 237a7df..c665a77 100644 --- a/cmuratori/hero/code/code315.hmml +++ b/cmuratori/hero/code/code315.hmml @@ -33,11 +33,11 @@ [1:05:28][handmade_render_group.cpp: Make PushClipRect() call PushBuffer()] [1:07:15][handmade_render_group.cpp: Make PushBuffer() correctly set Result.SortEntry] [1:07:31][Run the game and hit the assertion in SafeTruncateToU16()] -[1:07:53][Q&A] +[1:07:53][Q&A][:speech] [1:09:01][Debugger: Step into PushRenderElement() and GameUpdateAndRender() and inspect the values] [1:10:52][handmade_platform.h: Make RenderCommandStruct() take the correct default values] [1:12:02][@dj_crixl][You mentioned earlier that the compiler would optimize the code making pointer comparison unsafe. When does that happen?] [1:12:24][Blackboard: "Memory Region" / "Allocation", and Pointer Arithmetic] -[1:16:59][Assign homework] -[1:17:56][Wrap it up] +[1:16:59][Assign homework][:speech] +[1:17:56][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code316.hmml b/cmuratori/hero/code/code316.hmml index 24f8591..ab0e70e 100644 --- a/cmuratori/hero/code/code316.hmml +++ b/cmuratori/hero/code/code316.hmml @@ -39,7 +39,7 @@ [50:21][handmade_render.cpp: Make RenderCommandsToBitmap() take a RenderTargets array] [52:54][handmade_debug.cpp: Make DEBUGBegin set the RenderTarget to 1] [53:33][Run the game and watch the debug information disappear into that other RenderTarget] -[54:07][Q&A] +[54:07][Q&A][:speech] [54:51][@popcorn][Next week?] [56:11][@necktrox][A bit unrelated to the project, but what do you think about the Rust language?] [56:39][@billdstrong][So when do we think we will be ready for the new graphics assets? I'm excited] @@ -51,6 +51,6 @@ [1:04:37][@lord_marshall_][Are you still working full time? Why only stream one hour a night?] [1:04:50][@se24vad][How would you go about rendering huge tilemaps? Some batching techniques, or any tips?] [1:06:05][@billdstrong][Would that be a good technique to use to create an overhead map?] -[1:07:16][insobot Soa and aos questions can be made with as minimal interference in timing the host operating] -[1:07:37][Close down] +[1:07:16][@insobot][Soa and aos questions can be made with as minimal interference in timing the host operating] +[1:07:37][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code317.hmml b/cmuratori/hero/code/code317.hmml index b0070c1..bf5939b 100644 --- a/cmuratori/hero/code/code317.hmml +++ b/cmuratori/hero/code/code317.hmml @@ -38,12 +38,12 @@ [1:03:12][handmade_render.cpp: Make RenderCommandsToBitmap() clear both the MaxRenderTargetIndex and the previous TargetIndex] [1:03:41][Run the game and see that now it looks like we're good] [1:04:00][Note that the clear is clearing at 1.0f alpha, and that it has to actually clear, not blend] -[1:04:46][Q&A] +[1:04:46][Q&A][:speech] [1:05:57][@Kknewkles][Giger / Lovecraft-themed Handmade Hero DLC confirmed?] [1:06:08][@soysaucethekid][Are you writing to the second buffer all the time? If so, is it possible to only use when you need it (like during the transitions)?] [1:06:37][handmade_entity.cpp: Make UpdateAndRenderEntities() only do the multiple buffers stuff if the alpha is enabled] [1:09:25][@pseudonym73][How does a limbless child "limp along", exactly?] [1:09:34][@inquarry][How many floors can this code support? I envision a tall tower or stairwell, peering down 20 or so floors and seeing NPCs acting as normal. Was that your intent?] [1:10:56][@Kknewkles][How do you use trace files to debug? Someone trying my game prototype had a crash and sent me a (95MB) dump file, since you once said it's helpful. I don't doubt that, but what do you do with the damn thing?] -[1:13:39][Wrap it up] +[1:13:39][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code318.hmml b/cmuratori/hero/code/code318.hmml index 1fa51d1..76a7000 100644 --- a/cmuratori/hero/code/code318.hmml +++ b/cmuratori/hero/code/code318.hmml @@ -33,7 +33,7 @@ [57:12][handmade_render.cpp: Remove extraneous initialisations from DrawRectangleQuickly()][quote 515] [58:52][Blackboard: Doing the dot-product on unit vectors vs vectors with length] [1:00:54][Blackboard: Doing that in a non-orthogonal coordinate space] -[1:02:08][Q&A] +[1:02:08][Q&A][:speech] [1:02:37][@krrsplat][Earlier when that pink color showed up, that was the color you used long long ago when you were setting up the OpenGL renderer] [1:02:56][Blackboard: Why we were seeing the pink] [1:04:48][@thesizik][Are the PynX and V calculations correct?] @@ -48,5 +48,5 @@ [1:13:30][@vorpleblade][What is the blackboard software you are using?] [1:13:41][@realist_01][Nub3sock asked if you would consider local multiplayer] [1:14:29][@Miblo][Speaking of normal maps, could we have used those to help sort the sprites? I know they don't give you 3D data, but is there anything in there that we could leverage?] -[1:16:45][Wrap it up] +[1:16:45][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code319.hmml b/cmuratori/hero/code/code319.hmml index 116c209..faf037a 100644 --- a/cmuratori/hero/code/code319.hmml +++ b/cmuratori/hero/code/code319.hmml @@ -24,7 +24,7 @@ [50:01][Blackboard: How this order dependence of the transform is captured by matrix maths] [52:41][Blackboard: A formal algebraic explanation for the scale and rotation compensation] [55:59][Blackboard: A glimpse into the future of actually inverting the matrix] -[57:14][Q&A] +[57:14][Q&A][:speech] [58:02][@stropheum][You've got some salty dogs in your chat tonight, Casey] [58:32][A few words on how cool linear algebra can get] [59:46][@stropheum][Did you know you were going to have to implement the sort of reverse mapping when you took that shortcut before? Was it a deliberate choice or just a cut corner that had to be uncut?] @@ -35,5 +35,5 @@ [1:06:38][@jpmontielr][Have you seen Gilbert Strang's lectures on linear algebra?] [1:07:40][@d3licious][You suggest students not knowing how to solve linear algebra problems by hand?] [1:09:42][@jessem3y3r][Would you consider using C++ templates for matrices, say in 3D programming?] -[1:10:57][We are done] +[1:10:57][We are done][:speech] [/video] diff --git a/cmuratori/hero/code/code320.hmml b/cmuratori/hero/code/code320.hmml index a7a5d78..7aede6d 100644 --- a/cmuratori/hero/code/code320.hmml +++ b/cmuratori/hero/code/code320.hmml @@ -24,7 +24,7 @@ [52:00][handmade_render.cpp: Make DrawRectangleQuickly() correctly compute the nXAxis and nYAxis] [52:24][Run the game and see that it now works perfectly] [53:23][A few words on the importance of understanding maths concepts in diagnosing and solving programming problems] -[56:06][Q&A] +[56:06][Q&A][:speech] [56:43][@Miblo][Semi-off-topic: Any chance you could describe a little more what you'd want of an algebraic blackboard program?] [57:18][Blackboard: Why Casey Doesn't Like Mathematica] [1:02:37][@thesizik][Whoa...] @@ -38,6 +38,6 @@ [1:18:10][@jpmontielr][What do you think of Khan Academy as a math learning resource?] [1:19:39][@cubercaleb][Yeah, I mean a 2D game that is drawn in 3D] [1:20:47][@lkey144][Recognizing "the kinds of things you are working with, and the kind of problem you are working on" is a fundamental skill. I'm not all that sure how to teach that directly, though, beyond doing something like what you are doing here, and / or repeated experience with solving problems] -[1:24:57][Imagining a series that is more focused on mathematical problem identification and solving] -[1:26:10][Close down] +[1:24:57][Imagining a series that is more focused on mathematical problem identification and solving][:speech] +[1:26:10][Close down][:speech] [/video] diff --git a/cmuratori/hero/code/code321.hmml b/cmuratori/hero/code/code321.hmml index db9ff8a..8f7ac1b 100644 --- a/cmuratori/hero/code/code321.hmml +++ b/cmuratori/hero/code/code321.hmml @@ -48,10 +48,10 @@ [55:29][Debugger: Run the game to see if we are getting a valid framebuffer, and investigate what's happening] [57:56][handmade_opengl.cpp: Make OpenGLRenderCommands() store the TextureHandle] [58:27][Run the game and see that the alpha blending now works beautifully] -[58:46][Q&A] +[58:46][Q&A][:speech] [1:02:22][@the_any_key][What are the biggest challenges you have faced with the game thus far?] [1:04:12][@pragmascrypt][Does AZDO work across NVIDIA, AMD and Intel] [1:05:42][@roam00010011][Compare the Handmade Hero engine complexity vs 1935] [1:06:08][@eltrufas][For catching up to the previous episodes, do you recommend going through all the videos, or to try to understand the current codebase?] -[1:09:02][That's the end of it] +[1:09:02][That's the end of it][:speech] [/video] diff --git a/cmuratori/hero/code/code322.hmml b/cmuratori/hero/code/code322.hmml index 452467d..6060be1 100644 --- a/cmuratori/hero/code/code322.hmml +++ b/cmuratori/hero/code/code322.hmml @@ -38,7 +38,7 @@ [1:01:59][Debugger: Resize the window, step in to WinMain() and inspect the MouseU and MouseV] [1:03:21][win32_handmade.cpp: Make WinMain() correctly compute the MouseY] [1:03:56][Run the game and see that the mouse coordinates are now being passed correctly] -[1:04:18][Q&A] +[1:04:18][Q&A][:speech] [1:05:22][Close that issue] [1:06:39][@cubercaleb][(Before today) I have a 1600x900 monitor and when I change the code to render at that resolution, both the UI picking and the collision detection for the player get all sorts of messed up, but I haven't tested that since you removed the free moving stuff] [1:06:57][@hayai][Can you make it so that holding shift while resizing the window makes it just scale at the intended aspect ratio?] @@ -73,5 +73,5 @@ [1:50:41][win32_handmade.cpp: Make Win32MainWindowCallback() set GetWindowRect, run the game and see that it works] [1:52:03][@hayai][Yes, it helps] [1:52:14][@cubercaleb][For AdjustWindowRect you should pass WS_OVERLAPPEDWINDOW which is different from WS_OVERLAPPED, although perhaps you meant that?] -[1:52:43][Wrap it up] +[1:52:43][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code323.hmml b/cmuratori/hero/code/code323.hmml index f3c6092..0c40310 100644 --- a/cmuratori/hero/code/code323.hmml +++ b/cmuratori/hero/code/code323.hmml @@ -37,7 +37,7 @@ [55:37][Close that issue and determine to fix the "PackEntityIntoChunk linked list bug" issue] [56:56][handmade_world.cpp: Fix the linked list in PackEntityIntoChunk()] [59:46][Run the game, assume that it's fixed and close the issue] -[1:00:50][Q&A] +[1:00:50][Q&A][:speech] [1:02:40][@snoringtortoise][Not sure what the minimum OpenGL version the game supports, but according to OpenGL.org, the GL_MAJOR_VERSION and GL_MINOR_VERSION are only available in OpenGL 3.0 and above. On lower versions you have to parse the GL_VERSION string[ref site="OpenGL" page="Get Context Info" @@ -47,5 +47,5 @@ [1:08:40][Debugger: Run the game and check out our parsed OpenGL version number] [1:09:35][@danyguag][So I am designing a 3D game engine and want to first write a software renderer for it to learn more about renderers. Do you think I should go straight for OpenGL or software renderer and then OpenGL?] [1:10:28][@insofaras][sscanf(str, "%d.%d", major, minor)] -[1:12:21][Wrap it up] +[1:12:21][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code324.hmml b/cmuratori/hero/code/code324.hmml index c3b2c69..63324a4 100644 --- a/cmuratori/hero/code/code324.hmml +++ b/cmuratori/hero/code/code324.hmml @@ -27,7 +27,7 @@ [51:22][handmade_asset.cpp: Consider doing some general cleanup and removing the asset lock] [53:03][handmade_asset.cpp: Introduce AddOp() with a view to implementing it tomorrow] [55:27][Run the game and see that we're in no man's land] -[55:42][Q&A] +[55:42][Q&A][:speech] [56:51][@thesizik][It's a bit late now, but I was thinking debug sliders for FOV and camera distance could be useful] [57:45][@snoringtortoise][On the bug list, what is that Clang compatibility issue? I'm working on a Macbook using LLVM, so may be able to work it out] [1:00:49][@erdomina][I still see flickering on the stairs. Is the sort solution finalized?] @@ -46,5 +46,5 @@ site="Twitter" page="#include <vulkan/vulkan.h> I can see they put a lot of work into avoiding making the same cross-platform API design mistakes as OpenGL!" url="https://twitter.com/nothings/status/762456490661728256"]] -[1:13:27][Wrap it up] +[1:13:27][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code325.hmml b/cmuratori/hero/code/code325.hmml index 387a6e4..8f3c19c 100644 --- a/cmuratori/hero/code/code325.hmml +++ b/cmuratori/hero/code/code325.hmml @@ -30,7 +30,7 @@ [59:37][win32_handmade.cpp: Make WinMain() call OpenGLManageTextures() inside a mutex] [1:01:15]["You ALMOST only live once"][quote 519] [1:04:49][Run the game and see that it almost worked] -[1:05:06][Q&A] +[1:05:06][Q&A][:speech] [1:05:50][handmade_asset.cpp: Note that we haven't dealt with Work->Asset->State] [1:07:07][@dmitsuki][Handmade Vulkan renderer when?] [1:07:21][@ezysigh][Do you need a safety write barrier before the current ticket increment (inside mutex_unlock)?] @@ -41,5 +41,5 @@ [1:13:05][@caviar_liberta][And it might be pointless to do but, since you are using C++, have you used any ASM calls inside your code?] [1:14:23][@baramordax][Is there a reason you're not using scoped mutex guards that handle unlocking whenever the guard goes out of scope?] [1:14:38][win32_handmade.cpp: Demo the difference between our mutex and a scoped mutax guard] -[1:17:48][Wrap it up with a few words on what is likely going wrong with the texture loading] +[1:17:48][Wrap it up with a few words on what is likely going wrong with the texture loading][:speech] [/video] diff --git a/cmuratori/hero/code/code326.hmml b/cmuratori/hero/code/code326.hmml index da1550d..7bd1324 100644 --- a/cmuratori/hero/code/code326.hmml +++ b/cmuratori/hero/code/code326.hmml @@ -29,7 +29,7 @@ [52:39][build.bat: Switch to -Od, run the game, crash in OutChar() and investigate why] [56:35][handmade_shared.h: Correct the typo in FormatStringList()] [56:43][Run the game and see that we're printing things out, just without any formatting] -[57:24][Q&A] +[57:24][Q&A][:speech] [58:33][@Pseudonym][Is this it?[ref site="Marc Andrysco, Ranjit Jhala, Sorin Lerner" page="Printing Floating-Point Numbers: A Faster, Always Correct Method" @@ -38,6 +38,6 @@ [59:44][@thesizik]["Blame" in Github lets you see file change history] [1:00:03][@popcorn][What does -1 in Dest.At\[-1\] do?] [1:01:14][@the_troll_toll][I want to start getting into this series - is there a way to easily compile / run this code on Mac OSX?] -[1:03:58][Wrap it up] +[1:03:58][Wrap it up][:speech] [1:04:59][@nxsy][How long is the break?] [/video] diff --git a/cmuratori/hero/code/code327.hmml b/cmuratori/hero/code/code327.hmml index 7ddde15..e3ff086 100644 --- a/cmuratori/hero/code/code327.hmml +++ b/cmuratori/hero/code/code327.hmml @@ -56,12 +56,12 @@ [53:39][Run the game, see the printing in action, hit our assertion in FormatString() and investigate why] [58:10][handmade_shared.h: Make FormatString() increment At at the end] [59:17][Run the game and see that we're now all good] -[1:00:42][Q&A] +[1:00:42][Q&A][:speech] [1:02:49][@soysaucethekid][Will you be doing a sprintf?] [1:03:49][@chzmstr][Is the GitHub repo accessible to preorders?] [1:04:53][@neres909][I'm following your series from beginning and I'm writing my own game (obviously from scratch too!). Is it okay to use in my win32 layer similar code (with same thought by mostly written by myself)?] [1:05:56][@mightyarm][What are you using for DRM?] -[1:06:43][hmd_bot @Neres909: Casey is currently using a Razer BlackWidow Tournament Edition Stealth. See also: !switches] +[1:06:43][@hmd_bot][@Neres909: Casey is currently using a Razer BlackWidow Tournament Edition Stealth. See also: !switches] [1:07:09][@insofaras][Throw in a hardware keyfob for good measure] -[1:07:47][Shut this down] +[1:07:47][Shut this down][:speech] [/video] diff --git a/cmuratori/hero/code/code328.hmml b/cmuratori/hero/code/code328.hmml index 7f7b11f..65ad304 100644 --- a/cmuratori/hero/code/code328.hmml +++ b/cmuratori/hero/code/code328.hmml @@ -29,7 +29,7 @@ [1:00:37][handmade_shared.h: Give FormatStringList() the ability to choose whether or not to reverse the characters] [1:02:02][Run the game and admire the beautiful printout] [1:02:17][handmade_debug.cpp: Play with the formatting in DrawTopClocksList(), running the game and seeing it all working fine] -[1:04:58][Q&A] +[1:04:58][Q&A][:speech] [1:05:39][@neres909][I posted my question twice on pre-stream but both times it wasn't addressed. I experienced a bit of lag back then so I checked on archive what's up and it wasn't there. Am I doing something wrong?] [1:06:31][@hayai][A few people in the twitch chat are asking about what level of math do you think is required to be an effective programmer] [1:08:26][@internal_static_void][Casey, I understand that you are replacing all the string header functions (strlen, etc.). Are you not worried about optimization for these new functions you plan to write?] @@ -47,5 +47,5 @@ page="Moving towards an interactive path tracer. I find I'm using @handmade_hero 2D rendering code time and time again" url=https://twitter.com/handyj443/status/765320487727665152]] [1:27:46][@neres909][Thank you for the in-depth explanation! I have one more Q: Since you're going on a break, can you trash out OOP just a bit so we don't get confused in the time you're not there, and stick to beloved compression oriented programming] -[1:29:12][Wrap it up] +[1:29:12][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code329.hmml b/cmuratori/hero/code/code329.hmml index e219713..e83238f 100644 --- a/cmuratori/hero/code/code329.hmml +++ b/cmuratori/hero/code/code329.hmml @@ -26,7 +26,7 @@ [47:18][Run the game and see that the printouts are untouched] [47:37][handmade_shared.h: Make FormatStringList() correctly compute the Precision] [49:23][Run the game, see the floating point values looking better and consider what the Width specifier actually means] -[55:00][Q&A] +[55:00][Q&A][:speech] [56:26][@zamar037][Does the float printout account for left or right alignment?] [58:17][@sharlock93][Are we stuck on what something %3d means? I was away] [59:17][@culver_fly][Sorry if it sounds rude, but why do you even care about the specs? Why don't you just print whatever you want it to be? I mean, it's your code?] @@ -50,5 +50,5 @@ [1:10:08][@music_guru][What else is left other than printf that would need to be removed?] [1:13:32][@longboolean][Could you explain briefly why this simple approach of printing floats can lead to precision errors?] [1:14:53][@zeanith64][Will everything be recorded at HandmadeCon? Considering what nearly happened last year, I'm a little worried] -[1:16:28][Wrap it up] +[1:16:28][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code330.hmml b/cmuratori/hero/code/code330.hmml index cc83cd1..20618b3 100644 --- a/cmuratori/hero/code/code330.hmml +++ b/cmuratori/hero/code/code330.hmml @@ -39,7 +39,7 @@ [47:52][Run the game and see how it goes] [48:44][win32_handmade.cpp: Make Win32LoadGameCode() set DEBUGFrameEnd] [49:03][Close that issue and request help from clang users to address the final clang compatibility issue] -[50:43][Q&A] +[50:43][Q&A][:speech] [51:10][@telconfig][Casey, is there a bug with chunk creation? You added a free list but are not using it?] [52:18][@mmozeiko][When doing copy & pasta you left (f64) cast in wrong place for ternary operator - ((f64)va_arg(ArgList, f64)) \: (va_arg(ArgList, f32))] [52:34][handmade_shared.h: Fix ReadVarArgFloat()] @@ -54,5 +54,5 @@ [1:06:55][@uplinkcoder][What makes a bad programmer in your opinion?] [1:07:28][@internal_static_void][About your build.bat file, why do you disable exceptions and warnings?] [1:08:08][@Miblo][A related thing mentioned in a creative writing course I did was to "postpone perfection"] -[1:09:44][Wind it down] +[1:09:44][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code331.hmml b/cmuratori/hero/code/code331.hmml index e415782..78e7727 100644 --- a/cmuratori/hero/code/code331.hmml +++ b/cmuratori/hero/code/code331.hmml @@ -17,7 +17,7 @@ [44:13][Blackboard: Multiple Sim Regions and Active Entities] [48:07][Blackboard: When sim regions coincide] [51:05][Blackboard: Merging sim regions] -[55:12][Q&A] +[55:12][Q&A][:speech] [56:16][@jayphi][What are the reasons for separate regions again?] [57:41][@Pseudonym][Is Bob the guy in the tree?] [57:46][@JamesWidman][(Related to JayPhi's Q) So I was playing Kingdom: New Lands recently, and it seemed like there were some really bad frame rates that coincided with battles involving hundreds of entities on the opposite side of the world... (like, opposite to where the camera was)] @@ -31,5 +31,5 @@ [1:10:55][@Mr4thDimention][You could always artificially keep the non-player agents away from each other] [1:11:13][@thesizik][What do you think about a boolean flag on each update-able thing, flip it when you update, and alternate each frame which value you check for?] [1:12:10][@JamesWidman][Why does it not suffice to use the total area of all overlapped regions (and just refuse to exceed a limit)?] -[1:13:40][Close this down] +[1:13:40][Close this down][:speech] [/video] diff --git a/cmuratori/hero/code/code332.hmml b/cmuratori/hero/code/code332.hmml index 33ddd9a..6ccba4d 100644 --- a/cmuratori/hero/code/code332.hmml +++ b/cmuratori/hero/code/code332.hmml @@ -24,7 +24,7 @@ [56:26][handmade_debug_ui.cpp: Introduce DrawTooltips() and rework AddTooltip()] [1:01:52][handmade_debug.cpp: Make DEBUGEnd() call DrawTooltips()] [1:03:03][Run the game and see the tooltips correctly hovering] -[1:03:46][Q&A] +[1:03:46][Q&A][:speech] [1:05:31][@internal_static_void][Is internal a #define static internal] [1:05:39][@anonymous519][Could you talk a bit about the metaprogramming stuff you use at work? I'm kind of annoyed at the limitations of C/C++ and it looks like the JAI compiler won't be released anytime soon. Do you actually parse the code and construct an AST, or is it simpler than that?] [1:05:57][@internal_static_void][Also, are you a fan of templates or do you use void * instead] @@ -35,5 +35,5 @@ [1:11:30][@sean_bryant][Can you imagine any scenarios where batched rendering might be useful in Handmade Hero?] [1:12:06][@anonymous519][I've only recently started to think about metaprogramming. Not expecting you to go in-depth, but could you briefly list some of the features you've implemented?] [1:12:24][@longboolean][Will you be composing the music / SFX for Handmade Hero (if any) or do you have someone else doing that?] -[1:14:44][That's about it] +[1:14:44][That's about it][:speech] [/video] diff --git a/cmuratori/hero/code/code333.hmml b/cmuratori/hero/code/code333.hmml index 8f657f4..1ce9397 100644 --- a/cmuratori/hero/code/code333.hmml +++ b/cmuratori/hero/code/code333.hmml @@ -31,7 +31,7 @@ [53:53][Consider what is currently happening and how to fix it] [54:49][handmade_render_group.cpp: Prevent GetRenderEntityBasisP() from doing the perspective transform, run the game and see how boring that looks] [56:43][Consider specifying a range in which the scaling doesn't occur] -[59:36][Q&A] +[59:36][Q&A][:speech] [1:01:07][@cyberpunkhobo][Are there any particular reasons not to prefer continuous scaling in Z besides easing sorting?] [1:01:37][Blackboard: Avoiding perspective transform for the scenery] [1:04:44][@soysaucethekid][I may have missed it, but what's the reasoning for typedef'ing a b32x as a b32 and not just use b32?] @@ -47,5 +47,5 @@ [1:13:11][@williambundy][Are you doing a whole layer transform at once, or per object?] [1:13:24][@cynokron][Yes, but currently stairs are owned by the floor below them. If they are owned by the floor above them then you wouldn't see the stairs two floors above, since they would be two floors above (thus not blocking your way and not needing any alpha)] [1:14:03][@pseudonym73][Now I'm curious if Casey speaks faster or slower than Buckminster Fuller did] -[1:14:29][Go ahead and close it down] +[1:14:29][Go ahead and close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code334.hmml b/cmuratori/hero/code/code334.hmml index da3988c..426bee9 100644 --- a/cmuratori/hero/code/code334.hmml +++ b/cmuratori/hero/code/code334.hmml @@ -18,7 +18,7 @@ [44:15][handmade_world.cpp: Make PackEntityIntoChunk() and ConnectEntityPoints() operate on the AutoBoostTo] [44:47][Run the game and see that the boost pad is set] [45:07][handmade_world_mode.cpp: Make AddStandardRoom() position the boost pad at the top-left of the hole] -[46:03][Q&A] +[46:03][Q&A][:speech] [47:16][@internal_static_void][About my first question, will I be able to view it again, because I was really interested about your answer?] [47:49][@arigato_corleone][Are you using entity component system architecture or different?] [49:33][@hida_akano][Have you come up with a story for the game yet?] @@ -32,5 +32,5 @@ [1:00:11][@zilarrezko][How are holes and teleport pads going to help us find The Variable?] [1:01:06][@arigato_corleone][Any tips for someone interested in game engines considering getting into the games industry?] [1:01:46][@thestraubulous][Do you have a set streaming schedule?] -[1:01:56][Go right into mentioning the streaming schedule] +[1:01:56][Go right into mentioning the streaming schedule][:speech] [/video] diff --git a/cmuratori/hero/code/code335.hmml b/cmuratori/hero/code/code335.hmml index 1ef7d6e..dd161a3 100644 --- a/cmuratori/hero/code/code335.hmml +++ b/cmuratori/hero/code/code335.hmml @@ -12,7 +12,7 @@ [40:41][handmade_entity.cpp: Make the body hop from the boost pad to the landing location] [44:10][Run the game and try hopping off the boost pad] [45:35][todo.txt: Update and consult the TODO list] -[50:58][Q&A] +[50:58][Q&A][:speech] [51:29][@sssmcgrath][My 3 year old would like to know "why he angry?" re: the hero[ref site="Molly Rocket" page="Handmade Hero Art Progress" @@ -66,5 +66,5 @@ [1:45:43][@mellowplexus][Remove context from OpenGL? What do you mean?] [1:47:50][@jameswidman][Interesting that you and Jonathan Blow disagree about the usefulness of AZDO (but you both seem to agree that we should just have a stable ISA and not even bother with programming GPUs through an API anymore)] [1:50:42][@leftsideej][Do you think DX12 is going to be a big improvement over 11?] -[1:50:54][Done] +[1:50:54][Done][:speech] [/video] diff --git a/cmuratori/hero/code/code336.hmml b/cmuratori/hero/code/code336.hmml index cb7ee4f..2332775 100644 --- a/cmuratori/hero/code/code336.hmml +++ b/cmuratori/hero/code/code336.hmml @@ -35,12 +35,12 @@ [1:23:51][todo.txt: Add "Arena upgrade!"] [1:25:05][handmade_world_mode.cpp: Make PlayWorld() allocate the ParticleCache from the ModeArena for now] [1:26:20][Run the game and see that it's fine now] -[1:26:48][Q&A] +[1:26:48][Q&A][:speech] [1:27:34][@greenish__][I think you should be searching for MaxFramesSinceTouched instead of MinFramesSinceTouched] [1:27:49][handmade_particles.cpp: Make GetOrCreateParticleSystem() test on the MaxFramesSinceTouched] [1:28:21][@gene_victor][So was the problem that the transient memory vaporized per frame, while the particle cache needs to stay across frame?] [1:31:15][@snoringtortoise][Not sure if this has been answered on a previous stream (still trying to catch up). When you introduced the threading model, you mentioned that we would want one thread per core, but since the OS creates threads for us (so helpful) for things like audio, does it matter then that we end up with more threads than cores?] [1:33:36][@chibin][Do you know if he fully swapped out of emacs?] [1:34:06][Demo and plug (in-development) 4coder features] -[1:41:17][Wrap it up] +[1:41:17][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code337.hmml b/cmuratori/hero/code/code337.hmml index 61d3662..0e0cf34 100644 --- a/cmuratori/hero/code/code337.hmml +++ b/cmuratori/hero/code/code337.hmml @@ -17,7 +17,7 @@ [49:49][handmade_particles.h: Introduce particle_v4 struct] [51:48][handmade_particles.h and *.cpp: Introduce particle struct and GetParticle() for PlayAround() to use] [57:48][handmade_particles.h: Introduce v3_4x and versions of operator+=(), operator*() and operator+() to operate on and return those] -[1:05:10][Q&A] +[1:05:10][Q&A][:speech] [1:05:52][@mmozeiko][On MSVC it is possible to create non-member inline operator += for __m128. It is done in same way as you did for v2/v3/v4 types. But for gcc / clang you cannot do += for __m128, because they already have it builtin operator] [1:06:33][handmade_particles.h: Tweak &operator+=()] [1:07:30][@soysaucethekid][Instead of doing the particle_v3 struct, could you accomplish the same thing with macros and some pointer math?] @@ -27,5 +27,5 @@ [1:14:10][@phort99][If JAI releases before the end of this project and is good enough, would you ever consider rewriting the project in JAI, or is the project too big and the gains too small?] [1:15:48][@macielda][Is it hard to debug SIMD in Linux? Have you tried it?] [1:17:04][@longboolean][It would be cool to see a stream or two of a good programmer (you) going through the motions of learning JAI] -[1:18:34][Closing gambit] +[1:18:34][Closing gambit][:speech] [/video] diff --git a/cmuratori/hero/code/code338.hmml b/cmuratori/hero/code/code338.hmml index 94b3ca5..c76839f 100644 --- a/cmuratori/hero/code/code338.hmml +++ b/cmuratori/hero/code/code338.hmml @@ -31,7 +31,7 @@ [1:04:58][handmade_particles.cpp: Tweak SpawnFire() to shorten the lifetime of the particles, run the game and check them out] [1:06:37][handmade_world_mode.cpp: Remove LastCameraOffset and displace the particles with the WorldTransform] [1:09:51][Run the game and admire the particles] -[1:10:33][Q&A] +[1:10:33][Q&A][:speech] [1:11:20][@mmozeiko][gcc & clang don't have m128_f32 member for __m128. They need _mm_store_ps or something like ((float*)&A->P.x)\[index\] (or union with float array)] [1:12:05][handmade_particles.cpp: Use the M macro for rendering the particles and introduce handmade_simd.h] [1:16:04][@nxsy][soysaucethekid was suggesting to slow down the time to make sure it is now right] @@ -40,5 +40,5 @@ [1:22:58][@thesizik][But when your position goes from INT_MIN to INT_MAX, won't it cause undefined behavior?] [1:23:49][todo.txt: Update the TODO list] [1:24:16][@thesizik][Signed integer overflow?] -[1:25:45][Lament the absence of real 3D and close things down] +[1:25:45][Lament the absence of real 3D and close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code339.hmml b/cmuratori/hero/code/code339.hmml index d90dcb5..c433eb9 100644 --- a/cmuratori/hero/code/code339.hmml +++ b/cmuratori/hero/code/code339.hmml @@ -13,7 +13,7 @@ [46:46][handmade_world_mode.cpp: Pass AlignNoClear(16) to the PushStruct() call which sets the ParticleCache, run the game and find that that fixed it] [47:19][Switch to the software renderer, observe the corkscrew motion in the particles and consider how to fix it] [50:29][handmade_particles.cpp: Make UpdateAndRenderFire() pass 0 as the alignment to PushBitmap(), run the game to see if that affects it, and continue investigating] -[54:57][Q&A] +[54:57][Q&A][:speech] [55:17][@nxsy][Look at the screen border while you're doing it] [57:17][@cyberpunkhobo][Entities get displaced by the modified CameraP during room transitions, I think] [57:52][@cyberpunkhobo][What if you disable the parabolic camera transition between rooms?] @@ -30,5 +30,5 @@ [1:19:36][@zuurr_][In UpdateAndRenderEntities (in handmade_entity.h) is the MovementMode_AngleAttackSwipe case missing a break or is the fall-through intentional] [1:19:49][@dragoonx6][How far would you say you are with developing the game? How many episodes can we still expect?] [1:21:16][@serge_rgb][Do you find it difficult to context-switch between 1935 and Handmade Hero, and, if so, has it gotten easier with time?] -[1:23:54][Go back and end the stream] +[1:23:54][Go back and end the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code340.hmml b/cmuratori/hero/code/code340.hmml index 9ceeb80..0ade53b 100644 --- a/cmuratori/hero/code/code340.hmml +++ b/cmuratori/hero/code/code340.hmml @@ -24,7 +24,7 @@ [56:15][handmade_sim_region.cpp: Consider removing ChunkDelta from EndSim()] [1:00:22][Step back into EndSim() and inspect the DestE and Entity] [1:01:11][handmade_world.cpp: Prevent UseChunkSpace() from taking a sim_region] -[1:02:09][Q&A] +[1:02:09][Q&A][:speech] [1:03:16][handmade_sim_region.cpp: Comment out the MaxEntityVelocity assertion in MoveEntity(), run the game and continue investigating] [1:04:35][handmade_sim_region.cpp: Make GetSimSpaceTraversable() only operate if it has an Entity, run the game and see the cool] [1:05:24][@snoringtortoise][Did you resolve the kerning / horizontal advance for kanji characters? I found when implementing it myself on OSX (at the font table level) that Arial doesn't actually have kanji in it. It seems Windows (and Mac - the higher level APIs like CoreText) load multiple font files for you if it detects that you are trying to load a codepoint that is outside the range of a particular font file] @@ -41,5 +41,5 @@ [1:32:50][@phort99][I was about to ask what would happen if one of those snakey guys got themselves stuck in a corner, but I see one already did] [1:34:59][@snoringtortoise][Off-topic: Since there wasn't any sound in the pre-stream, are there any sneak peaks regarding HandmadeCon you can give us?] [1:38:21][todo.txt: Add the trees on traversables bug to the TODO list] -[1:39:10][Close it down] +[1:39:10][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code341.hmml b/cmuratori/hero/code/code341.hmml index 4dfe946..0728ba6 100644 --- a/cmuratori/hero/code/code341.hmml +++ b/cmuratori/hero/code/code341.hmml @@ -16,7 +16,7 @@ [52:35][Continue stepping through DEBUGInit()] [55:29][handmade_debug.cpp: Make StoreEvent() assume that it never frees] [56:08][Run the game with our new dynamically growing arena in action] -[57:33][Q&A] +[57:33][Q&A][:speech] [58:28][@insobot][Chink. Kappa?] [58:48][@dr_s80][If you allocate a new block after calling BeginTemporaryMemory, EndTemporaryMemory is going to restore incorrect values, isn't it?] [59:50][@luam_the_elf][How easy or possible is it to transfer code from Java to an engine that does graphics well and, if it is possible or easy to transfer, which one would you recommend?] @@ -24,5 +24,5 @@ [1:04:36][@flederfalter][How do we free old memory blocks if the base pointer always points to the newest allocated block?] [1:05:01][@longboolean][Perhaps I am missing something, but how do you go back to previously allocated memory blocks? Like for freeing memory and saving it out and reloading it] [1:05:49][@luam_the_elf][So are you a cat in your off time?] -[1:06:06][Wind it down] +[1:06:06][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code342.hmml b/cmuratori/hero/code/code342.hmml index 491433c..9714d4e 100644 --- a/cmuratori/hero/code/code342.hmml +++ b/cmuratori/hero/code/code342.hmml @@ -19,7 +19,7 @@ [1:01:30][Run the game to see that our poor cutscene is gone] [1:03:19][Reflect on our first part of the memory upgrade] [1:04:07][todo.txt: Update the TODO list] -[1:04:48][Q&A] +[1:04:48][Q&A][:speech] [1:05:58][@zilarrezko][Have you ever tried reserving a very large amount of memory, and then committing memory as needed, so the arena can grow without the base pointer changing?] [1:07:08][@dudeinbasement1][Thoughts on placing the "footer", at the beginning of the memory area, so bad co-workers don't overwrite it (because it is at the end currently)] [1:10:09][@m1el][You spend so much time on memory management. If programming games for windows / Linux would it be better to use malloc and then create custom allocation for hot parts?] @@ -30,5 +30,5 @@ [1:17:57][@zilarrezko][If you are planning on large worlds, are you planning then on compressing and decompressing from the mandala on the fly?] [1:19:12][@m1el][Will Handmade Hero use texture compression in OpenGL?] [1:20:19][@pseudonym73][The term "arena" refers to a region of memory from which multiple objects are allocated and which can be deallocated all at once. Some arenas support object freeing, some do not] -[1:21:03][Close up] +[1:21:03][Close up][:speech] [/video] diff --git a/cmuratori/hero/code/code343.hmml b/cmuratori/hero/code/code343.hmml index a7342f7..31351d7 100644 --- a/cmuratori/hero/code/code343.hmml +++ b/cmuratori/hero/code/code343.hmml @@ -18,7 +18,7 @@ [57:31][Run the game and find that that fixed it] [58:55][win32_handmade.cpp: Make Win32BeginRecordingInput() pass &BytesWritten to WriteFile()] [59:23][Run the game and determine that we're not quite reloading correctly] -[59:59][Q&A] +[59:59][Q&A][:speech] [1:00:51][@soysaucethekid][Could you explain the padding you used for the memory struct? I believe you said it was for cache-line stuff, so if you omitted it, would it just result in more cache line misses or would it crash the game?] [1:03:15][@fangk20][How did you get to where you are today and how did you do it, in terms of coding knowledge?[ref site="Molly Rocket" @@ -29,5 +29,5 @@ [1:06:45][@zilarrezko][Have you ever used a rope to manipulate strings?] [1:08:31][@randolfbat][Aren't you going to read in pages that have been deallocated?] [1:11:51][@snoringtortoise][So with memory systems, do you always try to put extra bits of data at the end to ensure if they ask for memory from a specific address then it doesn't ruin their day?] -[1:13:22][Close it down with a glimpse into the future] +[1:13:22][Close it down with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code344.hmml b/cmuratori/hero/code/code344.hmml index e8858b5..8e416db 100644 --- a/cmuratori/hero/code/code344.hmml +++ b/cmuratori/hero/code/code344.hmml @@ -22,15 +22,15 @@ [49:56][win32_handmade.cpp: Introduce Win32ClearBlocksByMask() and Win32FreeMemoryBlock()] [57:55][win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() and PLATFORM_DEALLOCATE_MEMORY() set the LoopingFlags, and introduce Win32IsInLoop()] [1:00:17][Run the game and leave a loop running] -[1:00:26][Q&A] +[1:00:26][Q&A][:speech] [1:00:54][nxsy !qa] [1:02:30][@neitchzehrer][What happened to the black dot?] [1:04:15][@nxsy][I'm scared to look back at my own library reload (not even looped editing) after I stopped using it for a few months. Probably 10+ hours of debugging ahead of me] [1:04:52][@drchilitopicoso][Besides UI, what things must use threads in games? Just started learning threads and I'm curious. There are some things that somehow run slower threaded than single] [1:11:10][@drchilitopicoso][For the moment I have a thread job system. It's for rebuilding a mesh. For a big mesh it takes like 20 ms, so I thought maybe it would make it faster but not that much, maybe like 13% faster] -[1:12:55][Go ahead and close things down] +[1:12:55][Go ahead and close things down][:speech] [1:14:22][Announcement: HandmadeCon 2016 speaker list[ref site="Molly Rocket" page="HandmadeCon 2016 Speakers" - url="https://mollyrocket.com/news_0046.html"]] + url="https://mollyrocket.com/news_0046.html"]][:research] [/video] diff --git a/cmuratori/hero/code/code345.hmml b/cmuratori/hero/code/code345.hmml index d0093a5..91b408f 100644 --- a/cmuratori/hero/code/code345.hmml +++ b/cmuratori/hero/code/code345.hmml @@ -39,8 +39,8 @@ [52:49][handmade_world.cpp: Make GetWorldChunk() write off the end of the buffer, run the game and see nothing being detected] [53:34][handmade_memory.cpp: Determine to enable PushSize_() to perform overflow checking] [55:16][todo.txt: Update the TODO list] -[55:39][Q&A] -[55:59][insobot !qa] +[55:39][Q&A][:speech] +[55:59][@insobot][!qa] [56:46][@insofaras][Yes] [58:16][@k2t0f12d][I'm following an Linux with SDL because I'm not sure if it's worth building on X11 or if Wayland is ready yet. Have you thought about building on X11, Wayland or both?] [59:28][@drjeats][Before when you had fixed allocation, you could do a between-runs save state kind of thing (if I recall correctly). How would you make that happen with the dynamic blocks?] @@ -52,5 +52,5 @@ [1:05:22][@williambundy][Don't recognize the tune] [1:05:45][@windowl][Are any days (streams) missing from the YouTube archive?] [1:07:05][@drjeats][Was memprotect the primary motivation for moving to dynamic memory, or were there other reasons?] -[1:09:22][Wrap it up] +[1:09:22][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code346.hmml b/cmuratori/hero/code/code346.hmml index 235db3d..974ff67 100644 --- a/cmuratori/hero/code/code346.hmml +++ b/cmuratori/hero/code/code346.hmml @@ -23,12 +23,12 @@ [55:45][handmade_memory.h: Prevent PushSize_() from enabling the bounds checking, run the game and try looped code editing] [56:19][Investigate what's happening with the SourceBlock.Size][quote 532] [58:12][win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() set the PageSize directly to aid our investigations] -[1:01:57][Q&A] +[1:01:57][Q&A][:speech] [1:02:37][@insobot][Bashing Tim Berners-Lee, inventor of the outer loop from 0 to freee everything?] [1:02:57]["It's kind of like insobot is the beat poet of our generation"][quote 533] [1:03:51][@pragmascrypt][Maybe set the default alignment to 1 when in memory checking mode?] [1:04:18][todo.txt: Update the TODO list] [1:05:03][@danyguag][I know this is a little off-topic to what you are currently doing on stream, but what role does a software driver play if any at all?] [1:06:56][@danyguag][No, you can make a C++ project that enables you to use resources that you can't use in user mode in the kernel] -[1:10:52][Done] +[1:10:52][Done][:speech] [/video] diff --git a/cmuratori/hero/code/code347.hmml b/cmuratori/hero/code/code347.hmml index b143da1..19c3ee7 100644 --- a/cmuratori/hero/code/code347.hmml +++ b/cmuratori/hero/code/code347.hmml @@ -16,7 +16,7 @@ [46:26][handmade_debug.cpp: Enable DEBUGEnd() to print the memory stats] [49:28][handmade_shared.h: Enable FormatStringList() to handle the l case] [51:12][Run the game and consult the profiler] -[52:39][Q&A] +[52:39][Q&A][:speech] [53:29][@thesizik][long is >= 32 bits, long long is >= 64 bits] [55:00][@pseudonym73][Windows is LLP64, everything else is LP64. The only difference between the two is the size of long. Everything else (short, int, long long) is the same] [57:35][@zilarrezko][Is there any plan on organizing the episodes in a manner such as "Worked on mandalas on these episodes"?[ref @@ -30,5 +30,5 @@ [1:05:12][@edvinholm][Is the bending of the hero's body going to be like it is now? Looks a bit weird] [1:05:43][@samnchiet][On moving from Windows to Linux, how much of the onus of making this change lies on the consumers vs Linux OS "designers"? Linux distros aren't normally ordinary-user friendly] [1:06:31][@doritosranger][What do you think about free software (Stallman, FSF, GPL)?] -[1:13:08][Close it up] +[1:13:08][Close it up][:speech] [/video] diff --git a/cmuratori/hero/code/code348.hmml b/cmuratori/hero/code/code348.hmml index e0ba120..b5be98b 100644 --- a/cmuratori/hero/code/code348.hmml +++ b/cmuratori/hero/code/code348.hmml @@ -19,7 +19,7 @@ [46:37][build.bat: Run in O2 and consult the profiler to gauge the cost of the simulation] [50:02][handmade_world_mode.cpp: Make PlayWorld() create more rooms, run the game and consider implementing a debug camera that shows multiple sim regions] [52:27][handmade_world_mode.cpp: Introduce UpdateAndRenderSimRegion() to do some of the work of UpdateAndRenderWorld()] -[1:01:52][Q&A] +[1:01:52][Q&A][:speech] [1:02:09][Run the game and try out the boost pad] [1:02:41][hadnmade_world_mode.cpp: Make AddStandardRoom() move the boosters down one tile, run the game and check it out] [1:04:33][@longboolean][Will the switch to 3D affect the artwork for Handmade Hero?] @@ -46,6 +46,6 @@ [1:47:10][@mvandevander][I think we need to title it "Casey Muratori's Enhanced Interview Techniques"] [1:47:43][@sssmcgrath][I'll do it another day if you want (can't tonight)!] [1:48:22][@superjercom][This is actually already how I do interviews. The problem is people tend to be totally blindsided by being asked about their own experience] -[1:49:34][On how this technique is impervious to hacking] -[1:52:08][Gotta go and reboot the machine] +[1:49:34][On how this technique is impervious to hacking][:speech] +[1:52:08][Gotta go and reboot the machine][:speech] [/video] diff --git a/cmuratori/hero/code/code349.hmml b/cmuratori/hero/code/code349.hmml index e5ed3af..e9d857f 100644 --- a/cmuratori/hero/code/code349.hmml +++ b/cmuratori/hero/code/code349.hmml @@ -12,7 +12,7 @@ [32:41][handmade_world_mode.cpp: Make UpdateAndRenderWorld() call UpdateAndRenderSimRegion() twice, run the game and see what happens] [35:38][handmade_world_mode.cpp: Make UpdateAndRenderWorld() do an UpdateAndRenderSimRegion() on a second region] [36:58][Run the game and zoom out to see two regions being simulated] -[38:16][Q&A] +[38:16][Q&A][:speech] [39:28][@f1aw][Did you make that debug UI yourself?] [40:12][@nyeecola][Have you thought about refactoring your "brain" code to make use of virtual methods? Switch statements on "type" is basically replicating the type system and is a bit of a code smell] [44:16][@montify][Do you use keyboard only at your day job? Are you faster without the mouse?] @@ -28,11 +28,11 @@ [53:40][Plug Nsight[ref site="NVIDIA" page="Nsight" - url="http://www.nvidia.com/object/nsight.html"]] + url="http://www.nvidia.com/object/nsight.html"]][:research] [55:56][@dandymcgee]["RenderDoc" is a pretty amazing tool, and I've found it to be more compatible than Nsight[ref site="GitHub" page="RenderDoc" url="https://github.com/baldurk/renderdoc"]] -[57:06][Wind it down] -[58:06][Announcement: A potential change in the format] +[57:06][Wind it down][:speech] +[58:06][Announcement: A potential change in the format][:speech] [/video] diff --git a/cmuratori/hero/code/code350.hmml b/cmuratori/hero/code/code350.hmml index 395c9d3..ff92d18 100644 --- a/cmuratori/hero/code/code350.hmml +++ b/cmuratori/hero/code/code350.hmml @@ -16,7 +16,7 @@ [41:48][handmade_entity.cpp: Introduce DEBUGPickEntity()] [50:04][handmade_debug_interface.h: Add MouseP to the debug_table struct and introduce SET_DEBUG_MOUSE_P() and GET_DEBUG_MOUSE_P()] [53:44][Run the game to see that's all good now too] -[54:13][Q&A] +[54:13][Q&A][:speech] [55:03][@asafgartner][Can you try compiling with debug off?] [55:41][handmade_world_mode.cpp: Enable DEBUGPickEntity() and DEBUG_PLATFORM_GET_MEMORY_STATS() to be compiled out] [57:39][@badflydog][CTime stats. I know I know. It's irrelevant for the code] @@ -52,7 +52,7 @@ [2:19:52][handmade_world_mode.cpp: Make DoWorldSim() call Platform.CompleteAllWork(), run the game and consult the profiler] [2:21:56][Consider how to improve this multithreading of the simulation, with a few words on functional programming] [2:23:42][todo.txt: Update the TODO list] -[2:24:42][Q&A] +[2:24:42][Q&A][:speech] [2:25:15][@Kknewkles][(vicariously asked via @Miblo) o7 Casey! Two questions: 1) Have you finished Sausage Roll? I have! >:D 2) I have been Shilling Knight for you to play Shovel Knight, and now I have to add Undertale to the list. That game a gift from gods on high] [2:26:17][@a_pulsing_mage][Isn't simulating the world in several threads, can't that make the game non deterministic? Isn't the point of the RNG having a starting kernel for deterministic play for competition and stuff?] [2:29:14][Blackboard: RNG in Handmade Hero] @@ -69,5 +69,5 @@ [2:37:20][@ginger_bill][Off-topic question which can be answered later if necessary. I've been developing a new programming language to replace my needs for C/C++ and pretty much every other language. The main areas of research for me at the moment are: Metaprogramming, SSA optimizations, Concurrency. You being a metaprogramming "expert", other than Compile Time Execution (CTE) that is Jon's language, what other forms of metaprogramming would you like?] [2:37:50][@williambundy][Sorry, it was in context: if I open a chest, and don't get what I want, reloading a save game and playing slightly differently might get me a different RNG for the chest] [2:40:36][@ginger_bill][Will the game have different "levels" like the Binding of Isaac, or will the entire game be a single "level"?] -[2:42:13][Wind it down] +[2:42:13][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code351.hmml b/cmuratori/hero/code/code351.hmml index 6e9ffac..60fd2f9 100644 --- a/cmuratori/hero/code/code351.hmml +++ b/cmuratori/hero/code/code351.hmml @@ -60,7 +60,7 @@ [2:15:40][handmade_sim_region.cpp: Temporarily make BeginWorldChange() clear the EntityHash and BrainHash, run the game and watch the profiler] [2:17:39][handmade_sim_region.cpp: Make GetHashFromID() clear upon encountering an empty Entry for now] [2:18:42][Run the game successfully and consult the profiler] -[2:19:52][Q&A] +[2:19:52][Q&A][:speech] [2:20:17][@AsafGartner][The stream is down] [2:22:51][@AsafGartner][Did you fix the bug?] [2:23:45][@AsafGartner][There's a TODO in ZeroSize. Not sure if you noticed it] @@ -71,6 +71,6 @@ [2:28:01][@mtsmox][Is it an option to never clear to zero for arenas, and maybe only clear when resetting temporary memory?] [2:30:30][ctray.cpp: Investigate why the overlay disappeared] [2:33:17][@AsafGartner][Is there a still a benefit to using the sim region? Since chunks are room-sized, and simulation is room-based, why not use the chunks directly?] -[2:35:52][Wrap it up] -[2:36:33][Anticipate HandmadeCon 2016] +[2:35:52][Wrap it up][:speech] +[2:36:33][Anticipate HandmadeCon 2016][:speech] [/video] diff --git a/cmuratori/hero/code/code352.hmml b/cmuratori/hero/code/code352.hmml index 85cd7ba..4de0b10 100644 --- a/cmuratori/hero/code/code352.hmml +++ b/cmuratori/hero/code/code352.hmml @@ -37,7 +37,7 @@ [1:49:40][Run the game to find that the brain system isn't broken] [1:49:54][handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to determine which, if any, room we are in and move the camera accordingly] [2:00:07][Run the game to find that the camera fails to follow the hero] -[2:00:59][Q&A] +[2:00:59][Q&A][:speech] [2:01:37][@godling72][1) Do you ever work on large (multimillion LOC) codebases like Chrome, GCC, Unreal, etc? The full build dev process you've been using works for small projects, but how do you scale?] [2:05:22][@godling72][2) Why is past video archiving disabled?] [2:06:13][@godling72][3) Are you in a closet? The back wall looks really close] @@ -50,5 +50,5 @@ [2:13:09][@gene_victor][Off-topic: Will HandmadeCon 2016 VOD be on YouTube soon?] [2:13:28][@godling72][How long did The Witness take to build?] [2:15:15][@popcorn0x90][I would think it would take about 5-10 mins] -[2:15:49][Wrap it up] +[2:15:49][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code353.hmml b/cmuratori/hero/code/code353.hmml index 33ee10a..7d5fa8c 100644 --- a/cmuratori/hero/code/code353.hmml +++ b/cmuratori/hero/code/code353.hmml @@ -44,10 +44,10 @@ [2:05:02][Step in to the compressor and inspect what it does] [2:07:04][Step in to the decompressor to find that it works fine, and diff the files it produced] [2:08:39][Run the compressor on intro_art.hha to see how it fares with that] -[2:10:34][Q&A] +[2:10:34][Q&A][:speech] [2:11:21][Compress test1.hha and intro_art.hha with 7zip for comparison] [2:12:38][@Miblo][Awesome stuff! I hadn't been making the distinction between "literals" and "runs" in my thing. My test stuff has been just 0s and 1s, mind, so I was just storing the first Token and then the Counter values] [2:14:14][@magik603][Tomorrow you will show us what again?] [2:15:36][@ttbjm][Are hardware image decompressors still a thing?] -[2:22:54][Conclude] +[2:22:54][Conclude][:speech] [/video] diff --git a/cmuratori/hero/code/code354.hmml b/cmuratori/hero/code/code354.hmml index 2b1bf2c..bbc7fd1 100644 --- a/cmuratori/hero/code/code354.hmml +++ b/cmuratori/hero/code/code354.hmml @@ -30,7 +30,7 @@ [1:45:39][Run the RLE compressor on test1.hha and consult the statistics] [1:46:35][simple_compressor.cpp: Enable LZCompress() to gather statistics] [1:48:06][Run the LZ compressor on test1.hha and consult the statistics] -[1:50:07][Q&A] +[1:50:07][Q&A][:speech] [1:51:51][@Miblo][Amazing. I think I followed it, but definitely want to re-watch (during and after annotating)] [1:52:04][@garryjohanson][Forgive me if this information was somehow implicit in today's lecture and I missed it, but is compression ever used for locality wins?] [1:52:43][@graeme7][Do you know off-hand what kind of compression ratio and decompression speed are needed before it's faster to load compressed data and decompress, over loading decompressed data?] @@ -42,5 +42,5 @@ [1:59:22][@bluespide][Have you ever heard of random seed data compression?] [1:59:46][@kknewkles][Probably more of Jeff and Fabian's territory, but is there generally such a thing as a compressor that compresses a lot and fast? Would some RAD compressor leave 10% of initial size and be considerably faster than LZ? I guess BINK is hyperfast, isn't it like live decompression or something?] [2:00:59][@ieee754][I meant block compression that's GPU-supported (BC1-BC7). You upload the compressed image to the GPU, and hardware decodes it when sampled] -[2:03:43][Close this off] +[2:03:43][Close this off][:speech] [/video] diff --git a/cmuratori/hero/code/code355.hmml b/cmuratori/hero/code/code355.hmml index e437d14..de58719 100644 --- a/cmuratori/hero/code/code355.hmml +++ b/cmuratori/hero/code/code355.hmml @@ -48,7 +48,7 @@ [1:54:17][Recompile and run to see that the drawing of narrow rectangles is now correct] [1:55:10][handmade_render.cpp: Consider removing the ClipMask from DrawRectangleQuickly(), before closing the issue with it still intact] [1:58:25][Reflect on the day's work] -[1:58:58][Q&A] +[1:58:58][Q&A][:speech] [1:59:11][@kknewkles][It's rolled over 'round these parts already so Happy New 2017, everyone] [1:59:35][@Jim0_o][In the compression code there is an assert(LiteralCount == 0) it seems to fire on some files, should the literal buffer be flushed after the loop in case it didn't end on a run?] [2:00:55][simple_compressor.cpp: Enable RLECompress() and LZCompress() to correctly flush the literal buffer] @@ -59,5 +59,5 @@ [2:10:36][@hayai][No high production values? Stream looks good and there's a frame around the scare-cam and a nice little fade-in timer. That seems like more effort than a lot of what I see] [2:12:34][@thezoq2][So that black box is a window, not just an overlay in OBS?] [2:14:04][@jessermeyer][Please consider demonstrating NVidia's cmdlist extension as a way of thinking about modern graphics dev] -[2:15:10][Close it down with a glimpse into 2017] +[2:15:10][Close it down with a glimpse into 2017][:speech] [/video] diff --git a/cmuratori/hero/code/code356.hmml b/cmuratori/hero/code/code356.hmml index a42f2c9..c61f649 100644 --- a/cmuratori/hero/code/code356.hmml +++ b/cmuratori/hero/code/code356.hmml @@ -44,7 +44,7 @@ [1:55:08][Run the game to find that we have different sized rooms] [1:56:11][handmade_world_mode.cpp: Enable AddStandardRoom() to know the sizes of abutting rooms] [1:58:32][Run the game to see our variably sized rooms and consider making the camera zoom to correctly frame the rooms] -[1:59:26][Q&A] +[1:59:26][Q&A][:speech] [2:00:29][@zilarrezko][Hey Casey, is anyone planning on doing a more boiled down version of Handmade Hero, to take apart the game and give a breakdown of the aspect of each system in the project?] [2:01:13][@Miblo][Or make the camera pan within the room?] [2:01:33][@highergravity][Long time archive viewer, but first time live streamer! I have two pre-stream questions but I can never make the pre-stream time. 1) Do you have a strong opinion about why int *p is "superior style" than int* p, or are you impartial to whatever the developer prefers?] @@ -60,5 +60,5 @@ [2:17:50][@zennmystic][I guess what I was really asking was will you be dropping it?] [2:19:02][@azmreece][Do you have any thoughts on when to use multiple threads? Is the answer any more in depth than "when single-threaded isn't fast enough"?] [2:21:26][@tuxiak][Do you still have a TODO list like you used to? Could you show it? I'm still on Day ~110 with the videos] -[2:21:51][Wrap it up] +[2:21:51][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code357.hmml b/cmuratori/hero/code/code357.hmml index 17515c4..39ec54c 100644 --- a/cmuratori/hero/code/code357.hmml +++ b/cmuratori/hero/code/code357.hmml @@ -56,10 +56,10 @@ [1:58:11][Step through UpdateCameraForEntityMovement() and inspect the room entity's P] [1:59:29][handmade_world_mode.cpp: Make UpdateAndRenderWorld() reduce the Z offset for the debug rectangles] [2:00:42][handmade_render_group.cpp: Consider the possibility that GetRenderEntityBasisP() is computing a bogus HeightOffFloor] -[2:01:37][Q&A] +[2:01:37][Q&A][:speech] [2:02:19][@Kknewkles][Hi! For how long is this bliss of weekend episodes gonna continue? Got any news in the making for us?] [2:03:51][@Kknewkles][You didn't answer about the news, though] -[2:04:19][klemensbaum Q: A bit off-topic, but why do you use your headphone mic rather than the nice studio mic you have on the Jeff and Casey show?] +[2:04:19][@klemensbaum][Q: A bit off-topic, but why do you use your headphone mic rather than the nice studio mic you have on the Jeff and Casey show?] [2:05:28][@zilarrezko][The camera doesn't seem to be centered perfectly. Working as intended?] [2:05:46][@mtsmox][Could you disable the Y displacement to test your theory?] [2:06:42][@krrsplat][Started following the series on YouTube, and have made it to episode 14. Loving it so far. When I try to build solution in VS, I am unable to do so unless I put the #defines and typedefs into every file. Is this a VS thing or am I doing it wrong? Sorry for going way back[ref @@ -69,6 +69,6 @@ [2:13:10][Promote Handmade.Network and the new "Submit a Project" functionality[ref site="Handmade.Network" page="Project List" - url="https://handmade.network/projects"]] -[2:21:06][That's it for today] + url="https://handmade.network/projects"]][:research] +[2:21:06][That's it for today][:speech] [/video] diff --git a/cmuratori/hero/code/code358.hmml b/cmuratori/hero/code/code358.hmml index fc14ddf..9c1bfc3 100644 --- a/cmuratori/hero/code/code358.hmml +++ b/cmuratori/hero/code/code358.hmml @@ -30,7 +30,7 @@ [1:19:50][Blackboard: Overdraw Still Matters!] [1:24:47][Blackboard: Z Prepass] [1:28:40][Blackboard: On the potential wasteage of GPU wide operations] -[1:31:38][Q&A] +[1:31:38][Q&A][:speech] [1:31:52][@desuused][Is it possible to use dithering (and possibly post-processing and super-resolution) for order independent transparency?] [1:32:03][Blackboard: Screen door effect] [1:33:54][@wasenabled][Per-pixel sorting on the graphics card. What, if any, software control is available via shaders, or is this just a hardware optimization that some graphics cards do behind the scenes to handle the opacity issue without a pre-filtered Z-buffer?] @@ -41,5 +41,5 @@ [1:50:29][@dudeinbasement1][Do you find the weekends go by faster with streaming on them? And you have more time for 1935?] [1:50:51][@anonymous519][What if I want my game to be deterministic, or what if my game does physics calculations and I need to update at a fixed rate for stability. Different people have different monitors with different refresh rates. Most people seem to then interpolate but this adds latency. Isn't mailboxing the better approach in this situation?] [1:52:27][@zilarrezko][Skip this if you'd like / explained it already: Could you explain Z-fighting and solving it as a problem?] -[1:53:10][Wrap it up] +[1:53:10][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code359.hmml b/cmuratori/hero/code/code359.hmml index 344b437..de85d27 100644 --- a/cmuratori/hero/code/code359.hmml +++ b/cmuratori/hero/code/code359.hmml @@ -61,7 +61,7 @@ [1:48:45][handmade_render_group.h: Remove the render_entry_coordinate_system struct] [1:49:50][handmade_render_group.h: Make the entity_basis_p_result struct contain a 3D coordinate, and propagate that change] [1:56:21][Run the game with everything being passed down as 3D, and consider how we'll proceed] -[1:57:51][Q&A] +[1:57:51][Q&A][:speech] [1:58:27][@rivten][Concerning the "homogeneous" use. The "homogeneous" word indeed comes from mathematics. Homogeneous is used for mathematical objects that have some scalability property. Here, p0 = (x, y, z, 1) and p1 = (2x, 2y, 2z, 2) represent the same point in space (but p1 = 2 * p0 mathematically speaking). Therefore the usage of homogeneous coordinates and homogeneous matrices here] [2:00:03][@vaualbus][Turn off the sorting so we won't have flashing] [2:01:58][handmade_render.cpp: Temporarily make SortEntries() set ShouldSort to false and run the game to see how that affects it] @@ -79,5 +79,5 @@ page="Cascaded Shadow Maps" url="https://msdn.microsoft.com/en-us/library/windows/desktop/ee416307.aspx"]] [2:22:50][@elxenoaizd][Does any of that clip and projection math change if we change the rendering technique that we're using? Say, rasterizing vs raytracing or voxels] -[2:26:40][Close out] +[2:26:40][Close out][:speech] [/video] diff --git a/cmuratori/hero/code/code360.hmml b/cmuratori/hero/code/code360.hmml index 38be1b6..40a145a 100644 --- a/cmuratori/hero/code/code360.hmml +++ b/cmuratori/hero/code/code360.hmml @@ -37,7 +37,7 @@ [1:40:18][Run the game and consider cleaning this up] [1:40:56][handmade_render_group.h: Remove ScreenDim from the camera_transform struct and add CurrentClipRect_ to the render_group struct] [1:46:44][Remove all of the sorting code] -[1:57:31][Q&A] +[1:57:31][Q&A][:speech] [1:59:16][@quartertron][Can you please go double-check your matrix math in your last drawing in Milton?] [2:01:08][@quartertron][More scroll right-ish] [2:01:37][@quartertron][No, I'm just blind] @@ -55,5 +55,5 @@ page="Handmade Hero Annotations Search" url="https://asafgartner.github.io/annotations_search/"]] [2:27:36][@Miblo][Yeah, we will roll it into the new annotation system. Planning on working on the new system probably in a month from now, after HMN v1 is settled] -[2:28:16][Thank Asaf for building the annotation searcher] +[2:28:16][Thank Asaf for building the annotation searcher][:speech] [/video] diff --git a/cmuratori/hero/code/code361.hmml b/cmuratori/hero/code/code361.hmml index d3e7f05..0a58ba1 100644 --- a/cmuratori/hero/code/code361.hmml +++ b/cmuratori/hero/code/code361.hmml @@ -26,7 +26,7 @@ [1:55:32][Step into OpenGLRenderCommands() and inspect the projection matrix] [1:56:40][handmade_math.h: Make our new operator*() and Transpose() loop over all the values] [1:57:14][Step into OpenGLRenderCommands() again to see the transpose working correctly] -[1:58:28][Q&A] +[1:58:28][Q&A][:speech] [1:59:24][@a_pulsing_mage][You once said that people don't really use matrices as the storage in real world things. Can you talk about the alternatives?] [2:02:41][@desuused][Will we use quaternions? Producing rotation matrix from quaternions seems a good idea] [2:03:09][@neitchzehrer][So from now on, you will only be streaming on Saturday and Sunday?] @@ -36,10 +36,10 @@ [2:06:23][@zilarrezko][I'm inferring that those braces encompassing the four rows in those matrix operations aren't doing anything? (It isn't creating an extra dimension in the matrix?)] [2:08:08][@zamar037][Hi Casey, haven't caught a stream in a while. How are things going?] [2:09:09][@pepevel][Don't you have to return a value in the multiplication function?] -[2:11:33][emosaru Q: Casey, might be worth pointing out that that behavior in MSVC is specific to inline functions] +[2:11:33][@emosaru][Q: Casey, might be worth pointing out that that behavior in MSVC is specific to inline functions] [2:13:21][@pandamite][I kind of just joined on to this channel. Sorry about the lack of the knowledge of the code so far, but I was referring to the case of having such large matrices that you would consider partitioning the matrices into separate parts for quicker rotations] [2:17:01][@vaualbus][Would it not be better to make the matrix struct use an r32 array of 16 elements instead of a two dimensional one? In that should we SIMD the math operation?] [2:19:10][@teamrandb][Forgive the dumb question, but why are your include guards defined at the bottom of the header instead of the top? Is this purely what you chose to do, or is there another purpose? (#if is checked at the top, but the #define is at the bottom. Most code I've seen does it at the top)] [2:21:47][@teamrandb][Sorry, Casey, I am still looking at older streams. I guess you may have changed that already] -[2:22:58][Get going with a glimpse into the future] +[2:22:58][Get going with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code362.hmml b/cmuratori/hero/code/code362.hmml index 28821a1..3c5f321 100644 --- a/cmuratori/hero/code/code362.hmml +++ b/cmuratori/hero/code/code362.hmml @@ -29,7 +29,7 @@ [1:45:49][handmade_opengl.cpp: Consider how to implement our camera transform] [1:47:22][handmade_render_group.cpp: Make PushClipRect() responsible for computing the focal length] [1:49:57][Run the game to see the same thing we got before] -[1:51:47][Q&A] +[1:51:47][Q&A][:speech] [1:53:03][@zilarrezko][Can you interpolate if you wanted a smooth rotation about a point or axis over time?] [1:54:35][@garryjohanson][There have been some problems with trolls causing flame wars in the chat. I forget who you dedicated the management of the chat to?[ref site="Handmade Network" @@ -82,5 +82,5 @@ site="Wikipedia" page="Covariance and contravariance of vectors" url="https://en.wikipedia.org/wiki/Covariance_and_contravariance_of_vectors"]] -[2:38:54][Wrap it up] +[2:38:54][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code363.hmml b/cmuratori/hero/code/code363.hmml index ebc29d0..007cf3d 100644 --- a/cmuratori/hero/code/code363.hmml +++ b/cmuratori/hero/code/code363.hmml @@ -50,7 +50,7 @@ [1:55:38][handmade_world_mode.cpp: Enable UpdateAndRenderWorld() to zoom the camera] [1:57:16][Run the game and try zooming] [1:57:52][A few words on zooming at a speed proportional to the distance to the target with this poor man's differential equation] -[2:01:36][Q&A] +[2:01:36][Q&A][:speech] [2:02:07][@aceflameseer][Sorry for being a dummy: In the camera transform in 3D games (as far as I've been watching tutorials), there's something called an "Up" vector. What's the purpose of it and do we have it in Handmade Hero? Since it's a 2D game I guess it's different. Your explanations have been wonderful and I would love it if you could explain it. And also thanks for doing EU friendly streams Kappa] [2:03:44][Blackboard: Object- vs Camera Transform] [2:06:58][Blackboard: Up Vector] @@ -60,5 +60,5 @@ [2:24:36][@aceflameseer][Wow, that was amazing, thanks a lot!] [2:24:47][@pileopoop][Would it be weird to change the focal length as the pitch changes or should the focal length always stay constant?] [2:25:47][@sahfortv][Minor point, you called your variables pitch and orbit: Should probably be pitch and yaw] -[2:26:22][Wrap it up] +[2:26:22][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code364.hmml b/cmuratori/hero/code/code364.hmml index ff5efdc..68beb6b 100644 --- a/cmuratori/hero/code/code364.hmml +++ b/cmuratori/hero/code/code364.hmml @@ -51,7 +51,7 @@ [1:22:52][Run the game to see the slanted sprites, and consider why we must take the camera into account for shearing] [1:25:03][handmade_render_group.cpp: Make PushBitmap() also modify the sprites' Y and X values] [1:27:21][Consider using the camera's relative position to compute these modifications] -[1:28:48][Q&A] +[1:28:48][Q&A][:speech] [1:29:20][@ratchetfreak][When adjusting the sprite like that, don't you need to interpolate the texture coordinates in screenspace instead of clipspace (the default)?] [1:30:29][@macielda][What is Alpha to Coverage? Any good references on that?] [1:31:48][@k1ng_k3v1n][Would an orthogonal projection matrix be applicable for your game?] @@ -69,5 +69,5 @@ [1:52:24][@sharlock93][Oh yeah, sorry, I mixed two things up] [1:52:34][Blackboard: Computing a and b, accounting for the -z] [2:02:30][handmade_math.h: Try to make PerspectiveProjection() compute the non-perspective corrected terms for orthographic] -[2:05:23][End it there] +[2:05:23][End it there][:speech] [/video] diff --git a/cmuratori/hero/code/code365.hmml b/cmuratori/hero/code/code365.hmml index 4d6ec45..c2cb202 100644 --- a/cmuratori/hero/code/code365.hmml +++ b/cmuratori/hero/code/code365.hmml @@ -32,7 +32,7 @@ [1:54:22][handmade_render_group.h: Add CameraP, CameraX, CameraY and CameraZ to the render_group struct] [1:57:56][handmade_render_group.cpp: Make SetCameraTransform() take the Camera position values] [2:01:17][Run the game to see that it is not nearly as messed up as expected] -[2:02:07][Q&A] +[2:02:07][Q&A][:speech] [2:03:09][@quikligames][There was a lot of chat about Wolfram expecting 1-letter variable names and interpreting rbx as r * b * x] [2:03:23][@billdstrong][Didn't we do this math when doing the screen projection?] [2:04:12][@Miblo][Do you think we needed an epilepsy warning there?] @@ -54,5 +54,5 @@ [2:20:01][@macielda][It seems like @vaualbus' solution is negated in relation to yours] [2:23:14][handmade_render_group.cpp: Enable PushBitmap() to produce a standard sprite card and run the game to see that] [2:25:14][handmade_opengl.cpp: Temporarily make OpenGLRenderCommands() clip out all transparent pixels, and run the game] -[2:27:47][Consider addressing transparency in the sort, and close it down] +[2:27:47][Consider addressing transparency in the sort, and close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code366.hmml b/cmuratori/hero/code/code366.hmml index c22b62a..68a388a 100644 --- a/cmuratori/hero/code/code366.hmml +++ b/cmuratori/hero/code/code366.hmml @@ -31,7 +31,7 @@ [1:41:01][handmade_opengl.cpp: Set the cubes' colour to white, give them a texture and run the game to check it out] [1:43:40][Demo the case in which a tree and a cube interpenetrate and Z-fight, and consider how to combat this] [1:47:51][handmade_render_group.cpp: Re-enable PushBitmap() to perform shearing, and run the game] -[1:50:05][Q&A] +[1:50:05][Q&A][:speech] [1:51:25][@macielda][Any particular reason for using counter clockwise for front faces (as opposed to clockwise)?] [1:52:00][Blackboard: Coordinate system right-handedness and counter-clockwise winding] [1:56:23][@thesizik][A debug camera pan control might be a good idea] @@ -49,9 +49,9 @@ [2:08:41][Blackboard: "Exactly n bits" vs "At least n bits"] [2:13:47][@jezzi23][How much time and effort do you spend preparing for each episode (e.g. what you're going to do, and which problems you foresee running into)? Or is it just the years of experience that allow you to do this without preparation?] [2:14:28][@macielda][Why b32x and not b1x or b8x? (I really don't know)] -[2:15:46][dudeinbasement1 Q: Can you do cubic splines sometime?[ref +[2:15:46][@dudeinbasement1][Q: Can you do cubic splines sometime?[ref site="YouTube" page="Witness Wednesday Part 10 - Interpolation" url="https://www.youtube.com/watch?v=S2fz4BS2J3Y"]] -[2:17:00][Close it down] +[2:17:00][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code367.hmml b/cmuratori/hero/code/code367.hmml index 7ae3efe..b612fae 100644 --- a/cmuratori/hero/code/code367.hmml +++ b/cmuratori/hero/code/code367.hmml @@ -39,7 +39,7 @@ url="https://www.khronos.org/opengl/wiki/Multisampling"]] [1:50:46][handmade_opengl.cpp: Make OpenGLRenderCommands() pass MaxSampleCount - 1 to glTexImage2DMultisample(), and step in to find that we have 8x multisampling, but that it is not working properly] [2:01:34][handmade_opengl.cpp: Try passing MaxSampleCount to glTexImage2DMultisample(), and run the game to find that it works] -[2:02:30][Q&A] +[2:02:30][Q&A][:speech] [2:03:27][@sahfortv][Can you check if the status has changed after updating bind texture?] [2:03:53][@randdalf][Did you remember to prefix your glTexImageMultisample2D with a WINAPI) (aka __stdcall prefix)? That's usually the cause of access violations for me] [2:05:20][win32_handmade.cpp: Make Win32InitOpenGL call glTexImage2DMultisample()] @@ -53,5 +53,5 @@ [2:20:17]["The only reason that we ever did it is because Won insisted that we do it"][quote 552] [2:21:26][@snoringtortoise][On the platform side like any debugging features, you mentioned a while ago that 1935's engine was light years ahead in that it is far more advanced] [2:24:51][@thesizik]["Problem exists between Khronos and Casey"?] -[2:25:19][Close everything down with a glimpse into the future] +[2:25:19][Close everything down with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code368.hmml b/cmuratori/hero/code/code368.hmml index faef95d..0bdbaf9 100644 --- a/cmuratori/hero/code/code368.hmml +++ b/cmuratori/hero/code/code368.hmml @@ -92,7 +92,7 @@ page="glcorearb.h" url="https://www.khronos.org/registry/OpenGL/api/GL/glcorearb.h"]] [1:53:23][Compile and step into OpenGLCreateProgram() to see that we pass shader validation] -[1:55:06][Q&A] +[1:55:06][Q&A][:speech] [1:55:13][@fr0styninja][Cam died] [1:56:05][@soysaucethekid][For some of the OpenGL function typedefs, you have the WINAPI entrypoint and others don't. I thought it was necessary to have it or else you get run-time errors when calling those functions (or at least I did)] [1:57:13][@thesizik][Instead of Z-bias, why not make the sprite cards stand up at a steeper angle, and make them trapezoidal to undo the perspective foreshortening?] @@ -119,6 +119,6 @@ [2:18:14][@xyane][Will you eventually be doing such a pass over Handmade Hero?] [2:18:32][@pepevel][Should you add a \\n at the end of each line with the format you are using? Wouldn't it be parsed by OpenGL as a long comment as it is now?] [2:19:44][@starchypancakes][Hey Casey, I got a job as a gameplay programmer! Wouldn't have happened without this stream, not in a million years] -[2:20:23][A few words on gameplay programming] -[2:22:37][Wrap the rest of the stream up with well wishes for @starchypancakes][quote 555] +[2:20:23][A few words on gameplay programming][:speech] +[2:22:37][Wrap the rest of the stream up with well wishes for @starchypancakes][:speech][quote 555] [/video] diff --git a/cmuratori/hero/code/code369.hmml b/cmuratori/hero/code/code369.hmml index 71ebc88..fccb7f8 100644 --- a/cmuratori/hero/code/code369.hmml +++ b/cmuratori/hero/code/code369.hmml @@ -74,7 +74,7 @@ page="glUniform" url=http://docs.gl/gl3/glUniform]] [1:54:14][win32_handmade.cpp: Pull glUniformli() from glcorearb.h] -[1:56:17][Q&A] +[1:56:17][Q&A][:speech] [1:56:58][Fuss with OBS] [1:59:45][@rbdjellyfish][Check your global settings] [2:01:17][@0xdeadbeefh][Maybe just have one scene? So it can't switch] @@ -92,5 +92,5 @@ [2:12:12][Blackboard: How the Z-bias prevents sprites from intersecting] [2:18:01][@abarishu][So we are going to implement some form of Z-buffer in software?] [2:18:19][@macielda][The key part for me was that the Z is only used for the ZBuffer and the W does the perspective divide, thanks] -[2:19:20][Go ahead and close it down with the determination to upgrade the graphics card] +[2:19:20][Go ahead and close it down with the determination to upgrade the graphics card][:speech] [/video] diff --git a/cmuratori/hero/code/code370.hmml b/cmuratori/hero/code/code370.hmml index b478f40..15a42ba 100644 --- a/cmuratori/hero/code/code370.hmml +++ b/cmuratori/hero/code/code370.hmml @@ -56,7 +56,7 @@ [1:56:41][handmade_math.h: Make PushBitmap() multiply by 255 before passing the PremulColor to RGBAPack4x8()] [1:57:29][Run the game to see some pretty good texture stretching] [1:57:42][handmade_render_group.cpp: Make PushBitmap() set the axes correctly, and run the game to admire it] -[1:58:19][Q&A] +[1:58:19][Q&A][:speech] [1:58:40][@desuused][Emulating sRGB texture loads and sRGB fragment writes is not enough: sRGB also affects blending, which you can't emulate] [2:01:07][@zilarrezko][Do you have a licence for all those cubes?] [2:01:17][@rooctag][What texture will you use for rects and cubes?] @@ -69,5 +69,5 @@ url="https://www.khronos.org/registry/OpenGL/extensions/ARB/WGL_ARB_create_context.txt"]] [2:06:09][Run the game and see that it unexpectedly works, then step through OpenGLInit() to see that it still errors out] [2:07:55][@insofaras][Are you passing a major / minor version too? I think the bit might not be enabled sub 3.2?] -[2:09:36][Wind this down with the promise of a question for insofaras and a mention of daylight savings time] +[2:09:36][Wind this down with the promise of a question for @insofaras and a mention of daylight savings time][:speech] [/video] diff --git a/cmuratori/hero/code/code371.hmml b/cmuratori/hero/code/code371.hmml index b756a2f..d13a6a9 100644 --- a/cmuratori/hero/code/code371.hmml +++ b/cmuratori/hero/code/code371.hmml @@ -65,7 +65,7 @@ [2:08:08][handmade_opengl.cpp: Make OpenGLRenderCommands() correctly loop through the vertices and run the game to see that we're getting close] [2:08:37][handmade_opengl.cpp: Make OpenGLInit() set the correct VertUVID] [2:09:42][Run the game and note that we're in a good place, using fewer OpenGL calls] -[2:12:18][Q&A] +[2:12:18][Q&A][:speech] [2:12:50][@kim_jorgensen][Would it be better to expose an OpenGLGetProcAddress method in the platform layer and do the lookups in the handmade_opengl layer?] [2:14:22][@vaualbus][We will use VBO and IBO? In that case you prefer using glBufferData to send TGE data into the buffer or using glMapBuffer / glUnmapBuffer to send the data?] [2:17:30][@robrobby][Will you use 4coder in full window mode (4ed.exe -F) in the future?] @@ -80,5 +80,5 @@ [2:27:57][@jessem3y3r][Press F12 to capture] [2:29:47][@macielda][Does the Debug UI still work? If so, how does one activate it?] [2:30:08][@Jim0_o][Have you set a version target for the pipeline? Will you go full Embedded Systems bananas (OpenGL ES)?] -[2:30:30][Close it down with a glimpse into the future] +[2:30:30][Close it down with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code372.hmml b/cmuratori/hero/code/code372.hmml index 2bbdf06..f58afc3 100644 --- a/cmuratori/hero/code/code372.hmml +++ b/cmuratori/hero/code/code372.hmml @@ -74,7 +74,7 @@ [1:50:16][Blackboard: Mapping the extremities of the screen to -1 to 1] [1:52:36][Run the game and assess our clip plane situation] [1:54:14][handmade_debug.cpp: Begin to consider what else in DEBUGStart() may be problematic] -[1:55:29][Q&A] +[1:55:29][Q&A][:speech] [1:56:49][@ratchet_freak][Where's owlbot? He's not online] [1:59:19][@macielda][About the QUAD thing, you might want to do something like this, maybe[ref site="The Little Grasshopper" @@ -89,5 +89,5 @@ [2:14:01][@macielda][What do you like better in OpenGL AZDO as opposed to Vulkan?] [2:18:35][@pepevel][Would it be interesting to implement OpenGL on top of OpenCL?] [2:19:54][@robrobby][Since Handmade Hero is using multithreaded processing of the game entities, how would the game even stutter when time wouldn't be enough 'til the next frame?] -[2:21:01][Shut this down] +[2:21:01][Shut this down][:speech] [/video] diff --git a/cmuratori/hero/code/code373.hmml b/cmuratori/hero/code/code373.hmml index 57ebf12..e87b039 100644 --- a/cmuratori/hero/code/code373.hmml +++ b/cmuratori/hero/code/code373.hmml @@ -63,7 +63,7 @@ [1:59:06][Step through Unproject() and inspect the values] [2:01:11][Run the game to find that debug clicking works correctly again] [2:02:14][todo.txt: Update the TODO list] -[2:03:21][Q&A] +[2:03:21][Q&A][:speech] [2:04:10][@Miblo][Am I right in thinking that today's work has had the cool, and not immediately expected, side effect of beginning to level up the debug camera, in terms of mouse picking of entities? Or did the debug camera have that before anyway?] [2:04:52][Blackboard: 3D Picking of Entities] [2:05:46][@kim_jorgensen][Do you plan to keep the Assert in OpenGLDebugCallback? My driver is sending a lot of debug information that fires the assert] @@ -88,5 +88,5 @@ page="glcorearb.h" url="https://www.khronos.org/registry/OpenGL/api/GL/glcorearb.h"]] [2:21:32][Run the game to see that it still works] -[2:21:40][We are about done for today] +[2:21:40][We are about done for today][:speech] [/video] diff --git a/cmuratori/hero/code/code374.hmml b/cmuratori/hero/code/code374.hmml index e5c2e0b..01b8b80 100644 --- a/cmuratori/hero/code/code374.hmml +++ b/cmuratori/hero/code/code374.hmml @@ -80,7 +80,7 @@ [2:03:02][Run the game to see what that looks like] [2:04:07][handmade_render_group.cpp: Play with how PushBitmap() combines the upright and camera-facing styles] [2:07:10][Run the game to admire our trees] -[2:09:17][Q&A] +[2:09:17][Q&A][:speech] [2:10:22][@charlemaynemtg][I am a fairly amateur programmer. I have dabbled in Java, flavors of C, Python, and Ruby while I was in university. My question is, how would you suggest with progressing your proficiency in a particular language? Is it best to follow tutorials?] [2:15:47][@hej1993][What is Z transform?] [2:17:52][@macielda][How many draw calls with the profiler open?] @@ -92,5 +92,5 @@ [2:35:06]["What are the chances that there's one way to always write code?"][quote 565] [2:35:52][@siltnamis][What do you think about "const correctness"? How often do you use const?] [2:38:35][@mrpapillon1][const is mainly for teams] -[2:40:58][Wrap it up] +[2:40:58][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code375.hmml b/cmuratori/hero/code/code375.hmml index 3e82c16..96eea69 100644 --- a/cmuratori/hero/code/code375.hmml +++ b/cmuratori/hero/code/code375.hmml @@ -61,7 +61,7 @@ [1:51:25][handmade_render_group.h: Rename render_entry_cliprect to render_setup for render_entry_textured_quads to contain, and propagate this change, simplifying PushSetup() and OpenGLRenderCommands()] [2:13:17][handmade_render.cpp: Remove LinearizeClipRects() and PrepForRender()] [2:14:39][Run the game to see that that worked just great, with a few words on how much cleaner the render commands are now] -[2:15:57][Q&A] +[2:15:57][Q&A][:speech] [2:16:50][@nyeecola][Has the framerate tanked after implementing fog? Or was that a wrong impression of mine?] [2:17:02][Compile and run with various optimisation settings] [2:19:54][@Miblo][Now that we're full 3D, may it be worth extending the debug visualisation rectangles into the third dimension?] @@ -77,5 +77,5 @@ [2:41:10][@thesizik][What does the software renderer look like at the moment?] [2:41:33][@chrysos42][I assume the problems you solve in Handmade Hero are fairly representative of problems you face as a game dev. Can you comment about any social aspects of being a game dev, e.g. how collaborative or supportive the community is, or what it's like sharing a codebase with a number of others?] [2:44:18][@rocketbuny][How many lines of code does Handmade Hero have?] -[2:47:42][Wind it on down with a glimpse into the future] +[2:47:42][Wind it on down with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code376.hmml b/cmuratori/hero/code/code376.hmml index 19d07db..9ae73cc 100644 --- a/cmuratori/hero/code/code376.hmml +++ b/cmuratori/hero/code/code376.hmml @@ -56,7 +56,7 @@ [2:00:21][handmade_render_group.cpp: Continue to enable PushLineSegment() to compensate for the LinePerpLength] [2:02:24][Run the game to see our current problematic behaviour] [2:03:43][Blackboard: Computing the perpendicular to the CameraZ] -[2:05:09][Q&A] +[2:05:09][Q&A][:speech] [2:06:24][@insofaras][hmd_bot handles the Q&A message and seems to be dead] [2:06:54][@desuused][Here's your equations solved in Maxima \[image\], and here's your equations solved with expanding (sinθ)^2 through dot product: \[image\]. I think this approach is completely wrong when trying to derive cross product] [2:07:50][@ingenero][What would be the downside of drawing your debug lines as 3D cylinders or extruded rectangles? It seems like that would look a little nice when viewed from all angles] @@ -82,5 +82,5 @@ [2:53:44][@cubercaleb][How would you feel if you wrote the functions for colliding each pair or types, and allowed the compiler to generate the sparse matrix of function calls for you?] [2:55:09][Recommend researching category theory, with a call for @Pseudonym73] [3:00:12][@cynokron][Are you hoping JAI will have discriminated unions?] -[3:00:32][Wind down here] +[3:00:32][Wind down here][:speech] [/video] diff --git a/cmuratori/hero/code/code377.hmml b/cmuratori/hero/code/code377.hmml index ef60e73..555709d 100644 --- a/cmuratori/hero/code/code377.hmml +++ b/cmuratori/hero/code/code377.hmml @@ -31,7 +31,7 @@ [1:28:46][Run the game to see our collision volume] [1:29:35][handmade_world_mode.cpp: Temporarily disable the familiars, and extend the collision volume upwards] [1:30:51][Run the game to try triggering that collision volume] -[1:34:29][Q&A] +[1:34:29][Q&A][:speech] [1:35:59][@kknewkles][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?] [1:39:31][@sausagesuperb][Why don't you search and replace for the new short sexy data types] [1:39:41][@kknewkles][That was Shovel Knight! Hollow Knight is a new game!] @@ -47,5 +47,5 @@ [1:56:07][@m0re85][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?] [1:58:19][Close it down with a plug of @AsafGartner's searcher[ref site="Handmade Hero Annotations Search" - url=https://asafgartner.github.io/annotations_search/]] + url=https://asafgartner.github.io/annotations_search/]][:research] [/video] diff --git a/cmuratori/hero/code/code378.hmml b/cmuratori/hero/code/code378.hmml index 236f5ff..09592bb 100644 --- a/cmuratori/hero/code/code378.hmml +++ b/cmuratori/hero/code/code378.hmml @@ -39,7 +39,7 @@ [1:37:37][handmade_world_mode.cpp: Set GeneralVelocityConstraints for the HoleCam and StairsCam] [1:42:14][Run the game to try triggering the StairsCam, and investigate the snapping] [1:48:53][handmade_world_mode.cpp: Determine to enable UpdateAndRenderWorld() to correctly update the camera position when changing sim region] -[1:57:17][Q&A] +[1:57:17][Q&A][:speech] [1:57:52][@sahfortv][There seems to be a second problem with StairCam 1 vs StairCam 2, i.e. you need to be moving even though you're on the first stair, so the collision areas are out a bit?] [1:58:38][@rooctag][Why are the trees below smaller than the trees up top?] [2:01:36][@butwhynot1][Are you going to experiment zooming by changing the FOV rather than changing the distance?] @@ -64,5 +64,5 @@ [2:28:44][handmade_render_group.cpp: Temporarily prevent the clipping from occuring and run the game to see that] [2:29:41][@macielda][Can you click "Threads" on the Profile window?] [2:31:15][@macielda][Is the mouse over text working now?] -[2:31:55][Sign off] +[2:31:55][Sign off][:speech] [/video] diff --git a/cmuratori/hero/code/code379.hmml b/cmuratori/hero/code/code379.hmml index 040b617..8d4c983 100644 --- a/cmuratori/hero/code/code379.hmml +++ b/cmuratori/hero/code/code379.hmml @@ -62,7 +62,7 @@ [2:08:45][Discover that the w values passed to PushQuad() are not all 0] [2:09:57][handmade_render_group.cpp: Make PushBitmap() only set the ZBias for upright sprites] [2:10:24][Run the game to see that Santa Claus is back] -[2:10:30][Q&A] +[2:10:30][Q&A][:speech] [2:11:05][@desuused][What will be our way forward to reduce glDrawArray calls? Will we look into texture atlases, megatextures, or invent our own way? Is it better to separate cutscene rendering because it's so different?] [2:12:03][@kilo_pasztetowej][Are we forced to use SIMD registers to use those intrinsics or are there some ways to do that without those, like inline assembly or something else?] [2:16:48][@desuused][Have you seen musl standard library? It has very good code quality. sqrtf on x86_64 is one instruction on it. It's for Linux, but parts of it are very portable[ref @@ -72,5 +72,5 @@ site="Intel" page="Intrinsics Guide" url="https://software.intel.com/sites/landingpage/IntrinsicsGuide/"]] -[2:23:42][Close it down] +[2:23:42][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code380.hmml b/cmuratori/hero/code/code380.hmml index 3fcf51d..40f410a 100644 --- a/cmuratori/hero/code/code380.hmml +++ b/cmuratori/hero/code/code380.hmml @@ -56,7 +56,7 @@ [1:44:32][handmade_opengl.cpp: Introduce UseProgramBegin() and UseProgramEnd()] [1:48:22][handmade_opengl.cpp: Make the shader call CompileZBiasProgram() for NoDepthPeel and DepthPeel, and fix compile errors] [1:53:35][Run the game to see that we can run the DepthPeel and regular versions] -[1:54:13][Q&A] +[1:54:13][Q&A][:speech] [1:55:53][@garryjohanson][While we wait for other questions, have you had a good experience with gdb?] [1:59:50][@uplinkcoder][How to stabilize the volume outlines?] [2:00:33][handmade_render_group.cpp: Make PushLineSegment() give the debug line segments some ZBias] @@ -70,5 +70,5 @@ [2:11:41][@jezzi23][I'm not sure if the profiler shows some insightful information about CPU cache hit / miss rates. How might you implement something like that?] [2:14:28][@chrysos42][Can the depth buffer contain infinity as a floating point value?] [2:16:24][@kilo_pasztetowej][Off-topic: What part of game programming do you enjoy the most? Engine, gameplay, etc?] -[2:16:42][Close things down] +[2:16:42][Close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code381.hmml b/cmuratori/hero/code/code381.hmml index c5fc138..a0409dc 100644 --- a/cmuratori/hero/code/code381.hmml +++ b/cmuratori/hero/code/code381.hmml @@ -71,7 +71,7 @@ [1:56:22][Run the game to see that we're much better] [1:57:00]["Happy day happiness of special deliciousness"][quote 573] [1:57:12][Determine to implement the depth peel shader tomorrow] -[1:57:31][Q&A] +[1:57:31][Q&A][:speech] [1:58:19][@sausagesuperb][I tend to see in a lot of APIs (for example SDL) things like DestroyWindow calls. If this is the last thing you do before exiting the app, doesn't the operating system take care of this for you?] [1:59:45][@daniel_collin][Have you considered keeping the shader code as separate files so you can do automatic reload on save in the editor, for example, or do you think there won't be enough shader code to motivate the work?] [2:00:55][handmade_opengl.cpp: Investigate why glDrawArrays() is busted] @@ -83,5 +83,5 @@ [2:07:32][@daniel_collin][I was told that you had some issue(s) with RenderDoc. Do you know if it was related to you having a old GPU or was it a real bug in Renderdoc?] [2:08:52][@sahfortv][Could you view in the debugger and see if the shader outputs sensible values?] [2:09:10][@sausagesuperb][In the future when Jon Blow's language is released for public (in case it will be before Handmade Hero completion), will you switch to use it for finishing unfinished parts of the game, or would you stay with C/C++ until the bitter end?] -[2:10:18][That is it] +[2:10:18][That is it][:speech] [/video] diff --git a/cmuratori/hero/code/code382.hmml b/cmuratori/hero/code/code382.hmml index 611db9f..2a58420 100644 --- a/cmuratori/hero/code/code382.hmml +++ b/cmuratori/hero/code/code382.hmml @@ -52,7 +52,7 @@ [2:02:08][Run the game to see the awesome depth peel at half alpha] [2:02:50][handmade_opengl.cpp: Complete implementing the near clip plane fading] [2:08:37][Run the game to admire the near clip plane fading] -[2:09:52][Q&A] +[2:09:52][Q&A][:speech] [2:10:11][Note that it doesn't seem to line up with the near clip plane] [2:10:45][handmade_world_mode.cpp: Increase the NearClipPlane and run the game to see it] [2:12:50][@Miblo][Could you try disabling the randomisation of the ground tile Z? I'm interested to see if that'll adversely affect the sexiness of the depth peel] @@ -68,5 +68,5 @@ [2:26:52][@k2t0f12d][Do you actually have to have wireframe models to be considered 2.5D, or would this count as well?] [2:28:28][@k2t0f12d][You could define your own render definition for HMD] [2:29:47][@alexkelbo][Is the floor below us being drawn completely and the one we are on on top of it, or is the one below clipped so only the pixels we see through the holes are drawn?] -[2:31:33][Wrap it up with a glimpse into the future of new art integration] +[2:31:33][Wrap it up with a glimpse into the future of new art integration][:speech] [/video] diff --git a/cmuratori/hero/code/code383.hmml b/cmuratori/hero/code/code383.hmml index 2607c19..89e3623 100644 --- a/cmuratori/hero/code/code383.hmml +++ b/cmuratori/hero/code/code383.hmml @@ -59,7 +59,7 @@ [2:02:34][Run the game to admire the correct composite and then stretching] [2:03:35][win32_handmade.cpp: Draw to decreasingly smaller resolutions] [2:05:58][Run the game in pixel art mode][quote 577] -[2:07:04][Q&A] +[2:07:04][Q&A][:speech] [2:07:36][@naysayer88][OpenGL sucks] [2:10:56][@naysayer88][The problem is there is no way for me to know what the "good API" is any more...] [2:14:30][@jezzi23][In Win32InitOpenGL(), why do you use two different forms for assigning modern OpenGL function pointers, i.e. using Win32GetOpenGLFunction(Name) macro for some but assigning others directly?] @@ -73,10 +73,10 @@ [2:32:37][Wrap it up with a plug of Lysa[ref site="Handmade Network" page="Lysa" - url="https://lysa.handmade.network/"]] + url="https://lysa.handmade.network/"]][:research] [2:35:19][Promote @CaptainKraft's Patreon[ref site="Patreon" page="CaptainKraft is creating Lysa, the Embeddable Debugger" - url="https://www.patreon.com/CaptainKraft"]] -[2:37:01][That's about it for today, with a glimpse into the future] + url="https://www.patreon.com/CaptainKraft"]][:research] +[2:37:01][That's about it for today, with a glimpse into the future][:speech] [/video] diff --git a/cmuratori/hero/code/code384.hmml b/cmuratori/hero/code/code384.hmml index 249527a..d3eeb52 100644 --- a/cmuratori/hero/code/code384.hmml +++ b/cmuratori/hero/code/code384.hmml @@ -52,7 +52,7 @@ page="glGet" url="http://docs.gl/gl3/glGet"]] [1:45:27][handmade_opengl.cpp: Add a TODO in OpenGLChangeToSettings() to fix the enabling of multisampling] -[1:48:06][Q&A] +[1:48:06][Q&A][:speech] [1:49:04][@garryjohanson][So one of my left-field questions: Do you think there is a case to be made for a GL implementation to be written in OpenCL, OpenCL having the capacity to natively run on the CPU and is compatible with visual studio, so you could CPU debug your OpenGL code in visual studio. Would that capacity solve the OpenGL debug problem, or is the problem typically somewhere else, like actual problems with opaque GPU functionality, if that all made sense?] [1:49:37][Rant on GPU programming] [1:58:49][@nyeecola][Casey, I've started to program more like the way you teach and I'm liking it so far, but there's one thing that makes me feel strange: When using structs to set up some data that will be used by a function later, how can I make sure that I won't forget to set some member of that struct before calling that function? Is there a way to make sure I always initialize every member of the structure to a value (other than zero)?] @@ -60,9 +60,9 @@ [2:01:34][@nyeecola][Casey, do you remove asserts when shipping a game?] [2:01:46][@desuused][In a sense, Vulkan provides you an ISA with strict specification, but the initialization code is quite fat] [2:04:01][@jezzi23][I didn't quite understand how OpenGL and multithreading can cooperate. I believe you once said in an episode that an OpenGL context is specific to the thread that created it. So if I create the context on a main thread, can I not have other worker threads call into OpenGL without somehow setting the context for each thread?] -[2:08:31][We're done] +[2:08:31][We're done][:speech] [2:10:14][Plug Lysa[ref site="Handmade Network" page="Lysa" - url="https://lysa.handmade.network/"]] + url="https://lysa.handmade.network/"]][:research] [/video] diff --git a/cmuratori/hero/code/code385.hmml b/cmuratori/hero/code/code385.hmml index 5607c6f..663bef1 100644 --- a/cmuratori/hero/code/code385.hmml +++ b/cmuratori/hero/code/code385.hmml @@ -54,12 +54,12 @@ [1:38:31][handmade_opengl.cpp: Introduce CompileResolveMultisample() shader] [1:45:49][Begin to consider the dilemma surrounding the averaging process] [1:47:48][handmade_opengl.cpp: Fix compile errors] -[1:48:53][Q&A] +[1:48:53][Q&A][:speech] [1:49:46][@flyingsolomon][I think it will be useful to bind a key to topmost window as there is a key to full screen, then you will not have to resize your editor for live code editing. Also, since I bound the ` key to -> in my editor I'm a very happy panda, warm recommendations] [1:50:27][@ravarix][Why s32 for the count, instead of u32?] [1:51:03][@dragoonx6][Could you up the bitrate? It's really hard to watch when there's too much movement on the screen. It gets all blurry and pixelated. Not exaggerating when I say it makes my eyes watery] [1:52:50][Wrap things up with a plug of the episode guide's new search feature[ref site="Handmade Hero" page="Episode Guide" - url="https://hero.handmade.network/episodes"]] + url="https://hero.handmade.network/episodes"]][:research] [/video] diff --git a/cmuratori/hero/code/code386.hmml b/cmuratori/hero/code/code386.hmml index c423cdf..5d56be9 100644 --- a/cmuratori/hero/code/code386.hmml +++ b/cmuratori/hero/code/code386.hmml @@ -65,7 +65,7 @@ [1:44:38][handmade_opengl.cpp: Try making OpenGLRenderCommands() follow both multisampling paths and run the game to verify that it is a state-based problem] [1:45:26][handmade_opengl.cpp: Reorder the OpenGL calls in ResolveMultisample() so that they are last-in-first-out] [1:47:05][Run the game to see that it works] -[1:48:59][Q&A] +[1:48:59][Q&A][:speech] [1:49:30][@nyeecola][Casey, you often argue that we don't need to free memory and clean up upon exiting the program. Does the same reasoning apply to glDeleteProgram() and others? I saw you use that and wondered what is the reasoning behind it] [1:51:31][@calphorus][Casting in GLSL is done: f32(Value) instead of (f32)Value] [1:53:42][@grubbyjuice][Is there a vim version of your colorscheme?] @@ -85,6 +85,6 @@ site="Valve" page="Steam Hardware Survey" url="http://store.steampowered.com/hwsurvey"]] -[2:06:57][A few words on the AVX512 instruction set and Larrabee] -[2:12:45][Wrap it up] +[2:06:57][A few words on the AVX512 instruction set and Larrabee][:speech] +[2:12:45][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code387.hmml b/cmuratori/hero/code/code387.hmml index 566e26d..2b478d9 100644 --- a/cmuratori/hero/code/code387.hmml +++ b/cmuratori/hero/code/code387.hmml @@ -41,7 +41,7 @@ [1:46:46][handmade_opengl.cpp: Consider enabling OpenGLRenderCommands() to correctly perform oversampling] [1:48:23][win32_handmade.cpp: Switch to 1920x1080, run the game and consider downsampling that to a much lower resolution on our card] [1:49:22][Consider getting the depth peel buffers to work in multisampling mode] -[1:50:19][Q&A] +[1:50:19][Q&A][:speech] [1:51:43][@dmitsuki][I can't compile the code, it's saying "Requires extension support: sampler2DMS (GL_ARB_texture_multisample)". But not having support for this makes no sense because I have an R9 390, which is a newer AMD card than you] [1:52:30][@fr0styninja][Haven't really followed along with how you've implemented peeling but what if you separate out 3D objects and run them through a different shader that doesn't do peeling?] [1:52:51][@pragmascrypt][Would doing a depth pre-pass without multisampling help?] @@ -65,5 +65,5 @@ page="PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation" url="http://www.pcg-random.org/pdf/toms-oneill-pcg-family-v1.02.pdf"]] [2:17:13][@rooctag][How come there are different Z values on the diagonal on the same sprite? Is it an epsilon issue, or did I miss something?] -[2:19:59][Wrap it up] +[2:19:59][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code388.hmml b/cmuratori/hero/code/code388.hmml index 31ffab4..ad0fa35 100644 --- a/cmuratori/hero/code/code388.hmml +++ b/cmuratori/hero/code/code388.hmml @@ -61,7 +61,7 @@ [1:43:18][handmade_opengl.cpp: Make CompileResolveMultisample() track both the min and max depth and halve that the range] [1:44:06][Run the game to see a lot less artifacts] [1:44:46][handmade_opengl.cpp: Make OpenGLRenderCommands() set AlphaThreshold to 0, run the game and now only see artifacts during peeling] -[1:48:26][Q&A] +[1:48:26][Q&A][:speech] [1:48:51][Close the "GLSL version / extension for sampler2DMS" and "Two small compiler warnings VS17" issues[ref site="GitHub" page="HandmadeHero/cpp Issues" @@ -71,5 +71,5 @@ [1:52:35][@cubercaleb][What about the type cast?] [1:52:56][@nrec_][Hi, I'm new here, sorry if this has been asked before. Looks like you're doing an engine right now. Any idea about what the game would be?] [1:56:42][@wasenabled][As it appears you are nearing the end of the main engine dev, will you be adding in the non-Win32 layers too, or have others already done those?] -[1:59:05][Wrap it up for the day with a reflection on how well the multisampling works, and thanks to mtsmox for reporting the bug] +[1:59:05][Wrap it up for the day with a reflection on how well the multisampling works, and thanks to @mtsmox for reporting the bug][:speech] [/video] diff --git a/cmuratori/hero/code/code389.hmml b/cmuratori/hero/code/code389.hmml index 0d90924..be4d2de 100644 --- a/cmuratori/hero/code/code389.hmml +++ b/cmuratori/hero/code/code389.hmml @@ -37,7 +37,7 @@ [1:42:35][handmade_opengl.cpp: Make OpenGLCreateProgram() take an opengl_program_common to write into directly] [1:46:43][Step in to UseProgramBegin() to see if anything looks weird] [1:48:23][handmade_opengl.cpp: Insert space for the normals in the Vertex arrays] -[1:49:15][Q&A] +[1:49:15][Q&A][:speech] [1:49:49][@soysaucethekid][For the lighting of the sprites, do you need to compensate for the angle offset if it's using the same light source as the terrain?] [1:51:00][@AsafGartner][There seems to be a lot of banding around the lights] [1:52:19][handmade_opengl.cpp: Try to make OpenGLInit() use a full floating point resolution back buffer] @@ -49,5 +49,5 @@ [2:01:40][@flyingsolomon][I miss the little line showing the current filename inside 4coder. It was easier to follow that way] [2:02:08][@areriff86][How expensive it will be if the light source is moving, for example, following the torch that hero could be carrying or the flying light projectile?] [2:03:01][@uplinkcoder][Update CodeXL. It will not be able to step into the shader, but you should be able to see the OpenGL state] -[2:03:33][Wind it down, with the determination to investigate the banding, noting that the light moves with the hero] +[2:03:33][Wind it down, with the determination to investigate the banding, noting that the light moves with the hero][:speech] [/video] diff --git a/cmuratori/hero/code/code390.hmml b/cmuratori/hero/code/code390.hmml index 0636816..d10adce 100644 --- a/cmuratori/hero/code/code390.hmml +++ b/cmuratori/hero/code/code390.hmml @@ -49,7 +49,7 @@ [1:42:01][handmade_opengl.cpp: Enable CompileZBiasProgram() to compute that RefVec] [1:42:45][Run the game to see the light reflection adapting to our viewpoint] [1:43:16][handmade_opengl.cpp: Enable CompileZBiasProgram() to make a very bright and tight specular highlight, and run the game to see that] -[1:46:52][Q&A] +[1:46:52][Q&A][:speech] [1:47:47][@desuused][The problem you could not find when you thought about dividing by cos(phi) is that the only reason diffuse surfaces can exist is surface roughness, which invalidates the assumption that you will collect photons from the entire surface. Roughness blocks some photons. One trick to check your model: a photon must have the same probability of going one way as the opposite way. All formulas for diffusive light are approximations, all diffuse surfaces are different. In order to render a physically correct diffuse surface you'd have to measure a 4-dimensional dataset of light distribution (reflectance depending on two angles of incidence and two angles of reflection)] [1:48:47][@yurasniper][GLSL has reflect function] [1:49:11][@mtsmox][Should you normalize the worldN in the fragment shader?] @@ -66,5 +66,5 @@ [1:58:02][Words of wisdom on the rarity of needing to optimise for newer instruction sets] [2:02:34][@jezzi23][What if you have a deal with Intel to benchmark higher on the newest hardware?] [2:04:05][@Jim0_o][Any plans to create different types of lighting as in Room X is lit like a summers day while Room Y is contrasted and dark like a film Noir? (Or would you have all this done in the assets, maybe?)] -[2:04:44][Close things down] +[2:04:44][Close things down][:speech] [/video] diff --git a/cmuratori/hero/code/code391.hmml b/cmuratori/hero/code/code391.hmml index 7ab2f43..60c076c 100644 --- a/cmuratori/hero/code/code391.hmml +++ b/cmuratori/hero/code/code391.hmml @@ -40,7 +40,7 @@ url="http://maverick.inria.fr/Publications/2011/CNSGE11b/GIVoxels-pg2011-authors.pdf"]] [1:38:12][Consider that we want a simpler approach, e.g. the point light propagation model] [1:44:01][Blackboard: Lighting Process Proposal] -[1:49:23][Q&A] +[1:49:23][Q&A][:speech] [1:50:21][@mtsmox][Don't we already need acceleration, because the lookups for the closest traversable are already "slow"?] [1:50:42][Blackboard: Closest Point Query vs Line Query] [1:54:37][Blackboard: Ray tracing through a grid] @@ -54,5 +54,5 @@ [2:05:35][@illumi25][Do you know if your broadcasts have inspired improvements in "popular" game engines out there?] [2:08:43][@vaualbus][So all of this is still not a physically based rendering renderer? So almost all the time light is pre-calculated at asset creation?] [2:12:40][@kim_jorgensen][Really slow on my old PC in debug mode. But it was more how do we know our budget?] -[2:15:56][Wind it down] +[2:15:56][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code392.hmml b/cmuratori/hero/code/code392.hmml index 47ac02b..c757f56 100644 --- a/cmuratori/hero/code/code392.hmml +++ b/cmuratori/hero/code/code392.hmml @@ -34,7 +34,7 @@ [1:23:44][Run the game to see the exact same thing] [1:24:21][handmade_opengl.cpp: Make CompilePeelComposite() produce coloured light] [1:24:45][Run the game to see that coloured light] -[1:26:07][Q&A] +[1:26:07][Q&A][:speech] [1:26:44][@insobot][12 minutes into the main stream. 108 until Q&A. (based on NOTE)] [1:27:38][@Miblo][On a scale of 0-15, how disappointed are you that Visual Studio continued working as normal today?] [1:28:50][@desuused][Don't you find this lighting way too advanced for a 2.5D game?] @@ -72,5 +72,5 @@ [2:10:58][@fr0styninja][How do you feel after today's stream. We nearly switched to Linux and now you're looking for answers regarding a web editor on stackoverflow] [2:11:16][@ray_caster][Are you still tempted at moving the project to Linux?] [2:12:20][@AsafGartner][Don't forget to delete the .vscode folder that it created] -[2:13:08][Wrap it up] +[2:13:08][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code393.hmml b/cmuratori/hero/code/code393.hmml index 9dd4fc8..341d9f2 100644 --- a/cmuratori/hero/code/code393.hmml +++ b/cmuratori/hero/code/code393.hmml @@ -52,7 +52,7 @@ page="Sampler (GLSL)" url=https://www.khronos.org/opengl/wiki/Sampler_(GLSL)]] [1:51:58][Run the game and see our surfaces ready to go] -[1:52:44][Q&A] +[1:52:44][Q&A][:speech] [1:53:28][@dautor][Are you planing on taking a different / non-conventional approach to lighting?] [1:53:43][@itsaunicorndog][Any recommended programs to use for a noob?] [1:54:18][@x13pixels][Is that metal music coming from the stream or am I trippin'?] @@ -66,5 +66,5 @@ [2:08:28][@macielda][If so, would you write your game logic code in Immediate mode or Retained mode?] [2:10:25][@dautor][I plan on starting a project this summer, a 4D perspective projection voxel game. May I ask you for some tips on graphics, then? (Like, how do I utilize the graphics card the best, because it is not optimized for 5x5 matrices and it's hard to think with other concepts for me?)] [2:11:02][Blackboard: GPUs aren't actually \[XYZW\] vectors] -[2:16:19][Wind it down] +[2:16:19][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code394.hmml b/cmuratori/hero/code/code394.hmml index 625611e..58298d7 100644 --- a/cmuratori/hero/code/code394.hmml +++ b/cmuratori/hero/code/code394.hmml @@ -96,11 +96,11 @@ [2:17:03][@4bitlightning][Additional semicolon in glGetUniformLocal "SourceBackEmitTex;"] [2:17:21][handmade_opengl.cpp: Remove spurious semicolon from CompileMultiLightUp()] [2:17:28][Run the game and cycle through all the textures and detail levels] -[2:17:48][Q&A] +[2:17:48][Q&A][:speech] [2:19:14][@fr0styninja][Is this going to be pulled out of the final ship to pull aside as DLC content to charge for?] [2:19:39][@4bitlightning][Ideas for a good IDE-integrated debugger for Linux, like VS and CDB?] [2:21:08][@d7samurai][Could you recap / outline the idea for this lighting scheme?] [2:22:17][@zilarrezko][Will I be able to pay money for an expansion that crashes every so often?] [2:22:53][@hholst80][Is this a single player game or will there be some network / multiplayer features?] -[2:24:37][Close it down] +[2:24:37][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code395.hmml b/cmuratori/hero/code/code395.hmml index 7608ce6..ec0b254 100644 --- a/cmuratori/hero/code/code395.hmml +++ b/cmuratori/hero/code/code395.hmml @@ -47,7 +47,7 @@ [1:54:05][handmade_opengl.cpp: Introduce a version of UseProgramBegin() for multigrid_light_down_program] [1:55:37][handmade_opengl.cpp: Fix compile errors] [1:58:48][Run the game, but simply running is not going to get us very far] -[1:59:56][Q&A] +[1:59:56][Q&A][:speech] [2:00:08][handmade_opengl.cpp: Fix up the DestFrontEmit and DestBackEmit computations] [2:01:00][@desuused][Have you seen Doom 2016 rendering paper?[ref site="Adrian Courrèges" @@ -71,5 +71,5 @@ [2:21:05][@garryjohanson][So you know stuff about 360 hardware? How much of a problem was in-order execution? Did that cause performance problems? Do you view out-of-order execution as the performance convenience it claims to be, at least with respect to instruction-level parallelism?] [2:26:52][A few words on the Load-Hit-Store penalty of PowerPC] [2:30:33][@Zilarrezko][If you had SIMD code for SSE2 but also had the same algorithms for AVX 256-bit, is there a way to only run the AVX in the shipping version if the hardware supports it? Must it be decided at compile time?] -[2:33:37][Wind it down] +[2:33:37][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code396.hmml b/cmuratori/hero/code/code396.hmml index 04e85c8..5173e6b 100644 --- a/cmuratori/hero/code/code396.hmml +++ b/cmuratori/hero/code/code396.hmml @@ -63,7 +63,7 @@ [1:55:18][Run the game to see that it makes a difference] [1:56:00][handmade_opengl.cpp: Toggle on the lighting debug visualisation in OpenGLRenderCommands() and the downward light transfer in ComputeLightTransport()] [1:57:06][Run the game and see glowy hero] -[1:57:15][Q&A] +[1:57:15][Q&A][:speech] [1:59:25][@Miblo][We can set the spread of the emitter, but can we also set the direction of the spread?] [1:59:44][Blackboard: Emitter vs sprite facing] [2:01:32][@vaualbus][Why not doing a marathon stream in lighting? Maybe if doing so will be more productive as you remember what hack you have done, and maybe forget the next weekend] @@ -86,5 +86,5 @@ [2:24:48][Scan through archival slides for 'In-Depth 3D Exporter: Design and Implementation'] [2:26:36][Scan through archival slides for 'Character Animation Programming I'] [2:28:08][Scan through archival slides for 'Requirements for Real=time Geometry'] -[2:28:25][Wrap it up] +[2:28:25][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code397.hmml b/cmuratori/hero/code/code397.hmml index 2643a6c..dbb2e6e 100644 --- a/cmuratori/hero/code/code397.hmml +++ b/cmuratori/hero/code/code397.hmml @@ -64,11 +64,11 @@ [2:01:20][Run the game to see that negative product] [2:01:39][handmade_opengl.cpp: Make CompileZBiasProgram() output the non-negative inner product of the surface normals] [2:01:47][Run the game to see this non-negative product] -[2:04:06][Q&A] +[2:04:06][Q&A][:speech] [2:04:50][@Miblo][Could some of our lighting code end up being used by the audio system to figure out where and how obstructed / reflected sound sources are?] [2:06:01][@lorto6][Try 1 - clamp()!] [2:06:27][Blackboard: Clamping normals] [2:08:03][@asafgartner][Should you add a fake ceiling for lighting (or a non-fake ceiling based on the floor above the current one)?] [2:08:48][@xyane][Not entirely related to today's stream, but will you perhaps use something like a pipeline state object for binding resources? I personally find that I get a few annoying debug messages telling me about resource hazards and I'd like a better way than randomly throwing in null binds in the middle of my code and would like a better way to bind resources to minimize API calls, and would love to see a good PSO implementation] -[2:11:34][We are done for today] +[2:11:34][We are done for today][:speech] [/video] diff --git a/cmuratori/hero/code/code398.hmml b/cmuratori/hero/code/code398.hmml index 682752d..cbacaf9 100644 --- a/cmuratori/hero/code/code398.hmml +++ b/cmuratori/hero/code/code398.hmml @@ -57,7 +57,7 @@ [1:49:13][Run the game and consider basing the lights' directional values on where they came from] [1:52:12][Blackboard: Building a vertex buffer of reflector facing directions] [1:58:33][Blackboard: Writing reflectors directly into a 3D texture, rather than using the depth peel pass] -[2:00:39][Q&A] +[2:00:39][Q&A][:speech] [2:01:46][@tricksterzorua][So, I would like to ask something: Any advice for beginners? Most likely asked before, but I just heard about this, and while I am interested in game development and programming in general, I never managed to learn a language. I want to try again with C# and a course from Microsoft] [2:02:36][@asafgartner][Is there going to be a top-level that doesn't have a ceiling and instead would have direct sunlight?] [2:03:40][@cad97][Does "no library" include no standard library?] @@ -70,5 +70,5 @@ [2:16:47][Blackboard: Picking the correct MIP level for trilinear sampling] [2:23:27][@karroffel][What are your opinions on DRM?] [2:23:30][@deravadom][Okay, since we're low on questions. I'm working on an AI to play a game, and I'm wondering if you have any general tips for it. More specifically, the game is World of Warcraft. Right now I'm only at basic functions and working on the image processing pipeline] -[2:24:07][Wind it down] +[2:24:07][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code399.hmml b/cmuratori/hero/code/code399.hmml index 45ca0d2..a09b7c8 100644 --- a/cmuratori/hero/code/code399.hmml +++ b/cmuratori/hero/code/code399.hmml @@ -69,7 +69,7 @@ [1:45:01][handmade_render_group.cpp: Prevent LightingTest() from using the distance falloff, and only do one iteration] [1:45:32][Run the game and wonder why lateral movement causes so much flickering] [1:46:44][handmade_render_group.cpp: Consider where LightingTest() may be wrong] -[1:48:06][Q&A] +[1:48:06][Q&A][:speech] [1:49:07][@kim_jorgensen][Could you enable the overlay. Your head is in the way] [1:49:35][Consult Microsoft Spy++ for the currently open programs] [1:52:38][@mmozeiko][Sorry the trick didn't work, it works for editor I use. There is an option to try to use old non-raw string literals: char* shader = STRINGIFY( ... write multiline code here ... ); where STRINGIFY is macro with # preprocesor thing. Compiler will smush multi-line code into one-line string and you'll lose line numbers in error messages, but they don't seem to be used on stream anyway] @@ -78,5 +78,5 @@ [1:58:44][@Brian][Did the black overlay disapear during the stream, or during Q&A? From the code, if TargetActive, we fade in the CornerWindow. But if the countdown has finished and what not, then it is not active any more] [2:00:01][@mmozeiko][You can do char* shader = SHADER_CODE(n#include "shader.h"n); and then put code in new shader.h file, maybe then indentation will be fine afterwards] [2:00:38][@mmozeiko][No, it will work] -[2:02:28][Close it down] +[2:02:28][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code400.hmml b/cmuratori/hero/code/code400.hmml index a76c243..ff4f6ec 100644 --- a/cmuratori/hero/code/code400.hmml +++ b/cmuratori/hero/code/code400.hmml @@ -98,7 +98,7 @@ [1:59:33][Run the game, hit that assertion and consider why] [2:00:37][handmade_render_group.cpp: Add a Shadow in LightingTest() to accumulate based on the Visibility] [2:04:42][Run the game to see our ambient occlusion solution] -[2:05:20][Q&A] +[2:05:20][Q&A][:speech] [2:06:43][@vkar2][square root (A/pi + r²) = square root (r² * ( A/(pi * r²) + 1) = r * square root (A/(pi * r²) + 1)] [2:07:31][Blackboard: Pulling the r out of square root (A/π + r²)] [2:10:36][@alexkelbo][Thank you very much for 400 days of programming. Had I remembered I would've sent you a golden crown to wear today. You're awesome!] @@ -113,5 +113,5 @@ [2:22:22][@thesizik][It seems like the ground colors are off. Looks like it goes light green > gray > dark green] [2:24:24][handmade_render_group.cpp: Make LightingTest() cast the Element->Visibility calculation to a V4 in the setting of FrontEmit] [2:25:25][Run the game to see how that looks] -[2:26:40][Wind it down] +[2:26:40][Wind it down][:speech] [/video] diff --git a/cmuratori/hero/code/code401.hmml b/cmuratori/hero/code/code401.hmml index 33d5905..63a79e6 100644 --- a/cmuratori/hero/code/code401.hmml +++ b/cmuratori/hero/code/code401.hmml @@ -48,7 +48,7 @@ [1:49:27][handmade_world_mode.cpp: Make AddStandardRoom() draw the walls in red] [1:51:18][Run the game to see if we get red light bleeding from the walls] [1:51:53][handmade_config.h: Perform two ambient occlusion passes and run the game] -[1:54:34][Q&A] +[1:54:34][Q&A][:speech] [1:54:47][@macielda][Is it supposed to be Square(...) and not SquareRoot(...)?] [1:56:15][handmade_render_group.cpp: Make LightingTest() prevent the DistanceFalloff from getting below 1] [1:56:44][Run the game to see how that looks] @@ -68,5 +68,5 @@ [2:18:04][@Brian][But that's what I did! I made it an ini file and rewrote that] [2:19:15][@macielda][Is it possible to mode-change monitor frequency nowadays (say from 75Hz to 60Hz) so I always try to get my game loop to run at 60Hz?] [2:22:07][@Brian][ctray question: As an exercise, I would like to investigate the cost of just bringing the overlays to the top and checking first if the overlays need to be brought forward. What should I look for? Should I profile the calls? Should I run it continuously to see if I get an error case? I realize this may not be the best thing to use as an example, but it was something I struggled with] -[2:24:35][Close that] +[2:24:35][Close that][:speech] [/video] diff --git a/cmuratori/hero/code/code402.hmml b/cmuratori/hero/code/code402.hmml index ad845e4..cc57bc6 100644 --- a/cmuratori/hero/code/code402.hmml +++ b/cmuratori/hero/code/code402.hmml @@ -54,7 +54,7 @@ [1:56:47][Run the game to see how the two walls behave in the light] [1:57:44][handmade_render_group.cpp: Make LightingTest() increase the max emission] [1:58:17][Run the game to see the brighter light] -[2:00:18][Q&A] +[2:00:18][Q&A][:speech] [2:01:08][@qwindoo][Are there engine features or ideas that emerged during the Handmade Hero streams and that you've since "backported" to the 1935 engine?] [2:02:45][@Miblo][For the random series you picked (at random) 1234. Could it have made any sense to pick 360 there, for 360 degrees, or would absolutely any number do?] [2:05:39][@paulygon104][Probably the ingest server hiccuped or something] @@ -71,5 +71,5 @@ [2:24:16][Run the game and note that our lighting scheme does not incur a cost per light source] [2:25:54][handmade_render_group.cpp: Enable LightingTest() to distribute light with no occlusion after some iterations, and run the game] [2:28:43][@Brian][ctray license question. May I continuously update my GitHub branch of your timer (ctray) code from Handmade Hero, until you say otherwise, meaning you are preemptively giving unlicense / public domain to any further code in that folder? Would you prefer I ask every time for permission so you don't need to worry? I can do whichever is more convenient to you] -[2:29:14][Close it down] +[2:29:14][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code403.hmml b/cmuratori/hero/code/code403.hmml index 0c189db..22fdf77 100644 --- a/cmuratori/hero/code/code403.hmml +++ b/cmuratori/hero/code/code403.hmml @@ -46,7 +46,7 @@ [1:53:46][Run the game and take a look at the fairly regularly tiled reflectors] [1:54:19][handmade_render_group.cpp: Introduce OutputLightingQuads() and OutputLightingVerts()] [1:59:20][Run the game and check out the lighting solution, now with vertex-based banding] -[2:00:52][Q&A] +[2:00:52][Q&A][:speech] [2:02:21][@Till_us][You can triangle order the verts for the banding issue?] [2:02:43][Blackboard: Triangle vertex order picking] [2:04:29][@Brian][Forgive me, but is the game currently running in the hardware renderer, or software?] @@ -59,6 +59,6 @@ [2:18:15][@username_password_admin][You're using square, so why not filter bilinearly along the square axes rather than interpolating over the triangles? That should avoid the diagonal seams] [2:19:01][Blackboard: Interpolating perpendicularly between the squares' edges] [2:21:07][@chaoscom][Light doesn't behave linearily. That's why the banding occurs in the first place] -[2:22:12][Wrap it up] -[2:22:53]["It's not live now"][quote 595] +[2:22:12][Wrap it up][:speech] +[2:22:53]["It's not live now"][:speech][quote 595] [/video] diff --git a/cmuratori/hero/code/code404.hmml b/cmuratori/hero/code/code404.hmml index 6ecd7f2..1461014 100644 --- a/cmuratori/hero/code/code404.hmml +++ b/cmuratori/hero/code/code404.hmml @@ -42,7 +42,7 @@ [1:53:06][handmade_render_group.cpp: Try to make OutputTextureDebug() set the colour to white, and run the game to see that we are storing lighting samples, but that only the colour value is incorrectly computed] [1:54:12][handmade_render_group.cpp: Fix OutputLightingTextures() to multiply the colour into the correct space] [1:54:31][Run the game and see our voxelised lighting samples] -[1:54:55][Q&A] +[1:54:55][Q&A][:speech] [1:54:57][handmade_render_group.cpp: Remove the #pragma optimize] [1:55:23][Run the game and express interest in seeing how this works] [1:57:49][@Brian][Greetings Casey! For after the stream, here is a collaborative work from us in #hero for a help guide to setting up WeeChat] @@ -53,5 +53,5 @@ [2:11:23][@roam00010011][If I was to guess, I would say the problem is not the 2D entities in 3D space, but rather 2D entities with 3D entities. If those cubes were sprites like the trees, it would work just fine] [2:13:03][@alexkelbo][In the software renderer we aligned the memory to 16 bytes for SIMD but then we used the unaligned load and store instructions. Why is that?] [2:16:18][Blackboard: False sharing of one cache line by two threads] -[2:18:12][That's about it for today] +[2:18:12][That's about it for today][:speech] [/video] diff --git a/cmuratori/hero/code/code405.hmml b/cmuratori/hero/code/code405.hmml index 0a45c58..94091ce 100644 --- a/cmuratori/hero/code/code405.hmml +++ b/cmuratori/hero/code/code405.hmml @@ -71,5 +71,5 @@ page="glcorearb.h" url="https://www.khronos.org/registry/OpenGL/api/GL/glcorearb.h"]] [1:52:55][handmade_opengl.cpp: Revert CompileZBiasProgram() to use sampler3D, and itself convert the incoming colour to the 0 to 65535 range] -[1:54:11][Run the game and crash the stream, to be lost forever were it not for the magic of Mārtiņš Možeiko] +[1:54:11][Run the game and crash the stream, to be lost forever were it not for the magic of [@mmozeiko Mārtiņš Možeiko]] [/video] diff --git a/cmuratori/hero/code/code406.hmml b/cmuratori/hero/code/code406.hmml index e8f570a..a6354fe 100644 --- a/cmuratori/hero/code/code406.hmml +++ b/cmuratori/hero/code/code406.hmml @@ -35,7 +35,7 @@ [1:52:37][Reflect on the situation] [1:58:50][win32_handmade.cpp: Temporarily prevent Win32ProcessPendingMessages() from calling TIMED_BLOCK("PeekMessage")] [1:59:34][Run the game to find that we avoid the crash] -[2:01:01][Q&A] +[2:01:01][Q&A][:speech] [2:01:46][@bestalloys][Regarding message 0x738[ref site="Fleex's Lab" page="Windows 10 1703 sometimes sends messages in response to PeekMessage" @@ -62,6 +62,6 @@ [2:44:31][@rytzale][What "blackboard" program are you using?[ref site="Milton" url="https://www.miltonpaint.com/"]] -[2:45:20][A few words on C's type definition syntax] -[2:48:02][Wrap it up] +[2:45:20][A few words on C's type definition syntax][:speech] +[2:48:02][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code407.hmml b/cmuratori/hero/code/code407.hmml index 7bfc9de..1a4c697 100644 --- a/cmuratori/hero/code/code407.hmml +++ b/cmuratori/hero/code/code407.hmml @@ -36,7 +36,7 @@ [1:50:11][Run the game to see that the voxel positions are incorrect] [1:51:48][handmade_opengl.cpp: Try to make CompileZBiasProgram() draw the voxels as red if we are outside the voxel] [1:55:03][Run the game to confirm that we have a voxel alignment problem] -[1:58:41][Q&A] +[1:58:41][Q&A][:speech] [1:59:21][@insofaras][Try using GL_RED_INTEGER instead of GL_RED] [1:59:52][handmade_opengl.cpp: Make OpenGLRenderCommands() use GL_RED_INTEGER for the LookupTexture] [2:01:27][Run the game to see that our texture lookup is now correct] @@ -51,5 +51,5 @@ [2:08:35][@abarishu][Off topic, so it's ok to ignore if you're in a hurry. Do you have any experience with rendering "impossible" spaces? Like in Antichamber or the secret levels of Duke Nukem 3D?] [2:09:39][Inspect our integer image] [2:10:26][Try to debug in RenderDoc with 0x738 fixed] -[2:12:15][Close it down] +[2:12:15][Close it down][:speech] [/video] diff --git a/cmuratori/hero/code/code408.hmml b/cmuratori/hero/code/code408.hmml index f510589..d1c0d12 100644 --- a/cmuratori/hero/code/code408.hmml +++ b/cmuratori/hero/code/code408.hmml @@ -55,7 +55,7 @@ [1:52:48][handmade_opengl.cpp: Make the lighting grid more fine grained] [1:53:09][Run the game to see our more smoothly lit scene] [1:55:01][handmade_opengl.cpp: Change the coarseness of the lighting grid] -[1:56:49][Q&A] +[1:56:49][Q&A][:speech] [1:57:14][@bestalloys][Why no indentation on the shader code?] [1:58:29][@butwhynot1][Have you tried CUDA? Do you think it's a reasonable way to do GPU programming? AMD is trying to get a CUDA compatible compiler so it could be usable on both vendors soon] [2:00:28][@4bitlightning][Could you try to use #include and the multi line strings together for the shader code?] @@ -71,6 +71,6 @@ [2:17:24][Recommend crawling references[ref site="CiteSeerX" page="Interactive Indirect Illumination Using Voxel Cone Tracing" - url="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.225.5903"]] -[2:22:29][Close down the stream] + url="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.225.5903"]][:research] +[2:22:29][Close down the stream][:speech] [/video] diff --git a/cmuratori/hero/code/code409.hmml b/cmuratori/hero/code/code409.hmml index 2fdabc6..1e159e5 100644 --- a/cmuratori/hero/code/code409.hmml +++ b/cmuratori/hero/code/code409.hmml @@ -41,5 +41,5 @@ [1:34:44][handmade_render_group.cpp: Reorganise LightingTest()] [1:42:56][Run the game to see our lighting looking roughly the same] [1:43:49][handmade_render_group.cpp: Add IncidentLight and AverageDirectionToLight to the lighting_element] -[1:47:18][Close the stream as normal] +[1:47:18][Close the stream as normal][:speech] [/video] diff --git a/cmuratori/hero/code/code410.hmml b/cmuratori/hero/code/code410.hmml index 0733813..d9dafe4 100644 --- a/cmuratori/hero/code/code410.hmml +++ b/cmuratori/hero/code/code410.hmml @@ -21,7 +21,7 @@ [1:20:06][Run the game to see the trippy disco lights] [1:21:39][handmade_world_mode.cpp: Prevent AddSnakeSegment() from emitting light] [1:22:18][Run the game to see our current lighting solution with just our hero's light source] -[1:23:34][Q&A] +[1:23:34][Q&A][:speech] [1:23:50][@finalspace][Before I forgot, please increase the font size in visual studio for debugging; the font size is pretty small. It's not the same size as 4coder uses. Thanks!] [1:24:46][@lclhstr][Ah well... shareware visual studio] [1:25:21][@thesizik][Haven't you made an account for VS on a previous stream?] @@ -31,5 +31,5 @@ [1:30:33][@finalspace][The good times for paying software and are happy are totally over] [1:31:03][@tinforma][Couldn't follow for a long time. Have you done something with automated (unit) testing or are you planning to?] [1:33:16][@cewxel][How do you keep your motivation going on long running projects?] -[1:35:47][Wrap it up] +[1:35:47][Wrap it up][:speech] [/video] diff --git a/cmuratori/hero/code/code411.hmml b/cmuratori/hero/code/code411.hmml index 2025ce0..c1191df 100644 --- a/cmuratori/hero/code/code411.hmml +++ b/cmuratori/hero/code/code411.hmml @@ -37,7 +37,7 @@ [1:16:01][Run the game to see our smaller reflectors] [1:16:15][handmade_render_group.cpp: Allow smaller subdivisions of the reflectors] [1:17:30][Run the game to see our lighting solution, and consider that either the ray cast is incorrect or our indirect bounce may be too powerful] -[1:19:58][Q&A] +[1:19:58][Q&A][:speech] [1:20:51][@Kknewkles][Hi! No shave November? That stache's gun be epic] [1:22:15][@toastystoemp][Forward rendering or deferred rendering] [1:23:05][@nnreality][Would the subdivision of the rectangles be something that you would do in a tesselation shader if you were using OpenGL?] @@ -82,5 +82,5 @@ [1:53:21][@kknewkles][Handmade Source Control episodes?] [1:53:52][@k1ng_k3v1n][So you never access MSDN, the OpenGL docs, or other documentation on your work machine?] [1:54:57][@usdaproved][I would like to program without being connected to the internet, but how do you do it without stack overflow or other references? Does breaking that reliance just come from practice and experience?] -[1:58:05][Shut things down] +[1:58:05][Shut things down][:speech] [/video] diff --git a/cmuratori/hero/code/code417.hmml b/cmuratori/hero/code/code417.hmml index 674d7f6..0b9951d 100644 --- a/cmuratori/hero/code/code417.hmml +++ b/cmuratori/hero/code/code417.hmml @@ -64,7 +64,7 @@ [1:49:01][:Run the game to see that we're still losing power][:lighting :rendering] [1:49:37][Read through ComputeLightPropagation() one last time][:lighting :rendering :research] [1:50:32][:Run the game and look at our :lighting samples][:"debug visualisation" :rendering] -[1:52:39][Q&A] +[1:52:39][Q&A][:speech] [1:53:41][@pseudonym73][@cmuratori Am I right in thinking that you're taking into account the geometric (cos theta) factor on the receiving surface, but not on the emitting surface?][:lighting :rendering] [1:53:55][@groggeh][Q: In a trade like blacksmithing, you use your tools to make better tools over time. Do you think programming should be like this, where you build tools that you reuse every project? Or should you rebuild most of your code every project?] [1:56:48][@pseudonym73][Q: That may explain why it wasn't energy preserving][:lighting :rendering] diff --git a/cmuratori/hero/misc/basic_emacs.hmml b/cmuratori/hero/misc/basic_emacs.hmml index a44dee1..c33682d 100644 --- a/cmuratori/hero/misc/basic_emacs.hmml +++ b/cmuratori/hero/misc/basic_emacs.hmml @@ -1,5 +1,5 @@ [video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=misc title="Optional Editor Intro: Basic Emacs Tutorial" vod_platform=youtube id=hbmV1bnQ-i0 annotator=schme annotator=effect0r annotator=theinternetftw] -[0:00:00][Introduction and disclamer] +[0:00:00][Introduction and disclaimer][:speech] [0:01:29][Where to get Casey's .emacs config file] [0:02:26][What's in the .emacs file (quick overview)] [0:03:05][How to use the .emacs file] @@ -31,5 +31,5 @@ [0:33:19][Next and previous error after a compile] [0:33:52][Go to line number] [0:34:15][Revert buffer] -[0:37:01][Wrap up] +[0:37:01][Wrap up][:speech] [/video] diff --git a/cmuratori/hero/ray/ray00.hmml b/cmuratori/hero/ray/ray00.hmml index 042f79e..6f77a9f 100644 --- a/cmuratori/hero/ray/ray00.hmml +++ b/cmuratori/hero/ray/ray00.hmml @@ -125,7 +125,7 @@ [3:35:46][ray.cpp: Jitter the ray direction] [3:37:33][View the image with less and less aliasing as the RaysPerPixel increases] [3:38:41][Consider optimisations] -[3:39:25][Q&A] +[3:39:25][Q&A][:speech] [3:39:50][@mapem_87][Is this series for total beginners in game programming?] [3:40:19][@Kknewkles][Is it possible, or how hard is it, to have a debug system built-into your project that completely eliminates the need for a dedicated side debugger?] [3:40:51][@macielda][Your mic is bouncing on the metal ring on your hood] @@ -151,13 +151,13 @@ [3:53:18][@sir_pinecone][Can you share the question prompter code too? I missed some of the stream and would like to see it] [3:53:43][@genos3][I meant before if we could use traditional ray casting like Wolfenstein used to determine mesh visibility in the distance just using diffuse lighting] [3:54:15][View our mirror ball] -[3:54:33][That's it, with plans for the future of our raycaster] +[3:54:33][That's it, with plans for the future of our raycaster][:speech] [3:58:20][Recommend Physically Based Rendering[ref site="Matt Pharr and Greg Humphreys" page="Physically Based Rendering" - url="http://pbrt.org/"]] + url="http://pbrt.org/"]][:research] [3:59:39][Plug @Miblo's Patreon[ref site="Patreon" page="Matt Mascarenhas is creating Annotations for the Handmade.Network" - url="https://www.patreon.com/miblo"]] + url="https://www.patreon.com/miblo"]][:research] [/video] diff --git a/cmuratori/hero/ray/ray01.hmml b/cmuratori/hero/ray/ray01.hmml index 2d8d76b..3c0da39 100644 --- a/cmuratori/hero/ray/ray01.hmml +++ b/cmuratori/hero/ray/ray01.hmml @@ -46,7 +46,7 @@ [1:48:20][Run our program on the command line] [1:49:32][ray.h: Add RaysPerPixel and MaxBounceCount to work_queue] [1:52:11][Run to see all the information we need, and note that the next step will be SIMD] -[1:53:34][Q&A] +[1:53:34][Q&A][:speech] [1:53:45][@dautor][Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?] [1:54:00][@syanoks][Do you assume the x86 memory model in your code?] [1:54:27][@dautor][What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)] @@ -72,6 +72,6 @@ [2:11:33][The ARM memory model[ref site="Paul E. McKenney" page="Is Parallel Programming Hard, And, If So, What Can You Do About It?" - url="https://arxiv.org/pdf/1701.00854.pdf"]] -[2:18:50][That's it for today] + url="https://arxiv.org/pdf/1701.00854.pdf"]][:research] +[2:18:50][That's it for today][:speech] [/video] diff --git a/cmuratori/hero/ray/ray02.hmml b/cmuratori/hero/ray/ray02.hmml index 4890aa3..c528c7f 100644 --- a/cmuratori/hero/ray/ray02.hmml +++ b/cmuratori/hero/ray/ray02.hmml @@ -75,7 +75,7 @@ [2:22:12][Set up to support a constrained set of LANE_WIDTH values][:optimisation] [2:30:05][:Run to see that XOrShift32() is actually fine] [2:31:45][Do LANE_WIDTH==8 too][:optimisation] -[2:32:43][Q&A] +[2:32:43][Q&A][:speech] [2:33:46][@yurasniper][Q: How would one implement something like bloom effect in a raytracer?][:lighting :rendering] [2:39:46][:Run our program to capture its :performance statistics] [2:42:07][@macielda][Q: Is the Halton 2,3 sequence a good way to generate sample positions? I've heard about some people using it. It is a low discrepancy series][:prng] diff --git a/cmuratori/hero/ray/ray03.hmml b/cmuratori/hero/ray/ray03.hmml index 7ec0375..8578fbb 100644 --- a/cmuratori/hero/ray/ray03.hmml +++ b/cmuratori/hero/ray/ray03.hmml @@ -94,7 +94,7 @@ [3:52:21][Step in to CastSampleRays() and inspect the :asm] [3:55:07][Make CastSampleRays() count up the LoopsComputed for us to print out][:profiling] [4:00:35][:Run our program and inspect its statistics to see a mere 10.61% wasted bounces] -[4:01:40][Q&A] +[4:01:40][Q&A][:speech] [4:02:40][@thecodedragon][You didn't replace &= and |= with the correct operator inside the function] [4:03:03][@popcorn0x90][Q: Is your beard fake? It grew pretty fast] [4:03:11][@Kelimion][@cmuratori: Not just day 3, but also 2017-11-19 (for the image filename)] @@ -138,7 +138,7 @@ [4:46:26][:Run our program in 8-wide lanes to see that we are slower, more wasteful and darker] [4:47:18][Fix our 8-wide HorizontalAdd()][:optimisation] [4:48:10][:Run our program to see that we are much better, and save off our images and statistics] -[4:52:28][That's about it for today] +[4:52:28][That's about it for today][:speech] [4:53:20][@butwhynot1][Q: Do AVX512 now] -[4:54:04][That's it] +[4:54:04][That's it][:speech] [/video]