sb: work on cliff
This commit is contained in:
parent
82fa0203b3
commit
bee32d7ab1
|
@ -12,7 +12,7 @@ all: sb.dsk
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
sb.dsk: QBOOT QLOAD TITLE DUCK_POND ROOF ASPLODE BACK_OFF TARGET CLIFF RAT
|
sb.dsk: QBOOT QLOAD TITLE DUCK_POND ROOF ASPLODE BACK_OFF TARGET ./cliff/CLIFF RAT
|
||||||
cp $(EMPTY_DISK) sb.dsk
|
cp $(EMPTY_DISK) sb.dsk
|
||||||
$(DOS33_RAW) sb.dsk 0 0 QBOOT 0 1
|
$(DOS33_RAW) sb.dsk 0 0 QBOOT 0 1
|
||||||
$(DOS33_RAW) sb.dsk 0 2 QBOOT 1 1
|
$(DOS33_RAW) sb.dsk 0 2 QBOOT 1 1
|
||||||
|
@ -23,7 +23,7 @@ sb.dsk: QBOOT QLOAD TITLE DUCK_POND ROOF ASPLODE BACK_OFF TARGET CLIFF RAT
|
||||||
$(DOS33_RAW) sb.dsk 10 0 ROOF 0 0
|
$(DOS33_RAW) sb.dsk 10 0 ROOF 0 0
|
||||||
$(DOS33_RAW) sb.dsk 15 0 ASPLODE 0 0
|
$(DOS33_RAW) sb.dsk 15 0 ASPLODE 0 0
|
||||||
$(DOS33_RAW) sb.dsk 20 0 TARGET 0 0
|
$(DOS33_RAW) sb.dsk 20 0 TARGET 0 0
|
||||||
$(DOS33_RAW) sb.dsk 25 0 CLIFF 0 0
|
$(DOS33_RAW) sb.dsk 25 0 ./cliff/CLIFF 0 0
|
||||||
$(DOS33_RAW) sb.dsk 30 0 RAT 0 0
|
$(DOS33_RAW) sb.dsk 30 0 RAT 0 0
|
||||||
$(DOS33_RAW) sb.dsk 32 0 BACK_OFF 0 0
|
$(DOS33_RAW) sb.dsk 32 0 BACK_OFF 0 0
|
||||||
|
|
||||||
|
@ -97,16 +97,19 @@ back_off.o: back_off.s zx02_optim.s \
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
CLIFF: cliff.o
|
./cliff/CLIFF:
|
||||||
ld65 -o CLIFF cliff.o -C $(LINKER_SCRIPTS)/apple2_6000.inc
|
cd cliff && make
|
||||||
|
|
||||||
cliff.o: cliff.s zx02_optim.s \
|
#CLIFF: cliff.o
|
||||||
cliff_graphics/cliff_base.hgr.zx02 \
|
# ld65 -o CLIFF cliff.o -C $(LINKER_SCRIPTS)/apple2_6000.inc
|
||||||
zp.inc hardware.inc
|
|
||||||
ca65 -o cliff.o cliff.s -l cliff.lst
|
|
||||||
|
|
||||||
cliff_graphics/cliff_base.hgr.zx02:
|
#cliff.o: cliff.s zx02_optim.s \
|
||||||
cd cliff_graphics && make
|
# cliff_graphics/cliff_base.hgr.zx02 \
|
||||||
|
# zp.inc hardware.inc
|
||||||
|
# ca65 -o cliff.o cliff.s -l cliff.lst
|
||||||
|
|
||||||
|
#cliff_graphics/cliff_base.hgr.zx02:
|
||||||
|
# cd cliff_graphics && make
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
; Cliff climb minigame from Peasant's Quest
|
|
||||||
;
|
|
||||||
; Yet Another HR project
|
|
||||||
;
|
|
||||||
; by deater (Vince Weaver) <vince@deater.net>
|
|
||||||
|
|
||||||
|
|
||||||
.include "zp.inc"
|
|
||||||
.include "hardware.inc"
|
|
||||||
|
|
||||||
|
|
||||||
hires_start:
|
|
||||||
|
|
||||||
;===================
|
|
||||||
; set graphics mode
|
|
||||||
;===================
|
|
||||||
jsr HOME
|
|
||||||
|
|
||||||
bit HIRES
|
|
||||||
bit FULLGR
|
|
||||||
bit SET_GR
|
|
||||||
bit PAGE1
|
|
||||||
|
|
||||||
|
|
||||||
;===================
|
|
||||||
; Load graphics
|
|
||||||
;===================
|
|
||||||
load_loop:
|
|
||||||
|
|
||||||
;=============================
|
|
||||||
|
|
||||||
|
|
||||||
;==========================
|
|
||||||
; Load Image
|
|
||||||
;===========================
|
|
||||||
|
|
||||||
load_image:
|
|
||||||
|
|
||||||
; size in ldsizeh:ldsizel (f1/f0)
|
|
||||||
|
|
||||||
lda #<comp_data
|
|
||||||
sta ZX0_src
|
|
||||||
lda #>comp_data
|
|
||||||
sta ZX0_src+1
|
|
||||||
|
|
||||||
|
|
||||||
lda #$20
|
|
||||||
|
|
||||||
|
|
||||||
jsr full_decomp
|
|
||||||
|
|
||||||
; rts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wait_until_keypress:
|
|
||||||
lda KEYPRESS ; 4
|
|
||||||
bpl wait_until_keypress ; 3
|
|
||||||
bit KEYRESET ; clear the keyboard buffer
|
|
||||||
|
|
||||||
which_ok:
|
|
||||||
lda #0
|
|
||||||
sta WHICH_LOAD
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.include "zx02_optim.s"
|
|
||||||
|
|
||||||
|
|
||||||
comp_data:
|
|
||||||
.incbin "cliff_graphics/cliff_base.hgr.zx02"
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
include ../../../Makefile.inc
|
||||||
|
|
||||||
|
ZX02 = ~/research/6502_compression/zx02.git/build/zx02
|
||||||
|
PNG_TO_HGR = ../../utils/hgr-utils/png2hgr
|
||||||
|
LINKER_SCRIPTS = ../../../linker_scripts
|
||||||
|
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||||
|
DOS33_RAW = ../../utils/dos33fs-utils/dos33_raw
|
||||||
|
EMPTY_DISK = ../../empty_disk/empty.dsk
|
||||||
|
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||||
|
|
||||||
|
all: CLIFF
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
CLIFF: cliff.o
|
||||||
|
ld65 -o CLIFF cliff.o -C $(LINKER_SCRIPTS)/apple2_6000.inc
|
||||||
|
|
||||||
|
cliff.o: cliff.s ../zx02_optim.s \
|
||||||
|
cliff_graphics/cliff_base.hgr.zx02 \
|
||||||
|
zp.inc hardware.inc
|
||||||
|
ca65 -o cliff.o cliff.s -l cliff.lst
|
||||||
|
|
||||||
|
cliff_graphics/cliff_base.hgr.zx02:
|
||||||
|
cd cliff_graphics && make
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.lst *.o CLIFF
|
||||||
|
cd cliff_graphics && make clean
|
|
@ -0,0 +1,161 @@
|
||||||
|
; Cliff climb minigame from Peasant's Quest
|
||||||
|
;
|
||||||
|
; Yet Another HR project
|
||||||
|
;
|
||||||
|
; by deater (Vince Weaver) <vince@deater.net>
|
||||||
|
|
||||||
|
|
||||||
|
.include "zp.inc"
|
||||||
|
.include "hardware.inc"
|
||||||
|
|
||||||
|
;div7_table = $400
|
||||||
|
;mod7_table = $500
|
||||||
|
;hposn_high = $600
|
||||||
|
;hposn_low = $700
|
||||||
|
|
||||||
|
div7_table = $b800
|
||||||
|
mod7_table = $b900
|
||||||
|
hposn_high = $ba00
|
||||||
|
hposn_low = $bb00
|
||||||
|
|
||||||
|
cliff_base:
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; set graphics mode
|
||||||
|
;===================
|
||||||
|
jsr HOME
|
||||||
|
|
||||||
|
bit HIRES
|
||||||
|
bit FULLGR
|
||||||
|
bit SET_GR
|
||||||
|
bit PAGE1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta LEVEL_OVER
|
||||||
|
sta FRAME
|
||||||
|
|
||||||
|
lda #10
|
||||||
|
sta PEASANT_X
|
||||||
|
lda #100
|
||||||
|
sta PEASANT_Y
|
||||||
|
|
||||||
|
jsr hgr_make_tables
|
||||||
|
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; Load graphics
|
||||||
|
;===================
|
||||||
|
|
||||||
|
lda #<priority_data
|
||||||
|
sta ZX0_src
|
||||||
|
lda #>priority_data
|
||||||
|
sta ZX0_src+1
|
||||||
|
|
||||||
|
lda #$20 ; temporarily load to $2000
|
||||||
|
|
||||||
|
jsr full_decomp
|
||||||
|
|
||||||
|
; copy to $400
|
||||||
|
|
||||||
|
jsr gr_copy_to_page1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; Load Image
|
||||||
|
;===========================
|
||||||
|
|
||||||
|
load_image:
|
||||||
|
|
||||||
|
; size in ldsizeh:ldsizel (f1/f0)
|
||||||
|
|
||||||
|
lda #<bg_data
|
||||||
|
sta ZX0_src
|
||||||
|
lda #>bg_data
|
||||||
|
sta ZX0_src+1
|
||||||
|
|
||||||
|
|
||||||
|
lda #$20
|
||||||
|
|
||||||
|
jsr full_decomp
|
||||||
|
|
||||||
|
jsr hgr_copy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
;==========================
|
||||||
|
; main loop
|
||||||
|
;==========================
|
||||||
|
;==========================
|
||||||
|
game_loop:
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; move peasant
|
||||||
|
|
||||||
|
jsr move_peasant
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; draw peasant
|
||||||
|
|
||||||
|
jsr draw_peasant
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; increment frame
|
||||||
|
|
||||||
|
inc FRAME
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; check keyboard
|
||||||
|
|
||||||
|
jsr check_keyboard
|
||||||
|
|
||||||
|
lda LEVEL_OVER
|
||||||
|
bne done_cliff
|
||||||
|
|
||||||
|
; delay
|
||||||
|
|
||||||
|
lda #200
|
||||||
|
jsr wait
|
||||||
|
|
||||||
|
jmp game_loop
|
||||||
|
|
||||||
|
|
||||||
|
done_cliff:
|
||||||
|
lda #0
|
||||||
|
sta WHICH_LOAD
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
.include "../hgr_tables.s"
|
||||||
|
|
||||||
|
.include "../zx02_optim.s"
|
||||||
|
|
||||||
|
.include "wait.s"
|
||||||
|
|
||||||
|
.include "keyboard.s"
|
||||||
|
|
||||||
|
.include "draw_peasant.s"
|
||||||
|
|
||||||
|
.include "move_peasant.s"
|
||||||
|
|
||||||
|
.include "hgr_partial_save.s"
|
||||||
|
|
||||||
|
.include "hgr_1x28_sprite_mask.s"
|
||||||
|
|
||||||
|
.include "gr_copy.s"
|
||||||
|
.include "hgr_copy.s"
|
||||||
|
|
||||||
|
.include "cliff_graphics/peasant_robe_sprites.inc"
|
||||||
|
|
||||||
|
bg_data:
|
||||||
|
.incbin "cliff_graphics/cliff_base.hgr.zx02"
|
||||||
|
|
||||||
|
priority_data:
|
||||||
|
|
||||||
|
.incbin "cliff_graphics/cliff_base_priority.zx02"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
include ../../../../Makefile.inc
|
||||||
|
|
||||||
|
ZX02 = ~/research/6502_compression/zx02.git/build/zx02 -f
|
||||||
|
PNG_TO_HGR = ../../../../utils/hgr-utils/png2hgr
|
||||||
|
PNG2GR = ../../../../utils/gr-utils/png2gr
|
||||||
|
PNG2SPRITES = ../../../../utils/gr-utils/png2sprites
|
||||||
|
HGR_SPRITE = ../../../../utils/hgr-utils/hgr_make_sprite
|
||||||
|
|
||||||
|
all: cliff_base.hgr.zx02 peasant_robe_sprites.inc \
|
||||||
|
cliff_base_priority.zx02
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
peasant_robe_sprites.inc: peasant_sprites.png
|
||||||
|
$(HGR_SPRITE) -l peasant_right1_sprite peasant_sprites.png 133 1 133 29 > peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_right1_mask peasant_sprites.png 119 1 119 29 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_right2_sprite peasant_sprites.png 133 34 133 62 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_right2_mask peasant_sprites.png 119 34 119 62 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_up1_sprite peasant_sprites.png 133 68 133 96 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_up1_mask peasant_sprites.png 119 68 119 96 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_up2_sprite peasant_sprites.png 133 102 133 130 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_up2_mask peasant_sprites.png 119 102 119 130 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_left1_sprite peasant_sprites.png 182 1 188 29 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_left1_mask peasant_sprites.png 168 1 174 29 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_left2_sprite peasant_sprites.png 182 34 188 62 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_left2_mask peasant_sprites.png 168 34 174 62 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_down1_sprite peasant_sprites.png 182 68 188 96 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_down1_mask peasant_sprites.png 168 68 174 96 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_down2_sprite peasant_sprites.png 182 102 188 130 >> peasant_robe_sprites.inc
|
||||||
|
$(HGR_SPRITE) -l peasant_down2_mask peasant_sprites.png 168 102 174 130 >> peasant_robe_sprites.inc
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
cliff_base.hgr.zx02: cliff_base.hgr
|
||||||
|
$(ZX02) cliff_base.hgr cliff_base.hgr.zx02
|
||||||
|
|
||||||
|
cliff_base.hgr: cliff_base.png
|
||||||
|
$(PNG_TO_HGR) cliff_base.png > cliff_base.hgr
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
cliff_base_priority.zx02: cliff_base_priority.gr
|
||||||
|
$(ZX02) -f cliff_base_priority.gr cliff_base_priority.zx02
|
||||||
|
|
||||||
|
cliff_base_priority.gr: cliff_base_priority.png
|
||||||
|
$(PNG2GR) cliff_base_priority.png cliff_base_priority.gr
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o *.zx02 *.lst peasant_robe_sprites.inc
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 973 B |
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
|
@ -0,0 +1,116 @@
|
||||||
|
|
||||||
|
;============================
|
||||||
|
; draw peasant
|
||||||
|
;============================
|
||||||
|
draw_peasant:
|
||||||
|
|
||||||
|
; skip if room over, as otherwise we'll draw at the
|
||||||
|
; wrong edge of screen
|
||||||
|
|
||||||
|
lda LEVEL_OVER
|
||||||
|
bne done_draw_peasant
|
||||||
|
|
||||||
|
lda PEASANT_X
|
||||||
|
sta CURSOR_X
|
||||||
|
lda PEASANT_Y
|
||||||
|
sta CURSOR_Y
|
||||||
|
|
||||||
|
lda PEASANT_DIR
|
||||||
|
cmp #PEASANT_DIR_RIGHT
|
||||||
|
beq peasant_right
|
||||||
|
cmp #PEASANT_DIR_LEFT
|
||||||
|
beq peasant_left
|
||||||
|
cmp #PEASANT_DIR_DOWN
|
||||||
|
beq peasant_down
|
||||||
|
|
||||||
|
; else we are up
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; up up up up
|
||||||
|
peasant_up:
|
||||||
|
|
||||||
|
lda PEASANT_Y
|
||||||
|
and #4
|
||||||
|
beq peasant_up1
|
||||||
|
|
||||||
|
peasant_up2:
|
||||||
|
lda #<peasant_up2_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_up2_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
peasant_up1:
|
||||||
|
lda #<peasant_up1_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_up1_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; down down down
|
||||||
|
peasant_down:
|
||||||
|
|
||||||
|
lda PEASANT_Y
|
||||||
|
and #4
|
||||||
|
beq peasant_down1
|
||||||
|
|
||||||
|
peasant_down2:
|
||||||
|
lda #<peasant_down2_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_down2_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
peasant_down1:
|
||||||
|
lda #<peasant_down1_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_down1_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; left left left
|
||||||
|
|
||||||
|
peasant_left:
|
||||||
|
lda CURSOR_X
|
||||||
|
and #1
|
||||||
|
bne draw_left1
|
||||||
|
|
||||||
|
draw_left2:
|
||||||
|
lda #<peasant_left2_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_left2_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
draw_left1:
|
||||||
|
lda #<peasant_left1_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_left1_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
|
||||||
|
peasant_right:
|
||||||
|
lda CURSOR_X
|
||||||
|
and #1
|
||||||
|
bne draw_right1
|
||||||
|
|
||||||
|
draw_right2:
|
||||||
|
lda #<peasant_right2_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_right2_sprite
|
||||||
|
jmp done_pick_draw
|
||||||
|
|
||||||
|
draw_right1:
|
||||||
|
lda #<peasant_right1_sprite
|
||||||
|
sta INL
|
||||||
|
lda #>peasant_right1_sprite
|
||||||
|
|
||||||
|
done_pick_draw:
|
||||||
|
sta INH
|
||||||
|
|
||||||
|
jsr hgr_draw_sprite_1x28
|
||||||
|
|
||||||
|
done_draw_peasant:
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;.include "sprites/peasant_sprites.inc"
|
||||||
|
;.include "sprites/peasant_robe_sprites.inc"
|
|
@ -0,0 +1,39 @@
|
||||||
|
;=========================================================
|
||||||
|
; gr_copy_to_page1, 40x48 version
|
||||||
|
;=========================================================
|
||||||
|
; copy $2000 to $400, careful to avoid screen holes
|
||||||
|
|
||||||
|
gr_copy_to_page1:
|
||||||
|
|
||||||
|
ldy #119 ; for early ones, copy 120 bytes ; 2
|
||||||
|
|
||||||
|
gr_copy_line:
|
||||||
|
lda $2000,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $400,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2080,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $480,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2100,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $500,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2180,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $580,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2200,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $600,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2280,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $680,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2300,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $700,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
lda $2380,Y ; load a byte (self modified) ; 4
|
||||||
|
sta $780,Y ; store a byte (self modified) ; 5
|
||||||
|
|
||||||
|
dey ; decrement pointer ; 2
|
||||||
|
bpl gr_copy_line ; ; 2nt/3
|
||||||
|
|
||||||
|
rts ; 6
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
gr_offsets:
|
||||||
|
.word $400,$480,$500,$580,$600,$680,$700,$780
|
||||||
|
.word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8
|
||||||
|
.word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
; HARDWARE LOCATIONS
|
||||||
|
|
||||||
|
KEYPRESS = $C000
|
||||||
|
KEYRESET = $C010
|
||||||
|
|
||||||
|
; SOFT SWITCHES
|
||||||
|
CLR80COL = $C000 ; PAGE1/PAGE1 normal
|
||||||
|
SET80COL = $C001 ; PAGE1/PAGE2 switches PAGE1 in Aux instead
|
||||||
|
EIGHTYCOLOFF = $C00C
|
||||||
|
EIGHTYCOLON = $C00D
|
||||||
|
TBCOLOR = $C022 ; IIgs text foreground / background colors
|
||||||
|
NEWVIDEO = $C029 ; IIgs graphics modes
|
||||||
|
SPEAKER = $C030
|
||||||
|
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color
|
||||||
|
SET_GR = $C050
|
||||||
|
SET_TEXT = $C051
|
||||||
|
FULLGR = $C052
|
||||||
|
TEXTGR = $C053
|
||||||
|
PAGE1 = $C054
|
||||||
|
PAGE2 = $C055
|
||||||
|
LORES = $C056 ; Enable LORES graphics
|
||||||
|
HIRES = $C057 ; Enable HIRES graphics
|
||||||
|
AN3 = $C05E ; Annunciator 3
|
||||||
|
|
||||||
|
PADDLE_BUTTON0 = $C061
|
||||||
|
PADDL0 = $C064
|
||||||
|
PTRIG = $C070
|
||||||
|
|
||||||
|
LCBANK2 = $C083
|
||||||
|
LCBANK1 = $C08B
|
||||||
|
|
||||||
|
; APPLESOFT BASIC ROUTINES
|
||||||
|
|
||||||
|
;NORMAL = $F273
|
||||||
|
;HGR2 = $F3D8
|
||||||
|
;HGR = $F3E2
|
||||||
|
;BKGND0 = $F3F4 ; clear current page to A
|
||||||
|
;HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
||||||
|
HPLOT0 = $F457 ; plot at (Y,X), (A)
|
||||||
|
;COLOR_SHIFT = $F47E
|
||||||
|
;HLINRL = $F530 ; (X,A),(Y)
|
||||||
|
;HGLIN = $F53A ; line to (X,A),(Y)
|
||||||
|
;COLORTBL = $F6F6
|
||||||
|
|
||||||
|
|
||||||
|
; MONITOR ROUTINES
|
||||||
|
|
||||||
|
;HLINE = $F819 ; HLINE Y,$2C at A
|
||||||
|
;VLINE = $F828 ; VLINE A,$2D at Y
|
||||||
|
;CLRSCR = $F832 ; Clear low-res screen
|
||||||
|
;CLRTOP = $F836 ; clear only top of low-res screen
|
||||||
|
;SETCOL = $F864 ; COLOR=A
|
||||||
|
;ROM_TEXT2COPY = $F962 ; iigs
|
||||||
|
TEXT = $FB36 ; qboot
|
||||||
|
;TABV = $FB5B ; VTAB to A
|
||||||
|
ROM_MACHINEID = $FBB3 ; iigs
|
||||||
|
;BELL = $FBDD ; ring the bell
|
||||||
|
;BASCALC = $FBC1 ;
|
||||||
|
;VTAB = $FC22 ; VTAB to CV
|
||||||
|
HOME = $FC58 ; Clear the text screen ; qboot
|
||||||
|
;WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
|
;CROUT1 = $FD8B
|
||||||
|
;SETINV = $FE80 ; INVERSE
|
||||||
|
;SETNORM = $FE84 ; NORMAL
|
||||||
|
COUT = $FDED ; output A to screen ; qboot
|
||||||
|
COUT1 = $FDF0 ; output A to screen ; qload
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
COLOR_BLACK = 0
|
||||||
|
COLOR_RED = 1
|
||||||
|
COLOR_DARKBLUE = 2
|
||||||
|
COLOR_PURPLE = 3
|
||||||
|
COLOR_DARKGREEN = 4
|
||||||
|
COLOR_GREY = 5
|
||||||
|
COLOR_MEDIUMBLUE = 6
|
||||||
|
COLOR_LIGHTBLUE = 7
|
||||||
|
COLOR_BROWN = 8
|
||||||
|
COLOR_ORANGE = 9
|
||||||
|
COLOR_GREY2 = 10
|
||||||
|
COLOR_PINK = 11
|
||||||
|
COLOR_LIGHTGREEN = 12
|
||||||
|
COLOR_YELLOW = 13
|
||||||
|
COLOR_AQUA = 14
|
||||||
|
COLOR_WHITE = 15
|
||||||
|
|
||||||
|
COLOR_BOTH_BLACK = $00
|
||||||
|
COLOR_BOTH_RED = $11
|
||||||
|
COLOR_BOTH_DARKBLUE = $22
|
||||||
|
COLOR_BOTH_DARKGREEN = $44
|
||||||
|
COLOR_BOTH_GREY = $55
|
||||||
|
COLOR_BOTH_MEDIUMBLUE = $66
|
||||||
|
COLOR_BOTH_LIGHTBLUE = $77
|
||||||
|
COLOR_BOTH_BROWN = $88
|
||||||
|
COLOR_BOTH_ORANGE = $99
|
||||||
|
COLOR_BOTH_PINK = $BB
|
||||||
|
COLOR_BOTH_LIGHTGREEN = $CC
|
||||||
|
COLOR_BOTH_YELLOW = $DD
|
||||||
|
COLOR_BOTH_AQUA = $EE
|
||||||
|
COLOR_BOTH_WHITE = $FF
|
||||||
|
|
|
@ -0,0 +1,309 @@
|
||||||
|
;===============================================
|
||||||
|
; hgr 1x28 draw sprite, with bg mask in GR $400
|
||||||
|
;===============================================
|
||||||
|
; used primarily to draw Rather Dashing
|
||||||
|
;===============================================
|
||||||
|
;
|
||||||
|
; SPRITE in INL/INH
|
||||||
|
; Location at CURSOR_X CURSOR_Y
|
||||||
|
|
||||||
|
; for now, BG mask is only all or nothing
|
||||||
|
; so we just skip drawing if behind
|
||||||
|
|
||||||
|
; sprite AT INL/INH
|
||||||
|
; mask at INL/INH + 28
|
||||||
|
|
||||||
|
hgr_draw_sprite_1x28:
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta MASK_COUNTDOWN
|
||||||
|
|
||||||
|
; calculate peasant priority
|
||||||
|
; based on head
|
||||||
|
|
||||||
|
lda PEASANT_Y
|
||||||
|
sec
|
||||||
|
sbc #48 ; Y=48
|
||||||
|
lsr ; div by 8
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc #2
|
||||||
|
sta PEASANT_PRIORITY
|
||||||
|
|
||||||
|
; set up sprite pointers
|
||||||
|
lda INL
|
||||||
|
sta h728_smc1+1
|
||||||
|
lda INH
|
||||||
|
sta h728_smc1+2
|
||||||
|
|
||||||
|
; set up mask pointers
|
||||||
|
clc
|
||||||
|
lda INL
|
||||||
|
adc #28
|
||||||
|
sta h728_smc3+1
|
||||||
|
lda INH
|
||||||
|
adc #0
|
||||||
|
sta h728_smc3+2
|
||||||
|
|
||||||
|
ldx #0 ; X is row counter
|
||||||
|
hgr_1x28_sprite_yloop:
|
||||||
|
lda MASK_COUNTDOWN
|
||||||
|
and #$3 ; only update every 4th
|
||||||
|
bne mask_good
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha ; save X
|
||||||
|
|
||||||
|
; recalculate mask
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
adc CURSOR_Y
|
||||||
|
tax
|
||||||
|
ldy CURSOR_X
|
||||||
|
jsr update_bg_mask
|
||||||
|
|
||||||
|
|
||||||
|
pla ; restore X
|
||||||
|
tax
|
||||||
|
|
||||||
|
mask_good:
|
||||||
|
lda MASK
|
||||||
|
bne draw_sprite_skip
|
||||||
|
|
||||||
|
|
||||||
|
txa ; X is current row
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc CURSOR_Y ; add in cursor_y
|
||||||
|
|
||||||
|
; calc GBASL/GBASH
|
||||||
|
|
||||||
|
tay ; get output ROW into GBASL/H
|
||||||
|
lda hposn_low,Y
|
||||||
|
sta GBASL
|
||||||
|
lda hposn_high,Y
|
||||||
|
sta GBASH
|
||||||
|
|
||||||
|
ldy CURSOR_X
|
||||||
|
|
||||||
|
lda (GBASL),Y ; load background
|
||||||
|
h728_smc3:
|
||||||
|
and $d000,X ; mask with sprite mask
|
||||||
|
h728_smc1:
|
||||||
|
ora $d000,X ; or in sprite
|
||||||
|
sta (GBASL),Y ; store out
|
||||||
|
|
||||||
|
|
||||||
|
draw_sprite_skip:
|
||||||
|
|
||||||
|
inc MASK_COUNTDOWN
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #28
|
||||||
|
bne hgr_1x28_sprite_yloop
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.if 0
|
||||||
|
;======================
|
||||||
|
; save bg 1x28
|
||||||
|
;======================
|
||||||
|
|
||||||
|
bsave_bg_1x28:
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
save_yloop:
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc CURSOR_Y
|
||||||
|
|
||||||
|
|
||||||
|
; calc GBASL/GBASH
|
||||||
|
|
||||||
|
tax
|
||||||
|
lda hposn_low,X
|
||||||
|
sta GBASL
|
||||||
|
lda hposn_high,X
|
||||||
|
sta GBASH
|
||||||
|
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
|
||||||
|
ldy CURSOR_X
|
||||||
|
|
||||||
|
lda (GBASL),Y
|
||||||
|
sta save_sprite_1x28,X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #28
|
||||||
|
bne save_yloop
|
||||||
|
|
||||||
|
rts
|
||||||
|
.endif
|
||||||
|
|
||||||
|
;======================
|
||||||
|
; restore bg 1x28
|
||||||
|
;======================
|
||||||
|
|
||||||
|
restore_bg_1x28:
|
||||||
|
|
||||||
|
; restore bg behind peasant
|
||||||
|
|
||||||
|
; is this actually faster than using the generic version?
|
||||||
|
|
||||||
|
ldy CURSOR_Y ; y start point
|
||||||
|
|
||||||
|
ldx #27 ; height
|
||||||
|
|
||||||
|
restore_yloop:
|
||||||
|
; calc GBASL/GBASH using lookup table
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda hposn_low,Y
|
||||||
|
adc PEASANT_X
|
||||||
|
sta restore_page1_smc+1
|
||||||
|
sta restore_page2_smc+1
|
||||||
|
|
||||||
|
; $40 -> $20 0100 0000 -> 0010 0000
|
||||||
|
; $41 -> $21 0100 0001 -> 0010 0001
|
||||||
|
; $51 -> $31 0101 0011 -> 0101 0001
|
||||||
|
|
||||||
|
lda hposn_high,Y
|
||||||
|
sta restore_page2_smc+2
|
||||||
|
eor #$60
|
||||||
|
sta restore_page1_smc+2
|
||||||
|
|
||||||
|
restore_page1_smc:
|
||||||
|
lda $DDDD
|
||||||
|
restore_page2_smc:
|
||||||
|
sta $DDDD
|
||||||
|
|
||||||
|
iny
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl restore_yloop
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; update_bg_mask
|
||||||
|
;===================
|
||||||
|
; newx/7 in Y
|
||||||
|
; newy in X
|
||||||
|
; updates MASK
|
||||||
|
update_bg_mask:
|
||||||
|
|
||||||
|
; rrrr rtii top 5 bits row, bit 2 top/bottom
|
||||||
|
|
||||||
|
sty xsave
|
||||||
|
mask_try_again:
|
||||||
|
stx ysave
|
||||||
|
|
||||||
|
txa
|
||||||
|
and #$04 ; see if odd/even
|
||||||
|
beq bg_mask_even
|
||||||
|
|
||||||
|
bg_mask_odd:
|
||||||
|
lda #$f0
|
||||||
|
bne bg_mask_mask ; bra
|
||||||
|
|
||||||
|
bg_mask_even:
|
||||||
|
lda #$0f
|
||||||
|
bg_mask_mask:
|
||||||
|
|
||||||
|
sta MASK
|
||||||
|
|
||||||
|
txa
|
||||||
|
lsr
|
||||||
|
lsr ; need to divide by 8 then * 2
|
||||||
|
lsr ; can't just div by 4 as we need to mask bottom bit
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda gr_offsets,X
|
||||||
|
sta BASL
|
||||||
|
lda gr_offsets+1,X
|
||||||
|
sta BASH
|
||||||
|
|
||||||
|
lda (BASL),Y
|
||||||
|
|
||||||
|
ldy MASK
|
||||||
|
cpy #$f0
|
||||||
|
bne mask_bottom
|
||||||
|
mask_top:
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
jmp mask_mask_mask
|
||||||
|
mask_bottom:
|
||||||
|
and #$0f
|
||||||
|
mask_mask_mask:
|
||||||
|
sta MASK
|
||||||
|
|
||||||
|
cmp #$0 ; 0 means collision, find mask
|
||||||
|
bne mask_not_zero ; by iteratively going down till
|
||||||
|
ldx ysave ; non-zero
|
||||||
|
ldy xsave
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
jmp mask_try_again
|
||||||
|
|
||||||
|
mask_not_zero:
|
||||||
|
cmp #$f ; priority F means always on top
|
||||||
|
beq mask_true
|
||||||
|
|
||||||
|
cmp PEASANT_PRIORITY
|
||||||
|
beq mask_false ; branch less than equal
|
||||||
|
bcc mask_false ; blt
|
||||||
|
|
||||||
|
mask_true:
|
||||||
|
lda #$ff
|
||||||
|
sta MASK
|
||||||
|
rts
|
||||||
|
|
||||||
|
mask_false:
|
||||||
|
lda #$00
|
||||||
|
sta MASK
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; priorities
|
||||||
|
; 0 = collision
|
||||||
|
; 1 = bg = always draw ; Y-48
|
||||||
|
; 2 0-55
|
||||||
|
; 3 56-63 ; 8/8+2 = 3
|
||||||
|
; 4 64-71 ; 16/8+2 = 4
|
||||||
|
; 5 72-79
|
||||||
|
; 6 80-87 ; 32/8+2 = 6
|
||||||
|
; 7 88-95
|
||||||
|
; 8 96-103
|
||||||
|
; 9 104-111
|
||||||
|
; 10 112-119
|
||||||
|
; 11 120-127
|
||||||
|
; 12 128-135 ; 8
|
||||||
|
; 13 136-143
|
||||||
|
; 14 144-151
|
||||||
|
; 15 = fg = always hide
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;====================
|
||||||
|
; save area
|
||||||
|
;====================
|
||||||
|
|
||||||
|
;save_sprite_1x28:
|
||||||
|
;.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
|
||||||
|
ysave:
|
||||||
|
.byte $00
|
||||||
|
xsave:
|
||||||
|
.byte $00
|
|
@ -0,0 +1,40 @@
|
||||||
|
;=========================================================
|
||||||
|
; hgr copy from $2000 to $4000
|
||||||
|
;=========================================================
|
||||||
|
; copy $2000 to $4000
|
||||||
|
|
||||||
|
; intentionally slow for the miniblind effect
|
||||||
|
|
||||||
|
hgr_copy:
|
||||||
|
lda #0 ; blurgh
|
||||||
|
sta INL
|
||||||
|
sta OUTL
|
||||||
|
|
||||||
|
lda #$20
|
||||||
|
sta INH
|
||||||
|
lda #$40
|
||||||
|
sta OUTH
|
||||||
|
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
hgr_copy_outer:
|
||||||
|
|
||||||
|
hgr_copy_inner:
|
||||||
|
lda #1
|
||||||
|
jsr wait
|
||||||
|
|
||||||
|
lda (INL),Y
|
||||||
|
sta (OUTL),Y
|
||||||
|
iny
|
||||||
|
bne hgr_copy_inner
|
||||||
|
|
||||||
|
inc INH
|
||||||
|
inc OUTH
|
||||||
|
lda OUTH
|
||||||
|
cmp #$60
|
||||||
|
bne hgr_copy_outer
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
;=======================
|
||||||
|
; HGR Partial Save
|
||||||
|
;=======================
|
||||||
|
; loads from $40
|
||||||
|
; save to $20
|
||||||
|
; only save from row in P2 to P2+P4
|
||||||
|
.if 0
|
||||||
|
hgr_partial_save:
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda BOX_Y1
|
||||||
|
sta SAVED_Y1
|
||||||
|
|
||||||
|
ldx BOX_Y2
|
||||||
|
stx SAVED_Y2
|
||||||
|
|
||||||
|
partial_save_yloop:
|
||||||
|
|
||||||
|
lda hposn_low,X
|
||||||
|
sta psx_smc1+1
|
||||||
|
sta psx_smc2+1
|
||||||
|
|
||||||
|
lda hposn_high,X
|
||||||
|
sta psx_smc1+2
|
||||||
|
sec
|
||||||
|
sbc #$20
|
||||||
|
sta psx_smc2+2
|
||||||
|
|
||||||
|
ldy #$27
|
||||||
|
partial_save_xloop:
|
||||||
|
psx_smc1:
|
||||||
|
lda $d000,Y
|
||||||
|
psx_smc2:
|
||||||
|
sta $d000,Y
|
||||||
|
dey
|
||||||
|
bpl partial_save_xloop
|
||||||
|
|
||||||
|
dex
|
||||||
|
cpx BOX_Y1
|
||||||
|
bcs partial_save_yloop
|
||||||
|
|
||||||
|
rts
|
||||||
|
.endif
|
||||||
|
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; HGR Partial Restore
|
||||||
|
;=======================
|
||||||
|
; loads from $20
|
||||||
|
; save to $40
|
||||||
|
|
||||||
|
; restores from X = A<=to<=X
|
||||||
|
; Y = SAVED_Y1 to SAVED_Y2
|
||||||
|
|
||||||
|
hgr_partial_restore:
|
||||||
|
sta partial_restore_x1_smc+1
|
||||||
|
stx partial_restore_x2_smc+1
|
||||||
|
|
||||||
|
ldx SAVED_Y2
|
||||||
|
|
||||||
|
partial_restore_yloop:
|
||||||
|
|
||||||
|
lda hposn_low,X
|
||||||
|
sta prx_smc2+1
|
||||||
|
sta prx_smc1+1
|
||||||
|
|
||||||
|
lda hposn_high,X
|
||||||
|
sta prx_smc2+2
|
||||||
|
sec
|
||||||
|
sbc #$20
|
||||||
|
sta prx_smc1+2
|
||||||
|
|
||||||
|
partial_restore_x2_smc:
|
||||||
|
ldy #$27
|
||||||
|
partial_restore_xloop:
|
||||||
|
prx_smc1:
|
||||||
|
lda $d000,Y
|
||||||
|
prx_smc2:
|
||||||
|
sta $d000,Y
|
||||||
|
dey
|
||||||
|
partial_restore_x1_smc:
|
||||||
|
cpy #$00
|
||||||
|
bpl partial_restore_xloop
|
||||||
|
|
||||||
|
dex
|
||||||
|
cpx SAVED_Y1
|
||||||
|
bcs partial_restore_yloop ; bge
|
||||||
|
|
||||||
|
rts
|
|
@ -0,0 +1,152 @@
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; check keyboard
|
||||||
|
; for main game
|
||||||
|
;==========================
|
||||||
|
|
||||||
|
; Movement
|
||||||
|
; Note in the game, pressing a key starts walking
|
||||||
|
; To stop you have to press the same direction again
|
||||||
|
|
||||||
|
; Text
|
||||||
|
; We require ENTER/RETURN pressed before entering text
|
||||||
|
; this is mildly annoying, but lets us use
|
||||||
|
; WASD to walk. The Apple II+ doesn't have
|
||||||
|
; up or down buttons
|
||||||
|
|
||||||
|
check_keyboard:
|
||||||
|
|
||||||
|
lda KEYPRESS
|
||||||
|
bmi key_was_pressed
|
||||||
|
rts
|
||||||
|
|
||||||
|
key_was_pressed:
|
||||||
|
inc SEEDL
|
||||||
|
|
||||||
|
and #$5f ; strip off high bit and make uppercase
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; Left
|
||||||
|
;==========================
|
||||||
|
check_left:
|
||||||
|
cmp #$8
|
||||||
|
beq left_pressed
|
||||||
|
cmp #'A'
|
||||||
|
bne check_right
|
||||||
|
left_pressed: ; if peasant_moving_left, stop
|
||||||
|
; otherwise clear all movement, move left
|
||||||
|
|
||||||
|
ldx PEASANT_XADD
|
||||||
|
|
||||||
|
jsr stop_peasant
|
||||||
|
|
||||||
|
cpx #$FF ; if not left, start moving left
|
||||||
|
beq continue_left
|
||||||
|
|
||||||
|
lda #$FF ; move left
|
||||||
|
sta PEASANT_XADD
|
||||||
|
|
||||||
|
continue_left:
|
||||||
|
lda #PEASANT_DIR_LEFT
|
||||||
|
sta PEASANT_DIR
|
||||||
|
|
||||||
|
jmp done_check_keyboard
|
||||||
|
|
||||||
|
check_right:
|
||||||
|
cmp #$15
|
||||||
|
beq right_pressed
|
||||||
|
cmp #'D'
|
||||||
|
bne check_up
|
||||||
|
right_pressed:
|
||||||
|
|
||||||
|
ldx PEASANT_XADD
|
||||||
|
|
||||||
|
jsr stop_peasant
|
||||||
|
|
||||||
|
cpx #$1 ; if already right, stop
|
||||||
|
beq continue_right
|
||||||
|
|
||||||
|
lda #$1
|
||||||
|
sta PEASANT_XADD
|
||||||
|
|
||||||
|
continue_right:
|
||||||
|
lda #PEASANT_DIR_RIGHT
|
||||||
|
sta PEASANT_DIR
|
||||||
|
|
||||||
|
jmp done_check_keyboard
|
||||||
|
|
||||||
|
check_up:
|
||||||
|
cmp #'W'
|
||||||
|
beq up_pressed
|
||||||
|
cmp #$0B
|
||||||
|
bne check_down
|
||||||
|
|
||||||
|
up_pressed:
|
||||||
|
|
||||||
|
ldx PEASANT_YADD
|
||||||
|
|
||||||
|
jsr stop_peasant
|
||||||
|
|
||||||
|
cpx #$FC ; if already up, stop
|
||||||
|
beq continue_up
|
||||||
|
|
||||||
|
lda #$FC
|
||||||
|
sta PEASANT_YADD
|
||||||
|
|
||||||
|
continue_up:
|
||||||
|
|
||||||
|
lda #PEASANT_DIR_UP
|
||||||
|
sta PEASANT_DIR
|
||||||
|
|
||||||
|
|
||||||
|
jmp done_check_keyboard
|
||||||
|
|
||||||
|
check_down:
|
||||||
|
cmp #'S'
|
||||||
|
beq down_pressed
|
||||||
|
cmp #$0A
|
||||||
|
bne check_enter
|
||||||
|
|
||||||
|
down_pressed:
|
||||||
|
|
||||||
|
ldx PEASANT_YADD
|
||||||
|
|
||||||
|
jsr stop_peasant
|
||||||
|
|
||||||
|
cpx #$04 ; if already down, stop
|
||||||
|
beq continue_down
|
||||||
|
|
||||||
|
lda #$4
|
||||||
|
sta PEASANT_YADD
|
||||||
|
|
||||||
|
continue_down:
|
||||||
|
lda #PEASANT_DIR_DOWN
|
||||||
|
sta PEASANT_DIR
|
||||||
|
|
||||||
|
jmp done_check_keyboard
|
||||||
|
|
||||||
|
check_enter:
|
||||||
|
cmp #13
|
||||||
|
beq enter_pressed
|
||||||
|
cmp #' '
|
||||||
|
bne done_check_keyboard
|
||||||
|
enter_pressed:
|
||||||
|
; jsr clear_bottom
|
||||||
|
; jsr hgr_input
|
||||||
|
|
||||||
|
; jsr parse_input
|
||||||
|
|
||||||
|
; jsr clear_bottom
|
||||||
|
|
||||||
|
done_check_keyboard:
|
||||||
|
|
||||||
|
bit KEYRESET
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
stop_peasant:
|
||||||
|
lda #0
|
||||||
|
sta PEASANT_XADD
|
||||||
|
sta PEASANT_YADD
|
||||||
|
rts
|
||||||
|
|
|
@ -0,0 +1,253 @@
|
||||||
|
; Move that Peasant!
|
||||||
|
|
||||||
|
move_peasant:
|
||||||
|
|
||||||
|
; redraw peasant if moved
|
||||||
|
|
||||||
|
lda PEASANT_XADD
|
||||||
|
ora PEASANT_YADD
|
||||||
|
bne really_move_peasant
|
||||||
|
|
||||||
|
jmp peasant_the_same
|
||||||
|
|
||||||
|
really_move_peasant:
|
||||||
|
|
||||||
|
; restore bg behind peasant
|
||||||
|
|
||||||
|
jsr erase_peasant
|
||||||
|
|
||||||
|
;=========================
|
||||||
|
;=========================
|
||||||
|
; move peasant
|
||||||
|
;=========================
|
||||||
|
;=========================
|
||||||
|
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; first move in X direction
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda PEASANT_X
|
||||||
|
adc PEASANT_XADD ; A = new X
|
||||||
|
|
||||||
|
bmi peasant_x_negative ; if newx <0, handle
|
||||||
|
|
||||||
|
cmp #40
|
||||||
|
bcs peasant_x_toobig ; if newx>=40, hanfle (bge)
|
||||||
|
|
||||||
|
|
||||||
|
;======================================
|
||||||
|
; not off screen, so check if collision
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
|
tay
|
||||||
|
; FIXME: should we add YADD first, like we do in peasant_move_tiny?
|
||||||
|
|
||||||
|
ldx PEASANT_Y
|
||||||
|
jsr peasant_collide
|
||||||
|
|
||||||
|
pla
|
||||||
|
|
||||||
|
bcc do_move_peasant_y ; no X collide
|
||||||
|
|
||||||
|
;==================================
|
||||||
|
; we collided in X, so stop moving
|
||||||
|
|
||||||
|
jsr stop_peasant ; stop moving
|
||||||
|
|
||||||
|
; leave PEASANT_X same as was
|
||||||
|
lda PEASANT_X
|
||||||
|
jmp do_move_peasant_y
|
||||||
|
|
||||||
|
;============================
|
||||||
|
peasant_x_toobig:
|
||||||
|
|
||||||
|
jsr move_map_east
|
||||||
|
|
||||||
|
lda #0 ; new X location
|
||||||
|
|
||||||
|
jmp done_movex
|
||||||
|
|
||||||
|
;============================
|
||||||
|
peasant_x_negative:
|
||||||
|
|
||||||
|
jsr move_map_west
|
||||||
|
|
||||||
|
lda #39 ; new X location
|
||||||
|
|
||||||
|
jmp done_movex
|
||||||
|
|
||||||
|
; check edge of screen
|
||||||
|
done_movex:
|
||||||
|
; if we get here we changed screens
|
||||||
|
sta PEASANT_X ; update new location
|
||||||
|
jmp peasant_the_same ; skip checking for Y collision
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Move Peasant Y
|
||||||
|
do_move_peasant_y:
|
||||||
|
sta PEASANT_X
|
||||||
|
clc
|
||||||
|
lda PEASANT_Y
|
||||||
|
adc PEASANT_YADD ; newy in A
|
||||||
|
|
||||||
|
cmp #45 ; if <45 then off screen
|
||||||
|
bcc peasant_y_negative ; blt
|
||||||
|
|
||||||
|
cmp #160 ; if >=150 then off screen
|
||||||
|
bcs peasant_y_toobig ; bge
|
||||||
|
|
||||||
|
; check collide
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
|
ldy PEASANT_X
|
||||||
|
tax ; newy
|
||||||
|
jsr peasant_collide
|
||||||
|
|
||||||
|
pla
|
||||||
|
|
||||||
|
bcc done_movey ; no collide
|
||||||
|
|
||||||
|
jsr stop_peasant ; stop moving
|
||||||
|
|
||||||
|
lda PEASANT_Y ; leave same
|
||||||
|
|
||||||
|
jmp done_movey
|
||||||
|
|
||||||
|
|
||||||
|
;============================
|
||||||
|
peasant_y_toobig:
|
||||||
|
|
||||||
|
jsr move_map_south
|
||||||
|
|
||||||
|
lda #45 ; new X location
|
||||||
|
|
||||||
|
jmp done_movey
|
||||||
|
|
||||||
|
|
||||||
|
;============================
|
||||||
|
peasant_y_negative:
|
||||||
|
|
||||||
|
jsr move_map_north
|
||||||
|
|
||||||
|
lda #160 ; new X location
|
||||||
|
|
||||||
|
jmp done_movey
|
||||||
|
|
||||||
|
; check edge of screen
|
||||||
|
done_movey:
|
||||||
|
sta PEASANT_Y
|
||||||
|
|
||||||
|
; if we moved off screen, don't re-draw peasant ?
|
||||||
|
|
||||||
|
peasant_the_same:
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;===========================
|
||||||
|
; erase peasant
|
||||||
|
;===========================
|
||||||
|
|
||||||
|
; restore bg behind peasant
|
||||||
|
erase_peasant:
|
||||||
|
lda PEASANT_Y
|
||||||
|
sta SAVED_Y1
|
||||||
|
clc
|
||||||
|
adc #28
|
||||||
|
sta SAVED_Y2
|
||||||
|
|
||||||
|
ldx PEASANT_X
|
||||||
|
txa
|
||||||
|
inx
|
||||||
|
|
||||||
|
jmp hgr_partial_restore ; tail call
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; when peasants collide
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; peasant_collide
|
||||||
|
;===================
|
||||||
|
; newx/7 in Y
|
||||||
|
; newy in X
|
||||||
|
; returns C=0 if no collide
|
||||||
|
; C=1 if collide
|
||||||
|
peasant_collide:
|
||||||
|
; rrrr rtii top 5 bits row, bit 2 top/bottom
|
||||||
|
|
||||||
|
; add 28 to collide with feet
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
adc #28
|
||||||
|
tax
|
||||||
|
|
||||||
|
txa
|
||||||
|
and #$04 ; see if odd/even
|
||||||
|
beq peasant_collide_even
|
||||||
|
|
||||||
|
peasant_collide_odd:
|
||||||
|
lda #$f0
|
||||||
|
bne peasant_collide_mask ; bra
|
||||||
|
|
||||||
|
peasant_collide_even:
|
||||||
|
lda #$0f
|
||||||
|
peasant_collide_mask:
|
||||||
|
|
||||||
|
sta MASK
|
||||||
|
|
||||||
|
txa
|
||||||
|
lsr
|
||||||
|
lsr ; need to divide by 8 then * 2
|
||||||
|
lsr ; can't just div by 4 as we need to mask bottom bit
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda gr_offsets,X
|
||||||
|
sta INL
|
||||||
|
lda gr_offsets+1,X
|
||||||
|
sta INH
|
||||||
|
|
||||||
|
lda (INL),Y ; get value
|
||||||
|
|
||||||
|
and MASK
|
||||||
|
|
||||||
|
; ldy MASK
|
||||||
|
; cpy #$f0
|
||||||
|
; beq in_top
|
||||||
|
;in_bottom:
|
||||||
|
; and #$0f
|
||||||
|
; jmp done_feet
|
||||||
|
;in_top:
|
||||||
|
; lsr
|
||||||
|
; lsr
|
||||||
|
; lsr
|
||||||
|
; lsr
|
||||||
|
;done_feet:
|
||||||
|
|
||||||
|
beq collide_true ; true if color 0
|
||||||
|
;bne collide_false
|
||||||
|
|
||||||
|
collide_false:
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
collide_true:
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
move_map_east:
|
||||||
|
move_map_west:
|
||||||
|
move_map_north:
|
||||||
|
move_map_south:
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
.include "gr_offsets.s"
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
; copy of ROM wait
|
||||||
|
; because we might disable ROM
|
||||||
|
|
||||||
|
|
||||||
|
wait:
|
||||||
|
sec
|
||||||
|
wait2:
|
||||||
|
pha
|
||||||
|
wait3:
|
||||||
|
sbc #$01
|
||||||
|
bne wait3
|
||||||
|
pla
|
||||||
|
sbc #$01
|
||||||
|
bne wait2
|
||||||
|
rts
|
||||||
|
wait_end:
|
||||||
|
|
||||||
|
.assert (>wait_end - >wait) < 1 , error, "wait crosses page boundary"
|
|
@ -0,0 +1,348 @@
|
||||||
|
|
||||||
|
JS_BUTTON_STATE = $03
|
||||||
|
JOYSTICK_ENABLED= $04
|
||||||
|
SOUND_STATUS = $05
|
||||||
|
SOUND_DISABLED = $80
|
||||||
|
SOUND_IN_LC = $01 ; sound in language card
|
||||||
|
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
|
||||||
|
SOUND_SSI263 = $04 ; SSI-263 speech chip detected
|
||||||
|
MOCKINGBOARD_SLOT = $06
|
||||||
|
DISP_PAGE = $07 ; only in videlectrix intro?
|
||||||
|
DRAW_PAGE = $08
|
||||||
|
NIBCOUNT = $09
|
||||||
|
CURRENT_DRIVE = $0A
|
||||||
|
DRIVE1_DISK = $0B
|
||||||
|
DRIVE2_DISK = $0C
|
||||||
|
DRIVE1_TRACK = $0D
|
||||||
|
DRIVE2_TRACK = $0E
|
||||||
|
|
||||||
|
TEMP0 = $10
|
||||||
|
TEMP1 = $11
|
||||||
|
TEMP2 = $12
|
||||||
|
TEMP3 = $13
|
||||||
|
TEMP4 = $14
|
||||||
|
TEMP5 = $15
|
||||||
|
|
||||||
|
; zx02 code
|
||||||
|
offset = $10
|
||||||
|
offseth = $11
|
||||||
|
ZX0_src = $12
|
||||||
|
ZX0_dst = $14
|
||||||
|
ZX0_srch= $15
|
||||||
|
bitr = $16
|
||||||
|
pntr = $17
|
||||||
|
pntrh = $18
|
||||||
|
; electric duet
|
||||||
|
FREQ1 = $10
|
||||||
|
FREQ2 = $11
|
||||||
|
DURATION = $12
|
||||||
|
INSTRUMENT1 = $13
|
||||||
|
INSTRUMENT2 = $14
|
||||||
|
MADDRL = $15
|
||||||
|
MADDRH = $16
|
||||||
|
LOC4E = $4E
|
||||||
|
COUNT256 = $4F
|
||||||
|
|
||||||
|
|
||||||
|
HGR_BITS = $1C
|
||||||
|
|
||||||
|
CH = $24
|
||||||
|
CV = $25
|
||||||
|
GBASL = $26
|
||||||
|
GBASH = $27
|
||||||
|
BASL = $28
|
||||||
|
BASH = $29
|
||||||
|
MASK = $2E
|
||||||
|
MASK_COUNTDOWN = $2F
|
||||||
|
PEASANT_PRIORITY = $30
|
||||||
|
|
||||||
|
SEEDL = $4E
|
||||||
|
SEEDH = $4F
|
||||||
|
|
||||||
|
|
||||||
|
INVENTORY_MASK = $60
|
||||||
|
INVENTORY_Y = $61
|
||||||
|
|
||||||
|
CURSOR_X = $63
|
||||||
|
CURSOR_Y = $64
|
||||||
|
FRAME = $65
|
||||||
|
ALTFIRE = $66
|
||||||
|
ALTL = $67
|
||||||
|
ALTH = $68
|
||||||
|
SAVED_X = $69
|
||||||
|
PEASANT_XADD = $6A
|
||||||
|
PEASANT_YADD = $6B
|
||||||
|
LEVEL_OVER = $6C
|
||||||
|
NEW_LOCATION = $FF
|
||||||
|
NEW_FROM_DISK = $01
|
||||||
|
NEW_FROM_LOAD = $02 ; loaded from load/save menu
|
||||||
|
KERREK_SPEED = $6D
|
||||||
|
KERREK_DIRECTION= $6E ; 0 = left, 1=right
|
||||||
|
KERREK_LEFT = 0
|
||||||
|
KERREK_RIGHT = 1
|
||||||
|
|
||||||
|
|
||||||
|
SPEECH_PTRL = $70
|
||||||
|
SPEECH_PTRH = $71
|
||||||
|
|
||||||
|
; pt3 player registers
|
||||||
|
AY_REGISTERS = $70
|
||||||
|
A_FINE_TONE = $70
|
||||||
|
A_COARSE_TONE = $71
|
||||||
|
B_FINE_TONE = $72
|
||||||
|
B_COARSE_TONE = $73
|
||||||
|
C_FINE_TONE = $74
|
||||||
|
C_COARSE_TONE = $75
|
||||||
|
NOISE = $76
|
||||||
|
ENABLE = $77
|
||||||
|
PT3_MIXER_VAL = $77
|
||||||
|
A_VOLUME = $78
|
||||||
|
B_VOLUME = $79
|
||||||
|
C_VOLUME = $7A
|
||||||
|
ENVELOPE_FINE = $7B
|
||||||
|
ENVELOPE_COARSE = $7C
|
||||||
|
ENVELOPE_SHAPE = $7D
|
||||||
|
PATTERN_L = $7E
|
||||||
|
PATTERN_H = $7F
|
||||||
|
|
||||||
|
|
||||||
|
; rest of pt3_player
|
||||||
|
PT3_TEMP = $80
|
||||||
|
ORNAMENT_L = $81
|
||||||
|
ORNAMENT_H = $82
|
||||||
|
SAMPLE_L = $83
|
||||||
|
SAMPLE_H = $84
|
||||||
|
LOOP = $85
|
||||||
|
MB_VALUE = $86
|
||||||
|
MB_ADDR_L = $87
|
||||||
|
MB_ADDR_H = $88
|
||||||
|
DONE_PLAYING = $89
|
||||||
|
DONE_SONG = $8A
|
||||||
|
APPLEII_MODEL = $8B
|
||||||
|
|
||||||
|
ESC_PRESSED = $8C
|
||||||
|
PREVIOUS_LOCATION= $8D
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; savegame state
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
WHICH_LOAD = $90
|
||||||
|
PEASANT_X = $91
|
||||||
|
PEASANT_Y = $92
|
||||||
|
PEASANT_DIR = $93
|
||||||
|
PEASANT_DIR_UP = 0
|
||||||
|
PEASANT_DIR_RIGHT = 1
|
||||||
|
PEASANT_DIR_LEFT = 2
|
||||||
|
PEASANT_DIR_DOWN = 3
|
||||||
|
|
||||||
|
GAME_STATE_3 = $94
|
||||||
|
; SWORD_THROWN = $01
|
||||||
|
|
||||||
|
MAP_LOCATION = $96
|
||||||
|
|
||||||
|
GAME_STATE_0 = $97
|
||||||
|
BABY_IN_WELL=$01
|
||||||
|
BUCKET_DOWN_WELL=$02
|
||||||
|
TALKED_TO_MENDELEV=$04
|
||||||
|
HALDO_TO_DONGOLEV=$08
|
||||||
|
ARROW_BEATEN=$10
|
||||||
|
GARY_SCARED=$20
|
||||||
|
LADY_GONE=$40
|
||||||
|
TRINKET_GIVEN=$80
|
||||||
|
GAME_STATE_1 = $98
|
||||||
|
FISH_FED=$01 ; also implies man gone and inn open
|
||||||
|
PUDDLE_WET=$02
|
||||||
|
IN_HAY_BALE=$04
|
||||||
|
ALREADY_GOT_ROOM=$08
|
||||||
|
RAINING=$10
|
||||||
|
NIGHT=$20
|
||||||
|
POT_ON_HEAD=$40
|
||||||
|
WEARING_ROBE=$80
|
||||||
|
GAME_STATE_2 = $99
|
||||||
|
ON_FIRE = $01
|
||||||
|
COTTAGE_ROCK_MOVED=$02
|
||||||
|
KNUCKLES_BLEED=$04
|
||||||
|
DRESSER_OPEN=$08
|
||||||
|
TALKED_TO_KNIGHT = $10
|
||||||
|
COVERED_IN_MUD = $20
|
||||||
|
GOT_MUDDY_ALREADY = $40
|
||||||
|
GREASE_ON_HEAD =$80
|
||||||
|
|
||||||
|
NED_STATUS = $9A
|
||||||
|
; 0 = hiding (no increment)
|
||||||
|
; 1..127 = count up to appearing
|
||||||
|
; 126,255 = hands on tree
|
||||||
|
; 127,254 = half out
|
||||||
|
; 128 = out (no increment)
|
||||||
|
|
||||||
|
BUSH_STATUS = $9B ; status of bush search
|
||||||
|
BUSH_1_SEARCHED = $01
|
||||||
|
BUSH_2_SEARCHED = $02
|
||||||
|
BUSH_3_SEARCHED = $04
|
||||||
|
BUSH_4_SEARCHED = $08
|
||||||
|
|
||||||
|
KERREK_STATE = $9C
|
||||||
|
KERREK_ALIVE = $00
|
||||||
|
KERREK_DEAD = $01
|
||||||
|
KERREK_DECOMPOSING = $02
|
||||||
|
KERREK_SKELETON = $03
|
||||||
|
KERREK_ROW1 = $40
|
||||||
|
KERREK_ONSCREEN = $80
|
||||||
|
|
||||||
|
ARROW_SCORE = $9D ; bottom=score, top=random num needed 3-5?
|
||||||
|
ARROW_DONE = $80
|
||||||
|
|
||||||
|
SCORE_HUNDREDS = $9E
|
||||||
|
SCORE_TENSONES = $9F
|
||||||
|
|
||||||
|
INVENTORY_1 = $A0
|
||||||
|
INV1_ARROW = $01
|
||||||
|
INV1_BABY = $02
|
||||||
|
INV1_KERREK_BELT = $04
|
||||||
|
INV1_CHICKEN_FEED = $08
|
||||||
|
INV1_BOW = $10
|
||||||
|
INV1_MONSTER_MASK = $20
|
||||||
|
INV1_PEBBLES = $40
|
||||||
|
INV1_PILLS = $80
|
||||||
|
|
||||||
|
INVENTORY_2 = $A1
|
||||||
|
INV2_RICHES = $01
|
||||||
|
INV2_ROBE = $02
|
||||||
|
INV2_SODA = $04
|
||||||
|
INV2_MEATBALL_SUB = $08
|
||||||
|
INV2_TRINKET = $10
|
||||||
|
INV2_TROGHELM = $20
|
||||||
|
INV2_TROGSHIELD = $40
|
||||||
|
INV2_TROGSWORD = $80
|
||||||
|
|
||||||
|
INVENTORY_3 = $A2
|
||||||
|
INV3_IMPOSSIBLE = $01
|
||||||
|
INV3_SHIRT = $02
|
||||||
|
INV3_MAP = $04
|
||||||
|
|
||||||
|
INVENTORY_1_GONE = $A3 ; had item, but now it's gone
|
||||||
|
INVENTORY_2_GONE = $A4
|
||||||
|
INVENTORY_3_GONE = $A5
|
||||||
|
KERREK_X = $A6 ; should be in save area, as we use
|
||||||
|
KERREK_Y = $A7 ; for skeleton location
|
||||||
|
|
||||||
|
VISITED_0 = $A8 ; for MAP drawing purposes
|
||||||
|
VISITED_1 = $A9
|
||||||
|
VISITED_2 = $AA
|
||||||
|
VISITED_3 = $AB
|
||||||
|
|
||||||
|
END_OF_SAVE = $AC
|
||||||
|
|
||||||
|
;=============================================
|
||||||
|
|
||||||
|
CURRENT_VERB = $B0 ; parser
|
||||||
|
CURRENT_NOUN = $B1
|
||||||
|
WORD_MATCH = $B2
|
||||||
|
|
||||||
|
INPUT_X = $C0
|
||||||
|
BOX_X1L = $C1
|
||||||
|
BOX_X1H = $C2
|
||||||
|
BOX_Y1 = $C3
|
||||||
|
BOX_X2L = $C4
|
||||||
|
BOX_X2H = $C5
|
||||||
|
BOX_Y2 = $C6
|
||||||
|
SAVED_Y1 = $C7
|
||||||
|
SAVED_Y2 = $C8
|
||||||
|
|
||||||
|
; temp for animations, etc
|
||||||
|
BABY_COUNT = $C9
|
||||||
|
PREV_X = $CA
|
||||||
|
PREV_Y = $CB
|
||||||
|
|
||||||
|
; D0-D? used by HGR?
|
||||||
|
|
||||||
|
WHICH_SLOT = $DA
|
||||||
|
CURRENT_DISK = $DC
|
||||||
|
HGR_COLOR = $E4
|
||||||
|
HGR_PAGE = $E6
|
||||||
|
|
||||||
|
P0 = $F1
|
||||||
|
P1 = $F2
|
||||||
|
P2 = $F3
|
||||||
|
P3 = $F4
|
||||||
|
P4 = $F5
|
||||||
|
P5 = $F6
|
||||||
|
|
||||||
|
|
||||||
|
INL = $FC
|
||||||
|
INH = $FD
|
||||||
|
OUTL = $FE
|
||||||
|
OUTH = $FF
|
||||||
|
|
||||||
|
; constants
|
||||||
|
|
||||||
|
LOAD_VID_LOGO = 0
|
||||||
|
LOAD_TITLE = 1
|
||||||
|
LOAD_INTRO = 2
|
||||||
|
LOAD_COPY_CHECK = 3
|
||||||
|
LOAD_PEASANT1 = 4
|
||||||
|
LOAD_PEASANT2 = 5
|
||||||
|
LOAD_PEASANT3 = 6
|
||||||
|
LOAD_PEASANT4 = 7
|
||||||
|
LOAD_TROGDOR = 8
|
||||||
|
LOAD_ENDING = 9
|
||||||
|
LOAD_MUSIC = 10
|
||||||
|
LOAD_CLIFF = 11
|
||||||
|
LOAD_GAME_OVER = 12
|
||||||
|
LOAD_INVENTORY = 13
|
||||||
|
LOAD_PARSE_INPUT= 14
|
||||||
|
LOAD_INN = 15
|
||||||
|
LOAD_INSIDE = 16
|
||||||
|
LOAD_ARCHERY = 17
|
||||||
|
LOAD_MAP = 18
|
||||||
|
|
||||||
|
LOAD_SAVE1 = 19
|
||||||
|
LOAD_SAVE2 = 20
|
||||||
|
LOAD_SAVE3 = 21
|
||||||
|
|
||||||
|
|
||||||
|
VGI_RCOLOR = P0
|
||||||
|
VGI_RX1 = P1
|
||||||
|
VGI_RY1 = P2
|
||||||
|
VGI_RXRUN = P3
|
||||||
|
VGI_RYRUN = P4
|
||||||
|
VGI_RCOLOR2 = P5 ; only for dither
|
||||||
|
COUNT = TEMP5
|
||||||
|
|
||||||
|
|
||||||
|
; LOCATIONS
|
||||||
|
LOCATION_POOR_GARY = 0
|
||||||
|
LOCATION_KERREK_1 = 1
|
||||||
|
LOCATION_OLD_WELL = 2
|
||||||
|
LOCATION_YELLOW_TREE = 3
|
||||||
|
LOCATION_WATERFALL = 4
|
||||||
|
LOCATION_HAY_BALE = 5
|
||||||
|
LOCATION_MUD_PUDDLE = 6
|
||||||
|
LOCATION_ARCHERY = 7
|
||||||
|
LOCATION_RIVER_STONE = 8
|
||||||
|
LOCATION_MOUNTAIN_PASS = 9
|
||||||
|
LOCATION_JHONKA_CAVE = 10
|
||||||
|
LOCATION_YOUR_COTTAGE = 11
|
||||||
|
LOCATION_LAKE_WEST = 12
|
||||||
|
LOCATION_LAKE_EAST = 13
|
||||||
|
LOCATION_OUTSIDE_INN = 14
|
||||||
|
LOCATION_OUTSIDE_NN = 15
|
||||||
|
LOCATION_WAVY_TREE = 16
|
||||||
|
LOCATION_KERREK_2 = 17
|
||||||
|
LOCATION_OUTSIDE_LADY = 18
|
||||||
|
LOCATION_BURN_TREES = 19
|
||||||
|
LOCATION_CLIFF_BASE = 20
|
||||||
|
LOCATION_CLIFF_HEIGHTS = 21
|
||||||
|
LOCATION_TROGDOR_OUTER = 22
|
||||||
|
LOCATION_TROGDOR_LAIR = 23
|
||||||
|
LOCATION_HIDDEN_GLEN = 24
|
||||||
|
LOCATION_INSIDE_LADY = 25
|
||||||
|
LOCATION_INSIDE_NN = 26
|
||||||
|
LOCATION_INSIDE_INN = 27
|
||||||
|
LOCATION_ARCHERY_GAME = 28
|
||||||
|
LOCATION_MAP = 29
|
||||||
|
|
||||||
|
LOCATION_EMPTY = 30
|
|
@ -1,27 +0,0 @@
|
||||||
include ../../../Makefile.inc
|
|
||||||
|
|
||||||
ZX02 = ~/research/6502_compression/zx02.git/build/zx02 -f
|
|
||||||
PNG_TO_HGR = ../../../utils/hgr-utils/png2hgr
|
|
||||||
LINKER_SCRIPTS = ../../../linker_scripts
|
|
||||||
DOS33 = ../../../utils/dos33fs-utils/dos33
|
|
||||||
EMPTY_DISK = ../../../empty_disk/empty.dsk
|
|
||||||
TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
|
|
||||||
PNG2GR = ../../../utils/gr-utils/png2gr
|
|
||||||
PNG2SPRITES = ../../../utils/gr-utils/png2sprites
|
|
||||||
HGR_SPRITE = ../../../utils/hgr-utils/hgr_make_sprite
|
|
||||||
|
|
||||||
all: cliff_base.hgr.zx02
|
|
||||||
|
|
||||||
####
|
|
||||||
|
|
||||||
cliff_base.hgr.zx02: cliff_base.hgr
|
|
||||||
$(ZX02) cliff_base.hgr cliff_base.hgr.zx02
|
|
||||||
|
|
||||||
cliff_base.hgr: cliff_base.png
|
|
||||||
$(PNG_TO_HGR) cliff_base.png > cliff_base.hgr
|
|
||||||
|
|
||||||
####
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *~ *.o *.lst
|
|
||||||
|
|
Loading…
Reference in New Issue