aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jumpmanjr.dasm224
-rw-r--r--jumpmanjr.info79
-rw-r--r--main.info79
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; };
diff --git a/main.info b/main.info
index c558d97..ff22455 100644
--- a/main.info
+++ b/main.info
@@ -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; };