dos33fsprogs/tfv/tfv_worldmap.s

351 lines
4.8 KiB
ArmAsm
Raw Normal View History

2017-09-13 02:39:50 +00:00
ODD EQU $7B
DIRECTION EQU $7C
REFRESH EQU $7D
2017-11-16 20:37:22 +00:00
ON_BIRD EQU $7E
MOVED EQU $7F
STEPS EQU $80
TFV_X EQU $81
TFV_Y EQU $82
NEWX EQU $83
NEWY EQU $84
2017-11-16 21:08:46 +00:00
MAP_X EQU $85
2017-09-13 01:56:11 +00:00
2017-09-13 02:39:50 +00:00
; In Town
; Puzzle Room
; Get through office
; Have to run away? What happens if die? No save game? Code?
; Construct the LED circuit
; Zaps through cloud
; Susie joins your party
; Final Battle
; Play music, lightning effects?
; TFV only hit for one damage, susie for 100
; Map
;
; 0 1 2 3
2017-09-13 01:56:11 +00:00
;
2017-09-13 02:39:50 +00:00
; 0 BEACH ARCTIC ARCTIC BELAIR
; TREE MOUNATIN
;
; 1 BEACH LANDING GRASS FOREST
; PINETREE MOUNTAIN
;
; 2 BEACH GRASS GRASS FOREST
; PALMTREE MOUNTAIN
;
; 3 BEACH DESERT COLLEGE BEACH
; CACTUS PARK
2017-09-13 01:56:11 +00:00
world_map:
2017-09-13 02:39:50 +00:00
;===================
; Clear screen/pages
;===================
jsr clear_screens
jsr set_gr_page0
;===============
; Init Variables
;===============
lda #$0
sta ODD
2017-11-16 20:37:22 +00:00
sta ON_BIRD
2017-09-13 02:39:50 +00:00
lda #$1
sta DIRECTION
sta REFRESH
2017-11-16 21:08:46 +00:00
lda #5
sta MAP_X
2017-11-16 20:37:22 +00:00
lda #15
sta TFV_X
lda #20
sta TFV_Y
;==================
; MAIN LOOP
;==================
2017-09-13 02:39:50 +00:00
worldmap_loop:
2017-11-16 20:37:22 +00:00
lda #$0
sta MOVED
lda TFV_X
sta NEWX
lda TFV_Y
sta NEWY
2017-09-13 02:39:50 +00:00
worldmap_keyboard:
2017-11-16 20:37:22 +00:00
jsr get_key ; get keypress
2017-09-13 02:39:50 +00:00
lda LASTKEY
2017-11-16 20:37:22 +00:00
worldmap_handle_q:
cmp #('Q') ; if quit, then return
bne worldmap_handle_up
2017-09-13 02:39:50 +00:00
rts
2017-11-16 20:37:22 +00:00
worldmap_handle_up:
cmp #('W')
bne worldmap_handle_down
dec NEWY
dec NEWY
inc MOVED
worldmap_handle_down:
cmp #('S')
bne worldmap_handle_left
inc NEWY
inc NEWY
inc MOVED
worldmap_handle_left:
cmp #('A')
bne worldmap_handle_right
2017-11-16 21:08:46 +00:00
lda DIRECTION ; 0=left, 1=right
beq go_left ; if (0) already left, keep going
left_turn:
lda #0 ; change direction to left
sta DIRECTION
sta ODD ; stand (not walk) if changing
beq worldmap_handle_right ; skip ahead
go_left:
dec NEWX ; decrement x
inc MOVED ; we moved
2017-11-16 20:37:22 +00:00
worldmap_handle_right:
cmp #('D')
bne worldmap_handle_enter
2017-11-16 21:08:46 +00:00
lda DIRECTION ; 0=left, 1=right
bne go_right ; if (1) already right, keep going
right_turn:
lda #1 ; change direction to right
sta DIRECTION
lda #0 ; change to standing
sta ODD
beq worldmap_handle_enter ; skip ahead
go_right:
inc NEWX ; increment X
inc MOVED
2017-11-16 20:37:22 +00:00
worldmap_handle_enter:
cmp #13
bne worldmap_handle_help
; jsr city_map
inc REFRESH
worldmap_handle_help:
cmp #('H')
bne worldmap_handle_battle
; jsr print_help
worldmap_handle_battle:
cmp #('B')
bne worldmap_handle_info
; jsr do_battle
inc REFRESH
worldmap_handle_info:
cmp #('I')
bne worldmap_handle_map
; jsr print_info
inc REFRESH
worldmap_handle_map:
cmp #('M')
bne worldmap_done_keyboard
; jsr show_map
inc REFRESH
worldmap_done_keyboard:
;===========================
; Handle Movement
;===========================
lda MOVED
2017-11-16 21:08:46 +00:00
beq worldmap_refresh_screen
2017-11-16 20:37:22 +00:00
inc ODD
inc STEPS
; Handle Collision Detection
2017-11-16 21:08:46 +00:00
lda NEWX
sta TFV_X
lda NEWY
sta TFV_Y
check_high_x:
lda TFV_X
cmp #36
bmi check_low_x
; Off screen to right
lda #0
sta TFV_X
inc MAP_X
inc REFRESH
bne check_high_y
check_low_x:
cmp #0
2017-09-13 02:39:50 +00:00
2017-11-16 21:08:46 +00:00
check_high_y:
check_low_y:
2017-11-16 20:37:22 +00:00
;============================
; Refresh screen if needed
;============================
worldmap_refresh_screen:
2017-09-13 02:39:50 +00:00
lda REFRESH
beq worldmap_copy_background
jsr load_map_bg
dec REFRESH
worldmap_copy_background:
2017-11-16 20:37:22 +00:00
; Copy background
2017-09-13 02:39:50 +00:00
jsr gr_copy_to_current
2017-11-16 20:37:22 +00:00
; Handle ground scatter
; Draw background trees
; Draw TFV
2017-11-16 21:08:46 +00:00
clc
2017-11-16 20:37:22 +00:00
lda #1
bit ODD
bne standing
walking:
2017-11-16 21:08:46 +00:00
lda DIRECTION ; 0=left, 1=right
bne walking_right ; if(!0) walk right
2017-11-16 20:37:22 +00:00
walking_left:
lda #>tfv_walk_left
sta INH
lda #<tfv_walk_left
sta INL
2017-11-16 21:08:46 +00:00
bcc done_walking
2017-11-16 20:37:22 +00:00
walking_right:
lda #>tfv_walk_right
sta INH
lda #<tfv_walk_right
sta INL
2017-11-16 21:08:46 +00:00
bcc done_walking
2017-11-16 20:37:22 +00:00
standing:
lda DIRECTION
bne standing_right
standing_left:
lda #>tfv_stand_left
sta INH
lda #<tfv_stand_left
sta INL
2017-11-16 21:08:46 +00:00
bcc done_walking
2017-11-16 20:37:22 +00:00
standing_right:
lda #>tfv_stand_right
sta INH
lda #<tfv_stand_right
sta INL
done_walking:
lda TFV_X
sta XPOS
lda TFV_Y
sta YPOS
jsr put_sprite
; if (direction==-1) {
; if (odd) grsim_put_sprite(tfv_walk_left,tfv_x,tfv_y);
; else grsim_put_sprite(tfv_stand_left,tfv_x,tfv_y);
; }
; if (direction==1) {
; if (odd) grsim_put_sprite(tfv_walk_right,tfv_x,tfv_y);
; else grsim_put_sprite(tfv_stand_right,tfv_x,tfv_y);
; }
; Draw foreground scatter
2017-09-13 02:39:50 +00:00
jsr page_flip
2017-11-16 20:37:22 +00:00
;============
; Update Time
;============
; if (steps>=60) {
; steps=0;
; time_minutes++;
; if (time_minutes>=60) {
; time_hours++;
; time_minutes=0;
; }
; }
2017-09-13 02:39:50 +00:00
jmp worldmap_loop
2017-11-16 20:37:22 +00:00
2017-09-13 02:39:50 +00:00
load_map_bg:
lda #$0c
sta BASH
lda #$00
sta BASL ; load image off-screen 0xc00
lda #>(landing_rle)
sta GBASH
lda #<(landing_rle)
sta GBASL
jsr load_rle_gr
;; grsim_unrle(landing_rle,0x800);
rts