edit: first, by the way, if you have the missing system font problem, just reboot, this will reassign the system font to working order !
first new version of the tools for U4:
http://www.sendspace.com/file/fgx7pe (easier to work with, i padded the dec file with leading 0s so that adress in game in in the dec match)
BPzeBanshee wrote:BarfHappy wrote:Good news, altering the loading sequence and the levels playlist is wonderfully accepted by the game
So, there is nothing preventing me from doing a level editor xD However, i cannot add tilesets to the loading lists (fixed size by level, would screw up everything to shift the whole rom), so forget about having a bosses rondo in level 1 ...
'bosses rondo' = boss rush?
This would explain why Cave make their boss rush modes basically stages in themselves but jumped in position towards when the boss would normally appear anyway!
Yep, i was talking about a boss rush, but no no i meant that within the games, each level has no spare entry to add elements to load. And there is a huge amount of data after these. So i would have to change literally hundreds of pointers, that would be alright if i knew the exact use of every block of data, but that s not the case, sadly. So i have to play it safe and not go beyond what already exists
By the way, for the curious:
enemy playlist: very simple, frame of appearance (right shifted 7 bits to the right) + move index + special + offset X + offset Y
followed by the
moves data:
first entry can be a position offset or skipped, then the moves sequence
CODE + D0 + D1 + D2
code 00: offset D0=0 D1=OFFSY D2=OFFSX
code 14: bounce D0=0 D1=bits to bounce up or down D2=bits to bounce left or right
code 08: set speed D1D2=speed
code 06: move right D0=angle, D1D2=number of frames (0 for infinite)
code 07: move left D0=angle, D1D2=number of frames
...
FF FF FF FF to end the move and stay on the last entry
followed by the pointers to the moves (so basically the code searches in here the address of the move to be used)
Example in deathsmiles:
frames counter used for enemies at c53a014
1st level enemy playlist: c1cd4a8 (so 1cd4a8 in the file)
0006 0011 000A 0000 00D4 0157
This tells us, when the frame counter reaches 0x300, spawn an enemy 0x11 (bird), using the move at index 0x0A , nothing special to pass, at vertical position 0xD4 (quite high), and horizontal position 0x157 (outside boundaries to the right)
1st level moves pointers: c1ce1cc (1ce1cc in the file) , we need to go at the 0x0A entry (so c1ce1cc+4*0x0a, c1ce1f4 ): the value there is 0C1CDB70 (1cdb70 in the file) , which is the location of the moves description
move description:
00 00 00 00 (no offset)
08 00 00 20 (speed set, 20 units/frame)
07 80 00 00 (move left, straight left [00 is down, FF is up, 80 is in between, inifinite number of frames)
FF FF FF FF (end of move)
The map starts off at c27e9c4 (27e9c4)
it is very simple in principle, it works by line bottom to top and by page of plane, far plane first, close after, each tile is a 32x32 cut of the BIG BAD OBJECT, i call the big bad object the memory where all the images are loaded to.
so basically: you have entries like that :
00 80 00 60: which means, cut me a 32x32 slice, at position of the BBO 0x0080 0x0060... but... eh... that would be too easy xD so depending on the plane, the window of the big bad object is not the same (layers detail at c2b7488/2b7488)
st5ex0boss/st5ex0boss.cpp, st5ex0boss/st5ex0b_appear.cpp, st5ex0boss/st5ex0b_disp.cpp, st5ex0boss/st5ex0b_move.cpp, st5ex0boss/st5ex0b_anime.cpp, st5ex0boss/st5ex0b_check.cpp
And there shall be TTLB... <3 Muwohohoho