mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-26 11:30:12 +00:00
tfv: more work on the split
This commit is contained in:
parent
65135b451a
commit
c272bd33fe
44
tfv/Makefile
44
tfv/Makefile
@ -11,11 +11,12 @@ all: tfv.dsk
|
|||||||
$(DOS33):
|
$(DOS33):
|
||||||
cd ../dos33fs-utils && make
|
cd ../dos33fs-utils && make
|
||||||
|
|
||||||
tfv.dsk: $(DOS33) HELLO LOADER TFV_TITLE TFV
|
tfv.dsk: $(DOS33) HELLO LOADER TFV_TITLE TFV_FLYING TFV_WORLD
|
||||||
$(DOS33) -y tfv.dsk SAVE A HELLO
|
$(DOS33) -y tfv.dsk SAVE A HELLO
|
||||||
$(DOS33) -y tfv.dsk BSAVE -a 0x1000 LOADER
|
$(DOS33) -y tfv.dsk BSAVE -a 0x1000 LOADER
|
||||||
$(DOS33) -y tfv.dsk BSAVE -a 0x2000 TFV_TITLE
|
$(DOS33) -y tfv.dsk BSAVE -a 0x2000 TFV_TITLE
|
||||||
$(DOS33) -y tfv.dsk BSAVE -a 0x2000 TFV
|
$(DOS33) -y tfv.dsk BSAVE -a 0x2000 TFV_FLYING
|
||||||
|
$(DOS33) -y tfv.dsk BSAVE -a 0x2000 TFV_WORLD
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
@ -43,25 +44,26 @@ tfv_title.o: tfv_title.s \
|
|||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
TFV: tfv.o
|
###
|
||||||
ld65 -o TFV tfv.o -C ../linker_scripts/apple2_2000.inc
|
|
||||||
|
|
||||||
tfv.o: tfv.s \
|
TFV_FLYING: tfv_flying.o
|
||||||
tfv_flying.s tfv_info.s \
|
ld65 -o TFV_FLYING tfv_flying.o -C ../linker_scripts/apple2_2000.inc
|
||||||
tfv_textentry.s tfv_worldmap.s \
|
|
||||||
graphics_map/tfv_backgrounds.inc tfv_sprites.inc zp.inc \
|
tfv_flying.o: tfv_flying.s \
|
||||||
../asm_routines/multiply_fast.s \
|
gr_hlin.s gr_putsprite.s \
|
||||||
gr_fast_clear.s \
|
tfv_help.s \
|
||||||
../asm_routines/pageflip.s \
|
tfv_sprites.inc
|
||||||
../asm_routines/gr_setpage.s \
|
ca65 -o tfv_flying.o tfv_flying.s -l tfv_flying.lst
|
||||||
../asm_routines/keypress.s \
|
|
||||||
../asm_routines/gr_putsprite.s \
|
###
|
||||||
../asm_routines/text_print.s \
|
|
||||||
../asm_routines/memset.s \
|
TFV_WORLD: tfv_world.o
|
||||||
../asm_routines/gr_vlin.s \
|
ld65 -o TFV_WORLD tfv_world.o -C ../linker_scripts/apple2_2000.inc
|
||||||
../asm_routines/gr_copy.s \
|
|
||||||
../asm_routines/gr_unrle.s
|
tfv_world.o: tfv_world.s \
|
||||||
ca65 -o tfv.o tfv.s -l tfv.lst
|
tfv_overworld.s tfv_drawmap.s \
|
||||||
|
graphics_map/tfv_backgrounds.inc tfv_sprites.inc zp.inc
|
||||||
|
ca65 -o tfv_world.o tfv_world.s -l tfv_world.lst
|
||||||
|
|
||||||
graphics_map/tfv_backgrounds.inc:
|
graphics_map/tfv_backgrounds.inc:
|
||||||
cd graphics_map && make
|
cd graphics_map && make
|
||||||
@ -71,5 +73,5 @@ graphics_map/tfv_backgrounds.inc:
|
|||||||
###
|
###
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *~ TITLE.GR *.o *.lst TFV TFV_TITLE HELLO LOADER
|
rm -f *~ TITLE.GR *.o *.lst TFV TFV_TITLE TFV_FLYING TFV_WORLD HELLO LOADER
|
||||||
|
|
||||||
|
124
tfv/gr_hlin.s
Normal file
124
tfv/gr_hlin.s
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
;=====================================================================
|
||||||
|
;= ROUTINES
|
||||||
|
;=====================================================================
|
||||||
|
|
||||||
|
;================================
|
||||||
|
; hlin_setup
|
||||||
|
;================================
|
||||||
|
; put address in GBASL/GBASH
|
||||||
|
; Ycoord in A, Xcoord in Y
|
||||||
|
hlin_setup:
|
||||||
|
sty TEMPY ; 3
|
||||||
|
tay ; y=A ; 2
|
||||||
|
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||||
|
clc ; 2
|
||||||
|
adc TEMPY ; 3
|
||||||
|
sta GBASL ; 3
|
||||||
|
iny ; 2
|
||||||
|
|
||||||
|
lda gr_offsets,Y ; 4
|
||||||
|
adc DRAW_PAGE ; add in draw page offset ; 3
|
||||||
|
sta GBASH ; 3
|
||||||
|
rts ; 6
|
||||||
|
;===========
|
||||||
|
; 35
|
||||||
|
;================================
|
||||||
|
; hlin_double:
|
||||||
|
;================================
|
||||||
|
; HLIN Y, V2 AT A
|
||||||
|
; Y, X, A trashed
|
||||||
|
; start at Y, draw up to and including X
|
||||||
|
hlin_double:
|
||||||
|
;int hlin_double(int page, int x1, int x2, int at) {
|
||||||
|
|
||||||
|
jsr hlin_setup ; 41
|
||||||
|
|
||||||
|
sec ; 2
|
||||||
|
lda V2 ; 3
|
||||||
|
sbc TEMPY ; 3
|
||||||
|
|
||||||
|
tax ; 2
|
||||||
|
inx ; 2
|
||||||
|
;===========
|
||||||
|
; 53
|
||||||
|
; fallthrough
|
||||||
|
|
||||||
|
;=================================
|
||||||
|
; hlin_double_continue: width
|
||||||
|
;=================================
|
||||||
|
; GBASL has correct offset for row/col
|
||||||
|
; width in X
|
||||||
|
|
||||||
|
hlin_double_continue:
|
||||||
|
|
||||||
|
ldy #0 ; 2
|
||||||
|
lda COLOR ; 3
|
||||||
|
hlin_double_loop:
|
||||||
|
sta (GBASL),Y ; 6
|
||||||
|
inc GBASL ; 5
|
||||||
|
dex ; 2
|
||||||
|
bne hlin_double_loop ; 2nt/3
|
||||||
|
|
||||||
|
rts ; 6
|
||||||
|
;=============
|
||||||
|
; 53+5+X*16+5
|
||||||
|
|
||||||
|
;================================
|
||||||
|
; hlin_single:
|
||||||
|
;================================
|
||||||
|
; HLIN Y, V2 AT A
|
||||||
|
; Y, X, A trashed
|
||||||
|
hlin_single:
|
||||||
|
|
||||||
|
jsr hlin_setup
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda V2
|
||||||
|
sbc TEMPY
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
; fallthrough
|
||||||
|
|
||||||
|
;=================================
|
||||||
|
; hlin_single_continue: width
|
||||||
|
;=================================
|
||||||
|
; width in X
|
||||||
|
|
||||||
|
hlin_single_continue:
|
||||||
|
|
||||||
|
hlin_single_top:
|
||||||
|
lda COLOR
|
||||||
|
and #$f0
|
||||||
|
sta COLOR
|
||||||
|
|
||||||
|
hlin_single_top_loop:
|
||||||
|
ldy #0
|
||||||
|
lda (GBASL),Y
|
||||||
|
and #$0f
|
||||||
|
ora COLOR
|
||||||
|
sta (GBASL),Y
|
||||||
|
inc GBASL
|
||||||
|
dex
|
||||||
|
bne hlin_single_top_loop
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
hlin_single_bottom:
|
||||||
|
|
||||||
|
lda COLOR
|
||||||
|
and #$0f
|
||||||
|
sta COLOR
|
||||||
|
|
||||||
|
hlin_single_bottom_loop:
|
||||||
|
ldy #0
|
||||||
|
lda (GBASL),Y
|
||||||
|
and #$f0
|
||||||
|
sta (GBASL),Y
|
||||||
|
inc GBASL
|
||||||
|
dex
|
||||||
|
bne hlin_single_bottom_loop
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
101
tfv/gr_putsprite.s
Normal file
101
tfv/gr_putsprite.s
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
;=============================================
|
||||||
|
; put_sprite
|
||||||
|
;=============================================
|
||||||
|
; Sprite to display in INH,INL
|
||||||
|
; Location is XPOS,YPOS
|
||||||
|
; Note, only works if YPOS is multiple of two?
|
||||||
|
|
||||||
|
put_sprite:
|
||||||
|
|
||||||
|
ldy #0 ; byte 0 is xsize ; 2
|
||||||
|
lda (INL),Y ; 5
|
||||||
|
sta CH ; xsize is in CH ; 3
|
||||||
|
iny ; 2
|
||||||
|
|
||||||
|
lda (INL),Y ; byte 1 is ysize ; 5
|
||||||
|
sta CV ; ysize is in CV ; 3
|
||||||
|
iny ; 2
|
||||||
|
|
||||||
|
lda YPOS ; make a copy of ypos ; 3
|
||||||
|
sta TEMPY ; as we modify it ; 3
|
||||||
|
;===========
|
||||||
|
; 28
|
||||||
|
put_sprite_loop:
|
||||||
|
sty TEMP ; save sprite pointer ; 3
|
||||||
|
|
||||||
|
ldy TEMPY ; 3
|
||||||
|
lda gr_offsets,Y ; lookup low-res memory address ; 5
|
||||||
|
clc ; 2
|
||||||
|
adc XPOS ; add in xpos ; 3
|
||||||
|
sta OUTL ; store out low byte of addy ; 3
|
||||||
|
lda gr_offsets+1,Y ; look up high byte ; 5
|
||||||
|
adc DRAW_PAGE ; ; 3
|
||||||
|
sta OUTH ; and store it out ; 3
|
||||||
|
ldy TEMP ; restore sprite pointer ; 3
|
||||||
|
|
||||||
|
; OUTH:OUTL now points at right place
|
||||||
|
|
||||||
|
ldx CH ; load xsize into x ; 3
|
||||||
|
;===========
|
||||||
|
; 36
|
||||||
|
put_sprite_pixel:
|
||||||
|
lda (INL),Y ; get sprite colors ; 5
|
||||||
|
iny ; increment sprite pointer ; 2
|
||||||
|
|
||||||
|
sty TEMP ; save sprite pointer ; 3
|
||||||
|
ldy #$0 ; 2
|
||||||
|
|
||||||
|
; check if completely transparent
|
||||||
|
; if so, skip
|
||||||
|
|
||||||
|
cmp #$0 ; if all zero, transparent ; 2
|
||||||
|
beq put_sprite_done_draw ; don't draw it ; 2nt/3
|
||||||
|
; FIXME: use BIT? ;==============
|
||||||
|
; 17
|
||||||
|
|
||||||
|
sta COLOR ; save color for later ; 3
|
||||||
|
|
||||||
|
; check if top pixel transparent
|
||||||
|
|
||||||
|
and #$f0 ; check if top nibble zero ; 2
|
||||||
|
bne put_sprite_bottom ; if not skip ahead ; 2nt/3
|
||||||
|
|
||||||
|
lda #$f0 ; setup mask ; 2
|
||||||
|
sta MASK ; 3
|
||||||
|
bmi put_sprite_mask ; 2nt/3
|
||||||
|
|
||||||
|
put_sprite_bottom:
|
||||||
|
lda COLOR ; re-load color ; 3
|
||||||
|
and #$0f ; check if bottom nibble zero ; 2
|
||||||
|
bne put_sprite_all ; if not, skip ahead ; 2nt/3
|
||||||
|
lda #$0f ; 2
|
||||||
|
sta MASK ; setup mask ; 3
|
||||||
|
|
||||||
|
put_sprite_mask:
|
||||||
|
lda (OUTL),Y ; get color at output ; 5
|
||||||
|
and MASK ; mask off unneeded part ; 3
|
||||||
|
ora COLOR ; or the color in ; 3
|
||||||
|
sta (OUTL),Y ; store it back ; 5
|
||||||
|
|
||||||
|
jmp put_sprite_done_draw ; we are done ; 3
|
||||||
|
|
||||||
|
put_sprite_all:
|
||||||
|
lda COLOR ; load color ; 3
|
||||||
|
sta (OUTL),Y ; and write it out ; 5
|
||||||
|
|
||||||
|
|
||||||
|
put_sprite_done_draw:
|
||||||
|
|
||||||
|
ldy TEMP ; restore sprite pointer ; 3
|
||||||
|
|
||||||
|
inc OUTL ; increment output pointer ; 5
|
||||||
|
dex ; decrement x counter ; 2
|
||||||
|
bne put_sprite_pixel ; if not done, keep looping ; 2nt/3
|
||||||
|
|
||||||
|
inc TEMPY ; each line has two y vars ; 5
|
||||||
|
inc TEMPY ; 5
|
||||||
|
dec CV ; decemenet total y count ; 5
|
||||||
|
bne put_sprite_loop ; loop if not done ; 2nt/3
|
||||||
|
|
||||||
|
rts ; return ; 6
|
||||||
|
|
@ -151,15 +151,15 @@ copy_filename_done:
|
|||||||
filenames:
|
filenames:
|
||||||
.word intro_filename
|
.word intro_filename
|
||||||
.word flying_filename
|
.word flying_filename
|
||||||
.word duke2_filename
|
.word world_filename
|
||||||
.word credits_filename
|
.word credits_filename
|
||||||
|
|
||||||
intro_filename:
|
intro_filename:
|
||||||
.byte "TFV_TITLE",0
|
.byte "TFV_TITLE",0
|
||||||
flying_filename:
|
flying_filename:
|
||||||
.byte "TFV_FLYING",0
|
.byte "TFV_FLYING",0
|
||||||
duke2_filename:
|
world_filename:
|
||||||
.byte "DUKE_LEVEL2",0
|
.byte "TFV_WORLD",0
|
||||||
credits_filename:
|
credits_filename:
|
||||||
.byte "TFV_CREDITS",0
|
.byte "TFV_CREDITS",0
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ move_and_print_list:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
.if 0
|
|
||||||
;================================
|
;================================
|
||||||
; move and print a list of lines
|
; move and print a list of lines
|
||||||
;================================
|
;================================
|
||||||
@ -188,4 +188,4 @@ print_both_pages:
|
|||||||
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endif
|
|
||||||
|
91
tfv/tfv.s
91
tfv/tfv.s
@ -1,91 +0,0 @@
|
|||||||
.include "zp.inc"
|
|
||||||
.include "hardware.inc"
|
|
||||||
|
|
||||||
;================================
|
|
||||||
; Clear screen and setup graphics
|
|
||||||
;================================
|
|
||||||
|
|
||||||
jsr HOME
|
|
||||||
jsr set_gr_page0
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta DISP_PAGE ; Forgot to set initially
|
|
||||||
; real hardware and AppleWin default
|
|
||||||
; to different values
|
|
||||||
|
|
||||||
|
|
||||||
;=====================
|
|
||||||
; Flying
|
|
||||||
;=====================
|
|
||||||
|
|
||||||
jsr flying_start
|
|
||||||
|
|
||||||
;=====================
|
|
||||||
; World Map
|
|
||||||
;=====================
|
|
||||||
|
|
||||||
jsr world_map
|
|
||||||
|
|
||||||
;=====================
|
|
||||||
; Game Over
|
|
||||||
;=====================
|
|
||||||
|
|
||||||
jsr game_over
|
|
||||||
|
|
||||||
;=====================
|
|
||||||
; All finished
|
|
||||||
;=====================
|
|
||||||
exit:
|
|
||||||
|
|
||||||
lda #$4
|
|
||||||
sta BASH
|
|
||||||
lda #$0
|
|
||||||
sta BASL ; restore to 0x400 (page 0)
|
|
||||||
; copy to 0x400 (page 0)
|
|
||||||
|
|
||||||
; call home
|
|
||||||
jsr HOME
|
|
||||||
|
|
||||||
|
|
||||||
; Return to BASIC?
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
;===============================================
|
|
||||||
; External modules
|
|
||||||
;===============================================
|
|
||||||
|
|
||||||
;.include "tfv_opener.s"
|
|
||||||
;.include "tfv_title.s"
|
|
||||||
.include "tfv_textentry.s"
|
|
||||||
.include "tfv_flying.s"
|
|
||||||
.include "tfv_worldmap.s"
|
|
||||||
.include "tfv_info.s"
|
|
||||||
|
|
||||||
.include "gr_fast_clear.s"
|
|
||||||
.include "../asm_routines/gr_hlin.s"
|
|
||||||
.include "../asm_routines/pageflip.s"
|
|
||||||
.include "../asm_routines/gr_setpage.s"
|
|
||||||
.include "../asm_routines/keypress.s"
|
|
||||||
.include "../asm_routines/gr_putsprite.s"
|
|
||||||
.include "../asm_routines/text_print.s"
|
|
||||||
;.include "../asm_routines/memset.s"
|
|
||||||
.include "../asm_routines/gr_vlin.s"
|
|
||||||
.include "../asm_routines/gr_copy.s"
|
|
||||||
;.include "../asm_routines/gr_unrle.s"
|
|
||||||
.include "decompress_fast_v2.s"
|
|
||||||
.include "../asm_routines/gr_offsets.s"
|
|
||||||
|
|
||||||
;===============================================
|
|
||||||
; Variables
|
|
||||||
;===============================================
|
|
||||||
|
|
||||||
enter_name_string:
|
|
||||||
.asciiz "PLEASE ENTER A NAME:"
|
|
||||||
|
|
||||||
name:
|
|
||||||
.byte $0,$0,$0,$0,$0,$0,$0,$0
|
|
||||||
|
|
||||||
|
|
||||||
.include "tfv_sprites.inc"
|
|
||||||
.include "graphics_map/tfv_backgrounds.inc"
|
|
89
tfv/tfv_drawmap.s
Normal file
89
tfv/tfv_drawmap.s
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
;==========================
|
||||||
|
; draw world map
|
||||||
|
;==========================
|
||||||
|
; including position
|
||||||
|
|
||||||
|
show_map:
|
||||||
|
|
||||||
|
lda #<(map_lzsa)
|
||||||
|
sta getsrc_smc+1
|
||||||
|
lda #>(map_lzsa)
|
||||||
|
sta getsrc_smc+2
|
||||||
|
|
||||||
|
lda DRAW_PAGE
|
||||||
|
clc
|
||||||
|
adc #$4 ; page to load at?
|
||||||
|
; FIXME: really need to load at 0xc and
|
||||||
|
; copy
|
||||||
|
|
||||||
|
|
||||||
|
jsr decompress_lzsa2_fast
|
||||||
|
|
||||||
|
|
||||||
|
; basic_plot(8+((map_x&0x3)*6)+(tfv_x/6),
|
||||||
|
; 8+(((map_x&0xc)>>2)*6)+(tfv_y/6))
|
||||||
|
|
||||||
|
; horizontal
|
||||||
|
|
||||||
|
lda MAP_X
|
||||||
|
and #3
|
||||||
|
asl
|
||||||
|
sta TEMP
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc TEMP ; ( MAP_X & 3 ) * 6
|
||||||
|
sta TEMP
|
||||||
|
|
||||||
|
lda TFV_X
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr ; TFV/8
|
||||||
|
|
||||||
|
adc TEMP
|
||||||
|
adc #8
|
||||||
|
sta CH
|
||||||
|
|
||||||
|
; vertical
|
||||||
|
|
||||||
|
lda MAP_X
|
||||||
|
and #$c
|
||||||
|
lsr
|
||||||
|
sta TEMP
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc TEMP ; ( MAP_X & C ) * 6
|
||||||
|
sta TEMP
|
||||||
|
|
||||||
|
lda TFV_Y
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr ; TFV/8
|
||||||
|
|
||||||
|
adc TEMP
|
||||||
|
adc #8
|
||||||
|
lsr ; divide by 2 as htab_vtab multiplies
|
||||||
|
sta CV
|
||||||
|
|
||||||
|
; jsr htab_vtab
|
||||||
|
|
||||||
|
lda CV
|
||||||
|
asl
|
||||||
|
tay
|
||||||
|
lda gr_offsets,Y
|
||||||
|
clc
|
||||||
|
adc CH
|
||||||
|
sta BASL
|
||||||
|
|
||||||
|
lda gr_offsets+1,Y
|
||||||
|
sta BASH
|
||||||
|
|
||||||
|
lda #$19 ; red/orange
|
||||||
|
ldy #0
|
||||||
|
sta (BASL),Y
|
||||||
|
|
||||||
|
|
||||||
|
jsr page_flip
|
||||||
|
|
||||||
|
jsr wait_until_keypressed
|
||||||
|
|
||||||
|
rts
|
@ -1,3 +1,10 @@
|
|||||||
|
; Mode-7 Flying code
|
||||||
|
|
||||||
|
.include "zp.inc"
|
||||||
|
.include "hardware.inc"
|
||||||
|
.include "common_defines.inc"
|
||||||
|
|
||||||
|
|
||||||
;===========
|
;===========
|
||||||
; CONSTANTS
|
; CONSTANTS
|
||||||
;===========
|
;===========
|
||||||
@ -15,14 +22,18 @@ CONST_SCALE_F = $00
|
|||||||
CONST_LOWRES_HALF_I = $ec ; -(LOWRES_W/2)
|
CONST_LOWRES_HALF_I = $ec ; -(LOWRES_W/2)
|
||||||
CONST_LOWRES_HALF_F = $00
|
CONST_LOWRES_HALF_F = $00
|
||||||
|
|
||||||
flying_start:
|
flying:
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
; Clear screen/pages
|
; Clear screen/pages
|
||||||
;===================
|
;===================
|
||||||
|
|
||||||
jsr clear_screens
|
jsr clear_screens
|
||||||
jsr set_gr_page0
|
bit PAGE0
|
||||||
|
lda #0
|
||||||
|
sta DISP_PAGE
|
||||||
|
lda #4
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
; Initialize the 2kB of multiply lookup tables
|
; Initialize the 2kB of multiply lookup tables
|
||||||
jsr init_multiply_tables
|
jsr init_multiply_tables
|
||||||
@ -66,7 +77,7 @@ flying_loop:
|
|||||||
|
|
||||||
flying_keyboard:
|
flying_keyboard:
|
||||||
|
|
||||||
jsr get_key ; get keypress ; 6
|
jsr get_keypress ; get keypress ; 6
|
||||||
|
|
||||||
lda LASTKEY ; 3
|
lda LASTKEY ; 3
|
||||||
|
|
||||||
@ -77,7 +88,7 @@ flying_keyboard:
|
|||||||
;skipskip:
|
;skipskip:
|
||||||
|
|
||||||
cmp #('W') ; 2
|
cmp #('W') ; 2
|
||||||
bne check_down ; 3/2nt
|
bne flying_check_down ; 3/2nt
|
||||||
|
|
||||||
;===========
|
;===========
|
||||||
; UP PRESSED
|
; UP PRESSED
|
||||||
@ -85,7 +96,7 @@ flying_keyboard:
|
|||||||
|
|
||||||
lda SHIPY
|
lda SHIPY
|
||||||
cmp #17
|
cmp #17
|
||||||
bcc check_down ; bgt, if shipy>16
|
bcc flying_check_down ; bgt, if shipy>16
|
||||||
dec SHIPY
|
dec SHIPY
|
||||||
dec SHIPY ; move ship up
|
dec SHIPY ; move ship up
|
||||||
inc SPACEZ_I ; incement height
|
inc SPACEZ_I ; incement height
|
||||||
@ -93,9 +104,9 @@ flying_keyboard:
|
|||||||
lda #0
|
lda #0
|
||||||
sta SPLASH_COUNT
|
sta SPLASH_COUNT
|
||||||
|
|
||||||
check_down:
|
flying_check_down:
|
||||||
cmp #('S')
|
cmp #('S')
|
||||||
bne check_left
|
bne flying_check_left
|
||||||
|
|
||||||
;=============
|
;=============
|
||||||
; DOWN PRESSED
|
; DOWN PRESSED
|
||||||
@ -108,15 +119,15 @@ check_down:
|
|||||||
inc SHIPY ; move ship down
|
inc SHIPY ; move ship down
|
||||||
dec SPACEZ_I ; decrement height
|
dec SPACEZ_I ; decrement height
|
||||||
jsr update_z_factor
|
jsr update_z_factor
|
||||||
bcc check_left
|
bcc flying_check_left
|
||||||
|
|
||||||
splashy:
|
splashy:
|
||||||
lda #10
|
lda #10
|
||||||
sta SPLASH_COUNT
|
sta SPLASH_COUNT
|
||||||
|
|
||||||
check_left:
|
flying_check_left:
|
||||||
cmp #('A')
|
cmp #('A')
|
||||||
bne check_right
|
bne flying_check_right
|
||||||
|
|
||||||
;=============
|
;=============
|
||||||
; LEFT PRESSED
|
; LEFT PRESSED
|
||||||
@ -129,7 +140,7 @@ check_left:
|
|||||||
lda #$0
|
lda #$0
|
||||||
sta TURNING
|
sta TURNING
|
||||||
clv
|
clv
|
||||||
bvc check_right
|
bvc flying_check_right
|
||||||
|
|
||||||
turn_left:
|
turn_left:
|
||||||
lda #253 ; -3
|
lda #253 ; -3
|
||||||
@ -137,7 +148,7 @@ turn_left:
|
|||||||
|
|
||||||
dec ANGLE
|
dec ANGLE
|
||||||
|
|
||||||
check_right:
|
flying_check_right:
|
||||||
cmp #('D')
|
cmp #('D')
|
||||||
bne check_speedup
|
bne check_speedup
|
||||||
|
|
||||||
@ -1243,3 +1254,25 @@ horizontal_lookup:
|
|||||||
|
|
||||||
grass_string:
|
grass_string:
|
||||||
.asciiz "NEED TO LAND ON GRASS!"
|
.asciiz "NEED TO LAND ON GRASS!"
|
||||||
|
|
||||||
|
|
||||||
|
;===============================================
|
||||||
|
; External modules
|
||||||
|
;===============================================
|
||||||
|
|
||||||
|
.include "gr_offsets.s"
|
||||||
|
.include "gr_hlin.s"
|
||||||
|
.include "gr_pageflip.s"
|
||||||
|
.include "gr_putsprite.s"
|
||||||
|
.include "gr_fast_clear.s"
|
||||||
|
|
||||||
|
.include "keyboard.s"
|
||||||
|
.include "joystick.s"
|
||||||
|
|
||||||
|
.include "wait_keypressed.s"
|
||||||
|
.include "text_print.s"
|
||||||
|
|
||||||
|
.include "tfv_help.s"
|
||||||
|
|
||||||
|
|
||||||
|
.include "tfv_sprites.inc"
|
||||||
|
28
tfv/tfv_game_over.s
Normal file
28
tfv/tfv_game_over.s
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
game_over:
|
||||||
|
lda #$a0
|
||||||
|
jsr clear_top_a
|
||||||
|
|
||||||
|
bit SET_TEXT
|
||||||
|
|
||||||
|
lda #10
|
||||||
|
sta CV
|
||||||
|
lda #15
|
||||||
|
sta CH
|
||||||
|
|
||||||
|
lda #>(game_over_man)
|
||||||
|
sta OUTH
|
||||||
|
lda #<(game_over_man)
|
||||||
|
sta OUTL
|
||||||
|
|
||||||
|
jsr move_and_print
|
||||||
|
|
||||||
|
jsr page_flip
|
||||||
|
|
||||||
|
jsr wait_until_keypressed
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
game_over_man:
|
||||||
|
.asciiz "GAME OVER"
|
||||||
|
|
36
tfv/tfv_help.s
Normal file
36
tfv/tfv_help.s
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
;====================
|
||||||
|
; print help message
|
||||||
|
;====================
|
||||||
|
|
||||||
|
print_help:
|
||||||
|
lda #$a0
|
||||||
|
jsr clear_top_a
|
||||||
|
|
||||||
|
bit SET_TEXT
|
||||||
|
|
||||||
|
lda #>(help_message)
|
||||||
|
sta OUTH
|
||||||
|
lda #<(help_message)
|
||||||
|
sta OUTL
|
||||||
|
|
||||||
|
jsr move_and_print_list
|
||||||
|
|
||||||
|
jsr page_flip
|
||||||
|
|
||||||
|
jsr wait_until_keypressed
|
||||||
|
|
||||||
|
bit SET_GR ; set graphics
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
help_message:
|
||||||
|
.byte 1,18,"HELP"
|
||||||
|
.byte 3,4,"ARROWS - MOVE"
|
||||||
|
.byte 3,5,"W/A/S/D - MOVE"
|
||||||
|
.byte 3,6,"Z/X - SPEED UP / SLOW DOWN"
|
||||||
|
.byte 3,7,"SPACE - STOP"
|
||||||
|
.byte 3,8,"RETURN - LAND / ENTER / ACTION"
|
||||||
|
.byte 3,9,"I - INVENTORY"
|
||||||
|
.byte 3,10,"M - MAP"
|
||||||
|
.byte 3,11,"ESC - QUIT"
|
||||||
|
.byte $ff
|
157
tfv/tfv_info.s
157
tfv/tfv_info.s
@ -1,157 +0,0 @@
|
|||||||
|
|
||||||
game_over:
|
|
||||||
lda #$a0
|
|
||||||
jsr clear_top_a
|
|
||||||
|
|
||||||
bit SET_TEXT
|
|
||||||
|
|
||||||
lda #10
|
|
||||||
sta CV
|
|
||||||
lda #15
|
|
||||||
sta CH
|
|
||||||
|
|
||||||
lda #>(game_over_man)
|
|
||||||
sta OUTH
|
|
||||||
lda #<(game_over_man)
|
|
||||||
sta OUTL
|
|
||||||
|
|
||||||
jsr move_and_print
|
|
||||||
|
|
||||||
jsr page_flip
|
|
||||||
|
|
||||||
hang_forever:
|
|
||||||
jmp hang_forever
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
game_over_man:
|
|
||||||
.asciiz "GAME OVER"
|
|
||||||
|
|
||||||
show_map:
|
|
||||||
|
|
||||||
lda DRAW_PAGE
|
|
||||||
clc
|
|
||||||
adc #$4 ; page to load at?
|
|
||||||
; FIXME: really need to load at 0xc and
|
|
||||||
; copy
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda #<(map_lzsa)
|
|
||||||
sta getsrc_smc+1
|
|
||||||
lda #>(map_lzsa)
|
|
||||||
sta getsrc_smc+2
|
|
||||||
|
|
||||||
pla
|
|
||||||
|
|
||||||
jsr decompress_lzsa2_fast
|
|
||||||
|
|
||||||
|
|
||||||
; basic_plot(8+((map_x&0x3)*6)+(tfv_x/6),
|
|
||||||
; 8+(((map_x&0xc)>>2)*6)+(tfv_y/6))
|
|
||||||
|
|
||||||
; horizontal
|
|
||||||
|
|
||||||
lda MAP_X
|
|
||||||
and #3
|
|
||||||
asl
|
|
||||||
sta TEMP
|
|
||||||
asl
|
|
||||||
clc
|
|
||||||
adc TEMP ; ( MAP_X & 3 ) * 6
|
|
||||||
sta TEMP
|
|
||||||
|
|
||||||
lda TFV_X
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr ; TFV/8
|
|
||||||
|
|
||||||
adc TEMP
|
|
||||||
adc #8
|
|
||||||
sta CH
|
|
||||||
|
|
||||||
; vertical
|
|
||||||
|
|
||||||
lda MAP_X
|
|
||||||
and #$c
|
|
||||||
lsr
|
|
||||||
sta TEMP
|
|
||||||
asl
|
|
||||||
clc
|
|
||||||
adc TEMP ; ( MAP_X & C ) * 6
|
|
||||||
sta TEMP
|
|
||||||
|
|
||||||
lda TFV_Y
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr ; TFV/8
|
|
||||||
|
|
||||||
adc TEMP
|
|
||||||
adc #8
|
|
||||||
lsr ; divide by 2 as htab_vtab multiplies
|
|
||||||
sta CV
|
|
||||||
|
|
||||||
jsr htab_vtab
|
|
||||||
lda #$19 ; red/orange
|
|
||||||
ldy #0
|
|
||||||
sta (BASL),Y
|
|
||||||
|
|
||||||
|
|
||||||
jsr page_flip
|
|
||||||
|
|
||||||
jsr wait_until_keypressed
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print_help:
|
|
||||||
lda #$a0
|
|
||||||
jsr clear_top_a
|
|
||||||
|
|
||||||
bit SET_TEXT
|
|
||||||
|
|
||||||
lda #1
|
|
||||||
sta CV
|
|
||||||
lda #18
|
|
||||||
sta CH
|
|
||||||
|
|
||||||
lda #>(help1)
|
|
||||||
sta OUTH
|
|
||||||
lda #<(help1)
|
|
||||||
sta OUTL
|
|
||||||
|
|
||||||
jsr move_and_print
|
|
||||||
jsr point_to_end_string
|
|
||||||
|
|
||||||
lda #3
|
|
||||||
sta CV
|
|
||||||
lda #4
|
|
||||||
sta CH
|
|
||||||
|
|
||||||
help_loop:
|
|
||||||
jsr move_and_print
|
|
||||||
jsr point_to_end_string
|
|
||||||
inc CV
|
|
||||||
|
|
||||||
lda #11
|
|
||||||
cmp CV
|
|
||||||
bne help_loop
|
|
||||||
|
|
||||||
jsr page_flip
|
|
||||||
|
|
||||||
jsr wait_until_keypressed
|
|
||||||
|
|
||||||
bit SET_GR ; set graphics
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
help1: .asciiz "HELP"
|
|
||||||
help2: .asciiz "ARROWS - MOVE"
|
|
||||||
help3: .asciiz "W/A/S/D - MOVE"
|
|
||||||
help4: .asciiz "Z/X - SPEED UP / SLOW DOWN"
|
|
||||||
help5: .asciiz "SPACE - STOP"
|
|
||||||
help6: .asciiz "RETURN - LAND / ENTER / ACTION"
|
|
||||||
help7: .asciiz "I - INVENTORY"
|
|
||||||
help8: .asciiz "M - MAP"
|
|
||||||
help9: .asciiz "ESC - QUIT"
|
|
||||||
|
|
@ -20,7 +20,11 @@ world_map:
|
|||||||
;===================
|
;===================
|
||||||
|
|
||||||
jsr clear_screens
|
jsr clear_screens
|
||||||
jsr set_gr_page0
|
bit PAGE0
|
||||||
|
lda #0
|
||||||
|
sta DISP_PAGE
|
||||||
|
lda #4
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
;===============
|
;===============
|
||||||
; Init Variables
|
; Init Variables
|
||||||
@ -58,7 +62,7 @@ worldmap_loop:
|
|||||||
|
|
||||||
worldmap_keyboard:
|
worldmap_keyboard:
|
||||||
|
|
||||||
jsr get_key ; get keypress
|
jsr get_keypress ; get keypress
|
||||||
|
|
||||||
lda LASTKEY
|
lda LASTKEY
|
||||||
|
|
59
tfv/tfv_world.s
Normal file
59
tfv/tfv_world.s
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
; TFV world
|
||||||
|
; the main part of the game
|
||||||
|
|
||||||
|
|
||||||
|
.include "zp.inc"
|
||||||
|
.include "hardware.inc"
|
||||||
|
.include "common_defines.inc"
|
||||||
|
|
||||||
|
;================================
|
||||||
|
; Clear screen and setup graphics
|
||||||
|
;================================
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; World Map
|
||||||
|
;=====================
|
||||||
|
|
||||||
|
jsr world_map
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; Game Over
|
||||||
|
;=====================
|
||||||
|
; return to title screen?
|
||||||
|
|
||||||
|
jsr game_over
|
||||||
|
|
||||||
|
lda #LOAD_TITLE
|
||||||
|
sta WHICH_LOAD
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;===============================================
|
||||||
|
; External modules
|
||||||
|
;===============================================
|
||||||
|
|
||||||
|
.include "tfv_drawmap.s"
|
||||||
|
.include "tfv_overworld.s"
|
||||||
|
.include "tfv_game_over.s"
|
||||||
|
.include "tfv_help.s"
|
||||||
|
|
||||||
|
|
||||||
|
.include "gr_fast_clear.s"
|
||||||
|
.include "gr_hlin.s"
|
||||||
|
.include "gr_pageflip.s"
|
||||||
|
.include "keyboard.s"
|
||||||
|
.include "joystick.s"
|
||||||
|
.include "gr_putsprite.s"
|
||||||
|
.include "text_print.s"
|
||||||
|
.include "gr_copy.s"
|
||||||
|
.include "decompress_fast_v2.s"
|
||||||
|
.include "gr_offsets.s"
|
||||||
|
.include "wait_keypressed.s"
|
||||||
|
|
||||||
|
;===============================================
|
||||||
|
; Variables
|
||||||
|
;===============================================
|
||||||
|
|
||||||
|
.include "tfv_sprites.inc"
|
||||||
|
.include "graphics_map/tfv_backgrounds.inc"
|
Loading…
Reference in New Issue
Block a user