It is currently Wed Dec 13, 2017 11:33 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 10 posts ] 
Author Message
PostPosted: Sun Sep 18, 2016 9:47 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 3192
Location: Mountain View, CA, USA
I posted the attached picture on Twitter this afternoon, which is a scan I did of one of my Nintendo Power mags. It's a trick for RoboWarrior/Bomber King that allows for unlimited items (and a level select + way to walk over terrain). This is a code/secret that isn't on GameFAQs or anywhere else I've searched over the years (I haven't looked on Japanese sites though).

What I found remarkable about this trick is, IMHO, how convoluted it is. This is something that seems substantially more complicated than the "minus world" in SMB or Konami's UUDDLRLRBA+Start code (latter was intentionally coded). There are many requirements that must be done in a specific order:

1. Must have Megaton bomb from first idol room
2. Must have exactly 62 bombs
3. Shoot/kill a Lurcher (spider)...
4. ...with the normal weapon only
5. ...while facing downward (final shot that kills the Lurcher must be done while facing down)
6. After, must press Select to go into the Inventory screen...
7. ...and move the cursor to Energy Tank item (far left, 2nd from top) -- but NOT use it yet
8. ...then on controller 2 press and hold Up+Left
9. ...then on controller 1 press A twice (will attempt to use the Energy Tank)

The level select and walk-over-anything tricks are only possible after doing the above. I'll also note that, if my memory serves me right, you don't need an Energy Tank for it to work.

rainwarrior felt that this is most likely a bug that manifests itself in such a way where a leftover debug mode feature is enabled (and I agree that it very much feels like a development/debug mode feature), but that he feels it's certainly possible that someone may have come across this particular trick/bug in the course of gameplay and/or game testing. The Twitter thread (be sure to click on View more replies): https://twitter.com/koitsu2009/status/7 ... 4592673792

That's where I disagree: to me, the odds of someone stumbling upon this specific series of events by happenstance seem astronomical. But even if someone did, they'd still have to work out *exactly* how to reproduce it for a Nintendo Power submission/publication. If someone was to find another way (possibly easier), I'd believe it -- but that isn't what got published. It's just so incredibly specific; the step that gets me the most is that the Lurcher must be killed while facing downwards.

I feel it's more likely that Nintendo either got the trick from Hudson Soft directly, or that it was published in something like Famitsu or some other Famicom enthusiast mag (possibly as a result of the programmer or devteam leaking it?) and essentially the tip/trick got "brought overseas".

While normally I love disassembling and digging into innards of classic games, this is one that seems really convoluted and likely painful given how many different things are involved -- lots to track. RoboWarrior and Bomber King are both 128KByte mapper 2 (UNROM, i.e. PRG-ROM + CHR-RAM).

Thoughts/opinions?

Please note up front this isn't a "debate" thread (i.e. "who is right/wrong, rainwarrior or I?"), but rather just something to pontificate on. Have you see more convoluted codes that involve several aspects of a game (i.e. not just pad/button sequences)? What are your thoughts?


Attachments:
Nintendo_Power_RoboWarrior.jpg
Nintendo_Power_RoboWarrior.jpg [ 416.59 KiB | Viewed 1527 times ]
Top
 Profile  
 
PostPosted: Sun Sep 18, 2016 10:12 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 5896
Location: Canada
The debug mode looks intentional, but the way it's triggered does not. I think it was probably originally very easy to access from the inventory screen, then intentionally disabled. Whatever weird set of conditions is generated by having 62 bombs, etc. just re-enables it by accident. I don't think those conditions are intentional, they're too inconvenient to be useful. Why would you bury a debug feature under so much effort?

On the other hand, this kind of convoluted set of steps to reproduce a bug is fairly typical for game bug reports.

The tester plays for a while, and then something unexpected happens. The first thing they do is they write down everything they did up to that point, and try to do it again. If they can do it again following the steps they could remember, then they start whittling it down. Do it again but omit some steps and see if it still works. Repeat until you get rid of any steps that seem unnecessary. Eventually you might pare it down to a few critical events, but very often the steps still look pretty wild and organic. Usually as a programmer when I find the bug, I can say "oh, all you really had to do was 1 2 3, not that 50 step thing", just nobody had ever tried doing that particular sequence before. (At that point it usually doesn't matter anymore either, cause once it's understood it gets fixed and forgotten.)

Anyhow, it's pretty natural for an obscure bug to be found with a very long and strange ritual attached to triggering it. This is simply the best way discovered so far. This doesn't have to be the one true sequence that triggers it. If it's really a bug there's probably a lot of ways to trigger it. If you debugged it I bet you could find a much simpler way to do it. You've got much better tools to look at this than even the developers had at the time (if you're interested).

Koitsu's comment that set me off was just that "it had to be from the devs". Maybe it could have been, but I wouldn't find it beyond the pale for a regular user to find it by accident. When you get hundreds of thousands of people playing a game, they try a lot of stuff you would never expect. Stuff you wouldn't think anybody would do. :P


Top
 Profile  
 
PostPosted: Sun Sep 18, 2016 10:41 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 3192
Location: Mountain View, CA, USA
I was able to find the trick on a couple Japanese Famicom pages:

http://marie.saiin.net/~capsule/game/waza_fc_ha.html
http://hirobee.oops.jp/famikontalk/mugenzou.htm
http://urawaza.in/fc/bomberking.htm
http://huurinsou.blog61.fc2.com/blog-entry-807.html
http://www5f.biglobe.ne.jp/~famicom/Ura ... erKing.htm

From the way these read, it sounds like you actually do need 1 Energy Tank (because the trick requires that your energy be at maximum when Up+Left is pressed/detected on Controller 2). I can't determine from the Japanese if a Megaton bomb is actually needed or not (it would make doing the trick easier since the area would be clear of trees thus encountering a Lurcher would be more likely).

Oh, and I did find some English web pages talking about this trick too, but they all tend to follow the same procedure as what was in Nintendo Power. It's funny that I found more in Japanese than I did in English.

I may sometime take a stab at reverse engineering this just to see if I can work out what the criteria really are.


Top
 Profile  
 
PostPosted: Sun Sep 18, 2016 11:31 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 5896
Location: Canada
Do you have to only press up + left on controller 2 at a specific time, or can you just have it held down continually? Are the directions telling you to press it at a specific time just because you're expected to be using your hands for other stuff until then, or because you have to only use it then?

I'd kinda presumed that you could just have it held, but if not I'd be swayed to agree no end user would come up with that.

The rest of the steps, though, look like natural things that someone might do while playing, to me. I read it more like a diary of something strange that happened, rather than a deliberate set of instructions.


Top
 Profile  
 
PostPosted: Sun Sep 18, 2016 11:34 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 3192
Location: Mountain View, CA, USA
I get the impression from the way things read that you can basically have Up+Left held on Controller 2 at any time, but the trick only triggers once your energy reaches maximum + you have 62 bombs + were facing downward when the last enemy killed was a Lurcher. Easy enough to find out I suppose.


Top
 Profile  
 
PostPosted: Mon Sep 19, 2016 12:28 am 
Offline
User avatar

Joined: Mon Oct 06, 2014 12:37 am
Posts: 187
The original Bomberman was loaded to the gills with obscure secrets like this, I'm going to lean more towards deliberate inclusion: https://tcrf.net/Bomberman_(NES)


Top
 Profile  
 
PostPosted: Mon Sep 19, 2016 1:38 am 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 3192
Location: Mountain View, CA, USA
Did some digging. Decided to key off of the 62-bomb count, looking for a basic cmp #$3e throughout the code (might as well start simple). Gut feeling told me it was probably in the last PRG bank, which is hard-wired in UNROM. Sure enough, we find this beauty in the last PRG bank:

Code:
__c6b0:     lda $0528          ; $c6b0: ad 28 05 
            cmp #$05           ; $c6b3: c9 05     
            bne __c6e1         ; $c6b5: d0 2a     
            lda $01b9          ; $c6b7: ad b9 01 
            beq __c6e1         ; $c6ba: f0 25     
            lda $0f            ; $c6bc: a5 0f     
            cmp #$0a           ; $c6be: c9 0a     
            bne __c6e1         ; $c6c0: d0 1f     
            lda $01c6          ; $c6c2: ad c6 01 
            cmp #$ff           ; $c6c5: c9 ff     
            bne __c6e1         ; $c6c7: d0 18     
            lda $01c7          ; $c6c9: ad c7 01 
            cmp #$0f           ; $c6cc: c9 0f     
            bne __c6e1         ; $c6ce: d0 11     
            lda $78            ; $c6d0: a5 78     
            cmp #$02           ; $c6d2: c9 02     
            bne __c6e1         ; $c6d4: d0 0b     
            lda $4c            ; $c6d6: a5 4c     
            cmp #$3e           ; $c6d8: c9 3e     
            bne __c6e1         ; $c6da: d0 05     
            lda #$01           ; $c6dc: a9 01     
            sta $01ed          ; $c6de: 8d ed 01 
__c6e1:     rts                ; $c6e1: 60       

More REing was required: what were all the ZP/RAM locations for? Attempting to use terms from the actual game manual:

$000e = Controller 1 input; $80=A, $40=B, $20=Select, $10=Start, $08=up, $04=down, $02=left, $01=right
$000f = Controller 2 input (see above)
$0011 = Bitwise NOT of $000e (probably used as a mask somewhere)
$004c = Current bomb count
$0078 = Currently-facing player direction; $03=up, $02=down, $01=left, $00=right
$01b9 = Unknown (see below)
$01c6 = Energy metre (8-tick); $ff=full, $7f=1 missing, $3f=2 missing, $1f=3 missing, $0f=4 missing, $07=5 missing, etc.
$01c7 = "Life pods" (tanks next to the left of the energy metre); $0f=4, $07=3, $03=2, $01=1
$01ed = Debug mode (unlimited items); $01 or higher=enabled, $00=disabled
$0528 = Last enemy killed; $08=Amoeba (not sure of type), $05=Lurcher, $04=Triangle-like enemy (unsure of name), $03=Mecha-bird, $02=Grunt, $01=Skraug

I should note that $0528 refers to the last enemy killed by bombs or gun; unsure about other methods (there are several).

Controller input is actually stored in a couple places at once depending on what "context" you're in (main game vs. inventory menu vs. demonstration mode), but I didn't denote all the locations (there are a couple).

I haven't dug deep enough to figure out what $01b9 is yet. It starts out as $00, but after "some degree of time" (even if you just start the game and don't touch anything) it becomes $01. Forcing it to a particular value ($00 or $01) doesn't have any effect on the inventory or anything else that's immediately obvious to me. I couldn't find any direct references to $01b9 in the rest of the PRG bank, so I'd need to debug it in real-time.

Only two places that write to $01ed: the code run out of the RESET vector (setting $01ed=$00), and the above routine.

There are several subroutines that read $01ed. I found the main one ($c37e) which is what calls jsr $c6b0, but also handles checking the controller 1 check for Select+Up+Left (for Level Select). Another one is $cbde which handles the controller 1 input check for Select+B (walk over all terrain). Those two routines require $01ed to be non-zero for the tricks to take effect.

Routines I haven't analysed, but I bet they have something to do with collision detection (gut feeling):

$dda5 (something's special about $99 (ends up in X) and $4d,x)
$e087 (skips a check against $9b and $4c, if debug is enabled)
$e128 (decrements $4c, but only if debug is *disabled*)
$e845 (tinkers with $70 and $99, if debug is enabled)

I did not find any code that would toggle or disable debug mode -- once it's on, it's on.

Anyway, my analysis obviously isn't fully definitive, but given the $c6b0 routine above, I would say the nuances/checks/etc. are deliberate. Meaning, I lean towards "yes, this really *is* what you have to do to enable debug mode". But at least you don't need a megaton bomb, from the look of the code... :-)


Top
 Profile  
 
PostPosted: Mon Sep 19, 2016 8:21 am 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 5896
Location: Canada
Ha! How bizarre.


Top
 Profile  
 
PostPosted: Sat Feb 25, 2017 8:32 am 
Offline

Joined: Sat Feb 25, 2017 8:30 am
Posts: 1
Sorry for the later bump on this, but I managed to figure out what $01b9 is determined by. It appears that it serves as a check as to whether or not the background music has completed a full loop, and interestingly enough, it does not appear that you can activate the glitch without waiting for this to occur.


Top
 Profile  
 
PostPosted: Sat Feb 25, 2017 4:48 pm 
Offline

Joined: Sun Mar 19, 2006 9:44 pm
Posts: 924
Location: Japan
Yeah, Bomber King also has that odd Karaoke mode at the title screen that activates after you pass one level then get a game over, etc.

I did a similar hunt for unknown conditions in the GG game The Berlin Wall recently. The instruction manual says you have to "satisfy some conditions" to get the good ending, but no site on the internet had any cheats/tips as to what those conditions were.

So, after running the Z80 debugger:
myself wrote:
You need to open 5 doors throughout the game in order to get the good ending. The first two doors open automatically after you defeat all enemies in 1-5 and 2-3. The final three have some secret conditions that nobody in the history of the internet seemed to know.

So, those conditions:
Door #3: The door will appear on stage 3-1 if the thousands digit of your score is EVEN.
Door #4: on 4-3, you need to have fallen down (off a ledge, etc.) 15+ times before the last enemy is destroyed.
Door #5: on 5-2, you need to have dug exactly 7 holes by the end of the stage. This last one is the tricky one, as you'll have to plan how to drop enemies onto others below to keep the digging count low. Filling in a hole does not decrease the "holes dug" counter.

If you meet all these conditions, then you'll go to the end of Stage 5, fight all the bosses again, and finally get the good ending.

_________________
http://www.chrismcovell.com


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group