second: add some scrolling to thumbnail credits

This commit is contained in:
Vince Weaver 2023-11-01 11:53:16 -04:00
parent ca71d4aea3
commit 9cbb2f3c25
7 changed files with 230 additions and 16 deletions

View File

@ -242,6 +242,7 @@ music2.inc: generate_common MUSIC2
./generate_common -a 0xd000 -s mockingboard_disable_interrupt music2.lst >> music2.inc
./generate_common -a 0xd000 -s done_pt3_irq_handler music2.lst >> music2.inc
./generate_common -a 0xd000 -s PT3_LOC music2.lst >> music2.inc
./generate_common -a 0xd000 -s current_pattern_smc music2.lst >> music2.inc
./generate_common -a 0xd000 -s copy_main_aux music2.lst >> music2.inc
./generate_common -a 0xd000 -s copy_aux_main music2.lst >> music2.inc

View File

@ -71,13 +71,18 @@ DISK II
- sprite animation of ship
+ credits
+ credits (thumbnail)
- scroll logos in from right, then out to left
- scroll the text in
- smoother scroll the text in
maybe skip ever other X to avoid palette shift
properly come in from off screen
use page flipping
- smoother scrolling. Only need to scroll middle 20 bytes or so?
+ final credits
- smoother scrolling
wait on vblank?
use page flipping, alternate scrolling by two?
probably doable but don't have time
+ after-credits
RR?

View File

@ -15,6 +15,7 @@ CREDITS: credits.o
credits.o: credits.s vertical_scroll.s ../zx02_optim.s \
thumbnail_credits.s \
horiz_scroll_simple.s \
font_4am_1x8.s font_4am_1x10.s \
graphics/summary1_invert.hgr.zx02 \
../zp.inc ../hardware.inc ../qload.inc

View File

@ -9,6 +9,7 @@
.include "../zp.inc"
.include "../hardware.inc"
.include "../qload2.inc"
.include "../music2.inc"
mod7_table = $1c00
div7_table = $1d00
@ -20,6 +21,8 @@ intro_start:
; initializations
;=====================
bit KEYRESET ; clear just in case
;===================
; Load graphics
;===================
@ -139,6 +142,8 @@ no_update_message:
.include "thumbnail_credits.s"
.include "../irq_wait.s"
summary1_data:
.incbin "graphics/summary1_invert.hgr.zx02"

View File

@ -0,0 +1,142 @@
;====================================
; Note: just does top part of screen
;====================================
; 16 ... 80
; just one step
; always scrolls in black
horiz_scroll_left:
;scroll_left_loop:
;
; lda #0
; sta COUNT
scroll_left_outer_outer_loop:
ldx #80 ; end is 80
scroll_left_outer_loop:
lda hposn_high,X
clc
adc DRAW_PAGE
sta hsl_smc1+2
sta hsl_smc2+2
sta hsl_smc4+2
; eor #$60
; sta hsl_smc3+2
lda hposn_low,X
sta hsl_smc2+1
sta hsl_smc4+1
sta hsl_smc1+1
inc hsl_smc1+1
; clc
; adc COUNT
; sta hsl_smc3+1
ldy #0
scroll_left_inner_loop:
hsl_smc1:
lda $2000+1,Y
hsl_smc2:
sta $2000,Y
iny
cpy #39
bne scroll_left_inner_loop
;hsl_smc3:
; lda $4000
lda #$0 ; always scroll in black
hsl_smc4:
sta $2000,Y
dex
cpx #15 ; end at 16
bne scroll_left_outer_loop
; inc COUNT
; lda COUNT
; cmp #39
; bne scroll_left_outer_outer_loop
rts
;====================================
; Note: just does top part of screen
;====================================
; 16 ... 80
; just one step
; always scrolls in black
horiz_scroll_right:
;scroll_right_loop:
;
; lda #0
; sta COUNT
scroll_right_outer_outer_loop:
ldx #80 ; end is 80
scroll_right_outer_loop:
lda hposn_high,X
clc
adc DRAW_PAGE
sta hsr_smc1+2
sta hsr_smc2+2
sta hsr_smc4+2
lda hposn_low,X
sta hsr_smc1+1
sta hsr_smc4+1
sta hsr_smc2+1
inc hsr_smc2+1
ldy #38
scroll_right_inner_loop:
hsr_smc1:
lda $2000,Y
hsr_smc2:
sta $2000+1,Y
dey
bpl scroll_right_inner_loop
lda #$0 ; always scroll in black
iny
hsr_smc4:
sta $2000,Y
dex
cpx #15 ; end at 16
bne scroll_right_outer_loop
; inc COUNT
; lda COUNT
; cmp #39
; bne scroll_right_outer_outer_loop
rts

View File

@ -42,8 +42,8 @@ thumbnail_credits:
credits_logo_outer_outer:
lda #200 ; 4 seconds? actual is 5ish
sta IRQ_COUNTDOWN
; lda #200 ; 4 seconds? actual is 5ish
; sta IRQ_COUNTDOWN
lda DRAW_PAGE
and #$20
@ -85,10 +85,12 @@ cloo_write_text:
tax
pla
;========================
;========================
; draw the thumbnail
; TODO: scroll it in
;========================
;========================
ldx COUNT ; patch the source offsets
lda logo_x_offsets,X
@ -101,15 +103,15 @@ credits_logo_outer:
; setup output pointer
lda hposn_low+16,X ; adjust X
lda hposn_low+16,X ; adjust Y position
clc
adc #15 ; center on screen
adc #0 ; (was 15 to center on screen)
sta OUTL
; setup high
clc
lda hposn_high+16,X
lda hposn_high+16,X ; adjust Y position
adc DRAW_PAGE
sta OUTH
@ -159,15 +161,67 @@ cloo_disp_page1:
cloo_done_flip:
; done drawing...
;======================================
; scroll it right
;======================================
lda DRAW_PAGE
eor #$20
sta DRAW_PAGE ; do it on visible page
lda #0
sta SCROLL_X
scroll_right_loop:
jsr horiz_scroll_right
; sleep?
inc SCROLL_X
lda SCROLL_X
cmp #15
bne scroll_right_loop
;======================================
; pause a bit
;======================================
lda #3
jsr wait_seconds
;======================================
; scroll it left
;======================================
lda #0
sta SCROLL_X
scroll_left_loop:
jsr horiz_scroll_left
; sleep?
inc SCROLL_X
lda SCROLL_X
cmp #25
bne scroll_left_loop
; flip back to off-screen
lda DRAW_PAGE
eor #$20
sta DRAW_PAGE
;======================================
; wait until IRQ countdown or keypress
;======================================
;cloo_check_again:
; lda KEYPRESS
; bmi cloo_check_done
cloo_check_again:
lda KEYPRESS
bmi cloo_check_done
lda IRQ_COUNTDOWN
bne cloo_check_again
; lda IRQ_COUNTDOWN
; bne cloo_check_again
cloo_check_done:
bit KEYRESET
@ -198,6 +252,9 @@ done_credits_logo:
rts
.include "horiz_scroll_simple.s"
logo_y_offsets:
.byte 0,0,0,0
.byte 64,64,64,64

View File

@ -184,6 +184,9 @@ SCALE_I = $F8
SCALE_F = $F9
ANGLE = $FA
; credits
SCROLL_X = $F0
;==============================================
; $FC-$FF we use for in/out pointers
;==============================================