Join us on Discord!
Started by mfgreth, October 07, 2014, 05:43:55 AM
Quote from: Nicole on October 08, 2014, 03:12:36 AMI've got a feeling that the Japanese stuff in particular will prove useful for actually creating a level editor, but the fact that most of it's in Japanese makes things somewhat tedious.
Addr FieldType No. MusicType ... HW WtrType Time Next00: $98:a10e Riverside F00 Riverside f0 01 02 e6 5:00 F01 F01 F01 F01 01: $99:b08a Riverside F01 Riverside f0 01 02 e6 5:00 F02 F02 F02 F02 02: $97:b403 Riverside F02 Riverside e8 01 02 e6 5:00 F03 F05 F05 F05 03: $97:d58e Seaside F03 Seaside f0 01 03 e6 4:00 F04 F04 F04 F04 04: $85:f000 Seaside F04 Seaside f0 01 03 e6 4:00 F39 F39 F39 F39 05: $93:c49c Riverside F10 Riverside f0 01 02 e6 4:00 F09 F09 F09 F09 06: $8b:e0ff Seaside F06 Seaside f0 01 03 e6 4:00 F07 F07 F07 F07 07: $8a:e485 Seaside F07 Seaside f0 01 03 e6 6:00 F08 F08 F08 F08 08: $9b:d1e3 Riverside F08 Riverside e8 01 02 e6 4:00 F10 F10 F10 F10 09: $9a:ad8c Riverside F11 Riverside e8 01 02 e6 5:00 F08 F20 F12 F12 0a: $92:f0fd Seaside F14 Seaside e8 01 03 e6 4:00 F11 F11 F11 F11 0b: $98:908a Waterfall F15 Waterfall f0 01 02 e6 4:00 F55 F59 F59 F59 0c: $9a:9e6e Waterfall F12 Waterfall f0 01 02 e6 5:00 F63 F63 F63 F63 0d: $99:dfc9 Waterfall F17 Waterfall f0 01 02 e6 5:00 F14 F28 F28 F28 0e: $99:8000 Seaside F20 Seaside e8 01 03 e6 5:00 F15 F15 F15 F15 0f: $9a:e6cd Seaside F21 Seaside e8 01 03 e6 4:00 F16 F16 F16 F16 10: $95:e923 Mt.Stream F22 Mt.Stream f4 01 02 e6 4:00 F51 F22 F22 F22 11: $8c:f27d Seaside F26 Seaside e8 01 03 e6 4:00 F52 F50 F50 F50 12: $91:e749 Riverside F18 Riverside e8 01 02 e6 4:00 F51 F51 F51 F51 13: $93:ecae Riverside F38 Riverside e8 01 02 e6 4:00 F54 F54 F54 F54 14: $97:a2fa Seaside F30 Seaside f0 01 03 e6 4:00 F49 F60 F60 F60 15: $8b:f3da Seaside F45 Seaside e8 01 03 e6 5:00 F45 F45 F45 F45 16: $9a:cb44 Mt.Stream F24 Mt.Stream f4 01 02 e6 5:00 F61 F43 F43 F43 17: $97:f320 Mt.Stream F35 Mt.Stream f4 01 02 e6 5:00 End End End End 18: $92:e10e Riverside F05 Riverside f0 01 02 e6 4:00 F06 F06 F06 F06 19: $96:f214 Wharf F48 Wharf e8 01 03 e6 5:00 F62 F62 F62 F62 1a: $9a:8f3a Wharf F47 Wharf e8 01 03 e6 5:00 F40 F40 F40 F40 1b: $99:ef2e Ocean F52 Ocean e8 01 03 e6 5:00 F48 F48 F48 F48 1c: $9a:d927 Mt.Stream F42 Mt.Stream f4 01 02 e6 6:00 F18 F46 F46 F46 1d: $99:9032 Ocean F34 Ocean e8 01 03 e6 5:00 F38 F38 F38 F38 1e: $98:f1cd Ocean F50 Ocean e8 01 03 e6 5:00 F58 F58 F58 F58 1f: $99:a063 Riverside F43 Riverside e0 01 02 e6 5:00 F60 F60 F60 F60 20: $8e:f015 Seaside F57 Seaside f0 01 03 e6 5:00 End End End End 21: $91:f5f3 Ocean F55 Ocean e8 01 03 e6 5:00 End End End End 22: $9a:bc97 Mt.Stream F33 Mt.Stream f4 01 02 e6 5:00 F53 F53 F53 F53 23: $96:bccd Mt.Stream F31 Mt.Stream f4 01 02 e6 8:00 F57 F57 F57 F57 24: $9a:8000 Mt.Stream F23 Mt.Stream f4 01 02 e6 5:00 F37 F37 F37 F37 25: $98:d252 Mt.Stream F28 Mt.Stream f4 01 02 e6 4:00 End End End End 26: $98:e293 Mt.Stream F37 Mt.Stream f4 01 02 e6 4:00 F22 F22 F22 F22 27: $97:c4d5 Waterfall F41 Waterfall f0 01 02 e6 5:00 F43 F43 F43 F43 28: $96:ceed Waterfall F16 Waterfall f0 01 02 e6 5:00 F13 F13 F13 F13 29: $96:aa70 Waterfall F29 Waterfall f0 01 02 e6 5:00 F44 F44 F44 F44 2a: $8f:ec7e Wharf F46 Wharf e8 01 03 e6 5:00 F41 F41 F41 F41 2b: $87:f000 Wharf F51 Wharf e8 01 03 e6 5:00 F62 F62 F62 F62 2c: $89:f8e8 Mt.Stream F40 Mt.Stream f4 01 02 e6 4:00 F38 F38 F38 F38 2d: $99:c092 Riverside F49 Riverside f0 01 02 e6 6:00 F42 F42 F42 F42 2e: $9b:994a Seaside F25 Seaside f0 01 03 e6 4:00 F18 F56 F56 F56 2f: $90:f69c Wharf F56 Wharf e8 01 03 e6 6:00 F47 F47 F47 F47 30: $9b:b9c7 Ocean F36 Ocean e8 01 03 e6 8:00 F42 F36 F36 F36
Addr FieldType No. MusicType ... HW WtrType Time Next05: $93:c49c Riverside F10 Riverside f0 01 02 e6 4:00 F09 F09 F09 F09
09: $9a:ad8c Riverside F11 Riverside e8 01 02 e6 5:00 F08 F20 F12 F12
19: $96:f214 Wharf F48 Wharf e8 01 03 e6 5:00 3e 3e 3e 3e
2f: $90:f69c Wharf F56 Wharf e8 01 03 e6 6:00 2f 2f 2f 2f
Quote from: badlose on November 21, 2014, 07:27:38 PMUnused/different behavior enemies from the /vr/ thread:https://www.youtube.com/watch?v=4SLTEzKCmPshttps://www.youtube.com/watch?v=mgMI4AApyLEhttps://www.youtube.com/watch?v=XjPet34iXMghttps://www.youtube.com/watch?v=vpj3WU_Y2Pw
QuoteIf you're still lost on that decompression problem, I can take a crack at it. I'll need you to do the following:1. Put a read breakpoint on the map data, just like you said you did in the want ad.2. When you hit the breakpoint, hit "step out". Write down the offset of the instruction you step out onto.3. Reset the game and disable the first breakpoint. Set execute breakpoints for the offset you wrote down and that offset - 2.4. When you reach the breakpoint (even if it's before you expect it to happen), enable "trace once", "tabbed output", "squelch", and "cpu tracing".5. Click run; you will reach the second breakpoint pretty much immediately. Disable "cpu tracing"; there should be a text file near your rom called "name-of-rom0000000.log" or something like that.6. Send me that file. Any other information, e.g. notes on addresses and what they're used for, could be helpful, but if I need something I'll ask.7. Wait.8. ...9. Profit!The trick with really abstract disassembly (like compression or decompression routines) is to go through the routine and translate it instruction by instruction into a language you (and humans in general) understand better. You don't necessarily have to finish & compile & emulate the routine (though it helps for error checking), you just come to a much better understanding of what's doing what as you translate it. That's what I did when I was reversing decompression in Brandish 2, anyway, and apparently it worked out.Regards,Dave Handsqykly@gmail.com
QuoteThank you for your interest. Someone already dug into the routine and we've got a somewhat loose wiki under development. You can check it and probably contribute if you want to here.We haven't done much progress. I guess the original supporter lost interest and I really can't help that much. :CIf you know a ambitious ROM hacker, I'm willing to pay 100 euros to anyone who develops a functional level editor for the game.
QuoteYou may be in luck; I am a stupidly ambitious rom hacker drawn to seemingly lost causes, and I need money. When you say "functional level editor", what are the qualifications? Technically, you can edit whatever you want with a hex editor, but I'm guessing you'll want something more task specific. Do you just need to be able to pick which tile goes where, then compress it and shove it in an IPS patch? Or do you need other stuff like events, dialogue, some tools to see how far you can jump, etc? Do you need to be able to load levels from the rom? Do you need to be able to access (or at least not overwrite) existing levels from the new level in-game?
QuoteOh! Intriguing. And yes, there are a few key requirements for the editor.-It must either have a separate/integrated level exporter/importer or a 'load everything on the fly'-kind of editor. Best case, both.-A level editor, by definition must correctly display decompressed graphics, either straight from the ROM or from decompressed graphics files.-It must have a physmap editor, a tile editor and sprite position/type editor as well as starting point and tide editor. This is a given.-It must have a header editor for each individual level.-The editor must be open-source.Those are the absolute minimum requirements. Might be a tough job since to my knowledge, the wiki is incomplete and on a hiatus, so you might have to dig deeper to the compression routines yourself.These are not required, but would be fantastic to have:-It should be cross-platform-It should have a credits editor-It should have a condition editor for 'how many enemies must be killed until door opens' (if such conditions exist. I'm not sure if it's already defined in the level headers.)Thank you for your interest. Of course, I understand if the requirements don't meet your standards but thanks so much either way!
QuoteI went ahead and finished the work on the compression format; it's on the wiki. It's actually quite similar to the compression I encountered on the Brandish 2 splash screen, though its use of intermittent callbacks like coroutines was an interesting twist.I need to know how well the "physmap" data is understood and how much tile data is mapped out in order to decide how I'll prioritize this project. I have a website (play5ong.com) that needs debugging work before I start collecting ad revenue from it, but if the tile data for this game, the header format, and the physmap don't need to be reversed from scratch, I can do this fast enough to not go broke and lose my server. Otherwise, I really need to get 5ong running, and this will need to wait a bit. Honestly, I love reversing engineering, tool-building, and the SNES, so I'd rather do this, but broke is broke =(.Do you have a particular platform or language in mind? I've been writing nothing but HTML5 & JS for a while, and it would really make a lot of UI stuff easy to make the level editor as a web or browser app, and that would necessarily be cross platform and open source. It might be a little slower than a native code or java application, but it would work, and it could be done in a reasonable time frame.
QuoteOkay, re-allocation is done forever, and compression and decompression were both thoroughly tested by decompressing every map, recompressing it, decompressing it again to compare to the original decompressed version, then re-allocating all of them into the space they originally filled. Back to the UI controller code for me.Have you heard anything from Karethoth regarding his continued participation in the project? I still have a couple of things it would be really cool to have tested, by someone who isn't me.
Quote from: Naulahauta on November 19, 2015, 05:35:47 AMMy contributions include the unused enemies mentioned earlier, comprehensive Sprite rips, Map rips and the Atlas vid. I hereby give permission for Kawasefan.net to use and host all of the media.
Quote from: Naulahauta on November 19, 2015, 05:35:47 AMI also made a ROM hack that links all levels together, removes the 30-minute rule and implements the unused enemies in some levels, but I made that as a /vr/-only novelty and I no longer have the link. I never even made a patch, I simply posted the .smc. Someone might have it though.
4096 tiles per fieldTiles are made up of 2 bytes: a 1 byte tile type and a 1 byte tile propertytile types are the tile # in the bankThe algorithm reads bytes 1 at a time.Every read of a POS byte sets a counter equal to 8.This counter allows to read 8 non-POS bytes before having to read another one.The POS byte tells where the position(s) of a LZ byte(s) is/are via a bit set.If a non-POS byte is read, the counter is decremented by 1. EXCEPTION: if a LZ byte that is read has 0 for the left 4 bits, the counter is not decremented, and is only decremented by 1 after the next byte is readThe leftmost bit is byte 1, the rightmost bit is byte 8.To end decompression, read #$00 four times when a POS bit is setThe LZ bytes copy data from behind it.LZ byte: TTTTLLLLT: total amount of bytes to place (+1) 0bTTTT + 1 If TTTT is 0, the byte after the LZ byte is how many bytes to place.L: amount of unique bytes to copy from behind the LZ byte. 0b10000 - 0b0LLLL
Quote from: Naulahauta on November 23, 2015, 07:18:50 AMIt's simple really.
Quote from: Commando125 on December 09, 2015, 09:02:07 AMSince the tiles that can be used can be easily changed per level, I can't see pre-defining palettes or formations happening. The tiles would be in a different position for every bank on every stage.
QuoteI am rewriting/porting the editor from Python to C# .NET with WPF. I think the GUI will be a lot better, along with a possible performance increase, because Python's UI options are terrible (you have to convert an image to another image to be able to display it on the UI).
Quote from: Commando125 on December 09, 2015, 12:17:34 PMI would have to switch from WPF to support it on other operating systems, but it doesn't seem too bad to switch to Windows Forms or GTK#.
QuoteThe physmaps in the ZSTs are 72 rows, while your editor shows only 64 rows. Which one is correct?
QuoteIt's almost exactly like your editor shows the bytes but, for example, your ladders are "01 00" while the ZST's ones are "01 03". Also, the trajectory of the rising platforms is a bunch of "03 03 03 03" 's in the ZST, but "07 00 03 07" and "06 00 03 07" in your editor.
QuoteI just need a reliable way to get the raw byte dumps of the physmaps so I can make direct comparisons and figure out what tiles are what.
QuoteAs for the User Interface, here's my plan. VIDEO LINK. Again it's a bit shoddy vid at parts but you probably get the point – the physmap editor would work exactly the way the field editor does, but with its own separate annotated pictogram set with physical tile representations from $00 to $FF.
QuoteI'm not sure how to implement it but I thought maybe adding a raw access method to the bytes could be useful too, but it's shown only briefly.
QuoteI also added a grid and a new field, the scratchpad, where the user could construct their own tile/phys arrangements for easy access and without polluting the level itself.
QuoteNow that the air tiles are 'transparent', erasing large structures becomes a chore because I can't simply copy a cluster of 'air' and paint over stuff with it
QuoteNothing updates until I let go of my right/left button. When I drag the area I wish to select, I see the light box over the area only when I let go of the left button.
QuoteWhen I try to paint over the level with a tile cluster selected, it only lays down it once even if I hold the right button.
QuoteWhen I've selected the cluster, moving around doesn't give a preview of how it will look, so I have to commit the cluster to see how it looks in all cases.
QuoteI got a crash when I entered things I shouldn't have entered to the "Palette" field.
Quoteevery case that the user can undo from and how to store past actions from the user as well as the data from before
QuoteWhat I forgot to show in the video is that if you've enabled simulatenous physmap and tilemap editing and wish to work with tiles instead of tile clusters, you would have to pick both, the tile from the tileset and a pictogram from the physset. Selecting a new tile would still keep the phys prop selection, and vice-versa.
QuoteUsing a breakpoint-enabled emulator is a chore because I'm on a Mac, but if I virtualise/use WINE I can probably make Geiger's SNES9X debugger work.
QuoteDo you have a specific order in which you want the editor features done?
Quote from: Commando125 on January 19, 2016, 08:21:55 AMHeader bytes $14-$1A seem to be object types for tiles $01-$07. It seems to affect tiles $40-$47 for moving/death/ice, maybe $39-3F.