Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ASSUMES the layer1 pointer has already been copied to this stage
- function moveAllSublevels(stage, rom)
- {
- var sublevels = stage.copyfrom.sublevels.slice(0);
- sublevels[0] = stage.id;
- var remap = {}; remap[stage.copyfrom.id] = stage.id;
- for (var i = 1; i < sublevels.length; ++i)
- {
- var id = sublevels[i];
- if ((id & 0x100) !== (stage.id & 0x100))
- {
- var newid = remap[id] = findOpenSublevel(stage.id & 0x100, rom);
- moveSublevel(id, newid, rom);
- }
- }
- // fix all screen exits
- for (var i = 0; i < sublevels.length; ++i)
- {
- var id = sublevels[i], exits = getScreenExits(id, rom);
- for (var j = 0; j < exits.length; ++j)
- {
- var x = exits[j], target = getSublevelFromExit(x);
- if (target in remap)
- {
- var newtarget = remap[target];
- if (!x.issecx) rom[x.addr+3] = newtarget;
- else
- {
- var secid = x.target;
- var newsecid = findOpenSecondaryExit(stage.id & 0x100, rom);
- rom[x.addr+3] = newsecid & 0xFF;
- // copy all secondary exit tables
- rom[SEC_EXIT_OFFSET_LO + newsecid] = rom[SEC_EXIT_OFFSET_LO + secid];
- rom[SEC_EXIT_OFFSET_HI + newsecid] = rom[SEC_EXIT_OFFSET_HI + secid];
- rom[SEC_EXIT_OFFSET_X1 + newsecid] = rom[SEC_EXIT_OFFSET_X1 + secid];
- rom[SEC_EXIT_OFFSET_X2 + newsecid] = rom[SEC_EXIT_OFFSET_X2 + secid];
- // fix secondary exit target
- rom[SEC_EXIT_OFFSET_LO + newsecid] = newtarget & 0xFF;
- rom[SEC_EXIT_OFFSET_HI + newsecid] &= 0xF7;
- rom[SEC_EXIT_OFFSET_HI + newsecid] |= (newtarget & 0x100) >> 5;
- // clear old secondary exit target
- rom[SEC_EXIT_OFFSET_LO + secid] = 0x00;
- rom[SEC_EXIT_OFFSET_HI + secid] &= 0xF7;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment