If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
Notes:Dragon's Lair (NES)
Jump to navigation
Jump to search
This page contains notes for the game Dragon's Lair (NES).
Contents
Combined Source
The Japanese and European versions contain different portions of their source code, oddly enough, but they can still be compiled into one huge file which covers almost all of program banks 30-39. Regardless, there are some differences between the two versions, and it appears the Japanese one was done earlier; see the "diff" file in the next section.
;-------------------------------------- B3B_END IF B3B_END>$BFFF PRINTF "**** BANK $3B too long !! ****" ENDIF ; End of bank $3A/$3B ; --- -- ---- ------- ;====================================== ; Start of bank $39 ; ----- -- ---- --- ORG $139,$A000 ;-------------------------------------- ; Sprite attribute tables ; ------ --------- ------ SPR3_ATAB_L DL A_B0 DL A_B1 DL A_B2 DL A_B3 DL A_B4 DL A_B5 DL A_B6 DL A_B7 DL A_B8 DL A_B9 DL A_B10 DL A_B11 DL A_B12 DL A_B13 DL A_B14 DL A_B15 DL A_B16 DL A_B17 DL A_B18 DL A_B19 DL A_B20 DL A_B21 DL A_B22 DL A_B23 DL A_B24 DL A_B25 DL A_B26 DL A_B27 DL A_B28 DL A_B29 DL A_B30 DL A_B31 DL A_B32 DL A_B33 SPR3_ATAB_H DH A_B0 DH A_B1 DH A_B2 DH A_B3 DH A_B4 DH A_B5 DH A_B6 DH A_B7 DH A_B8 DH A_B9 DH A_B10 DH A_B11 DH A_B12 DH A_B13 DH A_B14 DH A_B15 DH A_B16 DH A_B17 DH A_B18 DH A_B19 DH A_B20 DH A_B21 DH A_B22 DH A_B23 DH A_B24 DH A_B25 DH A_B26 DH A_B27 DH A_B28 DH A_B29 DH A_B30 DH A_B31 DH A_B32 DH A_B33 A_B0 DS 34,2 DS 22,1 DS 8,0 A_B1 DS 31,2 DS 24,1 DS 9,0 A_B2 DS 34,2 DS 25,1 DS 5,0 A_B3 DS 21,2 DS 16,1 DS 7,2 DS 8,1 DS 12,0 A_B4 DS 9,2 DS 12,1 DS 1,0 DS 18,2 DS 24,1 A_B5 DS 28,2 DS 31,1 DS 5,0 A_B6 DS 31,2 DS 21,1 DS 12,0 A_B7 DS 28,2 DS 23,1 DS 13,0 A_B8 DS 9,2 DS 15,1 DS 1,0 DS 24,2 DS 15,1 A_B9 DS 37,2 DS 20,1 DS 7,0 A_B10 DS 14,2 DS 10,1 DS 40,0 A_B11 DS 25,0 DS 11,2 DS 25,1 DS 3,0 A_B12 DS 15,2 DS 36,1 DS 13,0 A_B13 DS 9,2 DS 17,1 DS 1,0 DS 16,2 DS 21,1 A_B14 DS 31,2 DS 31,1 DS 2,0 A_B15 DS 9,2 DS 13,1 DS 1,0 DS 18,2 DS 23,1 A_B16 DS 29,2 DS 32,1 DS 3,0 A_B17 DS 12,2 DS 17,1 DS 1,0 DS 8,2 DS 22,1 DS 4,0 A_B18 DS 13,0 DS 6,1 DS 45,0 A_B19 DS 18,0 DS 2,1 DS 34,3 DS 10,1 A_B20 DS 52,3 DS 12,1 A_B21 DS 64,0 A_B22 DS 46,1 DS 18,0 A_B23 DS 11,0 DS 20,1 DS 10,2 DS 23,3 A_B24 DS 25,0 DS 23,3 DS 16,0 A_B26 DS 58,0 DS 6,1 A_B33 A_B27 DS 64,1 A_B28 DS 15,3 DS 17,0 DS 32,1 A_B29 DS 11,0 DS 20,2 DS 33,3 A_B30 DS 18,3 DS 46,0 A_B31 A_B25 DS 64,3 A_B32 DS 32,2 DS 23,1 DS 9,0 ;-------------------------------------- ; Gold bonus screen ; ---- ----- ------ ; IN ; -- ; A = 0-No bonus , 1-Normal bonus , 2-Big bonus G_BONUS1 TAX BNE !1 ;No bonus RTS !1 LDA #3 ;Preload with start adding to DEX ;10's digit. BEQ !2 LDA #2 ;Change to adding to 100's !2 ;digit. STA ZPAGE_BYTE9 ;Store which digit to start ;adding to. LDA PL_GOLD ORA PL_GOLD+1 ;Don't do gold bonus if no ORA PL_GOLD+2 ;gold. CMP #246 BNE !3 RTS !3 LDA #0 STA N_COLAP_CHR STA N_BONUS_FLAG JSR SET_S0 LDA #128 ;Stop music JSR START_TUNE JSR DISABLE_NC LDA #GR_1ST+24 ;Background bank for chrs STA N_BG_BANK1 LDA #GR_1ST+24+2 STA N_BG_BANK2 LDA #PAL_1 JSR CLS LDA #21 ;'GOLD BONUS' JSR DRAW_SCR39 JSR D_GB ;Draw gold bars JSR ENABLE_CN LDA #$FF STA CDF_A1+1 JSR SPR_CLEAR ;All sprite off screen LDA #39 ;Put on split CHR STA $200 ;Y LDA #64 STA $201 ;Character LDA #BIT5 STA $202 ;Ctr LDA #16 STA $203 ;X LDA #1 STA N_DMA_FLAG WAIT_FRAME JSR ENABLE_SPR LDX #0 JSR FADE_IN LDX #20 ;Wait before starting JSR M_WAIT_FRAME LDY #>SCR_START+(32*16)+10-2 LDX #<SCR_START+(32*16)+10-2 LDA PL_GOLD+2 ;1's of gold JSR GB_R LDY #>SCR_START+(32*20)+10-2 LDX #<SCR_START+(32*20)+10-2 LDA PL_GOLD+1 ;10's of gold JSR GB_R LDY #>SCR_START+(32*24)+10-2 LDX #<SCR_START+(32*24)+10-2 LDA PL_GOLD ;100's of gold JSR GB_R LDX #80 ;Wait before exiting JSR M_WAIT_FRAME LDX #0 JSR FADE_OUT RTS ;------------------ ; Draw gold bonus bars D_GB LDA #13 ;X1,X10,X100 JSR PR_STR_TAB LDA #14 JSR PR_STR_TAB LDA #15 JSR PR_STR_TAB LDY #>SCR_START+(32*16)+10 LDX #<SCR_START+(32*16)+10 LDA PL_GOLD+2 ;1's of gold JSR GB_D LDY #>SCR_START+(32*20)+10 LDX #<SCR_START+(32*20)+10 LDA PL_GOLD+1 ;10's of gold JSR GB_D LDY #>SCR_START+(32*24)+10 LDX #<SCR_START+(32*24)+10 LDA PL_GOLD ;100's of gold JSR GB_D RTS ;------------------ ; Draw a highlighted bar ; IN ; -- ; X - LSB Screen address of bar left ; Y - MSB Screen address of bar left ; A = Number in bar GB_D PHA LDA #0 STA ZPAGE_BYTE11 PLA SEC SBC #246 STA ZPAGE_BYTE10 ;Number highlighted BEQ !1 LDA #PAL_1 STA PR_ATTR ; Draw highlighted ones !2 JSR D_G2X2 INC ZPAGE_BYTE11 ;Number drawn DEC ZPAGE_BYTE10 BNE !2 ; Draw unhighlighted ones !1 LDA #PAL_3 STA PR_ATTR !4 LDA ZPAGE_BYTE11 CMP #10 BNE !3 RTS !3 JSR D_G2X2 INC ZPAGE_BYTE11 JMP !4 ; Draw a gold 2x2 ; ---- - ---- --- D_G2X2 STX ZPAGE_WORD1 STY ZPAGE_WORD1+1 ; Set attribute LDA PR_ATTR JSR SET_SCR_ATTR ;Set attribute for quad LDX ZPAGE_WORD1 LDY ZPAGE_WORD1+1 ; Draw top line STY VDP_VRAM_PTR STX VDP_VRAM_PTR LDA #$69 STA VDP_VRAM_DATA LDA #$6A STA VDP_VRAM_DATA ; Downline and draw second line TXA CLC ADC #32 TAX BCC !1 INY !1 STY VDP_VRAM_PTR STX VDP_VRAM_PTR LDA #$6B STA VDP_VRAM_DATA LDA #$6C STA VDP_VRAM_DATA LDX ZPAGE_WORD1 LDY ZPAGE_WORD1+1 INX INX RTS ;------------------ ; Clear a bar ; IN ; -- ; X - LSB Screen address of bar left ; Y - MSB Screen address of bar left ; A - Number in bar to start with GB_R SEC SBC #246 STA ZPAGE_BYTE10 STY ZPAGE_WORD11+1 STX ZPAGE_WORD11 !3 LDA ZPAGE_BYTE10 BEQ !5 ASL A ;Icons 2 chrs wide !1 LDY ZPAGE_WORD11+1 ;Add offset to screen address ADC ZPAGE_WORD11 TAX JSR CON_SCR_ATTR ;Calc attribute address STX N_BONUS_AADR ;Set up NMI to draw attribute STY N_BONUS_AADR+1 STA N_BONUS_ATTR ;PAL_3 in rlevant bits EOR #$FF STA N_BONUS_AMASK ;Hole for attribute LDA #1 STA N_BONUS_FLAG STA N_BG_FLAG LDA #24 STA ZPAGE_BYTE11 LDA #1 ;Add to score LDY ZPAGE_BYTE9 JSR SC_ADD LDY #18 ;Make sound FX JSR FX_TRIGGER !4 JSR PANEL_SCAN LDA #1 STA N_BG_FLAG WAIT_FRAME DEC ZPAGE_BYTE11 BNE !4 DEC ZPAGE_BYTE10 BNE !3 !5 DEC ZPAGE_BYTE9 RTS ;-------------------------------------- ; Setup NMI vars to change score digits ; ----- --- ---- -- ------ ----- ------ ; Scan the scores,lives and gold and if any need changing then ; setup one digit to be changed. PANEL_SCAN LDA N_P_FLAG BEQ !1 ;Still waiting for update RTS !1 ; Scan current player score,gold or lives LDX #PL_VARS_LEN-1 PS_LP LDA PL_SC,X CMP PL_DATA_SO,X ;Search for any differences BNE PS_FND DEX BPL PS_LP ; Scan dormat players score LDX #5-1 ;Just do score PS_LP2 LDA PL_SC+P_VARS_LEN,X CMP PL2_DATA_SO,X ;Search for any differences BNE PS_FND1 DEX BPL PS_LP2 RTS PS_FND1 STA PL2_DATA_SO,X ;Set onscreen for pl 2 score SEC SBC #246-$0A STA N_P_CHR ;Set character to draw LDA PL_NUM BNE PS_SNMI ;This is player 1's score(Lft) JMP PS_RGT ;This is player 2's score(Rgt) PS_FND STA PL_DATA_SO,X ;Set onscreen var SEC SBC #246-$0A STA N_P_CHR ;Set character to draw LDA PL_NUM BEQ PS_SNMI ;This is player 1's score(Lft) ;This is player 2's score(Rgt) PS_RGT TXA CMP #5 ;If Gold or lives alternate BCS !1 ;with whoose go it is CLC ADC #PL_VARS_LEN ;If score swap their sides TAX !1 ; Setup vars to get NMI to draw a score digit. PS_SNMI LDA P_ATAB,X STA N_P_SADR LDA #>SCR_START STA N_P_SADR+1 LDA #1 STA N_P_FLAG RTS ; Screen address offset table P_ATAB DB 96+96+9 ;Player 1 score DB 96+96+10 DB 96+96+11 DB 96+96+12 DB 96+96+13 DB 96+64+24 ; Gold DB 96+64+25 DB 96+64+26 DB 96+64+5 ; Lives DB 96+64+6 DB 96+96+18 ;Player 2 score DB 96+96+19 DB 96+96+20 DB 96+96+21 DB 96+96+22 ;-------------------------------------- ; Throw a dagger control routines ; ----- - ------ ------- -------- ; Initialization, this routine starts a dagger if there is one free ; This routine was modifyed to cope with axes and fireballs ; IN ; -- ; A=Direction (BIT6=0 - Facing right 1 - Facing left) D_INIT STA ZPAGE_BYTE2 LDX WEAPON_TYPE BEQ DI_3ON ;3 daggers allowed DEX BEQ DI_2ON ;2 axes JMP DI_1ON ;1 fireball DI_3ON LDX #2*D_VAR_LEN LDA D_VARS+D_X_OFF+(2*D_VAR_LEN) BEQ DI_FREE DI_2ON LDX #1*D_VAR_LEN LDA D_VARS+D_X_OFF+(1*D_VAR_LEN) BEQ DI_FREE DI_1ON LDX #0*D_VAR_LEN LDA D_VARS+D_X_OFF+(0*D_VAR_LEN) BEQ DI_FREE RTS ; X holds offset of block to init. DI_FREE LDA WEAPON_TYPE STA D_VARS+D_TYP_OFF,X ;Store type in vars LDA #0 STA D_VARS+D_ANI_OFF,X ;Start at first anim ; Setup Y velocity LDA #<(-800) STA D_VARS+D_YSP_OFF,X LDA #>(-800) STA D_VARS+D_YSP_OFF+1,X ; Setup X velocitys and X,Y's LDA ZPAGE_BYTE2 AND #SDC_LEFT BEQ DI_GOING_RGT ; Going left ; Set velocity going left LDA #<0+(0-D_XSPEED) STA D_VARS+D_XSP_OFF,X LDA #>0+(0-D_XSPEED) STA D_VARS+D_XSP_OFF+1,X LDA ZPAGE_BYTE2 AND #SDC_DOWN BNE DI_CRAWLING_L ; Throw while standing up facing left LDA DIRK_X_ONSCR STA D_VARS+D_X_OFF,X LDA DIRK_Y SEC SBC #52 STA D_VARS+D_Y_OFF,X JMP DI_XVXY_END ; Throw while crawling left DI_CRAWLING_L LDA DIRK_X_ONSCR SEC SBC #18 BCS !1 RTS ; Error, Off edge !1 STA D_VARS+D_X_OFF,X LDA DIRK_Y SEC SBC #31 STA D_VARS+D_Y_OFF,X JMP DI_XVXY_END ; Going right DI_GOING_RGT ; Setup X velocity for going right LDA #<D_XSPEED STA D_VARS+D_XSP_OFF,X LDA #>D_XSPEED STA D_VARS+D_XSP_OFF+1,X LDA ZPAGE_BYTE2 AND #SDC_DOWN BNE DI_CRAWLING_R ; Throw while standing up facing right LDA DIRK_X_ONSCR CLC ;Setup dagger starting X ADC #24 BCS !1 CMP #230 BCC !2 !1 RTS ; Error, Off edge !2 STA D_VARS+D_X_OFF,X LDA DIRK_Y SEC SBC #52 STA D_VARS+D_Y_OFF,X JMP DI_XVXY_END ; Throw while crawling right DI_CRAWLING_R LDA DIRK_X_ONSCR CLC ADC #38 BCC !1 RTS ; Error, Off edge !1 STA D_VARS+D_X_OFF,X LDA DIRK_Y SEC SBC #31 STA D_VARS+D_Y_OFF,X DI_XVXY_END LDA D_E_FRAC ;Subtract energy from Dirk CLC ;for each weapon thrown ADC #16 STA D_E_FRAC BCC !1 LDA #-1 JSR DIRK_NRG_ADD !1 LDY #1 ;Preload with normal dagger FX LDX WEAPON_TYPE DEX BNE !2 LDY #15 ;Axe throw FX !2 JMP FX_TRIGGER ;and 'RTS' ;------------------ ; Process all currently running daggers D_PROCESS LDX #2*D_VAR_LEN ;Offset to current dagger vars DP_LOOP LDA D_VARS+D_X_OFF,X BEQ16 DP_END ;This dagger isn't on LDA #D_GRAVITY CLC ADC D_VARS+D_YSP_OFF,X STA D_VARS+D_YSP_OFF,X ;Add gravity to BCC !1 ;speed INC D_VARS+D_YSP_OFF+1,X !1 CLC ADC D_VARS+D_YF_OFF,X STA D_VARS+D_YF_OFF,X ;Add Y speed to Yf LDA D_VARS+D_YSP_OFF+1,X ;and Y ADC D_VARS+D_Y_OFF,X STA D_VARS+D_Y_OFF,X LDA D_VARS+D_YSP_OFF+1,X BMI BP_STILL_GOING CMP #7 BCC BP_STILL_GOING ; Stop this dagger BP_STOP LDA #0 ;the end STA D_VARS+D_X_OFF,X ;If so,stop dagger JMP DP_END BP_STILL_GOING LDA D_VARS+D_XSP_OFF,X CLC ;Add X speed to ADC D_VARS+D_XF_OFF,X ;dagger X STA D_VARS+D_XF_OFF,X LDA D_VARS+D_XSP_OFF+1,X ADC D_VARS+D_X_OFF,X CMP #255-(D_XSPEED/256) BCS BP_STOP ;Gone off edge of STA D_VARS+D_X_OFF,X ;screen LDA D_VARS+D_TYP_OFF,X BEQ16 DP_DAG_SP ; Draw an axe and fireball DP_AF_SP LDA D_VARS+D_X_OFF,X STA ZPAGE_WORD5 LDA D_VARS+D_Y_OFF,X STA ZPAGE_WORD6 ;Setup X and Y's LDA #0 STA ZPAGE_WORD5+1 STA ZPAGE_WORD6+1 LDA D_VARS+D_TYP_OFF,X CMP #1 BEQ DP_AXE_SP ;Axe specific draw ; Specific draw for fireball LDA D_VARS+D_ANI_OFF,X CMP #3 BCC DP_FB_AOK LDA #0 DP_FB_AOK TAY ;Animate the fireball CLC ADC #1 STA D_VARS+D_ANI_OFF,X LDA D_VARS+D_XSP_OFF+1,X BMI DP_FB_LEFT SET16 ZPAGE_WORD2,DP_FB_LDEF LDA #BIT6 JMP DP_FB_DEF_END DP_FB_LEFT SET16 ZPAGE_WORD2,DP_FB_RDEF LDA #0 DP_FB_DEF_END STX ZPAGE_BYTE10 ;Preserve X TAX ;Setup X for SPR_DRAW TYA ASL A STA ZPAGE_BYTE1 ASL A CLC ;6 bytes per animation ADC ZPAGE_BYTE1 ;entry. ADD16_A ZPAGE_WORD2 LDA #128+1 ;Window number JSR SPR3_DRAW_39 ;Draw sprite LDX ZPAGE_BYTE10 ;Restore X JMP DP_END ; Specific draw for axe DP_AXE_SP LDA D_VARS+D_ANI_OFF,X CMP #4 BCC DP_AXE_AOK LDA #0 DP_AXE_AOK TAY ;Animate the dagger CLC ADC #1 STA D_VARS+D_ANI_OFF,X LDA D_VARS+D_XSP_OFF+1,X BMI DP_AXE_LEFT SET16 ZPAGE_WORD2,DP_AXE_LDEF LDA #0 JMP DP_AXE_DEF_END DP_AXE_LEFT SET16 ZPAGE_WORD2,DP_AXE_RDEF LDA #BIT6 DP_AXE_DEF_END STX ZPAGE_BYTE10 ;Preserve X TAX ;Setup X for SPR_DRAW TYA ASL A STA ZPAGE_BYTE1 ASL A CLC ;6 bytes per animation ADC ZPAGE_BYTE1 ;entry. ADD16_A ZPAGE_WORD2 LDA #128+1 ;Window number JSR SPR3_DRAW_39 ;Draw sprite LDX ZPAGE_BYTE10 ;Restore X JMP DP_END ; Draw a dagger DP_DAG_SP LDY #0 LDA D_VARS+D_Y_OFF,X STA (SD_PAGE_PTR),Y ;Setup Y of dagger sprites LDY #4 STA (SD_PAGE_PTR),Y LDA D_VARS+D_X_OFF,X DEY ; Y=3 STA (SD_PAGE_PTR),Y ;Setup X of dagger sprites CLC ADC #8 LDY #7 STA (SD_PAGE_PTR),Y LDA D_VARS+D_XSP_OFF+1,X BMI DP_CHR_LEFT ; Setup dagger characters for going right LDA #$14+64 LDY #1 STA (SD_PAGE_PTR),Y ;Characters LDA #$13+64 LDY #5 STA (SD_PAGE_PTR),Y LDA #0+SPR_CTR_X_FLIP JMP DP_CHR_SEND ; Setup dagger characters for going left DP_CHR_LEFT LDA #$13+64 LDY #1 STA (SD_PAGE_PTR),Y ;Characters LDA #$14+64 LDY #5 STA (SD_PAGE_PTR),Y LDA #0 DP_CHR_SEND LDY #2 STA (SD_PAGE_PTR),Y ;Attribute LDY #6 STA (SD_PAGE_PTR),Y LDA SD_PAGE_PTR ;Move over 2 sprites CLC ADC #8 BNE !1 LDA #4 !1 STA SD_PAGE_PTR DP_END TXA SEC ;Move to next daggers vars SBC #D_VAR_LEN TAX BCS16 DP_LOOP JMP SET_NORM_BANK ;and 'RTS' ;-------------------------------------- ; Cameo screens ; ----- ------- CAMEO LDA #128 ;Stop tune playing JSR START_TUNE LDX SCR_NUM ;Setup BG bank LDA CAM_B_TAB,X BEQ !1 STA N_BG_BANK1 CLC ADC #2 STA N_BG_BANK2 WAIT_FRAME LDA VDP_CTR_VAR0 ;Force screen 1 AND #NOT-HORI_SWAP ;to get rid of the STA VDP_CTR_VAR0 ;dash. STA VDP_CTR_REG0 LDA #-1 LDX SCR_NUM DEX BEQ !2 ;Don't scroll entrance cameo LDA #-6 !2 STA N_SC_X JSR DISABLE_NC ;Turn off NMI and CHR's LDA #PAL_1 JSR CLS ;Clear screen LDX SCR_NUM ;Draw screen LDA CAM_S_TAB,X JSR S7_DS LDX SCR_NUM ;Draw attributes LDA CAM_A_TABL,X STA ZPAGE_WORD1 LDA CAM_A_TABH,X STA ZPAGE_WORD1+1 SET_VRAM_PTR 27C8 LDX #56 JSR SI_SET_ATTR2 LDA #0 ;Leave dash on other screen STA N_SPLIT JSR ENABLE_CN LDX SCR_NUM LDA CAM_F_TAB,X PHA TAX JSR FADE_IN LDX #100 ;Wait for 100 frames JSR M_WAIT_FRAME PLA TAX JSR FADE_OUT !1 RTS CAM_B_TAB DB 0 ; 0 - Drawbridge DB GR_1ST+38 ; 1 - Entrance hall DB GR_1ST+42 ; 2 - Mines DB GR_1ST+46 ; 3 - Reaper DB 0 ; 4 - DB GR_1ST+50 ; 5 - Singe DB 0 ; 6 - Elevator DB 0 ; 7 - Treasury DB 0 ; 8 - Dungeon CAM_S_TAB DB 0 ; 0 - Drawbridge DB 31 ; 1 - Entrance hall DB 32 ; 2 - Mines DB 33 ; 3 - Reaper DB 0 ; 4 - DB 35 ; 5 - Singe DB 0 ; 6 - Elevator DB 0 ; 7 - Treasury DB 0 ; 8 - Dungeon CAM_F_TAB DB 0 ; 0 - Drawbridge DB 75 ; 1 - Entrance hall DB 80 ; 2 - Mines DB 85 ; 3 - Reaper DB 0 ; 4 - DB 90 ; 5 - Singe
DB 0 ; 6 - Elevator DB 0 ; 7 - Treasury DB 0 ; 8 - Dungeon CAM_A_TABH DH 0 ; 0 - Drawbridge DH AM_C102_0 ; 1 - Entrance hall DH AM_C106_0 ; 2 - Mines DH AM_C110_0 ; 3 - Reaper DH 0 ; 4 - DH AM_C114_0 ; 5 - Singe DH 0 ; 6 - Elevator DH 0 ; 7 - Treasury DH 0 ; 8 - Dungeon CAM_A_TABL DL 0 ; 0 - Drawbridge DL AM_C102_0 ; 1 - Entrance hall DL AM_C106_0 ; 2 - Mines DL AM_C110_0 ; 3 - Reaper DL 0 ; 4 - DL AM_C114_0 ; 5 - Singe DL 0 ; 6 - Elevator DL 0 ; 7 - Treasury DL 0 ; 8 - Dungeon ; C102_0 ATTRIBUTE MAP ( 8 X 6 ) AM_C102_0 DB $65,$95,$65,$15,$45,$95,$65,$95 DB $EE,$BB,$EE,$33,$CC,$BB,$EE,$BB DB $AA,$22,$00,$00,$00,$00,$88,$AA DB $AA,$22,$00,$00,$00,$00,$88,$AA DB $AA,$22,$00,$00,$00,$00,$88,$AA DB $AA,$AA,$00,$00,$00,$00,$88,$AA DB $AA,$AA,$00,$00,$00,$00,$88,$AA ; C106_0 ATTRIBUTE MAP ( 8 X 6 ) AM_C106_0 DB $55,$B5,$A5,$A5,$A5,$A5,$F5,$11 DB $9D,$AA,$AA,$AA,$AA,$AA,$AE,$11 DB $99,$AA,$55,$55,$55,$99,$AA,$11 DB $99,$AA,$55,$95,$55,$99,$AA,$11 DB $99,$AA,$05,$09,$05,$89,$AA,$11 DB $99,$AA,$00,$00,$00,$88,$AA,$11 DB $99,$AA,$00,$00,$00,$88,$AA,$11 ; C110_0 ATTRIBUTE MAP ( 8 X 6 ) AM_C110_0 DB $55,$55,$55,$55,$55,$55,$55,$11 DB $55,$55,$05,$05,$05,$05,$45,$01 DB $15,$00,$00,$00,$00,$00,$44,$00 DB $00,$00,$C0,$FF,$33,$00,$44,$00 DB $00,$00,$FC,$FF,$FF,$00,$44,$20 DB $00,$C0,$FF,$00,$CC,$30,$A6,$22 DB $0F,$0F,$0F,$00,$0C,$0F,$0A,$02 ; C114_0 ATTRIBUTE MAP ( 8 X 6 ) AM_C114_0 DB $AA,$EF,$77,$55,$FF,$FF,$FF,$33 DB $BA,$EE,$77,$55,$FF,$FF,$FF,$33 DB $FF,$FA,$86,$55,$FF,$FF,$FF,$33 DB $FF,$BF,$AA,$65,$5F,$5F,$5F,$13 DB $FF,$FF,$FF,$76,$55,$55,$55,$11 DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$33 DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$33 ;-------------------------------------- ; Lizard king ; ------ ---- LIZ_ON_TIME EQU 100 LIZARD_PROCESS LDA LIZARD_FLAG BEQ16 LP_NOT_ON ;Wait before bringing DEC LIZARD_FLAG ;another on. BNE LP_NOT_END ; Lizard has ended LDA FADE_PALETTE CLC ADC #4 LDX #4 LDY #4 JSR CHANGE_PAL ;Set sprite palette LDA SPR3_WIN2_R ;Reset back to normal STA SPR3_WIN2 ;sprite bank LDY #FLAG_OFF+1 LDA (LIZ_FCD_VARS),Y ORA #(FCD_SP1_BIT/256) ;Set death bit STA (LIZ_FCD_VARS),Y RTS LP_NOT_END LDA LIZARD_FLAG CMP #LIZ_ON_TIME-20 BEQ LP_EXPLODE ;Start lizard on explosions RTS ; Start lizard appear explosions LP_EXPLODE LDA #18 LDX #7 LDY #1 JSR CHANGE_PAL ; Start lizard king. SET16 ZPAGE_WORD2,FCD_LZ LDA #8 STA ZPAGE_BYTE1 ;Hit count LDA #ST_LZ STA ZPAGE_BYTE2 ;Sprite type JSR SI_39 ;Try to start FCD sprite. BNE LP_CANT_START LDA ZPAGE_WORD1 STA LIZ_FCD_VARS ;Store address of FCD vars LDA ZPAGE_WORD1+1 STA LIZ_FCD_VARS+1 LDA DIRK_Y SEC SBC #22 JSR SR_39 ;Start Lizard after waiting JSR LP_ST_SMOKE BNE LP_CANT_START ;Can't start smoke LDA DIRK_Y ;Start bottom smoke SEC SBC #44 JSR SR_39 JSR LP_ST_SMOKE BNE LP_CANT_START ;Can't start smoke LDA DIRK_Y ;Start top smoke SEC SBC #72 JSR SR_39 LP_CANT_START ; Change to correct sprite bank in window 2 LDA #23 STA SPR3_WIN2 ; Start lizard king fanfare LDY #31 JSR FX_TRIGGER LDY #32 JSR FX_TRIGGER LDY #33 JMP FX_TRIGGER ;and 'RTS' ; Lizard king is not on so check if he can be brought on LP_NOT_ON ; Don't bring on if no gold LDA PL_GOLD ORA PL_GOLD+1 ;Don't do gold bonus if no ORA PL_GOLD+2 ;gold. CMP #246 BNE !1 RTS !1 ; Check if allowed on at the current scroll position LDX SCR_NUM LDA LIZ_SCR_TABL,X STA ZPAGE_WORD1 ;Setup WORD1 as pointer to LDA LIZ_SCR_TABH,X ;ON/OFF data. STA ZPAGE_WORD1+1 LP_FLOOP LDY #0 LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2 INY ;WORD2 is ON x LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2+1 ORA ZPAGE_WORD2 CMP #$FF BNE LP_!END RTS LP_!END CMP16 ZPAGE_WORD2,SCROLL_XOFFSET BCS16 LP_FLOOP_NEXT LDY #2 LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2 INY ;WORD2 is OFF x LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2+1 CMP16 ZPAGE_WORD2,SCROLL_XOFFSET BCC LP_FLOOP_NEXT ; In range so bring lizard king on. JSR RND_A1 CMP #251 BCS LP_BO_S1 RTS LP_BO_S1 JSR RND_A1 CMP #18 BCC LP_BO_S2 RTS LP_BO_S2 ; Bring lizard king on. LDA #LIZ_ON_TIME STA LIZARD_FLAG ; Kill all other sprites LDX #MAX_FCD_UNITS SET16 ZPAGE_WORD1,SPR0 LDY #FLAG_OFF+1 LP_LP LDA (ZPAGE_WORD1),Y ORA #FCD_DEATH_BIT/256 STA (ZPAGE_WORD1),Y ADD16_8 ZPAGE_WORD1,FCD_VARS_LEN DEX BNE LP_LP RTS LP_FLOOP_NEXT ADD16_8 ZPAGE_WORD1,4 ;Move to next JMP LP_FLOOP LP_ST_SMOKE SET16 ZPAGE_WORD2,FCD_SMOKE LDA #200 STA ZPAGE_BYTE1 ;Hit count LDA #ST_NULL STA ZPAGE_BYTE2 ;Sprite type JMP SI_39 ;Start lizard appear smoke ;and 'RTS' LIZ_SCR_TABL DL LIZ_DUMMY DL LIZ_SCR1 DL LIZ_SCR2 DL LIZ_DUMMY DL LIZ_DUMMY DL LIZ_SCR5 DL LIZ_DUMMY DL LIZ_DUMMY DL LIZ_DUMMY LIZ_SCR_TABH DH LIZ_DUMMY DH LIZ_SCR1 DH LIZ_SCR2 DH LIZ_DUMMY DH LIZ_DUMMY DH LIZ_SCR5 DH LIZ_DUMMY DH LIZ_DUMMY DH LIZ_DUMMY ; Entrance hall ; Singe LIZ_SCR5 LIZ_SCR1 DW 0,980 DW $FFFF ; Mines LIZ_SCR2 DW 0,500 DW 1400,1500 DW $FFFF LIZ_DUMMY DW $FFFF B39_END IF B39_END>$BFFF PRINTF "**** BANK $39 too long !! ****" ENDIF ; End of bank $39 ; --- -- ---- --- ;====================================== ; Start of bank $38 ; ----- -- ---- --- ORG $138,$8000 ;-------------------------------------- ; Include all the BG animation data. ; ------- --- --- -- --------- ----- INCLUDE "BG_ANIM.SRC" ;ACB's and DCB's INCLUDE "BG_MAP1.SRC" ;Bg anims map data ;-------------------------------------- ; Table of pointers to palettes. ; ----- -- -------- -- --------- SPAL_PTR_TAB DW PAL_BLACK ;0 - Mines (Bright) DW MI_P1 ;1 DW MI_P2 ;2 DW MI_P3 ;3 DW S_PAL_S2 ;4 DW PAL_BLACK ;5 - Mines (Dark) DW MI_P1 ;6 DW MI_P2 ;7 DW MI_P4 ;8 DW S_PAL_S2 ;9 DW DIRK_FLASH_PAL ;10 DW PAL_BLACK ;11 - Elevator DW ELEV_PAL0 ;12 DW ELEV_PAL1 ;13 DW ELEV_PAL2 ;14 DW S_PAL_S6 ;15 DW MI_P5 ;16 - 2 entry candle lit mines DW MI_P6 ;17 - 2 entry bright mines DW S_PAL_S2A ;18 - 1 entry for lizard king DW S_PAL_S2B ;19 - 1 entry for normal DW PAL_BLACK ;20 - Grim reaper DW R00_PAL ;21 DW R01_PAL ;22 DW R02_PAL ;23 DW S_PAL_S2 ;24 DW FLASH_PAL ;25 - 4 ent Lighting flash DW PAL_BLACK ;26 - Drawbridge DW DB_PAL1 ;27 DW DB_PAL2 ;28 DW DB_PAL3 ;29 DW S_PAL_S0 ;30 DW PAL_BLACK ;31 - Name entry, DW AT_PAL1 ;32 - high score table DW AT_PAL2 ;33 - and title screen DW AT_PAL3 ;34 DW AT_SPR_PAL ;35 DW G1_PAL0 ;36 - 'Start' glow DW G1_PAL1 ;37 DW G1_PAL2 ;38 DW G1_PAL3 ;39 DW G1_PAL4 ;40 DW PAL_BLACK ;41 DW SG_PAL1 ;42 - Singe's Lair DW SG_PAL2 ;43 DW SG_PAL3 ;44 DW S_PAL_S0 ;45 DW SG_PAL4 ;46 - Dragon on DW PAL_BLACK ;47 - Entrance Hall DW PAL_BLACK ;48 DW EH2_PAL ;49 DW EH2_PAL ;50 DW S_PAL_S2 ;51 DW PAL_BLACK ;52 - Treasury DW T_PAL0 ;53 DW T_PAL1 ;54 DW T_PAL2 ;55 DW S_PAL_S7 ;56 DW SG_PAL ;57 - Singe bits palette DW PAL_BLACK ;58 - No fade set of palettes DW PAL_BLACK ;59 for use with mines drak DW PAL_BLACK ;60 section and grim reaper DW PAL_BLACK ;61 end. DW S_PAL_S2 ;62 DW SG_PAL5 ;63 - Singe 1 ent green DW SG_FLASH ;64 - Flash Reaper/Singe white DW R03_PAL ;65 - Reaper 1 ent blue DW PAL_BLACK ;66 - End screen palettes DW ES_PAL1 ;67 DW ES_PAL2 ;68 DW ES_PAL3 ;69 DW S_PAL_S0 ;70 DW S0_SNK ;71 - Green for snake s0 DW EH3_PAL ;72 - End screen (Entrance hall) DW EH3_F ;73 - Flash snake DW EH3_R ;74 - Restore snake DW PAL_BLACK ;75 - Entrance hall cameo DW PAL_BLACK ;76 DW CAM_PAL3 ;77 DW CAM_PAL3 ;78 DW S_PAL_S0 ;79 DW PAL_BLACK ;80 - Mines cameo DW PAL_BLACK ;81 DW MIN_PAL3 ;82 DW MIN_PAL3 ;83 DW S_PAL_S0 ;84 DW PAL_BLACK ;85 DW PAL_BLACK ;86 DW REAP_PAL3 ;87 DW REAP_PAL3 ;88 DW S_PAL_S0 ;89 DW PAL_BLACK ;90 DW PAL_BLACK ;91 DW SING_PAL3 ;92 DW SING_PAL3 ;93 DW S_PAL_S0 ;94 DW PAL_BLACK ;95 DW EH3_R ;96 - Restore snake DW EH3_R ;97 DW EH3_R ;98 DW S_PAL_S0 ;99 DW PAL_BLACK ;100 - Credit screens DW R00_PAL ;101 DW R01_PAL ;102 DW CS_PAL ;103 DW S_PAL_S2 ;104 ; BG palettes FLASH_PAL DB WHITE3,WHITE2,WHITE1,WHITE0 DB WHITE3,WHITE2,WHITE1,WHITE0 DB WHITE3,WHITE2,WHITE1,WHITE0 DB WHITE3,WHITE2,WHITE1,WHITE0 PAL_BLACK DB BLACK,BLACK,BLACK,BLACK DB BLACK,BLACK,BLACK,BLACK DB BLACK,BLACK,BLACK,BLACK DB BLACK,BLACK,BLACK,BLACK ; Sprite palettes ; Screen 0 - Drawbridge S_PAL_S0 DB BLACK,WHITE2,WHITE1,WHITE0 DB BLACK,ORANGE2,ORANGE3,YELLOW1 DB BLACK,WHITE2,YELLOW2,WHITE0 S0_SNK DB BLACK,GREEN3,GREEN2,MID_GREEN1 S_PAL_S2 DB BLACK,WHITE2,WHITE1,WHITE0 DB BLACK,ORANGE2,ORANGE3,YELLOW1 DB BLACK,WHITE2,YELLOW2,WHITE0 S_PAL_S2B DB BLACK,ORANGE3,ORANGE2,ORANGE1 ; Screen 6 - Elevator S_PAL_S6 DB BLACK,WHITE2,WHITE1,WHITE0 DB BLACK,ORANGE2,ORANGE3,YELLOW1 DB BLACK,WHITE2,YELLOW2,WHITE0 DB BLACK,ORANGE3,ORANGE2,ORANGE1 S_PAL_S7 DB BLACK,WHITE2,WHITE1,WHITE0 DB BLACK,ORANGE2,ORANGE3,YELLOW1 DB BLACK,WHITE2,YELLOW2,WHITE0 S_PAL_S2A DB BLACK,WHITE2,LT_GREEN1,LT_GREEN2 ;Lizard king palette DIRK_FLASH_PAL DB BLACK,WHITE2,WHITE1,WHITE0 DB BLACK,WHITE2,WHITE2,WHITE2 DB BLACK,WHITE2,WHITE2,WHITE2 ; DB BLACK,WHITE1,MID_GREEN1,MID_GREEN0 SG_FLASH DB BLACK,WHITE3,WHITE3,WHITE3 ; Attract mode sprite palette AT_SPR_PAL DB BLACK,BLUE2,BLUE2,BLUE1 DB BLACK,ORANGE2,ORANGE1,ORANGE0 DB BLACK,GREEN3,GREEN2,GREEN1 DB BLACK,ORANGE3,ORANGE2,ORANGE1 ; Sprite palette for Singe's bits SG_PAL DB BLACK,WHITE3,PURPLE2,PURPLE1 MI_F DB BLACK ;====================================== B38_END IF B38_END>$9FFF PRINTF "**** BANK $38 too long !! ****" ENDIF ; End of bank $38 ; --- -- ---- --- ;-------------------------------------- ; Start of bank $37 ; ----- -- ---- --- ORG $137,$A000 ; Include screen maps ; ------- ------ ---- INCLUDE "GR_SMAP2.SRC" B37_END IF B37_END>$BFFF PRINTF "**** BANK $37 too long !! ****" ENDIF ; End of bank $37 ; --- -- ---- --- ;-------------------------------------- ; Start of bank $36 ; ----- -- ---- --- ORG $136,$8000 ; Include the ZZ_ and BM_ data for SPR_DRAW ; ------- --- --- --- --- ---- --- -------- INCLUDE "GR_MAP.SRC" INCLUDE "GR_MAP2.SRC" INCLUDE "GR_MAP3.SRC" ; ZZ_ and BM_ maps for test sprite BM_TEST DB %11000000 DB %11000000 ZZ_TEST DB 30,30,30,30 B36_END IF B36_END>$9FFF PRINTF "**** BANK $36 too long !! ****" ENDIF ; End of bank $36 ; --- -- ---- --- ;-------------------------------------- ; Start of bank $34+35 ; ----- -- ---- ------ ORG $134,$8000 INCBIN "SCRBLK.INC" B35_END IF B35_END>$BFFF PRINTF "**** BANK $34+$35 too long !! ****" ENDIF ; End of bank $34+$35 ; --- -- ---- ------- ;-------------------------------------- ; Start of bank $32 ; ----- -- ---- --- ORG $132,$8000 ;-------------------------------------- INCBIN "ATTR.INC" ;-------------------------------------- ; Collapsing floor collision tables.(X,Screen address) ; ---------- ----- --------- ------ ---------------- ; Screen 0 - Drawbridge SCR0_COLAP_TAB DW 104,9024+13 DW 112,9024+14 DW 120,9024+15 DW $FFFF ; Screen 3 - Grim reaper SCR3_COLAP_TAB ; Gr #1 DW 88,9024+11 DW 96,9024+12 DW 104,9024+13 DW 136,9024+17 DW 144,9024+18 DW 152,9024+19 DW 184,9024+23 DW 192,9024+24 DW 200,9024+25 DW 232,9024+29 DW 240,9024+30 DW 248,9024+31 ; Gr #3 DW 512+152,8896+19 DW 512+160,8896+20 DW 512+168,8896+21 ; Gr #6 DW 1280+208,9984+26 DW 1280+216,9984+27 DW 1280+224,9984+28 DW 1280+232,9984+29 ; Gr #7 DW 1536+8,8960+1 DW 1536+16,8960+2 DW 1536+24,8960+3 DW 1536+32,8960+4 DW 1536+40,8960+5 DW 1536+72,8960+9 DW 1536+80,8960+10 DW 1536+88,8960+11 DW 1536+120,9024+15 DW 1536+128,9024+16 ; Gr #8 DW 1792+120,10048+15 DW 1792+128,10048+16 DW 1792+136,10048+17 DW 1792+168,10112+21 DW 1792+176,10112+22 DW 1792+184,10112+23 DW 1792+192,10112+24 DW 1792+200,10112+25 DW 1792+232,10112+29 DW 1792+240,10112+30 ; Gr #9 DW 2048+16,9088+2 DW 2048+24,9088+3 DW 2048+32,9088+4 DW 2048+40,9088+5 DW 2048+192,9024+24 DW 2048+200,9024+25 DW 2048+208,9024+26 DW 2048+216,9024+27 DW 2048+248,9024+31 ; Gr #10 DW 2304+0,10048+0 DW 2304+8,10048+1 DW 2304+16,10048+2 DW 2304+48,10048+6 DW 2304+56,10048+7 DW 2304+64,10048+8 DW 2304+72,10048+9 DW 2304+104,10048+13 DW 2304+112,10048+14 ; Gr #11 DW 2560+32,9024+4 DW 2560+40,9024+5 DW 2560+48,9024+6 DW 2560+80,9024+10 DW 2560+88,9024+11 DW 2560+200,9024+25 DW 2560+232,9024+29 DW 2560+240,9024+30 ; Gr DW $FFFF ;-------------------------------------- B32_END IF B32_END>$BFFF PRINTF "**** BANK $32 too long !! ****" ENDIF ; End of bank $32 ; --- -- ---- --- ;-------------------------------------- ; Start of bank $30/31 ; ----- -- ---- ------ ORG $130,$8000 MUSIC_BASE INCBIN "MUSIC.INC" FX_INIT EQU MUSIC_BASE+0 FX_TRIGGER1 EQU MUSIC_BASE+3 FX_PROCESS EQU MUSIC_BASE+6 MUSIC_TRIGGER EQU MUSIC_BASE+9 MUSIC_PROCESS EQU MUSIC_BASE+12 B30_END IF B30_END>$BFFF PRINTF "**** BANK $30 too long !! ****" ENDIF ; End of bank $30/$31 ; --- -- ---- ------- ;====================================== IF EPROM=99 SEND COMPUTER1 ENDIF IF EPROM=98 SEND MSDOS,"C:\PDSMAST\DLAIRFCS\EPROM\DL.PDS" ENDIF ; ------------------------------------------------------------- ; Print memory usage messages ; ----- ------ ----- -------- PRINTF "Bank $3F has %d bytes free",$FFFF-B3F_END PRINTF "Bank $3C/D has %d bytes free",$C000-B3D_END PRINTF "Bank $3A/B has %d bytes free",$C000-B3B_END PRINTF "Bank $39 has %d bytes free",$C000-B39_END PRINTF "Bank $38 has %d bytes free",$A000-B38_END PRINTF "Bank $37 has %d bytes free",$C000-B37_END PRINTF "Bank $36 has %d bytes free",$A000-B36_END PRINTF "Bank $34 has %d bytes free",$C000-B35_END PRINTF "Bank $32/3 has %d bytes free",$C000-B32_END PRINTF "Bank $30/1 has %d bytes free",$C000-B30_END END ; End of file: DLAIR.ASM ; --- -- ---- --------- �ize LDA #2 STA ZPAGE_BYTE2 ;Ysize JSR DRAW_CHR_BLOCK ;Draw disc SET16 ZPAGE_WORD1,ATTRWALL0 JSR SI_SET_ATTR ;Set screen attributes JSR SET_PA ;Reset panel attributes JSR SET_S0 ;Set to screen 0 LDA #104 STA DIRK_X LDA #167 STA DIRK_Y LDX #0 STX ELEV_CNT ;Brick scroll position LDY #1 JMP INIT_SCR_END ; 1a) Normal screen INIT_STATIC INY LDA (ZPAGE_WORD10),Y ;Screen number JSR DRAW_SCREEN ;Draw normal screen LDY #2 LDA (ZPAGE_WORD10),Y STA ZPAGE_WORD1 ;Setup WORD1 as pointer INY ;to attribute map LDA (ZPAGE_WORD10),Y STA ZPAGE_WORD1+1 JSR SI_SET_ATTR ;Draw screen attributes JSR SET_S0 ;Set to screen 0 LDY #4 LDA (ZPAGE_WORD10),Y STA DIRK_Y LDA #12 STA DIRK_X LDY #5 JMP INIT_SCR_END ; 1b) Draw scrolling screen INIT_SCROLLING ; Setup screen height and Y offset to top of strip LDX SCR_NUM LDA IS_SCR_YS,X STA SCROLL_YS LDA IS_SCR_YOFF,X STA SCROLL_YOFF ; Find correct reset point and setup parms for Dirk start pos and screen ; draw. INY LDA (ZPAGE_WORD10),Y STA ZPAGE_WORD1 INY ;Setup WORD1 pointing LDA (ZPAGE_WORD10),Y ;at reset point STA ZPAGE_WORD1+1 ;table LDY #0 SI_FPOS_LOOP LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2 INY ;WORD2 is reset X LDA (ZPAGE_WORD1),Y STA ZPAGE_WORD2+1 CMP16 DIRK_X_DIE,ZPAGE_WORD2 ;Compare against how far Dirk ;got last go. BCC SI_POS_FOUND ;Exit if reset X is greater TYA CLC ADC #9-1 ;Move to next entry TAY JMP SI_FPOS_LOOP SI_POS_FOUND TYA SEC SBC #9+1 ;Move back to last entry TAY LDA (ZPAGE_WORD1),Y STA SCROLL_XOFFSET INY ;Setup Dirk's X position LDA (ZPAGE_WORD1),Y STA SCROLL_XOFFSET+1
utine comprises of three separate tables:- ; Table 0 contains pointers to the top left hand corner screen address. SCR_DRAW_TAB0 DW DL_SCR_TLFT ;0 - Panel DW DL_SCR_TLFT+(5*32) ;1 - Draw Bridge DW SCR1_START+(26*32) ;2 - Reaper floor DW DL_SCR_TLFT+(5*32) ;3 - Treasury DW SCR1_START+(15*32)+22 ;4 - Reaper IF FCS=1 DW SCR_START+(9*32)+10 ;5 - SBIM logo DW SCR_START+(13*32)+13 ;6 - Presents DW SCR_START+(12*32)+24 ;7 - TM DW SCR_START+(19*32)+11 ;8 - Released by DW SCR_START+(21*32)+4 ;9 - EPIC logo DW SCR_START+(24*32)+5 ;10- Licensed by Nintendo DW SCR_START+(7*32)+7 ;11- EPIC release DW SCR_START+(12*32)+10 ;12- Developed by DW SCR_START+(14*32)+12 ;13- MotiveTime logo DW SCR_START+(18*32)+1 ;14- Copyright message DW SCR_START+(15*32)+10 ;15- Dragons Lair logo s1 ENDIF IF GBR=1 DW SCR_START+(5*32)+9 ;5 - SBIM logo DW SCR_START+(9*32)+11 ;6 - Presents DW SCR_START+(3*32)+9 ;7 - Don Bluth cs2 DW SCR_START+(14*32)+10 ;8 - Released by DW SCR_START+(16*32)+6 ;9 - Elite logo DW SCR_START+(24*32)+5 ;10- Licensed by Nintendo DW SCR_START+(7*32)+5 ;11- Elite release DW SCR_START+(12*32)+10 ;12- Developed by DW SCR_START+(14*32)+11 ;13- MotiveTime logo DW SCR_START+(18*32)+1 ;14- Copyright message DW SCR_START+(11*32)+8 ;15- Dragons Lair logo s1 ENDIF DW SCR_START+(3*32)+9 ;16- Dragons Lair logo s2 DW SCR_START+(4*32)+23 ;17- TM credits screen 2 DW SCR_START+(32*8)+7 ;18- SCORES DW SCR_START+(32*10)+8 ;19- PLAYERS DW SCR_START+(32*13)+8 ;20- MUSIC DW SCR_START+(32*10)+7 ;21- GOLD DW SCR_START+(32*23)+13 ;22- Mtime logo option screens DW SCR1_START+(32*8)+10 ;23-
DL 0 ENDIF DL 0 ;4- IF SINGE DL S5_TP_TAB ;5 - Singe ELSE DL 0 ENDIF DL S6_TP_TAB ;6 - Elevator DL S7_TP_TAB ;7 - Treasury DL S8_TP_TAB ;8 - Dungeon SCR_TPTR_TABH DH S0_TP_TAB ;0 - Drawbridge IF HALL DH S1_TP_TAB ;1 - Entrance hall ELSE DH 0 ENDIF IF MINES DH S2_TP_TAB ;2 - Mines ELSE DH 0 ENDIF IF REAPER DH S3_TP_TAB ;3 - Grim reaper ELSE DH 0 ENDIF DH 0 ;4- IF SINGE DH S5_TP_TAB ;5 - Singe ELSE DH 0 ENDIF DH S6_TP_TAB ;6 - Elevator DH S7_TP_TAB ;7 - Treasury DH S8_TP_TAB ;8 - Dungeon ;-------------------------------------- ; Include graphics source files ; ------- -------- ------ ----- INCLUDE "GR_SMAP1.SRC" ;-------------------------------------- ; Sprite Collision boxes ; ------ --------- ----- ; Table of pointers to collision boxes SDC_COL_PTRS_L DL SCOL_0 DL SCOL_1 DL SCOL_2 DL SCOL_3 DL SCOL_4 DL SCOL_5 DL SCOL_6 DL SCOL_7 DL SCOL_8 DL SCOL_9 DL SCOL_10 DL SCOL_11 DL SCOL_12 DL SCOL_13 DL SCOL_14 DL SCOL_15 DL SCOL_16 DL SCOL_17 DL SCOL_18 DL SCOL_19 DL SCOL_20 DL SCOL_21 DL SCOL_22 DL SCOL_23 DL SCOL_24 DL SCOL_25 DL SCOL_26 DL SCOL_27 DL SCOL_25 ;28 DL SCOL_26 ;29 DL SCOL_27 ;30 DL SCOL_31 DL SCOL_32 DL SCOL_33 DL SCOL_34 DL SCOL_35 DL SCOL_36 DL SCOL_37 DL SCOL_38 DL SCOL_39 DL SCOL_40 DL SCOL_41 DL SCOL_42 DL SCOL_43 DL SCOL_44 DL SCOL_45 DL SCOL_46 DL SCOL_47 SDC_COL_PTRS_H DH SCOL_0 DH SCOL_1 DH SCOL_2 DH SCOL_3 DH SCOL_4 DH SCOL_5 DH SCOL_6 DH SCOL_7 DH SCOL_8 DH SCOL_9 DH SCOL_10 DH SCOL_11 DH SCOL_12 DH SCOL_13 DH SCOL_14 DH SCOL_15 DH SCOL_16 DH SCOL_17 DH SCOL_18 DH SCOL_19 DH SCOL_20 DH SCOL_21 DH SCOL_22 DH SCOL_23 DH SCOL_24 DH SCOL_25 DH SCOL_26
SCR_NUM CMP #6 BNE SF_NOT_6 ; Screen 6 (Elevator) LDA DIRK_FLAG AND #FCD_SEC_BIT ;Only check for exit if on BEQ SF_NOT_6 ;platform, else do normal bump ;into sides. LDA DIRK_X ;Test if walked off left CMP #L_EDGE ;or right edge of elevator BCC SF_OFF_ELEV CMP #R_EDGE BCS SF_OFF_ELEV RTS ; Walked off edge SF_OFF_ELEV LDX SCR_NUM_OLD ;Start correct screen LDA SF_ETABL,X STA ZPAGE_WORD1 LDA SF_ETABH,X ;Setup W1 as pointer to STA ZPAGE_WORD1+1 ;exit list LDY ELEV_ENUM ;Number of exit from elevator LDA (ZPAGE_WORD1),Y ;Screen to go to CMP #7 ;If new screen is treasury BEQ !1 ;don't update SCR_NUM_OLD so CMP #8 BEQ !1 STA SCR_NUM_OLD ;It's the same elev next time !1 STA SCR_NUM JMP SCR_E_END SF_ETABL DL SF_EL0 DL SF_EL1 DL SF_EL2 DL SF_EL3 DL SF_EL4 DL SF_EL5 DL SF_EL6 DL SF_EL7 SF_ETABH DH SF_EL0 DH SF_EL1 DH SF_EL2 DH SF_EL3 DH SF_EL4 DH SF_EL5 DH SF_EL6 DH SF_EL7 SF_EL0 ;Drawbridge SF_EL1 DB 1,2,8,7 ;Entrance hall SF_EL2 DB 8,2,3,7 ;Mines SF_EL3 DB 5,8,3,7 ;Grim reaper SF_EL4 ;Not implemented SF_EL5 ;Singe SF_EL6 ;Elevator SF_EL7 ;Treasury SF_NOT_6 ; Stop exit off left of screen LDA DIRK_X_ONSCR CMP #L_EDGE BCS SF_LOK LDA SCR_NUM ;Dirk exits on the left CMP #7 ;in the treasury BNE !1 LDA END_LEVEL_FLAG ;Exit from treasury BNE SF_LEVEL_END !1 LDA #L_EDGE+4 ;Put Dirk at left JSR SF_CEP SF_LOK SF_SCROLL LDA SCROLL_FLAG ;Is it a scrolling section BEQ SF_NOT_SCROLL LDA SCROLL_XOFFSET+1 ;Test if finished scrolling CMP SCROLL_LENGTH+1 ;(16 bit compare) BCC SF_END BNE !1 LDA SCROLL_XOFFSET CMP SCROLL_LENGTH BCC SF_END ; Scroll has finished so allow Dirk freedom to walk right. !1 LDA #0 STA SCROLL_FLAG ;Clear scroll flag SF_NOT_SCROLL LDA DIRK_X_ON
OL_S1 ;Scr 1 - Entrance Hall DH BG_COL_S2 ;Scr 2 - Mines DH BG_COL_S3 ;Scr 3 - Grim reaper DH 0 ;Scr 4 - DH BG_COL_S5 ;Scr 5 - Singe DH BG_COL_S6 ;Scr 6 - Elevator DH BG_COL_S7 ;Scr 7 - Treasury DH BG_COL_S8 ;Scr 8 - Dungeon ; Bonus collision data ; ----- --------- ---- BONUS_TABL DL BTAB_S0 DL BTAB_S1 DL BTAB_S2 DL BTAB_S3 DL 0 DL BTAB_S5 DL BTAB_S6 DL BTAB_S7 DL BTAB_S8 BONUS_TABH DH BTAB_S0 DH BTAB_S1 DH BTAB_S2 DH BTAB_S3 DH 0 DH BTAB_S5 DH BTAB_S6 DH BTAB_S7 DH BTAB_S8 INCLUDE "BG_COL.SRC" ;Background
Source Differences
The Japanese and European source codes have some differences:
- The Japanese code has the "cameo" screens disabled by inserting the RTS opcode at the start of the display routine. The same difference is present in the final binary code. There are no splash screens between levels, but they can be enabled by using Game Genie code XVEZKGAV.
- The Japanese version lacks the "Dungeon" level data tables.
--- EU.asm +++ JP.asm @@ -956,6 +956,8 @@ LDA #128 ;Stop tune playing JSR START_TUNE + RTS + LDX SCR_NUM ;Setup BG bank LDA CAM_B_TAB,X BEQ !1 @@ -1953,7 +1955,6 @@ DL S6_TP_TAB ;6 - Elevator DL S7_TP_TAB ;7 - Treasury - DL S8_TP_TAB ;8 - Dungeon SCR_TPTR_TABH DH S0_TP_TAB ;0 - Drawbridge @@ -1985,7 +1986,6 @@ DH S6_TP_TAB ;6 - Elevator DH S7_TP_TAB ;7 - Treasury - DH S8_TP_TAB ;8 - Dungeon ;-------------------------------------- @@ -2140,11 +2140,11 @@ SF_EL0 ;Drawbridge -SF_EL1 DB 1,2,8,7 ;Entrance hall +SF_EL1 DB 1,2,0,7 ;Entrance hall -SF_EL2 DB 8,2,3,7 ;Mines +SF_EL2 DB 1,2,3,7 ;Mines -SF_EL3 DB 5,8,3,7 ;Grim reaper +SF_EL3 DB 5,2,3,7 ;Grim reaper SF_EL4 ;Not implemented