[{"data":1,"prerenderedAt":506},["ShallowReactive",2],{"project-43355658":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":48,"post_text":50,"what":51,"said":82,"maker_in_thread":261,"shape":273,"grid":277,"attempts":468,"same_week":469,"maker_shows":40,"maker_hidden":498,"reader_version":499,"card":500},"43355658","Bubbles","A vanilla JavaScript web game","title","Show HN: Bubbles, a vanilla JavaScript web game","https:\u002F\u002Fehmorris.com\u002Fbubbles\u002F","ehmorris.com","ehmorris",1741888083,2025,201,75,321,3837,9,"notable","games","browser game","web_app",[21,24,25,26],"javascript game","canvas game","slingshot puzzle","mixed",-0.063,{"positive":30,"neutral":31,"mixed":32,"critical":33},14,19,7,20,60,{"design":36,"idea":39,"execution":42,"performance":44,"pricing":47},{"positive":37,"critical":38},4,11,{"positive":40,"critical":41},2,0,{"positive":37,"critical":43},6,{"positive":45,"critical":46},1,3,{"positive":41,"critical":41},[46,49,46,46,46,46,45,45,46,45,45,46,45,46,45,45,41,45,46,46,49,49,45,45,45,49,49,46,46,46,49,46,46,49,46,46,45,49,49,45],5,"Hey everybody, you might remember my older game, Lander! It made a big splash on Hacker News about 2 years ago. I'm still enjoying writing games with no dependencies. I've been working on Bubbles for about 6 months and would love to see your scores.\n\nIf you like it, you can build your own levels with my builder tool: https:\u002F\u002Fehmorris.com\u002Fbubbles\u002Fbuilder\u002F and share the levels here or via Github.",{"problem":52,"audience":53,"pricing":52,"motivation":59,"time_to_build":64,"stack":68,"openness":79,"stage":80,"team_size":81},null,{"value":54,"source":55,"evidence":56},"Players of browser games and fans of the author's earlier game Lander","inferred",[57],{"id":58},"post",{"value":60,"source":61,"evidence":62},"The author enjoys writing games with no dependencies.","maker",[63],{"id":58},{"value":65,"source":61,"evidence":66},"About 6 months.",[67],{"id":58},[69,73],{"value":70,"source":61,"evidence":71},"Vanilla JavaScript",[72],{"id":58},{"value":74,"source":61,"evidence":75},"HTML canvas",[76],{"id":77,"by":11,"text":78},"43361418","Everything is drawn directly to canvas including the score view: https:\u002F\u002Fgithub.com\u002Fehmorris\u002Fbubbles\u002Fblob\u002Fde0c6c8b40328df9fcfd1fb401373060fc601eb2\u002Fball.js#L181…","open_source","launched","solo",{"praise":83,"objections":126,"requests":199,"questions":234,"alternatives":249},[84,104,119],{"value":85,"source":86,"evidence":87},"Clean, readable, dependency-free source code","commenter",[88,92,96,100],{"id":89,"by":90,"text":91},"43356078","simpaticoder","Really cool stuff, ehmorris. Your work harkens back to the early days of the web when bundlers and minifiers were the exception, rather than the rule. Work like this can really…",{"id":93,"by":94,"text":95},"43356106","90s_dev","Your source is nice and clean[1]. No dependencies is a wonderful goal. Status quo is inherently always against innovation. I like the approach the Go team took of rethinking new…",{"id":97,"by":98,"text":99},"43356299","owebmaster","Beautiful JS code, happy to see this after people started to create DOOM using TypeScript types. Edit: yay, beat all levels after learning I can use slingshot multiple times",{"id":101,"by":102,"text":103},"43358549","hakaneskici","Your code is such a fresh air after being subject to a decade of bloat. Thanks.",{"value":105,"source":86,"evidence":106},"Fun, addictive gameplay once learned",[107,111,115],{"id":108,"by":109,"text":110},"43356724","lukevp","Same as well! Game is fun once you get it",{"id":112,"by":113,"text":114},"43356333","higgins","Good old fashioned addiction",{"id":116,"by":117,"text":118},"43357099","bryzaguy","This game is so good! Played on my iPhone",{"value":120,"source":86,"evidence":121},"Good sound design",[122],{"id":123,"by":124,"text":125},"43356759","wkirby","Absolutely love the sound design on this.",[127,146,158,173,188],{"value":128,"source":86,"evidence":129},"Too hard and too fast early on",[130,134,138,142],{"id":131,"by":132,"text":133},"43356516","megadata","Slick as silk! But too fast too quickly. Gimme some easy endorphin in the first few levels before I start struggling.",{"id":135,"by":136,"text":137},"43358674","stevage","Really well built, and I love the tutorial... BUT Jeepers, it starts off so hard compared to the tutorial. 1. I was not expecting bubbles to move (since they are all static in…",{"id":139,"by":140,"text":141},"43357458","herczegzsolt","Way too hard for me to be enjoyable.",{"id":143,"by":144,"text":145},"43360361","tobyhinloopen","Way too fast to start with. Is it design for phones? Because on desktop it is moving way too fast",{"value":147,"source":86,"evidence":148},"Tutorial does not match the actual gameplay",[149,150,154],{"id":135,"by":136,"text":137},{"id":151,"by":152,"text":153},"43362619","blinding-streak","The tutorial has zero in common with the actual gameplay. Why would you do that? It's not a good onboarding experience. It just creates frustration.",{"id":155,"by":156,"text":157},"43356408","SamBam","Nice. It took me a few times to realize that I could do bombs or slingshots by clicking in empty space. The tutorial makes it look like you have to click on a bubble. Maybe the…",{"value":159,"source":86,"evidence":160},"Poor touchpad and desktop controls, drag often fails",[161,165,169],{"id":162,"by":163,"text":164},"43356278","mjburgess","A touchpad seems to really cripple the gameplay -- one idea could be to ask what device players are using and make slight adjustments. For touchpads, moving the cursor is slower,…",{"id":166,"by":167,"text":168},"43355895","boutell","Looks neat... can't drag the ball in linux chrome (dragging works for me elsewhere), maybe I'll try later on my phone.",{"id":170,"by":171,"text":172},"43356631","flanbiscuit","> and the drag-pull mechanism doesnt really work Doesn't work for me at all on both Firefox and Chrome (latest versions for both) on MacOS using the touch pad. I can't get past…",{"value":174,"source":86,"evidence":175},"Lives system frustrating; cannot replay a level",[176,180,184],{"id":177,"by":178,"text":179},"43361580","thih9","Cool! Feedback: the concept of “lives” spoils the fun for me; I’d like to retry a level without having to replay earlier ones.",{"id":181,"by":182,"text":183},"43359256","latexr","Having to restart over and over kills it for me. I’d much rather be able to repeat a level until I got it perfect then move on.",{"id":185,"by":186,"text":187},"43358526","fyrn_","I want to be able to replay a level, don't force me into the next level.",{"value":189,"source":86,"evidence":190},"Input lag on mobile",[191,195],{"id":192,"by":193,"text":194},"43358027","jrks11o","input delay heavy on mobile browser, otherwise nice!",{"id":196,"by":197,"text":198},"43357749","IshKebab","Yeah it's kind of laggy too.",[200,209,213,220,227],{"value":201,"source":86,"evidence":202},"Let players replay a level without restarting the game",[203,207,208],{"id":204,"by":205,"text":206},"43363761","BizarroLand","One more kibitz, each level should give you the option to replay at the end so you can hone your skills, and only your best score should carry over.",{"id":185,"by":186,"text":187},{"id":181,"by":182,"text":183},{"value":210,"source":86,"evidence":211},"Add a way to return to the tutorial",[212],{"id":135,"by":136,"text":137},{"value":214,"source":86,"evidence":215},"Add more levels",[216],{"id":217,"by":218,"text":219},"43376600","gjohnhazel","Also please add more levels and I’ll enjoy even more! I do think this could easily make some decent money as a mobile app.",{"value":221,"source":86,"evidence":222},"Save progress per level",[223],{"id":224,"by":225,"text":226},"43359060","jsherwani","it would be nice if i could save my progress at every level so i could just keep working on one level at a time.",{"value":228,"source":86,"evidence":229},"Make the tutorial show empty-space tapping",[230],{"id":231,"by":232,"text":233},"43361574","a1r","This. The 'black circle' in the tutorial is no good, maybe a dotted circle instead to make it clear you're supposed to be tapping empty space and not a black bubble.",[235,242],{"value":236,"source":86,"evidence":237},"How are the bubbles implemented?",[238],{"id":239,"by":240,"text":241},"43359496","vivzkestrel","so what are those bubbles? divs with a border-radius of 50% that transform X and Y with random values? how is this implemented?",{"value":243,"source":86,"evidence":244},"What do par and bogey mean?",[245],{"id":246,"by":247,"text":248},"43358455","ricardobeat","Really nice interactions. A bit too fast paced for my iPhone Mini, and I have no idea what this “par” and “bogey” stuff means (is it golf lingo?), but looks promising!",[250,254],{"value":251,"source":61,"evidence":252},"Lander, the author's earlier game",[253],{"id":58},{"value":255,"source":86,"evidence":256},"Flappy Bird",[257],{"id":258,"by":259,"text":260},"43357122","al_borland","I was on mobile and it felt like by the time I saw what was happening I was already losing. Very little reaction time available. I thought maybe it would be easier on a desktop,…",{"comments":262,"answered":46,"key":263},13,[264,267,270],{"id":265,"text":266},"43357735","Yes if you don’t already know where the bubbles are gonna fall it’s very hard to get to them in time with a trackpad. Although I play with a trackpad myself and can beat most…",{"id":268,"text":269},"43356315","Yes desktop is extra challenging. On mobile you can spam slingshots with all 10 fingers but on desktop you’ve got to be leet fast.",{"id":271,"text":272},"43356497","It’s easier on desktop if you stick with slingshots and make your window fairly narrow",{"commenters":274,"max_depth":49,"maker_replies":262,"first_comment_mins":275,"lifespan_hours":276},56,27,141,[278,280,283,285,288,291,292,295,296,297,300,301,305,307,308,310,312,313,314,317,320,321,323,326,327,328,330,332,334,338,341,344,346,350,355,356,359,361,363,366,368,373,377,379,382,384,387,390,392,394,398,403,405,409,414,417,420,422,424,425,427,429,431,433,435,439,443,445,446,450,455,457,461,463,465],[155,41,46,279,156,41],"project\u002Fmixed\u002Fdesign",[281,41,46,282,132,41],"43356528","project\u002Fneutral\u002Fdesign",[108,41,49,284,109,41],"project\u002Fpositive\u002Fdesign",[286,41,46,282,287,41],"43356837","4b11b4",[289,41,46,282,290,41],"43358415","dothack",[231,41,46,282,232,41],[293,41,46,282,294,41],"43363547","phaedryx",[135,45,46,279,136,41],[204,45,46,282,205,41],[298,45,46,282,299,41],"43388801","jefflroberts",[131,40,46,279,132,41],[302,40,45,303,304,41],"43356665","project\u002Fcritical\u002Fdesign","t0k0l0sh",[306,40,45,303,132,41],"43356833",[258,40,45,303,259,41],[265,40,41,309,11,45],"maker\u002Fneutral\u002Fdesign",[311,40,46,282,259,41],"43358533",[162,46,45,303,163,41],[268,46,41,309,11,45],[315,46,46,316,163,41],"43356352","project\u002Fneutral\u002Fidea",[318,46,45,303,319,41],"43356401","dylan604",[271,46,41,309,11,45],[170,46,46,322,171,41],"project\u002Fmixed\u002Fexecution",[324,37,45,303,325,41],"43358782","putzdown",[246,49,46,279,247,41],[151,43,45,303,152,41],[89,32,49,329,90,41],"maker\u002Fpositive\u002Fexecution",[139,331,45,303,140,41],8,[196,331,45,333,197,41],"project\u002Fcritical\u002Fperformance",[335,18,45,336,337,41],"43357782","project\u002Fcritical\u002Fexecution","zakki",[339,18,45,336,340,41],"43358219","simbas",[342,18,41,343,11,45],"43358292","maker\u002Fneutral\u002Fexecution",[177,345,45,303,178,41],10,[347,38,46,348,349,41],"43358522","project\u002Fneutral\u002Fexecution","TZubiri",[351,352,41,353,354,41],"43357174",12,"other\u002Fneutral\u002Fnone","RomanPushkin",[185,262,46,282,186,41],[357,30,46,282,358,41],"43356543","neogodless",[360,30,41,309,11,45],"43356588",[93,362,49,329,94,41],15,[364,362,41,365,11,45],"43356134","maker\u002Fpositive\u002Fnone",[367,362,46,343,163,41],"43356345",[369,370,49,371,372,41],"43358179",16,"project\u002Fpositive\u002Fnone","redbell",[374,375,41,353,376,41],"43357600",17,"Minor49er",[166,378,45,336,167,41],18,[380,378,45,336,381,41],"43355958","colecut",[383,378,41,343,11,45],"43356018",[385,378,45,336,386,41],"43357234","PonyoSunshine",[388,31,46,279,389,41],"43359159","EspadaV9",[391,33,49,284,218,41],"43376592",[101,393,49,329,102,41],21,[395,396,46,282,397,41],"43360870",22,"sysashi",[399,400,46,401,402,41],"43356404",23,"project\u002Fneutral\u002Fnone","EstanislaoStan",[404,400,41,309,11,45],"43356495",[406,407,45,336,408,41],"43357010",24,"nightpool",[410,411,49,412,413,41],"43357671",25,"project\u002Fpositive\u002Fidea","daniel_iversen",[415,411,41,416,11,45],"43357718","maker\u002Fneutral\u002Fnone",[418,411,46,419,413,41],"43359165","project\u002Fneutral\u002Fpricing",[217,421,49,412,218,41],26,[423,421,41,416,11,45],"43412519",[97,275,49,329,98,41],[181,426,45,303,182,41],28,[224,428,46,316,225,41],29,[123,430,49,284,124,41],30,[432,430,41,309,11,45],"43357109",[143,434,45,333,144,41],31,[436,437,49,284,438,41],"43356192",32,"bosky101",[440,441,46,279,442,41],"43366160",33,"bhavik_dand",[239,444,46,348,240,41],34,[77,444,41,343,11,45],[447,448,45,303,449,41],"43361818",35,"anentropic",[451,452,49,453,454,41],"43357338",36,"project\u002Fpositive\u002Fperformance","jeffd",[116,456,49,371,117,41],37,[458,459,46,401,460,41],"43357832",38,"hyperfuturism",[112,462,49,371,113,41],39,[192,464,45,333,193,41],40,[466,464,41,467,11,45],"43358144","maker\u002Fneutral\u002Fperformance",[],[470,475,480,485,490,494],{"id":471,"name":472,"points":473,"category":474},"43358914","Nash",536,"productivity",{"id":476,"name":477,"points":478,"category":479},"43401855","BlueMigrate",524,"infrastructure",{"id":481,"name":482,"points":483,"category":484},"43373242","my-yt",319,"consumer_social",{"id":486,"name":487,"points":488,"category":489},"43404548","\"Git who\"",252,"dev_tools",{"id":491,"name":492,"points":493,"category":20},"43398081","MinesweeperPro",242,{"id":495,"name":496,"points":497,"category":489},"43377897","Cascii",238,false,"v2",{"id":501,"name":5,"line":6,"ai":498,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":502,"top":18,"kw":503,"maker":11,"domain":10,"tier":19,"attempts":41,"strip":504,"url":9,"mix":505,"praise":85,"objection":128,"sub":21},43355658,-0.06,[21,24,25,26],"3533331131131311013355111553335335331551",[30,31,32,33],1794036671188]