Is there space to expand the souls/items/enemy data in any of the roms? I'd like to add a bunch, but that doesn't seem to be a current feature.
Let me break this down into two questions: Is there a way to add a lot of usable free space into the game's RAM? and Can you use all this free space to add new enemies/items/souls?
For the first question, I have good news. I found large amounts of free space in RAM for the three games a few weeks ago. But since it's completely unused, it will be necessary to add a new overlay to make use of this free space. I'm planning to include a feature in 1.5 that will let you easily add a new overlay, and will also apply an asm patch so that the new overlay actually gets loaded into memory. Once that's done, you can just manually modify the overlay file however you want, and it will be loaded into RAM correctly. This will be useful if you want to add new asm code but there's not enough room in the existing files for it.
But, as for adding new enemies/items/souls: This would be very difficult even with tons of free space. You can simply copy the whole item/soul/enemy list into the free space. But then you also have to modify all the code that uses it so it realizes there's a new item/enemy/soul.
You'd need to find any pointers to the item/soul/enemy lists in the code and change them to the point to where the new lists are.
DSVEdit also has code pointing to these lists, so you'd need to modify DSVEdit's code to point to the new lists if you want to be able to use DSVEdit to modify items/souls/enemies after adding a new one.
For items/souls, there might not even be space in the right part of the save file to keep track of which items/souls you own. I'll need to figure out the exact save file format to know.
Also for souls, the game is hardcoded to think that souls 00-34 are red, 35-58 are blue, 59-73 are yellow, and 74-7A are ability souls. So if you wanted to add a soul other than an ability soul, you'd need to find these values in the code, change them, and then shift all the souls after the new one you're adding down in the list. Also, soul 44 (Flying Humanoid) is hardcoded to act differently when an enemy drops it, so you'd need to find this in the code and change the soul ID to whatever the new ID of Flying Humanoid is. This type of thing is also true for items, it tells which items are which type by looking at the IDs, and a number of items have effects hardcoded to their IDs and you'd need to change every one of those every time you add a new item.
For enemies there are lists besides the main enemy DNA list you'd also need to repoint to free space and add a new entry.
And those are just the problems I can think of off the top of my head, I'm sure you'd run into some other issues in the process too.
Basically, I recommend replacing existing enemies/items/souls instead of adding new ones.
Also: could we import assets from the other games and use them, or would that cause a bunch of trouble? The rom could be expanded and it probably wouldn't cause any issues.
Expanding the rom is easy, DSVEdit does this automatically already. There's a bit of a bug with this as NecroCorey pointed out but that'll be fixed for the next version.
If you want to replace a sprite or gfx file with one from a different game, that should work fine. The asset file formats are the same between games (except for the file format for enemies that use a skeletal animation system, this was hardcoded in DoS/PoR but is a proper standalone file format in OoE).
If you wanted to add an asset file from a different game without replacing an existing one you'd run into problems like I described above with items/souls/enemies, though probably not as bad.
I'm kind of wanting to grab PoR and make a Shanoa/Soma team, and throw in a bunch of new maps to expand on PoR's map. It's a ridiculous idea, but your editor is completely blowing my mind right now and I think I can handle it.
If by maps you mean rooms, it probably wouldn't be hard to add a new room to a sector. You'd need some free space, but I think you'd just move the sector's room list to free space, change one pointer so the area knows where that sector now is, then add a new room after that in free space and point the sector to it.
Adding new areas/sectors/area maps would probably be more difficult, but I've never looked into so I'm not sure.
Good luck adding Soma and Shanoa to PoR! That's a really cool idea.
edit: Do you use Ida Pro for any of this? I'm looking at how this stuff works, and... like, take Souls for example. The Imp soul is at 02206DC0 but... where?
IDA gives me:
RAM:02206DC0 dword_2206DC0 % 0x520 ; DATA XREF: RAM:0209D1E4o
and the RAM address 0209D1E4 is an assembler psuedo instruction?
I've never used Ida Pro.
0209D1E4 isn't an asm instruction, it's just a pointer to where the imp soul's data is located in RAM.
To view these things, you need to run the game in an emulator. If you want to view code you need no$gba debugger version. Then you can go to 02206DC0 and view the function for the imp soul.
If you want to view data desmume and no$gba debugger version both have memory viewers you can use. Go to 0209D1E4 and you can see the data for the imp soul. Then you can modify it in real time if you want to test out how changing values affects things without having to use DSVEdit and relaunch the game every time you make a change. I do this a lot when trying to figure out what unknowns do.