Hmm. That's strange. As long as you load the proper enemy data offset for your level, and you use valid enemies, they should show up. There's a way that you can make 3-byte objects, 4-byte objects, and enemies disappear and appear under the View menu, through More. However, everything should be visible by default, so you probably would have figured out those functions if you had somehow clicked in there by accident.
I did a quick test of something. In a copy of the original Super Mario Bros. 3 ROM, I changed 0xC537 (the start of the enemy data for 1-1) to FF. Playing the level in FCEUXD, the enemies still showed up. However, in SMB3 Workshop, the enemies didn't. Did you not change the first byte of your enemy data string to 01? SMB3 Workshop will stop loading enemy bytes once it hits FF, apparently even if the very first byte is FF, even though the first byte of an enemy data string isn't even for an enemy.
It seems that this is most likely the solution to your issue, but please let me know if it somehow isn't. If it isn't, I might require more information, like the actual bytes in your enemy data.
Also, there's no need to separate your enemy data sets with more than just one FF to terminate the previous one before the next. Plus, you most likely should have more than enough space in the entire enemy data ROM bank. I've never even used the whole thing, and I tend to insert quite a few enemies in each area of every level. Although, my levels do tend to be larger, so I don't have as many individual levels, either.
As for music, what specifically are you looking for? The music data itself, or where the values are loaded from to determine which song is used for the levels and maps?
For music editing, it's definitely more involved with being able to get something that actually works, though the data can be found and documented. I remember writing it down years ago, but I no longer have those notes in my current possession. To document them again would take some time, but I'm not going to focus on that right now.
As for music values
, this post
contains the ROM offsets for map music.
0x143CA-0x143D2 (0x9) - World Map Music when arriving from Warp Zone.
0x3C424-0x3C42C (0x9) - World Map Music.
You have to change both values to make sure that the music for each map will be the same, regardless of wherever Mario or Luigi comes from.
0x143CA - World 1: 01
0x143CB - World 2: 02
0x143CC - World 3: 03
0x143CD - World 4: 04
0x143CE - World 5: 05
0x143CF - World 6: 06
0x143D0 - World 7: 07
0x143D1 - World 8: 08
0x143D2 - World 9: 0B
0x3C424 - World 1: 01
0x3C425 - World 2: 02
0x3C426 - World 3: 03
0x3C427 - World 4: 04
0x3C428 - World 5: 05
0x3C429 - World 6: 06
0x3C42A - World 7: 07
0x3C42B - World 8: 08
0x3C42C - World 9: 0B
Here is the music that you can get for each value:
00 - No Music
01 - World 1 Map
02 - World 2 Map
03 - World 3 Map
04 - World 4 Map
05 - World 5 Map
06 - World 6 Map
07 - World 7 Map
08 - World 8 Map
09 - World 9 Map/Coin Heaven
0A - Star Power
0B - Warp Whistle - World 9 Map/Coin Heaven
0C - Music Box
0D - Returning to Earth with the Wand
0E - Game Theme
0F - Princess Saved
10 - Plains
20 - Underground
30 - Water
40 - Dungeon
50 - Boss
60 - Ship
70 - Battle
80 - Mushroom House
90 - Hilly
A0 - Mushroom House (#2)
B0 - Bowser Fight
C0 - Boss (Lighter)
D0 - Music Mix (#1)
E0 - Music Mix (#2)
F0 - Music Mix (#3)
The code that determines the music to play in a level/area depending on the value in the level header is located at 0x3D8D8 in the ROM ($98C8 when loaded in RAM).
$98C8:B1 61 LDA ($61),Y @ $B467 = #$00
$98CA:29 0F AND #$0F
$98CD:BD AC 97 LDA $97AC,X @ $97AC = #$10
AND #$0F strips the first 4 bits and uses the last 4 bits of the 9th of 9 bytes loaded from the level header to determine which value is loaded from another set/collection of values, at $97AC, which is at 0x3D7BC in the ROM.
0x3D7BC - 0x3D7CB (0x10)
10 20 30 40 50 60 70 80 90 0D 09 A9 00 8D 00 07
However, see the "A9 00 8D 00 07"? That's actually code, and the original game never intends for those bytes to be used as values to determine songs in the levels. In SMB3 Workshop, you have the option to choose between 16 music selections, but the last 5 were never meant to be used.
Therefore, you could potentially have 5 more possible selections to provide more variety. However, if you change the values at the original location in the ROM from where the songs come from, you would be destroying code.
So, the best option is to change where the game loads the song values from.
At 0x3D8DE in the ROM, change AC 97 to 10 9F. This will change the loading RAM address from $97AC to $9F10. This new location is at 0x3DF20 in the ROM.
At 0x3DF20, your new level songs value table, if you want to call it that, will be from the range of 0x3DF20 - 0x3DF2F (0x10).
You can insert the values for the songs that you want. I would recommend keeping the first 11 values the same as they originally were to make it easier to remember what they are when you're changing the music in SMB3 Workshop. That is, if you plan to use all of that music to begin with. It really is up to you!
The collection that I used for Luigi's Chronicles 2 was the following (although, for my implementation, I used $9F1B, or 0x3DF2B, as the starting point instead, for whatever reason - I really can't remember
0x3DF20 - 0x3DF2F (0x10)
10 20 30 40 50 60 70 80 90 0D 09 0A 00 0E 0F B0
My first 11 music options are the same as the original game, but now I can also use the Star Power theme, no music, Game Theme, the Princess Saved theme, and the Bowser Fight music.
Remember, however, that using some of the songs in levels might not work as intended due to the speed-up effect when the time approaches the 100-seconds mark, like music intended for maps. Also, if you set no music for in a level, and you enter with or collect a star at some point, once the star power expires, the Star Power theme will still continue playing. Similarly, if you hit a P-Switch.
If a level starts with 100 seconds time, however, the speed-up effect won't activate.
As for time
, the original game's code only allows for 4 possible values: 300 (0x), 400 (4x), 200 (8x), or infinite (Cx) seconds.
The code that determines the time in a level starts at 0x3D8C4 in the ROM ($98B4 in RAM).
$98B4:B1 61 LDA ($61),Y @ $B467 = #$00
$98B6:29 C0 AND #$C0
$98BD:BD A8 97 LDA $97A8,X @ $97A8 = #$03
$98C0:8D EE 05 STA $05EE = #$04
At 0x3D7B8 in the ROM, or $97A8 in RAM, there are the values that the game uses for setting the time.
0x3D7B8 - 0x3D7BB (0x4)
03 04 02 00
This is my modified code:
$98B4:B1 61 LDA ($61),Y @ $B467 = #$41 A: 41 X: 07 Y: 08
$98B6:29 F0 AND #$F0 A: 40 X: 07 Y: 08
$98B8:18 CLC A: 40 X: 07 Y: 08
$98B9:4A LSR A: 20 X: 07 Y: 08
$98BA:4A LSR A: 10 X: 07 Y: 08
$98BB:4A LSR A: 08 X: 07 Y: 08
$98BC:4A LSR A: 04 X: 07 Y: 08
$98BD:AA TAX A: 04 X: 04 Y: 08
$98BE:8D EE 05 STA $05EE = #$04 A: 04 X: 04 Y: 08
0x3D8C4 - 0x3D8D2 (0xF)
B1 61 29 C0 18 2A 2A 2A AA BD A8 97 8D EE 05
B1 61 29 F0 18 4A 4A 4A 4A AA 8D EE 05 EA EA
Instead of loading the values that determine the times from $97A8 in RAM or 0x3D7B8 in the ROM, which limits you to only four possible values, the unnecessary bits of the level header value are stripped so that you are left with a valid time value, making 0/infinite, 100, 200, 300, 400, 500, 600, 700, 800, and 900 possible (don't go past 9). You can set 0, 4, and 8 in SMB3 Workshop (for infinite, 400, and 800), but for any other specific value, you'll have to modify the 9th level header byte directly in a hex editor yourself.
Values to be loaded: 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x
OPERATION HEX DEC 128 064 032 016 008 004 002 001
0x 0- 15 0 0 0 0 x x x x
1x 16- 31 0 0 0 1 x x x x
2x 32- 47 0 0 1 0 x x x x
3x 48- 63 0 0 1 1 x x x x
4x 64- 79 0 1 0 0 x x x x
5x 80- 95 0 1 0 1 x x x x
6x 96-111 0 1 1 0 x x x x
7x 112-127 0 1 1 1 x x x x
8x 128-143 1 0 0 0 x x x x
9x 144-159 1 0 0 1 x x x x
So AND #$F0:
F0 240 1 1 1 1 0 0 0 0
Original - AND #$C0:
C0 192 1 1 0 0 0 0 0 0
The first 4 bits are used for the time, and the last four bits are used for the music. With the original code, AND #$C0 limited you to only four possible values, as only the first two bits were used. With AND #$F0, you have more options for time settings depending on how your different levels and worlds overall vary in size and difficulty.
If you have anymore questions, please feel free to ask. I'm excited about your hack coming together!
By the way, were you still planning to submit your previous SMB3 hack like you mentioned before, or do you feel that starting fresh is what you would prefer to do?