SF2 Disassembly Tool Suite

PostPosted: Mon Feb 13 2017 1:53pm
by Wiz
Here is a thread to share current releases, work in progress and the roadmap of the tools I'm slowly (but surely ! ;)) building with only one distant goal in mind : to play whole new Shining Force adventures !

A few months ago I wanted to explain the whole creation process I have in mind with tools deduced from the game's data structures, and then I got lost into real life again, so this time I'll just make a quick list of existing tools and enrich the original post later.


Just one quick detail to make things clear :
These tools are intended to be used on the game's disassembly, not on the ROM directly.
Current and future "low-level" tools may allow to work on ROMs when possible, because handling basic assets is still feasible quite easily, as long as original data length is not exceeded.
However, direct ROM hacking is not flexible enough to handle "high-level" data structure editing.
This is why most future and more complex tools will work exclusively with a disassembly.
Some people may find it harder to use than just hacking a ROM file, but this is well worth the effort.
The sonic hacking community is the best example there is to show how powerful this approach can be.
With the disassembly, anything will be possible. We're the developers now ! :)


Disassembly quick start guide :
WARNING: SPOILER!


Tools :
Please note that all of these tools also work as Java APIs for anybody to include them in their own tools.

SF2TextManager : https://github.com/ShiningForceCentral/SF2TextManager/releases/latest
WARNING: SPOILER!

SF2VWFontManager : https://github.com/ShiningForceCentral/SF2VWFontManager/releases/latest
WARNING: SPOILER!

SF2PaletteManager : https://github.com/ShiningForceCentral/SF2PaletteManager/releases/latest
WARNING: SPOILER!

SF2GraphicsManager : https://github.com/ShiningForceCentral/SF2GraphicsManager/releases/latest
WARNING: SPOILER!

SF2IconManager : https://github.com/ShiningForceCentral/SF2IconManager/releases/latest
WARNING: SPOILER!

SF2MapSpriteManager : https://github.com/ShiningForceCentral/SF2MapSpriteManager/releases/latest
WARNING: SPOILER!

SF2BackgroundManager : https://github.com/ShiningForceCentral/SF2BackgroundManager/releases/latest
WARNING: SPOILER!

SF2PortraitManager : https://github.com/ShiningForceCentral/SF2PortraitManager/releases/latest
WARNING: SPOILER!

SF2BattleSpriteManager : https://github.com/ShiningForceCentral/SF2BattleSpriteManager/releases/latest
WARNING: SPOILER!

SF2GroundManager : https://github.com/ShiningForceCentral/SF2GroundManager/releases/latest
WARNING: SPOILER!

SF2WeaponSpriteManager : https://github.com/ShiningForceCentral/SF2WeaponSpriteManager/releases/latest
WARNING: SPOILER!

SF2BattleSpriteAnimationEditor : https://github.com/ShiningForceCentral/SF2BattleSpriteAnimationEditor/releases/latest
WARNING: SPOILER!

SF2MapLayoutManager : https://github.com/ShiningForceCentral/SF2MapLayoutManager/releases/latest
WARNING: SPOILER!


TODO roadmap with future tools to give a global view of the tool suite architecture.

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Feb 13 2017 7:13pm
by SirHedge
Is there a good online tutorial on how to read and reassemble disassembly?

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Feb 13 2017 7:57pm
by Wiz
Good question, SirHedge !
It's not so intuitive after all :) ... and I must admit I didn't take the time to write it down in details.
Currently the only details I remember are in SF2DISASM's main README, here :
https://github.com/ShiningForceCentral/SF2DISASM/blob/master/README.md
Re-assembly : By providing the original US rom file of the game, one will be able to use the provided tools in order to :

with split/split.bat, split the original rom file into a lot of small binary data files, to extract data chunks which are not included in the disassembly
with build/build.bat, assemble the game from its disassembly and the extracted data chunks The assembled game will be perfectly identical to the original one.


Let's see if these more detailed instructions are good enough :

1. Get SF2DISASM :
- Get the latest revision with the repository's download link :
https://github.com/ShiningForceCentral/SF2DISASM/archive/master.zip
(In a near future there may be proper releases here : https://github.com/ShiningForceCentral/SF2DISASM/releases/latest)
- Unzip it anywhere you want
(not sure if space characters in path will work though)

2. Split :
- Put the original US ROM in BIN format (not SMD) in the split/ directory, with the following filename : sf2.bin
- Then run split/split.bat. This may take from a few seconds to around a minute.
This will split the ROM's original data in thousands of tiny binary files in the disasm/ directory.

3. Build :
- Also put sf2.bin into the build/ directory, as a comparison reference for new builds.
- Run build/build.bat. This may take from a few seconds to a few minutes.
This will assemble the game from the content of the disasm/ directory only.
With the original content of disasm/, the resulting ROM file is supposed to be a bit-perfect replica of sf2.bin, hence the comparison at the end of the build to make sure of SF2DISASM's integrity.
When disasm/'s content has been modified, the build will naturally notice differences compared to sf2.bin and you can ignore it.

4. Play with your disassembly !
According to your understanding of how ASM 68K works and how data is organized, you can modify the game's content step by step and see if/how it builds.
Just be aware that extensive modifications (with more content than original content) imply to extend the ROM's layout from a 2MB ROM to a 4MB one, and this involves a bit of ASM hacking which should be covered in a future tutorial, I guess. :)



Please guys tell me if that's enough instructions here, and then I'll put it in the original post.

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Feb 14 2017 9:41am
by greyskies
Any hints what the "Graphics Manager" is going to be? :D

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Feb 14 2017 10:29am
by Wiz
:shifty: This is the generic low-level layer for read-decode/encode-write functions, for any type of graphical data, compressed or not.
This layer manipulates graphics data as an array of 8x8 tiles associated to a palette loaded with SF2PaletteManager, which is included as an API.
This array will then be transmitted to future higher-level tools which will arrange/display/export/edit graphics in a more specific context, with the corresponding tile layout :
SF2IconManager, SF2TilesetManager, SF2SpriteManager, SF2BattleSpriteManager, SF2PortraitManager, SF2BackgroundManager, SF2SpecialScreenManager ...
... which then could be used by highest-level tools to display a whole map, cutscene, battle with SF2MapEditor, SF2CutsceneEditor, SF2BattleEditor, SF2BattleSpriteAnimationEditor, SF2SpellAnimationEditor, SF2ItemEditor, SF2CharacterEditor ...
But we're still very far from that, and I'm really slow compared to rubixcuber or BNC, so we're talking about years of good use of my precious free time here.
Don't expect anything near the Caravan's possibilities anytime soon ! ;)

Currently SF2GraphicsManager just reads uncompressed data, which was quite easy since it's just 4BPP with nothing special. I might put it in good use in an SF2IconManager as a proof-of-concept first, and then get into compressed graphics, which I expect to be quite hard to figure out and implement :damnit: ...

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Feb 14 2017 3:27pm
by greyskies
I see! Yeah, I know what you mean, it took me years just to get a hack finished. Just know that your effort is being appreciated ;)

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Feb 20 2017 2:14am
by SirHedge
Thanks for the further information Wiz. I was actually talking about understanding what each chunk actually means, though. For example, is there something I can read that would explain what each of these lines mean?

Code: Select all
sub_234C8:
      
      movem.l d0-d2/a0-a1,-(sp)
      move.b  ENTITYDEF_OFFSET_FACING(a1),d6
      ext.w   d6
      move.b  byte_2353E(pc,d6.w),d6
      bne.s   loc_234DA
      addq.w  #2,d6

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Feb 21 2017 12:42am
by Wiz
Oh I see, you mean how to read assembly language, ASM 68K here.

I think I'll do some research to get the best introduction resources I can find about :
- A general overview of assembly language : the CPU's basic instructions to manipulate registers and memory locations.
- A specific overview of the Megadrive's hardware architecture around it's CPU : Motorola 68000.
- And then a reference to ASM 68K's language in the Megadrive's context : specific registers and memory addresses.
- ... And then, I should do a specific introduction to SFII's ASM, with a global view of the game's execution flow (main flow and technical interrupts after every frame), and detailed examples.

... actually, this deserves its own thread ! Not sure about when I'll have the time to do that, but I'll definitely do it if it can help people not to get too intimidated by the technical aspects of the disassembly !

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Feb 21 2017 5:03am
by SirHedge
I probably don't have time right now to understand a full rundown, unless it is as complex as I expect it to be (though I won't say no to it being available -- I just don't want to feel guilty that I'm not taking advantage of it immediately). What I'm looking for now is more just enough to make basic sense of what I'm looking at and the ability to identify simple changes. For example, I would like to make it so that items always cracked on first use, but auto-repaired after battle. The first would be reasonably simple to do, I would think, and for all I know the second may not be as difficult as imagined. But getting some frame of reference for things like that would be helpful. Hopefully that makes sense.

Re: SF2 Disassembly Tool Suite

PostPosted: Sat Jul 15 2017 3:51pm
by Wiz
Quick bump to let you guys know that SF2GraphicsManager has been released with version 1.0.0 :
https://github.com/ShiningForceCentral/SF2GraphicsManager/releases/tag/1.0.0

Image

Original post updated.

Most graphics can now be edited with the proper use of this editor, which can be more or less tedious depending on what you want to edit and how.
This is why I'm starting to develop more specific tools for specific graphic objetcs : SF2MapSpriteManager and SF2IconManager already exist, and others will follow :
- SF2PortraitManager
- SF2BattleSpriteManager
- SF2WeaponSpriteManager
- SF2BackgroundManager
- SF2GroundManager
- SF2SpecialScreenManager (title, witch, etc.)
Then I'll think about map tilesets and map content more globally, when the time comes.

For curious people, here are the graphics compression details :
- Stack compression : https://github.com/ShiningForceCentral/SF2DISASM/blob/master/disasm/data/graphics/compression.txt
- Basic compression : https://github.com/ShiningForceCentral/SF2DISASM/blob/master/disasm/data/graphics/mapsprites/mapsprites.txt

Re: SF2 Disassembly Tool Suite

PostPosted: Sun Jul 16 2017 10:00am
by greyskies
Could you give a more detailed (read: more noob-friendly) description what this does and how to work with it? :)

For example, if I wanted to pull out the endingkisstiles-"picture" of the ROM as displayed in the image above, what would I have to do? I am assuming "entering the correct palette/graphics offset data" before importing, but if so, how do I know these?

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Jul 17 2017 2:14am
by Wiz
greyskies,

With this tool there are two approaches :
- Either keep the classic ROM approach and apply specific offsets and lengths, which you have to know indeed.
You can find this kind of information from this ROM map, for example :
https://github.com/ShiningForceCentral/SF2DISASM/wiki/ROM-Map
But this ROM Map is not exhaustive enough to give you the offset and length of every piece of compressed tiles individually, so this method may be tedious ...
- Or use a disassembly as explained in my first post, and open binary files containing graphics data.
Once again, you have to know which files contain graphics, and if they are compressed or not, so this still implies some technical knowledge, but well, let's summarize the main graphic assets :
Icons are not compressed, map sprites use basic compression, and almost everything else use stack compression : map tilesets, title screen, witch screen, battle sprites, battle scene backgrounds, grounds, weapons, etc.

But even when you know this, another aspect comes into play : tile layout.
Depending on graphic assets, the tiles will not be arranged in the same layout.
This is something that SF2GraphicsManager is not managing, as it only loads graphics as an array of tiles.
You can input an image witdh (in number of tiles), but in most cases this will not be enough, as tile layouts can be quite complex.
Battle scene background layout for example, arranges its 384 tiles in 4*4 blocks and then arranges these blocks in 4*3 screen halves :
WARNING: SPOILER!

... hence what you get when loading a background from SF2GraphicsManager :
(tricky use of the ROM import for a disassembly binary file, as background files actually contain more than a compressed tileset : 3 pointers, one palette, 2 tilesets)
Image
You can always export those tiles in PNG files if you're able to work on them like that, but that's not really practical. :D

Actually, the ending kiss graphics are just a lucky find : they are stored in a very simple way, which explains why they appear properly arranged here.

... so yeah, unless you know what you're doing, you may prefer to wait for more specific tools ! :)
Just be aware that these specific tools will be disassembly-oriented only.

And talking about specific tools ... I just uploaded SF2BackgroundManager. OP updated ! :)
Image

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Jul 17 2017 9:56am
by greyskies
welp, then I guess I will have to learn how this disassembly thing works sometime. Thanks for your explanation!

Also, it is great to see that you're on a SF2-tool-creation roll! :)

Re: SF2 Disassembly Tool Suite

PostPosted: Thu Aug 31 2017 10:34pm
by Wiz
Just got back from vacation, quick recap of recent progress :

- SF2DISASM can now be built in two ways :
build.bat : builds a bit-perfect replica of the original game. This acts as a non-regression test when SF2DISASM is updated, but you can also use it to build modified 2MB ROMs if you want.
buildexpanded : builds a 4MB ROM with most data structures moved to get a lot more free space. SRAM bankswitching is managed.
https://github.com/ShiningForceCentral/SF2DISASM/tree/master/build

- Cutscenes are now relying on assembler macros to be easier to read (and create ! ;)):
https://forums.shiningforcecentral.com/viewtopic.php?f=5&t=41301

- SF2PortraitManager-1.0.0 released :
https://github.com/ShiningForceCentral/SF2PortraitManager/releases/latest
Image

I'll probably start SF2BattleSpriteManager next while I'm on graphic stuff.

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Sep 01 2017 1:26am
by DiegoMM
Awesome!
Now we can change the blinking and talking animation?
How dummy friendly it will be to use these tools?

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Sep 01 2017 9:19am
by Wiz
Yes, now you can ! :)

But I'm afraid my tools will never be "dummy friendly" as you said.
At the moment I'm only focusing to make stuff work, with only very basic ergonomic features.
So for this portrait GUI, no fancy eye/mouth editor or previews at the moment, only the raw data you can edit when you properly understand it.

Quick explanation :
Eye tiles and mouth tiles are a list of portrait tiles that are swapped with alternative tiles.
X/Y represent the original portrait tiles coordinates with 0/0 being at the upper left side of the portrait.
X'/Y' are the alternative tiles coordinates.
Alternative tiles are stored from coordinates 6/0 to 7/7, so each portrait can have up to 16 alternative tiles shared between eyes and mouth.
You can create new tile entries in the list by editing the next line having "null" values.
You can also remove entries by removing integer values.
But valid entries have to be in consecutive order from the beginning : for both lists, the editor will stop exporting entries at the first invalid one (valid : 4 integer values).

Re: SF2 Disassembly Tool Suite

PostPosted: Sat Sep 02 2017 11:17am
by DiegoMM
I see, its good enough for me. I think if you make a help file explaining the more complex stuff it will help a lot.
Im really happy with all the progress.

All this managers will allow import features to the game, like new weapon sprites or just edit existing ones?

Re: SF2 Disassembly Tool Suite

PostPosted: Sat Sep 02 2017 12:29pm
by Wiz
These tools don't manage the actual inclusion into the game :
They simply allow to work on individual assets by converting them from the game's binary format to a more editable format, and vice versa.

To manage new asset inclusion in the game, you can rely on the corresponding "entries.asm" file which should be in the same disassembly directory.
For example : data\graphics\battles\weapons\entries.asm
WARNING: SPOILER!

To add a new entry :
- add, for example, "dc.l WeaponSprite23" at the end of the pointer table (first list)
- then add "WeaponSprite23: incbin "data/graphics/battles/weapons/weaponsprite23.bin"" at the end of the weapon sprite data chunk (second list)

Also, be aware that "WeaponSprite23" is only an ASM label, with no name or index computation.
This is only a naming convention I set, so you can use more specific names if you want.
Same goes for the binary files : it's just a basic naming convention, no need to follow it !
Example :
- "dc.l DiegoMMsAwesomeSwordv01"
- "DiegoMMsAwesomeSwordv01: incbin "data/graphics/battles/weapons/diegommswordv01.bin""
I believe that would be an easier way of manipulating new assets.
Even more if people want to share their work in the form of individual assets for people to freely use them (portraits, battle sprites ... even whole maps !)

Of course though, no matter the naming convention, the asset's index still depends on its declaration position in the pointer table. ;)
So "DiegoMMsAwesomeSwordv01" can be used in other data structures by pointing to it with index 23 ($17 in hex).

Please tell me if anything is not clear enough, I'll try to develop my answers and share them as a more general documentation at some point, as this applies to most of the game's assets.


Edit :
Just wanted to notify about SF2BattleSpriteManager's first release :
https://github.com/ShiningForceCentral/SF2BattleSpriteManager/releases/latest

Image

Edit :
Thanks greyskies ! :-D

Re: SF2 Disassembly Tool Suite

PostPosted: Sat Sep 16 2017 5:12pm
by greyskies
Ima put a short "awesome!" here so your next update doesn't have to be an edit of a previous post, causing lazy people like myself to miss it ;)

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Sep 26 2017 8:31pm
by Wiz
Two new graphics tools :

- SF2GroundManager :
https://github.com/ShiningForceCentral/SF2GroundManager/releases/latest
Image

- SF2WeaponSpriteManager :
https://github.com/ShiningForceCentral/SF2WeaponSpriteManager/releases/latest
Image

Not sure about what to do next.
Editing spell graphics don't make much sense without extensive ASM programming so I'll put it aside for the moment.
Maybe it's time to look further into maps, now !

EDIT :
Oh now I know ! I'm going to work on battle sprite animations !
SF2BattleSpriteAnimationManager, here I come. Let's hope I can make nice previews :)

Re: SF2 Disassembly Tool Suite

PostPosted: Sun Oct 01 2017 5:25pm
by Earl
Oh, that would be fantastic. Getting the weapon to sit properly in a hand without a preview is such obnoxious trial and error : D

Re: SF2 Disassembly Tool Suite

PostPosted: Wed Oct 04 2017 4:33pm
by Wiz
WARNING: SPOILER!

EDIT : Nevermind, just found out ! Battlesprite frame value $0F means you keep using the same Battlesprite frame from previous animation frame.

Here are BNC's notes about battlesprite animations :
EDIT : updated with my discoveries
Code: Select all
------ Ally Battle Sprite Animation Format

Byte 0      number of frames in attack anim
Byte 1      frame # to start spell anim idx
Byte 2      spell anim idx to play during attack, FF for none
Byte 3      whether or not to terminate spell anim when battle sprite anim finishes
Byte 4      weapon sprite frame for idle animation frame 1
Byte 5      weapon sprite z-index for idle animation frame 1
Byte 6      weapon sprite x offset for idle animation frame 1
Byte 7      weapon sprite y offset for idle animation frame 1

Frame Entries
First entry can be idle anim frame 2 if current battle sprite has one.
(Some battlesprites seem to have an idle frame 2 even when it's identical to idle frame 1 !)

    Byte 0      battlesprite frame idx (if value $0F, then keep using battlesprite frame from previous animation frame)
    Byte 1      number of display frames to display (60 frames per second)
    Byte 2      battle sprite x offset
    Byte 3      battle sprite y offset
    Byte 4      weapon sprite frame (0 = up, going clockwise, up to 3; 0x10 = flip horizontally, 0x20 = flip vertically)
    Byte 5      weapon sprite z-index (1 = under character, 2 = over character)
    Byte 6      weapon sprite x offset
    Byte 7      weapon sprite y offset
   
Note : Weapon sprites offsets are relative to current battlesprite position.


In any case I'll release a W.I.P. version of SF2BattleSpriteAnimationEditor tonight for people to play with it and help me figure out the remaining unknown bits.

Earl you'll be glad to know that the preview feature is quite effective, with immediate update for any property change. :)

Edit :
Got to manage a thing or two (allies with no weapons, preview animation ...) and I'll do a first 0.1.0 release.
Enemy animation will have to wait a bit ! :)

Last edit for tonight :
OK, here it is, supposedly fully operational for ally battlesprites.
I'll work on enemy battlesprites next, and maybe a GIF export feature for fun.

https://github.com/ShiningForceCentral/SF2BattleSpriteAnimationEditor/releases/latest

Image

Also included in SF2DISASM now, in the intended folder : disasm\data\graphics\battles\battlesprites\.

Feedback is welcome, please tell me if anything is unclear or wrong.

Re: SF2 Disassembly Tool Suite

PostPosted: Thu Oct 05 2017 1:29pm
by DiegoMM
This frame for starting spell actually works? I see the logic here but I think in game the spell animation is always the same as attack animation.

Re: SF2 Disassembly Tool Suite

PostPosted: Thu Oct 05 2017 2:38pm
by Wiz
Indeed the game seems to use the same battlesprite attack animation for a simple attack or a spell cast.
I believe it may be a matter of context :
- if it's an attack, then ignore spell-related properties.
- if it's a spell (or a special attack, I guess), then apply spell properties.

But I'll have to look further into it, I still don't know where the animations are linked to ally/enemy data.


EDIT :
New release with enemy support :
https://github.com/ShiningForceCentral/SF2BattleSpriteAnimationEditor/releases/tag/1.1.0
Image

Also included in SF2DISASM's last revision.

That should be enough for this tool now, I'll check what else I can do in terms of graphics-related tools before switching to map-related work.

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Oct 20 2017 2:41pm
by MXC
Great work :)

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Nov 20 2017 11:51pm
by Wiz
Thanks MXC !

And quick news just to let you guys know that I'm making progress in the map department :

Image

http://img110.xooimage.com/files/6/f/d/screenshot-2017-1...23.36.34-53798a2.png

Blocks and map layouts (with exploration flags) can now be decompressed and recompressed properly, so the technical ground is here and waiting to be used to its full potential with a proper GUI editor.

So I think the next step now is for me to literally copy BNC's nice map layout editor from The Caravan. :shifty:


EDIT 24/11 :
Basic editor features are implemented :
- Similar to The Caravan, left and right clicks act as block slots taken from the blockset and applied to the map.
- Middle click on the map allows to copy selected map block's graphics AND flags (obstructed, stairs, warp ...)
- Undo button which is quite convenient, I hope to find the way to implement a ctrl+z shortcut ASAP.
This is already a lot of fun to play with and I can't wait to release something with every flags managed properly ! :)

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Nov 24 2017 6:47pm
by greyskies
Yes yes yes! This is looking great!

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Nov 27 2017 11:52pm
by Wiz
Here it is, first map-related tool for SF2 Disassemblies : SF2MapLayoutManager-1.0.0 ! :)

https://github.com/ShiningForceCentral/SF2MapLayoutManager/releases/tag/1.0.0

Image

This may not mean much to anybody since The Caravan already does all that, but considering this relies on 3 compression schemes at the same time (graphics, blockset and layout), I'm really proud and relieved to have achieved those technical steps, with a lot of future tools which will benefit from it. :)

I included a little "Help" section inside, this time. Here's the current explanation :
WARNING: SPOILER!


This is a lot of fun to use, especially with the "section copy" feature when you drag and release the middle-click button.
EDIT : I'm still struggling with my shitty Java GUI coding skills so only the "Undo" button works at the moment, no "Ctrl+Z" shortcut yet I'm afraid. :damnit:

This release is included in SF2DISASM's last revision in disasm\data\maps\. (Download link)
Please, play with it and tell me if anything goes wrong.
Any feedback will be appreciated !

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Nov 28 2017 2:13am
by Corsair
Any idea if it'll handle the maps that, if edited in caravan make the game screwy?

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Nov 28 2017 1:41pm
by Wiz
Theoretically there should be no problem as these bugs were specific to The Caravan, I believe.

Let's have fun and make some checks !

Reminder of Stordarth's great research :
WARNING: SPOILER!


So according to Stor's summary :

1. Modified map 65 (intro cutscene castle map) with no problem :
WARNING: SPOILER!


2. Modified secret village map 23 ... and export crashes ! Woah :shock:
From a first quick analysis, it looks like this map's blockset has some blocks which point to a VDP tile outside from the map tilesets range ! It actually points to the last tile of the game's base tileset, just before the beginning of map tilesets, hence the "-1" value which neither The Caravan or SF2MapBlockManager could process properly.
Even without modification, producing the original blockset crashes.
I'll just make my code more secure for the moment, let's see ... OK, quick-fixed, I could save and re-open some edits making secret places more accessible.
I didn't test it ingame though, as I don't know how to visit the secret village quickly. Any suggestion is welcome !
WARNING: SPOILER!


3. Editing, saving map 25 and re-opening it works with no problem, though I can't quickly access Ketto to verify in game.

4. Same for map 38 which was ok with my edits, save and re-open.


Looks like all is OK now, I'll release a new version 1.0.1.
Let me know if something else is wrong with map 23, as I really don't know why such blocks would have any good reason to point to that empty last tile from the base tileset, and my quick-fix might not be the most robust solution to handle this map's particularities.

1.0.1 : https://github.com/ShiningForceCentral/SF2MapLayoutManager/releases/tag/1.0.1

SF2DISASM also updated.

Thanks for the good question, Corsair. ;)


EDIT :
I opened/edited/saved more than 25 maps and discovered a similar bug that I fixed.
I also decided to change the way input paths are organized to avoid having to input the same map id several times when all you need is to put it once and work in that same directory for everything. Now this is quite simple and efficient.

I built an expanded ROM with all the new maps, and everything seems to work like a charm, though I could only go check maps which are quickly available at the beginning of the game.

Hence, new release 1.1.0 !
https://github.com/ShiningForceCentral/SF2MapLayoutManager/releases/tag/1.1.0

EDIT : Tested on real hardware, no problem.
Next test : edit first battle map and see if Caravan still allows to edit the battle properly.

EDIT : It works ! The Caravan is able to edit battles of a disassembly build !
BNC, if you read this, well done for making The Caravan dynamic enough for such use case. :)
WARNING: SPOILER!


EDIT :
Fixed and polished file path management to process both absolute and relative paths seamlessly.
https://github.com/ShiningForceCentral/SF2MapLayoutManager/releases/tag/1.1.1

EDIT 07/12 :
I'm now making progress on SF2MapEditor which should allow to edit anything from the map entry structure : layout, exploration, block copies, items and animations.
Only items and animations remain to be implemented before I make my first release, hopefully in a few days.

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Dec 08 2017 7:57pm
by MXC
Don't forget that you can bump this topic after 24 hours of no additional response (you won't be able to again until someone else posts though) or that you can send me a Slack message to bump this thread :)

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Dec 11 2017 1:36am
by Wiz
Thank you for the tip MXC, I didn't know that !

Well, that should do for the moment with SF2MapEditor, I believe it to be operational-enough for me to share it and wait for possible bug-reports while I think about what to do next.
So here it is, release 1.0.0 !
https://github.com/ShiningForceCentral/SF2MapEditor/releases/tag/1.0.0

Image

As usual, also included in SF2DISASM's last revision :
https://github.com/ShiningForceCentral/SF2DISASM/archive/master.zip

I find it quite fun to use and I hope to have some feedback to make sure this is properly working for everybody. ;)

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Dec 11 2017 9:55pm
by greyskies
I will definitely try this out as soon as I've got some free time!

Re: SF2 Disassembly Tool Suite

PostPosted: Sun Mar 18 2018 9:14pm
by Wiz
Quick update to say that most of the graphics-related tools now support GIF format, along with PNG.

My own experimentations made me realize that while editing existing graphics could be quite simple (export, edit, import), importing brand new images can be really tricky, mostly because of one constraint : color index 0 must be kept for transparency only.

It looks like most image editing software don't care that much about giving control on that aspect, and PNG-8 (i.e. with indexed colors) seem to have not so much support compared to GIF, which has indexed colors by definition.

So yeah, even though PNG-8 is considered as the recommended format in general, GIF may still be a little more convenient to use, and BNC was absolutely right to keep using this format in the Caravan. :)

As usual, SF2DISASM has been updated with latest versions of all updated tools.

Re: SF2 Disassembly Tool Suite

PostPosted: Thu Mar 22 2018 10:57pm
by xenometal
I get an error when building the latest version.

Code: Select all
SN 68k version 2.53

D:\SF2DISASM-MASTER\DISASM\DATA\GRAPHICS\PORTRAITS\ENTRIES.ASM(77) : Error : Could not open file 'data/graphics/portraits/newportrait17.bin'
portrait17: incbin 'data/graphics/portraits/newportrait17.bin'
Errors during pass 1 - pass 2 aborted
Assembly completed.
1 error(s) from 228389 lines in 0.33 seconds

Re: SF2 Disassembly Tool Suite

PostPosted: Fri Jun 22 2018 11:25pm
by Wiz
Woah, sorry for that, and thank you for the feedback ! I just pushed the fix.

My working directory is a constant mess with experimentations here and there, and I may push wrong stuff from time to time without noticing ... so I really appreciate feedback if anything wrong happens or even simply if the 2MB build isn't bit-perfect ! ;)

I can't even check the bit-perfect build properly right now I'm afraid (yeah I don't even use branches, I'm a lazy Git user ! :D I really should start using that), so I hope that'll do the trick !


UPDATE :
Here's SF2BattleEditor-1.0.0 :
Image

You can edit :
- Basic map coordinates : map index, camera boundaries etc.
- Terrain data
- Ally and enemy spritesets along with AI regions and AI points.

Please note :
- Depending on your hardware, loading data can take a VERY LONG time, with the "Import" button stuck until everything is loaded. This is mainly because ALL mapsprites are pre-loaded. If this is really a problem for some people, please tell me and I'll work on optimizing this.
- Some parts of enemy data (including AI region types) still have to be properly labelled, formatted, or even just figured out first. Any help on understanding all of enemy data is welcome !
- Neutral entities cannot be edited from this tool. I may work on it but for the moment, editing the dedicated ASM file will do. (disasm/data/battles/global/battleneutralentities.asm)
- This first version's ergonomics are rough, editing stuff may be too tedious as is. I can't spend too much time on making this easy and funny to play with, so that will do the job for now, but any suggestion about reasonable ergonomic features will be taken into consideration. ;)

As usual, this is now available in SF2DISASM, in the "disasm/data/battles/" directory.


EDIT : Cannot bump the thread myself anymore, please someone post something ! :D

Music Banks are now parsed into ASM macros to describe the music commands :
https://github.com/ShiningForceCentral/SF2DISASM/tree/master/disasm/data/sound/musicbank0
Code: Select all
; ASM FILE music01.asm :
; 0x89C9..0x9FA9 : Music 01
Music_1:        db 0
      db 0
      db 0
      db 0C2h
      dw Music_1_Channel_0
      dw Music_1_Channel_1
      dw Music_1_Channel_2
      dw Music_1_Channel_3
      dw Music_1_Channel_4
      dw Music_1_Channel_5
      dw Music_1_Channel_6
      dw Music_1_Channel_7
      dw Music_1_Channel_9
      dw Music_1_Channel_9
Music_1_Channel_0:
        stereo 0C0h
        setRelease 01h
        vibrato 02Ch
              waitL 21
      mainLoopStart
      repeatStart
        inst 13
        vol 0Ch
              noteL D6,30
        vol 09h
              noteL D6,6
        vol 0Ch
              note  D6
              note  D6
              note  Ds6
        vol 09h
              note  Ds6
        vol 0Ch
              noteL Ds6,18
        vol 09h
              noteL Ds6,6
        vol 0Ch
              note  Ds6
        vol 09h
              note  Ds6
        vol 0Ch
      repeatSection1Start
              noteL C6,6
        vol 09h
              note  C6
        vol 0Ch
              noteL C6,18
        vol 09h
              noteL C6,6
        vol 0Ch
              note  C6
        vol 09h
              note  C6
        vol 0Ch
              note  F6
        vol 09h
              note  F6
        vol 0Ch
              noteL F6,30
        vol 09h
              noteL F6,6
      repeatEnd
      repeatSection2Start
              noteL C6,6
        vol 09h
              note  C6
        vol 0Ch
              note  C6
        vol 09h
              note  C6
        vol 07h
              note  C6
        vol 05h
              note  C6
        vol 0Ch
              noteL F6,60
        vol 09h
              noteL F6,6
        vol 07h
              note  F6
        inst 27
        vol 0Ah
              noteL A4,12
              noteL As4,6
              wait
              note  F5
              wait
              noteL E5,36
              noteL C5,6
              wait
              note  D5
              wait
              noteL A5,24
              noteL G5,6
              wait
              note  E5
              wait
              note  C5
              wait
              noteL D5,24
              waitL 12
              note  A4
              noteL As4,6
              wait
              note  F5
              wait
              note  E5
              wait
              noteL C5,12
              noteL D5,6
              wait
              note  A5
              wait
              noteL C6,36
              noteL G5,6
              wait
              noteL F5,48
              waitL 12
        inst 26
        vol 0Dh
              note  D5
              note  Ds5
              note  As5
              noteL A5,36
              noteL G5,12
              note  F5
              noteL C6,24
              noteL As5,12
              noteL A5,16
              note  G5
              note  A5
      countedLoopStart 1
              noteL As5,36
              noteL Gs5,6
              note  Fs5
      countedLoopEnd
              noteL As5,48
              note  C6
        vol 0Ah
              noteL C6,6
        vol 06h
              note  C6
        inst 13
        vol 0Ch
              noteL A5,12
              noteL As5,6
        vol 09h
              note  As5
        vol 0Ch
              note  F6
        vol 09h
              note  F6
        vol 0Ch
              noteL E6,36
              noteL C6,6
        vol 09h
              note  C6
        vol 0Ch
              note  D6
        vol 09h
              note  D6
        vol 0Ch
              noteL A6,24
              noteL G6,6
        vol 09h
              note  G6
        vol 0Ch
              note  E6
        vol 09h
              note  E6
        vol 0Ch
              note  C6
        vol 09h
              note  C6
        vol 0Ch
              noteL D6,24
        vol 09h
              noteL D6,6
        vol 07h
              note  D6
        vol 0Ch
              noteL A5,12
              noteL As5,6
        vol 09h
              note  As5
        vol 0Ch
              note  F6
        vol 09h
              note  F6
        vol 0Ch
              note  E6
        vol 09h
              note  E6
        vol 0Ch
              noteL C6,12
              noteL D6,6
        vol 09h
              note  D6
        vol 0Ch
              note  A6
        vol 09h
              note  A6
        vol 0Ch
              noteL C7,36
              noteL G6,6
        vol 09h
              note  G6
        vol 0Ch
              noteL F6,30
        vol 09h
              noteL F6,6
        inst 26
        vol 0Ch
              note  A6
        vol 08h
              note  A6
        vol 0Ch
              noteL A6,12
              note  G6
              note  A6
              noteL As6,24
              noteL A6,12
              note  F6
              note  G6
              note  As5
        vol 08h
              noteL As5,6
        vol 0Ch
              note  C6
              noteL C6,60
              noteL C6,6
              note  As5
        vol 08h
              note  As5
        vol 06h
              note  As5
        vol 0Dh
              noteL A5,12
              note  As5
              noteL F6,18
        vol 09h
              noteL F6,6
        vol 0Dh
              noteL C6,12
              note  D6
              noteL A6,18
        vol 09h
              noteL A6,6
        vol 0Dh
              noteL D6,12
              note  Ds6
              noteL D7,24
              note  C7
        vol 09h
              noteL C7,12
        vol 05h
              note  C7
        inst 27
        vol 0Ah
              note  Cs6
              noteL C6,6
              wait
              note  G5
              wait
              note  Gs5
              wait
              noteL Ds5,24
              noteL F5,6
              wait
              noteL As4,72
              noteL A4,24
              waitL 12
              note  G4
              noteL Gs4,6
              wait
              note  F5
              wait
              note  Ds5
              wait
              noteL As4,24
              noteL C5,6
              wait
              noteL Gs5,72
              noteL Fs5,24
              waitL 12
        inst 56
        vol 0Ch
              note  B5
              noteL As5,6
        vol 09h
              note  As5
        vol 0Ch
              note  F5
        vol 09h
              note  F5
        vol 0Ch
              note  Fs5
        vol 09h
              note  Fs5
        vol 0Ch
              noteL D5,24
              noteL Ds5,6
        vol 09h
              note  Ds5
        vol 0Ch
              noteL As4,72
              noteL Gs4,24
        vol 09h
              noteL Gs4,6
        vol 07h
              note  Gs4
        vol 0Ch
              noteL E5,12
              noteL Fs5,6
        vol 09h
              note  Fs5
        vol 0Ch
              noteL Cs6,18
        vol 09h
              noteL Cs6,6
        vol 0Ch
              noteL A5,12
              noteL B5,6
        vol 09h
              note  B5
        vol 0Ch
              noteL Fs6,18
        vol 09h
              noteL Fs6,6
        vol 0Ch
              note  B5
        vol 09h
              note  B5
        vol 0Ch
              noteL Fs6,18
              noteL B5,6
              noteL Fs6,36
              noteL E6,6
        vol 09h
              note  E6
        inst 13
        vol 0Ch
              noteL Fs5,30
        vol 09h
              noteL Fs5,6
        vol 0Ch
              note  Fs5
              note  Fs5
              note  Gs5
        vol 09h
              note  Gs5
        vol 0Ch
              noteL Gs5,18
        vol 09h
              noteL Gs5,6
        vol 0Ch
              note  Gs5
        vol 09h
              note  Gs5
        vol 0Ch
              noteL A5,84
        vol 09h
              noteL A5,6
        vol 07h
              note  A5
        vol 0Ch
              noteL A5,30
        vol 09h
              noteL A5,6
        vol 0Ch
              note  A5
              note  A5
              note  B5
        vol 09h
              note  B5
        vol 0Ch
              noteL B5,18
        vol 09h
              noteL B5,6
        vol 0Ch
              note  B5
        vol 09h
              note  B5
        vol 0Ch
              noteL Cs6,84
        vol 09h
              noteL Cs6,6
        vol 07h
              note  Cs6
        inst 45
      countedLoopStart 1
        vol 0Ch
              noteL Cs6,6
              note  B5
              note  Fs5
              note  B5
              note  Fs6
        vol 08h
              note  Fs6
      countedLoopEnd
        vol 0Ch
              noteL Cs6,6
              note  B5
      countedLoopStart 1
        vol 0Ch
              noteL Cs6,6
              note  B5
              note  E5
              note  A5
              note  Fs6
        vol 08h
              note  Fs6
      countedLoopEnd
        vol 0Ch
              noteL Cs6,6
              note  B5
      countedLoopStart 1
        vol 0Ch
              noteL Cs6,6
              note  B5
              note  Fs5
              note  D6
              note  Fs6
        vol 08h
              note  Fs6
      countedLoopEnd
        vol 0Ch
              noteL D6,6
              note  Fs6
              note  Gs6
              note  Fs6
              note  Gs6
              note  Cs7
              note  Cs6
        vol 08h
              note  Cs6
        vol 0Ch
              note  Fs6
              note  E6
              note  B5
        vol 08h
              note  B5
        vol 0Ch
              note  D6
              note  Cs6
              note  B5
              note  A5
              note  E5
              note  A5
        inst 26
      countedLoopStart 1
        vol 0Bh
              noteL Cs6,6
              note  B5
              note  Fs5
              note  B5
              note  Fs6
        vol 07h
              note  Fs6
      countedLoopEnd
        vol 0Bh
              noteL Cs6,6
              note  B5
      countedLoopStart 1
        vol 0Bh
              noteL Cs6,6
              note  B5
              note  E5
              note  A5
              note  Fs6
        vol 07h
              note  Fs6
      countedLoopEnd
        vol 0Bh
              noteL Cs6,6
              note  B5
      countedLoopStart 1
        vol 0Bh
              noteL Cs6,6
              note  B5
              note  Fs5
              note  D6
              note  Fs6
        vol 07h
              note  Fs6
      countedLoopEnd
        vol 0Bh
              noteL D6,6
              note  Fs6
              note  Gs6
              note  Fs6
              note  Gs6
              note  Cs7
              note  Cs6
        vol 07h
              note  Cs6
        vol 0Bh
              note  Fs6
              note  E6
              note  B5
        vol 07h
              note  B5
        vol 0Bh
              note  E6
              note  D6
              note  C6
              note  As5
              note  Gs5
              note  As5
              note  B5
              note  Cs6
              note  Ds6
              note  F6
              note  Fs6
              note  Gs6
              note  As6
              note  B6
      repeatStart
        inst 13
        vol 0Ch
              noteL Cs6,6
              note  Cs6
              note  Cs6
        vol 09h
              note  Cs6
        inst 27
        vol 0Ah
      repeatSection1Start
              noteL Cs5,8
              waitL 4
              note  C5
        setRelease 04h
              noteL C5,8
              note  C5
              note  As4
              note  Gs4
        setRelease 01h
              noteL As4,24
      repeatEnd
      repeatSection2Start
              noteL Fs5,8
              waitL 4
              note  F5
        setRelease 04h
              noteL F5,8
              note  F5
              note  Ds5
              note  Cs5
        setRelease 01h
              noteL Ds5,24
        inst 13
        vol 0Ch
              noteL Cs6,30
        vol 09h
              noteL Cs6,6
        vol 0Ch
              note  Cs6
              note  Cs6
              noteL Cs6,8
        vol 09h
              note  Cs6
        vol 0Ch
              note  Cs6
        vol 09h
              note  Cs6
        vol 0Ch
              note  Cs6
        vol 09h
              note  Cs6
              waitL 12
        inst 27
        vol 0Ah
              note  Fs4
              noteL Gs4,6
              wait
              note  F5
              wait
              note  Ds5
              wait
              noteL As4,12
              noteL C5,6
              waitL 12
              noteL Gs5,6
              noteL Fs5,96
      mainLoopEnd
Music_1_Channel_1:
        stereo 0C0h
        setRelease 01h
        vibrato 02Ch
              waitL 21
      mainLoopStart
              waitL 24
        inst 3
        vol 0Ch
              note  As2
              wait
              note  F2
              wait
              note  Cs3
              wait
              noteL Fs2,6
              wait
              noteL B2,12
              waitL 24
              note  As2
              wait
              note  F2
              noteL Fs2,6
              wait
              note  Fs2
              waitL 18
              noteL B2,60
      countedLoopStart 1
              noteL As2,6
              wait
              note  As2
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              note  As2
      countedLoopEnd
              noteL As2,6
              wait
              note  As2
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              wait
              noteL As2,24
              noteL A2,6
              wait
              note  A2
              waitL 18
              noteL A2,6
              note  A2
              note  D3
              wait
              note  A2
              wait
              noteL D3,24
              noteL C3,6
              wait
              note  C3
              waitL 18
              noteL C3,6
              waitL 18
              noteL C3,6
              waitL 18
              noteL C3,6
              note  C3
              note  As2
              wait
              note  As2
              waitL 18
              noteL As2,6
              wait
              note  As2
              wait
              note  As2
              wait
              noteL As2,24
              noteL Gs2,48
              note  E3
              note  F3
              note  F2
      countedLoopStart 1
              noteL As2,6
              wait
              note  As2
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              note  As2
      countedLoopEnd
              noteL As2,6
              wait
              note  As2
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              waitL 18
              noteL As2,6
              wait
              note  A2
              wait
              note  A2
              waitL 18
              noteL A2,6
              wait
              note  D3
              wait
              note  A2
              wait
              noteL D3,24
              noteL Ds3,6
              wait
              note  Ds3
              waitL 18
              noteL Ds3,6
              waitL 18
              noteL Ds3,6
              waitL 18
              noteL Ds3,6
              note  Ds3
              note  Gs2
              wait
              note  Gs2
              waitL 18
              noteL Gs2,6
              waitL 18
              noteL Gs2,6
              wait
              noteL Gs2,24
              noteL G2,30
              waitL 6
              note  G2
              wait
              noteL D3,30
              waitL 6
              note  D3
              wait
              noteL Ds3,30
              waitL 6
              note  Ds3
              wait
              note  Gs2
              wait
        inst 38
        vol 0Ch
              noteL Gs3,12
              note  Fs3
              note  Ds3
              noteL Cs3,72
              noteL Ds3,12
              note  F3
              noteL Fs3,60
              noteL Gs3,24
              noteL Fs3,12
              noteL Cs3,72
              noteL Ds3,12
              note  F3
              noteL Fs3,60
              noteL Gs3,24
              noteL As3,12
              noteL B3,72
              noteL Cs3,12
              note  Ds3
              noteL E3,72
              noteL Fs3,12
              note  E3
              noteL D3,48
              note  G3
              note  C3
              note  F3
        inst 3
        vol 0Ch
              waitL 24
              note  B2
              wait
              note  A2
        setRelease 08h
              noteL G2,12
              note  A2
              note  B2
              note  Cs3
              note  D3
              note  E3
              note  Fs3
              note  G3
        setRelease 01h
              waitL 24
              note  D3
              wait
              note  Cs3
        setRelease 08h
              noteL B2,12
              note  Cs3
              note  Ds3
              note  E3
              note  Fs3
              note  Gs3
              note  As3
              note  B3
        setRelease 01h
        inst 56
        vol 0Ch
              noteL D4,60
        vol 09h
              noteL D4,12
        vol 0Ch
              noteL D4,6
              note  D4
              noteL Cs4,60
        vol 09h
              noteL Cs4,12
        vol 0Ch
              noteL Cs4,6
        vol 09h
              note  Cs4
        vol 0Ch
              noteL Gs4,60
        vol 09h
              noteL Gs4,12
        vol 0Ch
              noteL Gs4,6
              note  Gs4
              noteL A4,72
        setRelease 08h
        inst 3
        vol 0Ch
              noteL A3,12
              note  E3
              note  D3
              note  D3
              wait
              note  D3
              wait
              note  D3
              note  D3
              note  Cs3
              note  Cs3
              wait
              note  Cs3
              wait
              note  Cs3
              note  Cs3
              note  Gs3
              note  Gs3
              wait
              note  Gs3
              wait
              note  Gs3
              note  Gs3
              note  A2
              note  A3
              note  G2
              note  G3
              note  F2
              note  F3
              note  Ds2
              note  Ds3
        setRelease 01h
              noteL Cs3,48
      countedLoopStart 1
              noteL B2,6
              note  B2
              note  B2
              waitL 78
      countedLoopEnd
              noteL E2,48
              noteL Fs2,8
              wait
              note  Fs2
              wait
              note  Fs2
              waitL 32
              noteL Gs2,168
      mainLoopEnd
Music_1_Channel_2:
        stereo 0C0h
        setRelease 01h
        vibrato 02Ch
              waitL 21
      mainLoopStart
      repeatStart
        inst 13
        vol 0Bh
              noteL C6,30
        vol 08h
              noteL C6,6
        vol 0Bh
              note  C6
              note  C6
              note  As5
        vol 08h
              note  As5
        vol 0Bh
              noteL As5,18
        vol 08h
              noteL As5,6
        vol 0Bh
              note  As5
        vol 08h
              note  As5
        vol 0Bh
      repeatSection1Start
              noteL Gs5,6
        vol 08h
              note  Gs5
        vol 0Bh
              noteL Gs5,18
        vol 08h
              noteL Gs5,6
        vol 0Bh
              note  Gs5
        vol 08h
              note  Gs5
        vol 0Bh
              note  As5
        vol 08h
              note  As5
        vol 0Bh
              noteL As5,30
        vol 08h
              noteL As5,6
      repeatEnd
      repeatSection2Start
              noteL Gs5,6
        vol 08h
              note  Gs5
        vol 0Bh
              note  Gs5
        vol 08h
              note  Gs5
        vol 06h
              note  Gs5
        vol 04h
              note  Gs5
        vol 0Bh
              noteL As5,36
              noteL Gs5,24
        vol 0Ah
              noteL F6,6
        vol 07h
              note  F6
      countedLoopStart 2
        vol 0Ah
              noteL F6,6
        vol 07h
              note  F6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL F6,6
              note  F6
              note  G6
        vol 07h
              note  G6
      countedLoopStart 2
        vol 0Ah
              noteL G6,6
        vol 07h
              note  G6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL G6,6
              note  G6
              note  F6
        vol 07h
              note  F6
      countedLoopStart 1
        vol 0Ah
              noteL F6,6
        vol 07h
              note  F6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL F6,6
        vol 07h
              note  F6
        vol 0Ah
              noteL G6,24
        vol 0Ah
              noteL E6,6
        vol 07h
              note  E6
        vol 0Ah
              note  E6
        vol 07h
              note  E6
              waitL 12
        vol 0Ah
              noteL E6,6
              note  E6
              note  F6
        vol 07h
              note  F6
        vol 0Ah
              note  F6
        vol 07h
              note  F6
        vol 0Ah
              noteL F6,24
        inst 44
        vol 0Ah
              noteL G6,6
        vol 07h
              note  G6
      countedLoopStart 2
        vol 0Ah
              noteL G6,6
        vol 07h
              note  G6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL G6,6
              note  G6
              note  A6
        vol 07h
              note  A6
        vol 0Bh
              note  A6
        vol 07h
              note  A6
              waitL 12
        vol 0Bh
              noteL A6,6
        vol 07h
              note  A6
      countedLoopStart 1
        vol 0Ah
              noteL F6,6
        vol 07h
              note  F6
      countedLoopEnd
        vol 0Ah
              noteL F6,24
        inst 13
        vol 0Ah
              note  Fs5
              note  Fs6
              note  Fs5
              note  Fs6
              noteL G5,36
              noteL G6,6
              note  G6
              noteL A5,12
        vol 0Bh
              noteL A6,6
        vol 09h
              note  A6
              waitL 12
        vol 0Bh
              noteL A6,6
        vol 09h
              note  A6
        inst 26
        vol 0Bh
              note  F5
        vol 07h
              note  F5
      countedLoopStart 2
        vol 0Bh
              noteL F5,6
        vol 07h
              note  F5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL F5,6
              note  F5
              note  G5
        vol 07h
              note  G5
      countedLoopStart 2
        vol 0Bh
              noteL G5,6
        vol 07h
              note  G5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL G5,6
              note  G5
              note  F5
        vol 07h
              note  F5
      countedLoopStart 2
        vol 0Bh
              noteL F5,6
        vol 07h
              note  F5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL G5,6
        vol 07h
              note  G5
        vol 0Bh
              note  E5
        vol 07h
              note  E5
        vol 0Bh
              note  E5
        vol 07h
              note  E5
              waitL 12
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
        vol 0Bh
              note  F5
        vol 07h
              note  F5
        vol 0Bh
              note  F5
        vol 07h
              note  F5
        vol 0Bh
              noteL F5,24
        inst 44
        vol 0Ah
              noteL G6,6
        vol 07h
              note  G6
      countedLoopStart 2
        vol 0Ah
              noteL G6,6
        vol 07h
              note  G6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL G6,6
              note  G6
      countedLoopStart 1
        vol 0Ah
              noteL Fs6,6
        vol 07h
              note  Fs6
      countedLoopEnd
              waitL 12
        vol 0Ah
              noteL Fs6,6
        vol 07h
              note  Fs6
        inst 16
        vol 0Ch
              noteL As6,18
              noteL C7,6
              noteL C7,24
        inst 26
        vol 0Bh
              noteL As5,30
        vol 07h
              noteL As5,6
        vol 0Bh
              note  As5
        vol 07h
              note  As5
        vol 0Bh
              noteL C6,30
        vol 07h
              noteL C6,6
        vol 0Bh
              note  C6
        vol 07h
              note  C6
        vol 0Bh
              noteL D6,30
        vol 07h
              noteL D6,6
        vol 0Bh
              noteL D6,4
        vol 07h
              noteL D6,8
        vol 0Bh
              noteL Ds6,24
              note  C6
        inst 26
      countedLoopStart 1
        vol 0Ah
              noteL Cs7,6
              note  Gs6
              note  G6
              note  Gs6
              note  Cs7
        vol 07h
              note  Cs7
      countedLoopEnd
        vol 0Ah
              noteL Cs7,6
              note  Gs6
              note  F6
              note  Cs6
        inst 54
      countedLoopStart 1
        vol 0Ah
              noteL Fs6,6
              note  Cs6
              note  C6
              note  Cs6
              note  Fs6
        vol 07h
              note  Fs6
      countedLoopEnd
        vol 0Ah
              noteL Fs6,6
              note  Cs6
              note  As5
              note  Fs5
        inst 26
      countedLoopStart 1
        vol 0Ah
              noteL F6,6
              note  Cs6
              note  Gs5
              note  Cs6
              note  F6
        vol 07h
              note  F6
      countedLoopEnd
        vol 0Ah
              noteL F6,6
              note  Cs6
              note  Gs5
              note  F6
        inst 54
      countedLoopStart 1
        vol 0Ah
              noteL Cs6,6
              note  As5
              note  A5
              note  As5
              note  Cs6
        vol 07h
              note  Cs6
      countedLoopEnd
        vol 0Ah
              noteL Cs6,6
              note  C6
              note  Cs6
              note  F6
        inst 26
      countedLoopStart 1
        vol 0Ah
              noteL B6,6
              note  Fs6
              note  F6
              note  Fs6
              note  B6
        vol 07h
              note  B6
      countedLoopEnd
        vol 0Ah
              noteL B6,6
              note  Fs6
              note  E6
              note  Ds6
        inst 54
      countedLoopStart 1
        vol 0Ah
              noteL E6,6
              note  B5
              note  As5
              note  B5
              note  E6
        vol 07h
              note  E6
      countedLoopEnd
        vol 0Ah
              noteL E6,6
              note  B5
              note  As5
              note  B5
        inst 26
        vol 0Bh
              noteL Fs5,48
              note  G5
              note  B5
              note  A5
        inst 13
        vol 0Bh
              noteL Ds5,30
        vol 08h
              noteL Ds5,6
        vol 0Bh
              note  Ds5
              note  Ds5
              note  E5
        vol 08h
              note  E5
        vol 0Bh
              noteL E5,18
        vol 08h
              noteL E5,6
        vol 0Bh
              note  E5
        vol 08h
              note  E5
        vol 0Bh
              noteL Fs5,84
        vol 08h
              noteL Fs5,6
        vol 06h
              note  Fs5
        vol 0Bh
              noteL Fs5,30
        vol 08h
              noteL Fs5,6
        vol 0Bh
              note  Fs5
              note  Fs5
              note  Gs5
        vol 08h
              note  Gs5
        vol 0Bh
              noteL Gs5,18
        vol 08h
              noteL Gs5,6
        vol 0Bh
              note  Gs5
        vol 08h
              note  Gs5
        vol 0Bh
              noteL As5,84
        vol 08h
              noteL As5,6
        vol 06h
              note  As5
        inst 54
      repeatStart
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
      countedLoopStart 1
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
              waitL 12
      countedLoopEnd
      countedLoopStart 1
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
      countedLoopEnd
      repeatSection1Start
      repeatEnd
      repeatSection2Start
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
      countedLoopStart 1
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
              waitL 12
      countedLoopEnd
      countedLoopStart 1
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
      countedLoopEnd
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
      countedLoopStart 2
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
      repeatStart
        inst 26
      countedLoopStart 5
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
      countedLoopEnd
        vol 0Bh
              noteL E5,12
      repeatSection1Start
      repeatEnd
      repeatSection2Start
      countedLoopStart 5
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
      countedLoopEnd
        vol 0Bh
              noteL D5,12
        vol 07h
              noteL D5,6
              wait
        vol 0Bh
              note  E5
        vol 07h
              note  E5
              waitL 12
        vol 0Bh
              noteL Fs5,6
        vol 07h
              note  Fs5
              waitL 12
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
              waitL 12
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
        vol 0Bh
              noteL Gs5,48
      repeatStart
        inst 13
        vol 0Ch
              noteL As5,6
              note  As5
              note  As5
        vol 09h
              note  As5
        inst 27
        vol 0Ah
      repeatSection1Start
              noteL As4,6
              wait
              noteL Gs4,4
        setRelease 04h
              noteL Gs4,8
              note  Gs4
              note  Fs4
              note  F4
        setRelease 01h
              noteL Fs4,24
      repeatEnd
      repeatSection2Start
              noteL Ds5,6
              wait
              noteL Cs5,4
        setRelease 04h
              noteL Cs5,8
              note  Cs5
              note  B4
              note  As4
        setRelease 01h
              noteL B4,24
        inst 13
        vol 0Ch
              noteL Gs5,30
        vol 09h
              noteL Gs5,6
        vol 0Ch
              note  Gs5
              note  Gs5
      countedLoopStart 2
        vol 0Ch
              noteL Gs5,8
        vol 09h
              note  Gs5
      countedLoopEnd
              waitL 90
        vol 0Ch
              noteL Cs6,6
              noteL Cs6,96
      mainLoopEnd
Music_1_Channel_3:
        stereo 0C0h
        setRelease 01h
        vibrato 02Ch
              waitL 21
      mainLoopStart
      repeatStart
        inst 13
        vol 0Bh
              noteL F5,30
        vol 08h
              noteL F5,6
        vol 0Bh
              note  F5
              note  F5
              note  Gs5
        vol 08h
              note  Gs5
        vol 0Bh
              noteL Gs5,18
        vol 08h
              noteL Gs5,6
        vol 0Bh
              note  Gs5
        vol 08h
              note  Gs5
        vol 0Bh
      repeatSection1Start
              noteL Ds5,6
        vol 08h
              note  Ds5
        vol 0Bh
              noteL Ds5,18
        vol 08h
              noteL Ds5,6
        vol 0Bh
              note  Ds5
        vol 08h
              note  Ds5
        vol 0Bh
              note  Cs5
        vol 08h
              note  Cs5
        vol 0Bh
              noteL Cs5,30
        vol 08h
              noteL Cs5,6
      repeatEnd
      repeatSection2Start
              noteL Ds5,6
        vol 08h
              note  Ds5
        vol 0Bh
              note  Ds5
        vol 08h
              note  Ds5
        vol 06h
              note  Ds5
        vol 04h
              note  Ds5
        vol 0Bh
              noteL Cs5,60
        vol 0Ah
              noteL D6,6
        vol 07h
              note  D6
      countedLoopStart 2
        vol 0Ah
              noteL D6,6
        vol 07h
              note  D6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL D6,6
              note  D6
              note  E6
        vol 07h
              note  E6
      countedLoopStart 2
        vol 0Ah
              noteL E6,6
        vol 07h
              note  E6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL E6,6
              note  E6
        vol 0Ah
              note  D6
        vol 07h
              note  D6
      countedLoopStart 1
        vol 0Ah
              noteL D6,6
        vol 07h
              note  D6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL D6,6
        vol 07h
              note  D6
        vol 0Ah
              noteL E6,24
              noteL C6,6
        vol 07h
              note  C6
        vol 0Ah
              note  C6
        vol 07h
              note  C6
              waitL 12
        vol 0Ah
              noteL C6,6
              note  C6
              note  D6
        vol 07h
              note  D6
        vol 0Ah
              note  D6
        vol 07h
              note  D6
        vol 0Ah
              noteL D6,24
        inst 44
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
      countedLoopStart 2
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL Ds6,6
              note  Ds6
              note  D6
        vol 07h
              note  D6
        vol 0Ah
              note  D6
        vol 07h
              note  D6
              waitL 12
      countedLoopStart 2
        vol 0Ah
              noteL D6,6
        vol 07h
              note  D6
      countedLoopEnd
        vol 0Ah
              noteL D6,24
        inst 13
        vol 0Ah
              note  Ds5
              note  Ds6
              note  D5
              note  D6
              noteL Ds5,36
              noteL Ds6,6
              note  Ds6
              noteL F5,12
        vol 0Bh
              noteL F6,6
        vol 09h
              note  F6
              waitL 12
        vol 0Bh
              noteL F6,6
        vol 09h
              note  F6
        inst 26
        vol 0Bh
              note  D5
        vol 07h
              note  D5
      countedLoopStart 2
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL D5,6
              note  D5
              note  E5
        vol 07h
              note  E5
      countedLoopStart 2
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL E5,6
              note  E5
              note  D5
        vol 07h
              note  D5
      countedLoopStart 2
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL E5,6
        vol 07h
              note  E5
        vol 0Bh
              note  C5
        vol 07h
              note  C5
        vol 0Bh
              note  C5
        vol 07h
              note  C5
              waitL 12
        vol 0Bh
              noteL C5,6
        vol 07h
              note  C5
        vol 0Bh
              note  D5
        vol 07h
              note  D5
        vol 0Bh
              note  D5
        vol 07h
              note  D5
        vol 0Bh
              noteL D5,24
        inst 44
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
      countedLoopStart 2
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
              waitL 12
      countedLoopEnd
        vol 0Ah
              noteL Ds6,6
              note  Ds6
      countedLoopStart 1
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
      countedLoopEnd
              waitL 12
        vol 0Ah
              noteL Ds6,6
        vol 07h
              note  Ds6
        inst 16
        vol 0Ch
              noteL Fs6,18
              noteL Gs6,6
              noteL Gs6,24
        inst 26
        vol 0Bh
              note  G5
        inst 61
        vol 0Dh
              note  C3
        inst 26
        vol 0Bh
              note  F5
        inst 61
        vol 0Dh
              note  C3
        inst 26
        vol 0Bh
              note  G5
        inst 61
        vol 0Dh
              note  C3
        inst 26
        vol 0Bh
              note  Fs5
        inst 61
        vol 0Dh
              note  C3
              waitL 6
        shifting 020h
        stereo 080h
        inst 26
      countedLoopStart 1
        vol 09h
              noteL Cs7,6
              note  Gs6
              note  G6
              note  Gs6
              note  Cs7
        vol 06h
              note  Cs7
      countedLoopEnd
        vol 09h
              noteL Cs7,6
              note  Gs6
              note  F6
              note  Cs6
        inst 54
      countedLoopStart 1
        vol 09h
              noteL Fs6,6
              note  Cs6
              note  C6
              note  Cs6
              note  Fs6
        vol 06h
              note  Fs6
      countedLoopEnd
        vol 09h
              noteL Fs6,6
              note  Cs6
              note  As5
              note  Fs5
        inst 26
      countedLoopStart 1
        vol 09h
              noteL F6,6
              note  Cs6
              note  Gs5
              note  Cs6
              note  F6
        vol 06h
              note  F6
      countedLoopEnd
        vol 09h
              noteL F6,6
              note  Cs6
              note  Gs5
              note  F6
        inst 54
      countedLoopStart 1
        vol 09h
              noteL Cs6,6
              note  As5
              note  A5
              note  As5
              note  Cs6
        vol 06h
              note  Cs6
      countedLoopEnd
        vol 09h
              noteL Cs6,6
              note  C6
              note  Cs6
              note  F6
        inst 26
      countedLoopStart 1
        vol 09h
              noteL B6,6
              note  Fs6
              note  F6
              note  Fs6
              note  B6
        vol 06h
              note  B6
      countedLoopEnd
        vol 09h
              noteL B6,6
              note  Fs6
              note  E6
              note  Ds6
        inst 54
      countedLoopStart 1
        vol 09h
              noteL E6,6
              note  B5
              note  As5
              note  B5
              note  E6
        vol 06h
              note  E6
      countedLoopEnd
        vol 09h
              noteL E6,6
              note  B5
              note  As5
        shifting 00h
        stereo 0C0h
        inst 26
        vol 0Bh
              noteL A4,48
              note  B4
              note  C5
              note  C5
        inst 13
        vol 0Ch
              noteL B4,30
        vol 09h
              noteL B4,6
        vol 0Ch
              note  B4
              note  B4
              note  B4
        vol 09h
              note  B4
        vol 0Ch
              noteL B4,18
        vol 09h
              noteL B4,6
        vol 0Ch
              note  B4
        vol 09h
              note  B4
        vol 0Ch
              noteL D5,84
        vol 09h
              noteL D5,6
        vol 07h
              note  D5
        vol 0Ch
              noteL D5,30
        vol 09h
              noteL D5,6
        vol 0Ch
              note  D5
              note  D5
              note  E5
        vol 09h
              note  E5
        vol 0Ch
              noteL E5,18
        vol 09h
              noteL E5,6
        vol 0Ch
              note  E5
        vol 09h
              note  E5
        vol 0Ch
              noteL Fs5,84
        vol 09h
              noteL Fs5,6
        vol 07h
              note  Fs5
        inst 54
        vol 0Bh
              note  D5
        vol 07h
              note  D5
      countedLoopStart 1
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
              waitL 12
      countedLoopEnd
      countedLoopStart 1
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
      countedLoopEnd
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
      countedLoopStart 1
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
              waitL 12
      countedLoopEnd
      countedLoopStart 1
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
      countedLoopEnd
        vol 0Bh
              noteL B4,6
        vol 07h
              note  B4
      countedLoopStart 1
        vol 0Bh
              noteL B4,6
        vol 07h
              note  B4
              waitL 12
      countedLoopEnd
      countedLoopStart 1
        vol 0Bh
              noteL B4,6
        vol 07h
              note  B4
      countedLoopEnd
        vol 0Bh
              noteL A4,6
        vol 07h
              note  A4
      countedLoopStart 2
        vol 0Bh
              noteL A4,6
        vol 07h
              note  A4
              waitL 12
      countedLoopEnd
        vol 0Bh
              noteL A4,6
        vol 07h
              note  A4
        inst 26
      countedLoopStart 5
        vol 0Bh
              noteL D5,6
        vol 07h
              note  D5
      countedLoopEnd
        vol 0Bh
              noteL D5,12
      countedLoopStart 5
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
      countedLoopEnd
        vol 0Bh
              noteL Cs5,12
      countedLoopStart 5
        vol 0Bh
              noteL B4,6
        vol 07h
              note  B4
      countedLoopEnd
        vol 0Bh
              noteL B4,12
              wait
        vol 0Bh
              noteL Cs5,6
        vol 07h
              note  Cs5
              waitL 12
        vol 0Bh
              noteL B4,6
        vol 07h
              note  B4
              waitL 12
        vol 0Bh
              noteL A4,6
        vol 07h
              note  A4
              waitL 12
        vol 0Bh
              noteL G4,6
        vol 07h
              note  G4
        vol 0Bh
              noteL F4,48
      repeatStart
        stereo 0C0h
        inst 13
        vol 0Ch
              noteL Fs5,6
              note  Fs5
              note  Fs5
        vol 09h
              note  Fs5
              wait
        shifting 020h
        stereo 080h
        inst 27
        vol 09h
      repeatSection1Start
              noteL As4,6
              wait
              noteL Gs4,4
        setRelease 04h
              noteL Gs4,8
              note  Gs4
              note  Fs4
              note  F4
        setRelease 01h
              noteL Fs4,18
        shifting 00h
      repeatEnd
      repeatSection2Start
              noteL Ds5,6
              wait
              noteL Cs5,4
        setRelease 04h
              noteL Cs5,8
              note  Cs5
              note  B4
              note  As4
        setRelease 01h
              noteL B4,18
        shifting 00h
        stereo 0C0h
        inst 13
        vol 0Ch
              noteL Ds5,30
        vol 09h
              noteL Ds5,6
        vol 0Ch
              note  Ds5
              note  Ds5
      countedLoopStart 2
        vol 0Ch
              noteL Ds5,8
        vol 09h
              note  Ds5
      countedLoopEnd
              waitL 90
        vol 0Ch
              noteL As5,6
              noteL As5,96
      mainLoopEnd
Music_1_Channel_4:
[removing this channel's content because of post size limit]

Music_1_Channel_5:
        stereo 0C0h
              waitL 21
      mainLoopStart
              waitL 24
              sampleL 0,48
              sample  0
              sample  0
              sampleL 0,12
              sampleL 0,36
              sampleL 0,48
              sampleL 0,24
              sampleL 2,6
              sample  3
              sampleL 2,12
              sample  0
              sampleL 2,24
              sampleL 4,3
              sample  4
              sample  3
              sample  3
              sampleL 2,6
              sample  4
              sample  2
              sample  2
      repeatStart
      countedLoopStart 4
              sampleL 3,6
              sample  4
              sampleL 3,12
              sample  4
              sampleL 3,6
              sampleL 4,12
              sampleL 4,6
              sampleL 3,12
              sample  4
              sampleL 3,6
              sample  4
      countedLoopEnd
              sampleL 3,6
              sample  4
              sampleL 3,12
              sample  4
              sampleL 3,6
              sampleL 4,12
              sampleL 4,6
              sampleL 3,12
              sampleL 4,6
              sample  4
              sample  3
              sample  3
      repeatSection1Start
              sampleL 2,24
              sampleL 0,22
              sampleL 4,1
              sample  3
              sampleL 2,24
              sample  0
              sampleL 0,6
              sample  3
              sample  3
              sample  2
              sampleL 2,3
              sample  3
              sample  4
              sample  4
              sampleL 2,6
              sampleL 3,12
              sampleL 3,6
              sample  2
              sampleL 3,12
              sampleL 3,6
              sampleL 2,12
      repeatEnd
      repeatSection2Start
      countedLoopStart 1
              sampleL 2,24
              sampleL 0,22
              sampleL 4,1
              sample  3
              sampleL 2,24
              sample  0
      countedLoopEnd
      countedLoopStart 2
              sampleL 0,36
              sampleL 2,6
              sample  3
              sample  2
              sample  3
              sampleL 2,3
              sample  3
              sample  4
              sample  4
              sampleL 2,12
              sampleL 2,6
              sample  3
              waitL 36
              sampleL 2,6
              sample  3
              sample  2
              sample  3
              sampleL 2,3
              sample  3
              sample  4
              sample  4
              sampleL 2,24
      countedLoopEnd
      repeatStart
              sampleL 0,6
              sample  3
              sampleL 2,3
              sample  3
              sample  4
              sample  4
              sampleL 2,12
              sampleL 2,6
              sample  3
      repeatSection1Start
              sampleL 0,12
              sampleL 2,6
              sample  3
              sample  2
              sample  3
              sampleL 2,3
              sample  3
              sample  4
              sample  4
      repeatEnd
      repeatSection2Start
              sampleL 4,6
              sample  2
              sample  4
              sample  4
              sample  3
              sample  3
              sample  2
              sample  2
      countedLoopStart 1
              waitL 24
              sampleL 0,12
              sampleL 2,6
              sampleL 3,18
              sampleL 2,12
              sample  0
              sample  2
              sample  0
              sample  4
              sample  4
              sample  4
              sample  3
              sample  3
              sample  2
              sample  2
      countedLoopEnd
              waitL 84
              wait
              wait
              waitL 96
      countedLoopStart 2
              sampleL 3,6
              sample  4
              sampleL 3,12
              sample  4
              sampleL 3,6
              sampleL 4,12
              sampleL 4,6
              sampleL 3,12
              sampleL 3,6
              sample  4
      countedLoopEnd
              sampleL 3,12
              sample  4
              sample  3
              sampleL 3,6
              sample  4
              sampleL 3,12
              sampleL 3,6
              sample  4
              sample  3
              sample  4
              sample  3
              sample  2
              sampleL 0,24
              sampleL 4,3
              sample  4
              sample  4
              sample  4
              sample  3
              sample  3
              sample  3
              sample  3
      countedLoopStart 1
              sampleL 5,6
              sample  3
              sampleL 2,60
              sampleL 1,24
      countedLoopEnd
              sampleL 0,22
              sampleL 4,1
              sample  3
              sampleL 2,23
              sampleL 4,1
              sampleL 5,15
              sampleL 4,1
              sampleL 5,15
              sampleL 4,1
              sampleL 5,16
              waitL 24
              sampleL 0,66
              sampleL 1,6
              sampleL 0,48
              sampleL 2,6
              sampleL 2,3
              sample  3
              sample  3
              sample  4
              sampleL 2,6
              sampleL 2,24
      mainLoopEnd
Music_1_Channel_6:
        psgInst 07Ch
        setRelease 01h
        vibrato 04Ch
              psgNoteL F4,3
              psgNote  G4
              psgNote  A4
              psgNote  As4
              psgNote  C5
              psgNote  D5
              psgNote  Ds5
      mainLoopStart
      countedLoopStart 23
              psgNoteL F5,3
              psgNote  G5
      countedLoopEnd
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  B4
              psgNote  As4
              psgNote  Gs4
              psgNote  Fs4
              psgNote  F4
              psgNote  Ds4
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  B4
              psgNote  Cs5
              psgNote  Ds5
      countedLoopStart 15
              psgNoteL F5,3
              psgNote  G5
      countedLoopEnd
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  C5
              psgNote  As4
              psgNote  Gs4
              psgNote  Fs4
              psgNote  F4
              psgNote  Ds4
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  C5
              psgNote  Cs5
              psgNote  Ds5
      countedLoopStart 2
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  B4
      countedLoopEnd
              psgNoteL As4,3
              psgNote  Gs4
              psgNote  Fs4
              psgNote  F4
      repeatStart
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL D3,6
              psgNote  F3
      countedLoopEnd
      countedLoopStart 7
              psgNoteL E3,6
              psgNote  G3
      countedLoopEnd
      countedLoopStart 5
              psgNoteL D3,6
              psgNote  F3
      countedLoopEnd
      countedLoopStart 5
              psgNoteL E3,6
              psgNote  G3
      countedLoopEnd
        psgInst 07Ch
              psgNoteL A3,6
              psgNote  E3
              psgNote  F3
              psgNote  A3
      repeatSection1Start
              psgNoteL Cs4,6
              psgNote  D4
              psgNote  F4
              psgNote  A4
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL Ds3,6
              psgNote  G3
      countedLoopEnd
      countedLoopStart 7
              psgNoteL D3,6
              psgNote  F3
      countedLoopEnd
        psgInst 07Bh
              psgNoteL As2,6
              psgNote  C3
              psgNote  Ds3
              psgNote  Fs3
              psgNote  As3
              psgNote  C4
              psgNote  Ds4
              psgNote  Fs4
              psgNote  A2
              psgNote  As2
              psgNote  D3
              psgNote  Fs3
              psgNote  A3
              psgNote  As3
              psgNote  D4
              psgNote  Fs4
              psgNote  G4
              psgNote  Ds4
              psgNote  C4
              psgNote  As3
              psgNote  C4
              psgNote  As3
              psgNote  C4
              psgNote  Ds4
              psgNote  A4
              psgNote  F4
              psgNote  Ds4
              psgNote  C4
              psgNote  As3
              psgNote  A3
              psgNote  F3
              psgNote  C3
      repeatEnd
      repeatSection2Start
              psgNoteL D4,6
              psgNote  A3
              psgNote  F3
              psgNote  D3
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL F3,6
              psgNote  G3
      countedLoopEnd
      countedLoopStart 7
              psgNoteL Ds3,6
              psgNote  F3
      countedLoopEnd
        psgInst 07Bh
      countedLoopStart 2
              psgNoteL As2,6
              psgNote  D3
      countedLoopEnd
              psgNoteL F3,6
              psgNote  G3
      countedLoopStart 2
              psgNoteL C3,6
              psgNote  D3
      countedLoopEnd
              psgNoteL F3,6
              psgNote  A3
      countedLoopStart 2
              psgNoteL D3,6
              psgNote  Ds3
      countedLoopEnd
              psgNoteL G3,6
              psgNote  As3
              psgNote  Fs3
              psgNote  As3
              psgNote  C4
              psgNote  Ds4
              psgNote  Fs4
              psgNote  As4
        psgInst 07Dh
              psgNote  Cs5
              psgNote  Ds5
              psgNoteL F5,108
              psgNoteL Ds5,12
              psgNote  Cs5
              psgNote  A4
              psgNote  As4
              psgNoteL C5,24
              psgNoteL Cs5,12
              psgNoteL Gs4,108
              psgNoteL C4,12
              psgNote  Cs4
              psgNoteL As4,24
              psgNoteL Gs4,12
              psgNoteL As4,8
              psgNote  B4
              psgNote  Cs5
              psgNoteL Ds5,108
              psgNoteL Cs5,12
              psgNote  B4
              psgNote  G4
              psgNote  Gs4
              psgNoteL As4,24
              psgNoteL B4,12
              psgNoteL Cs5,48
              psgNote  D5
              psgNote  E5
              psgNoteL C3,6
              psgNote  E3
              psgNote  A3
              psgNote  C4
              psgNote  E4
              psgNote  A4
              psgNote  C5
              psgNote  E5
              psgNote  Ds4
              psgNote  B3
              psgNote  Fs3
              psgNote  B3
              psgNoteL Ds4,4
              waitL    8
              psgNoteL Ds4,6
              psgNote  Ds4
              psgNote  E4
              psgNote  B3
              psgNote  Gs3
              psgNote  B3
              psgNoteL E4,4
              waitL    8
              psgNoteL E4,4
              waitL    8
              psgNoteL Fs4,6
              psgNote  D4
              psgNote  A3
              psgNote  D4
              psgNote  Fs4
              psgNote  D4
              psgNote  A3
              psgNote  D4
              psgNote  Fs4
              psgNote  D4
              psgNote  D5
              psgNote  A4
              psgNote  Fs4
              psgNote  D4
              psgNote  A3
              psgNote  Fs3
              psgNote  Fs4
              psgNote  D4
              psgNote  A3
              psgNote  D4
              psgNoteL Fs4,4
              waitL    8
              psgNoteL Fs4,6
              psgNote  Fs4
              psgNote  Gs4
              psgNote  E4
              psgNote  B3
              psgNote  E4
              psgNoteL Gs4,4
              waitL    8
              psgNoteL Gs4,4
              waitL    8
      countedLoopStart 1
              psgNoteL As4,6
              psgNote  Fs4
              psgNote  Cs4
              psgNote  Fs4
      countedLoopEnd
              psgNoteL As4,6
              psgNote  Fs4
              psgNote  Fs5
              psgNote  Cs5
              psgNote  As4
              psgNote  Fs4
              psgNote  Cs4
              psgNote  As3
      countedLoopStart 7
        psgInst 00h
              waitL    102
      countedLoopEnd
        psgInst 07Ch
              psgNoteL Cs3,4
              psgNote  Fs3
              psgNote  As3
              psgNote  Cs4
              psgNote  Fs4
              psgNote  As4
        psgInst 00h
              waitL    72
        psgInst 07Ch
              psgNoteL Ds3,4
              psgNote  Fs3
              psgNote  B3
              psgNote  Ds4
              psgNote  Fs4
              psgNote  B4
        psgInst 00h
              waitL    96
              waitL    24
        psgInst 07Ch
      countedLoopStart 11
              psgNoteL Cs3,3
              psgNote  Ds3
      countedLoopEnd
              psgNoteL Cs3,3
              psgNote  Ds3
              psgNote  F3
              psgNote  Fs3
              psgNote  Gs3
              psgNote  As3
              psgNote  Gs3
              psgNote  Fs3
              psgNote  F3
              psgNote  Fs3
              psgNote  Gs3
              psgNote  As3
              psgNote  C4
              psgNote  Cs4
              psgNote  C4
              psgNote  As3
              psgNote  Gs3
              psgNote  As3
              psgNote  C4
              psgNote  Cs4
              psgNote  Ds4
              psgNote  F4
              psgNote  Ds4
              psgNote  Cs4
              psgNote  Ds4
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  C5
              psgNote  Cs5
              psgNote  Ds5
      mainLoopEnd
Music_1_Channel_7:
        psgInst 00h
              waitL    9
        shifting 010h
        psgInst 07Ah
        setRelease 01h
        vibrato 04Ch
              psgNoteL F4,3
              psgNote  G4
              psgNote  A4
              psgNote  As4
              psgNote  C5
              psgNote  D5
              psgNote  Ds5
      mainLoopStart
      countedLoopStart 23
              psgNoteL F5,3
              psgNote  G5
      countedLoopEnd
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  B4
              psgNote  As4
              psgNote  Gs4
              psgNote  Fs4
              psgNote  F4
              psgNote  Ds4
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  B4
              psgNote  Cs5
              psgNote  Ds5
      countedLoopStart 15
              psgNoteL F5,3
              psgNote  G5
      countedLoopEnd
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  C5
              psgNote  As4
              psgNote  Gs4
              psgNote  Fs4
              psgNote  F4
              psgNote  Ds4
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  C5
              psgNote  Cs5
              psgNote  Ds5
      countedLoopStart 2
              psgNoteL F5,3
              psgNote  Ds5
              psgNote  Cs5
              psgNote  B4
      countedLoopEnd
              psgNoteL As4,3
        shifting 00h
      repeatStart
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL C3,6
              psgNote  As2
      countedLoopEnd
      countedLoopStart 7
              psgNoteL D3,6
              psgNote  C3
      countedLoopEnd
      countedLoopStart 5
              psgNoteL C3,6
              psgNote  As2
      countedLoopEnd
              psgNoteL D3,6
              psgNote  C3
              psgNote  D3
              psgNote  C3
      countedLoopStart 3
              psgNoteL C3,6
              psgNote  A2
      countedLoopEnd
        psgInst 07Ch
              psgNoteL D3,6
              psgNote  Cs3
              psgNote  D3
              psgNote  F3
      repeatSection1Start
              psgNoteL E3,6
              psgNote  F3
              psgNote  A3
              psgNote  F3
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL C3,6
              psgNote  As2
      countedLoopEnd
      countedLoopStart 7
              psgNoteL As2,6
              psgNote  A2
      countedLoopEnd
        psgInst 07Bh
              psgNoteL Fs2,6
              psgNote  As2
              psgNote  C3
              psgNote  Ds3
              psgNote  Fs3
              psgNote  As3
              psgNote  C4
              psgNote  Ds4
              psgNote  Fs2
              psgNote  A2
              psgNote  As2
              psgNote  D3
              psgNote  Fs3
              psgNote  A3
              psgNote  As3
              psgNote  D4
              psgNote  Ds4
              psgNote  C4
              psgNote  As3
              psgNote  G3
              psgNote  As3
              psgNote  G3
              psgNote  As3
              psgNote  C4
              psgNote  F4
              psgNote  Ds4
              psgNote  C4
              psgNote  A3
              psgNote  F3
              psgNote  Ds3
              psgNote  C3
              psgNote  A2
      repeatEnd
      repeatSection2Start
              psgNoteL A3,6
              psgNote  F3
              psgNote  D3
              psgNote  A2
        psgInst 07Ah
      countedLoopStart 7
              psgNoteL Ds3,6
              psgNote  D3
      countedLoopEnd
      countedLoopStart 7
              psgNoteL C3,6
              psgNote  Gs2
      countedLoopEnd
        psgInst 07Bh
              psgNoteL A2,6
              psgNote  G2
              psgNote  A2
              psgNote  G2
              psgNote  A2
              psgNote  G2
              psgNote  D3
              psgNote  As2
              psgNote  A2
              psgNote  F2
              psgNote  A2
              psgNote  F2
              psgNote  A2
              psgNote  F2
              psgNote  A2
              psgNote  C3
              psgNote  As2
              psgNote  G2
              psgNote  As2
              psgNote  G2
              psgNote  As2
              psgNote  G2
              psgNote  As2
              psgNote  D3
              psgNote  Ds3
              psgNote  C3
              psgNote  Ds3
              psgNote  Fs3
              psgNote  As3
              psgNote  Fs3
              psgNote  As3
              psgNote  C4
        shifting 010h
        psgInst 07Bh
              psgNote  Cs5
              psgNote  Ds5
              psgNoteL F5,108
              psgNoteL Ds5,12
              psgNote  Cs5
              psgNote  A4
              psgNote  As4
              psgNoteL C5,24
              psgNoteL Cs5,12
              psgNoteL Gs4,108
              psgNoteL C4,12
              psgNote  Cs4
              psgNoteL As4,24
              psgNoteL Gs4,12
              psgNoteL As4,8
              psgNote  B4
              psgNote  Cs5
              psgNoteL Ds5,108
              psgNoteL Cs5,12
              psgNote  B4
              psgNote  G4
              psgNote  Gs4
              psgNoteL As4,24
              psgNoteL B4,12
              psgNoteL Cs5,48
              psgNote  D5
              psgNoteL E5,36
        shifting 00h
        psgInst 07Ch
              psgNoteL C2,6
              psgNote  E2
              psgNote  A2
              psgNote  C3
              psgNote  C3
              psgNote  E3
              psgNote  A3
              psgNote  C4
              psgNote  Fs3
              psgNote  Ds3
              psgNote  B2
              psgNote  Ds3
              psgNoteL Fs3,4
              waitL    8
              psgNoteL Fs3,6
              psgNote  Fs3
              psgNote  Gs3
              psgNote  E3
              psgNote  B2
              psgNote  E3
              psgNoteL Gs3,4
              waitL    8
              psgNoteL Gs3,4
              waitL    8
              psgNoteL A3,6
              psgNote  Fs3
              psgNote  D3
              psgNote  Fs3
              psgNote  A3
              psgNote  Fs3
              psgNote  D3
              psgNote  Fs3
              psgNote  A3
              psgNote  Fs3
              psgNote  Fs4
              psgNote  D4
              psgNote  A3
              psgNote  Fs3
              psgNote  D3
              psgNote  A2
              psgNote  A3
              psgNote  Fs3
              psgNote  D3
              psgNote  Fs3
              psgNoteL A3,4
              waitL    8
              psgNoteL A3,6
              psgNote  A3
              psgNote  B3
              psgNote  Gs3
              psgNote  E3
              psgNote  Gs3
              psgNoteL B3,4
              waitL    8
              psgNoteL B3,4
              waitL    8
              psgNoteL Cs4,6
              psgNote  As3
              psgNote  Fs3
              psgNote  As3
              psgNote  Cs4
              psgNote  As3
              psgNote  Fs3
              psgNote  As3
              psgNote  Cs4
              psgNote  As3
              psgNote  As4
              psgNote  Fs4
              psgNote  Cs4
              psgNote  As3
              psgNote  Fs3
              psgNote  Cs3
      countedLoopStart 7
        psgInst 00h
              waitL    102
      countedLoopEnd
        psgInst 07Ch
              psgNoteL Fs2,4
              psgNote  As2
              psgNote  Cs3
              psgNote  Fs3
              psgNote  As3
              psgNote  Cs4
        psgInst 00h
              waitL    72
        psgInst 07Ch
              psgNoteL Fs2,4
              psgNote  B2
              psgNote  Ds3
              psgNote  Fs3
              psgNote  B3
              psgNote  Ds4
        psgInst 00h
              waitL    96
              waitL    24
        psgInst 07Ah
              psgNoteL As2,153
        shifting 010h
              psgNoteL Ds4,3
              psgNote  F4
              psgNote  Fs4
              psgNote  Gs4
              psgNote  As4
              psgNote  C5
              psgNote  Cs5
              psgNote  Ds5
      mainLoopEnd
Music_1_Channel_9:
      channel_end

I made a conversion tool to import music from shiru's VGM Music Maker's "TXT export" feature.
You can find it here : disasm/data/sound/SF2SoundTools-1.0.0.jar, and you can execute it properly with vgmmmtxtimport.bat.
So you can now compose new music and import it into an existing music bank, if you make enough place for it.
This conversion doesn't make any kind of space usage optimization though, so a good knowledge of how tracker music patterns work, and a good knowledge of the sound driver's music format, are required to replace repeated patterns with appropriate loops.
Here are the YM instrument bank and PCM bank you can use in VGM MM :
http://shrubbery.free.fr/sf2hack/sf2disasm/howtos/vgmmm/vgmmmsf2.zip

Re: SF2 Disassembly Tool Suite

PostPosted: Sat Apr 13 2019 8:40pm
by RockyGateway
Hello, I've got a somewhat weird question to ask and I'm not entirely sure how to write it. Is there a way to control which "water" animation is currently showing up on the rendered map within SF2MapEditor or one of the other two map editors?

For example

These would be the first and second water animations:
Image Image

Right now only one of those shows up on the map render, and I can't for the life of me figure out how to make the other one appear. I'm not even sure if having both be available to show up is possible or not. The reason why I'm looking for this is because I'm making some animated wallpapers for Wallpaper Engine, and so far animating the water the old fashioned way by arranging 8x8 blocks in the right order is getting a bit annoying.

Re: SF2 Disassembly Tool Suite

PostPosted: Tue Apr 16 2019 8:20am
by Wiz
Hey RockyGateway,
SF2MapEditor currently cannot display the alternative animation tiles, but that's something I'll be glad to implement as it's a totally legitimate request to work on map animations properly.
Right now I'm on a long vacation trip (just saw the Grand Canyon today, oh the vertigo :D) so I won't be able to provide an update until next month, but please remind me to work on this and I'll be happy to do something quickly for your needs and then maybe make animation edits a bit easier while I'm at it. :)

Re: SF2 Disassembly Tool Suite

PostPosted: Sun Apr 21 2019 4:22pm
by FfuzzyLogik
Wiz by the way, take time to go in Grand Canyon instead of answering ! Its so intense, big... You've 2 billion years front of you ! Have pleasure. If you have time to go far to the north, I suggest you Yosemite National Park, very nice forest (and less hot) of some of biggest trees in world. Have fun !

Re: SF2 Disassembly Tool Suite

PostPosted: Sun May 05 2019 5:06am
by jordanelias
Howdy! I am very limited in working with the disassembly tool suite as I am by no means a coder, but I do my best to poke around. Right now, I am trying to figure out how to implement a debuff called 'Weaken' that would parallel Slow in affecting the enemy's Attack attribute.

Code: Select all
; =============== S U B R O U T I N E =======================================

WriteSkirmishScript_WeakenMessage:
      
      jsr     GetBaseATK
      mulu.w  #3,d1
      lsr.l   #3,d1
      move.w  #$10,(a6)+
      move.w  #$14D,(a6)+
      move.w  d0,(a6)+
      move.w  #0,(a6)+
      move.w  #0,(a6)+
      move.w  d1,(a6)+
      rts

   ; End of function WriteSkirmishScript_WeakenMessage

Even in the event that this is correct, I believe that I would have to edit it into the .asm files located in \data\stats\spells followed by editing the relevant .asm in data\stats\allies\stats.

As a companion, I would love to implement a debuff called 'Root' that would prevent the enemy from moving. I know that Siel kindly released some patches that did similar things to what I am asking about here, but his patches are not 1:1 for what I want.

Any help would be greatly appreciated!

Edit:
Code: Select all
SN 68k version 2.53

C:\EMULATION\GENESIS\SF2DISASM-MASTER-VANILLA\DISASM\DATA\STATS\SPELLS\SPELLDEFS.ASM(140) : Error : Expression must evaluate
val: set val|spell_weaken
C:\EMULATION\GENESIS\SF2DISASM-MASTER-VANILLA\DISASM\DATA\STATS\ALLIES\STATS\ALLYSTATS00.ASM(16) : Error : Expression must evaluate
val: set val|spell_weaken
Errors during pass 1 - pass 2 aborted
Assembly completed.
2 error(s) from 293766 lines in 0.50 seconds

Image

Re: SF2 Disassembly Tool Suite

PostPosted: Mon Jun 03 2019 10:10pm
by Wiz
Hey RockyGateway,
I have finally been able to provide a solution for your needs (to display all animation frames of a map).

First I took the occasion to re-work the way map data was formatted, and this is what took me quite some time :
Most of map data is now formatted into ASM files for better editability, with the exception of compressed data, naturally (blockset and layout).

Tools have been updated to take the new ASM format into account as the new default format.
I insist on the "default" format :
Previous BIN format still is supported, and anybody can import their work on BIN files to export them into ASM files and go on with this new format.

Now for the animation data :
If you update you SF2DISASM workdir you'll find a new tool :
disasm\data\maps\SF2MapAnimationEditor-1.0.0.jar
This tool is a stripped-down fork of SF2MapEditor with a specific way to load map data, in order to generate images for each animation frame.
Now you can select a frame in the animation table to display it, and then export it into PNG format.

Theoretically you should also be able to edit data from this editor and see the result on the map in real time, but at the moment this is a real mess : too many use cases not properly taken into account, and I won't spend much more time on it for now. Use it at your own risk ! :shifty:
So my advice is to edit the animation data ASM file from a text editor, and then reload it in SF2MapAnimationEditor whenever you need to see the result.

Hope that will be OK for your needs.

I'll continue working on map-related tooling next I think, most probably an attempt to generate map layouts, blockets and tilesets from a simple image ... but I'm still not sure of the feasibilite, we'll see. ;)


Jordanelias, I'm sorry about not being able to help you, as I've never really made such modifications in the game engine myself. Also, I must say I don't get the assembling error ... maybe you should declare the SPELL_WEAKEN constant in sf2enums.asm first ?

In any case, hopefully more map-related news soon !

Re: SF2 Disassembly Tool Suite

PostPosted: Sun Jun 09 2019 8:17am
by RockyGateway
Hey, thanks a lot for the effort. I'll give it a try sometime soon.

Re: SF2 Disassembly Tool Suite

PostPosted: Thu Jun 27 2019 3:04pm
by Wiz
Great news, I am very proud to say that generating a new map from an image file now works indeed ! :)

The new tool, SF2MapCreator, opens new possibilities, but it still has quite precise requirements in terms of input image properties :
- Supported formats : PNG, GIF
- Dimensions : 1536px*1536px (64 blocks of 24 pixels each)
- Colors : 16-indexed color mode, with transparency at index 0
- Even though index 0 is transparent, it has to have a distinct color value.
EDIT :
Now managing palettes with more flexibility, with the ability to import a specific target palette file, and the ability to manage transparency color when not at index 0.

Once an image is properly imported, SF2MapCreator will generate the layout file along with the needed blocksets and tilesets.
The 5 map tilesets can be any combination of either existing ones or new ones, in order to optimize space by re-using common tiles.
Note : the data generation step is quite heavy and can take a few minutes to process :(

I've updated SF2MapEditor to be able to export both blockset and map layout image files.
This way, you can directly work from existing maps with proper color modes, either by drawing on them, or by importing the blockset into your prefered tile-base map creation software. (I highly suggest Tiled ! ;))
The export features also export two metadata files :
- Map layout flags : exploration/interaction flags.
- High priority tiles : which tiles should be displayed over mapsprites (trees, roofs etc.)
Both can be re-imported into SF2MapCreator if needed, but they are optional.

Examples :

- Exporting Granseal town and just drawing on it from GIMP. (click on image to display it with more details)
Image
After editing the image, GIMP exported it with transparency color reset at value $000000 though, so I had to fix that with another program (XnView).
I've kept map 3 tileset 0 and 4, and let SF2MapCreator put the other needed tiles into tilesets 1-2-3.
You can notice the resulting tilesets do not use the full 5 tileset space available, so there is still potential for more specific graphics here if needed.

- Importing an SF1 map.
Image
The only SF1 map rips I could find were on vgmaps.com and gamefaqs.com, and they all have mapsprites and other graphics on them, so this is not really practical.
I imported the image as a tileset into Tiled, and then reworked the map a bit to roughly overwrite non-map graphics with proper map blocks instead.
Then I used an existing SF2 map layout image file (with a properly organized 16-color palette) as the base in GIMP, then I removed the existing graphics and pasted the graphics from the Tiled map : GIMP does the job of re-assigning pixels to the nearest color in the available palette.
(once again I had to fix the transparency color value outside of GIMP)
Of course the palette colors could have been changed to match those of the original map ! I was just lazy and well, I enjoy the result anyway. Look at that blue sky :shifty:

So these two examples show new ways of editing existing maps and creating whole new maps.

However this is not the end of my work on this, as I'm only discovering the potential of Tiled, a tile-based map editor which has really powerful tools to make the map creation process as enjoyable as possible.
Most notably, rules can be declared to automatically set the proper tiles/blocks when the adequate pattern is recognized : border/corner tiles can be automatically assigned, making everything a lot easier.
More info here :
http://doc.mapeditor.org/en/stable/manu ... ight=rules
I'll see what I can do to provide some kind of base meta-blockset along with the appropriate rules, for everybody to enjoy easy map making ! :)

EDIT :
More recent attempt with a screenshot from SF1Editor's battle editor, it works very well !
Image