diff options
-rw-r--r-- | jumpmanjr.dasm | 224 | ||||
-rw-r--r-- | jumpmanjr.info | 79 | ||||
-rw-r--r-- | main.info | 79 |
3 files changed, 221 insertions, 161 deletions
diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm index 691448d..3b1adfc 100644 --- a/jumpmanjr.dasm +++ b/jumpmanjr.dasm @@ -1,5 +1,5 @@ ; da65 V2.15 - Git 104f898 -; Created: 2016-09-03 16:04:40 +; Created: 2016-09-03 18:32:45 ; Input file: jumpmanjr.rom ; Page: 1 @@ -11,8 +11,10 @@ L0000 := $0000 dm_ypos := $0054 ; see draw_map and level_maps.txt dm_xpos := $0055 ; see draw_map and level_maps.txt SAVMSC := $0058 ; OS's idea of the start of screen memory [redundant to set here?] +bomb_idx := $00B2 ; bomb that was just picked up (times 2, suitable for index into a table of words) blistptr := $00B4 ; bomb_pickup: points to current level's bomblist bombloc := $00B6 ; bomb_pickup: position of the bomb Jumpman just touched, on 8x8 coarse grid +sa_tmp_1 := $00BD ; used by calc_screen_addr dm_count := $00BE ; graphics object definition is this long dm_length := $00BF ; see draw_map and level_maps.txt dm_progctr := $00C0 ; see draw_map and level_maps.txt @@ -20,6 +22,7 @@ dm_objptr := $00C2 ; see draw_map and level_maps.tx dm_screen_addr := $00C4 ; points to byte to write gfx data to dm_x_with_offset:= $00C6 ; graphics object X offset, plus dm_xpos dm_y_with_offset:= $00C7 ; graphics object Y offset, plus dm_xpos +sa_tmp_2 := $00C8 ; used by calc_screen_addr 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 @@ -108,8 +111,12 @@ 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 +score := $0700 ; aka work_user, 11 bytes lives := $070A +struct_user_1 := $070B ; 11 bytes +struct_user_2 := $0716 ; 11 bytes +struct_user_3 := $0721 ; 11 bytes +struct_user_4 := $072C ; 11 bytes bullet_flags := $0756 ; 4 bytes, 0 = bullet slot not in use, non-0 = bullet active bullet_x_delta := $075A ; 4 bytes bullet_y_delta := $075E ; 4 bytes @@ -290,8 +297,8 @@ decrement_time_bonus_jv: jmp decrement_time_bonus ; 8021 4C CE 8D L.. ; ---------------------------------------------------------------------------- -init_page_7_jv: - jmp init_page_7 ; 8024 4C 5C 9A L\. +init_struct_users_jv: + jmp init_struct_users ; 8024 4C 5C 9A L\. ; ---------------------------------------------------------------------------- ; used in multiplayer games, also called in single player (?) @@ -463,64 +470,67 @@ dm_obj_to_screen: ; calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr calc_screen_addr: lda #$28 ; 80D0 A9 28 .( - sta $BD ; 80D2 85 BD .. + sta sa_tmp_1 ; 80D2 85 BD .. lda #$00 ; 80D4 A9 00 .. sta dm_screen_addr ; 80D6 85 C4 .. ldx #$08 ; 80D8 A2 08 .. -L80DA: lsr $BD ; 80DA 46 BD F. +mul40_loop: + lsr sa_tmp_1 ; 80DA 46 BD F. bcc L80E1 ; 80DC 90 03 .. clc ; 80DE 18 . adc dm_y_with_offset ; 80DF 65 C7 e. L80E1: ror a ; 80E1 6A j ror dm_screen_addr ; 80E2 66 C4 f. dex ; 80E4 CA . - bne L80DA ; 80E5 D0 F3 .. + bne mul40_loop ; 80E5 D0 F3 .. clc ; 80E7 18 . adc SAVMSC+1 ; 80E8 65 59 eY sta dm_screen_addr+1 ; 80EA 85 C5 .. lda dm_x_with_offset ; 80EC A5 C6 .. lsr a ; 80EE 4A J - ror $C8 ; 80EF 66 C8 f. + ror sa_tmp_2 ; 80EF 66 C8 f. lsr a ; 80F1 4A J - ror $C8 ; 80F2 66 C8 f. + ror sa_tmp_2 ; 80F2 66 C8 f. clc ; 80F4 18 . adc dm_screen_addr ; 80F5 65 C4 e. sta dm_screen_addr ; 80F7 85 C4 .. - bcc L80FD ; 80F9 90 02 .. + bcc sa_hi_ok_1 ; 80F9 90 02 .. inc dm_screen_addr+1 ; 80FB E6 C5 .. -L80FD: asl $C8 ; 80FD 06 C8 .. +sa_hi_ok_1: + asl sa_tmp_2 ; 80FD 06 C8 .. rol a ; 80FF 2A * - asl $C8 ; 8100 06 C8 .. + asl sa_tmp_2 ; 8100 06 C8 .. rol a ; 8102 2A * and #$03 ; 8103 29 03 ). - sta $C8 ; 8105 85 C8 .. + sta sa_tmp_2 ; 8105 85 C8 .. L8107: lda (dm_objptr),y ; 8107 B1 C2 .. - sta $BD ; 8109 85 BD .. - lda $C8 ; 810B A5 C8 .. - lsr $BD ; 810D 46 BD F. + sta sa_tmp_1 ; 8109 85 BD .. + lda sa_tmp_2 ; 810B A5 C8 .. + lsr sa_tmp_1 ; 810D 46 BD F. rol a ; 810F 2A * - lsr $BD ; 8110 46 BD F. + lsr sa_tmp_1 ; 8110 46 BD F. rol a ; 8112 2A * - sta $BD ; 8113 85 BD .. + sta sa_tmp_1 ; 8113 85 BD .. iny ; 8115 C8 . tya ; 8116 98 . pha ; 8117 48 H ldy #$00 ; 8118 A0 00 .. - ldx $C8 ; 811A A6 C8 .. + ldx sa_tmp_2 ; 811A A6 C8 .. lda (dm_screen_addr),y ; 811C B1 C4 .. and gr7_and_masks,x ; 811E 3D 53 81 =S. - ldx $BD ; 8121 A6 BD .. + ldx sa_tmp_1 ; 8121 A6 BD .. ora gr7_or_masks,x ; 8123 1D 43 81 .C. sta (dm_screen_addr),y ; 8126 91 C4 .. pla ; 8128 68 h tay ; 8129 A8 . - inc $C8 ; 812A E6 C8 .. - lda $C8 ; 812C A5 C8 .. + inc sa_tmp_2 ; 812A E6 C8 .. + lda sa_tmp_2 ; 812C A5 C8 .. cmp #$04 ; 812E C9 04 .. bcc L813C ; 8130 90 0A .. lda #$00 ; 8132 A9 00 .. - sta $C8 ; 8134 85 C8 .. + sta sa_tmp_2 ; 8134 85 C8 .. inc dm_screen_addr ; 8136 E6 C4 .. +sa_hi_ok_2: bne L813C ; 8138 D0 02 .. inc dm_screen_addr+1 ; 813A E6 C5 .. L813C: dec dm_count ; 813C C6 BE .. @@ -1465,10 +1475,10 @@ bomb_found: sta $B1 ; 87E8 85 B1 .. ; multiply Y by 1.5 (only works because Y will always be even at this point) mul_y: tya ; 87EA 98 . - sta $B2 ; 87EB 85 B2 .. + sta bomb_idx ; 87EB 85 B2 .. lsr a ; 87ED 4A J clc ; 87EE 18 . - adc $B2 ; 87EF 65 B2 e. + adc bomb_idx ; 87EF 65 B2 e. tay ; 87F1 A8 . ; store actual bomb coordinates (not the coarse ones) for bomb subs to use store_bomb_coords: @@ -1483,7 +1493,7 @@ store_bomb_coords: sta sfx_ptr+1 ; 8804 8D 3D 06 .=. lda #$08 ; 8807 A9 08 .. jsr cue_sfx_jv ; 8809 20 06 80 .. - ldy $B2 ; 880C A4 B2 .. + ldy bomb_idx ; 880C A4 B2 .. iny ; 880E C8 . lda (blistptr),y ; 880F B1 B4 .. beq call_bomb_sub ; 8811 F0 43 .C @@ -1507,7 +1517,7 @@ change_map: jsr draw_map_jv ; 882E 20 00 80 .. ; see if this bomb calls an indirect sub (none of them do in this game, this is useless code) check_ind_sub: - ldy $B2 ; 8831 A4 B2 .. + ldy bomb_idx ; 8831 A4 B2 .. iny ; 8833 C8 . lda (blistptr),y ; 8834 B1 B4 .. beq call_bomb_sub ; 8836 F0 1E .. @@ -1922,7 +1932,7 @@ pcolor0_table: .byte $07,$00,$01,$02,$03 ; 8B7B 07 00 01 02 03 ..... ; ---------------------------------------------------------------------------- ; show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI -player_scores_screen: +end_scores_screen: lda #$40 ; 8B80 A9 40 .@ sta NMIEN ; 8B82 8D 0E D4 ... lda #$82 ; 8B85 A9 82 .. @@ -1935,12 +1945,12 @@ L8B91: lda scores_msg,x ; 8B91 BD 7B 8C dex ; 8B97 CA . bne L8B91 ; 8B98 D0 F7 .. ldx current_player ; 8B9A AE FE 06 ... - ldy struct_player_lives_offsets_minus_one,x; 8B9D BC 88 8C ... + ldy struct_user_lives_offsets_minus_one,x; 8B9D BC 88 8C ... ldx #$03 ; 8BA0 A2 03 .. lda lives ; 8BA2 AD 0A 07 ... sta $0713,y ; 8BA5 99 13 07 ... L8BA8: lda score_minus_one,x ; 8BA8 BD FF 06 ... - sta $070B,y ; 8BAB 99 0B 07 ... + sta struct_user_1,y ; 8BAB 99 0B 07 ... dey ; 8BAE 88 . dex ; 8BAF CA . bne L8BA8 ; 8BB0 D0 F6 .. @@ -1957,7 +1967,7 @@ show_reyalp_msg: reyalp_msg_loop: lda reyalp_msg_minus_one,x ; 8BC2 BD 67 8C .g. sta $3028,y ; 8BC5 99 28 30 .(0 -; replace 10th char with the ASCII player number +; replace 10th char with the ASCII player (user) number check_10th: cpx #$0A ; 8BC8 E0 0A .. bne continue_loop ; 8BCA D0 09 .. @@ -1971,14 +1981,14 @@ continue_loop: bne reyalp_msg_loop ; 8BD7 D0 E9 .. sty $AD ; 8BD9 84 AD .. ldx $AA ; 8BDB A6 AA .. - ldy struct_player_lives_offsets_minus_one,x; 8BDD BC 88 8C ... + ldy struct_user_lives_offsets_minus_one,x; 8BDD BC 88 8C ... lda #$00 ; 8BE0 A9 00 .. ; $AF is the character to show after the score (space for alive, cross for dead) store_space: sta $AF ; 8BE2 85 AF .. lda $0713,y ; 8BE4 B9 13 07 ... cmp #$FF ; 8BE7 C9 FF .. -; player still has lives left? +; user still has lives left? check_alive: bne no_cross ; 8BE9 D0 04 .. ; no, show a cross instead of a space @@ -1991,7 +2001,7 @@ no_cross: lda #$30 ; 8BF4 A9 30 .0 sta num_out+1 ; 8BF6 85 D4 .. ldx #$03 ; 8BF8 A2 03 .. -L8BFA: lda $070B,y ; 8BFA B9 0B 07 ... +L8BFA: lda struct_user_1,y ; 8BFA B9 0B 07 ... sta $CF,x ; 8BFD 95 CF .. dey ; 8BFF 88 . dex ; 8C00 CA . @@ -2046,7 +2056,7 @@ scores_screen_dlist: .byte $87,$10,$07,$41,$52 ; 8C62 87 10 07 41 52 ...AR reyalp_msg_minus_one: .byte $8C ; 8C67 8C . -; player spelled backwards: ' 0 # REYALP ' +; PLAYER spelled backwards: ' 0 # REYALP ' reyalp_msg: .byte $80,$80,$10,$80,$80,$80,$80,$80 ; 8C68 80 80 10 80 80 80 80 80 ........ .byte $80,$80,$03,$80,$32,$25,$39,$21 ; 8C70 80 80 03 80 32 25 39 21 ....2%9! @@ -2061,10 +2071,10 @@ L8C84: .byte $8C ; 8C84 8C ; offsets into screen memory, column 12, rows 2 3 4 5, used by code at $8BEF, loaded in $d3, hi byte in $d4 is $30 score_offsets: .byte $34,$48,$5C ; 8C85 34 48 5C 4H\ -struct_player_lives_offsets_minus_one: +struct_user_lives_offsets_minus_one: .byte $70 ; 8C88 70 p -; lookup table, offset from $713 to lives for indexed player -struct_player_lives_offsets: +; lookup table, offset from $713 to lives for indexed user +struct_user_lives_offsets: .byte $02,$0D,$18,$23 ; 8C89 02 0D 18 23 ...# ; ---------------------------------------------------------------------------- ; used by score screen @@ -2183,7 +2193,7 @@ well_done_scores: lda #$00 ; 8D52 A9 00 .. sta AUDF1 ; 8D54 8D 00 D2 ... sta AUDC1 ; 8D57 8D 01 D2 ... - jsr player_scores_screen ; 8D5A 20 80 8B .. + jsr end_scores_screen ; 8D5A 20 80 8B .. jmp afterlife ; 8D5D 4C 00 96 L.. ; ---------------------------------------------------------------------------- @@ -2232,7 +2242,7 @@ L8DA0: lda level ; 8DA0 AD F6 06 L8DAA: jsr well_done_screen ; 8DAA 20 00 BC .. lda #$04 ; 8DAD A9 04 .. sta $0688 ; 8DAF 8D 88 06 ... - jsr player_scores_screen ; 8DB2 20 80 8B .. + jsr end_scores_screen ; 8DB2 20 80 8B .. jmp afterlife ; 8DB5 4C 00 96 L.. ; ---------------------------------------------------------------------------- @@ -2256,7 +2266,7 @@ store_audc: zero_filler_8dcd: .byte $00 ; 8DCD 00 . ; ---------------------------------------------------------------------------- -; bonus -= 100; +; bonus -= 100, play sfx_bonus_tick decrement_time_bonus: lda work_level_time_bonus ; 8DCE AD 91 07 ... ora work_level_time_bonus+1 ; 8DD1 0D 92 07 ... @@ -2282,7 +2292,8 @@ dec_done: rts ; 8DF9 60 ` ; ---------------------------------------------------------------------------- -data_8dfa: +; played when bonus timer is decremented +sfx_bonus_tick: .byte $01,$A5,$00,$18,$03,$00 ; 8DFA 01 A5 00 18 03 00 ...... ; ---------------------------------------------------------------------------- level_finished: @@ -2955,7 +2966,7 @@ anp_clear_loop: ldx #$2C ; 9416 A2 2C ., ; copy NUMBER OF PLAYERS to screen RAM anp_copy_loop: - lda numplayer_screen_data_minus_one,x; 9418 BD 9A 95 ... + lda numplayers_screen_data_minus_one,x; 9418 BD 9A 95 ... sta $37FF,x ; 941B 9D FF 37 ..7 dex ; 941E CA . bne anp_copy_loop ; 941F D0 F7 .. @@ -2974,7 +2985,7 @@ anp_loop_done: sta COLOR2 ; 9439 8D C6 02 ... lda #$C6 ; 943C A9 C6 .. sta COLOR1 ; 943E 8D C5 02 ... - jsr init_page_7_jv ; 9441 20 24 80 $. + jsr init_struct_users_jv ; 9441 20 24 80 $. ; set dlist shadow to point to numplayer_display_list setup_numplayer_dlist: lda #$5F ; 9444 A9 5F ._ @@ -3113,7 +3124,7 @@ wait_for_speed: sta $0714,x ; 9536 9D 14 07 ... pha ; 9539 48 H clc ; 953A 18 . -; 11-byte per-player struct? +; 11-byte per-user struct? add_11_to_x: txa ; 953B 8A . adc #$0B ; 953C 69 0B i. @@ -3147,7 +3158,7 @@ numplayer_display_list: .byte $95 ; 9577 95 . ; ---------------------------------------------------------------------------- ; DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e -num_player_dli_service: +num_players_dli_service: pha ; 9578 48 H lda $B7 ; 9579 A5 B7 .. cmp $B8 ; 957B C5 B8 .. @@ -3165,12 +3176,12 @@ L9588: inc $B7 ; 9588 E6 B7 ; ---------------------------------------------------------------------------- L9592: lda COLOR2 ; 9592 AD C6 02 ... sta COLPF2 ; 9595 8D 18 D0 ... -numplayer_screen_data_minus_one:= * + 2 ; 1-indexed loop copies from here+1 +numplayers_screen_data_minus_one:= * + 2 ; 1-indexed loop copies from here+1 jmp L9588 ; 9598 4C 88 95 L.. ; ---------------------------------------------------------------------------- ; 'number of players?', gets copied to $3800, see option_key_handler -numplayer_screen_data: +numplayers_screen_data: .byte $00,$6E,$75,$6D,$62,$65,$72,$00 ; 959B 00 6E 75 6D 62 65 72 00 .number. .byte $6F,$66,$00,$70,$6C,$61,$79,$65 ; 95A3 6F 66 00 70 6C 61 79 65 of.playe .byte $72,$73,$5F,$00,$00,$00,$00,$00 ; 95AB 72 73 5F 00 00 00 00 00 rs_..... @@ -3793,22 +3804,25 @@ zero_filler_9a48: .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9A50 00 00 00 00 00 00 00 00 ........ .byte $00,$00,$00,$00 ; 9A58 00 00 00 00 .... ; ---------------------------------------------------------------------------- -init_page_7: +; work_user and struct_user_{1..4}, 11 * 5 (55 aka $37) bytes +init_struct_users: ldy #$00 ; 9A5C A0 00 .. -L9A5E: ldx #$00 ; 9A5E A2 00 .. -L9A60: lda data_9a71,x ; 9A60 BD 71 9A .q. +isu_next_su: + ldx #$00 ; 9A5E A2 00 .. +isu_next_byte: + lda struct_users_init_contents,x ; 9A60 BD 71 9A .q. sta score,y ; 9A63 99 00 07 ... inx ; 9A66 E8 . iny ; 9A67 C8 . cpx #$0B ; 9A68 E0 0B .. - bne L9A60 ; 9A6A D0 F4 .. + bne isu_next_byte ; 9A6A D0 F4 .. cpy #$37 ; 9A6C C0 37 .7 - bne L9A5E ; 9A6E D0 EE .. + bne isu_next_su ; 9A6E D0 EE .. rts ; 9A70 60 ` ; ---------------------------------------------------------------------------- -; used by code above -data_9a71: +; work_user and struct_user_1 to _4 are initialized to this +struct_users_init_contents: .byte $00,$00,$00,$4C,$1D,$00,$00,$00 ; 9A71 00 00 00 4C 1D 00 00 00 ...L.... .byte $00,$06,$03 ; 9A79 00 06 03 ... ; ---------------------------------------------------------------------------- @@ -3828,11 +3842,11 @@ return_y: rts ; 9A8B 60 ` ; ---------------------------------------------------------------------------- -save_struct_player: +save_struct_user: ldx #$00 ; 9A8C A2 00 .. ssp_loop: lda score,x ; 9A8E BD 00 07 ... - sta $070B,y ; 9A91 99 0B 07 ... + sta struct_user_1,y ; 9A91 99 0B 07 ... inx ; 9A94 E8 . iny ; 9A95 C8 . cpx #$0B ; 9A96 E0 0B .. @@ -3840,10 +3854,10 @@ ssp_loop: rts ; 9A9A 60 ` ; ---------------------------------------------------------------------------- -load_struct_player: +load_struct_user: ldx #$00 ; 9A9B A2 00 .. lsp_loop: - lda $070B,y ; 9A9D B9 0B 07 ... + lda struct_user_1,y ; 9A9D B9 0B 07 ... sta score,x ; 9AA0 9D 00 07 ... inx ; 9AA3 E8 . iny ; 9AA4 C8 . @@ -3855,12 +3869,12 @@ lsp_loop: ; used in multiplayer games, also called in single player (?) next_player: jsr mul_player_11 ; 9AAA 20 7C 9A |. - jsr save_struct_player ; 9AAD 20 8C 9A .. + jsr save_struct_user ; 9AAD 20 8C 9A .. lda #$00 ; 9AB0 A9 00 .. sta $06F7 ; 9AB2 8D F7 06 ... sta $06F8 ; 9AB5 8D F8 06 ... -; wraparound to 1 if > total players -next_player_num: +; wraparound to 1 if > total users +next_user_num: inc current_player ; 9AB8 EE FE 06 ... lda score_minus_one ; 9ABB AD FF 06 ... cmp current_player ; 9ABE CD FE 06 ... @@ -3872,7 +3886,7 @@ look_for_alive: ldx number_of_players ; 9ACB AE F4 06 ... inx ; 9ACE E8 . ldy mul_11_table_minus_one,x ; 9ACF BC FB 9A ... -is_player_dead: +is_user_dead: lda $0715,y ; 9AD2 B9 15 07 ... cmp #$FF ; 9AD5 C9 FF .. bne check_lives ; 9AD7 D0 0C .. @@ -3881,21 +3895,21 @@ is_player_dead: sbc #$0B ; 9ADB E9 0B .. tay ; 9ADD A8 . dex ; 9ADE CA . - bne is_player_dead ; 9ADF D0 F1 .. + bne is_user_dead ; 9ADF D0 F1 .. inc $06F8 ; 9AE1 EE F8 06 ... rts ; 9AE4 60 ` ; ---------------------------------------------------------------------------- -; if player hasn't been eliminated, but is out of lives, eliminate him +; if user hasn't been eliminated, but is out of lives, eliminate him check_lives: stx score_minus_one ; 9AE5 8E FF 06 ... jsr mul_player_11 ; 9AE8 20 7C 9A |. - jsr load_struct_player ; 9AEB 20 9B 9A .. + jsr load_struct_user ; 9AEB 20 9B 9A .. lda lives ; 9AEE AD 0A 07 ... cmp #$FF ; 9AF1 C9 FF .. - beq next_player_num ; 9AF3 F0 C3 .. -; found the next player that isn't dead -player_alive: + beq next_user_num ; 9AF3 F0 C3 .. +; found the next user that isn't dead +user_alive: lda $0709 ; 9AF5 AD 09 07 ... sta initial_speed ; 9AF8 8D 25 06 .%. ; 1-indexed @@ -4059,7 +4073,7 @@ L9BFC: jmp enter_level ; 9BFC 4C BA 96 zero_filler_9bff: .byte $00 ; 9BFF 00 . ; ---------------------------------------------------------------------------- -; only use of keyboard is to enter player speed before starting game +; only use of keyboard is to enter player speed(s) before starting game keyboard_isr: txa ; 9C00 8A . pha ; 9C01 48 H @@ -5615,8 +5629,8 @@ l02_bombs_term: ; ---------------------------------------------------------------------------- ; not sure what this actually does electrocution_bomb_pickup: - ldy $B2 ; A498 A4 B2 .. - lda data_a542,y ; A49A B9 42 A5 .B. + ldy bomb_idx ; A498 A4 B2 .. + lda elec_bomb_table,y ; A49A B9 42 A5 .B. clc ; A49D 18 . adc #$30 ; A49E 69 30 i0 sta $0680 ; A4A0 8D 80 06 ... @@ -5704,8 +5718,8 @@ level03_collisions: jmp check_pl_coll_no_pl ; A53F 4C 79 8F Ly. ; ---------------------------------------------------------------------------- -; dunno, referenced by electrocution_bomb_pickup -data_a542: +; dunno exactly how it's used yet, referenced by electrocution_bomb_pickup +elec_bomb_table: .byte $0C ; A542 0C . LA543: .byte $05,$18,$09,$58,$05,$80,$15,$18 ; A543 05 18 09 58 05 80 15 18 ...X.... .byte $09,$28,$25,$4C,$1D,$80,$09,$18 ; A54B 09 28 25 4C 1D 80 09 18 .(%L.... @@ -5758,7 +5772,7 @@ l03_unkn: .byte $03,$86,$A6,$06,$4C,$4A,$01,$66 ; A675 03 86 A6 06 4C 4A 01 66 ....LJ.f .byte $04,$86,$A6,$06,$A4,$CA,$01,$66 ; A67D 04 86 A6 06 A4 CA 01 66 .......f ; horizontally moving platforms from level03 -dw_platform_player: +dw_platform_sprite: .byte $FF,$FF,$FF,$AA,$55,$FF,$FF ; A685 FF FF FF AA 55 FF FF ....U.. ; ---------------------------------------------------------------------------- ; gets called at start of level @@ -5885,7 +5899,7 @@ LA781: rts ; A781 60 ; ---------------------------------------------------------------------------- ; the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler. -dumbwaiter_player: +dumbwaiter_sprite: .byte $18,$3C,$7E,$FF,$FF,$FF,$00,$00 ; A782 18 3C 7E FF FF FF 00 00 .<~..... .byte $00,$00,$00,$00,$00,$00 ; A78A 00 00 00 00 00 00 ...... ; level map data starts here @@ -6009,9 +6023,9 @@ LA8C1: lda $0767,x ; A8C1 BD 67 07 LA8D4: tay ; A8D4 A8 . clc ; A8D5 18 . lda bullet_x_pos+3,x ; A8D6 BD 9E 06 ... - adc LA905,y ; A8D9 79 05 A9 y.. + adc hellstone_deltas_2,y ; A8D9 79 05 A9 y.. sta bullet_x_pos+3,x ; A8DC 9D 9E 06 ... - lda data_table_a8fd,y ; A8DF B9 FD A8 ... + lda hellstone_deltas_1,y ; A8DF B9 FD A8 ... tay ; A8E2 A8 . beq LA8EF ; A8E3 F0 0A .. tay ; A8E5 A8 . @@ -6027,10 +6041,12 @@ LA8EF: tya ; A8EF 98 jmp LA845 ; A8FA 4C 45 A8 LE. ; ---------------------------------------------------------------------------- -; dunno, referenced hellstones_sub0 -data_table_a8fd: +; dunno, look like movement deltas, referenced by hellstones_sub0 +hellstone_deltas_1: .byte $00,$02,$02,$02,$02,$02,$02,$00 ; A8FD 00 02 02 02 02 02 02 00 ........ -LA905: .byte $FE,$FE,$FE,$00,$00,$02,$02,$02 ; A905 FE FE FE 00 00 02 02 02 ........ +; dunno, look like movement deltas, referenced by hellstones_sub0 +hellstone_deltas_2: + .byte $FE,$FE,$FE,$00,$00,$02,$02,$02 ; A905 FE FE FE 00 00 02 02 02 ........ sfx_hellstone: .byte $01,$83,$00,$0A,$03,$00,$00,$00 ; A90D 01 83 00 0A 03 00 00 00 ........ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; A915 00 00 00 00 00 00 00 00 ........ @@ -6334,7 +6350,7 @@ LADA1: lda $0764,x ; ADA1 BD 64 07 beq code_adb5 ; ADA4 F0 0F .. and #$0F ; ADA6 29 0F ). tay ; ADA8 A8 . - lda data_table_adc7,y ; ADA9 B9 C7 AD ... + lda zigzag_deltas,y ; ADA9 B9 C7 AD ... sta bullet_x_delta,x ; ADAC 9D 5A 07 .Z. inc $0764,x ; ADAF FE 64 07 .d. jmp LAD70 ; ADB2 4C 70 AD Lp. @@ -6344,15 +6360,15 @@ code_adb5: lda $0768,x ; ADB5 BD 68 07 .h. and #$0F ; ADB8 29 0F ). tay ; ADBA A8 . - lda data_table_adc7,y ; ADBB B9 C7 AD ... + lda zigzag_deltas,y ; ADBB B9 C7 AD ... sta bullet_y_delta,x ; ADBE 9D 5E 07 .^. code_adc1: inc $0768,x ; ADC1 FE 68 07 .h. jmp LAD70 ; ADC4 4C 70 AD Lp. ; ---------------------------------------------------------------------------- -; dunno, referenced by routines at $AD9E and $ADB5 -data_table_adc7: +; kind of a sine wave shape. used for either X or Y delta, depending on the direction the bullet is moving +zigzag_deltas: .byte $00,$01,$02,$03,$04,$03,$02,$01 ; ADC7 00 01 02 03 04 03 02 01 ........ .byte $00,$FF,$FE,$FD,$FC,$FD,$FE,$FF ; ADCF 00 FF FE FD FC FD FE FF ........ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; ADD7 00 00 00 00 00 00 00 00 ........ @@ -6395,8 +6411,8 @@ spellbound_init: rts ; AEA3 60 ` ; ---------------------------------------------------------------------------- -; dunno -data_table_aea4: +; used by spellbound, dunno exactly how yet +spellbound_table: .byte $18,$08,$38,$20,$00,$48,$30,$18 ; AEA4 18 08 38 20 00 48 30 18 ..8 .H0. .byte $28,$10,$10 ; AEAC 28 10 10 (.. ; letters for level08, spellbound (not ASCII or screencodes though) @@ -6425,10 +6441,10 @@ LAF1C: lda $062A ; AF1C AD 2A 06 ; ---------------------------------------------------------------------------- spellbound_bomb_sub: - lda $B2 ; AF23 A5 B2 .. + lda bomb_idx ; AF23 A5 B2 .. lsr a ; AF25 4A J tax ; AF26 AA . - ldy data_table_aea4,x ; AF27 BC A4 AE ... + ldy spellbound_table,x ; AF27 BC A4 AE ... iny ; AF2A C8 . ldx $0771 ; AF2B AE 71 07 .q. tya ; AF2E 98 . @@ -6467,7 +6483,8 @@ spellbound_got_all: sta playing_level ; AF65 8D 27 06 .'. ldx #$0C ; AF68 A2 0C .. stx $066D ; AF6A 8E 6D 06 .m. -LAF6D: lda $0770 ; AF6D AD 70 07 .p. +ltr_loop: + lda $0770 ; AF6D AD 70 07 .p. clc ; AF70 18 . adc #$0A ; AF71 69 0A i. sta $0770 ; AF73 8D 70 07 .p. @@ -6476,16 +6493,20 @@ LAF6D: lda $0770 ; AF6D AD 70 07 beq bonus_250_pts ; AF7C F0 18 .. lda #$00 ; AF7E A9 00 .. sta $0681 ; AF80 8D 81 06 ... - jmp LAF92 ; AF83 4C 92 AF L.. + jmp ltr_skip ; AF83 4C 92 AF L.. ; ---------------------------------------------------------------------------- -LAF86: lda #$00 ; AF86 A9 00 .. +; wait approx 1/3 second so user can see what happened +ltr_delay: + lda #$00 ; AF86 A9 00 .. sta jiffy_timer_1 ; AF88 8D 1A 06 ... -LAF8B: lda jiffy_timer_1 ; AF8B AD 1A 06 ... +ltr_wait: + lda jiffy_timer_1 ; AF8B AD 1A 06 ... cmp #$20 ; AF8E C9 20 . - bne LAF8B ; AF90 D0 F9 .. -LAF92: dex ; AF92 CA . - bne LAF6D ; AF93 D0 D8 .. + bne ltr_wait ; AF90 D0 F9 .. +ltr_skip: + dex ; AF92 CA . + bne ltr_loop ; AF93 D0 D8 .. rts ; AF95 60 ` ; ---------------------------------------------------------------------------- @@ -6499,11 +6520,12 @@ bonus_250_pts: lda score ; AFA2 AD 00 07 ... adc #$FA ; AFA5 69 FA i. sta score ; AFA7 8D 00 07 ... - bcc LAFB4 ; AFAA 90 08 .. + bcc b250_hi_ok ; AFAA 90 08 .. inc score+1 ; AFAC EE 01 07 ... - bne LAFB4 ; AFAF D0 03 .. + bne b250_hi_ok ; AFAF D0 03 .. inc score+2 ; AFB1 EE 02 07 ... -LAFB4: txa ; AFB4 8A . +b250_hi_ok: + txa ; AFB4 8A . pha ; AFB5 48 H jsr update_score_display_jv ; AFB6 20 0C 80 .. ; play sfx_letter_bonus @@ -6515,10 +6537,10 @@ cue_letter_sfx: jsr cue_sfx_jv ; AFC3 20 06 80 .. pla ; AFC6 68 h tax ; AFC7 AA . - jmp LAF86 ; AFC8 4C 86 AF L.. + jmp ltr_delay ; AFC8 4C 86 AF L.. ; ---------------------------------------------------------------------------- -; played once per correct letter at end of level08 (spellbound) +; played once per correct letter at end of level08 (spellbound). trailing 00's are filler. sfx_letter_bonus: .byte $01,$A5,$00,$18,$04,$F3,$04,$00 ; AFCB 01 A5 00 18 04 F3 04 00 ........ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFD3 00 00 00 00 00 00 00 00 ........ diff --git a/jumpmanjr.info b/jumpmanjr.info index 0589e61..852e4b1 100644 --- a/jumpmanjr.info +++ b/jumpmanjr.info @@ -55,6 +55,11 @@ label { name "score_below_1m"; addr $B7EE; }; label { name "spellbound_letters"; addr $AF58; comment "called at end of Spellbound, adds up letter bonus"; }; label { name "spellbound_got_all"; addr $AF5E; comment "got all the bombs"; }; label { name "bonus_250_pts"; addr $AF96; comment "per letter"; }; +label { name "b250_hi_ok"; addr $AFB4; }; +label { name "ltr_loop"; addr $AF6D; }; +label { name "ltr_delay"; addr $AF86; comment "wait approx 1/3 second so user can see what happened"; }; +label { name "ltr_wait"; addr $AF8B; }; +label { name "ltr_skip"; addr $AF92; }; label { name "epyx_jumpman"; addr $AEAF; comment "letters for level08, spellbound (not ASCII or screencodes though)"; }; label { name "init_level"; addr $9682; comment "call start subroutine for current level"; }; @@ -125,7 +130,7 @@ label { name "next_player_jv"; addr $8027; comment "used in multiplayer games, a label { name "mul_player_11"; addr $9A7C; comment "multiply current player number by 11, return result in Y"; }; label { name "add_11"; addr $9A82; }; label { name "return_y"; addr $9A8A; }; -label { name "save_struct_player"; addr $9A8C; }; +label { name "save_struct_user"; addr $9A8C; }; label { name "setup_blank_dlist"; addr $8AE0; comment "show blank screen with empty display list"; }; label { name "setup_blank_dlist_jv"; addr $803C; comment "show blank screen with empty display list"; }; label { name "draw_level"; addr $BA00; comment "calls draw_map, plays level intro music, shows level name"; }; @@ -175,7 +180,7 @@ label { name "blistptr"; addr $B4; size 2; comment "bomb_pickup: points to curre range { name "gr7_or_masks"; start $8143; end $8152; type bytetable; }; range { name "gr7_and_masks"; start $8153; end $8156; type bytetable; }; range { name "sfx_bomb_pickup"; start $8892; end $88A7; type bytetable; comment "played when a bomb is picked up"; }; -range { name "data_8dfa"; start $8DFA; end $8DFF; type bytetable; }; +range { name "sfx_bonus_tick"; start $8DFA; end $8DFF; type bytetable; comment "played when bonus timer is decremented"; }; range { name "bullet_table"; start $8F43; end $8f72; type bytetable; comment "used by bullet_logic"; }; label { name "sfx_bullet"; addr $8f59; size 1; comment "bang!"; }; label { name "play_sfx_bullet"; addr $8EFB; size 1; comment "let player hear report"; }; @@ -297,21 +302,21 @@ label { name "demo_mode"; addr $B96B; comment "display all the levels, happens i label { name "show_letter"; addr $9160; comment "$3000 is screen memory, at this point"; }; label { name "title_letters"; addr $928F; comment "JUMPMAN JUNIOR in screen codes with high bit set"; }; -label { name "is_player_dead"; addr $9AD2; }; -label { name "check_lives"; addr $9AE5; comment "if player hasn't been eliminated, but is out of lives, eliminate him"; }; -label { name "player_alive"; addr $9AF5; comment "found the next player that isn't dead"; }; -label { name "load_struct_player"; addr $9A9B; }; +label { name "is_user_dead"; addr $9AD2; }; +label { name "check_lives"; addr $9AE5; comment "if user hasn't been eliminated, but is out of lives, eliminate him"; }; +label { name "user_alive"; addr $9AF5; comment "found the next user that isn't dead"; }; +label { name "load_struct_user"; addr $9A9B; }; label { name "lsp_loop"; addr $9A9D; }; label { name "ssp_loop"; addr $9A8E; }; label { name "look_for_alive"; addr $9ACB; }; -label { name "next_player_num"; addr $9AB8; comment "wraparound to 1 if > total players"; }; +label { name "next_user_num"; addr $9AB8; comment "wraparound to 1 if > total users"; }; label { name "mul_11_table_minus_one"; addr $9afb; comment "1-indexed"; }; range { name "mul_11_table"; start $9AFC; end $9aff; type bytetable; }; -range { name "num_player_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; }; +range { name "num_players_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; }; range { name "dli_service_2"; start $bdc7; end $bdd1; type code; comment "DLI service routine, changes COLBK, address gets stored in $6ae/$6af by code at $bc3c"; }; -label { name "numplayer_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; }; -range { name "numplayer_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; }; +label { name "numplayers_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; }; +range { name "numplayers_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; }; range { name "sfx_add_life_bonus"; start $b896; end $b8a6; type bytetable; comment "played when adding bonus per life at end of level"; }; range { name "mul_25_table"; start $b8a7; end $b8be; type wordtable; comment "multiply by 25"; }; range { name "falling_table_1"; start $8a39; end $8a7f; type bytetable; }; @@ -375,7 +380,7 @@ range { name "l02_map_bombs"; start $A446; end $a476; type bytetable; }; range { name "l02_bombs"; start $A477; end $a496; type bytetable; }; range { name "l02_bombs_term"; start $A497; end $a497; type bytetable; }; -range { name "data_a542"; start $A542; end $A5EF; type bytetable; comment "dunno, referenced by electrocution_bomb_pickup"; }; +range { name "elec_bomb_table"; start $A542; end $A5EF; type bytetable; comment "dunno exactly how it's used yet, referenced by electrocution_bomb_pickup"; }; range { name "l03_map"; start $A5F0; end $a62e; type bytetable; comment "level map data starts here"; }; range { name "l03_map_bombs"; start $a62f; end $a653; type bytetable; }; range { name "l03_bombs"; start $a654; end $a66b; type bytetable; }; @@ -383,8 +388,8 @@ range { name "l03_bombs_term"; start $a66c; end $a66c; type bytetable; }; range { name "l03_unkn"; start $a66d; end $a684; type bytetable; }; range { name "sfx_electrocution"; start $A52D; end $A53C; type bytetable; }; -range { name "dumbwaiter_player"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; }; -range { name "dw_platform_player"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; }; +range { name "dumbwaiter_sprite"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; }; +range { name "dw_platform_sprite"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; }; range { name "l04_map"; start $a790; end $a7d4; type bytetable; comment "level map data starts here"; }; range { name "l04_map_bombs"; start $a7d5; end $a805; type bytetable; }; @@ -397,7 +402,8 @@ range { name "l05_bombs"; start $ab6d; end $ab88; type bytetable; }; range { name "l05_bombs_term"; start $ab89; end $ab89; type bytetable; }; range { name "l05_map_changes"; start $ab8a; end $ac5f; type bytetable; }; -range { name "data_table_a8fd"; start $a8fd; end $a91f; type bytetable; comment "dunno, referenced hellstones_sub0"; }; +range { name "hellstone_deltas_1"; start $a8fd; end $a91f; type bytetable; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; }; +label { name "hellstone_deltas_2"; addr $a905; size 8; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; }; range { name "l06_map"; start $a920; end $a973; type bytetable; }; range { name "l06_map_bombs"; start $a974; end $a9a4; type bytetable; }; range { name "l06_bombs"; start $a9a5; end $a9c4; type bytetable; }; @@ -415,7 +421,7 @@ range { name "l07_bombs"; start $ace5; end $ad00; type bytetable; }; range { name "l07_bombs_term"; start $ad01; end $ad01; type bytetable; }; range { name "l07_map_changes"; start $ad02; end $ad67; type bytetable; }; -range { name "data_table_adc7"; start $adc7; end $addf; type bytetable; comment "dunno, referenced by routines at $AD9E and $ADB5"; }; +range { name "zigzag_deltas"; start $adc7; end $addf; type bytetable; comment "kind of a sine wave shape. used for either X or Y delta, depending on the direction the bullet is moving"; }; range { name "l08_map"; start $ade0; end $ae4b; type bytetable; }; range { name "l08_map_bombs"; start $ae4c; end $ae70; type bytetable; }; range { name "l08_bombs"; start $ae71; end $ae88; type bytetable; }; @@ -468,8 +474,8 @@ range { name "l12_unkn0"; start $b658; end $b690; type bytetable; }; range { name "walls_down_rope"; start $aa90; end $aabb; type bytetable; comment "map data for center down-rope, referenced by walls_bomb_sub"; }; range { name "data_aac8"; start $aac8; end $aacf; type bytetable; comment "non-map data, dunno what for. grouped with the level 5 stuff, but doesn't seem to be used by level 5"; }; label { name "walls_up_rope"; addr $aaa6; comment "map data for center up-rope, referenced walls_bomb_sub"; }; -range { name "data_table_aea4"; start $aea4; end $af0f; type bytetable; comment "dunno"; }; -range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound)"; }; +range { name "spellbound_table"; start $aea4; end $af0f; type bytetable; comment "used by spellbound, dunno exactly how yet"; }; +range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound). trailing 00's are filler."; }; label { name "cue_letter_sfx"; addr $AFB9; comment "play sfx_letter_bonus"; }; label { name "stub"; addr $8405; comment "just an RTS"; }; range { name "data_table_85b6"; start $85b6; end $85bd; type bytetable; comment "used in vblank_imm_isr, not sure for what yet"; }; @@ -509,9 +515,9 @@ range { name "scores_screen_dlist"; start $8C52; end $8C67; type bytetable; comm label { name "reyalp_msg_minus_one"; addr $8c67; }; label { name "show_reyalp_msg"; addr $8BC0; comment "shows PLAYER (backwards loop)"; }; label { name "reyalp_msg_loop"; addr $8BC2; }; -label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player number"; }; +label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player (user) number"; }; label { name "continue_loop"; addr $8BD5; }; -label { name "check_alive"; addr $8BE9; comment "player still has lives left?"; }; +label { name "check_alive"; addr $8BE9; comment "user still has lives left?"; }; label { name "no_cross"; addr $8BEF; }; label { name "what_are_we_waiting_for"; addr $8C39; comment "I *think* we're waiting for the music to finish playing..."; }; @@ -545,7 +551,7 @@ label { name "inc_done"; addr $823F; size 1; }; label { name "wait_3_sec"; addr $8C4A; comment "wait 192 jiffies: 3.2 sec (ntsc), 3.84 sec (pal)"; }; label { name "not_alive"; addr $8BEB; comment "no, show a cross instead of a space"; }; label { name "store_space"; addr $8BE2; comment "$AF is the character to show after the score (space for alive, cross for dead)"; }; -range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "player spelled backwards: ' 0 # REYALP '"; }; +range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "PLAYER spelled backwards: ' 0 # REYALP '"; }; range { name "scores_msg"; start $8C7b; end $8C81; type bytetable; comment "' SCORES' in color 3"; }; range { name "blank_dlist_8add"; start $8ADD; end $8adf; type bytetable; comment "yet another jump-to-itself empty display list"; }; range { name "blank_dlist_8aeb"; start $8AEB; end $8aed; type bytetable; comment "another jump-to-itself empty display list"; }; @@ -559,9 +565,9 @@ label { name "disable_start_opt"; addr $94EC; comment "disable start and option label { name "init_speed"; addr $952a; comment "initialize speed to -1"; }; label { name "wait_for_speed"; addr $952F; comment "wait for keyboard IRQ handler to set a speed <= 8"; }; label { name "speed_to_ascii"; addr $9540; comment "convert to ASCII digit"; }; -label { name "add_11_to_x"; addr $953B; comment "11-byte per-player struct?"; }; -label { name "struct_player_lives_offsets_minus_one"; addr $8C88; }; -label { name "struct_player_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed player"; }; +label { name "add_11_to_x"; addr $953B; comment "11-byte per-user struct?"; }; +label { name "struct_user_lives_offsets_minus_one"; addr $8C88; }; +label { name "struct_user_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed user"; }; label { name "show_scores_screen"; addr $8C22; comment "set dlist shadow to scores_screen_dlist"; }; label { name "display_speed"; addr $9542; comment "show it to the user"; }; label { name "speed_value"; addr $06F9; comment "decoded speed (1-8)"; }; @@ -577,7 +583,7 @@ label { name "title_screen_data_minus_one"; addr $91ce; }; label { name "copy_title_screen"; addr $902A; }; label { name "wait_until_9c_is_0e"; addr $906E; comment "some ISR is writing to $9c..."; }; label { name "funky_init_loop"; addr $90C8; comment "lot going on here, not understood yet"; }; -label { name "player_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; }; +label { name "end_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; }; label { name "read_joystick"; addr $84AC; comment "always joystick #1 (all players use the same joystick and pass it around)"; }; label { name "check_joystick_enabled"; addr $84A4; comment "read the joystick if not disabled"; }; label { name "fake_read_trigger"; addr $84CD; comment "??"; }; @@ -589,7 +595,7 @@ label { name "update_dli_vector"; addr $8523; comment "update DLI vector, if the label { name "setup_get_ready_dl"; addr $964A; comment "06ac/06ad gets address of get_ready_dlist (why not SDLSTL/H?)"; }; label { name "end_of_level_bonus"; addr $B800; }; label { name "keycode_table_minus_one"; addr $9c18; }; -range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed before starting game"; }; +range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed(s) before starting game"; }; range { name "keycode_table"; start $9C19; end $9c20; type bytetable; }; #label { name "mul_25_table"; addr $B8A7; size 2; }; @@ -599,9 +605,14 @@ label { name "init_page6_loop"; addr $837e; }; # these are so far only for player 1 label { name "number_of_players"; addr $06f4; size 1; comment "0 for single-player game, otherwise range 1-3 (2 to 4 players)"; }; label { name "score_minus_one"; addr $06ff; size 1; }; -label { name "score"; addr $0700; size 3; }; +label { name "score"; addr $0700; size 3; comment "aka work_user, 11 bytes"; }; label { name "level"; addr $06f6; size 1; }; label { name "lives"; addr $070a; size 1; }; +label { name "struct_user_1"; addr $070b; comment "11 bytes"; }; +label { name "struct_user_2"; addr $0716; comment "11 bytes"; }; +label { name "struct_user_3"; addr $0721; comment "11 bytes"; }; +label { name "struct_user_4"; addr $072c; comment "11 bytes"; }; + label { name "current_player"; addr $06fe; size 1; comment "*think* this ranges 1-4, not 0-3"; }; label { name "player_speed"; addr $0624; size 1; }; label { name "initial_speed"; addr $0625; size 1; }; @@ -654,7 +665,7 @@ label { name "option_key_handler"; addr $9489; size 1; comment "called via optio label { name "level_finished"; addr $8E00; size 1; }; label { name "level_finished_jv"; addr $802D; size 1; }; -label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100;"; }; +label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100, play sfx_bonus_tick"; }; label { name "decrement_time_bonus_jv"; addr $8021; size 1; comment "bonus -= 100;"; }; label { name "check_bonus_0"; addr $8DD7; size 1; comment "don't decrement if bonus == 0"; }; label { name "dec_done"; addr $8DF9; size 1; }; @@ -705,9 +716,11 @@ label { name "afterlife"; addr $9600; comment "multiple code paths jump here. re label { name "code_bd52"; addr $BD52; comment "referenced by code at $BC83"; }; label { name "crumble_gameboard"; addr $8D00; comment "just lost your last life"; }; label { name "crumble_gameboard_jv"; addr $8030; comment "just lost your last life"; }; -label { name "init_page_7"; addr $9A5C; }; -label { name "init_page_7_jv"; addr $8024; }; -range { name "data_9a71"; start $9A71; end $9a7b; type bytetable; comment "used by code above"; }; +label { name "init_struct_users"; addr $9A5C; comment "work_user and struct_user_{1..4}, 11 * 5 (55 aka $37) bytes"; }; +label { name "init_struct_users_jv"; addr $8024; }; +label { name "isu_next_su"; addr $9A5E; }; +label { name "isu_next_byte"; addr $9A60; }; +range { name "struct_users_init_contents"; start $9A71; end $9a7b; type bytetable; comment "work_user and struct_user_1 to _4 are initialized to this"; }; range { name "data_af10"; start $AF10; end $AF1B; type bytetable; comment "looks almost like code but it's bogus"; }; range { name "l_equals"; start $8CFD; end $8CFF; type bytetable; comment "L= (for lives display)"; }; label { name "add_extra_life"; addr $8CE4; comment "plays sfx_extra_life"; }; @@ -724,6 +737,7 @@ label { name "num_tmp"; addr $0665; size 1; comment "temp used by print_number"; label { name "num_in"; addr $D0; size 3; comment "print_number input. 3-byte number (LSB first as usual) to be printed"; }; label { name "num_out"; addr $D3; size 2; comment "area of (screen) memory where print_number stores its output"; }; label { name "num_color"; addr $D5; size 1; comment "print_number adds this to numeric screencode output. normally 0, set to $80 on the end-of-game screen."; }; +label { name "bomb_idx"; addr $B2; size 1; comment "bomb that was just picked up (times 2, suitable for index into a table of words)"; }; label { name "print_bonus"; addr $867E; comment "print remaining bonus time; work_level_points_per_bomb should read work_level_time_bonus-1"; }; label { name "print_bonus_jv"; addr $800F; comment "print remaining bonus time"; }; label { name "pnum_done"; addr $8667; }; @@ -756,6 +770,11 @@ label { name "dm_x_with_offset"; addr $C6; size 1; comment "graphics object X of label { name "dm_y_with_offset"; addr $C7; size 1; comment "graphics object Y offset, plus dm_xpos"; }; label { name "dm_screen_addr"; addr $C4; size 2; comment "points to byte to write gfx data to"; }; label { name "calc_screen_addr"; addr $80D0; size 1; comment "calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr"; }; +label { name "sa_hi_ok_1"; addr $80FD; size 1; }; +label { name "mul40_loop"; addr $80DA; size 1; }; +label { name "sa_hi_ok_2"; addr $8138; size 1; }; +label { name "sa_tmp_1"; addr $BD; size 1; comment "used by calc_screen_addr"; }; +label { name "sa_tmp_2"; addr $C8; size 1; comment "used by calc_screen_addr"; }; label { name "store_rts"; addr $83B6; comment "store an RTS at $06E6, which will get JSR'ed to by unused level subroutines"; }; label { name "well_done_screen"; addr $BC00; comment "the WELL DONE screen, when you beat all the levels. after this, the game plays random levels."; }; label { name "cue_woop_sound"; addr $B4D3; }; @@ -53,6 +53,11 @@ label { name "score_below_1m"; addr $B7EE; }; label { name "spellbound_letters"; addr $AF58; comment "called at end of Spellbound, adds up letter bonus"; }; label { name "spellbound_got_all"; addr $AF5E; comment "got all the bombs"; }; label { name "bonus_250_pts"; addr $AF96; comment "per letter"; }; +label { name "b250_hi_ok"; addr $AFB4; }; +label { name "ltr_loop"; addr $AF6D; }; +label { name "ltr_delay"; addr $AF86; comment "wait approx 1/3 second so user can see what happened"; }; +label { name "ltr_wait"; addr $AF8B; }; +label { name "ltr_skip"; addr $AF92; }; label { name "epyx_jumpman"; addr $AEAF; comment "letters for level08, spellbound (not ASCII or screencodes though)"; }; label { name "init_level"; addr $9682; comment "call start subroutine for current level"; }; @@ -123,7 +128,7 @@ label { name "next_player_jv"; addr $8027; comment "used in multiplayer games, a label { name "mul_player_11"; addr $9A7C; comment "multiply current player number by 11, return result in Y"; }; label { name "add_11"; addr $9A82; }; label { name "return_y"; addr $9A8A; }; -label { name "save_struct_player"; addr $9A8C; }; +label { name "save_struct_user"; addr $9A8C; }; label { name "setup_blank_dlist"; addr $8AE0; comment "show blank screen with empty display list"; }; label { name "setup_blank_dlist_jv"; addr $803C; comment "show blank screen with empty display list"; }; label { name "draw_level"; addr $BA00; comment "calls draw_map, plays level intro music, shows level name"; }; @@ -173,7 +178,7 @@ label { name "blistptr"; addr $B4; size 2; comment "bomb_pickup: points to curre range { name "gr7_or_masks"; start $8143; end $8152; type bytetable; }; range { name "gr7_and_masks"; start $8153; end $8156; type bytetable; }; range { name "sfx_bomb_pickup"; start $8892; end $88A7; type bytetable; comment "played when a bomb is picked up"; }; -range { name "data_8dfa"; start $8DFA; end $8DFF; type bytetable; }; +range { name "sfx_bonus_tick"; start $8DFA; end $8DFF; type bytetable; comment "played when bonus timer is decremented"; }; range { name "bullet_table"; start $8F43; end $8f72; type bytetable; comment "used by bullet_logic"; }; label { name "sfx_bullet"; addr $8f59; size 1; comment "bang!"; }; label { name "play_sfx_bullet"; addr $8EFB; size 1; comment "let player hear report"; }; @@ -295,21 +300,21 @@ label { name "demo_mode"; addr $B96B; comment "display all the levels, happens i label { name "show_letter"; addr $9160; comment "$3000 is screen memory, at this point"; }; label { name "title_letters"; addr $928F; comment "JUMPMAN JUNIOR in screen codes with high bit set"; }; -label { name "is_player_dead"; addr $9AD2; }; -label { name "check_lives"; addr $9AE5; comment "if player hasn't been eliminated, but is out of lives, eliminate him"; }; -label { name "player_alive"; addr $9AF5; comment "found the next player that isn't dead"; }; -label { name "load_struct_player"; addr $9A9B; }; +label { name "is_user_dead"; addr $9AD2; }; +label { name "check_lives"; addr $9AE5; comment "if user hasn't been eliminated, but is out of lives, eliminate him"; }; +label { name "user_alive"; addr $9AF5; comment "found the next user that isn't dead"; }; +label { name "load_struct_user"; addr $9A9B; }; label { name "lsp_loop"; addr $9A9D; }; label { name "ssp_loop"; addr $9A8E; }; label { name "look_for_alive"; addr $9ACB; }; -label { name "next_player_num"; addr $9AB8; comment "wraparound to 1 if > total players"; }; +label { name "next_user_num"; addr $9AB8; comment "wraparound to 1 if > total users"; }; label { name "mul_11_table_minus_one"; addr $9afb; comment "1-indexed"; }; range { name "mul_11_table"; start $9AFC; end $9aff; type bytetable; }; -range { name "num_player_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; }; +range { name "num_players_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; }; range { name "dli_service_2"; start $bdc7; end $bdd1; type code; comment "DLI service routine, changes COLBK, address gets stored in $6ae/$6af by code at $bc3c"; }; -label { name "numplayer_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; }; -range { name "numplayer_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; }; +label { name "numplayers_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; }; +range { name "numplayers_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; }; range { name "sfx_add_life_bonus"; start $b896; end $b8a6; type bytetable; comment "played when adding bonus per life at end of level"; }; range { name "mul_25_table"; start $b8a7; end $b8be; type wordtable; comment "multiply by 25"; }; range { name "falling_table_1"; start $8a39; end $8a7f; type bytetable; }; @@ -373,7 +378,7 @@ range { name "l02_map_bombs"; start $A446; end $a476; type bytetable; }; range { name "l02_bombs"; start $A477; end $a496; type bytetable; }; range { name "l02_bombs_term"; start $A497; end $a497; type bytetable; }; -range { name "data_a542"; start $A542; end $A5EF; type bytetable; comment "dunno, referenced by electrocution_bomb_pickup"; }; +range { name "elec_bomb_table"; start $A542; end $A5EF; type bytetable; comment "dunno exactly how it's used yet, referenced by electrocution_bomb_pickup"; }; range { name "l03_map"; start $A5F0; end $a62e; type bytetable; comment "level map data starts here"; }; range { name "l03_map_bombs"; start $a62f; end $a653; type bytetable; }; range { name "l03_bombs"; start $a654; end $a66b; type bytetable; }; @@ -381,8 +386,8 @@ range { name "l03_bombs_term"; start $a66c; end $a66c; type bytetable; }; range { name "l03_unkn"; start $a66d; end $a684; type bytetable; }; range { name "sfx_electrocution"; start $A52D; end $A53C; type bytetable; }; -range { name "dumbwaiter_player"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; }; -range { name "dw_platform_player"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; }; +range { name "dumbwaiter_sprite"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; }; +range { name "dw_platform_sprite"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; }; range { name "l04_map"; start $a790; end $a7d4; type bytetable; comment "level map data starts here"; }; range { name "l04_map_bombs"; start $a7d5; end $a805; type bytetable; }; @@ -395,7 +400,8 @@ range { name "l05_bombs"; start $ab6d; end $ab88; type bytetable; }; range { name "l05_bombs_term"; start $ab89; end $ab89; type bytetable; }; range { name "l05_map_changes"; start $ab8a; end $ac5f; type bytetable; }; -range { name "data_table_a8fd"; start $a8fd; end $a91f; type bytetable; comment "dunno, referenced hellstones_sub0"; }; +range { name "hellstone_deltas_1"; start $a8fd; end $a91f; type bytetable; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; }; +label { name "hellstone_deltas_2"; addr $a905; size 8; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; }; range { name "l06_map"; start $a920; end $a973; type bytetable; }; range { name "l06_map_bombs"; start $a974; end $a9a4; type bytetable; }; range { name "l06_bombs"; start $a9a5; end $a9c4; type bytetable; }; @@ -413,7 +419,7 @@ range { name "l07_bombs"; start $ace5; end $ad00; type bytetable; }; range { name "l07_bombs_term"; start $ad01; end $ad01; type bytetable; }; range { name "l07_map_changes"; start $ad02; end $ad67; type bytetable; }; -range { name "data_table_adc7"; start $adc7; end $addf; type bytetable; comment "dunno, referenced by routines at $AD9E and $ADB5"; }; +range { name "zigzag_deltas"; start $adc7; end $addf; type bytetable; comment "kind of a sine wave shape. used for either X or Y delta, depending on the direction the bullet is moving"; }; range { name "l08_map"; start $ade0; end $ae4b; type bytetable; }; range { name "l08_map_bombs"; start $ae4c; end $ae70; type bytetable; }; range { name "l08_bombs"; start $ae71; end $ae88; type bytetable; }; @@ -466,8 +472,8 @@ range { name "l12_unkn0"; start $b658; end $b690; type bytetable; }; range { name "walls_down_rope"; start $aa90; end $aabb; type bytetable; comment "map data for center down-rope, referenced by walls_bomb_sub"; }; range { name "data_aac8"; start $aac8; end $aacf; type bytetable; comment "non-map data, dunno what for. grouped with the level 5 stuff, but doesn't seem to be used by level 5"; }; label { name "walls_up_rope"; addr $aaa6; comment "map data for center up-rope, referenced walls_bomb_sub"; }; -range { name "data_table_aea4"; start $aea4; end $af0f; type bytetable; comment "dunno"; }; -range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound)"; }; +range { name "spellbound_table"; start $aea4; end $af0f; type bytetable; comment "used by spellbound, dunno exactly how yet"; }; +range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound). trailing 00's are filler."; }; label { name "cue_letter_sfx"; addr $AFB9; comment "play sfx_letter_bonus"; }; label { name "stub"; addr $8405; comment "just an RTS"; }; range { name "data_table_85b6"; start $85b6; end $85bd; type bytetable; comment "used in vblank_imm_isr, not sure for what yet"; }; @@ -507,9 +513,9 @@ range { name "scores_screen_dlist"; start $8C52; end $8C67; type bytetable; comm label { name "reyalp_msg_minus_one"; addr $8c67; }; label { name "show_reyalp_msg"; addr $8BC0; comment "shows PLAYER (backwards loop)"; }; label { name "reyalp_msg_loop"; addr $8BC2; }; -label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player number"; }; +label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player (user) number"; }; label { name "continue_loop"; addr $8BD5; }; -label { name "check_alive"; addr $8BE9; comment "player still has lives left?"; }; +label { name "check_alive"; addr $8BE9; comment "user still has lives left?"; }; label { name "no_cross"; addr $8BEF; }; label { name "what_are_we_waiting_for"; addr $8C39; comment "I *think* we're waiting for the music to finish playing..."; }; @@ -543,7 +549,7 @@ label { name "inc_done"; addr $823F; size 1; }; label { name "wait_3_sec"; addr $8C4A; comment "wait 192 jiffies: 3.2 sec (ntsc), 3.84 sec (pal)"; }; label { name "not_alive"; addr $8BEB; comment "no, show a cross instead of a space"; }; label { name "store_space"; addr $8BE2; comment "$AF is the character to show after the score (space for alive, cross for dead)"; }; -range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "player spelled backwards: ' 0 # REYALP '"; }; +range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "PLAYER spelled backwards: ' 0 # REYALP '"; }; range { name "scores_msg"; start $8C7b; end $8C81; type bytetable; comment "' SCORES' in color 3"; }; range { name "blank_dlist_8add"; start $8ADD; end $8adf; type bytetable; comment "yet another jump-to-itself empty display list"; }; range { name "blank_dlist_8aeb"; start $8AEB; end $8aed; type bytetable; comment "another jump-to-itself empty display list"; }; @@ -557,9 +563,9 @@ label { name "disable_start_opt"; addr $94EC; comment "disable start and option label { name "init_speed"; addr $952a; comment "initialize speed to -1"; }; label { name "wait_for_speed"; addr $952F; comment "wait for keyboard IRQ handler to set a speed <= 8"; }; label { name "speed_to_ascii"; addr $9540; comment "convert to ASCII digit"; }; -label { name "add_11_to_x"; addr $953B; comment "11-byte per-player struct?"; }; -label { name "struct_player_lives_offsets_minus_one"; addr $8C88; }; -label { name "struct_player_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed player"; }; +label { name "add_11_to_x"; addr $953B; comment "11-byte per-user struct?"; }; +label { name "struct_user_lives_offsets_minus_one"; addr $8C88; }; +label { name "struct_user_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed user"; }; label { name "show_scores_screen"; addr $8C22; comment "set dlist shadow to scores_screen_dlist"; }; label { name "display_speed"; addr $9542; comment "show it to the user"; }; label { name "speed_value"; addr $06F9; comment "decoded speed (1-8)"; }; @@ -575,7 +581,7 @@ label { name "title_screen_data_minus_one"; addr $91ce; }; label { name "copy_title_screen"; addr $902A; }; label { name "wait_until_9c_is_0e"; addr $906E; comment "some ISR is writing to $9c..."; }; label { name "funky_init_loop"; addr $90C8; comment "lot going on here, not understood yet"; }; -label { name "player_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; }; +label { name "end_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; }; label { name "read_joystick"; addr $84AC; comment "always joystick #1 (all players use the same joystick and pass it around)"; }; label { name "check_joystick_enabled"; addr $84A4; comment "read the joystick if not disabled"; }; label { name "fake_read_trigger"; addr $84CD; comment "??"; }; @@ -587,7 +593,7 @@ label { name "update_dli_vector"; addr $8523; comment "update DLI vector, if the label { name "setup_get_ready_dl"; addr $964A; comment "06ac/06ad gets address of get_ready_dlist (why not SDLSTL/H?)"; }; label { name "end_of_level_bonus"; addr $B800; }; label { name "keycode_table_minus_one"; addr $9c18; }; -range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed before starting game"; }; +range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed(s) before starting game"; }; range { name "keycode_table"; start $9C19; end $9c20; type bytetable; }; #label { name "mul_25_table"; addr $B8A7; size 2; }; @@ -597,9 +603,14 @@ label { name "init_page6_loop"; addr $837e; }; # these are so far only for player 1 label { name "number_of_players"; addr $06f4; size 1; comment "0 for single-player game, otherwise range 1-3 (2 to 4 players)"; }; label { name "score_minus_one"; addr $06ff; size 1; }; -label { name "score"; addr $0700; size 3; }; +label { name "score"; addr $0700; size 3; comment "aka work_user, 11 bytes"; }; label { name "level"; addr $06f6; size 1; }; label { name "lives"; addr $070a; size 1; }; +label { name "struct_user_1"; addr $070b; comment "11 bytes"; }; +label { name "struct_user_2"; addr $0716; comment "11 bytes"; }; +label { name "struct_user_3"; addr $0721; comment "11 bytes"; }; +label { name "struct_user_4"; addr $072c; comment "11 bytes"; }; + label { name "current_player"; addr $06fe; size 1; comment "*think* this ranges 1-4, not 0-3"; }; label { name "player_speed"; addr $0624; size 1; }; label { name "initial_speed"; addr $0625; size 1; }; @@ -652,7 +663,7 @@ label { name "option_key_handler"; addr $9489; size 1; comment "called via optio label { name "level_finished"; addr $8E00; size 1; }; label { name "level_finished_jv"; addr $802D; size 1; }; -label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100;"; }; +label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100, play sfx_bonus_tick"; }; label { name "decrement_time_bonus_jv"; addr $8021; size 1; comment "bonus -= 100;"; }; label { name "check_bonus_0"; addr $8DD7; size 1; comment "don't decrement if bonus == 0"; }; label { name "dec_done"; addr $8DF9; size 1; }; @@ -703,9 +714,11 @@ label { name "afterlife"; addr $9600; comment "multiple code paths jump here. re label { name "code_bd52"; addr $BD52; comment "referenced by code at $BC83"; }; label { name "crumble_gameboard"; addr $8D00; comment "just lost your last life"; }; label { name "crumble_gameboard_jv"; addr $8030; comment "just lost your last life"; }; -label { name "init_page_7"; addr $9A5C; }; -label { name "init_page_7_jv"; addr $8024; }; -range { name "data_9a71"; start $9A71; end $9a7b; type bytetable; comment "used by code above"; }; +label { name "init_struct_users"; addr $9A5C; comment "work_user and struct_user_{1..4}, 11 * 5 (55 aka $37) bytes"; }; +label { name "init_struct_users_jv"; addr $8024; }; +label { name "isu_next_su"; addr $9A5E; }; +label { name "isu_next_byte"; addr $9A60; }; +range { name "struct_users_init_contents"; start $9A71; end $9a7b; type bytetable; comment "work_user and struct_user_1 to _4 are initialized to this"; }; range { name "data_af10"; start $AF10; end $AF1B; type bytetable; comment "looks almost like code but it's bogus"; }; range { name "l_equals"; start $8CFD; end $8CFF; type bytetable; comment "L= (for lives display)"; }; label { name "add_extra_life"; addr $8CE4; comment "plays sfx_extra_life"; }; @@ -722,6 +735,7 @@ label { name "num_tmp"; addr $0665; size 1; comment "temp used by print_number"; label { name "num_in"; addr $D0; size 3; comment "print_number input. 3-byte number (LSB first as usual) to be printed"; }; label { name "num_out"; addr $D3; size 2; comment "area of (screen) memory where print_number stores its output"; }; label { name "num_color"; addr $D5; size 1; comment "print_number adds this to numeric screencode output. normally 0, set to $80 on the end-of-game screen."; }; +label { name "bomb_idx"; addr $B2; size 1; comment "bomb that was just picked up (times 2, suitable for index into a table of words)"; }; label { name "print_bonus"; addr $867E; comment "print remaining bonus time; work_level_points_per_bomb should read work_level_time_bonus-1"; }; label { name "print_bonus_jv"; addr $800F; comment "print remaining bonus time"; }; label { name "pnum_done"; addr $8667; }; @@ -754,6 +768,11 @@ label { name "dm_x_with_offset"; addr $C6; size 1; comment "graphics object X of label { name "dm_y_with_offset"; addr $C7; size 1; comment "graphics object Y offset, plus dm_xpos"; }; label { name "dm_screen_addr"; addr $C4; size 2; comment "points to byte to write gfx data to"; }; label { name "calc_screen_addr"; addr $80D0; size 1; comment "calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr"; }; +label { name "sa_hi_ok_1"; addr $80FD; size 1; }; +label { name "mul40_loop"; addr $80DA; size 1; }; +label { name "sa_hi_ok_2"; addr $8138; size 1; }; +label { name "sa_tmp_1"; addr $BD; size 1; comment "used by calc_screen_addr"; }; +label { name "sa_tmp_2"; addr $C8; size 1; comment "used by calc_screen_addr"; }; label { name "store_rts"; addr $83B6; comment "store an RTS at $06E6, which will get JSR'ed to by unused level subroutines"; }; label { name "well_done_screen"; addr $BC00; comment "the WELL DONE screen, when you beat all the levels. after this, the game plays random levels."; }; label { name "cue_woop_sound"; addr $B4D3; }; |