Shortly after the code for the animal object, at $2CA7C we run across the code for the title card object. The first thing it does in its init routine is check if the current zone is one of the Competition levels, and if so set byte $44 of its own SST.
Obj_TitleCardInit: cmpi.b #$E,(Current_zone).w bcs.s loc_2CA96 cmpi.b #$12,(Current_zone).w bhi.s loc_2CA96 st $44(a0) jmp (Delete_Current_Sprite).lWhen this flag is set, various aspects of the object's behavior are changed in order to display a unique set of title cards in Competition mode. However, these are ultimately never shown, because the object calls the Delete_Current_Sprite function immediately after setting the flag.
loc_2CA96: ... lea TitleCard_LevelGfx,a1 moveq #0,d0 move.b (Apparent_zone).w,d0 lsl.w #2,d0 movea.l (a1,d0.w),a1 move.w #$A9A0,d2 jsr (Queue_Kos_Module).lShortly after, we find the code which loads the title card graphics. It uses the value of the apparent zone as an index to the TitleCard_LevelGfx array, which is a list of pointers to KosM-compressed archives containing the letters that spell out each zone's name:
TitleCard_LevelGfx: dc.l ArtKosM_AIZTitleCard dc.l ArtKosM_HCZTitleCard dc.l ArtKosM_MGZTitleCard dc.l ArtKosM_CNZTitleCard dc.l ArtKosM_FBZTitleCard dc.l ArtKosM_ICZTitleCard dc.l ArtKosM_LBZTitleCard dc.l ArtKosM_AIZTitleCard ; MHZ dc.l ArtKosM_AIZTitleCard ; SOZ dc.l ArtKosM_AIZTitleCard ; LRZ dc.l ArtKosM_AIZTitleCard ; SSZ dc.l ArtKosM_AIZTitleCard ; DEZ dc.l ArtKosM_AIZTitleCard ; DDZ dc.l ArtKosM_AIZTitleCard ; HPZ dc.l ArtKosM_ALZTitleCard dc.l ArtKosM_BPZTitleCard dc.l ArtKosM_DPZTitleCard dc.l ArtKosM_CGZTitleCard dc.l ArtKosM_EMZTitleCard dc.l ArtKosM_BonusTitleCard dc.l ArtKosM_BonusTitleCard dc.l ArtKosM_BonusTitleCardThen, at $2CC62, the apparent zone is used again, this time to inform the mapping frame used by the "name" portion of the title card:
Obj_TitleCardName: move.b (Apparent_zone).w,d0 add.b d0,$22(a0)The sprite mappings used by the title card object can be found at $2D90C. These mappings have the same layout as their Sonic & Knuckles counterparts, except the S&K stages all point at a blank mapping frame, and there's a mapping frame for the Competition mode title cards which was removed in Sonic & Knuckles.
Map_TitleCard: dc.w Map_TitleCard_Blank-Map_TitleCard dc.w Map_TitleCard_Banner-Map_TitleCard dc.w Map_TitleCard_Act-Map_TitleCard dc.w Map_TitleCard_Zone-Map_TitleCard dc.w Map_TitleCard_AIZ-Map_TitleCard dc.w Map_TitleCard_HCZ-Map_TitleCard dc.w Map_TitleCard_MGZ-Map_TitleCard dc.w Map_TitleCard_CNZ-Map_TitleCard dc.w Map_TitleCard_FBZ-Map_TitleCard dc.w Map_TitleCard_ICZ-Map_TitleCard dc.w Map_TitleCard_LBZ-Map_TitleCard dc.w Map_TitleCard_Blank-Map_TitleCard ; MHZ dc.w Map_TitleCard_Blank-Map_TitleCard ; SOZ dc.w Map_TitleCard_Blank-Map_TitleCard ; LRZ dc.w Map_TitleCard_Blank-Map_TitleCard ; SSZ dc.w Map_TitleCard_Blank-Map_TitleCard ; DEZ dc.w Map_TitleCard_Blank-Map_TitleCard ; DDZ dc.w Map_TitleCard_Blank-Map_TitleCard ; HPZ dc.w Map_TitleCard_2PMode-Map_TitleCard dc.w Map_TitleCard_Bonus-Map_TitleCard dc.w Map_TitleCard_Stage-Map_TitleCardNote that both TitleCard_LevelGfx and Map_TitleCard contain valid entries for Flying Battery Zone, which is why we can get as far as displaying its title card in Sonic 3.
That's not why we're here, though. At $2CC08, right before being dismissed, the title card is responsible for loading the current level's KosM PLCs. It does this by calling the rather appropriately named LoadEnemyArt function:
LoadEnemyArt: lea off_2DF60,a6 move.w (Apparent_zone_and_act).w,d0 ror.b #1,d0 lsr.w #6,d0 adda.w (a6,d0.w),a6 move.w (a6)+,d6 bmi.s locret_2DF5E loc_2DF50: movea.l (a6)+,a1 move.w (a6)+,d2 jsr (Queue_Kos_Module).l dbf d6,loc_2DF50 locret_2DF5E: rtsOnce again, it uses the value of the apparent zone (and act) as an index to a pointer array, this time containing pointers to the KosM PLCs for each act in the game.
The thing is, much like TitleCard_LevelGfx and Map_TitleCard before it, this pointer array also contains valid entries for Flying Battery Zone:
off_2DF60: dc.w PLCKosM_AIZ-off_2DF60 dc.w PLCKosM_AIZ-off_2DF60 dc.w PLCKosM_HCZ1-off_2DF60 dc.w PLCKosM_HCZ2-off_2DF60 dc.w PLCKosM_MGZ1-off_2DF60 dc.w PLCKosM_MGZ2-off_2DF60 dc.w PLCKosM_CNZ-off_2DF60 dc.w PLCKosM_CNZ-off_2DF60 dc.w PLCKosM_FBZ-off_2DF60 dc.w PLCKosM_FBZ-off_2DF60 dc.w PLCKosM_ICZ-off_2DF60 dc.w PLCKosM_ICZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60 dc.w PLCKosM_LBZ-off_2DF60Remember when I said the graphics for Flying Battery's enemies went out the door with the rest of the level load block?
PLCKosM_FBZ: dc.w 1 dc.l ArtKosM_Blaster dc.w $A000 dc.l ArtKosM_Technosqueek dc.w $A500Uh... April Fools!
The PAR code 02DF46:7010 will force every level to load Flying Battery Zone's KosM PLC. You can use this alongside the codes 05B58C:7010 and 05B5C2:7010 from my previous post in order to place the FBZ enemies in any level using debug mode. FBZ's palette is long gone (I checked), but luckily Carnival Night Zone's is a suitable replacement.