public void Assemble() { int offset = 0; offset = (index * 18) + 0x1D0040; offset++; rom[offset] = messageBox != 0 ? (byte)((messageBox - 1) << 1) : (byte)0xFE; offset++; rom[offset] = maskLowX; Bits.SetBit(rom, offset, 7, maskLock); offset++; rom[offset] = maskLowY; offset++; rom[offset] = maskHighX; offset++; rom[offset] = maskHighY; offset++; rom[offset] = xNegL2; offset++; rom[offset] = yNegL2; offset++; rom[offset] = xNegL3; offset++; rom[offset] = yNegL3; Bits.SetBit(rom, offset, 7, infiniteScrolling); offset++; Bits.SetBit(rom, offset, 0, scrollWrapL1_HZ); Bits.SetBit(rom, offset, 1, scrollWrapL1_VT); Bits.SetBit(rom, offset, 2, culexA); Bits.SetBit(rom, offset, 3, scrollWrapL2_HZ); Bits.SetBit(rom, offset, 4, scrollWrapL2_VT); Bits.SetBit(rom, offset, 5, culexB); Bits.SetBit(rom, offset, 6, scrollWrapL3_HZ); Bits.SetBit(rom, offset, 7, scrollWrapL3_VT); offset++; rom[offset] = 0; switch (syncL2_HZ) { case 0: Bits.SetBitsByByte(rom, offset, 0x03, false); break; case 1: Bits.SetBitsByByte(rom, offset, 0x02, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0x03, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x01, true); break; } switch (syncL2_VT) { case 0: Bits.SetBitsByByte(rom, offset, 0x0C, false); break; case 1: Bits.SetBitsByByte(rom, offset, 0x08, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0x0C, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x04, true); break; } switch (syncL3_HZ) { case 0: Bits.SetBitsByByte(rom, offset, 0x30, false); break; case 1: Bits.SetBitsByByte(rom, offset, 0x20, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0x30, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x10, true); break; } switch (syncL3_VT) { case 0: Bits.SetBitsByByte(rom, offset, 0xC0, false); break; case 1: Bits.SetBitsByByte(rom, offset, 0x80, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0xC0, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x40, true); break; } offset++; switch (scrollDirectionL2) { case 0: rom[offset] = 0x00; break; case 1: rom[offset] = 0x08; break; case 2: rom[offset] = 0x10; break; case 3: rom[offset] = 0x18; break; case 4: rom[offset] = 0x20; break; case 5: rom[offset] = 0x28; break; case 6: rom[offset] = 0x30; break; case 7: rom[offset] = 0x38; break; } switch (scrollSpeedL2) { case 0: Bits.SetBitsByByte(rom, offset, 0x00, true); break; case 4: Bits.SetBitsByByte(rom, offset, 0x01, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0x02, true); break; case 1: Bits.SetBitsByByte(rom, offset, 0x03, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x04, true); break; case 5: Bits.SetBitsByByte(rom, offset, 0x05, true); break; case 6: Bits.SetBitsByByte(rom, offset, 0x07, true); break; } Bits.SetBit(rom, offset, 7, scrollL2Bit7); offset++; switch (scrollDirectionL3) { case 0: rom[offset] = 0x00; break; case 1: rom[offset] = 0x08; break; case 2: rom[offset] = 0x10; break; case 3: rom[offset] = 0x18; break; case 4: rom[offset] = 0x20; break; case 5: rom[offset] = 0x28; break; case 6: rom[offset] = 0x30; break; case 7: rom[offset] = 0x38; break; } switch (scrollSpeedL3) { case 0: Bits.SetBitsByByte(rom, offset, 0x00, true); break; case 4: Bits.SetBitsByByte(rom, offset, 0x01, true); break; case 2: Bits.SetBitsByByte(rom, offset, 0x02, true); break; case 1: Bits.SetBitsByByte(rom, offset, 0x03, true); break; case 3: Bits.SetBitsByByte(rom, offset, 0x04, true); break; case 5: Bits.SetBitsByByte(rom, offset, 0x05, true); break; case 6: Bits.SetBitsByByte(rom, offset, 0x07, true); break; } Bits.SetBit(rom, offset, 7, scrollL3Bit7); offset++; rom[offset] = 0; Bits.SetBit(rom, offset, 4, ripplingWater); Bits.SetBitsByByte(rom, offset, prioritySet, true); offset++; switch (effectsL3) { case 0: rom[offset] = 0x00; break; case 1: rom[offset] = 0x01; break; case 2: rom[offset] = 0x02; break; case 3: rom[offset] = 0x03; break; case 4: rom[offset] = 0x05; break; case 5: rom[offset] = 0x06; break; case 6: rom[offset] = 0x07; break; case 7: rom[offset] = 0x08; break; case 8: rom[offset] = 0x09; break; case 9: rom[offset] = 0x0A; break; case 10: rom[offset] = 0x0B; break; case 11: rom[offset] = 0x0C; break; case 12: rom[offset] = 0x0D; break; case 13: rom[offset] = 0x0E; break; case 14: rom[offset] = 0x0F; break; case 15: rom[offset] = 0x10; break; case 16: rom[offset] = 0x11; break; case 17: rom[offset] = 0x12; break; case 18: rom[offset] = 0x14; break; case 19: rom[offset] = 0x15; break; case 20: rom[offset] = 0x16; break; case 21: rom[offset] = 0x17; break; case 22: rom[offset] = 0x18; break; } offset++; switch (effectsNPC) { case 0: rom[offset] = 0x00; break; case 1: rom[offset] = 0x05; break; case 2: rom[offset] = 0x06; break; case 3: rom[offset] = 0x07; break; case 4: rom[offset] = 0x0A; break; case 5: rom[offset] = 0x0B; break; case 6: rom[offset] = 0x0C; break; case 7: rom[offset] = 0x0D; break; case 8: rom[offset] = 0x0F; break; case 9: rom[offset] = 0x10; break; case 10: rom[offset] = 0x12; break; case 11: rom[offset] = 0x13; break; case 12: rom[offset] = 0x15; break; case 13: rom[offset] = 0x16; break; case 14: rom[offset] = 0x17; break; case 15: rom[offset] = 0x18; break; case 16: rom[offset] = 0x19; break; case 17: rom[offset] = 0x1A; break; case 18: rom[offset] = 0x1B; break; case 19: rom[offset] = 0x1D; break; case 20: rom[offset] = 0x1E; break; case 21: rom[offset] = 0x1F; break; case 22: rom[offset] = 0x20; break; case 23: rom[offset] = 0x21; break; case 24: rom[offset] = 0x22; break; } }