diff --git a/common.asm b/common.asm index dba7f63..a4874b2 100644 --- a/common.asm +++ b/common.asm @@ -625,6 +625,17 @@ txt_info2: !scr "p2: joystick 1 or j/l" txt_ttgname: !scr "teletype games" txt_presents:!scr "presents" txt_vs: !scr "vs" +txt_story: !scr "story" +txt_st0: !scr "based on a true story" +txt_st1: !scr "a wild rabbit attacked a" +txt_st2: !scr "scooter rider near budapest." +txt_st3: !scr "the rabbit jumped straight" +txt_st4: !scr "into the rider's face." +txt_st5: !scr "rabbits can jump 5 meters" +txt_st6: !scr "high and run at 75 km/h." +txt_st7: !scr "the rabbit ran away unhurt." +txt_st8: !scr "the rider crashed hard." +txt_st9: !scr "this game tells their story." txt_over: !scr "game over" txt_return: !scr "fire = return" txt_blank: !fill 19, $20 diff --git a/main.asm b/main.asm index 0a0dfc0..c038d9a 100644 --- a/main.asm +++ b/main.asm @@ -117,6 +117,7 @@ wf_hit: !src "intro.asm" !src "menu.asm" !src "credits.asm" +!src "story.asm" !src "play.asm" !src "over.asm" !src "common.asm" diff --git a/menu.asm b/menu.asm index 7b2432d..319a5b9 100644 --- a/menu.asm +++ b/menu.asm @@ -1,8 +1,9 @@ ; ----------------------------------------------------------- ; menu.asm - full-screen menu card: big RABBIT VS SCOOTER -; logo flanked by two hopping rabbits, and a three-item menu: -; single player / multiplayer / credits (joystick up/down + -; fire; s, m, c pick; 1 and 2 pick and start at once) +; logo flanked by two hopping rabbits, and a four-item menu: +; single player / multiplayer / credits / story +; (joystick up/down + fire; s, m, c, t shortcut keys; +; 1 and 2 pick player mode and start at once) ; ----------------------------------------------------------- menu_init: @@ -25,12 +26,6 @@ menu_init: lda #WHITE sta SPR_COL+1 sta SPR_COL+2 - lda #SPRP_SCOOT - sta SPRPTR - lda #172 ; center lane position - sta SPRPOS - lda #226 ; just below the footer line - sta SPRPOS+1 lda #30 ; left rabbit sta SPRPOS+2 lda #58 @@ -43,7 +38,7 @@ menu_init: lda #%00000110 ; both rabbits double-sized sta SPR_XEX sta SPR_YEX - lda #%00000111 + lda #%00000110 ; only the two flanking rabbits sta SPR_EN +setupd menu_update @@ -128,6 +123,12 @@ mu_nom: lda #2 sta menusel mu_noc: + lda CIA1_PB ; column 2 still selected + and #$40 ; 't': keyboard column 2, row bit 6 + bne mu_not + lda #3 + sta menusel +mu_not: ; the 1 / 2 keys pick and start right away (edge detected) lda #$7f ; keyboard column 7: '1' = bit 0, '2' = bit 3 @@ -158,10 +159,10 @@ mu_keydone: lda framectr and #64 beq mu_foot2 - +prtext 21, 9, LGREY, txt_info, 21 + +prtext 22, 9, LGREY, txt_info, 21 jmp mu_footdone mu_foot2: - +prtext 21, 9, LGREY, txt_info2, 21 + +prtext 22, 9, LGREY, txt_info2, 21 mu_footdone: ; the menu items: the picked line is yellow @@ -181,6 +182,7 @@ mm_items: sta SCREEN+14*40+12 sta SCREEN+16*40+12 sta SCREEN+18*40+12 + sta SCREEN+20*40+12 lda framectr and #16 bne mu_start @@ -207,10 +209,14 @@ menu_go: lda menusel cmp #2 beq mg_credits + cmp #3 + beq mg_story sta mp_mode ; item 0 / 1 doubles as the player count jmp play_init ; its rts returns to the main loop mg_credits: jmp credits_init +mg_story: + jmp story_init mu_done: rts @@ -239,16 +245,18 @@ dm_store: rts ; ---- menu tables ---- -MENU_ITEMS = 3 -mitem_lo: !byte txt_1p, >txt_2p, >txt_credits -mitem_len: !byte 13, 11, 7 -mitem_row: !byte 14, 16, 18 +MENU_ITEMS = 4 +mitem_lo: !byte txt_1p, >txt_2p, >txt_credits, >txt_story +mitem_len: !byte 13, 11, 7, 5 +mitem_row: !byte 14, 16, 18, 20 mcur_lo: ; cursor cells: column 12 of those rows - !byte <(SCREEN+14*40+12), <(SCREEN+16*40+12), <(SCREEN+18*40+12) + !byte <(SCREEN+14*40+12), <(SCREEN+16*40+12) + !byte <(SCREEN+18*40+12), <(SCREEN+20*40+12) mcur_hi: - !byte >(SCREEN+14*40+12), >(SCREEN+16*40+12), >(SCREEN+18*40+12) + !byte >(SCREEN+14*40+12), >(SCREEN+16*40+12) + !byte >(SCREEN+18*40+12), >(SCREEN+20*40+12) ; ---- menu variables ---- -menusel: !byte 0 ; picked line: 0-2 +menusel: !byte 0 ; picked line: 0-3 udheld: !byte 0 ; joystick up/down edge detection state diff --git a/story.asm b/story.asm new file mode 100644 index 0000000..cfc2e48 --- /dev/null +++ b/story.asm @@ -0,0 +1,44 @@ +; ----------------------------------------------------------- +; story.asm - the true story behind the game: a wild rabbit +; knocked over a scooter rider near Budapest (Százhalombatta) +; ----------------------------------------------------------- + +story_init: + lda #BLACK + sta bg_top + sta bg_bot + lda #0 + sta SPR_EN + jsr clear_screen + + +prbig 1, 10, YELLOW, txt_story, 5 + + +prtext 7, 9, LGREY, txt_st0, 21 + +prtext 9, 8, WHITE, txt_st1, 24 + +prtext 10, 6, WHITE, txt_st2, 28 + +prtext 12, 7, WHITE, txt_st3, 26 + +prtext 13, 9, WHITE, txt_st4, 22 + +prtext 15, 7, LGREEN, txt_st5, 25 + +prtext 16, 8, LGREEN, txt_st6, 24 + +prtext 18, 6, RED, txt_st7, 27 + +prtext 19, 8, RED, txt_st8, 23 + +prtext 21, 6, CYAN, txt_st9, 28 + + +setupd story_update + rts + +story_update: + ; blink the return prompt + lda framectr + and #32 + bne su_hide + +prtext 23, 13, YELLOW, txt_return, 13 + jmp su_input +su_hide: + +prtext 23, 13, YELLOW, txt_blank, 13 +su_input: + jsr start_edge + beq su_done + jmp menu_init +su_done: + rts