# My First Bullet Hell Arcade Game!

**URL:** <https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528>\
**Category:** Arcade\
**Tags:** game\
**Created:** [October 19, 2026, 1:00am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528 "2026-10-19T01:00:12Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Kikketer](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/kikketer/32/16551_2.png) [@Kikketer](https://forum.makecode.com/u/Kikketer)\
**Post date:** [October 21, 2026, 2:24am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/21 "2026-10-21T02:24:00Z")

</div>

Impressive game!  
For those looking at the code, beware of THIS boss! Scary one 😄

 ![image](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/c/b/cb1b950849ead27b69a1bd5aeaf154df53f516b0.png)

1. Why did you use inline sprites instead of naming them and have them part of the assets (which makes it nice an easy to edit and create).
2. I see there are 9 “HudSystem” namespaces, was there a reason for this (I don’t use namespaces much in my real job).
3. Did you have framerate issues between rendering the entire screen or using the sprite system that exists (with on overlap calls)? I realize it’s wildly more complex to render each frame as a single image, just wondering if you had any stats or roadblocks you hit when trying to do it as actual sprites.
4. You have angled sprites for the hero, but then I also see a rotate function (for rotating sprites similar to some of the extensions I’ve seen). Did you find that just rotating and setting to specific degrees resulted in some fragments or strange sprites?

---

<div class="post-metadata">

**Author:** ![VoxelMaster64](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/voxelmaster64/32/32075_2.png) [@VoxelMaster64](https://forum.makecode.com/u/VoxelMaster64)\
**Post date:** [October 21, 2026, 5:37pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/22 "2026-10-21T17:37:02Z")

</div>

Another issue is actually makecode’s compiler. but I would agree that it is slower. My 3D engine was running very slowly on my computer, but once I used a real js editor (an html + js file, so notepad is the editor and the compiler is chrome) I found out it went **110 times faster**. That’s huge!

---

<div class="post-metadata">

**Author:** ![kirbob](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/kirbob/32/34880_2.png) [@kirbob](https://forum.makecode.com/u/kirbob)\
**Post date:** [October 21, 2026, 5:37pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/23 "2026-10-21T17:37:06Z")

</div>

we need to bring this to nice reply or better

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 21, 2026, 5:38pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/24 "2026-10-21T17:38:59Z")

</div>

> [@Kikketer](#):
>
> 1. Why did you use inline sprites instead of naming them and have them part of the assets (which makes it nice an easy to edit and create).
> 2. I see there are 9 “HudSystem” namespaces, was there a reason for this (I don’t use namespaces much in my real job).
> 3. Did you have framerate issues between rendering the entire screen or using the sprite system that exists (with on overlap calls)? I realize it’s wildly more complex to render each frame as a single image, just wondering if you had any stats or roadblocks you hit when trying to do it as actual sprites.
> 4. You have angled sprites for the hero, but then I also see a rotate function (for rotating sprites similar to some of the extensions I’ve seen). Did you find that just rotating and setting to specific degrees resulted in some fragments or strange sprites?

Thanks for taking the time to look through the code and ask such detailed questions!

English isn’t my first language, so I translate my answers so I could respond more accurately. I wanted to make sure I understood your questions correctly and explained the technical details clearly.

Also, my development versions do contain comments, but I remove them from the public builds. I ran into an issue where MakeCode share links would sometimes get removed when comments were left in the code, and I still don’t know exactly what triggers it. Since many of my development comments are also written in another language, I usually strip them before publishing.

## 1. Why do you use inline sprites instead of Assets?

I back up and switch between different versions of the game very often. By keeping the images directly in the code, I only need to save the whole JavaScript / TypeScript text to keep both the code and the matching art together. This also avoids situations where the code and Assets come from different versions.

I have a separate document where I edit and manage the art assets, so I’m not actually drawing them directly inside the `img` text. Assets are definitely easier to edit in MakeCode, but keeping the images in the code works better for the way I manage versions.

 ![ScreenShot_2026-10-20_234443_485](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/5/1/51959d5d246305ae930e6bae9e390b09e752b232.png)

## 2. Why are there so many `HudSystem` namespaces?

They aren’t actually nine different HUD systems. It’s the same `HudSystem` split across multiple files.

I’ve been developing the whole project in modules. As the HUD got larger, I split different parts of it into separate files, such as the tutorial, life display, results screen, etc., but those files still use the same `namespace HudSystem`.

TypeScript merges namespaces with the same name, so to the rest of the game it’s still just one `HudSystem`, and I can keep calling everything through `HudSystem.xxx()`.

I mainly do this because it makes things easier to work on. If I want to change one part of the HUD, I can just go to that file instead of searching through one huge HUD file. The module screenshot is basically how the whole project is organized.

## 3. How different is the performance between drawing the bullets myself and using the normal Sprite system?

I made my own performance testing tool for this, and the difference is pretty noticeable.

**LEFT: Current rendering system:** 4,282 bullets, **45 FPS**

**RIGHT: Native Sprite system:** 1,531 bullets, **17 FPS**

- ![圖片](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/e/5/e57a835aa97fc24acdfc096a903cb164d34cb2ed.png)

The RUSH Boss creates a lot of bullets during each dash. With the old approach, those attacks could make the game almost completely freeze. After switching to the current system, it became much better.

I also changed the collision system, not just the rendering. Collision checks are **regional instead of running across the entire screen**.

So when there are a lot of bullets, they aren’t all constantly doing full collision checks. Only bullets that enter a certain area around the player or shield go through the more precise collision detection. Bullets that are off-screen or far away from the player don’t waste as much performance on collision checks.

The main ideas are:

- Only draw bullets that are actually on screen
- Draw large numbers of bullets together
- Only do precise collision checks for bullets near the player

This works especially well when there are a lot of off-screen bullets. In one stress test, there were more than **15,000 bullets** in total, and because most of them were outside the screen, the game could still run at around **25 FPS**.

 ![ScreenShot_2026-10-20_233407_946](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/9/d/9d594ea55d45804ddcac4f56a1dc6d1e03fb23dc.png)

## 4. Why does the player have pre-drawn angles if you also have a `rotate` function?

Because rotating small pixel-art sprites sometimes produces images that don’t look very good, even if those bad frames only show up occasionally.

I also found that rotation could sometimes affect the player’s trail effect in strange ways. While rotating, the trail could develop jagged edges.

So for the player, I pre-draw the important directions. I only hand-draw about **one quarter of them** , and the rest are created by mirroring or rotating those images with tools.

I still use the `rotate` function for other objects where the exact pixel shape isn’t as important.

Thanks for the questions! I didn’t expect someone to look through the code this closely, so it was really interesting to answer them.

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 21, 2026, 5:39pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/25 "2026-10-21T17:39:25Z")

</div>

> [@VoxelMaster64](#):
>
> sorry for basically ignoring this… WHOLY FAILED CAST ON NULL HOW DID YOU MAKE THAT, its gotta be a 18/10 stars. Also how experienced are you at coding? youd have to be good enough at js (technically ts) to use namespaces and such, and its surprising this is your first post _and_ one of the best games I’ve seen (maybe even the best!).

Thank you!! I honestly didn’t expect this much positive feedback on my first post.

My main field is actually art. I focus more on concept design, but personally I lean quite a bit toward technical art. I’m really interested in technology, so I’ve learned a lot of technical and programming-related things along the way. I guess I’m kind of half a technical artist. I’m still in college right now.

I normally wouldn’t make something on a platform like MakeCode, but one of my classes this semester required us to use it, so I decided to give it a try. This game eventually became my personal project because it grew into something that relies heavily on TS, while my group members only know how to read Blocks and aren’t comfortable reading code.

I’m really glad you liked the game!

---

<div class="post-metadata">

**Author:** ![TheGooberEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/thegooberearth/32/36693_2.png) [@TheGooberEarth](https://forum.makecode.com/u/TheGooberEarth)\
**Post date:** [October 21, 2026, 5:39pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/26 "2026-10-21T17:39:50Z")

</div>

@richard correct me if I’m wrong but isn’t scene.runinparallel a thing that allows you to use 2 cores

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 21, 2026, 5:40pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/27 "2026-10-21T17:40:51Z")

</div>

If anyone wants to try some of the more interesting combinations, I’d recommend using **Custom Boss mode with Random Bosses**. You can refresh it a few times until you get the combination you want.

 ![ScreenShot_2026-10-21_002921_032](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/3/9/396316840302261a2293ff181d4dace160891b30.png)

One combination I really recommend is **HYBRID DUCK + RUSH or HYBRID DUCK + WALL**. HYBRID DUCK is the only boss that can buff other bosses. When its protection orb ends up around the **RUSH/WALL** Boss, the visual effect looks really good, especially while RUSH is moving around at high speed.

 ![ScreenShot_2026-10-21_003947_232](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/1/9/19df2afd1b60d1fdce339ddb09b72b1067648acc.png)

 ![ScreenShot_2026-10-21_003519_926](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/e/f/ef099c89f80d7397cd9d32a4c3c3e454654e9a99.png)

 ![ScreenShot_2026-10-21_003750_256](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/3/b/3ba4aa9ce843713a4451aadbf3aad5eef2d2d564.png)

I’d also recommend trying the **Level 30 LASER Boss**. Its ultimate attack after it becomes enraged is probably one of my favorite parts of the whole game. It enters the enraged state below **1/3 HP** , and the powered-up ultimate after that is one of the attacks I’m happiest with.

 ![ScreenShot_2026-10-21_004237_615](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/8/4/844eba1a89be46c6c342e6696adaefbb5da67abf.png)

 ![ScreenShot_2026-10-21_004310_211](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/f/e/fee5eb5cd162e089e78d159c00fd9bc819e4734d.png)

In Multi-Boss mode, the selected difficulty is divided across the bosses. So if you choose **Level 30** with **2 bosses** , both bosses will run at about **Level 15** difficulty. With 3 bosses, it would be about Level 10 each.

If you just want to test things quickly, the cheat input is:

**↑ ↑ ↓ ↓ A B A B A**

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 21, 2026, 5:40pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/28 "2026-10-21T17:40:57Z")

</div>

That’s unfortunate.🥲 I haven’t performed any memory testing or optimization, as I’ve never encountered this issue myself. Making changes to address it, however, could be quite complex.

---

<div class="post-metadata">

**Author:** ![ChimbroDaPro](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/chimbrodapro/32/15852_2.png) [@ChimbroDaPro](https://forum.makecode.com/u/ChimbroDaPro)\
**Post date:** [October 21, 2026, 7:06pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/29 "2026-10-21T19:06:35Z")

</div>

How in the world did you make this?! This is crazy, like, holy moly, the bosses are insane, I got jumped by the first boss since im bad lol but the polish is on another level

> [@WoofWoof](#):
>
> I encourage you to try your hand at the [Critter Game Jam](https://forum.makecode.com/t/announcement-fall-2026-game-jam-now-open-critter-jam/46244)!

HAHA, NO??? Do you want us all to lose???

Jokes aside, you should totally give the critter jam a shot, there’s still time and you could make something crazy!

---

<div class="post-metadata">

**Author:** ![WoofWoof](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/woofwoof/32/32523_2.png) [@WoofWoof](https://forum.makecode.com/u/WoofWoof)\
**Post date:** [October 21, 2026, 7:06pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/30 "2026-10-21T19:06:54Z")

</div>

Nope it just switches between the two when one of them either stops or is using the pause() function.

@Elko-Utopia consider using the scene.createRenderable function instead of drawing on a sprite. I don’t know how much of a performance boost it will really give, but it will be better for hardware as it isn’t storing an additional copy of the image. Basically it’s the function that sprites use to render to the screen, but sprites carry a bunch of extra data that you don’t need here.

Also consider using multiple files when you code, because scrolling through this… 17,403 line file to edit things does not sound very fun!

 ![Screenshot 2026-10-21 at 2.01.06 PM](https://us1.discourse-cdn.com/flex020/uploads/makecode/original/3X/d/5/d535ad101e823750e5ac38289bd3172bb3e1ee7d.png)  
I’m wondering what previous programming experience you have, because you’re clearly taking full advantage of game loops and functions, definitely more than I do, but at the same time nothing is commented and nothing is spaced so that it’s easier to read. Do you always program like that, or did you strip comments and format before sharing?

---

<div class="post-metadata">

**Author:** ![Kikketer](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/kikketer/32/16551_2.png) [@Kikketer](https://forum.makecode.com/u/Kikketer)\
**Post date:** [October 21, 2026, 7:07pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/31 "2026-10-21T19:07:08Z")

</div>

Thanks for the answers! Yes I assumed you had a dev version since this “production” version doesn’t have comments and is one massive file.

I love the idea of your development environment. The VSCode stuff works well enough but I’ve run into issues with assets as well.

Knowing that you do have several files and a development environment allows me to see through the code as “for the human this is actually readable”. Now I have ideas on making a dev environment myself that detached from the VSCode version.

---

<div class="post-metadata">

**Author:** ![Astro](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/astro/32/37187_2.png) [@Astro](https://forum.makecode.com/u/Astro)\
**Post date:** [October 21, 2026, 7:07pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/32 "2026-10-21T19:07:12Z")

</div>

Ok so I kind of wanted to lurk on this post but the art, its soooooooo good, I agree with @TheGooberEarth, we NEED this on the homepage

---

<div class="post-metadata">

**Author:** ![WoofWoof](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/woofwoof/32/32523_2.png) [@WoofWoof](https://forum.makecode.com/u/WoofWoof)\
**Post date:** [October 21, 2026, 11:32pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/33 "2026-10-21T23:32:26Z")

</div>

Looks like this answered some of the questions I just asked! Thanks!

Projects get removed if there is bad language in the project, such as slurs or words that aren’t kid friendly. That’s probably why your project was getting removed when it had comments. The filter for bad words could also be making mistakes.

I want to ask if you would like to collaborate on your next roguelike game, because I have been thinking of making something like this myself, or maybe more like [Disfigure on Steam](https://store.steampowered.com/app/2083160/Disfigure/). Unfortunately because it takes so much time to send messages here, collaborations are very difficult and usually fail. There is also the language barrier, so I don’t think it would work out, but goodluck on whatever you make next!

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 21, 2026, 11:33pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/34 "2026-10-21T23:33:23Z")

</div>

I removed all the comments because I think the text in my comments might have triggered Microsoft’s moderation system, causing my share link to stop working. So I had to delete all of them. Also, my comments weren’t in English, since English isn’t my first language.

I developed the project in VS Code and split the code into many separate modules. That’s also why the assets section of my project is empty.

As for rendering without sprites, the performance improvement is very noticeable, especially when there are a lot of bullets off-screen.

For more details about how I developed the game and handled the rendering, you can check out this reply I posted. It includes a lot of screenshots and more detailed explanations!

> [@My First Bullet Hell Arcade Game!](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/24):
>
> Thanks for taking the time to look through the code and ask such detailed questions! English isn’t my first language, so I translate my answers so I could respond more accurately. I wanted to make sure I understood your questions correctly and explained the technical details clearly. Also, my development versions do contain comments, but I remove them from the public builds. I ran into an issue where MakeCode share links would sometimes get removed when comments were left in the code, and I s…

---

<div class="post-metadata">

**Author:** ![TheGooberEarth](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/thegooberearth/32/36693_2.png) [@TheGooberEarth](https://forum.makecode.com/u/TheGooberEarth)\
**Post date:** [October 21, 2026, 11:33pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/35 "2026-10-21T23:33:32Z")

</div>

I’m so happy I got 2 pings today

---

<div class="post-metadata">

**Author:** ![kirbob](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/kirbob/32/34880_2.png) [@kirbob](https://forum.makecode.com/u/kirbob)\
**Post date:** [October 21, 2026, 11:51pm UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/36 "2026-10-21T23:51:08Z")

</div>

@richard what does it take to add this to homepage

---

<div class="post-metadata">

**Author:** ![Sword\_Studios](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/sword_studios/32/36911_2.png) [@Sword\_Studios](https://forum.makecode.com/u/Sword_Studios)\
**Post date:** [October 23, 2026, 2:38am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/37 "2026-10-23T02:38:41Z")

</div>

GOOD IDEA! Tho I do thing it changes the screen size so maybe no

---

<div class="post-metadata">

**Author:** ![Elko-Utopia](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/elko-utopia/32/36382_2.png) [@Elko-Utopia](https://forum.makecode.com/u/Elko-Utopia)\
**Post date:** [October 23, 2026, 2:49am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/38 "2026-10-23T02:49:24Z")

</div>

# Boss Difficulty Balance Update V1.0.17

This update nerfs DANMAKU and strengthens the enraged abilities of WALL and RUSH.

- **DANMAKU:** Reduced the bullet density and rotation speed of its ultimate attack, and adjusted how frequently it uses its ultimate attack when enraged.

- **WALL:** Reduced HP to 90%. When enraged (HP \< 30%), its ultimate attack changes speed and reverses direction.

- **RUSH:** When enraged, its ultimate attack re-targets the player and changes its charge direction each time it goes off-screen.

> **[Boss Rush V1.0.17](https://arcade.makecode.com/S40474-18922-55717-92070)**
>
> Made with ❤️ in Microsoft MakeCode Arcade.

---

<div class="post-metadata">

**Author:** ![kirbob](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/kirbob/32/34880_2.png) [@kirbob](https://forum.makecode.com/u/kirbob)\
**Post date:** [October 23, 2026, 2:55am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/39 "2026-10-23T02:55:54Z")

</div>

@Elko-Utopia how did u do the special effects?

---

<div class="post-metadata">

**Author:** ![SplitSprite](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.makecode.com/splitsprite/32/36760_2.png) [@SplitSprite](https://forum.makecode.com/u/SplitSprite)\
**Post date:** [October 23, 2026, 3:09am UTC](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528/40 "2026-10-23T03:09:45Z")

</div>

Id reccomend adding a special song for the idiots who try level 30 all 5 bosses (hearing tons of deltarune music id reccomend the songthat plays when you fight the titan in deltarune)

[Previous page](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528.md?page=1)

[Next page](https://forum.makecode.com/t/my-first-bullet-hell-arcade-game/46528.md?page=3)
