diff options
Diffstat (limited to 'jumpmanjr.dasm')
-rw-r--r-- | jumpmanjr.dasm | 261 |
1 files changed, 144 insertions, 117 deletions
diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm index 7cbfefe..691448d 100644 --- a/jumpmanjr.dasm +++ b/jumpmanjr.dasm @@ -1,5 +1,5 @@ ; da65 V2.15 - Git 104f898 -; Created: 2016-09-03 04:58:20 +; Created: 2016-09-03 16:04:40 ; Input file: jumpmanjr.rom ; Page: 1 @@ -23,6 +23,9 @@ dm_y_with_offset:= $00C7 ; graphics object Y offset, plus dm_delta_x := $00C9 ; see draw_map and level_maps.txt dm_delta_y := $00CA ; see draw_map and level_maps.txt zp_temp1 := $00CB ; used for (zp,y) addressing, also for checking console keys in vblank_imm_isr +num_in := $00D0 ; print_number input. 3-byte number (LSB first as usual) to be printed +num_out := $00D3 ; area of (screen) memory where print_number stores its output +num_color := $00D5 ; print_number adds this to numeric screencode output. normally 0, set to $80 on the end-of-game screen. FR1 := $00E0 VDSLST := $0200 VKEYBD := $0208 @@ -63,6 +66,7 @@ sfx_slot_duration:= $0646 sfx_slot_freq := $0647 sfx_slot_curpos := $064E ; address we've got to so far, playing this sfx sfx_tempo_tmp := $0661 ; ?? +num_tmp := $0665 ; temp used by print_number player_x_pos := $067E ; stored in HPOSP0 player_y_pos := $0683 ; $C6 is the bottom of the level (where you end up when you die) bullet_x_pos := $069B ; 4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles) @@ -103,6 +107,7 @@ number_of_players:= $06F4 ; 0 for single-player game, othe level := $06F6 speed_value := $06F9 ; decoded speed (1-8) current_player := $06FE ; *think* this ranges 1-4, not 0-3 +score_minus_one := $06FF score := $0700 lives := $070A bullet_flags := $0756 ; 4 bytes, 0 = bullet slot not in use, non-0 = bullet active @@ -129,7 +134,7 @@ work_level_bomblist:= $079A ; addr of list of bombs, indexed work_level_map_changes:= $079C ; address of list of addresses of map data, used for changing the map when certain bombs are picked up work_level_indirect_subs:= $079E ; pointer to list of indirect subs, always $0000 in this game work_level_sub_bomb:= $07A0 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine -work_level_sub_start:= $07A2 ; called at start of level, $06E6 for some levels, or else a ROM subroutine +work_level_init := $07A2 ; called at start of level, $06E6 for some levels, or else a ROM subroutine work_level_sub6 := $07A4 ; always $9740 aka game_main_loop work_level_sub_eol:= $07A6 ; called at end of level (all bombs picked up). $06E6 for all but level08 work_level_offs_40:= $07A8 ; all zeroes @@ -162,7 +167,7 @@ cur_level_bomblist:= $07DA ; addr of list of bombs, indexed cur_level_map_changes:= $07DC ; address of list of addresses of map data, used for changing the map when certain bombs are picked up cur_level_indirect_subs:= $07DE ; pointer to list of indirect subs, always $0000 in this game cur_level_sub_bomb:= $07E0 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine -cur_level_sub_start:= $07E2 ; called at start of level, $06E6 for some levels, or else a ROM subroutine +cur_level_init := $07E2 ; called at start of level, $06E6 for some levels, or else a ROM subroutine cur_level_sub6 := $07E4 ; always $9740 aka game_main_loop cur_level_sub_eol:= $07E6 ; called at end of level (all bombs picked up). $06E6 for all but level08 cur_level_offs_40:= $07E8 ; all zeroes @@ -240,9 +245,9 @@ cue_sfx_jv: jmp cue_sfx ; 8006 4C 55 82 LU. ; ---------------------------------------------------------------------------- -; gets called after the level is drawn & the intro music stops, and also during the level (?) -xxx_level_something_jv: - jmp xxx_level_something ; 8009 4C 00 86 L.. +; convert the 3-byte integer stored at num_in to screen codes, store into memory pointed to by num_out +print_number_jv: + jmp print_number ; 8009 4C 00 86 L.. ; ---------------------------------------------------------------------------- ; also adds extra life every 7500 points @@ -250,7 +255,9 @@ update_score_display_jv: jmp update_score_display ; 800C 4C BC 8C L.. ; ---------------------------------------------------------------------------- -L800F: jmp L867E ; 800F 4C 7E 86 L~. +; print remaining bonus time +print_bonus_jv: + jmp print_bonus ; 800F 4C 7E 86 L~. ; ---------------------------------------------------------------------------- ; bottom 2 GR.1 lines on the game board @@ -292,7 +299,9 @@ next_player_jv: jmp next_player ; 8027 4C AA 9A L.. ; ---------------------------------------------------------------------------- -L802A: jmp LBA00 ; 802A 4C 00 BA L.. +; calls draw_map, plays level intro music, shows level name +draw_level_jv: + jmp draw_level ; 802A 4C 00 BA L.. ; ---------------------------------------------------------------------------- level_finished_jv: @@ -314,10 +323,14 @@ special_init_jv: jmp special_init ; 8036 4C 23 8B L#. ; ---------------------------------------------------------------------------- - jmp L8B2D ; 8039 4C 2D 8B L-. +; special_init that doesn't clear memory. unused vector? +special_init_2_jv: + jmp special_init_2 ; 8039 4C 2D 8B L-. ; ---------------------------------------------------------------------------- -L803C: jmp L8AE0 ; 803C 4C E0 8A L.. +; show blank screen with empty display list +setup_blank_dlist_jv: + jmp setup_blank_dlist ; 803C 4C E0 8A L.. ; ---------------------------------------------------------------------------- ; 3 unused jump vectors, all pointed to the same RTS @@ -836,7 +849,7 @@ L8370: lda ($CD),y ; 8370 B1 CD init_hardware: ldx #$18 ; 837C A2 18 .. init_page6_loop: - lda page6_initial_vectors_minus_one+10,x; 837E BD DD 85 ... + lda page6_initial_vectors_minus_one,x; 837E BD DD 85 ... sta page6_vectors_minus_one,x ; 8381 9D FF 05 ... dex ; 8384 CA . bne init_page6_loop ; 8385 D0 F7 .. @@ -884,7 +897,7 @@ set_char_base: lda #$00 ; 83DE A9 00 .. sta VKEYBD ; 83E0 8D 08 02 ... sta SAVMSC ; 83E3 85 58 .X - sta $D5 ; 83E5 85 D5 .. + sta num_color ; 83E5 85 D5 .. lda #$30 ; 83E7 A9 30 .0 ; tell OS that screen memory starts at $3000 set_savmsc: @@ -1145,12 +1158,11 @@ data_table_85b6: movement_direction_table: .word $0000,$0000,$0000,$0000 ; 85BE 00 00 00 00 00 00 00 00 ........ .word $0000,$0101,$FF01,$0001 ; 85C6 00 00 01 01 01 FF 01 00 ........ - .word $0000,$01FF ; 85CE 00 00 FF 01 .... - .byte $FF ; 85D2 FF . + .word $0000,$01FF,$FFFF,$00FF ; 85CE 00 00 FF 01 FF FF FF 00 ........ + .word $0000,$0100,$FF00 ; 85D6 00 00 00 01 00 FF ...... + .byte $00 ; 85DC 00 . ; 1-indexed page6_initial_vectors_minus_one: - .word $FFFF,$0000,$0000,$0001 ; 85D3 FF FF 00 00 00 00 01 00 ........ - .word $00FF ; 85DB FF 00 .. .byte $00 ; 85DD 00 . ; copied into page 6 by init_hardware page6_initial_vectors: @@ -1172,88 +1184,94 @@ zero_filler_85f6: .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 85F6 00 00 00 00 00 00 00 00 ........ .byte $00,$00 ; 85FE 00 00 .. ; ---------------------------------------------------------------------------- -; gets called after the level is drawn & the intro music stops, and also during the level (?) -xxx_level_something: +; convert the 3-byte integer stored at num_in to screen codes, store into memory pointed to by num_out +print_number: ldx #$00 ; 8600 A2 00 .. ldy #$00 ; 8602 A0 00 .. - stx $0665 ; 8604 8E 65 06 .e. -L8607: lda #$10 ; 8607 A9 10 .. + stx num_tmp ; 8604 8E 65 06 .e. +; starts at 0, gets added to +next_digit: + lda #$10 ; 8607 A9 10 .. clc ; 8609 18 . - adc $D5 ; 860A 65 D5 e. - sta ($D3),y ; 860C 91 D3 .. + adc num_color ; 860A 65 D5 e. + sta (num_out),y ; 860C 91 D3 .. L860E: sec ; 860E 38 8 - lda $D0 ; 860F A5 D0 .. - sbc L8702,x ; 8611 FD 02 87 ... - sta $D0 ; 8614 85 D0 .. - lda $D1 ; 8616 A5 D1 .. - sbc L8703,x ; 8618 FD 03 87 ... - sta $D1 ; 861B 85 D1 .. - lda $D2 ; 861D A5 D2 .. - sbc L8704,x ; 861F FD 04 87 ... - sta $D2 ; 8622 85 D2 .. + lda num_in ; 860F A5 D0 .. + sbc pnum_subtractors,x ; 8611 FD 02 87 ... + sta num_in ; 8614 85 D0 .. + lda num_in+1 ; 8616 A5 D1 .. + sbc pnum_subtractors+1,x ; 8618 FD 03 87 ... + sta num_in+1 ; 861B 85 D1 .. + lda num_in+2 ; 861D A5 D2 .. + sbc pnum_subtractors+2,x ; 861F FD 04 87 ... + sta num_in+2 ; 8622 85 D2 .. bcc L8633 ; 8624 90 0D .. - lda ($D3),y ; 8626 B1 D3 .. + lda (num_out),y ; 8626 B1 D3 .. clc ; 8628 18 . adc #$01 ; 8629 69 01 i. - sta ($D3),y ; 862B 91 D3 .. - sta $0665 ; 862D 8D 65 06 .e. + sta (num_out),y ; 862B 91 D3 .. + sta num_tmp ; 862D 8D 65 06 .e. jmp L860E ; 8630 4C 0E 86 L.. ; ---------------------------------------------------------------------------- L8633: clc ; 8633 18 . - lda L8702,x ; 8634 BD 02 87 ... - adc $D0 ; 8637 65 D0 e. - sta $D0 ; 8639 85 D0 .. - lda L8703,x ; 863B BD 03 87 ... - adc $D1 ; 863E 65 D1 e. - sta $D1 ; 8640 85 D1 .. - lda L8704,x ; 8642 BD 04 87 ... - adc $D2 ; 8645 65 D2 e. - sta $D2 ; 8647 85 D2 .. - lda $0665 ; 8649 AD 65 06 .e. + lda pnum_subtractors,x ; 8634 BD 02 87 ... + adc num_in ; 8637 65 D0 e. + sta num_in ; 8639 85 D0 .. + lda pnum_subtractors+1,x ; 863B BD 03 87 ... + adc num_in+1 ; 863E 65 D1 e. + sta num_in+1 ; 8640 85 D1 .. + lda pnum_subtractors+2,x ; 8642 BD 04 87 ... + adc num_in+2 ; 8645 65 D2 e. + sta num_in+2 ; 8647 85 D2 .. + lda num_tmp ; 8649 AD 65 06 .e. bne L865C ; 864C D0 0E .. - lda ($D3),y ; 864E B1 D3 .. + lda (num_out),y ; 864E B1 D3 .. and #$0F ; 8650 29 0F ). bne L865C ; 8652 D0 08 .. cpy #$05 ; 8654 C0 05 .. - beq L8667 ; 8656 F0 0F .. + beq pnum_done ; 8656 F0 0F .. lda #$00 ; 8658 A9 00 .. - sta ($D3),y ; 865A 91 D3 .. + sta (num_out),y ; 865A 91 D3 .. L865C: cpx #$0F ; 865C E0 0F .. - beq L8667 ; 865E F0 07 .. + beq pnum_done ; 865E F0 07 .. inx ; 8660 E8 . inx ; 8661 E8 . inx ; 8662 E8 . iny ; 8663 C8 . - jmp L8607 ; 8664 4C 07 86 L.. + jmp next_digit ; 8664 4C 07 86 L.. ; ---------------------------------------------------------------------------- -L8667: rts ; 8667 60 ` +pnum_done: + rts ; 8667 60 ` ; ---------------------------------------------------------------------------- -L8668: lda #$F5 ; 8668 A9 F5 .. - sta $D3 ; 866A 85 D3 .. +print_score: + lda #$F5 ; 8668 A9 F5 .. + sta num_out ; 866A 85 D3 .. lda #$3D ; 866C A9 3D .= - sta $D4 ; 866E 85 D4 .. + sta num_out+1 ; 866E 85 D4 .. ldx #$03 ; 8670 A2 03 .. -L8672: lda $06FF,x ; 8672 BD FF 06 ... +ps_loop:lda score_minus_one,x ; 8672 BD FF 06 ... sta $CF,x ; 8675 95 CF .. dex ; 8677 CA . - bne L8672 ; 8678 D0 F8 .. - jsr xxx_level_something ; 867A 20 00 86 .. + bne ps_loop ; 8678 D0 F8 .. + jsr print_number ; 867A 20 00 86 .. rts ; 867D 60 ` ; ---------------------------------------------------------------------------- -L867E: lda #$09 ; 867E A9 09 .. - sta $D3 ; 8680 85 D3 .. +; print remaining bonus time; work_level_points_per_bomb should read work_level_time_bonus-1 +print_bonus: + lda #$09 ; 867E A9 09 .. + sta num_out ; 8680 85 D3 .. lda #$3E ; 8682 A9 3E .> - sta $D4 ; 8684 85 D4 .. + sta num_out+1 ; 8684 85 D4 .. ldx #$03 ; 8686 A2 03 .. -L8688: lda work_level_points_per_bomb,x ; 8688 BD 90 07 ... +pb_loop:lda work_level_points_per_bomb,x ; 8688 BD 90 07 ... sta $CF,x ; 868B 95 CF .. dex ; 868D CA . - bne L8688 ; 868E D0 F8 .. - jsr xxx_level_something ; 8690 20 00 86 .. + bne pb_loop ; 868E D0 F8 .. + jsr print_number ; 8690 20 00 86 .. rts ; 8693 60 ` ; ---------------------------------------------------------------------------- @@ -1290,8 +1308,8 @@ L86BF: cpy #$07 ; 86BF C0 07 bne L86BF ; 86CC D0 F1 .. L86CE: lda #$CB ; 86CE A9 CB .. sta $3DFC,y ; 86D0 99 FC 3D ..= -L86D3: jsr L8668 ; 86D3 20 68 86 h. - jsr L867E ; 86D6 20 7E 86 ~. +L86D3: jsr print_score ; 86D3 20 68 86 h. + jsr print_bonus ; 86D6 20 7E 86 ~. L86D9: rts ; 86D9 60 ` ; ---------------------------------------------------------------------------- @@ -1301,10 +1319,11 @@ data_table_86da: .byte $20,$20,$20,$20,$20,$20,$20,$20 ; 86EA 20 20 20 20 20 20 20 20 .byte $20,$20,$20,$20,$C2,$CF,$CE,$D5 ; 86F2 20 20 20 20 C2 CF CE D5 .... .byte $D3,$20,$20,$20,$20,$20,$20,$20 ; 86FA D3 20 20 20 20 20 20 20 . -L8702: .byte $A0 ; 8702 A0 . -L8703: .byte $86 ; 8703 86 . -L8704: .byte $01,$10,$27,$00,$E8,$03,$00,$64 ; 8704 01 10 27 00 E8 03 00 64 ..'....d - .byte $00,$00,$0A,$00,$00,$01,$00,$00 ; 870C 00 00 0A 00 00 01 00 00 ........ +; 3 bytes per table entry +pnum_subtractors: + .byte $A0,$86,$01,$10,$27,$00,$E8,$03 ; 8702 A0 86 01 10 27 00 E8 03 ....'... + .byte $00,$64,$00,$00,$0A,$00,$00,$01 ; 870A 00 64 00 00 0A 00 00 01 .d...... + .byte $00,$00 ; 8712 00 00 .. ; ---------------------------------------------------------------------------- ; clear the gameboard screen memory (called before drawing a level, natch) clear_screen_mem: @@ -1816,7 +1835,9 @@ init_loop: blank_dlist_8add: .byte $41,$DD,$8A ; 8ADD 41 DD 8A A.. ; ---------------------------------------------------------------------------- -L8AE0: lda #$EB ; 8AE0 A9 EB .. +; show blank screen with empty display list +setup_blank_dlist: + lda #$EB ; 8AE0 A9 EB .. sta dlist_shadow_lo ; 8AE2 8D AC 06 ... lda #$8A ; 8AE5 A9 8A .. sta dlist_shadow_hi ; 8AE7 8D AD 06 ... @@ -1846,10 +1867,14 @@ zero_filler_8b00: special_init: ldx #$20 ; 8B23 A2 20 . lda #$00 ; 8B25 A9 00 .. -L8B27: sta bullet_y_delta+1,x ; 8B27 9D 5F 07 ._. +; clear memory from $0760 to $077f +si_clear: + sta bullet_y_delta+1,x ; 8B27 9D 5F 07 ._. dex ; 8B2A CA . - bne L8B27 ; 8B2B D0 FA .. -L8B2D: lda work_level_unkn_table0 ; 8B2D AD 94 07 ... + bne si_clear ; 8B2B D0 FA .. +; special_init that doesn't clear memory. does anything use this entry point? +special_init_2: + lda work_level_unkn_table0 ; 8B2D AD 94 07 ... sta $AC ; 8B30 85 AC .. lda work_level_unkn_table0+1 ; 8B32 AD 95 07 ... sta $AD ; 8B35 85 AD .. @@ -1914,7 +1939,7 @@ L8B91: lda scores_msg,x ; 8B91 BD 7B 8C ldx #$03 ; 8BA0 A2 03 .. lda lives ; 8BA2 AD 0A 07 ... sta $0713,y ; 8BA5 99 13 07 ... -L8BA8: lda $06FF,x ; 8BA8 BD FF 06 ... +L8BA8: lda score_minus_one,x ; 8BA8 BD FF 06 ... sta $070B,y ; 8BAB 99 0B 07 ... dey ; 8BAE 88 . dex ; 8BAF CA . @@ -1962,19 +1987,19 @@ not_alive: sta $AF ; 8BED 85 AF .. no_cross: lda L8C84,x ; 8BEF BD 84 8C ... - sta $D3 ; 8BF2 85 D3 .. + sta num_out ; 8BF2 85 D3 .. lda #$30 ; 8BF4 A9 30 .0 - sta $D4 ; 8BF6 85 D4 .. + sta num_out+1 ; 8BF6 85 D4 .. ldx #$03 ; 8BF8 A2 03 .. L8BFA: lda $070B,y ; 8BFA B9 0B 07 ... sta $CF,x ; 8BFD 95 CF .. dey ; 8BFF 88 . dex ; 8C00 CA . bne L8BFA ; 8C01 D0 F7 .. - jsr xxx_level_something_jv ; 8C03 20 09 80 .. + jsr print_number_jv ; 8C03 20 09 80 .. lda $AF ; 8C06 A5 AF .. iny ; 8C08 C8 . - sta ($D3),y ; 8C09 91 D3 .. + sta (num_out),y ; 8C09 91 D3 .. ldy $AD ; 8C0B A4 AD .. dec $AE ; 8C0D C6 AE .. bne show_reyalp_msg ; 8C0F D0 AF .. @@ -2072,7 +2097,7 @@ zero_filler_8cb4: ; also adds extra life every 7500 points update_score_display: ldx #$03 ; 8CBC A2 03 .. -L8CBE: lda $06FF,x ; 8CBE BD FF 06 ... +L8CBE: lda score_minus_one,x ; 8CBE BD FF 06 ... cmp score+2,x ; 8CC1 DD 02 07 ... bcc L8CFA ; 8CC4 90 34 .4 beq L8CCB ; 8CC6 F0 03 .. @@ -2246,7 +2271,7 @@ check_bonus_0: bcs bonus_lt_256 ; 8DE2 B0 03 .. dec work_level_time_bonus+1 ; 8DE4 CE 92 07 ... bonus_lt_256: - jsr L800F ; 8DE7 20 0F 80 .. + jsr print_bonus_jv ; 8DE7 20 0F 80 .. lda #$FA ; 8DEA A9 FA .. sta sfx_slot_tempo ; 8DEC 8D 3E 06 .>. lda #$8D ; 8DEF A9 8D .. @@ -2265,8 +2290,8 @@ level_finished: sta player_speed ; 8E02 8D 24 06 .$. sta $067F ; 8E05 8D 7F 06 ... lda #$80 ; 8E08 A9 80 .. - sta $D5 ; 8E0A 85 D5 .. - jsr L800F ; 8E0C 20 0F 80 .. + sta num_color ; 8E0A 85 D5 .. + jsr print_bonus_jv ; 8E0C 20 0F 80 .. ; score += time_bonus; add_time_bonus: clc ; 8E0F 18 . @@ -2280,7 +2305,7 @@ add_time_bonus: inc score+2 ; 8E24 EE 02 07 ... lt_64k: lda #$00 ; 8E27 A9 00 .. sta AUDF1 ; 8E29 8D 00 D2 ... - sta $D5 ; 8E2C 85 D5 .. + sta num_color ; 8E2C 85 D5 .. sta AUDC1 ; 8E2E 8D 01 D2 ... sta jiffy_timer_1 ; 8E31 8D 1A 06 ... sta playing_level ; 8E34 8D 27 06 .'. @@ -3037,7 +3062,7 @@ wait_opt_key_sfx: get_player_speeds: lda $B8 ; 94DE A5 B8 .. sta $B9 ; 94E0 85 B9 .. - sta $06FF ; 94E2 8D FF 06 ... + sta score_minus_one ; 94E2 8D FF 06 ... sta number_of_players ; 94E5 8D F4 06 ... lda #$00 ; 94E8 A9 00 .. sta $B8 ; 94EA 85 B8 .. @@ -3107,8 +3132,8 @@ display_speed: inc $B8 ; 954A E6 B8 .. dec $BA ; 954C C6 BA .. bne init_speed ; 954E D0 DA .. - inc $06FF ; 9550 EE FF 06 ... - lda $06FF ; 9553 AD FF 06 ... + inc score_minus_one ; 9550 EE FF 06 ... + lda score_minus_one ; 9553 AD FF 06 ... sta current_player ; 9556 8D FE 06 ... inc current_player ; 9559 EE FE 06 ... jmp afterlife ; 955C 4C 00 96 L.. @@ -3245,9 +3270,9 @@ copy_level_desc_2: bne copy_level_desc_2 ; 9680 D0 F5 .. ; call start subroutine for current level init_level: - lda work_level_sub_start ; 9682 AD A2 07 ... + lda work_level_init ; 9682 AD A2 07 ... sta $06E1 ; 9685 8D E1 06 ... - lda work_level_sub_start+1 ; 9688 AD A3 07 ... + lda work_level_init+1 ; 9688 AD A3 07 ... sta $06E2 ; 968B 8D E2 06 ... jsr L06E0 ; 968E 20 E0 06 .. ; set color regs from level descriptor (COLOR4 always $00, black) @@ -3294,7 +3319,7 @@ sl_loop:lda ($D7),y ; 96D8 B1 D7 iny ; 96DD C8 . cpy #$40 ; 96DE C0 40 .@ bne sl_loop ; 96E0 D0 F6 .. - jsr L802A ; 96E2 20 2A 80 *. + jsr draw_level_jv ; 96E2 20 2A 80 *. rts ; 96E5 60 ` ; ---------------------------------------------------------------------------- @@ -3837,7 +3862,7 @@ next_player: ; wraparound to 1 if > total players next_player_num: inc current_player ; 9AB8 EE FE 06 ... - lda $06FF ; 9ABB AD FF 06 ... + lda score_minus_one ; 9ABB AD FF 06 ... cmp current_player ; 9ABE CD FE 06 ... bcs look_for_alive ; 9AC1 B0 08 .. lda #$01 ; 9AC3 A9 01 .. @@ -3863,7 +3888,7 @@ is_player_dead: ; ---------------------------------------------------------------------------- ; if player hasn't been eliminated, but is out of lives, eliminate him check_lives: - stx $06FF ; 9AE5 8E FF 06 ... + stx score_minus_one ; 9AE5 8E FF 06 ... jsr mul_player_11 ; 9AE8 20 7C 9A |. jsr load_struct_player ; 9AEB 20 9B 9A .. lda lives ; 9AEE AD 0A 07 ... @@ -4291,7 +4316,7 @@ level01_indirect_subs: level01_sub_bomb: .addr L06E6 ; A020 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level01_sub_start: +level01_init: .addr L06E6 ; A022 E6 06 .. ; always $9740 aka game_main_loop level01_sub6: @@ -4398,7 +4423,7 @@ level02_indirect_subs: level02_sub_bomb: .addr electrocution_bomb_pickup ; A060 98 A4 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level02_sub_start: +level02_init: .addr special_init_jv ; A062 36 80 6. ; always $9740 aka game_main_loop level02_sub6: @@ -4505,7 +4530,7 @@ level03_indirect_subs: level03_sub_bomb: .addr L06E6 ; A0A0 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level03_sub_start: +level03_init: .addr dumbwaiter_setup ; A0A2 8C A6 .. ; always $9740 aka game_main_loop level03_sub6: @@ -4612,7 +4637,7 @@ level04_indirect_subs: level04_sub_bomb: .addr L06E6 ; A0E0 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level04_sub_start: +level04_init: .addr special_init_jv ; A0E2 36 80 6. ; always $9740 aka game_main_loop level04_sub6: @@ -4719,7 +4744,7 @@ level05_indirect_subs: level05_sub_bomb: .addr L06E6 ; A120 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level05_sub_start: +level05_init: .addr L06E6 ; A122 E6 06 .. ; always $9740 aka game_main_loop level05_sub6: @@ -4826,7 +4851,7 @@ level06_indirect_subs: level06_sub_bomb: .addr walls_bomb_sub ; A160 73 AA s. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level06_sub_start: +level06_init: .addr walls_init ; A162 C6 A9 .. ; always $9740 aka game_main_loop level06_sub6: @@ -4933,7 +4958,7 @@ level07_indirect_subs: level07_sub_bomb: .addr L06E6 ; A1A0 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level07_sub_start: +level07_init: .addr special_init_jv ; A1A2 36 80 6. ; always $9740 aka game_main_loop level07_sub6: @@ -5040,7 +5065,7 @@ level08_indirect_subs: level08_sub_bomb: .addr spellbound_bomb_sub ; A1E0 23 AF #. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level08_sub_start: +level08_init: .addr spellbound_init ; A1E2 9B AE .. ; always $9740 aka game_main_loop level08_sub6: @@ -5147,7 +5172,7 @@ level09_indirect_subs: level09_sub_bomb: .addr blackout_bomb_sub ; A220 21 B1 !. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level09_sub_start: +level09_init: .addr blackout_init ; A222 C4 B0 .. ; always $9740 aka game_main_loop level09_sub6: @@ -5254,7 +5279,7 @@ level10_indirect_subs: level10_sub_bomb: .addr herethere_bomb_sub ; A260 FD B2 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level10_sub_start: +level10_init: .addr special_init_jv ; A262 36 80 6. ; always $9740 aka game_main_loop level10_sub6: @@ -5361,7 +5386,7 @@ level11_indirect_subs: level11_sub_bomb: .addr hatch_bomb_sub ; A2A0 4C B4 L. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level11_sub_start: +level11_init: .addr special_init_jv ; A2A2 36 80 6. ; always $9740 aka game_main_loop level11_sub6: @@ -5468,7 +5493,7 @@ level12_indirect_subs: level12_sub_bomb: .addr L06E6 ; A2E0 E6 06 .. ; called at start of level, $06E6 for some levels, or else a ROM subroutine -level12_sub_start: +level12_init: .addr special_init_jv ; A2E2 36 80 6. ; always $9740 aka game_main_loop level12_sub6: @@ -7162,7 +7187,7 @@ score_mod_1m: sbc #$0F ; B7E9 E9 0F .. sta score+2 ; B7EB 8D 02 07 ... score_below_1m: - jmp L8668 ; B7EE 4C 68 86 Lh. + jmp print_score ; B7EE 4C 68 86 Lh. ; ---------------------------------------------------------------------------- zero_filler_b7f1: @@ -7181,21 +7206,21 @@ end_of_level_bonus: sta $A6 ; B812 85 A6 .. inc $A6 ; B814 E6 A6 .. lda $A4 ; B816 A5 A4 .. - sta $D0 ; B818 85 D0 .. + sta num_in ; B818 85 D0 .. lda $A5 ; B81A A5 A5 .. - sta $D1 ; B81C 85 D1 .. + sta num_in+1 ; B81C 85 D1 .. lda #$00 ; B81E A9 00 .. sta work_level_time_bonus ; B820 8D 91 07 ... - sta $D2 ; B823 85 D2 .. + sta num_in+2 ; B823 85 D2 .. sta work_level_time_bonus+1 ; B825 8D 92 07 ... lda #$E9 ; B828 A9 E9 .. - sta $D3 ; B82A 85 D3 .. + sta num_out ; B82A 85 D3 .. lda #$3D ; B82C A9 3D .= - sta $D4 ; B82E 85 D4 .. - jsr xxx_level_something_jv ; B830 20 09 80 .. + sta num_out+1 ; B82E 85 D4 .. + jsr print_number_jv ; B830 20 09 80 .. lda #$78 ; B833 A9 78 .x sta $3DE9 ; B835 8D E9 3D ..= - jsr L800F ; B838 20 0F 80 .. + jsr print_bonus_jv ; B838 20 0F 80 .. add_life_bonus: clc ; B83B 18 . lda score ; B83C AD 00 07 ... @@ -7214,7 +7239,7 @@ LB851: clc ; B851 18 adc $A5 ; B85D 65 A5 e. sta work_level_time_bonus+1 ; B85F 8D 92 07 ... jsr update_score_display_jv ; B862 20 0C 80 .. - jsr L800F ; B865 20 0F 80 .. + jsr print_bonus_jv ; B865 20 0F 80 .. ; play once per life play_life_bonus_sfx: lda #$96 ; B868 A9 96 .. @@ -7355,7 +7380,9 @@ LB9EC: ldy #$2F ; B9EC A0 2F rts ; B9FF 60 ` ; ---------------------------------------------------------------------------- -LBA00: lda #$40 ; BA00 A9 40 .@ +; calls draw_map, plays level intro music, shows level name +draw_level: + lda #$40 ; BA00 A9 40 .@ sta NMIEN ; BA02 8D 0E D4 ... lda #$00 ; BA05 A9 00 .. sta COLOR3 ; BA07 8D C7 02 ... @@ -7495,7 +7522,7 @@ level_name_hscrol_table: ; ---------------------------------------------------------------------------- ; the WELL DONE screen, when you beat all the levels. after this, the game plays random levels. well_done_screen: - jsr L803C ; BC00 20 3C 80 <. + jsr setup_blank_dlist_jv ; BC00 20 3C 80 <. jsr enable_joystick_jv ; BC03 20 1B 80 .. jsr clear_screen_mem_jv ; BC06 20 1E 80 .. lda #$00 ; BC09 A9 00 .. @@ -7569,15 +7596,15 @@ LBCA3: lda total_score_msg_minus_one,x ; BCA3 BD D1 BD dex ; BCA9 CA . bne LBCA3 ; BCAA D0 F7 .. lda #$3D ; BCAC A9 3D .= - sta $D4 ; BCAE 85 D4 .. + sta num_out+1 ; BCAE 85 D4 .. lda #$F5 ; BCB0 A9 F5 .. - sta $D3 ; BCB2 85 D3 .. + sta num_out ; BCB2 85 D3 .. ldx #$03 ; BCB4 A2 03 .. -LBCB6: lda $06FF,x ; BCB6 BD FF 06 ... +LBCB6: lda score_minus_one,x ; BCB6 BD FF 06 ... sta $CF,x ; BCB9 95 CF .. dex ; BCBB CA . bne LBCB6 ; BCBC D0 F8 .. - jsr xxx_level_something_jv ; BCBE 20 09 80 .. + jsr print_number_jv ; BCBE 20 09 80 .. LBCC1: lda $0663 ; BCC1 AD 63 06 .c. bne LBCC1 ; BCC4 D0 FB .. lda level ; BCC6 AD F6 06 ... |