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 erase_pointer lemm.lst >> lemm.inc
|
||||||
./generate_common -a 0x6000 -s handle_keypress 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 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 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_h_smc lemm.lst >> lemm.inc
|
||||||
./generate_common -a 0x6000 -s level_preview_l_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 LOAD_NEXT_CHUNK
|
||||||
sta LEMMINGS_OUT
|
sta LEMMINGS_OUT
|
||||||
sta NEXT_LEMMING_TO_RELEASE
|
sta NEXT_LEMMING_TO_RELEASE
|
||||||
|
sta PERCENT_RESCUED_L
|
||||||
|
sta PERCENT_RESCUED_H
|
||||||
|
|
||||||
jsr clear_lemmings_out
|
jsr clear_lemmings_out
|
||||||
|
|
||||||
|
|
|
@ -60,11 +60,13 @@ intro_not_iie:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
;========================
|
;========================
|
||||||
; print the outro message
|
; print the outro message
|
||||||
;========================
|
;========================
|
||||||
|
;========================
|
||||||
|
|
||||||
outro_level1:
|
outro_level:
|
||||||
|
|
||||||
; clear text screen
|
; clear text screen
|
||||||
|
|
||||||
|
@ -78,34 +80,189 @@ outro_level1:
|
||||||
|
|
||||||
jsr set_normal
|
jsr set_normal
|
||||||
|
|
||||||
|
; assume lose at first, may change later
|
||||||
|
lda #LEVEL_FAIL
|
||||||
|
sta LEVEL_OVER
|
||||||
|
|
||||||
lda LEVEL_OVER
|
;======================================
|
||||||
cmp #LEVEL_WIN
|
; update percentages in message
|
||||||
bne print_l1_lose_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
|
sta OUTL
|
||||||
lda #>level1_win_text
|
lda #>level_common_text
|
||||||
jmp print_l1_common
|
|
||||||
print_l1_lose_message:
|
|
||||||
lda #<level1_lose_text
|
|
||||||
sta OUTL
|
|
||||||
lda #>level1_lose_text
|
|
||||||
|
|
||||||
print_l1_common:
|
|
||||||
sta OUTH
|
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
|
bit KEYRESET
|
||||||
|
|
||||||
|
@ -113,28 +270,80 @@ l1_outro_loop:
|
||||||
|
|
||||||
jmp wait_until_keypress
|
jmp wait_until_keypress
|
||||||
|
|
||||||
|
level_common_text:
|
||||||
level1_win_text:
|
|
||||||
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
|
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
|
||||||
.byte 12, 3,"YOU RESCUED 100%",0
|
rescued_smc:
|
||||||
.byte 12, 4,"YOU NEEDED 10%",0
|
.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 2, 6,"SUPERB! YOU RESCUED EVERY LEMMING ON",0
|
||||||
.byte 3, 7,"THAT LEVEL. CAN YOU DO IT AGAIN...",0
|
.byte 3, 7,"THAT LEVEL. CAN YOU DO IT AGAIN...",0
|
||||||
.byte 6,15,"YOUR ACCESS CODE FOR LEVEL 2",0
|
.byte $FF
|
||||||
.byte 14,16,"IS B002ATARI",0
|
|
||||||
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
|
|
||||||
.byte 9,21,"PRESS ESCAPE FOR MENU",0
|
|
||||||
|
|
||||||
level1_lose_text:
|
; NEEDED+20% < T < 100%
|
||||||
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
|
level_message1_text:
|
||||||
.byte 12, 3,"YOU RESCUED 0%",0
|
.byte 2, 6,"YOU TOTALLY STORMED THAT LEVEL!",0
|
||||||
.byte 12, 4,"YOU NEEDED 100%",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 3, 6,"ROCK BOTTOM! I HOPE FOR YOUR SAKE",0
|
||||||
.byte 8, 7,"THAT YOU NUKED THAT LEVEL.",0
|
.byte 8, 7,"THAT YOU NUKED THAT LEVEL.",0
|
||||||
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
|
.byte $FF
|
||||||
.byte 9,21,"PRESS ESCAPE FOR MENU",0
|
|
||||||
.byte 10,10," ",0 ; lazy hack
|
|
||||||
.byte 10,10," ",0
|
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
|
.align $100
|
||||||
|
|
|
@ -270,11 +270,23 @@ play_level:
|
||||||
level_already_resident:
|
level_already_resident:
|
||||||
|
|
||||||
;==================
|
;==================
|
||||||
; start level
|
; play level
|
||||||
;==================
|
;==================
|
||||||
|
|
||||||
jsr start_level
|
jsr start_level
|
||||||
|
|
||||||
|
;==================
|
||||||
|
; level over
|
||||||
|
;==================
|
||||||
|
|
||||||
|
; disable music
|
||||||
|
|
||||||
|
jsr disable_music
|
||||||
|
|
||||||
|
; print end message
|
||||||
|
|
||||||
|
jsr outro_level
|
||||||
|
|
||||||
lda LEVEL_OVER
|
lda LEVEL_OVER
|
||||||
cmp #LEVEL_WIN
|
cmp #LEVEL_WIN
|
||||||
beq level_won
|
beq level_won
|
||||||
|
|
|
@ -46,6 +46,9 @@ do_level1:
|
||||||
lda #127
|
lda #127
|
||||||
sta exit_y2_smc+1
|
sta exit_y2_smc+1
|
||||||
|
|
||||||
|
lda #$10 ; BCD
|
||||||
|
sta PERCENT_NEEDED
|
||||||
|
|
||||||
|
|
||||||
;==============
|
;==============
|
||||||
; set up intro
|
; set up intro
|
||||||
|
@ -249,12 +252,6 @@ l1_timer_not_yet:
|
||||||
|
|
||||||
l1_level_over:
|
l1_level_over:
|
||||||
|
|
||||||
; bit SET_TEXT
|
|
||||||
|
|
||||||
jsr disable_music
|
|
||||||
|
|
||||||
jsr outro_level1
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,8 @@ do_level2:
|
||||||
lda #144
|
lda #144
|
||||||
sta exit_y2_smc+1
|
sta exit_y2_smc+1
|
||||||
|
|
||||||
|
lda #$10 ; BCD
|
||||||
|
sta PERCENT_NEEDED
|
||||||
|
|
||||||
;==============
|
;==============
|
||||||
; set up intro
|
; set up intro
|
||||||
|
@ -249,10 +251,6 @@ l2_timer_not_yet:
|
||||||
|
|
||||||
l2_level_over:
|
l2_level_over:
|
||||||
|
|
||||||
jsr disable_music
|
|
||||||
|
|
||||||
jsr outro_level1
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,8 @@ do_level3:
|
||||||
lda #144
|
lda #144
|
||||||
sta exit_y2_smc+1
|
sta exit_y2_smc+1
|
||||||
|
|
||||||
|
lda #$10 ; BCD
|
||||||
|
sta PERCENT_NEEDED
|
||||||
|
|
||||||
;==============
|
;==============
|
||||||
; set up intro
|
; set up intro
|
||||||
|
@ -176,7 +178,7 @@ do_level3:
|
||||||
; Main Loop
|
; Main Loop
|
||||||
;===================
|
;===================
|
||||||
;===================
|
;===================
|
||||||
l4_main_loop:
|
l3_main_loop:
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
; load next chunk of music
|
; load next chunk of music
|
||||||
|
@ -191,11 +193,11 @@ l4_main_loop:
|
||||||
;=========================
|
;=========================
|
||||||
|
|
||||||
lda DOOR_OPEN
|
lda DOOR_OPEN
|
||||||
bne l4_door_is_open
|
bne l3_door_is_open
|
||||||
|
|
||||||
jsr draw_door
|
jsr draw_door
|
||||||
|
|
||||||
l4_door_is_open:
|
l3_door_is_open:
|
||||||
|
|
||||||
;======================
|
;======================
|
||||||
; release lemmings
|
; release lemmings
|
||||||
|
@ -211,13 +213,13 @@ l4_door_is_open:
|
||||||
|
|
||||||
lda TIMER_COUNT
|
lda TIMER_COUNT
|
||||||
cmp #$50
|
cmp #$50
|
||||||
bcc l4_timer_not_yet
|
bcc l3_timer_not_yet
|
||||||
|
|
||||||
jsr update_time
|
jsr update_time
|
||||||
|
|
||||||
lda #$0
|
lda #$0
|
||||||
sta TIMER_COUNT
|
sta TIMER_COUNT
|
||||||
l4_timer_not_yet:
|
l3_timer_not_yet:
|
||||||
|
|
||||||
|
|
||||||
; main drawing loop
|
; main drawing loop
|
||||||
|
@ -240,16 +242,12 @@ l4_timer_not_yet:
|
||||||
inc FRAMEL
|
inc FRAMEL
|
||||||
|
|
||||||
lda LEVEL_OVER
|
lda LEVEL_OVER
|
||||||
bne l4_level_over
|
bne l3_level_over
|
||||||
|
|
||||||
jmp l4_main_loop
|
jmp l3_main_loop
|
||||||
|
|
||||||
|
|
||||||
l4_level_over:
|
l3_level_over:
|
||||||
|
|
||||||
jsr disable_music
|
|
||||||
|
|
||||||
jsr outro_level1
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,8 @@ do_level4:
|
||||||
lda #>level4_intro_text
|
lda #>level4_intro_text
|
||||||
sta intro_text_smc_h+1
|
sta intro_text_smc_h+1
|
||||||
|
|
||||||
|
lda #$00 ; BCD
|
||||||
|
sta PERCENT_NEEDED ; means 100%
|
||||||
|
|
||||||
;==============
|
;==============
|
||||||
; set up music
|
; set up music
|
||||||
|
@ -248,10 +250,6 @@ l4_timer_not_yet:
|
||||||
|
|
||||||
l4_level_over:
|
l4_level_over:
|
||||||
|
|
||||||
jsr disable_music
|
|
||||||
|
|
||||||
jsr outro_level1
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ do_level5:
|
||||||
|
|
||||||
; n/a
|
; n/a
|
||||||
|
|
||||||
|
lda #$10 ; BCD
|
||||||
|
sta PERCENT_NEEDED
|
||||||
|
|
||||||
;==============
|
;==============
|
||||||
; set up intro
|
; set up intro
|
||||||
|
@ -233,7 +235,7 @@ l5_level_over:
|
||||||
|
|
||||||
jsr disable_music
|
jsr disable_music
|
||||||
|
|
||||||
jsr outro_level1
|
jsr outro_level
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
|
@ -80,3 +80,14 @@ set_inverse:
|
||||||
rts
|
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
|
LEMMINGS_TO_RELEASE = $89
|
||||||
CURRENT_LEMMING = $8A
|
CURRENT_LEMMING = $8A
|
||||||
APPLEII_MODEL = $8B
|
APPLEII_MODEL = $8B
|
||||||
|
PERCENT_RESCUED_L = $8C
|
||||||
|
PERCENT_RESCUED_H = $8D
|
||||||
|
PERCENT_NEEDED = $8E
|
||||||
|
|
||||||
DOOR_X = $90 ; location of door
|
DOOR_X = $90 ; location of door
|
||||||
DOOR_Y = $91
|
DOOR_Y = $91
|
||||||
|
|
Loading…
Reference in New Issue