lemm: centralize printing outtro info
also try to pick proper outtro from stats
This commit is contained in:
parent
b918d7a14e
commit
671182cf46
|
@ -120,7 +120,7 @@ lemm.inc: generate_common LEMM
|
|||
./generate_common -a 0x6000 -s erase_pointer lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s handle_keypress lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s disable_music lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s outro_level1 lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s outro_level lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s update_lemmings_out lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s level_preview_h_smc lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s level_preview_l_smc lemm.lst >> lemm.inc
|
||||
|
|
|
@ -9,6 +9,8 @@ init_level:
|
|||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
sta NEXT_LEMMING_TO_RELEASE
|
||||
sta PERCENT_RESCUED_L
|
||||
sta PERCENT_RESCUED_H
|
||||
|
||||
jsr clear_lemmings_out
|
||||
|
||||
|
|
|
@ -60,11 +60,13 @@ intro_not_iie:
|
|||
rts
|
||||
|
||||
|
||||
;========================
|
||||
;========================
|
||||
; print the outro message
|
||||
;========================
|
||||
;========================
|
||||
|
||||
outro_level1:
|
||||
outro_level:
|
||||
|
||||
; clear text screen
|
||||
|
||||
|
@ -78,34 +80,189 @@ outro_level1:
|
|||
|
||||
jsr set_normal
|
||||
|
||||
; assume lose at first, may change later
|
||||
lda #LEVEL_FAIL
|
||||
sta LEVEL_OVER
|
||||
|
||||
lda LEVEL_OVER
|
||||
cmp #LEVEL_WIN
|
||||
bne print_l1_lose_message
|
||||
;======================================
|
||||
; update percentages in message
|
||||
;======================================
|
||||
|
||||
; print messages
|
||||
;=================
|
||||
; needed
|
||||
|
||||
lda #<level1_win_text
|
||||
|
||||
ldx #' ' ; default is blank
|
||||
|
||||
lda PERCENT_NEEDED
|
||||
bne upm_not_100 ; zero specical case means 100%
|
||||
|
||||
ldx #'1'
|
||||
|
||||
upm_not_100:
|
||||
stx needed_smc+14
|
||||
|
||||
|
||||
; needed tens
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
clc
|
||||
adc #'0'
|
||||
sta needed_smc+15
|
||||
|
||||
; needed ones
|
||||
|
||||
lda PERCENT_NEEDED
|
||||
and #$f
|
||||
clc
|
||||
adc #'0'
|
||||
sta needed_smc+16
|
||||
|
||||
|
||||
;=================
|
||||
; rescued
|
||||
|
||||
|
||||
ldx #' ' ; default is blank
|
||||
|
||||
lda PERCENT_RESCUED_H
|
||||
beq upr_not_100 ;
|
||||
|
||||
ldx #'1'
|
||||
|
||||
upr_not_100:
|
||||
stx rescued_smc+14
|
||||
|
||||
cmp #1 ; if 100% then print 0
|
||||
beq always_tens
|
||||
|
||||
; rescued tens
|
||||
lda #' '
|
||||
ldx PERCENT_RESCUED_L
|
||||
cpx #$10
|
||||
bcc upr_out_tens
|
||||
|
||||
always_tens:
|
||||
txa
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
clc
|
||||
adc #'0'
|
||||
upr_out_tens:
|
||||
sta rescued_smc+15
|
||||
|
||||
; needed ones
|
||||
|
||||
lda PERCENT_RESCUED_L
|
||||
and #$f
|
||||
clc
|
||||
adc #'0'
|
||||
sta rescued_smc+16
|
||||
|
||||
|
||||
;======================
|
||||
; print common message
|
||||
|
||||
lda #<level_common_text
|
||||
sta OUTL
|
||||
lda #>level1_win_text
|
||||
jmp print_l1_common
|
||||
print_l1_lose_message:
|
||||
lda #<level1_lose_text
|
||||
sta OUTL
|
||||
lda #>level1_lose_text
|
||||
|
||||
print_l1_common:
|
||||
lda #>level_common_text
|
||||
sta OUTH
|
||||
jsr move_and_print_list
|
||||
|
||||
; print the text
|
||||
|
||||
ldx #9
|
||||
l1_outro_loop:
|
||||
;======================
|
||||
; figure out message
|
||||
;======================
|
||||
|
||||
jsr move_and_print
|
||||
ldx #0 ; first message
|
||||
|
||||
lda PERCENT_RESCUED_H
|
||||
bne print_the_message ; 100%, was a win
|
||||
|
||||
blip:
|
||||
inx ; (1) NEEDED+20% < T < 100%
|
||||
lda PERCENT_NEEDED
|
||||
clc
|
||||
adc #$20 ; FIXME: only if < 80%
|
||||
cmp PERCENT_RESCUED_L
|
||||
bcs print_the_message
|
||||
|
||||
inx ; (2) NEEDED < T < NEEDED+20%
|
||||
lda PERCENT_RESCUED_L
|
||||
cmp PERCENT_NEEDED
|
||||
bcc print_the_message
|
||||
|
||||
inx ; (3) NEEDED == T
|
||||
cmp PERCENT_NEEDED
|
||||
beq print_the_message
|
||||
|
||||
inx ; (4) T = NEEDED - 1
|
||||
lda PERCENT_RESCUED_L
|
||||
sec
|
||||
sbc #1
|
||||
cmp PERCENT_NEEDED
|
||||
beq print_the_message
|
||||
|
||||
inx ; (5) NEEDED-5 < T < NEEDED - 1
|
||||
lda PERCENT_RESCUED_L
|
||||
sec
|
||||
sbc #5
|
||||
cmp PERCENT_NEEDED
|
||||
bcs print_the_message
|
||||
|
||||
inx ; (6) NEEDED/2 < T < NEEDED-5
|
||||
lda PERCENT_RESCUED_L
|
||||
lsr
|
||||
cmp PERCENT_NEEDED
|
||||
bcs print_the_message
|
||||
|
||||
|
||||
inx ; (7) T < NEEDED/2
|
||||
|
||||
|
||||
print_the_message:
|
||||
lda level_end_messages_l,X
|
||||
sta OUTL
|
||||
lda level_end_messages_h,X
|
||||
sta OUTH
|
||||
jsr move_and_print_list
|
||||
|
||||
cpx #4
|
||||
bcc was_a_win
|
||||
|
||||
was_a_loss:
|
||||
jmp done_print_message
|
||||
|
||||
;=================================
|
||||
; print win message if applicable
|
||||
;=================================
|
||||
was_a_win:
|
||||
lda #LEVEL_WIN
|
||||
sta LEVEL_OVER
|
||||
|
||||
; update level in message
|
||||
|
||||
ldx WHICH_LEVEL
|
||||
inx
|
||||
txa
|
||||
clc
|
||||
adc #'0'
|
||||
sta level_win_text+29
|
||||
|
||||
|
||||
lda #<level_win_text
|
||||
sta OUTL
|
||||
lda #>level_win_text
|
||||
sta OUTH
|
||||
jsr move_and_print_list
|
||||
|
||||
done_print_message:
|
||||
|
||||
dex
|
||||
bne l1_outro_loop
|
||||
|
||||
bit KEYRESET
|
||||
|
||||
|
@ -113,28 +270,80 @@ l1_outro_loop:
|
|||
|
||||
jmp wait_until_keypress
|
||||
|
||||
|
||||
level1_win_text:
|
||||
level_common_text:
|
||||
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
|
||||
.byte 12, 3,"YOU RESCUED 100%",0
|
||||
.byte 12, 4,"YOU NEEDED 10%",0
|
||||
rescued_smc:
|
||||
.byte 12, 3,"YOU RESCUED %",0
|
||||
needed_smc:
|
||||
.byte 12, 4,"YOU NEEDED %",0
|
||||
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
|
||||
.byte 9,21,"PRESS ESCAPE FOR MENU",0
|
||||
.byte $FF
|
||||
|
||||
level_win_text:
|
||||
.byte 6,15,"YOUR ACCESS CODE FOR LEVEL X",0
|
||||
.byte 14,16,"IS B002ATARI",0
|
||||
.byte $FF
|
||||
|
||||
; T = 100%
|
||||
level_message0_text:
|
||||
.byte 2, 6,"SUPERB! YOU RESCUED EVERY LEMMING ON",0
|
||||
.byte 3, 7,"THAT LEVEL. CAN YOU DO IT AGAIN...",0
|
||||
.byte 6,15,"YOUR ACCESS CODE FOR LEVEL 2",0
|
||||
.byte 14,16,"IS B002ATARI",0
|
||||
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
|
||||
.byte 9,21,"PRESS ESCAPE FOR MENU",0
|
||||
.byte $FF
|
||||
|
||||
level1_lose_text:
|
||||
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
|
||||
.byte 12, 3,"YOU RESCUED 0%",0
|
||||
.byte 12, 4,"YOU NEEDED 100%",0
|
||||
; NEEDED+20% < T < 100%
|
||||
level_message1_text:
|
||||
.byte 2, 6,"YOU TOTALLY STORMED THAT LEVEL!",0
|
||||
.byte 3, 7,"LET'S SEE IF YOU CAN STORM THE NEXT...",0
|
||||
.byte $FF
|
||||
|
||||
; NEEDED < T < NEEDED+20%
|
||||
level_message2_text:
|
||||
.byte 2, 6,"THAT LEVEL SEEMED NO PROBLEM TO YOU ON",0
|
||||
.byte 3, 7,"THAT ATTEMPT. ONTO THE NEXT...",0
|
||||
.byte $FF
|
||||
|
||||
; NEEDED == T
|
||||
level_message3_text:
|
||||
.byte 2, 6,"RIGHT ON. YOU CAN'T GET MUCH CLOSER THAN",0
|
||||
.byte 3, 7,"THAT. LET'S TRY THE NEXT...",0
|
||||
.byte $FF
|
||||
|
||||
; T = NEEDED - 1
|
||||
level_message4_text:
|
||||
.byte 2, 6,"OH NO, SO NEAR AND YET SO FAR.",0
|
||||
.byte 3, 7,"MAYBE THIS TIME...",0
|
||||
.byte $FF
|
||||
|
||||
; NEEDED-5 < T < NEEDED - 1
|
||||
level_message5_text:
|
||||
.byte 2, 6,"YOU GOT PRETTY CLOSE THAT TIME.",0
|
||||
.byte 3, 7,"NOW TRY AGAIN FOR THAT FEW % EXTRA.",0
|
||||
.byte $FF
|
||||
|
||||
; NEEDED/2 < T < NEEDED-5
|
||||
level_message6_text:
|
||||
.byte 2, 6,"BETTER RETHINK YOUR STRATEGY BEFORE",0
|
||||
.byte 3, 7,"YOU TRY THIS LEVEL AGAIN!.",0
|
||||
.byte $FF
|
||||
|
||||
; T < NEEDED/2
|
||||
level_message7_text:
|
||||
.byte 3, 6,"ROCK BOTTOM! I HOPE FOR YOUR SAKE",0
|
||||
.byte 8, 7,"THAT YOU NUKED THAT LEVEL.",0
|
||||
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
|
||||
.byte 9,21,"PRESS ESCAPE FOR MENU",0
|
||||
.byte 10,10," ",0 ; lazy hack
|
||||
.byte 10,10," ",0
|
||||
.byte $FF
|
||||
|
||||
|
||||
level_end_messages_l:
|
||||
.byte <level_message0_text,<level_message1_text,<level_message2_text
|
||||
.byte <level_message3_text,<level_message4_text,<level_message5_text
|
||||
.byte <level_message6_text,<level_message7_text
|
||||
|
||||
level_end_messages_h:
|
||||
.byte >level_message0_text,>level_message1_text,>level_message2_text
|
||||
.byte >level_message3_text,>level_message4_text,>level_message5_text
|
||||
.byte >level_message6_text,>level_message7_text
|
||||
|
||||
|
||||
|
||||
.align $100
|
||||
|
|
|
@ -270,11 +270,23 @@ play_level:
|
|||
level_already_resident:
|
||||
|
||||
;==================
|
||||
; start level
|
||||
; play level
|
||||
;==================
|
||||
|
||||
jsr start_level
|
||||
|
||||
;==================
|
||||
; level over
|
||||
;==================
|
||||
|
||||
; disable music
|
||||
|
||||
jsr disable_music
|
||||
|
||||
; print end message
|
||||
|
||||
jsr outro_level
|
||||
|
||||
lda LEVEL_OVER
|
||||
cmp #LEVEL_WIN
|
||||
beq level_won
|
||||
|
|
|
@ -46,6 +46,9 @@ do_level1:
|
|||
lda #127
|
||||
sta exit_y2_smc+1
|
||||
|
||||
lda #$10 ; BCD
|
||||
sta PERCENT_NEEDED
|
||||
|
||||
|
||||
;==============
|
||||
; set up intro
|
||||
|
@ -249,12 +252,6 @@ l1_timer_not_yet:
|
|||
|
||||
l1_level_over:
|
||||
|
||||
; bit SET_TEXT
|
||||
|
||||
jsr disable_music
|
||||
|
||||
jsr outro_level1
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
|
|
@ -46,6 +46,8 @@ do_level2:
|
|||
lda #144
|
||||
sta exit_y2_smc+1
|
||||
|
||||
lda #$10 ; BCD
|
||||
sta PERCENT_NEEDED
|
||||
|
||||
;==============
|
||||
; set up intro
|
||||
|
@ -249,10 +251,6 @@ l2_timer_not_yet:
|
|||
|
||||
l2_level_over:
|
||||
|
||||
jsr disable_music
|
||||
|
||||
jsr outro_level1
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
|
|
@ -45,6 +45,8 @@ do_level3:
|
|||
lda #144
|
||||
sta exit_y2_smc+1
|
||||
|
||||
lda #$10 ; BCD
|
||||
sta PERCENT_NEEDED
|
||||
|
||||
;==============
|
||||
; set up intro
|
||||
|
@ -176,7 +178,7 @@ do_level3:
|
|||
; Main Loop
|
||||
;===================
|
||||
;===================
|
||||
l4_main_loop:
|
||||
l3_main_loop:
|
||||
|
||||
;=========================
|
||||
; load next chunk of music
|
||||
|
@ -191,11 +193,11 @@ l4_main_loop:
|
|||
;=========================
|
||||
|
||||
lda DOOR_OPEN
|
||||
bne l4_door_is_open
|
||||
bne l3_door_is_open
|
||||
|
||||
jsr draw_door
|
||||
|
||||
l4_door_is_open:
|
||||
l3_door_is_open:
|
||||
|
||||
;======================
|
||||
; release lemmings
|
||||
|
@ -211,13 +213,13 @@ l4_door_is_open:
|
|||
|
||||
lda TIMER_COUNT
|
||||
cmp #$50
|
||||
bcc l4_timer_not_yet
|
||||
bcc l3_timer_not_yet
|
||||
|
||||
jsr update_time
|
||||
|
||||
lda #$0
|
||||
sta TIMER_COUNT
|
||||
l4_timer_not_yet:
|
||||
l3_timer_not_yet:
|
||||
|
||||
|
||||
; main drawing loop
|
||||
|
@ -240,16 +242,12 @@ l4_timer_not_yet:
|
|||
inc FRAMEL
|
||||
|
||||
lda LEVEL_OVER
|
||||
bne l4_level_over
|
||||
bne l3_level_over
|
||||
|
||||
jmp l4_main_loop
|
||||
jmp l3_main_loop
|
||||
|
||||
|
||||
l4_level_over:
|
||||
|
||||
jsr disable_music
|
||||
|
||||
jsr outro_level1
|
||||
l3_level_over:
|
||||
|
||||
rts
|
||||
|
||||
|
|
|
@ -60,6 +60,8 @@ do_level4:
|
|||
lda #>level4_intro_text
|
||||
sta intro_text_smc_h+1
|
||||
|
||||
lda #$00 ; BCD
|
||||
sta PERCENT_NEEDED ; means 100%
|
||||
|
||||
;==============
|
||||
; set up music
|
||||
|
@ -248,10 +250,6 @@ l4_timer_not_yet:
|
|||
|
||||
l4_level_over:
|
||||
|
||||
jsr disable_music
|
||||
|
||||
jsr outro_level1
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ do_level5:
|
|||
|
||||
; n/a
|
||||
|
||||
lda #$10 ; BCD
|
||||
sta PERCENT_NEEDED
|
||||
|
||||
;==============
|
||||
; set up intro
|
||||
|
@ -233,7 +235,7 @@ l5_level_over:
|
|||
|
||||
jsr disable_music
|
||||
|
||||
jsr outro_level1
|
||||
jsr outro_level
|
||||
|
||||
rts
|
||||
|
||||
|
|
|
@ -80,3 +80,14 @@ set_inverse:
|
|||
rts
|
||||
|
||||
|
||||
;================================
|
||||
; move and print a list of lines
|
||||
;================================
|
||||
; look for negative X meaning done
|
||||
move_and_print_list:
|
||||
jsr move_and_print
|
||||
ldy #0
|
||||
lda (OUTL),Y
|
||||
bpl move_and_print_list
|
||||
|
||||
rts
|
||||
|
|
|
@ -75,6 +75,9 @@ WHICH_LEVEL = $88
|
|||
LEMMINGS_TO_RELEASE = $89
|
||||
CURRENT_LEMMING = $8A
|
||||
APPLEII_MODEL = $8B
|
||||
PERCENT_RESCUED_L = $8C
|
||||
PERCENT_RESCUED_H = $8D
|
||||
PERCENT_NEEDED = $8E
|
||||
|
||||
DOOR_X = $90 ; location of door
|
||||
DOOR_Y = $91
|
||||
|
|
Loading…
Reference in New Issue