Robin Hood: Prince of Thieves (NES)
|Robin Hood: Prince of Thieves|
This game has uncompiled source code.
There's a prototype of this game prior to it being a licensed game.
Robin Hood: Prince of Thieves is a Zelda-like action/adventure game presumably based on a movie.
It's fairly well-known, but this game contains a hidden password mode, which allows you to skip ahead to any segment of the game, including straight to the ending. At the title screen, press A (×8), B (×8). Note that each password only gives you all the items you strictly need to succeed in that area, and sometimes not even that (CASTLEIN for example does not provide the Druid's Dagger).
|CATACOMB||Outside Arab jail|
|CHASE||Horse race to Sherwood|
|CATHEDRA||Rescue the maiden|
|BOAR||Battle the boar|
|MASTER||Search for Master Trainer|
|CHAPEL||Meet Marian at chapel|
|WELL||Search for haunted well|
|TAX||Attack gold wagons|
|POND||Search for healing water|
|VILLAGE||Defense of Sherwood Village|
|TOWN||Journey to town|
|TOWNHANG||In town, by gallows|
|CASTLEIN||Inside Sheriff's castle|
While playing, open the menu, highlight "EXIT" and press A + Start. The credit list will pop up.
A powerful debug mode can be accessed via a button code. At the title screen, press А (×8), В, А (×7), В, А (×6), В, А (×5), В, В, В. A sound effect will indicate that debug mode is active. During gameplay, you can toggle debug mode on and off by pausing the game (press Select).
While in debug mode, pressing Start will show the cheat menu instead of the regular menu. This menu allows you to fight any duel in the game or warp to any location. Additionally, your HP will be always 100, rendering you invincible, and you can walk through walls and other obstacles.
Unused items in video games are nothing new... but it's a rare case when they're actually mentioned in an official source! Many of these items were included in the manual, but were left out for whatever reason, leading many a player to fruitlessly search for them.
- Short Sword - Not really a sword, but rather a stronger, heavier version of the Knife with the same icon. Attack: 6, Weight: 4.
- Steel Sword - A standard sword which, like the Short Sword, is just an upgrade to the "Sword", and also uses the same icon. Attack: 10, Weight: 8.
- Claymore - Presumably another sword-type weapon. "Presumably", because this weapon is basically one big glitch. It has no icon, and hacking it into the game causes the entire menu to flip out, as seen in the screenshot. You can equip the weapon and attack with it normally, but if you drop it, it cannot be picked back up, and may freeze the game. Attack: 12, Weight: 10.
- Shield - There were two shield-type items in the game, both mentioned in the manual, and both left unused. Noteworthy for having a unique icon.
- Locksley Shield - There's a Locksley Sword, Locksley Armor, and a Locksley Bow, so it stands to reason that there'd also be a Locksley Shield. Same icon as the other shield, and probably stronger somehow.
- Ladder - This item has no use, and its icon is just an odd palette swap of the Rope. Presumably, it would have had a similar effect. Unlike the other items listed here, this wasn't mentioned in the manual, so it may have been cut much earlier in development.
A few miscellaneous items/objects can also be made to appear in the inventory, something which never occurs normally.
- Quiver - Found here and there throughout the game, and dropped by some defeated enemies, these add a few arrows to the "Arrow" counter on the menu, and are never normally seen in the inventory.
- Gold Coin - Gives you 1 gold piece. Found laying around or dropped by enemies, another item that's just added to a counter, and not the inventory.
- Bag of Gold - Same deal as the Gold Coin, except worth more, obviously. If hacked in, these items can be dropped and picked back up, and they'll function normally. Both the quiver and gold items weigh 1 "unit".
- Locked Chest - Not an item, just a treasure chest, which you need a Chest Key to open. These can't be picked up, and aren't even technically items, but can be hacked into the inventory nonetheless. It's a bad idea to do so, however, as it weighs a whopping 229 "units", rendering you unable to pick up anything else until it's discarded. If you do discard it, it simply vanishes.
- Empty Chest - Same as above, basically. Just what's left of the chest after opening it. It's not as ridiculously heavy as the locked version (185 "units"), but still not worth hacking in. Like the Locked Chest, it disappears if dropped.
The NSF file contains three songs not used at any point in the game:
Track 4 on the NSF. A rather heroic song that sounds like it might have worked for the opening/title or ending.
Unused Fanfare 1
Track 18 on the NSF is a short, victorious-sounding fanfare.
Unused Fanfare 2
Track 25 on the NSF is another short, victorious-sounding fanfare, although different from the previous one.
Located at 0x10 in the ROM.
|USA||USA Rev 1||Europe|
ROBIN HOOD VERSION AUG 07/91
ROBIN HOOD VERSION OCT 31/91
ROBIN HOOD FRN PAL FEB 11/92
ROBIN HOOD GER PAL FEB 11/92
ROBIN HOOD SPN PAL SEP 11/92
Assigned variable names are stored in the ROM at 0x17E49
sprite.face.tuck.chr translation charset.melee.church.chr pal.sherwood color.palettes sprite.face.guard.chr pal.hut sprite.shield.chr door0 sprite.sword.chr sprite.wulfsit.chr pal.loxley.dark pal.sprites.robin pal.duel.castle sprite.saddle.chr sprite.weapon.shield.chr sprite.will.chr sprite.bigboar.chr pal.duboisout pal.melee.church pal.melee.sherwood sprite.misc.chr sprit
The first section of uncompiled, commented code can be found at 0xFBCF in the US ROM, 0xFDB6 in the German ROM, and 0xFDB6 in the European ROM. They have been combined here:
beq .done sty actor.type ;Save actor type stx thisscan ;------------------------------- lda status,x and #(s.hidden|s.inchest|s.noshape) bne .done lda actor.flags-1,y ;Get ACTOR info flags sta actor.flag ;------------------------------- jsr newpix ;Clear DRAW variables. jsr draw.meter ;------------------------------- lda actor.flag and #actor.flag.mask beq .1 dec spmask ;Do MASK behind backdrop. ;------------------------------- .1 jsr set.pos ;Set xpos(3) ypos(3) for actor. jsr get.actor.info ;Get all info about this actor. lda status,x and #s.mirror sta mobs ;------------------------------- jsr locate ;GET SCREEN LOCATION. lda offscreen beq .0 ;If ONSCREEN, draw him! lda status,x ;Note actor is OFFSCREEN ora #s.offscreen sta status,x lda offscreen bmi .kill ;If > 1 screen away, DELETE HIM lda actor.flag ;Actor OFFSCREEN, but less than 1 screen away. and #actor.flag.deloff ;Delete him ONLY if this type of ac
The second fragment is in the US version at 0x13E44 and in the European version at 0x13764. The European version has a much more complete version of this fragment. The below is a combination of the fragments from both versions:
flag and #%00100000 beq .1 lda #0 sta xoffset+1 sta xoffset+0 sta readx .1 lda action.flag and #%00010000 beq .2 lda #0 sta yoffset+1 sta yoffset+0 sta ready .2 rts ;********** ;process.actor ; ;-x is an actor ; ;-process ACTION requests ; ;-Called after AI routine, or JOYSTICK reading. ; ;-READX/READY = Are movement values ; ;-SELECT = SELECT BUTTON ; ;-FIREA/FIREB = JOYSTICK FIRE BUTTONS ; ;********** process.actor jsr ck.fire jmp get.direction ;set DIR based on READX/READY ;********** ;ck.fire ; ;-x is an actor. ; ;-Handle FIREB button requests. ; ;********** ck.fire lda #1 cmp firea beq .fire cmp fireb bne .exit .fire lda action,x ;Only do FIRE action if STAND or RUNing cmp #fire bcs .exit lda #fire jsr change.action .exit rts ;********** ;rand.velocity ;********** rand.velocity jsr rand.xvelocity jmp rand.yvelocity ;********** ;rand.xvelocity ;********** rand.xvelocity jsr rand and #3 adc #1 bit random bpl .1 jsr negate.a .1 sta xvel1,x rts ;********** ;rand.yvelocity ;********** rand.yvelocity jsr rand and #3 adc #1 bit random bpl .1 jsr negate.a .1 sta yvel1,x rts ;********** ;fake.joystick ; ;-xoffset(2) yoffset(2) are movement forces. ; ;-Bogas joystick inputs for AI system. ; ;-Sets READX/READY to movement forces set. ; ;********** fake.joystick lda xoffset+0 ;Compute READX/READY from xoffset(2) yoffset(2) bit xoffset+1 bpl .0 jsr negate.a .0 cmp #24 bcc .y lda #$ff bit xoffset+1 bmi .1 lda #1 .1 sta readx .y lda yoffset+0 bit yoffset+1 bpl .3 jsr negate.a .3 cmp #24 bcc .9 lda #$ff bit yoffset+1 bmi .4 lda #1 .4 sta ready .9 rts ;********** ;get.direction ; ;-x is an actor. ; ;-Set STATUS based on readx/ready commands ; ;********** ;-------------------------------------------- ; Actor DIRECTIONS ;-------------------------------------------- ; ; 08 ; 07 \ | / 01 ; ; 06 - 00 - 04
The Robin Hood series
|NES||Robin Hood: Prince of Thieves|
|Game Boy (Color)||Robin Hood: Prince of Thieves • Robin Hood|
|PlayStation||Robin Hood: The Siege|