diff --git a/megademo/Makefile b/megademo/Makefile index 32cd4d8d..10433dc1 100644 --- a/megademo/Makefile +++ b/megademo/Makefile @@ -30,6 +30,7 @@ megademo.o: megademo.s \ starring_people.s fs.inc FS_HGRC.BIN.lz4 deater.inc DEATER_HGRC.BIN.lz4\ check_email.s email_40_96.inc \ bird_mountain.s \ + takeoff.s takeoff.inc takeoff.img.lz4 \ mode7.s \ fireworks.s fw_background.inc fw_state_machine.s fw.s \ hgr.s random16.s move_letters.s @@ -62,6 +63,16 @@ starring3.img: ./starring_3_hgr.png ../hgr-utils/png2hgr starring_3_hgr.png > starring3.img +#### +takeoff.inc: ./takeoff.png + $(PNG_TO_RLE) asm ./takeoff.png takeoff > takeoff.inc + +takeoff.img.lz4: takeoff.img + lz4 -f -16 takeoff.img + +takeoff.img: takeoff_hgr.png + ../hgr-utils/png2hgr takeoff_hgr.png > takeoff.img + #### fs.inc: ./fs.png diff --git a/megademo/TODO b/megademo/TODO index 6c2436de..8cd11878 100644 --- a/megademo/TODO +++ b/megademo/TODO @@ -1,65 +1,70 @@ Overall: fix off-by-one line vaporlock disk loader? + Load with HGR C64 at offset 0x2000 and then straight to 0x4000 + Trim the last 8 bytes off of all the lz4 files Music: compose music fit in RAM -c64_opener: +Timing: + Except for fireworks, 15s for each? 150s = 2min 30s + +0: c64_opener: get curtain-opening effect working add text to background -falling_apple: +1: falling_apple: make it fall? some sort of wipe? -starring: +2: starring: complete graphics figure out png2hgr off-by-one error? add wipe effect with tengwar: just draw 4 bytes yellow, 4 bytes from scroll buffer Add Susie starring role? -e-mail: +3: e-mail: Update to proper text Add susie? -leave house: +4: leave house: Green, a house on left? fence, bird? have mountain in background? -running bird: +5: running bird: run to middle of screen, then have everything start moving? update text -waterfall: +6: waterfall: finish packing down a bit -arrival at ship +7: arrival at ship top HGR, bottom gr close door flames going tree goes from big to small, horizon drops? -mode7: +8: mode7: change path change ground to night-time darkness. grey water -spacegame: +9: spacegame: saturn-like planet? raster bars? score at top? when done, blue horiz line? -arrive at frogysue: +10: arrive at frogysue: park ship on left amethys crystals? sky text/ground lgr? susie follow? haert when meet at center? -fireworks: +11: fireworks: update text diff --git a/megademo/fireworks.s b/megademo/fireworks.s index 2141e649..7646690e 100644 --- a/megademo/fireworks.s +++ b/megademo/fireworks.s @@ -3,7 +3,7 @@ ; HGR plus 40x48d page1/page2 every-1-scanline pageflip mode ; Zero Page -FRAMEBUFFER = $00 ; $00 - $0F +;FRAMEBUFFER = $00 ; $00 - $0F ;YPOS = $10 ;FRAME = $60 ;WAITING = $62 @@ -13,12 +13,12 @@ FRAMEBUFFER = $00 ; $00 - $0F ;LETTERY = $66 ;LETTERD = $67 ;LETTER = $68 -BLARGH = $69 -HGR_COLOR = $E4 -STATE = $ED +;BLARGH = $69 +;HGR_COLOR = $E4 +;STATE = $ED ;DRAW_PAGE = $EE -LASTKEY = $F1 -PADDLE_STATUS = $F2 +;LASTKEY = $F1 +;PADDLE_STATUS = $F2 ;================================== diff --git a/megademo/landing.png b/megademo/landing.png deleted file mode 100644 index ed0f20a0..00000000 Binary files a/megademo/landing.png and /dev/null differ diff --git a/megademo/megademo.s b/megademo/megademo.s index 7080ede4..49ddc8c6 100644 --- a/megademo/megademo.s +++ b/megademo/megademo.s @@ -25,7 +25,7 @@ apple_iie: ;=================== jsr HOME - jsr mode7_flying + jsr rocket_takeoff ; C64 Opening Sequence @@ -54,9 +54,10 @@ apple_iie: ; Waterfall ; Enter ship + jsr rocket_takeoff ; mode7 (???) - jsr mode7_flying +; jsr mode7_flying ; Fly in space @@ -91,10 +92,11 @@ loop_forever: .include "wait_keypress.s" .include "random16.s" .align $100 -; .include "fireworks.s" + .include "fireworks.s" .include "hgr.s" .include "bird_mountain.s" .include "move_letters.s" .align $100 .include "gr_putsprite.s" - .include "mode7.s" +; .include "mode7.s" + .include "takeoff.s" diff --git a/megademo/takeoff.png b/megademo/takeoff.png new file mode 100644 index 00000000..367f90c9 Binary files /dev/null and b/megademo/takeoff.png differ diff --git a/megademo/takeoff.s b/megademo/takeoff.s new file mode 100644 index 00000000..fd42c938 --- /dev/null +++ b/megademo/takeoff.s @@ -0,0 +1,200 @@ +; Rocket Takeoff + +; Simple HGR/GR split + + +; STATE1 = RIDE IN ON BIRD +; STATE2 = OFF BIRD +; STATE3 = BIRD RUNS AWAY +; STATE4 = WALK INTO SHIP +; STATE5 = PAUSE +; STATE6 = SMOKE OUT BACK +; STATE7 = ROTATING FLAME SPRITES + TREES MOVING/SPEED UP +; also horizon drop away? + + + ; 5 4 3 2 1 blastoff, another rocketship run + ; o/~ Take me to the moon o/~ +rocket_takeoff: + + + ;=================== + ; init screen + bit KEYRESET + +setup_rocket: + + + ;=================== + ; init vars + + lda #0 + sta DRAW_PAGE + + + ;============================= + ; Load graphic hgr + + lda #takeoff_hgr + sta LZ4_SRC+1 + + lda #<(takeoff_hgr_end-8) ; skip checksum at end + sta LZ4_END + lda #>(takeoff_hgr_end-8) ; skip checksum at end + sta LZ4_END+1 + + lda #<$2000 + sta LZ4_DST + lda #>$2000 + sta LZ4_DST+1 + sta HGR_PAGE + + jsr lz4_decode + + jsr draw_stars + + ;============================= + ; Load graphic page0 + + lda #$0c + sta BASH + lda #$00 + sta BASL ; load image to $c00 + + + lda #takeoff + sta GBASH + + jsr load_rle_gr + + lda #4 + sta DRAW_PAGE + + jsr gr_copy_to_current ; copy to page1 + + ; GR part + bit PAGE1 + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + bit PAGE0 + + ;============================== + ; setup graphics for vapor lock + ;============================== + + jsr vapor_lock ; 6 + + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go + + jsr gr_copy_to_current ; 6+ 9292 + + ; now we have 322 left + + ; GR part + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + ; 322 - 12 = 310 + ; - 3 for jmp + ; 307 + + ; Try X=9 Y=6 cycles=307 + + ldy #6 ; 2 +toloopA:ldx #9 ; 2 +toloopB:dex ; 2 + bne toloopB ; 2nt/3 + dey ; 2 + bne toloopA ; 2nt/3 + + jmp to_begin_loop +.align $100 + + + ;================================================ + ; Starring People Loop + ;================================================ + ; each scan line 65 cycles + ; 1 cycle each byte (40cycles) + 25 for horizontal + ; Total of 12480 cycles to draw screen + ; Vertical blank = 4550 cycles (70 scan lines) + ; Total of 17030 cycles to get back to where was + + ; want 12*4 = 48 lines of HIRES = 3120-4=3116 + ; want 192-48=144 lines of LORES = 9360-4=9356 + + + +to_begin_loop: + + bit HIRES ; 4 + + ; Try X=11 Y=51 cycles=3112 R4 + + nop + nop + ldy #51 ; 2 +toloop8:ldx #11 ; 2 +toloop9:dex ; 2 + bne toloop9 ; 2nt/3 + dey ; 2 + bne toloop8 ; 2nt/3 + + bit LORES ; 4 + + ; Try X=10 Y=167 cycles=9353 R3 + + lda $0 + + ldy #167 ; 2 +toloop6:ldx #10 ; 2 +toloop7:dex ; 2 + bne toloop7 ; 2nt/3 + dey ; 2 + bne toloop6 ; 2nt/3 + + + ;====================================================== + ; We have 4550 cycles in the vblank, use them wisely + ;====================================================== + + ; do_nothing should be 4550 + ; -10 keypress + ; =========== + ; 4540 + + ; Try X=9 Y=89 cycles=4540 + + ldy #89 ; 2 +toloop1:ldx #9 ; 2 +toloop2:dex ; 2 + bne toloop2 ; 2nt/3 + dey ; 2 + bne toloop1 ; 2nt/3 + + lda KEYPRESS ; 4 + bpl to_no_keypress ; 3 + jmp to_start_over +to_no_keypress: + + jmp to_begin_loop ; 3 + +to_start_over: + bit KEYRESET ; clear keypress ; 4 + rts ; 6 + + +.include "takeoff.inc" +takeoff_hgr: +.incbin "takeoff.img.lz4",11 +takeoff_hgr_end: + + diff --git a/megademo/takeoff_hgr.png b/megademo/takeoff_hgr.png new file mode 100644 index 00000000..c4f6cf11 Binary files /dev/null and b/megademo/takeoff_hgr.png differ