It is currently Tue Oct 16, 2018 7:41 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 174 posts ]  Go to page 1, 2, 3, 4, 5 ... 12  Next
Author Message
 Post subject: Streemerz NES port
PostPosted: Fri Mar 09, 2012 4:12 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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.

Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 09, 2012 8:33 am 
Offline
User avatar

Joined: Sat Mar 26, 2011 1:06 pm
Posts: 79
Location: Germany
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"?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 09, 2012 8:52 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20660
Location: NE Indiana, USA (NTSC)
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.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 09, 2012 10:22 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 1:58 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 2:12 am 
Offline

Joined: Wed Mar 09, 2005 9:08 am
Posts: 418
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 :)


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 4:40 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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:
{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']}


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 11:20 am 
Offline

Joined: Tue Jul 12, 2011 10:58 am
Posts: 274
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


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 12:32 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20660
Location: NE Indiana, USA (NTSC)
In this post, 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.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 1:41 pm 
Offline
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 10893
Location: Rio de Janeiro - Brazil
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.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 2:09 pm 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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...


Top
 Profile  
 
 Post subject:
PostPosted: Sat Mar 10, 2012 2:44 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 11:46 am
Posts: 101
Location: Stockholm, Sweden
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.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Mar 11, 2012 11:30 am 
Offline
User avatar

Joined: Mon Jan 03, 2005 10:36 am
Posts: 3132
Location: Tampere, Finland
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.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Mar 11, 2012 12:17 pm 
Offline
User avatar

Joined: Fri Nov 19, 2004 7:35 pm
Posts: 4093
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!


Top
 Profile  
 
 Post subject:
PostPosted: Sun Mar 11, 2012 12:32 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20660
Location: NE Indiana, USA (NTSC)
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.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 174 posts ]  Go to page 1, 2, 3, 4, 5 ... 12  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 4 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