11 March 2016 - Forum Rules

Main Menu

Project QC (Current: 44 Balloons)

Started by Quick Curly, August 08, 2015, 12:00:32 AM

Previous topic - Next topic

Quick Curly

My most recent ROM hacking project was making a level hack of the NES port of Balloon Fight. To my knowledge, there have only been graphical hacks, music/sound hacks, and one ASM hack of this game so far. Some notable ones include the hacks already on this site, as well as the following:
However, today, I present to you the newest Balloon Fight hack, and the first ever level hack: Cosmic Balloon Assault!

Here's a general list of everything that has been changed in this hack:

  • 12 brand new Phases
  • New title screen
  • Starting lives are now 6 instead of 2
  • Bonus Phases have been modified: balloon rising speeds, points per balloon, and super bonus points rewards
  • Some surprise graphical appearances from other games
  • NROM-128 to NROM-256 conversion/ROM expansion
  • Intro music plays at the beginning of every Phase instead of the first of every 3 Phases
  • Phase designs are revisited starting from Phase 1 instead of Phase 4
  • Custom palette code: each Phase and Bonus Phase has its own unique palette; the original game had different palettes for every 3 Phases
To go along with this ROM hacking project, I also wanted to prepare and release documentation detailing the specifics of hacking the levels, among other inner workings of the game's ROM. The most recent version of this collection of documents for Balloon Fight Level Hacking is found here on

So, here's where I turn to the community for its multiple perspectives, learning abilities, and understanding levels. I am hoping that such documentation is useful, as well as both comprehensive and comprehensible for those interested and committed to pursuing a Balloon Fight hacking project, or potentially even the creation of a game specific utility.

In its initially released state, basically the main information is there so far, but I didn't want to take wording from other sources, so some things might not have been explained as well as they could have been and have already been elsewhere. There might be aspects explored which go beyond just a straight forward Balloon Fight document that seem out of place for those simply seeking out specific Balloon Fight ROM related data and information, but for people who are more newcomers who have little to no previous knowledge and experience with NES hacking in general, it's been recommended to me that more extensive documentation and explanation be included and established.

Information documented and included in the initial v1.0 includes, but is not limited to:

  • Level header format
  • Level format
  • Platform detection
  • Graphics
  • Enemy data
  • Clouds
  • Palettes
  • RAM and ROM address definitions
  • Step-by-step PRG-ROM expansion tutorial
  • Name table and attribute table visualizations
  • Decimal, hexadecimal, and binary conversions
  • Much more...
Other potential areas of consideration (that are possible, but not guaranteed) include:

  • More thorough exploration of specific data and code in the original ROM
  • More descriptive, step-by-step tutorials for usage of recommended utilities
  • Sound and music data
  • Provided custom code
  • Open to other suggestions...
I already realized shortly after submitting the documentation that I made a poorly thought out comparison of the Bonus Phase music to the Wrecking Crew golden hammer music, which I only remembered afterwards is not actually the same as I had initially misremembered, as well as mismatching labels for section 2, so I acknowledge that there are already necessary changes to implement. I have already made the adjustments offline, but before submitting a new version, I would like to include any other potential changes that I can gather first.

This is probably the first time that I've ever really bothered to consider updating projects after they have been submitted (though it certainly shouldn't have been the first), but in the case of a groundbreaking approach to hacking the levels in Balloon Fight for the NES, I would certainly like to strive for completion and accuracy that I cannot achieve on my own and with only my own perception considered. I sincerely hope that, together, we can all collaborate to make this project a community effort. :woot!:

For any and every contribution to this documentation made possible by you, the community, you will all be properly acknowledged in the "Acknowledgements, Credits & Thank You Section" of the main data document.

In the meantime, I hope that you can have some fun with my new Balloon Fight hack, Cosmic Balloon Assault, as well!

Thank you in advance for your time and consideration, and have a super special awesome day. :)


Pretty cool. Have you thought about doing something with the fish to give it quicker detection, or like it as is?

Quick Curly

Greetings, Jeville! Thank you for your reply, compliment, and interest. :)

I was curious about the fish while I was working on my hack, too. I had discovered the graphical tiles used to display the fish's jumping animation, but that was it.
QuoteFish Animation Frames

0x236A-0x2370 (0x7)
00 7B FC FC 7C FC FC

0x2371-0x2377 (0x7)
00 7D 7E FC 7F 80 FC

0x2378-0x237E (0x7)
00 81 82 83 84 85 86

0x237F-0x2385 (0x7)
00 87 88 FC 89 8A FC

0x2386-0x238C (0x7)
00 8B 8C FC 8D 8E FC

0x238D-0x2393 (0x7)
00 8F 90 FC FC FC FC
However, tonight, I took a different approach and happened to discover that $0099 and $00A2 in RAM is related to the fish.
Quote$0091 - Player 1's horizontal position (Starting: 20)
$0092 - Player 2's horizontal position (Starting: D0)
$0093-$0098 - Enemies' horizontal positions
$009A - Player 1's vertical position (Starting: B8)
$009B - Player 2's vertical position (Starting: B8)
$009C-$00A1 - Enemies' vertical positions
$C61F:B5 9A     LDA $9A,X @ $00A1 = #$00  ; Vertical position
$C621:C9 B4     CMP #$B4
$C623:90 06     BCC $C62B
$C625:B5 91     LDA $91,X @ $0098 = #$00  ; Horizontal position
$C627:C5 99     CMP $99 = #$58
$C629:F0 04     BEQ $C62F
$C62B:CA        DEX
$C62C:10 ED     BPL $C61B
$C62E:60        RTS

So, $0099 is the horizontal position of the fish, and $00A2 is the vertical position of the fish.
There are other portions of code which further determine the fish's behavior. I have yet to go through them all. The compares appear to be for determining the range within which the fish can appear. For example, modifying 0x0664, originally 40, to 80 prevented the fish from appearing within the left-half of the open area above the water, where it would normally still jump up. Similarly, modifying 0x0660, originally B1, to 80 prevented the fish from appearing within the right-half of the open area above the water, until you passed that horizontal position in either case.
However, this discovery led me to figuring out how to disable/remove the fish for someone who would want to.

In the original game:

0x0637-0x063A (0x4) - C5 99 F0 04

$C627:C5 99     CMP $99 = #$58
$C629:F0 04     BEQ $C62F

0x065B-0x065E (0x4) - E6 99 A5 99

$C64B:E6 99     INC $99 = #$58
$C64D:A5 99     LDA $99 = #$58

0x0663-0x0666 (0x4) - A9 40 85 99

$C653:A9 40     LDA #$40
$C655:85 99     STA $99 = #$58

To disable/remove the fish from appearing completely:
0x0637-0x063A (0x4) - EA EA EA EA
0x065B-0x065E (0x4) - EA EA EA EA
0x0663-0x0666 (0x4) - EA EA EA EA

This would have been handy for a level that I had originally designed that actually had land all across the bottom, but the fish would still jump up if the player was standing within the middle region that was originally water, but was now a platform all the way across. With custom code to check for the active level, the fish could potentially appear in some levels, and not in others. The Bonus Phase accomplishes this by seemingly not even referring to $0099, probably as a result of detecting whether it's a regular Phase or a Bonus Phase from $00C8 (though this is just an assumption at this point and not yet confirmed).

Disabling the fish is pretty much the opposite of what you suggested as a consideration, but it's still something. I believe the answer is right in front of us, like the code that changes the fish's horizontal and vertical positions while it's moving, if it could be changed to move the fish faster without having unintended side-effects.

I also just realized while working on this post that I mixed up defining and referencing horizontal and vertical positions in the documentation. Wow. I missed more than I thought during the reviewing process. :-\

I'll probably look more into this tomorrow. It's kind of late over here to continue right now.

For anything that anyone else can potentially help with, it is always very much appreciated.
I suppose I'll need to review the whole document again after catching the horizontal/vertical mix-up, and submit an update sooner rather than later. I apologize for any inconvenience this error has already caused.


I'll look at it. Though, it is a bit long...might take me a while. -- blog/tutorial on programming for the NES


Suggestion for a hack:

I'm sure you're aware that Balloon Fight doesn't have a lot of levels -- and it quickly resorts to recycling levels once you get through them all.  You mentioned you increased the number of levels -- but have you considered randomly generating them instead?

For a game like Balloon Fight it would be perfect.  Levels basically consist of a mish-mash of a small number of objects and random starting positions for enemies.  It would take a significant chunk of PRG space to do it, but if you're expanding the ROM to add levels, you should have a bunch available.

Quick Curly

dougeff: Thank you in advance for your efforts, and thank you for your reply and interest. :)
It does seem to be pretty involved, as there are multiple checks for both positions of the fish and its behavior.
I did have some more progress so far. I noticed that there were additional compares in the code that matched values mentioned in my previous post.

0x0664 - 40
0x06E9 - 40

Changing both from 40 to 00 causes the fish to appear on the left side where the first player spawns, even while he has invincibility!

0x0660 - B1
0x06ED - B1

Changing both from B1 to FF causes the fish to appear on the right side where the second player spawns!

So, those variables together determine the possible values and the possible horizontal range within which the fish can attack.

I see the code from $C65D-$C6B7 (0x066D-0x06C7) deals with $00A2 in RAM for the vertical position of the fish, and is pretty involved as well, so I'm still going through it, making sense of all the compares and whatnot. I just couldn't wait to post, since it's a brand new day, and I'm already having different thoughts that I wasn't last night. :P

I did have one thought. The "INC" and "DEC" opcodes that handle checking through all the ranges for both positions to determine when the fish should appear are probably what could be focused on changing in order to possibly make the fish's attack pattern and speed more aggressive. Originally, the fish could potentially appear immediately when the player darts towards the water after spawning, or it might not appear at all. It all depends on the timing of when the player crosses the water and potentially matches up with the continuously changing coordinate of the fish's horizontal position. What if, each time the code runs, it somehow checks every possible position for a player or enemy within devouring range, as opposed to the fish only being able to appear if both variables of the player and fish end up matching up? It's kind of difficult to explain exactly what I mean, but here's the code for $0099 to help visualize it better:
$C64B:E6 99     INC $99 = #$40
$C64D:A5 99     LDA $99 = #$40
$C64F:C9 B1     CMP #$B1
$C651:90 04     BCC $C657
$C653:A9 40     LDA #$40
$C655:85 99     STA $99 = #$45
$C657:60        RTS

The possible value of $0099 varies between 40 and B1. It continuously increases, and once it reaches B1, it goes back to 40 again.
The player could potentially fly across at a rate so that their horizontal positions never match up.
To make the fish more aggressive, the code could somehow make the position of the fish change to match up with a player's or enemy's position as soon as they're within the range in general. It's just an idea for now, and there might be potentially unwanted side-effects to consider depending on how it could be implemented, but it's fun to brainstorm. Plus, similar to the purpose of the "Hack ideas" thread, mentioning it out loud will probably help the direction of someone else to see it through before I can.

Disch: Hello again. Thank you for your reply and interest. :)
I know that given your knowledge and years of experience, if you were to mess around with Balloon Fight, we'd get some pretty crazy stuff. :P
I didn't consider randomly generating the levels, but that's definitely an awesome idea!
Once a player is familiar with the levels, the only real surprise with playing them would be not knowing the order that they would appear. I found that $00CE and $00CF in RAM are unused by the original game, so one could potentially be used as a random generator of sorts. There would probably need to be a way for the game to keep track of how the levels are selected so that there wouldn't necessarily be the possibility of the same level appearing over and over again before the others could.
I remember that DahrkDaiz's Ms. Pac-Man hack, Pac-Man III, allowed the levels to be played randomly.

These are the variables (in hex) related to determining how many levels there are, and where the levels begin being reused from:
Quote0x336C - 10 - Number of unique level header pointers
0x3370 - 04 - Level header pointer to begin reusing old Phase designs from
Do you by chance have any recommendations of how to implement a random generator most effectively? I'm interested to hear your own personal thoughts, if you wish to share them. :)

I found this NesDev topic about implementing random number generation, and this post:
Quote from: KasumiAnd it.

and #%00000001

Will make it 0 or 1. You can then beq or bne depending on the condition.

and #%00001111

will make it a number between 0 and 15.
Is pretty much what I was thinking.

What would also probably need to be considered is how frequently a Bonus Phase could potentially appear. 3 regular Phases with enemies, and then a Bonus Phase. If #$03, #$07, #$0B, or #$0F, maybe use the previous level header pointers instead so that it's a regular Phase, as long as it wasn't already used.
Or, determine the entire random level pattern before any levels are even played, when the game first turns on, and store the order in RAM for easy reference.
The issue is finding enough unused RAM addresses to do that, and there's probably an easier way.


I don't mean shuffle the order of the levels -- I mean actually generate the levels on the fly.  So there would be no pre-designed levels in the ROM.

Basically you'd wipe the map clean and then start placing platforms stuff randomly on the map in order to generate the layout.  It wouldn't have to be COMPLETELY random, like you could designate patterns and stuff -- but it would ultimately use an RNG to construct it, resulting in slightly different levels each time

Quick Curly

Oh! I'm sorry for the misunderstanding on my part. I understand now. That would make for an awesome hack idea, too. :)

Following my previous post, I had another thought, and you are probably the individual to confirm if it would be helpful for either of the randomizing ideas, as well as just for documenting in general, and that concerns the stack. Most of the $0100-$01FF page is not even used in Balloon Fight, so that could make for a decent sized chunk of RAM available for more technical stuff, if ever needed. With consideration of the risks of overflow and underflow, are there any other factors to consider? Thank you again for your time and interest so far. :)

I haven't really done overly extensive ASM hacking projects yet, just minor stuff, so I might not even be the best individual to trust with such an idea, but I'm very passionate about all the possibilities with bringing new life to our favourite classic games, and I'm open to trying more technical approaches and trying to get them to work. My interest in Balloon Fight as a whole and how the levels were seemingly never changed yet was what motivated me to try to help provide direction for other hackers to be able to understand how to manage such a task themselves. :)

I have some ideas, and it'll probably take some time to test different possible implementations out. I'll post about anything that I come up with. I'll probably update the documentation with the fixes and the fish related data that we've found out so far first so that the errors don't keep spreading for however many more people download the file before too long.
I appreciate your time and thoughts too, Disch. This brainstorming is fun. Plus, I've read your posts throughout the years as I've continuously been learning over time, and your explanations and perspectives are always informative for me, and get the mind thinking. Heh. I never had the opportunity to talk ROM hacking with you for all that time, but I feel honoured that you saw something that I worked on and offered your suggestions and advice. Thank you. :)


I think this video is a good watch. Iwata (RIP) programmed the game and he explained the fish and balloon trip, albeit nothing that may help with coding. It's heartwarming and I just thought a passionate person might enjoy it.

Speaking of balloon trip, there's the idea of having it scroll right instead of left. If RNG-construct phases become a reality, this mode can benefit from it too. It helps that you don't need to worry about the positioning of AI opponents in this mode.


Quote from: Quick Curly on August 09, 2015, 03:47:52 PM
Following my previous post, I had another thought, and you are probably the individual to confirm if it would be helpful for either of the randomizing ideas, as well as just for documenting in general, and that concerns the stack. Most of the $0100-$01FF page is not even used in Balloon Fight, so that could make for a decent sized chunk of RAM available for more technical stuff, if ever needed. With consideration of the risks of overflow and underflow, are there any other factors to consider? Thank you again for your time and interest so far. :)

The low end of the stack ($0100-017F) is probably safe... but I wouldn't feel comfortable going any higher than that.  You probably could if you really wanted to push it -- as I doubt Balloon Fight uses much of the stack... but ehhhh... it would make me uncomfortable.

Generally I try to avoid that entire page if I can.

QuoteI haven't really done overly extensive ASM hacking projects yet, just minor stuff, so I might not even be the best individual to trust with such an idea,

Well I was just throwing it out there as an idea.  In the end, make whatever hack you want to make.  You don't have to change your plans for me or anything.   :thumbsup:


Another idea...for Balloon Fight, or for any NES game...instead of a random level generator... Would be to have an excitebike style level editor. Allow the user to create the level. -- blog/tutorial on programming for the NES


That's insane, I mean it would be great but is hard as hell to make.
Join my nes forum

Quick Curly

I apologize for my absence with this thread. Since completing Cosmic Balloon Assault and the last update to the documentation, I've pretty much been taking a break from Balloon Fight in general. Like most other people, I like to explore other projects on and off, too. Lately, I've mostly been able to explore multiple other games from trying to assist other people with their own projects. :)
For myself, I've taken an interest in Kickle Cubicle, another game that I grew up with, and was only able to play when we went over to my grandparents' house a town over. I'm not sure what will come of it, but I've found some things out already. Plus there was always that information on Data Crystal from years ago that hasn't really been used for anything major yet. So, why not? :P

Jeville: Thank you very much for the link. Another cool idea, too. :)

Disch: Thank you for confirming the information, and for your support. :)
I might make another Balloon Fight hack in the future, but I wasn't really planning on it right now, honestly. It was fun figuring things out and being able to document it, as well as finally producing a level hack of the NES port. From watching 4 videos of the hack already up on YouTube, it seems that people have enjoyed playing it together and experiencing new levels. :)

dougeff: True, that would indeed be a neat addition to see, even if just for the sake of pulling it off. Games like Excitebike, Lode Runner, Nuts & Milk, and Wrecking Crew with in-game level editors were always fun to play growing up with being able to create our own custom levels before discovering ROM hacking as a whole. However, with that in mind, I would be afraid that implementing such a feature would have no real benefit overall, considering that it would be better in the long term for one to just make a ROM hack with their intended level designs and other personal touches, and have them last beyond the game being turned off.
However, even with all that said, it could still be fun and interesting to look at how other games have pulled this off in order to carry it over to other games! :)
With Balloon Fight specifically, a factor that would require consideration and close attention would be how the object/platform detections and graphics are handled separately. Similarly, if an actual level editor utility was to be made. It might be a potential project in implementing some sort of TSA system in which the detections and graphics could be handled together.

DANGER X: Thank you for your post and interest. :)
Please let me know what specifically you feel that I can help you with.
I realize that I might not have been fully clear in my initial post when I started this thread, but my whole intention for it was to hopefully receive some direction with the documentation so that others with more experience dealing with the technical terminology and whatnot could perhaps provide alternative ways to word some things that I maybe just made more confusing. Each individual understands things differently, and I was hoping to account for all perspectives.
Provided I have the time, hopefully. Like dougeff mentioned earlier, the main document is definitely very long, but there's a lot of information that I try to cover! :woot!:
If you wish to pursue a Balloon Fight hacking project, that would be super special awesome! You can post your progress here, and we can work through the whole process together, one byte at a time. :angel:

Quick Curly

So, it's been a while since this topic has been posted in, and it hasn't really been used for its intended purpose of Balloon Fight level hacking help and documentation. Therefore, I've been considering just changing this over to a general projects thread.

However, before that, there's currently a Balloon Fight level hack that needs to be finished. Long story short, it was started with the intention of helping members of Board 2 to become familiar with one another and get their hacking hands dirty, since the idea was being thrown around that they wanted to work on a collaborative hack. However, a game to hack was never even decided on, and when I tried to get this project going, it was basically me doing all of the physical hacking work, which means that the purpose of getting people to actually hack was not fulfilled. There were levels contributed by other people, however, and I inserted them into the ROM (except for Phase 04, which was actually inserted by Mattrizzle).

There are currently 8 of 12 Phases completed. Depending on if I manage to disable the Bonus Phases at the request of someone who emailed me about Cosmic Balloon Assault, there could potentially be 16 Phases, depending on how many level designs other people would still like to offer.

I decided to post over here to ask if anyone else would like to earn an easy ROM hacking credit to their name and design a level (or more) to be inserted into this hack, and/or make any other potential contribution, like fixing up the title screen, coming up with an idea for custom graphics, thinking of a better hack name and/or team name, etc.

The following grid template is intended to help simplify the process of drawing out a level, and inserting it into the ROM:

Here are a couple examples of completed grid templates for level designs, which were used to help insert the levels into the ROM:
Phase 01 (Quick Curly)
Phase 04 (Zieldak)

General guidelines:

  • Easiest way to fill the grid is to use a paint bucket tool. Please feel free to include text and information as needed.
  • This is intended to be a quick, general project. Level designs are intended to fit the original Balloon Fight game's limitations. No additional custom features are planned.
  • The top 4 rows ($2000-$207F) are where the scores and lives are displayed, so nothing else is to be drawn there.
  • The bottom 2 rows ($23C0-$23FF) are for palette attributes, if you know what you want them to be. You don't have to put anything there either, if you don't feel like it.
  • Clouds are represented by 4x4 squares. With the first row and first column both considered even, the top-left corner of the cloud must be placed under an even row and an even column (please refer to examples for visual guidance).
  • Enemies are represented by 2x2 squares. You can place any number from 1 to 6 enemies in each level. Please identify each enemy as either 4 (slowest), 5 (medium speed), or 6 (fastest).
  • If you want to suggest custom graphical ideas, as long as there is still room left to fit the custom graphics into the CHR-ROM bank, then please include them in either your image and/or your post in this topic.
  • If you could benefit from any additional information and/or guidance, please feel free to ask.
Contributors so far:

  • Mattrizzle
  • MegaEliteGamers
  • Quick Curly
  • Static S
  • Vicious Poetry
  • Zieldak
Title Screen Work-In-Progress:

Phase 01 (Quick Curly):

Phase 02 (MegaEliteGamers):

Phase 03 (Quick Curly):

Phase 04 (Zieldak; inserted by Mattrizzle):

Phase 05 (Static S):

Phase 06 (Vicious Poetry):

Phase 07 (Quick Curly):

Phase 08 (Quick Curly):

Thank you in advance for anyone who would like to contribute to help finish up this hack. Again, you only have to take a few minutes to save a copy of the grid template, and edit it accordingly to represent a potential level design, and I'll insert it into the ROM for you. You will receive full credit for each contribution. :)
Have a great and safe week. Hopefully speak with you all again soon. :)


I finally decided to help a bit.
I designed 2 levels and upload some sprites that might help the others.
Download link:

I decided to play this hack a little.

Join my nes forum

Quick Curly

Thank you for your interest and designing a couple levels, DANGER X. Unfortunately, I had already finished the hack right before you came up with your levels, but they can still be used for a potential future Balloon Fight project. :) Either you could continue working on your own Balloon Fight hack (for which, my previous offer of providing assistance and guidance for anything that you could need help with is still available), or in the case that I look into yet another Balloon Fight project in the future, your levels would be the first contributions for it, if you would still like them to be. I do greatly appreciate your interest and contributions, so thank you very much again. Your GIF is awesome, too. :)

As for the hack itself, it was indeed completed, submitted, and approved on this morning.
Presenting the second Balloon Fight level hack: Board Fight!

In this level hack, there are 16 Phases (compared to the original count of 12) and no Bonus Phases. Players start out with 20 extra lives instead of 2. There is also an additional patch to disable the Bonus Phases for the original Balloon Fight game for those who would enjoy such an option. The patches are in BPS format.

Thank you very much for the contributions of level designs to this hack. It was intended to be a collaboration that would help Board 2 members gain experience to carry over to a more involved collaborative project. Well, at least it was somewhat of a collaboration on some level. :P

If there is no other interest in specific Balloon Fight hacking help, I'm planning to change this over to a main personal projects update thread once I have made enough progress on something else that I could be working on.

My next planned project is a Kickle Cubicle level hack, which will hopefully also come with some level hacking documentation. Although, this Board 2 post pretty much contains the main level format related information that such documentation would cover, using the original design for Fruit Land L as an example.

Fruit Land L

Here is the level data (original, compressed data at ROM offset 0x151AB):

00 00 00 03 03 03 03 03 44 00 00 00 00 00 00 00
00 00 03 01 01 01 01 01 03 44 00 00 00 00 00 00
00 03 01 01 01 01 01 01 01 03 44 00 00 00 00 00
03 01 07 07 01 01 01 07 07 01 03 44 00 00 00 00
03 01 01 01 01 01 01 01 01 01 03 45 00 00 00 00
03 01 01 2C 01 01 01 2C 01 01 03 45 03 2C 03 44
03 01 01 01 01 01 01 01 01 01 03 45 02 02 02 45
03 01 01 01 01 03 01 01 01 01 03 45 02 02 02 45
42 03 01 01 01 01 01 01 01 03 41 46 02 02 02 45
00 42 03 03 01 01 01 03 03 41 46 00 42 43 43 46
02 02 02 02 10 18 15 02 02 02 02 02 10 18 15 44
42 43 43 43 11 1C 16 41 43 43 43 43 11 1C 16 45
00 00 00 00 12 14 17 45 00 00 00 00 12 14 17 45
00 00 00 00 42 43 43 46 00 00 00 00 42 43 43 46

Valid meta-tile values:
00 - Water
01 - Land
02 - Slippery Ice (Noggles can't walk on)
03 - Rock
04 - Water Hole
05 - Power Rock
07 - Ice Pop (3200 points)
08 - Red Cannon (North)
09 - Red Cannon (Northeast)
0A - Red Cannon (East)
0B - Red Cannon (Southeast)
0C - Red Cannon (South)
0D - Red Cannon (Southwest)
0E - Red Cannon (West)
0F - Red Cannon (Northwest)
10 - Hammer Slippery Ice (Top-Left Corner)
11 - Hammer Slippery Ice (Left Edge)
12 - Hammer Slippery Ice (Bottom-Left Corner)
13 - Hammer Slippery Ice (Top Edge)
14 - Hammer Slippery Ice (Bottom Edge)
15 - Hammer Slippery Ice (Top-Right Corner)
16 - Hammer Slippery Ice (Right Edge)
17 - Hammer Slippery Ice (Bottom-Right Corner)
18 - Hammer (Top)
19 - Hammer (Right)
1A - Hammer (Bottom)
1B - Hammer (Left)
1C - Hammer Bottom (With Hammer (Top))
1D - Hammer Bottom (With Hammer (Right))
1E - Hammer Bottom (With Hammer (Bottom))
1F - Hammer Bottom (With Hammer (Left))
20 - Ice Cube (Leaves weird red tiled land; must set block underneath through sprite/enemy data)
21 - Ice Pillar (Can remove)
22 - Ice Pillar (Can't remove)
25 - 1-UP (Can place multiple, but only one will show in a level)
28 - Breaker (Points up)
29 - Breaker (Points right)
2A - Breaker (Points down)
2B - Breaker (Points left)
2C - Base Rock
30 - Spring (Bounces off left side; right side is rock)
31 - Spring (Bounces off right side; left side is rock)
32 - Spring (Bounces off top side; bottom side is rock)
33 - Spring (Bounces off bottom side; top side is rock)
41 - Bottom-Right Water "L"
42 - Bottom-Left Water
43 - Bottom Water
44 - Water Top Right Side
45 - Full Water Right Side
46 - Bottom-Right Water Corner

Sprite/enemy data: 0x12222

0B C0 0A 05 00 62 53 00 00 65 53 00 00 68 57 00 00 FF 53 00 03
FF 57 00 03 EF 1E 08 0D 11 02 FF 5D 00 02 EF FF 7C 7D 7E 01 A9

0B C0 0A 05 - Noggles enemy data.
00 - Noggles identifier.

62 - Noggles #1 starting position (X: 20, Y: 60).
53 - Noggles #1 Base Rock position (X: 30, Y: 50).
00 - Noggles #1 spawning timer after start.
00 - Noggles #1 direction (up).

65 - Noggles #2 starting position (X: 50, Y: 60).
53 - Noggles #2 Base Rock position (X: 30, Y: 50).
00 - Noggles #2 spawning timer after start.
00 - Noggles #2 direction (up).

68 - Noggles #3 starting position (X: 80, Y: 60).
57 - Noggles #3 Base Rock position (X: 70, Y: 50).
00 - Noggles #3 spawning timer after start.
00 - Noggles #3 direction (up).

FF - Noggles #4 - No starting position.
53 - Noggles #4 Base Rock position (X: 30, Y: 50).
00 - Noggles #4 spawning timer after start.
03 - Noggles #4 direction (left).

FF - Noggles #5 - No starting position.
57 - Noggles #5 Base Rock position (X: 70, Y: 50).
00 - Noggles #5 spawning timer after start.
03 - Noggles #5 direction (left).

EF - End of Noggles enemy data.

1E 08 0D 11 - Sparky enemy data.
02 - Sparky identifier.

FF - Sparky #1 - No starting position.
5D - Sparky #1 Base Rock position (X: D0, Y: 50).
00 - Sparky #1 spawning timer after start.
02 - Sparky #1 direction (down).

EF - End of Sparky enemy data.
FF - End of data for all enemies; leads into Dream Bag placements.

7C - Dream Bag #1 (X: C0, Y: 70).
7D - Dream Bag #2 (X: D0, Y: 70).
7E - Dream Bag #3 (X: E0, Y: 70).

01 - Kickle identifier.

A9 - Kickle starting position (X: 90, Y: A0).

If there are ice cubes present when the level initially loads, following Kickle's starting position, there will be additional data relating to the ice cubes. The proper order of the ice cubes follows up-to-down, and then left-to-right. Typically, the enemies and Dream Bags follow this same format.

The format for ice cube related data is as follows:
[Cube01Byte01] [Cube01Byte02] [Cube02Byte01] [Cube02Byte02] [Cube03Byte01] [Cube03Byte02] [Etc.]

The first byte is the spawning position for a Noggles once the ice cube is used or completely melts away. Much like spawning positions for enemies, "FF" means that there will be no Noggles that spawns after an ice cube is used or completely melts away.

The second byte is the meta-tile value of the block underneath the ice cube.

For example:

FF 02 85 01 FF 04

FF - Ice cube/Noggles #1 - No Base Rock position.
02 - Tile under ice cube #1 (02 - Slippery Ice).
85 - Ice cube/Noggles #2 Base Rock position (X: 50, Y: 80).
01 - Tile under ice cube #2 (01 - Land).
FF - Ice cube/Noggles #3 - No Base Rock position.
04 - Tile under ice cube #3 (04 - Water Hole).

The directional values for enemies are as follows:
00 - Up
01 - Right
02 - Down
03 - Left


If I make 16 images with 16 levels can you add them in a hack for me?  :angel:
Join my nes forum

Quick Curly

I suppose that I could; however, you aren't really making the hack yourself then, much like what the case turned out to be with Board Fight. It was intended to help people get some hacking experience, since the idea was to work on a collaborative hack, but they only really gained level designing experience, with me inserting the levels. Do realize that if I insert your level designs into a hack for you, either your credit would be for level designs, and/or we would both get hacking credits.

I would also like to take a break from Balloon Fight for a little while (the break that I intended to take following Cosmic Balloon Assault) in order to work on my Kickle Cubicle project. It should provide you with enough time to get together all of your level designs for the hack.

However, if I may ask, have you actually tried to build Balloon Fight levels using FCEUX/FCEUXD? That would be hacking. In addition, from what I can see from your recent submissions, it would seem to me that you would have had to make your changes within a hex editor, after finding out how specific functions of the game actually work.

It's my personal opinion that people who have a specific vision to bring new life to their favourite games should take the initiative, to the best of their abilities, to create it. When you posted in this topic in August, I asked you if there was anything that I could help clear up to help simplify the physical process for you, or any new information that I could try to help provide. You never got back to me then. So, I will ask again, what specifically do you find so difficult in doing it yourself? I can help you learn so that you can not only create your level designs, but also insert them into the ROM yourself. Doing so in this topic specifically can help to document the learning experience and process, and perhaps help others to benefit from the experience, too. I'm willing to take the time to do so, so hopefully you will be as well. The feeling of physically putting together one's vision is so much rewarding than getting someone else to do it for them.

By the way, I watched your Netplay video of the hack. Thank you for making it, as well as your videos of Cosmic Balloon Assault. It's enjoyable to watch others play through one's hacks. :)


Sorry but it won't be any hack, I understand if you make it and I only design your levels you are the maker and I don't mind but I got a few problems these month 2 of my best projects that I spent 6 months and the other 2 months to make it....I failed them, I tried and tried many times and many ways but still no success,I even asked all the hacker I knew, I'm really sad I tried so much time put my faith it's gonna happen but I couldn't do a thing  :( and trust me I tried anything possible for both, so after this mess I decided to make one final hack with my favorite game (I have all the info I need) and after this I will retreat, and Balloon fight was one of my old games + level hacks are my favorites so I like playing any of this combination  :) And when you asked me back them I was busy with this project, finding the levels hex values etc, well I have nothing more to say except thanks for being the only one that made a level hack of balloon fight  :thumbsup:
Join my nes forum


I don't know if this is the right place to show this but I UNDEAD BALLON FIGHTER  :-X
I know this sounds like bullshit (more like a bug) but take a look at this video, his colors are different that the others three regular enemies, it have your color and is faster and smarter than the others.
Join my nes forum