{"id":326,"date":"2025-12-29T20:43:25","date_gmt":"2025-12-29T20:43:25","guid":{"rendered":"https:\/\/maximusgames.us\/?p=326"},"modified":"2025-12-29T21:14:35","modified_gmt":"2025-12-29T21:14:35","slug":"nes-homebrews","status":"publish","type":"post","link":"https:\/\/maximusgames.us\/?p=326","title":{"rendered":"NES Homebrews"},"content":{"rendered":"<p>I recently discovered <a href=\"https:\/\/forums.atariage.com\/forum\/55-colecovision-programming\/\">CVBasic on the AtariAge forums<\/a>, and nanochess recently added NES support.\u00a0 I thought I&#8217;d give an NES homebrew a shot and start with the first game that I made for the Atari 7800, &#8220;Boom!&#8221;.\u00a0 This is my very first NES homebrew attempt!<\/p>\n<p><strong>Boom!<\/strong><\/p>\n<p>It&#8217;s a complete game however there&#8217;s definitely more I could add to it.\u00a0 I thought I&#8217;d go ahead and post it here for everyone to try out and play.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-327\" src=\"https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES1-300x259.jpg\" alt=\"\" width=\"300\" height=\"259\" srcset=\"https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES1-300x259.jpg 300w, https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES1.jpg 768w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-328\" src=\"https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES2-300x263.jpg\" alt=\"\" width=\"300\" height=\"263\" srcset=\"https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES2-300x263.jpg 300w, https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES2.jpg 767w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Download the binary to play in your favorite NES Emulator:\u00a0 <a href=\"https:\/\/maximusgames.us\/wp-content\/uploads\/2025\/12\/Boom_NES_v1.0_binary.zip\">Boom_NES_v1.0_binary<\/a><\/p>\n<p data-path-to-node=\"7\">Your goal is simple: catch every bomb before it hits the ground. If a single bomb misses your buckets, you lose a life. As the bomber gets faster, you\u2019ll need to stay sharp to survive.<\/p>\n<h3 data-path-to-node=\"8\"><b data-path-to-node=\"8\" data-index-in-node=\"0\">Features &amp; Mechanics<\/b><\/h3>\n<ul data-path-to-node=\"9\">\n<li>\n<p data-path-to-node=\"9,0,0\"><b data-path-to-node=\"9,0,0\" data-index-in-node=\"0\">Dynamic Wave Progression:<\/b> The challenge never stops. Every wave increases the pressure:<\/p>\n<ul data-path-to-node=\"9,0,1\">\n<li>\n<p data-path-to-node=\"9,0,1,0,0\"><b data-path-to-node=\"9,0,1,0,0\" data-index-in-node=\"0\">Bomb Quantity:<\/b> I use a scaling formula (<span class=\"math-inline\" data-math=\"15 + (Wave \\times 2)\" data-index-in-node=\"41\">$15 + (Wave x 2)$<\/span>) to keep levels short but intense. By Wave 10, you\u2019re dealing with 35 bombs per round.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,0,1,1,0\"><b data-path-to-node=\"9,0,1,1,0\" data-index-in-node=\"0\">Speed Cap:<\/b> While the bombs get faster as you progress, I&#8217;ve implemented a &#8220;Fairness Limit&#8221; cap of <b data-path-to-node=\"9,0,1,1,0\" data-index-in-node=\"108\">5 pixels per frame<\/b>. Hopefully this keeps the game as more of a test of skill than luck.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,0,1,2,0\"><b data-path-to-node=\"9,0,1,2,0\" data-index-in-node=\"0\">Spawn Density:<\/b> The delay between bomb drops shrinks as you go (<span class=\"math-inline\" data-math=\"20 - (Wave \\times 2)\" data-index-in-node=\"63\">$20 &#8211; (Wave x 2)$<\/span>), eventually hitting a floor of just 4 frames between drops.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p data-path-to-node=\"9,1,0\"><b data-path-to-node=\"9,1,0\" data-index-in-node=\"0\">Difficulty Skill Levels:<\/b><\/p>\n<ul data-path-to-node=\"9\">\n<li>\n<p data-path-to-node=\"9,1,0\"><b data-path-to-node=\"9,1,0\" data-index-in-node=\"27\">EASY:<\/b> Buckets are 4 sprites wide (32px) for beginners.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,1,1,0,0\"><b data-path-to-node=\"9,1,1,0,0\" data-index-in-node=\"0\">STD:<\/b> Buckets are 3 sprites wide (24px) for the classic challenge.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,1,1,1,0\"><b data-path-to-node=\"9,1,1,1,0\" data-index-in-node=\"0\">HARD:<\/b> Buckets are 2 sprites wide (16px) for the experts.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p data-path-to-node=\"9,2,0\"><b data-path-to-node=\"9,2,0\" data-index-in-node=\"0\">Dual Control Modes:<\/b> Switch between <b data-path-to-node=\"9,2,0\" data-index-in-node=\"35\">Standard<\/b> digital movement and <b data-path-to-node=\"9,2,0\" data-index-in-node=\"65\">Velocity<\/b> mode, which uses physics-based acceleration.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,3,0\"><b data-path-to-node=\"9,3,0\" data-index-in-node=\"0\">5-Digit High Score:<\/b> Aim for the legendary 99,999! The game tracks your <b data-path-to-node=\"9,3,0\" data-index-in-node=\"121\">High Score<\/b> and <b data-path-to-node=\"9,3,0\" data-index-in-node=\"136\">Last Wave<\/b> directly on the title screen.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,4,0\"><b data-path-to-node=\"9,4,0\" data-index-in-node=\"0\">Extra Lives:<\/b> Stay in the fight longer by earning an extra bucket every <b data-path-to-node=\"9,4,0\" data-index-in-node=\"65\">1,000 points<\/b> (up to a maximum of 3).<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"10\"><b data-path-to-node=\"10\" data-index-in-node=\"0\">Other Info<\/b><\/h3>\n<ul data-path-to-node=\"12\">\n<li>\n<p data-path-to-node=\"12,0,0\"><b data-path-to-node=\"12,0,0\" data-index-in-node=\"0\">Custom 3-Octave Music Engine:<\/b> I Built a multi-channel sequencer from scratch, featuring pulse-width duty cycles, noise-channel drum decay, and staccato note-off logic.\u00a0 The sound engine works, but alas I&#8217;m not very good at actually creating music.\u00a0 This would be something I&#8217;ll work on more in a future version.<\/p>\n<\/li>\n<li><b data-path-to-node=\"12,2,0\" data-index-in-node=\"0\">32KB NROM Architecture:<\/b> Designed to run on original hardware or any modern emulator.<\/li>\n<\/ul>\n<h3 data-path-to-node=\"13\"><b data-path-to-node=\"13\" data-index-in-node=\"0\">How to Play<\/b><\/h3>\n<ol start=\"1\" data-path-to-node=\"14\">\n<li>\n<p data-path-to-node=\"14,0,0\"><b data-path-to-node=\"14,0,0\" data-index-in-node=\"0\">Select Skill:<\/b> Use the D-Pad to choose your difficulty and control style.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"14,1,0\"><b data-path-to-node=\"14,1,0\" data-index-in-node=\"0\">Start:<\/b> Press <b data-path-to-node=\"14,1,0\" data-index-in-node=\"13\">A<\/b> to begin the wave.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"14,2,0\"><b data-path-to-node=\"14,2,0\" data-index-in-node=\"0\">Move:<\/b> Use Left\/Right to position your buckets.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"14,3,0\"><b data-path-to-node=\"14,3,0\" data-index-in-node=\"0\">Catch:<\/b> Don&#8217;t let a single bomb touch the city floor!<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>I recently discovered CVBasic on the AtariAge forums, and nanochess recently added NES support.\u00a0 I thought I&#8217;d give an NES<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-326","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/posts\/326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maximusgames.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326"}],"version-history":[{"count":3,"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/posts\/326\/revisions"}],"predecessor-version":[{"id":335,"href":"https:\/\/maximusgames.us\/index.php?rest_route=\/wp\/v2\/posts\/326\/revisions\/335"}],"wp:attachment":[{"href":"https:\/\/maximusgames.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maximusgames.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maximusgames.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}