Streemerz NES port

A place where you can keep others updated about your NES-related projects through screenshots, videos or information in general.

Moderator: Moderators

Post Reply
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Streemerz NES port

Post by thefox »

EDIT (2012-10-10): Project has been completed, download the ROM from www.fauxgame.com.

---

Continuing from here...

To recap, this project is about making a NES port of the "NES-lookalike" Flash game called Streemerz, which itself is based on one of the games in the Action 52 multicart. See the thread linked above for more details.

This project was started about a year ago but was put on hiatus not long after that because of difficulty obtaining the level assets, and not being interested in doing a ton of manual work. :) Lately it has been picking up steam again thanks to help from other members of this forum.

I'll be using this thread as a sort of project blog from now on. Next item on the TODO list is to convert the binary level dumps from the Flash game to XML format for Tiled.

Here's a screenshot of an old prototype written in C:

Image
Last edited by thefox on Wed Oct 10, 2012 3:14 pm, edited 3 times in total.
User avatar
Grumskiz
Posts: 79
Joined: Sat Mar 26, 2011 1:06 pm
Location: Germany

Post by Grumskiz »

Looks great!
Will the maps scroll? As far as I remember there was an issue with the map size, am I correct?
So were you able to shrink them without altering them completely or will they scroll even though they're originally intended to be "single screen"?
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

The NES picture is 256x240, with a few scanlines cut off the top (up to 16) and bottom (up to 11) by the TV. StreEmerZ (Flash version) uses maps of 320x240 pixels with no overscan. There are two ways to handle this: A. draw the map onto 320 pixels of a 512x240 pixel vertical mirrored plane and scroll back and forth, or B. redraw all the maps to be 256 pixels wide. Lode Runner does a mix of both: it scrolls horizontally, and the maps are slightly cut down vertically. I'd prefer B, but if one can make a strong case that A improves the port, so be it.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Post by thefox »

Grumskiz wrote:Looks great!
Will the maps scroll? As far as I remember there was an issue with the map size, am I correct?
So were you able to shrink them without altering them completely or will they scroll even though they're originally intended to be "single screen"?
Currently they scroll horizontally. If they can be shrinked down without changing the level designs too much, I'm all for that, but it's not top priority right now. The nice thing is it should be pretty easy to switch between the two (if/when the levels have been re-designed) without having to touch any of the engine code.

Like tepples said, there's also the problem with vertical resolution and overscan on some TVs, which might affect some levels. Again this isn't something I'm going to be worrying about too much right now.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Post by thefox »

Got the binary maps converted to Tiled XML format:

Image

Not all of the binary files are maps, some of them contain objects for the maps and some contain dialogue. Now the problem is finding out which object list belongs to which map... After I figure that out, I'm going to write some more code to get the objects to show up in Tiled as well.
Bananmos
Posts: 552
Joined: Wed Mar 09, 2005 9:08 am
Contact:

Post by Bananmos »

I would vote for horizontal scrolling rather than conversion, just to keep the experience as close as possible to the original.

But ultimately, I'd enjoy any option that would let us see this NES port completed :)
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Post by thefox »

I think I found a way to assign the original names to the dumped assets.

Dwedit, what software did you use to dump the images and the audios? If you can dump them with the Flash tag header still in them, I can get the tag ID from the beginning of the file and use it to assign them a name that's used to reference the asset in the source. There's a symbol table (consisting of tag IDs and their names) at offset 0x5E3E46 in the unpacked SWF file.

EDIT: Or if you can dump them so that the filename contains the tag ID, that would be fine as well...

EDIT: Here are the tag IDs and the symbols which reference them:

Code: Select all

{2: ['MainGame_embedded_font_string'],
 3: ['GamePreTitle_START_SOUND'],
 4: ['SoundManager_MUSIC_TITLE'],
 5: ['SoundManager_MUSIC_ORIGINAL'],
 6: ['SoundManager_MUSIC_CHEETAH'],
 7: ['SoundManager_MUSIC_MUSIC2'],
 8: ['SoundManager_MUSIC_MUSIC'],
 9: ['GameTitle_STEP2'],
 10: ['GameTitle_STEP1'],
 11: ['GameTitle_MONEY_JINGLE'],
 12: ['GameTitle_METAL_SOUND'],
 13: ['HowToPlay_START_SOUND'],
 14: ['GamePlay_PAUSE'],
 15: ['GamePlay_THUNDER'],
 16: ['Player_GRAPPLE'],
 17: ['Player_REEL'],
 18: ['Player_FLIP'],
 19: ['Player_STEP1'],
 20: ['Player_RESPAWN'],
 21: ['Player_JUMP'],
 22: ['Player_STEP2'],
 23: ['Player_TRACT'],
 24: ['Player_DIE'],
 25: ['Player_METAL_SOUND'],
 26: ['Player_CAST'],
 27: ['Player_LAND'],
 28: ['Trap_TRAP'],
 29: ['Candle_FLAME'],
 30: ['Candle_FLAME_DIE'],
 31: ['Door_DOOR'],
 32: ['Breakable_BREAK'],
 33: ['HUD_Textbox_TEXT'],
 34: ['HUD_Textbox_M_EXPLODE'],
 35: ['CheckPoint_CHECK'],
 36: ['FlyClown_EXPLODE'],
 37: ['PieThrower_THROW'],
 38: ['MasterY_TRACT'],
 39: ['MasterY_JUMP'],
 40: ['MasterY_RESPAWN'],
 41: ['MasterY_LAND'],
 42: ['MasterY_METAL_SOUND'],
 43: ['MasterY_REEL'],
 44: ['MasterY_CAST'],
 45: ['MasterY_DIE'],
 46: ['MasterY_GRAPPLE'],
 47: ['MasterY_FLIP'],
 48: ['Thunder_THUNDER'],
 49: ['Money_MONEY_JINGLE'],
 50: ['Clown_EXPLODE'],
 51: ['GameVEnding_TEXT'],
 52: ['GameEnding_TEXT'],
 53: ['Explosion_EXPLODE'],
 54: ['EscapePodGFX_POD'],
 55: ['Metal_METAL'],
 56: ['VLevelList_LEVEL1_EFile'],
 57: ['LevelList_COMMS6_EFile',
      'JLevelList_COMMS6_EFile',
      'EasyLevelList_COMMS6_EFile'],
 58: ['JLevelList_LEVEL4_EFile', 'LevelList_LEVEL4_EFile'],
 59: ['ScriptList_COMMS4_File'],
 60: ['JLevelList_LEVEL4_MFile', 'LevelList_LEVEL4_MFile'],
 61: ['ScriptList_ESCAPE_File'],
 62: ['ScriptList_Y_ENDING_File'],
 63: ['GameTitle_SELECT'],
 64: ['ScriptList_V_002_File'],
 65: ['Player_PLAYER', 'MasterY_PLAYER'],
 66: ['ScriptList_Y_FUU_File'],
 67: ['EasyLevelList_COMMS5_MFile',
      'JLevelList_COMMS7_MFile',
      'JLevelList_COMMS5_MFile',
      'EasyLevelList_COMMS6_MFile',
      'LevelList_COMMS7_MFile',
      'VLevelList_COMMS5_MFile',
      'VLevelList_COMMS6_MFile',
      'LevelList_COMMS6_MFile',
      'JLevelList_COMMS6_MFile',
      'LevelList_COMMS5_MFile',
      'EasyLevelList_COMMS7_MFile',
      'VLevelList_COMMS7_MFile'],
 68: ['ScriptList_Y_VENI_File'],
 69: ['ScriptList_V_007_File'],
 70: ['LevelList_COMMS3_MFile',
      'EasyLevelList_COMMS3_MFile',
      'JLevelList_COMMS3_MFile',
      'VLevelList_COMMS3_MFile'],
 71: ['GameTitle_TITLE_GRAPHIC', 'GamePreTitle_TITLE_GRAPHIC'],
 72: ['EasyLevelList_LEVEL4_EFile'],
 73: ['VLevelList_COMMS2_EFile'],
 74: ['ScriptList_Y_B16_File'],
 75: ['JLevelList_LEVEL3_EFile', 'LevelList_LEVEL3_EFile'],
 76: ['JLevelList_LEVEL7_EFile', 'LevelList_LEVEL7_EFile'],
 77: ['VLevelList_COMMS7_EFile'],
 78: ['ScriptList_DEPRESSURE_File'],
 79: ['EasyLevelList_COMMS2_MFile',
      'LevelList_COMMS2_MFile',
      'VLevelList_COMMS2_MFile',
      'JLevelList_COMMS2_MFile'],
 80: ['MasterY_LINE', 'Player_LINE'],
 81: ['HowToPlay_HELP_1'],
 82: ['HowToPlay_HELP_2'],
 83: ['PieThrower_CLOWN'],
 84: ['EasyLevelList_LEVEL3_MFile',
      'JLevelList_LEVEL3_MFile',
      'LevelList_LEVEL3_MFile'],
 85: ['ScriptList_POISON_LOCATION_File'],
 86: ['LevelList_LEVEL5_MFile',
      'EasyLevelList_LEVEL5_MFile',
      'JLevelList_LEVEL5_MFile'],
 87: ['JLevelList_COMMS4_EFile',
      'EasyLevelList_COMMS4_EFile',
      'LevelList_COMMS4_EFile'],
 88: ['ScriptList_VINTRO_File'],
 89: ['ScriptList_Y_MONEY_File'],
 90: ['ScriptList_VENI_INTRO_File'],
 91: ['ScriptList_Y_POISON_DEATH_File'],
 92: ['ScriptList_V_DEFLECT_File'],
 93: ['HUD_Textbox_TEXTBOX'],
 94: ['ScriptList_V_PIE_File'],
 95: ['ScriptList_ENDRACE_File'],
 96: ['JLevelList_LEVEL6_MFile', 'LevelList_LEVEL6_MFile'],
 97: ['JLevelList_COMMS5_EFile',
      'LevelList_COMMS5_EFile',
      'EasyLevelList_COMMS5_EFile'],
 98: ['ScriptList_POISON_DEATH_File'],
 99: ['SuperPlayer_SUPER_PLAYER'],
 100: ['ScriptList_V_006_File'],
 101: ['ScriptList_VENI_File'],
 102: ['Pie_SPRITEMAP'],
 103: ['Explosion_EXPLOSION'],
 104: ['ScriptList_Y_B9_File'],
 105: ['LevelList_LEVEL6_EFile', 'JLevelList_LEVEL6_EFile'],
 106: ['ScriptList_BALL_File'],
 107: ['ScriptList_B16_File'],
 108: ['VLevelList_LEVEL5_MFile'],
 109: ['ScriptList_Y_POISON_LOCATION_File'],
 110: ['SuperLevelList_LEVEL1_MFile'],
 111: ['LevelList_COMMS1_EFile',
       'JLevelList_COMMS1_EFile',
       'EasyLevelList_COMMS1_EFile'],
 112: ['ScriptList_Y_WEAK_File'],
 113: ['JLevelList_LEVEL5_EFile', 'LevelList_LEVEL5_EFile'],
 114: ['ScriptList_COMMS3_File'],
 115: ['ScriptList_Y_ESCAPE_WAY_File'],
 116: ['VLevelList_COMMS4_EFile'],
 117: ['MasterY_MASTERY', 'JPlayer_J_PLAYER'],
 118: ['ScriptList_Y_GETHIM_File'],
 119: ['GrappleHook_GRAPPLEHOOK'],
 120: ['EasyLevelList_COMMS7_EFile',
       'LevelList_COMMS7_EFile',
       'JLevelList_COMMS7_EFile'],
 121: ['ScriptList_Y_COMMS2_File'],
 122: ['ScriptList_PIE_File'],
 123: ['VLevelList_COMMS4_MFile',
       'JLevelList_COMMS4_MFile',
       'LevelList_COMMS4_MFile',
       'EasyLevelList_COMMS4_MFile'],
 124: ['ScriptList_Y_PIE_File'],
 125: ['LevelList_LEVEL1_MFile', 'JLevelList_LEVEL1_MFile'],
 126: ['SuperLevelList_LEVEL1_EFile'],
 127: ['VLevelList_LEVEL6_MFile'],
 128: ['JLevelList_COMMS3_EFile',
       'EasyLevelList_COMMS3_EFile',
       'LevelList_COMMS3_EFile'],
 129: ['GrappleHook_GRAPPLEHOOK_MASK', 'Ball_GRAPPLEHOOK_MASK'],
 130: ['ScriptList_GETHIM_File'],
 131: ['VLevelList_COMMS5_EFile'],
 132: ['LevelList_LEVEL2_EFile', 'JLevelList_LEVEL2_EFile'],
 133: ['FlyClown_CLOWN'],
 134: ['ScriptList_METAL_File'],
 135: ['Money_MONEY'],
 136: ['JLevelList_COMMS2_EFile',
       'LevelList_COMMS2_EFile',
       'EasyLevelList_COMMS2_EFile'],
 137: ['ScriptList_ENDING_File'],
 138: ['net.flashpunk.graphics.Text__FONT_DEFAULT'],
 139: ['EasyLevelList_LEVEL6_EFile'],
 140: ['Smoke_SMOKE'],
 141: ['ScriptList_Y_INTRO_File'],
 142: ['VLevelList_LEVEL7_EFile'],
 143: ['ScriptList_V_END_File'],
 144: ['LevelList_LEVEL7_MFile', 'JLevelList_LEVEL7_MFile'],
 145: ['ScriptList_MEASURE_File'],
 146: ['ScriptList_Y_BALL_File'],
 147: ['BlueBall_BLUE_BALL'],
 148: ['LevelList_LEVEL1_EFile', 'JLevelList_LEVEL1_EFile'],
 149: ['VLevelList_LEVEL7_MFile'],
 150: ['ScriptList_FUU_File'],
 151: ['ScriptList_V_009_File'],
 152: ['ScriptList_Y_COMMS3_File'],
 153: ['Candle_CANDLE'],
 154: ['VLevelList_LEVEL2_MFile'],
 155: ['EasyLevelList_LEVEL6_MFile'],
 156: ['VLevelList_COMMS3_EFile'],
 157: ['GameTitle_TITLE_LOGO', 'GamePreTitle_TITLE_LOGO'],
 158: ['ScriptList_Y_COMMS6_File'],
 159: ['VLevelList_LEVEL3_EFile'],
 160: ['HUD_DEATHFACE'],
 161: ['VLevelList_COMMS1_MFile',
       'EasyLevelList_COMMS1_MFile',
       'JLevelList_COMMS1_MFile',
       'LevelList_COMMS1_MFile'],
 162: ['VPlayer_V_PLAYER'],
 163: ['VLevelList_LEVEL4_MFile'],
 164: ['ScriptList_V_010_File'],
 165: ['ScriptList_V_001_File'],
 166: ['EasyLevelList_LEVEL1_MFile'],
 167: ['ScriptList_V_004_File'],
 168: ['VLevelList_COMMS6_EFile'],
 169: ['ScriptList_V_008_File'],
 170: ['Main_MG_Logo'],
 171: ['ScriptList_ESCAPE_WAY_File'],
 172: ['EasyLevelList_LEVEL2_EFile'],
 173: ['Trap_TRAP_SPRITE'],
 174: ['VLevelList_LEVEL4_EFile'],
 175: ['ScriptList_MONEY_File'],
 176: ['ScriptList_Y_COMMS4_File'],
 177: ['ScriptList_Y_BOMBOFF_File'],
 178: ['ScriptList_V_011_File'],
 179: ['ScriptList_EXIT_File'],
 180: ['EasyLevelList_LEVEL2_MFile'],
 181: ['EasyLevelList_LEVEL5_EFile'],
 182: ['EasyLevelList_LEVEL4_MFile'],
 183: ['Hook_HOOK'],
 184: ['EasyLevelList_LEVEL3_EFile'],
 185: ['ScriptList_CLOWN_File'],
 186: ['ScriptList_BOMBOFF_File'],
 187: ['HUD_Textbox_FACES'],
 188: ['EndingBG_BG'],
 189: ['ScriptList_COMMS6_File'],
 190: ['ScriptList_COMMS2_File'],
 191: ['GhostPlayer_PLAYER'],
 192: ['Clown_CLOWN'],
 193: ['VLevelList_LEVEL6_EFile'],
 194: ['EasyLevelList_LEVEL7_MFile'],
 195: ['Breakable_BREAKABLE'],
 196: ['VLevelList_LEVEL1_MFile'],
 197: ['ScriptList_END_File'],
 198: ['VLevelList_LEVEL5_EFile'],
 199: ['CheckPoint_POINT'],
 200: ['ScriptList_INTRO_File'],
 201: ['VLevelList_LEVEL2_EFile'],
 202: ['ScriptList_WEAK_File'],
 203: ['LevelList_LEVEL2_MFile', 'JLevelList_LEVEL2_MFile'],
 204: ['ScriptList_Y_ESCAPE_File'],
 205: ['EasyLevelList_LEVEL1_EFile'],
 206: ['Deflector_SPRITE'],
 207: ['ScriptList_Y_DEPRESSURE_File'],
 208: ['EasyLevelList_LEVEL7_EFile'],
 209: ['Level_TILES'],
 210: ['VLevelList_COMMS1_EFile'],
 211: ['VLevelList_LEVEL3_MFile'],
 212: ['Main_MG_Logo_dataClass'],
 213: ['Ball_BALL'],
 214: ['ScriptList_B9_File'],
 215: ['ScriptList_V_003_File'],
 216: ['ScriptList_V_005_File'],
 217: ['ScriptList_Y_VENI_INTRO_File'],
 218: ['ScriptList_Y_CLOWN_File']}
slobu
Posts: 276
Joined: Tue Jul 12, 2011 10:58 am

Post by slobu »

Have you already tried to contact the original author of Streemerz? I'm sure Arthur Lee would be honored to help port Streemerz back to the NES.

http://www.superfundungeonrun.com
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

In [url=http://nesdev.com/bbs/viewtopic.php?p=77297#77297]this post[/url], thefox wrote:I actually started working on this after okaying it with the original author first. He sent me the player sprites but hasn't responded to my latest message where I asked for more assets (levels...).
The port got hung up on this for a year until we finally figured out two ways to extract the maps. What finally got us off our collective asses may have been a multicart project that I had started working on early in the year.
User avatar
tokumaru
Posts: 12427
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Post by tokumaru »

slobu wrote:Have you already tried to contact the original author of Streemerz? I'm sure Arthur Lee would be honored to help port Streemerz back to the NES.
If I'm not mistaken, he was already contacted and didn't show much interest. I could be wrong though.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Post by thefox »

slobu wrote:Have you already tried to contact the original author of Streemerz? I'm sure Arthur Lee would be honored to help port Streemerz back to the NES.

http://www.superfundungeonrun.com
Yes I contacted him the very first thing when I started the project, he never replied to my query about the level assets. I don't blame him though, if a random guy came to me asking for similar stuff, I probably wouldn't give the project a high chance of getting finished, and consequently wouldn't want to waste my time explaining all the inner workings of the engine. :) At this point it doesn't even matter, most of the stuff has been RE'd (and it has been kind of fun, actually).

I'm really glad we found a way to extract the original binary maps, figuring out all the small details about object placement, events, differences in map per difficulty levels etc would have been a ton of work. Also since I now have all the original dialogue files etc it's much easier to make sure that nothing gets missed...
User avatar
Nioreh
Posts: 115
Joined: Sun Jan 22, 2012 11:46 am
Location: Stockholm, Sweden

Post by Nioreh »

This is great. I also vote for horizontal scrolling to keep the levels as close to the "original" as possible. (unless it becomes too much of a distraction)

I died 69 times on easy in the flash game :)

Really hope you finish taking this cool Streamers remake to the NES. Imagine if all of the Action 52 games were as good as this, man what a bargain it would have been.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Post by thefox »

thefox wrote:After I figure that out, I'm going to write some more code to get the objects to show up in Tiled as well.
Done:

Image

There's going to be some redundancy in the map files when converted like this because the original game has separate map and entity (aka object) files. This doesn't really matter however, because the maps and entities can be globally optimized when exporting them back to NES.

Next I'm going to start thinking about converting some of the entities (like the purple metal blocks and the immobile balls) to tiles.
User avatar
Dwedit
Posts: 4922
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Post by Dwedit »

With proper compression (and maybe WRAM), would this fit into 32k?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

I don't necessarily see why WRAM would be needed for decompression; each 320x240 pixel screen is 300 metatiles. There are about 62 screens in the map pieced together from screenshots, and I'd bet each can be compressed 2:1.
Post Reply