;;=======================================================================;; ;; ;; ;; Scrolling Routines -- main program ;; ;; ;; ;; All other INC files are included here. The main routines for the ;; ;; frame-by-frame execution loop are also here. Finally I tried to keep ;; ;; global variables stored in this file as well. ;; ;; ;; ;;=======================================================================;; dosseg .model small .386 .code extrn ZTimerOn:far, ZTimerOff:far, ZTimerReport:far INCLUDE constant.inc DW_TABLE MACRO inc,num count = 0 number = 0 WHILE (count LT num) DW number count = count + 1 number = number + inc ENDM ENDM DOSPRINT MACRO st mov ah,9 mov dx,st int 21h ENDM EVEN Mult320 label WORD MultBufWidth label WORD DW_TABLE 320,200 MultVirtWidth label WORD DW_TABLE (VIRTUAL_WIDTH/4),200 INCLUDE palette.inc INCLUDE keyb.inc INCLUDE modex.inc INCLUDE page.inc INCLUDE init.inc INCLUDE map.inc ;INCLUDE sprite.inc NOT FOR NOW INCLUDE scroll.inc ;; Various segments that need to be filled in later... EVEN segVideo dw 0A000h ; videoram segment segText dw 0B800h ; text segment segMap dw -1 ; Map info segment segTiles dw -1 ; Tile bitmap segment segBuffer dw -1 ; Local 320x200 buffer segment segCode dw -1 ; Code segment segPSP dw -1 ; PSP segment segPalette dw -1 ; Palette segment segTextPal dw -1 ; Saved text palette EVEN bDoTransition db 0 ;; This routine is called for each frame. ;; Right now it just scrolls, but later all sprite animation would ;; occur here too. EVEN OneFrame PROC near call Scroll ; Scrolls the screen ; call AnimateSprites ; prepares sprites on drawpage jmp FlipPage ; shows drawpage... ; no RET necessary OneFrame ENDP ;; Each frame -- call the frame motion code, then check for keyhit. EVEN MainLoop PROC NEAR next_frame: call OneFrame JNKEY next_frame JKEYP kESC,all_done ; ESC -> quit, always call kprocCur mov al,bDoTransition cmp al,0 je next_frame transition: FLASH_OFF 16,segPalette mov bDoTransition,0 mov ax,1 sub ax,nMap mov nMap,ax ; Flip maps call LoadData call update_full ;<<<< call OneFrame FLASH_ON 16,segPalette jmp next_frame all_done: ret MainLoop ENDP ;; Beginning code -- Leaves text mode (saving the text screen) via ;; a fade. It loads the map data and draws one ;; frame before it fades on. Beginning PROC near NEW_PAL segTextPal PAL_SAVE segTextPal FADE_OFF 1,segTextPal call SaveVideo MODEX_START ; 320x200 Mode X graphics mode PAL_BLACK call LoadData ; This call will change... call update_full ;<<<< call OneFrame FADE_ON 1,segPalette ret Beginning ENDP ;; Ending code -- restore to text mode via a flash Ending PROC near FLASH_OFF 8,segPalette call RestoreVideo FLASH_ON 8,segTextPal ret Ending ENDP .data .stack 2048 END Initialize