[{"data":1,"prerenderedAt":155},["ShallowReactive",2],{"content-/blog/nova-zombie-simulator":3,"authors":138},{"article":4,"surround":127},{"id":5,"title":6,"author":7,"body":8,"date":106,"dateUpdated":107,"description":108,"excerpt":107,"extension":109,"headline":6,"meta":110,"navigation":112,"path":113,"seo":114,"socialImage":115,"stem":121,"tags":122,"__hash__":126},"blog/blog/nova-zombie-simulator.md","Nova Zombie Simulator","Michael Paulukonis",{"type":9,"value":10,"toc":102},"minimark",[11,15,18,21,24,31,34,40,43,46,84,87],[12,13,14],"p",{},"Last year Anthony and I built a small p5.js game called Nova Zombie Simulator. Copilot helped with some of the early code; last week I used Claude Code to fix a bug in it, so the thing is still, erratically, alive.",[12,16,17],{},"The name doesn't mean anything. Anthony likes the \"Foo Simulator\" naming convention from Roblox, and \"Nova\" was a random suggestion the online p5.js editor threw up early on. We kept it. No plans to make it make sense.",[12,19,20],{},"The game puts you in the zombies' shoes, not the humans' — Anthony's call from the start. You're playing the horde, not fighting it.",[12,22,23],{},"Anthony's fixation at the time was building everything out of emoji, and that's still the entire art style: emoji as sprites, nothing else. An interesting constraint, and it saved us from ever having to think about graphics. He's moved on since, but the emojis stayed.",[12,25,26],{},[27,28],"img",{"alt":29,"src":30},"Nova Zombie Simulator gameplay, zombie emoji scattered across a gray playfield","/media/blog/nova-zombie-simulator/nvs_screenshot.00.png",[12,32,33],{},"The in-game help screen shows off our 6 mobs but is otherwise light in info:",[12,35,36],{},[27,37],{"alt":38,"src":39},"Nova Zombie Simulator help screen","/media/blog/nova-zombie-simulator/nova-zombie-simulator-help-screen.png",[12,41,42],{},"Play is fine if you're at a keyboard; there's no touch or mobile support. TBH, never built any before, so that would be an interesting addition. The attract mode might be more appropriate for a Robotron 2084-style game than this one. There's a discontinuity in the styles, but that's what iteration is for.",[12,44,45],{},"Anthony and I had fun picking sound effects too. A full credits list is in the repo, but our favorites:",[47,48,49,60,68,76],"ul",{},[50,51,52,59],"li",{},[53,54,58],"a",{"href":55,"rel":56},"https://freesound.org/s/64940/",[57],"nofollow","Wilhelm Scream"," by Syna-Max",[50,61,62,67],{},[53,63,66],{"href":64,"rel":65},"https://freesound.org/s/128297/",[57],"Layered Gunshot 7"," by Xenonn",[50,69,70,75],{},[53,71,74],{"href":72,"rel":73},"https://freesound.org/s/425941/",[57],"Loopy Thing"," by jarethorin",[50,77,78,83],{},[53,79,82],{"href":80,"rel":81},"https://freesound.org/s/353067/",[57],"Bite (Cartoon Style)"," by Jofae",[12,85,86],{},"We're mostly onto other projects now, but I want to keep poking at this one: soldiers that fire actual bullets you have to dodge, obstacles you can hide behind, power-ups. Maybe I'll create a long list of enhancements I'll never get around to building!",[12,88,89,90,95,96,101],{},"Play it at ",[53,91,94],{"href":92,"rel":93},"https://michaelpaulukonis.github.io/nova-zombie-simulator/",[57],"michaelpaulukonis.github.io/nova-zombie-simulator",". The source is on ",[53,97,100],{"href":98,"rel":99},"https://github.com/MichaelPaulukonis/nova-zombie-simulator",[57],"GitHub",".",{"title":103,"searchDepth":104,"depth":104,"links":105},"",2,[],"2026-07-27T00:00:00.000Z",null,"A p5.js zombie game made with Anthony, where you play the main zombie instead of fighting it.","md",{"authorUrl":111},"https://michael.paulukonis.github.io/",true,"/blog/nova-zombie-simulator",{"title":6,"description":108},{"src":116,"mime":117,"width":118,"height":119,"alt":120},"/media/blog/nova-zombie-simulator/nova-zombie-simulator-social.png","image/png",1200,630,"Nova Zombie Simulator gameplay screenshot, zombie emoji scattered across a gray playfield","blog/nova-zombie-simulator",[123,124,125],"games","p5js","creative-coding","7xJ-Fx_281vVduADZmsz72wGnjCiB-gsTbVw3hcf3Wo",[128,134],{"title":129,"path":130,"stem":131,"headline":132,"description":133,"excerpt":107,"children":-1},"painting with words","/blog/imagetexter","blog/imagetexter","imagetexter - painting with words","ASCII text-painter using whole words instead of letters, impressionistic and legible at once",{"title":135,"path":136,"stem":137,"headline":135,"description":135,"excerpt":107,"children":-1},"A Nuxt blog using Content","/blog/nuxt-content-blog","blog/nuxt-content-blog",{"id":139,"avatar":107,"bio":107,"extension":140,"meta":141,"name":107,"social":107,"stem":153,"__hash__":154},"authors/authors.json","json",{"path":142,"Sample Author":143,"body":150,"title":152},"/authors",{"@context":144,"@type":145,"@id":146,"name":7,"alternateName":7,"nationality":147,"gender":148,"jobTitle":149,"url":146},"http://www.schema.org","Person","https://michaelpaulukonis.github.io/","American","male","Senior Software Engineer, full-stack dev, backend-focus",{"Sample Author":151},{"@context":144,"@type":145,"@id":146,"name":7,"alternateName":7,"nationality":147,"gender":148,"jobTitle":149,"url":146},"Authors","authors","gDLa0t2oQBqkm4ZjFHa3UMLJv3dsBGcc4djngSH_b-Q",1785937118829]