;;=======================================================================;;
;; ;;
;; 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