[{"data":1,"prerenderedAt":1224},["ShallowReactive",2],{"\u002Fprojects\u002Fpacman":3},{"id":4,"title":5,"body":6,"date":1214,"description":1215,"draft":740,"extension":1216,"meta":1217,"navigation":740,"path":1218,"repository":30,"seo":1219,"stem":1220,"tags":1221,"toc":740,"__hash__":1223},"projects\u002Fprojects\u002Fpacman.md","Pacman",{"type":7,"value":8,"toc":1210},"minimark",[9,13,16,21,24,35,43,48,149,153,373,377,699,703,1164,1168,1190,1194,1206],[10,11,12],"p",{},"I built a Pac-Man clone in TypeScript.",[14,15],"pages--projects-pacman",{},[17,18,20],"h2",{"id":19},"usage","Usage",[10,22,23],{},"I would be very surprised if anybody would like to use it so I didn't make it available throught a CDN link or something.",[10,25,26,27,34],{},"The source code is available on ",[28,29,33],"a",{"href":30,"rel":31},"https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fpacman",[32],"nofollow","Codeberg",".",[10,36,37,38,42],{},"Below is a quick example of how to add a ",[39,40,41],"em",{},"Pac Man"," game of a page.",[44,45,47],"h4",{"id":46},"create-a-vite-vanilla-js-project","Create a Vite vanilla JS project",[49,50,55],"pre",{"className":51,"code":52,"language":53,"meta":54,"style":54},"language-sh shiki shiki-themes catppuccin-mocha","npm create vite@latest pacman -- --template vanilla --no-interactive\ncd pacman\nmkdir packages\ngit init .\ngit submodule add \\\n    https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fpacman.git \\\n    packages\u002Fpacman\n","sh","",[56,57,58,89,99,108,120,135,143],"code",{"__ignoreMap":54},[59,60,63,67,71,74,77,80,83,86],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sO0CG","npm",[59,68,70],{"class":69},"sX9bP"," create",[59,72,73],{"class":69}," vite@latest",[59,75,76],{"class":69}," pacman",[59,78,79],{"class":69}," --",[59,81,82],{"class":69}," --template",[59,84,85],{"class":69}," vanilla",[59,87,88],{"class":69}," --no-interactive\n",[59,90,92,96],{"class":61,"line":91},2,[59,93,95],{"class":94},"sDSzL","cd",[59,97,98],{"class":69}," pacman\n",[59,100,102,105],{"class":61,"line":101},3,[59,103,104],{"class":65},"mkdir",[59,106,107],{"class":69}," packages\n",[59,109,111,114,117],{"class":61,"line":110},4,[59,112,113],{"class":65},"git",[59,115,116],{"class":69}," init",[59,118,119],{"class":69}," .\n",[59,121,123,125,128,131],{"class":61,"line":122},5,[59,124,113],{"class":65},[59,126,127],{"class":69}," submodule",[59,129,130],{"class":69}," add",[59,132,134],{"class":133},"sik8b"," \\\n",[59,136,138,141],{"class":61,"line":137},6,[59,139,140],{"class":69},"    https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fpacman.git",[59,142,134],{"class":133},[59,144,146],{"class":61,"line":145},7,[59,147,148],{"class":69},"    packages\u002Fpacman\n",[44,150,152],{"id":151},"add-pacman-to-the-dependencies","Add Pacman to the dependencies",[49,154,159],{"className":155,"code":156,"filename":157,"language":158,"meta":54,"style":54},"language-json shiki shiki-themes catppuccin-mocha","{\n  \"name\": \"pacman\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"devDependencies\": {\n    \"vite\": \"^8.2.0\"\n  },\n  \"workspaces\": [\n      \"packages\u002Fpacman\"\n  ]\n}\n","package.json","json",[56,160,161,167,188,204,221,237,251,268,285,300,306,320,335,340,355,361,367],{"__ignoreMap":54},[59,162,163],{"class":61,"line":62},[59,164,166],{"class":165},"sqv1J","{\n",[59,168,169,172,176,179,182,185],{"class":61,"line":91},[59,170,171],{"class":165},"  \"",[59,173,175],{"class":174},"skT5V","name",[59,177,178],{"class":165},"\"",[59,180,181],{"class":165},":",[59,183,184],{"class":69}," \"pacman\"",[59,186,187],{"class":165},",\n",[59,189,190,192,195,197,199,202],{"class":61,"line":101},[59,191,171],{"class":165},[59,193,194],{"class":174},"version",[59,196,178],{"class":165},[59,198,181],{"class":165},[59,200,201],{"class":69}," \"0.0.0\"",[59,203,187],{"class":165},[59,205,206,208,211,213,215,219],{"class":61,"line":110},[59,207,171],{"class":165},[59,209,210],{"class":174},"private",[59,212,178],{"class":165},[59,214,181],{"class":165},[59,216,218],{"class":217},"sulG4"," true",[59,220,187],{"class":165},[59,222,223,225,228,230,232,235],{"class":61,"line":122},[59,224,171],{"class":165},[59,226,227],{"class":174},"type",[59,229,178],{"class":165},[59,231,181],{"class":165},[59,233,234],{"class":69}," \"module\"",[59,236,187],{"class":165},[59,238,239,241,244,246,248],{"class":61,"line":137},[59,240,171],{"class":165},[59,242,243],{"class":174},"scripts",[59,245,178],{"class":165},[59,247,181],{"class":165},[59,249,250],{"class":165}," {\n",[59,252,253,256,259,261,263,266],{"class":61,"line":145},[59,254,255],{"class":165},"    \"",[59,257,258],{"class":174},"dev",[59,260,178],{"class":165},[59,262,181],{"class":165},[59,264,265],{"class":69}," \"vite\"",[59,267,187],{"class":165},[59,269,271,273,276,278,280,283],{"class":61,"line":270},8,[59,272,255],{"class":165},[59,274,275],{"class":174},"build",[59,277,178],{"class":165},[59,279,181],{"class":165},[59,281,282],{"class":69}," \"vite build\"",[59,284,187],{"class":165},[59,286,288,290,293,295,297],{"class":61,"line":287},9,[59,289,255],{"class":165},[59,291,292],{"class":174},"preview",[59,294,178],{"class":165},[59,296,181],{"class":165},[59,298,299],{"class":69}," \"vite preview\"\n",[59,301,303],{"class":61,"line":302},10,[59,304,305],{"class":165},"  },\n",[59,307,309,311,314,316,318],{"class":61,"line":308},11,[59,310,171],{"class":165},[59,312,313],{"class":174},"devDependencies",[59,315,178],{"class":165},[59,317,181],{"class":165},[59,319,250],{"class":165},[59,321,323,325,328,330,332],{"class":61,"line":322},12,[59,324,255],{"class":165},[59,326,327],{"class":174},"vite",[59,329,178],{"class":165},[59,331,181],{"class":165},[59,333,334],{"class":69}," \"^8.2.0\"\n",[59,336,338],{"class":61,"line":337},13,[59,339,305],{"class":165},[59,341,343,345,348,350,352],{"class":61,"line":342},14,[59,344,171],{"class":165},[59,346,347],{"class":174},"workspaces",[59,349,178],{"class":165},[59,351,181],{"class":165},[59,353,354],{"class":165}," [\n",[59,356,358],{"class":61,"line":357},15,[59,359,360],{"class":69},"      \"packages\u002Fpacman\"\n",[59,362,364],{"class":61,"line":363},16,[59,365,366],{"class":165},"  ]\n",[59,368,370],{"class":61,"line":369},17,[59,371,372],{"class":165},"}\n",[44,374,376],{"id":375},"edit-indexhtml","Edit index.html",[49,378,383],{"className":379,"code":380,"filename":381,"language":382,"meta":54,"style":54},"language-html shiki shiki-themes catppuccin-mocha","\u003C!doctype html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\" \u002F>\n    \u003Cmeta\n        name=\"viewport\"\n        content=\"width=device-width, initial-scale=1.0\"\n    \u002F>\n    \u003Ctitle>pacman\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003Cdiv id=\"app\">\n        \u003Cdiv id=\"ui\">\n          \u003Cp>Press 'space' to start\u003C\u002Fp>\n          \u003Cp id=\"score\">-\u003C\u002Fp>\n        \u003C\u002Fdiv>\n        \u003Ccanvas id=\"canvas\" width=\"600\" height=\"800\">\u003C\u002Fcanvas>\n    \u003C\u002Fdiv>\n    \u003Cscript type=\"module\" src=\"\u002Fsrc\u002Fmain.js\">\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","index.html","html",[56,384,385,398,417,426,445,452,462,472,477,498,506,515,532,548,566,590,599,636,646,681,690],{"__ignoreMap":54},[59,386,387,391,395],{"class":61,"line":62},[59,388,390],{"class":389},"sTa83","\u003C!doctype",[59,392,394],{"class":393},"s0ph2"," html",[59,396,397],{"class":389},">\n",[59,399,400,404,406,409,412,415],{"class":61,"line":91},[59,401,403],{"class":402},"sMC71","\u003C",[59,405,382],{"class":174},[59,407,408],{"class":393}," lang",[59,410,411],{"class":402},"=",[59,413,414],{"class":69},"\"en\"",[59,416,397],{"class":402},[59,418,419,421,424],{"class":61,"line":101},[59,420,403],{"class":402},[59,422,423],{"class":174},"head",[59,425,397],{"class":402},[59,427,428,431,434,437,439,442],{"class":61,"line":110},[59,429,430],{"class":402},"    \u003C",[59,432,433],{"class":174},"meta",[59,435,436],{"class":393}," charset",[59,438,411],{"class":402},[59,440,441],{"class":69},"\"UTF-8\"",[59,443,444],{"class":402}," \u002F>\n",[59,446,447,449],{"class":61,"line":122},[59,448,430],{"class":402},[59,450,451],{"class":174},"meta\n",[59,453,454,457,459],{"class":61,"line":137},[59,455,456],{"class":393},"        name",[59,458,411],{"class":402},[59,460,461],{"class":69},"\"viewport\"\n",[59,463,464,467,469],{"class":61,"line":145},[59,465,466],{"class":393},"        content",[59,468,411],{"class":402},[59,470,471],{"class":69},"\"width=device-width, initial-scale=1.0\"\n",[59,473,474],{"class":61,"line":270},[59,475,476],{"class":402},"    \u002F>\n",[59,478,479,481,484,487,491,494,496],{"class":61,"line":287},[59,480,430],{"class":402},[59,482,483],{"class":174},"title",[59,485,486],{"class":402},">",[59,488,490],{"class":489},"sYma7","pacman",[59,492,493],{"class":402},"\u003C\u002F",[59,495,483],{"class":174},[59,497,397],{"class":402},[59,499,500,502,504],{"class":61,"line":302},[59,501,493],{"class":402},[59,503,423],{"class":174},[59,505,397],{"class":402},[59,507,508,510,513],{"class":61,"line":308},[59,509,403],{"class":402},[59,511,512],{"class":174},"body",[59,514,397],{"class":402},[59,516,517,519,522,525,527,530],{"class":61,"line":322},[59,518,430],{"class":402},[59,520,521],{"class":174},"div",[59,523,524],{"class":393}," id",[59,526,411],{"class":402},[59,528,529],{"class":69},"\"app\"",[59,531,397],{"class":402},[59,533,534,537,539,541,543,546],{"class":61,"line":337},[59,535,536],{"class":402},"        \u003C",[59,538,521],{"class":174},[59,540,524],{"class":393},[59,542,411],{"class":402},[59,544,545],{"class":69},"\"ui\"",[59,547,397],{"class":402},[59,549,550,553,555,557,560,562,564],{"class":61,"line":342},[59,551,552],{"class":402},"          \u003C",[59,554,10],{"class":174},[59,556,486],{"class":402},[59,558,559],{"class":489},"Press 'space' to start",[59,561,493],{"class":402},[59,563,10],{"class":174},[59,565,397],{"class":402},[59,567,568,570,572,574,576,579,581,584,586,588],{"class":61,"line":357},[59,569,552],{"class":402},[59,571,10],{"class":174},[59,573,524],{"class":393},[59,575,411],{"class":402},[59,577,578],{"class":69},"\"score\"",[59,580,486],{"class":402},[59,582,583],{"class":489},"-",[59,585,493],{"class":402},[59,587,10],{"class":174},[59,589,397],{"class":402},[59,591,592,595,597],{"class":61,"line":363},[59,593,594],{"class":402},"        \u003C\u002F",[59,596,521],{"class":174},[59,598,397],{"class":402},[59,600,601,603,606,608,610,613,616,618,621,624,626,629,632,634],{"class":61,"line":369},[59,602,536],{"class":402},[59,604,605],{"class":174},"canvas",[59,607,524],{"class":393},[59,609,411],{"class":402},[59,611,612],{"class":69},"\"canvas\"",[59,614,615],{"class":393}," width",[59,617,411],{"class":402},[59,619,620],{"class":69},"\"600\"",[59,622,623],{"class":393}," height",[59,625,411],{"class":402},[59,627,628],{"class":69},"\"800\"",[59,630,631],{"class":402},">\u003C\u002F",[59,633,605],{"class":174},[59,635,397],{"class":402},[59,637,639,642,644],{"class":61,"line":638},18,[59,640,641],{"class":402},"    \u003C\u002F",[59,643,521],{"class":174},[59,645,397],{"class":402},[59,647,649,651,654,657,659,662,665,667,670,672,674,677,679],{"class":61,"line":648},19,[59,650,430],{"class":402},[59,652,653],{"class":174},"script",[59,655,656],{"class":393}," type",[59,658,411],{"class":402},[59,660,661],{"class":69},"\"module\"",[59,663,664],{"class":393}," src",[59,666,411],{"class":402},[59,668,669],{"class":69},"\"\u002Fsrc\u002Fmain.js\"",[59,671,486],{"class":402},[59,673,403],{"class":489},[59,675,676],{"class":402},"\u002F",[59,678,653],{"class":174},[59,680,397],{"class":402},[59,682,684,686,688],{"class":61,"line":683},20,[59,685,493],{"class":402},[59,687,512],{"class":174},[59,689,397],{"class":402},[59,691,693,695,697],{"class":61,"line":692},21,[59,694,493],{"class":402},[59,696,382],{"class":174},[59,698,397],{"class":402},[44,700,702],{"id":701},"edit-srcmainjs","Edit src\u002Fmain.js",[49,704,709],{"className":705,"code":706,"filename":707,"language":708,"meta":54,"style":54},"language-js shiki shiki-themes catppuccin-mocha","import {\n    Game,\n} from \"@nulldev\u002Fpacman\"\n\nconst context = canvas.getContext(\"2d\")\nconst game = new Game(context)\n\ngame.onScoreChanged = points => {\n    if (score != null) {\n        score.innerHTML = `${points}`\n    }\n}\ngame.render()\n\nwindow.addEventListener(\"keydown\", ev => {\n    const { code } = ev\n\n    ev.preventDefault()\n\n    if (code === \"Space\") {\n        if (game.running) {\n            game.togglePause()\n        } else {\n            game.start()\n        }\n    } else if (code === \"ArrowUp\") {\n        game.up()\n    } else if (code === \"ArrowDown\") {\n        game.down()\n    } else if (code === \"ArrowLeft\") {\n        game.left()\n    } else if (code === \"ArrowRight\") {\n        game.right()\n    }\n})\n","src\u002Fmain.js","js",[56,710,711,718,725,736,742,769,788,792,814,833,859,864,868,880,884,909,927,931,943,947,964,979,992,1003,1015,1021,1043,1056,1076,1088,1108,1120,1140,1152,1157],{"__ignoreMap":54},[59,712,713,716],{"class":61,"line":62},[59,714,715],{"class":389},"import",[59,717,250],{"class":165},[59,719,720,723],{"class":61,"line":91},[59,721,722],{"class":489},"    Game",[59,724,187],{"class":165},[59,726,727,730,733],{"class":61,"line":101},[59,728,729],{"class":165},"}",[59,731,732],{"class":389}," from",[59,734,735],{"class":69}," \"@nulldev\u002Fpacman\"\n",[59,737,738],{"class":61,"line":110},[59,739,741],{"emptyLinePlaceholder":740},true,"\n",[59,743,744,747,750,752,755,757,760,763,766],{"class":61,"line":122},[59,745,746],{"class":389},"const",[59,748,749],{"class":489}," context ",[59,751,411],{"class":402},[59,753,754],{"class":489}," canvas",[59,756,34],{"class":402},[59,758,759],{"class":65},"getContext",[59,761,762],{"class":489},"(",[59,764,765],{"class":69},"\"2d\"",[59,767,768],{"class":489},")\n",[59,770,771,773,776,778,782,785],{"class":61,"line":137},[59,772,746],{"class":389},[59,774,775],{"class":489}," game ",[59,777,411],{"class":402},[59,779,781],{"class":780},"s4wqm"," new",[59,783,784],{"class":65}," Game",[59,786,787],{"class":489},"(context)\n",[59,789,790],{"class":61,"line":145},[59,791,741],{"emptyLinePlaceholder":740},[59,793,794,797,799,802,805,809,812],{"class":61,"line":270},[59,795,796],{"class":489},"game",[59,798,34],{"class":402},[59,800,801],{"class":65},"onScoreChanged",[59,803,804],{"class":402}," =",[59,806,808],{"class":807},"sVVt8"," points",[59,810,811],{"class":389}," =>",[59,813,250],{"class":165},[59,815,816,819,822,825,828,831],{"class":61,"line":287},[59,817,818],{"class":389},"    if",[59,820,821],{"class":489}," (score ",[59,823,824],{"class":402},"!=",[59,826,827],{"class":389}," null",[59,829,830],{"class":489},") ",[59,832,166],{"class":165},[59,834,835,838,840,843,845,848,851,854,856],{"class":61,"line":302},[59,836,837],{"class":489},"        score",[59,839,34],{"class":402},[59,841,842],{"class":489},"innerHTML ",[59,844,411],{"class":402},[59,846,847],{"class":69}," `",[59,849,850],{"class":165},"${",[59,852,853],{"class":489},"points",[59,855,729],{"class":165},[59,857,858],{"class":69},"`\n",[59,860,861],{"class":61,"line":308},[59,862,863],{"class":165},"    }\n",[59,865,866],{"class":61,"line":322},[59,867,372],{"class":165},[59,869,870,872,874,877],{"class":61,"line":337},[59,871,796],{"class":489},[59,873,34],{"class":402},[59,875,876],{"class":65},"render",[59,878,879],{"class":489},"()\n",[59,881,882],{"class":61,"line":342},[59,883,741],{"emptyLinePlaceholder":740},[59,885,886,889,891,894,896,899,902,905,907],{"class":61,"line":357},[59,887,888],{"class":489},"window",[59,890,34],{"class":402},[59,892,893],{"class":65},"addEventListener",[59,895,762],{"class":489},[59,897,898],{"class":69},"\"keydown\"",[59,900,901],{"class":165},",",[59,903,904],{"class":807}," ev",[59,906,811],{"class":389},[59,908,250],{"class":165},[59,910,911,914,917,920,922,924],{"class":61,"line":363},[59,912,913],{"class":389},"    const",[59,915,916],{"class":165}," {",[59,918,919],{"class":489}," code ",[59,921,729],{"class":165},[59,923,804],{"class":402},[59,925,926],{"class":489}," ev\n",[59,928,929],{"class":61,"line":369},[59,930,741],{"emptyLinePlaceholder":740},[59,932,933,936,938,941],{"class":61,"line":638},[59,934,935],{"class":489},"    ev",[59,937,34],{"class":402},[59,939,940],{"class":65},"preventDefault",[59,942,879],{"class":489},[59,944,945],{"class":61,"line":648},[59,946,741],{"emptyLinePlaceholder":740},[59,948,949,951,954,957,960,962],{"class":61,"line":683},[59,950,818],{"class":389},[59,952,953],{"class":489}," (code ",[59,955,956],{"class":402},"===",[59,958,959],{"class":69}," \"Space\"",[59,961,830],{"class":489},[59,963,166],{"class":165},[59,965,966,969,972,974,977],{"class":61,"line":692},[59,967,968],{"class":389},"        if",[59,970,971],{"class":489}," (game",[59,973,34],{"class":402},[59,975,976],{"class":489},"running) ",[59,978,166],{"class":165},[59,980,982,985,987,990],{"class":61,"line":981},22,[59,983,984],{"class":489},"            game",[59,986,34],{"class":402},[59,988,989],{"class":65},"togglePause",[59,991,879],{"class":489},[59,993,995,998,1001],{"class":61,"line":994},23,[59,996,997],{"class":165},"        }",[59,999,1000],{"class":389}," else",[59,1002,250],{"class":165},[59,1004,1006,1008,1010,1013],{"class":61,"line":1005},24,[59,1007,984],{"class":489},[59,1009,34],{"class":402},[59,1011,1012],{"class":65},"start",[59,1014,879],{"class":489},[59,1016,1018],{"class":61,"line":1017},25,[59,1019,1020],{"class":165},"        }\n",[59,1022,1024,1027,1029,1032,1034,1036,1039,1041],{"class":61,"line":1023},26,[59,1025,1026],{"class":165},"    }",[59,1028,1000],{"class":389},[59,1030,1031],{"class":389}," if",[59,1033,953],{"class":489},[59,1035,956],{"class":402},[59,1037,1038],{"class":69}," \"ArrowUp\"",[59,1040,830],{"class":489},[59,1042,166],{"class":165},[59,1044,1046,1049,1051,1054],{"class":61,"line":1045},27,[59,1047,1048],{"class":489},"        game",[59,1050,34],{"class":402},[59,1052,1053],{"class":65},"up",[59,1055,879],{"class":489},[59,1057,1059,1061,1063,1065,1067,1069,1072,1074],{"class":61,"line":1058},28,[59,1060,1026],{"class":165},[59,1062,1000],{"class":389},[59,1064,1031],{"class":389},[59,1066,953],{"class":489},[59,1068,956],{"class":402},[59,1070,1071],{"class":69}," \"ArrowDown\"",[59,1073,830],{"class":489},[59,1075,166],{"class":165},[59,1077,1079,1081,1083,1086],{"class":61,"line":1078},29,[59,1080,1048],{"class":489},[59,1082,34],{"class":402},[59,1084,1085],{"class":65},"down",[59,1087,879],{"class":489},[59,1089,1091,1093,1095,1097,1099,1101,1104,1106],{"class":61,"line":1090},30,[59,1092,1026],{"class":165},[59,1094,1000],{"class":389},[59,1096,1031],{"class":389},[59,1098,953],{"class":489},[59,1100,956],{"class":402},[59,1102,1103],{"class":69}," \"ArrowLeft\"",[59,1105,830],{"class":489},[59,1107,166],{"class":165},[59,1109,1111,1113,1115,1118],{"class":61,"line":1110},31,[59,1112,1048],{"class":489},[59,1114,34],{"class":402},[59,1116,1117],{"class":65},"left",[59,1119,879],{"class":489},[59,1121,1123,1125,1127,1129,1131,1133,1136,1138],{"class":61,"line":1122},32,[59,1124,1026],{"class":165},[59,1126,1000],{"class":389},[59,1128,1031],{"class":389},[59,1130,953],{"class":489},[59,1132,956],{"class":402},[59,1134,1135],{"class":69}," \"ArrowRight\"",[59,1137,830],{"class":489},[59,1139,166],{"class":165},[59,1141,1143,1145,1147,1150],{"class":61,"line":1142},33,[59,1144,1048],{"class":489},[59,1146,34],{"class":402},[59,1148,1149],{"class":65},"right",[59,1151,879],{"class":489},[59,1153,1155],{"class":61,"line":1154},34,[59,1156,863],{"class":165},[59,1158,1160,1162],{"class":61,"line":1159},35,[59,1161,729],{"class":165},[59,1163,768],{"class":489},[44,1165,1167],{"id":1166},"run-the-app","Run the app",[49,1169,1171],{"className":51,"code":1170,"language":53,"meta":54,"style":54},"npm install\nnpm run dev\n",[56,1172,1173,1180],{"__ignoreMap":54},[59,1174,1175,1177],{"class":61,"line":62},[59,1176,66],{"class":65},[59,1178,1179],{"class":69}," install\n",[59,1181,1182,1184,1187],{"class":61,"line":91},[59,1183,66],{"class":65},[59,1185,1186],{"class":69}," run",[59,1188,1189],{"class":69}," dev\n",[17,1191,1193],{"id":1192},"credits","Credits",[10,1195,1196,1197,1205],{},"I relied on the excellent ",[28,1198,1201,1204],{"href":1199,"rel":1200},"https:\u002F\u002Fpacman.holenet.info\u002F#LvlSpecs",[32],[39,1202,1203],{},"Pac-Man"," dossier"," for all the game mechanics and specs.",[1207,1208,1209],"style",{},"html pre.shiki code .sO0CG, html code.shiki .sO0CG{--shiki-default:#89B4FA;--shiki-default-font-style:italic}html pre.shiki code .sX9bP, html code.shiki .sX9bP{--shiki-default:#A6E3A1}html pre.shiki code .sDSzL, html code.shiki .sDSzL{--shiki-default:#F38BA8;--shiki-default-font-style:italic}html pre.shiki code .sik8b, html code.shiki .sik8b{--shiki-default:#F5C2E7}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sqv1J, html code.shiki .sqv1J{--shiki-default:#9399B2}html pre.shiki code .skT5V, html code.shiki .skT5V{--shiki-default:#89B4FA}html pre.shiki code .sulG4, html code.shiki .sulG4{--shiki-default:#FAB387}html pre.shiki code .sTa83, html code.shiki .sTa83{--shiki-default:#CBA6F7}html pre.shiki code .s0ph2, html code.shiki .s0ph2{--shiki-default:#F9E2AF}html pre.shiki code .sMC71, html code.shiki .sMC71{--shiki-default:#94E2D5}html pre.shiki code .sYma7, html code.shiki .sYma7{--shiki-default:#CDD6F4}html pre.shiki code .s4wqm, html code.shiki .s4wqm{--shiki-default:#CBA6F7;--shiki-default-font-weight:bold}html pre.shiki code .sVVt8, html code.shiki .sVVt8{--shiki-default:#EBA0AC;--shiki-default-font-style:italic}",{"title":54,"searchDepth":91,"depth":91,"links":1211},[1212,1213],{"id":19,"depth":91,"text":20},{"id":1192,"depth":91,"text":1193},"2026-08-02","I wrote a Pacman in typescript.","md",{},"\u002Fprojects\u002Fpacman",{"title":5,"description":1215},"projects\u002Fpacman",[1222],"TS","gfVvGBQMPHc8Sn9t0TRBl0RfK77bxZfmqeCivQG7YeY",1787695959005]