From 909f27681c8e8869b54fc81bcb83c001ccf63ae3 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 2 Sep 2016 00:01:52 -0400 Subject: regenerate jumpmanjr.html --- jumpmanjr.html | 529 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 350 insertions(+), 179 deletions(-) diff --git a/jumpmanjr.html b/jumpmanjr.html index 3963a08..265a18a 100644 --- a/jumpmanjr.html +++ b/jumpmanjr.html @@ -7,7 +7,7 @@
 ; da65 V2.15 - Git 104f898
-; Created:    2016-08-31 16:20:44
+; Created:    2016-09-02 00:00:42
 ; Input file: jumpmanjr.rom
 ; Page:       1
 
@@ -116,17 +116,21 @@
 work_level_time_bonus:= $0791                   ; amount of time bonus at start of level
 work_level_offs_19:= $0793                      ; always $00
 work_level_unkn_table0:= $0794                  ; pointer to ROM table or $06xx
-work_level_map0 := $0796                        ; map data
-work_level_map1 := $0798                        ; map data
-work_level_bomblist:= $079A                     ; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+work_level_map  := $0796                        ; used to draw the level initially (see also map_changes)
+work_level_map_bombs:= $0798                    ; start of bombs in map data (which must come last!)
+work_level_bomblist:= $079A                     ; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 work_level_map_changes:= $079C                  ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
-work_level_offs_30:= $079E                      ; always $0000
+work_level_indirect_subs:= $079E                ; pointer to list of indirect subs, always $0000 in this game
 work_level_sub_bomb:= $07A0                     ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
 work_level_sub_start:= $07A2                    ; called at start of level, $06E6 for some levels, or else a ROM subroutine
 work_level_sub6 := $07A4                        ; always $9740 aka game_main_loop
 work_level_sub_eol:= $07A6                      ; called at end of level (all bombs picked up). $06E6 for all but level07
 work_level_offs_40:= $07A8                      ; all zeroes
-work_level_offs_46:= $07AE                      ; unknown
+work_level_colpf3:= $07AE                       ; color (not sure what gets drawn in this color yet)
+work_level_colpf0:= $07AF                       ; color for girders and up-ropes
+work_level_colpf1:= $07B0                       ; color for ladders and down-ropes
+work_level_colpf2:= $07B1                       ; color for bombs
+work_level_offs_50:= $07B2                      ; unknown
 work_level_offs_55:= $07B7                      ; unknown, always $00 $00 $00
 work_level_offs_58:= $07BA                      ; unknown, not a ROM address
 work_level_offs_60:= $07BC                      ; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
@@ -145,17 +149,21 @@
 cur_level_time_bonus:= $07D1                    ; amount of time bonus at start of level
 cur_level_offs_19:= $07D3                       ; always $00
 cur_level_unkn_table0:= $07D4                   ; pointer to ROM table or $06xx
-cur_level_map0  := $07D6                        ; map data
-cur_level_map1  := $07D8                        ; map data
-cur_level_bomblist:= $07DA                      ; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+cur_level_map   := $07D6                        ; used to draw the level initially (see also map_changes)
+cur_level_map_bombs:= $07D8                     ; start of bombs in map data (which must come last!)
+cur_level_bomblist:= $07DA                      ; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 cur_level_map_changes:= $07DC                   ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
-cur_level_offs_30:= $07DE                       ; always $0000
+cur_level_indirect_subs:= $07DE                 ; pointer to list of indirect subs, always $0000 in this game
 cur_level_sub_bomb:= $07E0                      ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
 cur_level_sub_start:= $07E2                     ; called at start of level, $06E6 for some levels, or else a ROM subroutine
 cur_level_sub6  := $07E4                        ; always $9740 aka game_main_loop
 cur_level_sub_eol:= $07E6                       ; called at end of level (all bombs picked up). $06E6 for all but level07
 cur_level_offs_40:= $07E8                       ; all zeroes
-cur_level_offs_46:= $07EE                       ; unknown
+cur_level_colpf3:= $07EE                        ; color (not sure what gets drawn in this color yet)
+cur_level_colpf0:= $07EF                        ; color for girders and up-ropes
+cur_level_colpf1:= $07F0                        ; color for ladders and down-ropes
+cur_level_colpf2:= $07F1                        ; color for bombs
+cur_level_offs_50:= $07F2                       ; unknown
 cur_level_offs_55:= $07F7                       ; unknown, always $00 $00 $00
 cur_level_offs_58:= $07FA                       ; unknown, not a ROM address
 cur_level_offs_60:= $07FC                       ; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
@@ -1302,8 +1310,8 @@
         rts                                     ; 8729 60                       `
 
 ; ----------------------------------------------------------------------------
-; clear P/M mem
-clear_pm_mem:
+; misc stuff, called from enable_joystick
+prepare_level:
         lda     #$09                            ; 872A A9 09                    ..
         sta     player_speed                    ; 872C 8D 24 06                 .$.
         ldx     #$05                            ; 872F A2 05                    ..
@@ -1359,7 +1367,7 @@
         stx     joystick_disabled               ; 8785 8E 32 06                 .2.
         stx     sfx_lock                        ; 8788 8E 2F 06                 ./.
         stx     work_level_bullet_max           ; 878B 8E 8B 07                 ...
-        jsr     clear_pm_mem                    ; 878E 20 2A 87                  *.
+        jsr     prepare_level                   ; 878E 20 2A 87                  *.
         jsr     silence_audio                   ; 8791 20 5B 87                  [.
         lda     #$30                            ; 8794 A9 30                    .0
         sta     SAVMSC+1                        ; 8796 85 59                    .Y
@@ -1367,7 +1375,7 @@
 set_prior:
         lda     #$11                            ; 8798 A9 11                    ..
         sta     PRIOR                           ; 879A 8D 1B D0                 ...
-        jmp     L88A8                           ; 879D 4C A8 88                 L..
+        jmp     clear_pm_mem                    ; 879D 4C A8 88                 L..
 
 ; ----------------------------------------------------------------------------
 ; check whether Jumpman just touched a bomb (RTS if not)
@@ -1378,7 +1386,7 @@
         rts                                     ; 87A7 60                       `
 
 ; ----------------------------------------------------------------------------
-; Jumpman just picked up a bomb, award points, play sfx_bomb_pickup, make the bomb disappear, do some other stuff I don't understand yet
+; Jumpman just touched a bomb, award points, play sfx_bomb_pickup, make the bomb disappear, etc.
 bomb_pickup:
         lda     player_x_pos                    ; 87A8 AD 7E 06                 .~.
         clc                                     ; 87AB 18                       .
@@ -1395,6 +1403,8 @@
         lsr     a                               ; 87BF 4A                       J
         ora     bombloc                         ; 87C0 05 B6                    ..
         sta     bombloc                         ; 87C2 85 B6                    ..
+; screen X range approx $32 to $C6, Y $18 to $C0, meaning the coarse grid visible screen range is X 1-6, Y 0-6
+coarse_grid:
         lda     work_level_bomblist             ; 87C4 AD 9A 07                 ...
         sta     blistptr                        ; 87C7 85 B4                    ..
         lda     work_level_bomblist+1           ; 87C9 AD 9B 07                 ...
@@ -1416,9 +1426,9 @@
 
 ; ----------------------------------------------------------------------------
 bomb_found:
-        lda     work_level_map1                 ; 87E0 AD 98 07                 ...
+        lda     work_level_map_bombs            ; 87E0 AD 98 07                 ...
         sta     $B0                             ; 87E3 85 B0                    ..
-        lda     work_level_map1+1               ; 87E5 AD 99 07                 ...
+        lda     work_level_map_bombs+1          ; 87E5 AD 99 07                 ...
         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                       .
@@ -1427,8 +1437,9 @@
         clc                                     ; 87EE 18                       .
         adc     $B2                             ; 87EF 65 B2                    e.
         tay                                     ; 87F1 A8                       .
-; find out: why are we storing this at 06DC?
-unkn1:  lda     ($B0),y                         ; 87F2 B1 B0                    ..
+; store actual bomb coordinates (not the coarse ones) for bomb subs to use
+store_bomb_coords:
+        lda     ($B0),y                         ; 87F2 B1 B0                    ..
         sta     $06DC                           ; 87F4 8D DC 06                 ...
         iny                                     ; 87F7 C8                       .
         lda     ($B0),y                         ; 87F8 B1 B0                    ..
@@ -1449,7 +1460,7 @@
         lsr     a                               ; 8818 4A                       J
         lsr     a                               ; 8819 4A                       J
         tay                                     ; 881A A8                       .
-; this has to do with redrawing parts of the level (e.g. disappearing platforms on level00)
+; some bombs redraw parts of the level (e.g. disappearing platforms on level00)
 change_map:
         lda     work_level_map_changes          ; 881B AD 9C 07                 ...
         sta     $B0                             ; 881E 85 B0                    ..
@@ -1473,9 +1484,9 @@
         tay                                     ; 883D A8                       .
 ; this would call a subroutine via pointer-to-pointer, but I'm almost 100% certain it's never used (maybe a holdover from original Jumpman?)
 call_bomb_indirect_sub:
-        lda     work_level_offs_30              ; 883E AD 9E 07                 ...
+        lda     work_level_indirect_subs        ; 883E AD 9E 07                 ...
         sta     $B0                             ; 8841 85 B0                    ..
-        lda     work_level_offs_30+1            ; 8843 AD 9F 07                 ...
+        lda     work_level_indirect_subs+1      ; 8843 AD 9F 07                 ...
         sta     $B1                             ; 8846 85 B1                    ..
         lda     ($B0),y                         ; 8848 B1 B0                    ..
         sta     $06E4                           ; 884A 8D E4 06                 ...
@@ -1509,9 +1520,11 @@
         jsr     draw_map_jv                     ; 8881 20 00 80                  ..
         jsr     update_score_display_jv         ; 8884 20 0C 80                  ..
         dec     work_level_num_bombs            ; 8887 CE 8A 07                 ...
-L888A:  lda     collision_save+4                ; 888A AD B4 06                 ...
+; wait for bomb to really disappear
+wait_bomb:
+        lda     collision_save+4                ; 888A AD B4 06                 ...
         and     #$04                            ; 888D 29 04                    ).
-        bne     L888A                           ; 888F D0 F9                    ..
+        bne     wait_bomb                       ; 888F D0 F9                    ..
         rts                                     ; 8891 60                       `
 
 ; ----------------------------------------------------------------------------
@@ -1521,15 +1534,18 @@
         .byte   $03,$28,$03,$1E,$03,$28,$03,$1E ; 889A 03 28 03 1E 03 28 03 1E  .(...(..
         .byte   $03,$28,$03,$00,$00,$00         ; 88A2 03 28 03 00 00 00        .(....
 ; ----------------------------------------------------------------------------
-L88A8:  ldx     #$00                            ; 88A8 A2 00                    ..
+; clear P/M memory, called from enable_joystick
+clear_pm_mem:
+        ldx     #$00                            ; 88A8 A2 00                    ..
         txa                                     ; 88AA 8A                       .
-L88AB:  sta     $2B00,x                         ; 88AB 9D 00 2B                 ..+
+clr_loop:
+        sta     $2B00,x                         ; 88AB 9D 00 2B                 ..+
         sta     $2C00,x                         ; 88AE 9D 00 2C                 ..,
         sta     $2D00,x                         ; 88B1 9D 00 2D                 ..-
         sta     $2E00,x                         ; 88B4 9D 00 2E                 ...
         sta     $2F00,x                         ; 88B7 9D 00 2F                 ../
         dex                                     ; 88BA CA                       .
-        bne     L88AB                           ; 88BB D0 EE                    ..
+        bne     clr_loop                        ; 88BB D0 EE                    ..
         rts                                     ; 88BD 60                       `
 
 ; ----------------------------------------------------------------------------
@@ -3191,9 +3207,9 @@
         lda     #$96                            ; 9659 A9 96                    ..
         sta     work_level_sub0+1               ; 965B 8D 83 07                 ...
         jsr     clear_screen_mem_jv             ; 965E 20 1E 80                  ..
-        lda     cur_level_map0                  ; 9661 AD D6 07                 ...
+        lda     cur_level_map                   ; 9661 AD D6 07                 ...
         sta     dm_progctr                      ; 9664 85 C0                    ..
-        lda     cur_level_map0+1                ; 9666 AD D7 07                 ...
+        lda     cur_level_map+1                 ; 9666 AD D7 07                 ...
         sta     dm_progctr+1                    ; 9669 85 C1                    ..
         jsr     draw_map_jv                     ; 966B 20 00 80                  ..
 L966E:  lda     jiffy_timer_2                   ; 966E AD 1B 06                 ...
@@ -3215,13 +3231,13 @@
         lda     #$00                            ; 9691 A9 00                    ..
         sta     COLOR4                          ; 9693 8D C8 02                 ...
         sta     $06AB                           ; 9696 8D AB 06                 ...
-        lda     work_level_offs_46+1            ; 9699 AD AF 07                 ...
+        lda     work_level_colpf0               ; 9699 AD AF 07                 ...
         sta     COLOR0                          ; 969C 8D C4 02                 ...
-        lda     work_level_offs_46+2            ; 969F AD B0 07                 ...
+        lda     work_level_colpf1               ; 969F AD B0 07                 ...
         sta     COLOR1                          ; 96A2 8D C5 02                 ...
-        lda     work_level_offs_46+3            ; 96A5 AD B1 07                 ...
+        lda     work_level_colpf2               ; 96A5 AD B1 07                 ...
         sta     COLOR2                          ; 96A8 8D C6 02                 ...
-        lda     work_level_offs_46              ; 96AB AD AE 07                 ...
+        lda     work_level_colpf3               ; 96AB AD AE 07                 ...
         sta     COLOR3                          ; 96AE 8D C7 02                 ...
         jsr     setup_gameboard_dlist_jv        ; 96B1 20 15 80                  ..
         inc     $06F5                           ; 96B4 EE F5 06                 ...
@@ -3578,7 +3594,7 @@
         sbc     #$30                            ; 994D E9 30                    .0
         sta     zp_temp1                        ; 994F 85 CB                    ..
         ldx     #$08                            ; 9951 A2 08                    ..
-L9953:  lda     work_level_offs_46+3,x          ; 9953 BD B1 07                 ...
+L9953:  lda     work_level_colpf2,x             ; 9953 BD B1 07                 ...
         clc                                     ; 9956 18                       .
         adc     #$02                            ; 9957 69 02                    i.
         cmp     zp_temp1                        ; 9959 C5 CB                    ..
@@ -3593,7 +3609,7 @@
         rts                                     ; 9968 60                       `
 
 ; ----------------------------------------------------------------------------
-L9969:  lda     work_level_offs_46+3,x          ; 9969 BD B1 07                 ...
+L9969:  lda     work_level_colpf2,x             ; 9969 BD B1 07                 ...
         clc                                     ; 996C 18                       .
         adc     #$30                            ; 996D 69 30                    i0
         sec                                     ; 996F 38                       8
@@ -4209,21 +4225,21 @@
 ; pointer to ROM table or $06xx
 level00_unkn_table0:
         .addr   L06DF                           ; A014 DF 06                    ..
-; map data
-level00_map0:
-        .addr   level00_map                     ; A016 00 A3                    ..
-; map data
-level00_map1:
-        .addr   LA366                           ; A018 66 A3                    f.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; used to draw the level initially (see also map_changes)
+level00_map:
+        .addr   l00_map                         ; A016 00 A3                    ..
+; start of bombs in map data (which must come last!)
+level00_map_bombs:
+        .addr   l00_map_bombs                   ; A018 66 A3                    f.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level00_bomblist:
-        .addr   LA38B                           ; A01A 8B A3                    ..
+        .addr   l00_bombs                       ; A01A 8B A3                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level00_map_changes:
-        .addr   LA3A4                           ; A01C A4 A3                    ..
+        .addr   l00_map_changes                 ; A01C A4 A3                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level00_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level00_indirect_subs:
         .byte   $00,$00                         ; A01E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4242,10 +4258,21 @@
 ; all zeroes
 level00_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A028 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level00_colpf3:
+        .byte   $CA                             ; A02E CA                       .
+; color for girders and up-ropes
+level00_colpf0:
+        .byte   $96                             ; A02F 96                       .
+; color for ladders and down-ropes
+level00_colpf1:
+        .byte   $18                             ; A030 18                       .
+; color for bombs
+level00_colpf2:
+        .byte   $5A                             ; A031 5A                       Z
 ; unknown
-level00_offs_46:
-        .byte   $CA,$96,$18,$5A,$0C,$24,$4C,$74 ; A02E CA 96 18 5A 0C 24 4C 74  ...Z.$Lt
-        .byte   $8C                             ; A036 8C                       .
+level00_offs_50:
+        .byte   $0C,$24,$4C,$74,$8C             ; A032 0C 24 4C 74 8C           .$Lt.
 ; unknown, always $00 $00 $00
 level00_offs_55:
         .byte   $00,$00,$00                     ; A037 00 00 00                 ...
@@ -4305,21 +4332,21 @@
 ; pointer to ROM table or $06xx
 level01_unkn_table0:
         .addr   LA5C2                           ; A054 C2 A5                    ..
-; map data
-level01_map0:
-        .addr   LA3E0                           ; A056 E0 A3                    ..
-; map data
-level01_map1:
+; used to draw the level initially (see also map_changes)
+level01_map:
+        .addr   l01_map                         ; A056 E0 A3                    ..
+; start of bombs in map data (which must come last!)
+level01_map_bombs:
         .addr   LA446                           ; A058 46 A4                    F.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level01_bomblist:
         .addr   LA477                           ; A05A 77 A4                    w.
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level01_map_changes:
         .addr   L0000                           ; A05C 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level01_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level01_indirect_subs:
         .byte   $00,$00                         ; A05E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4338,10 +4365,21 @@
 ; all zeroes
 level01_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A068 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level01_colpf3:
+        .byte   $6A                             ; A06E 6A                       j
+; color for girders and up-ropes
+level01_colpf0:
+        .byte   $08                             ; A06F 08                       .
+; color for ladders and down-ropes
+level01_colpf1:
+        .byte   $C6                             ; A070 C6                       .
+; color for bombs
+level01_colpf2:
+        .byte   $1A                             ; A071 1A                       .
 ; unknown
-level01_offs_46:
-        .byte   $6A,$08,$C6,$1A,$18,$4C,$80,$00 ; A06E 6A 08 C6 1A 18 4C 80 00  j....L..
-        .byte   $00                             ; A076 00                       .
+level01_offs_50:
+        .byte   $18,$4C,$80,$00,$00             ; A072 18 4C 80 00 00           .L...
 ; unknown, always $00 $00 $00
 level01_offs_55:
         .byte   $00,$00,$00                     ; A077 00 00 00                 ...
@@ -4401,21 +4439,21 @@
 ; pointer to ROM table or $06xx
 level02_unkn_table0:
         .addr   LA66D                           ; A094 6D A6                    m.
-; map data
-level02_map0:
+; used to draw the level initially (see also map_changes)
+level02_map:
         .addr   LA5F0                           ; A096 F0 A5                    ..
-; map data
-level02_map1:
+; start of bombs in map data (which must come last!)
+level02_map_bombs:
         .addr   LA62F                           ; A098 2F A6                    /.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level02_bomblist:
         .addr   LA654                           ; A09A 54 A6                    T.
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level02_map_changes:
         .addr   L0000                           ; A09C 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level02_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level02_indirect_subs:
         .byte   $00,$00                         ; A09E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4434,10 +4472,21 @@
 ; all zeroes
 level02_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A0A8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level02_colpf3:
+        .byte   $1A                             ; A0AE 1A                       .
+; color for girders and up-ropes
+level02_colpf0:
+        .byte   $C6                             ; A0AF C6                       .
+; color for ladders and down-ropes
+level02_colpf1:
+        .byte   $96                             ; A0B0 96                       .
+; color for bombs
+level02_colpf2:
+        .byte   $1A                             ; A0B1 1A                       .
 ; unknown
-level02_offs_46:
-        .byte   $1A,$C6,$96,$1A,$0C,$8C,$00,$00 ; A0AE 1A C6 96 1A 0C 8C 00 00  ........
-        .byte   $00                             ; A0B6 00                       .
+level02_offs_50:
+        .byte   $0C,$8C,$00,$00,$00             ; A0B2 0C 8C 00 00 00           .....
 ; unknown, always $00 $00 $00
 level02_offs_55:
         .byte   $00,$00,$00                     ; A0B7 00 00 00                 ...
@@ -4497,21 +4546,21 @@
 ; pointer to ROM table or $06xx
 level03_unkn_table0:
         .addr   L06DF                           ; A0D4 DF 06                    ..
-; map data
-level03_map0:
+; used to draw the level initially (see also map_changes)
+level03_map:
         .addr   LA790                           ; A0D6 90 A7                    ..
-; map data
-level03_map1:
+; start of bombs in map data (which must come last!)
+level03_map_bombs:
         .addr   LA7D5                           ; A0D8 D5 A7                    ..
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level03_bomblist:
         .addr   LA806                           ; A0DA 06 A8                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level03_map_changes:
         .addr   L0000                           ; A0DC 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level03_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level03_indirect_subs:
         .byte   $00,$00                         ; A0DE 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4530,10 +4579,21 @@
 ; all zeroes
 level03_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A0E8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level03_colpf3:
+        .byte   $CA                             ; A0EE CA                       .
+; color for girders and up-ropes
+level03_colpf0:
+        .byte   $96                             ; A0EF 96                       .
+; color for ladders and down-ropes
+level03_colpf1:
+        .byte   $18                             ; A0F0 18                       .
+; color for bombs
+level03_colpf2:
+        .byte   $5A                             ; A0F1 5A                       Z
 ; unknown
-level03_offs_46:
-        .byte   $CA,$96,$18,$5A,$4C,$18,$2C,$80 ; A0EE CA 96 18 5A 4C 18 2C 80  ...ZL.,.
-        .byte   $6C                             ; A0F6 6C                       l
+level03_offs_50:
+        .byte   $4C,$18,$2C,$80,$6C             ; A0F2 4C 18 2C 80 6C           L.,.l
 ; unknown, always $00 $00 $00
 level03_offs_55:
         .byte   $00,$00,$00                     ; A0F7 00 00 00                 ...
@@ -4593,21 +4653,21 @@
 ; pointer to ROM table or $06xx
 level04_unkn_table0:
         .addr   L06DF                           ; A114 DF 06                    ..
-; map data
-level04_map0:
+; used to draw the level initially (see also map_changes)
+level04_map:
         .addr   LAAD0                           ; A116 D0 AA                    ..
-; map data
-level04_map1:
+; start of bombs in map data (which must come last!)
+level04_map_bombs:
         .addr   LAB42                           ; A118 42 AB                    B.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level04_bomblist:
         .addr   LAB6D                           ; A11A 6D AB                    m.
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level04_map_changes:
         .addr   LAB8A                           ; A11C 8A AB                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level04_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level04_indirect_subs:
         .byte   $00,$00                         ; A11E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4626,10 +4686,21 @@
 ; all zeroes
 level04_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A128 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level04_colpf3:
+        .byte   $6A                             ; A12E 6A                       j
+; color for girders and up-ropes
+level04_colpf0:
+        .byte   $08                             ; A12F 08                       .
+; color for ladders and down-ropes
+level04_colpf1:
+        .byte   $C6                             ; A130 C6                       .
+; color for bombs
+level04_colpf2:
+        .byte   $1A                             ; A131 1A                       .
 ; unknown
-level04_offs_46:
-        .byte   $6A,$08,$C6,$1A,$0C,$22,$84,$8E ; A12E 6A 08 C6 1A 0C 22 84 8E  j...."..
-        .byte   $00                             ; A136 00                       .
+level04_offs_50:
+        .byte   $0C,$22,$84,$8E,$00             ; A132 0C 22 84 8E 00           ."...
 ; unknown, always $00 $00 $00
 level04_offs_55:
         .byte   $00,$00,$00                     ; A137 00 00 00                 ...
@@ -4689,21 +4760,21 @@
 ; pointer to ROM table or $06xx
 level05_unkn_table0:
         .addr   L06DF                           ; A154 DF 06                    ..
-; map data
-level05_map0:
+; used to draw the level initially (see also map_changes)
+level05_map:
         .addr   LA920                           ; A156 20 A9                     .
-; map data
-level05_map1:
+; start of bombs in map data (which must come last!)
+level05_map_bombs:
         .addr   LA974                           ; A158 74 A9                    t.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level05_bomblist:
         .addr   LA9A5                           ; A15A A5 A9                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level05_map_changes:
         .addr   L0000                           ; A15C 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level05_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level05_indirect_subs:
         .byte   $00,$00                         ; A15E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4722,10 +4793,21 @@
 ; all zeroes
 level05_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A168 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level05_colpf3:
+        .byte   $56                             ; A16E 56                       V
+; color for girders and up-ropes
+level05_colpf0:
+        .byte   $C6                             ; A16F C6                       .
+; color for ladders and down-ropes
+level05_colpf1:
+        .byte   $96                             ; A170 96                       .
+; color for bombs
+level05_colpf2:
+        .byte   $28                             ; A171 28                       (
 ; unknown
-level05_offs_46:
-        .byte   $56,$C6,$96,$28,$04,$30,$68,$94 ; A16E 56 C6 96 28 04 30 68 94  V..(.0h.
-        .byte   $00                             ; A176 00                       .
+level05_offs_50:
+        .byte   $04,$30,$68,$94,$00             ; A172 04 30 68 94 00           .0h..
 ; unknown, always $00 $00 $00
 level05_offs_55:
         .byte   $00,$00,$00                     ; A177 00 00 00                 ...
@@ -4785,21 +4867,21 @@
 ; pointer to ROM table or $06xx
 level06_unkn_table0:
         .addr   L06DF                           ; A194 DF 06                    ..
-; map data
-level06_map0:
+; used to draw the level initially (see also map_changes)
+level06_map:
         .addr   LAC60                           ; A196 60 AC                    `.
-; map data
-level06_map1:
+; start of bombs in map data (which must come last!)
+level06_map_bombs:
         .addr   LACBA                           ; A198 BA AC                    ..
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level06_bomblist:
         .addr   LACE5                           ; A19A E5 AC                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level06_map_changes:
         .addr   LAD02                           ; A19C 02 AD                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level06_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level06_indirect_subs:
         .byte   $00,$00                         ; A19E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4818,10 +4900,21 @@
 ; all zeroes
 level06_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A1A8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level06_colpf3:
+        .byte   $CA                             ; A1AE CA                       .
+; color for girders and up-ropes
+level06_colpf0:
+        .byte   $96                             ; A1AF 96                       .
+; color for ladders and down-ropes
+level06_colpf1:
+        .byte   $18                             ; A1B0 18                       .
+; color for bombs
+level06_colpf2:
+        .byte   $5A                             ; A1B1 5A                       Z
 ; unknown
-level06_offs_46:
-        .byte   $CA,$96,$18,$5A,$0C,$4C,$8C,$00 ; A1AE CA 96 18 5A 0C 4C 8C 00  ...Z.L..
-        .byte   $00                             ; A1B6 00                       .
+level06_offs_50:
+        .byte   $0C,$4C,$8C,$00,$00             ; A1B2 0C 4C 8C 00 00           .L...
 ; unknown, always $00 $00 $00
 level06_offs_55:
         .byte   $00,$00,$00                     ; A1B7 00 00 00                 ...
@@ -4881,21 +4974,21 @@
 ; pointer to ROM table or $06xx
 level07_unkn_table0:
         .addr   LAE8A                           ; A1D4 8A AE                    ..
-; map data
-level07_map0:
+; used to draw the level initially (see also map_changes)
+level07_map:
         .addr   LADE0                           ; A1D6 E0 AD                    ..
-; map data
-level07_map1:
+; start of bombs in map data (which must come last!)
+level07_map_bombs:
         .addr   LAE4C                           ; A1D8 4C AE                    L.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level07_bomblist:
         .addr   LAE71                           ; A1DA 71 AE                    q.
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level07_map_changes:
         .addr   L0000                           ; A1DC 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level07_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level07_indirect_subs:
         .byte   $00,$00                         ; A1DE 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -4914,10 +5007,21 @@
 ; all zeroes
 level07_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A1E8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level07_colpf3:
+        .byte   $6A                             ; A1EE 6A                       j
+; color for girders and up-ropes
+level07_colpf0:
+        .byte   $08                             ; A1EF 08                       .
+; color for ladders and down-ropes
+level07_colpf1:
+        .byte   $C6                             ; A1F0 C6                       .
+; color for bombs
+level07_colpf2:
+        .byte   $1A                             ; A1F1 1A                       .
 ; unknown
-level07_offs_46:
-        .byte   $6A,$08,$C6,$1A,$0C,$30,$68,$8C ; A1EE 6A 08 C6 1A 0C 30 68 8C  j....0h.
-        .byte   $00                             ; A1F6 00                       .
+level07_offs_50:
+        .byte   $0C,$30,$68,$8C,$00             ; A1F2 0C 30 68 8C 00           .0h..
 ; unknown, always $00 $00 $00
 level07_offs_55:
         .byte   $00,$00,$00                     ; A1F7 00 00 00                 ...
@@ -4977,21 +5081,21 @@
 ; pointer to ROM table or $06xx
 level08_unkn_table0:
         .addr   L06DF                           ; A214 DF 06                    ..
-; map data
-level08_map0:
+; used to draw the level initially (see also map_changes)
+level08_map:
         .addr   LB0A2                           ; A216 A2 B0                    ..
-; map data
-level08_map1:
+; start of bombs in map data (which must come last!)
+level08_map_bombs:
         .addr   LB072                           ; A218 72 B0                    r.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level08_bomblist:
         .addr   LB0A3                           ; A21A A3 B0                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level08_map_changes:
         .addr   L0000                           ; A21C 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level08_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level08_indirect_subs:
         .byte   $00,$00                         ; A21E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -5010,10 +5114,21 @@
 ; all zeroes
 level08_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A228 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level08_colpf3:
+        .byte   $1A                             ; A22E 1A                       .
+; color for girders and up-ropes
+level08_colpf0:
+        .byte   $C6                             ; A22F C6                       .
+; color for ladders and down-ropes
+level08_colpf1:
+        .byte   $96                             ; A230 96                       .
+; color for bombs
+level08_colpf2:
+        .byte   $28                             ; A231 28                       (
 ; unknown
-level08_offs_46:
-        .byte   $1A,$C6,$96,$28,$0C,$3C,$00,$00 ; A22E 1A C6 96 28 0C 3C 00 00  ...(.<..
-        .byte   $8C                             ; A236 8C                       .
+level08_offs_50:
+        .byte   $0C,$3C,$00,$00,$8C             ; A232 0C 3C 00 00 8C           .<...
 ; unknown, always $00 $00 $00
 level08_offs_55:
         .byte   $00,$00,$00                     ; A237 00 00 00                 ...
@@ -5073,21 +5188,21 @@
 ; pointer to ROM table or $06xx
 level09_unkn_table0:
         .addr   LB275                           ; A254 75 B2                    u.
-; map data
-level09_map0:
+; used to draw the level initially (see also map_changes)
+level09_map:
         .addr   LB1E0                           ; A256 E0 B1                    ..
-; map data
-level09_map1:
+; start of bombs in map data (which must come last!)
+level09_map_bombs:
         .addr   LB237                           ; A258 37 B2                    7.
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level09_bomblist:
         .addr   LB25C                           ; A25A 5C B2                    \.
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level09_map_changes:
         .addr   L0000                           ; A25C 00 00                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level09_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level09_indirect_subs:
         .byte   $00,$00                         ; A25E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -5106,10 +5221,21 @@
 ; all zeroes
 level09_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A268 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level09_colpf3:
+        .byte   $CA                             ; A26E CA                       .
+; color for girders and up-ropes
+level09_colpf0:
+        .byte   $96                             ; A26F 96                       .
+; color for ladders and down-ropes
+level09_colpf1:
+        .byte   $18                             ; A270 18                       .
+; color for bombs
+level09_colpf2:
+        .byte   $5A                             ; A271 5A                       Z
 ; unknown
-level09_offs_46:
-        .byte   $CA,$96,$18,$5A,$0C,$40,$8C,$00 ; A26E CA 96 18 5A 0C 40 8C 00  ...Z.@..
-        .byte   $00                             ; A276 00                       .
+level09_offs_50:
+        .byte   $0C,$40,$8C,$00,$00             ; A272 0C 40 8C 00 00           .@...
 ; unknown, always $00 $00 $00
 level09_offs_55:
         .byte   $00,$00,$00                     ; A277 00 00 00                 ...
@@ -5169,21 +5295,21 @@
 ; pointer to ROM table or $06xx
 level10_unkn_table0:
         .addr   data_table_b50b                 ; A294 0B B5                    ..
-; map data
-level10_map0:
+; used to draw the level initially (see also map_changes)
+level10_map:
         .addr   LB320                           ; A296 20 B3                     .
-; map data
-level10_map1:
+; start of bombs in map data (which must come last!)
+level10_map_bombs:
         .addr   LB38F                           ; A298 8F B3                    ..
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level10_bomblist:
         .addr   LB3BD                           ; A29A BD B3                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level10_map_changes:
         .addr   LB3DC                           ; A29C DC B3                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level10_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level10_indirect_subs:
         .byte   $00,$00                         ; A29E 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -5202,10 +5328,21 @@
 ; all zeroes
 level10_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A2A8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level10_colpf3:
+        .byte   $6A                             ; A2AE 6A                       j
+; color for girders and up-ropes
+level10_colpf0:
+        .byte   $08                             ; A2AF 08                       .
+; color for ladders and down-ropes
+level10_colpf1:
+        .byte   $C6                             ; A2B0 C6                       .
+; color for bombs
+level10_colpf2:
+        .byte   $1A                             ; A2B1 1A                       .
 ; unknown
-level10_offs_46:
-        .byte   $6A,$08,$C6,$1A,$0C,$30,$54,$8C ; A2AE 6A 08 C6 1A 0C 30 54 8C  j....0T.
-        .byte   $00                             ; A2B6 00                       .
+level10_offs_50:
+        .byte   $0C,$30,$54,$8C,$00             ; A2B2 0C 30 54 8C 00           .0T..
 ; unknown, always $00 $00 $00
 level10_offs_55:
         .byte   $00,$00,$00                     ; A2B7 00 00 00                 ...
@@ -5265,21 +5402,21 @@
 ; pointer to ROM table or $06xx
 level11_unkn_table0:
         .addr   LB658                           ; A2D4 58 B6                    X.
-; map data
-level11_map0:
+; used to draw the level initially (see also map_changes)
+level11_map:
         .addr   data_b590                       ; A2D6 90 B5                    ..
-; map data
-level11_map1:
+; start of bombs in map data (which must come last!)
+level11_map_bombs:
         .addr   LB5D2                           ; A2D8 D2 B5                    ..
-; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. 2 bytes each, 1st is coarse-grid position, 2nd is: hi 4 bits = change_map index, lo 4 = indirect sub (unused). terminated by $FF.
 level11_bomblist:
         .addr   LB5FD                           ; A2DA FD B5                    ..
 ; address of list of addresses of map data, used for changing the map when certain bombs are picked up
 level11_map_changes:
         .addr   LB61A                           ; A2DC 1A B6                    ..
 ; ----------------------------------------------------------------------------
-; always $0000
-level11_offs_30:
+; pointer to list of indirect subs, always $0000 in this game
+level11_indirect_subs:
         .byte   $00,$00                         ; A2DE 00 00                    ..
 ; ----------------------------------------------------------------------------
 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -5298,10 +5435,21 @@
 ; all zeroes
 level11_offs_40:
         .byte   $00,$00,$00,$00,$00,$00         ; A2E8 00 00 00 00 00 00        ......
+; color (not sure what gets drawn in this color yet)
+level11_colpf3:
+        .byte   $08                             ; A2EE 08                       .
+; color for girders and up-ropes
+level11_colpf0:
+        .byte   $C6                             ; A2EF C6                       .
+; color for ladders and down-ropes
+level11_colpf1:
+        .byte   $96                             ; A2F0 96                       .
+; color for bombs
+level11_colpf2:
+        .byte   $28                             ; A2F1 28                       (
 ; unknown
-level11_offs_46:
-        .byte   $08,$C6,$96,$28,$0C,$2A,$4C,$6A ; A2EE 08 C6 96 28 0C 2A 4C 6A  ...(.*Lj
-        .byte   $8C                             ; A2F6 8C                       .
+level11_offs_50:
+        .byte   $0C,$2A,$4C,$6A,$8C             ; A2F2 0C 2A 4C 6A 8C           .*Lj.
 ; unknown, always $00 $00 $00
 level11_offs_55:
         .byte   $00,$00,$00                     ; A2F7 00 00 00                 ...
@@ -5312,8 +5460,7 @@
 level11_offs_60:
         .byte   $00,$00,$00,$00                 ; A2FC 00 00 00 00              ....
 ; level map data starts here
-level00_map:
-        .byte   $FE,$33,$9C,$FD,$04,$00,$44,$05 ; A300 FE 33 9C FD 04 00 44 05  .3....D.
+l00_map:.byte   $FE,$33,$9C,$FD,$04,$00,$44,$05 ; A300 FE 33 9C FD 04 00 44 05  .3....D.
         .byte   $06,$04,$15,$0A,$74,$15,$0A,$24 ; A308 06 04 15 0A 74 15 0A 24  ....t..$
         .byte   $22,$02,$74,$22,$02,$24,$25,$16 ; A310 22 02 74 22 02 24 25 16  ".t".$%.
         .byte   $04,$45,$04,$44,$45,$06,$8C,$45 ; A318 04 45 04 44 45 06 8C 45  .E.DE..E
@@ -5326,24 +5473,48 @@
         .byte   $15,$FE,$C9,$9C,$06,$18,$0A,$99 ; A350 15 FE C9 9C 06 18 0A 99  ........
         .byte   $18,$0A,$FE,$DA,$9C,$1D,$38,$06 ; A358 18 0A FE DA 9C 1D 38 06  ......8.
         .byte   $81,$38,$06,$FE,$B3,$9C         ; A360 81 38 06 FE B3 9C        .8....
-LA366:  .byte   $04,$12,$01,$38,$02,$01,$64,$02 ; A366 04 12 01 38 02 01 64 02  ...8..d.
+; gfx_draw instructions for bombs, used by bomb_pickup to get bomb coords. $ff terminated
+l00_map_bombs:
+        .byte   $04,$12,$01,$38,$02,$01,$64,$02 ; A366 04 12 01 38 02 01 64 02  ...8..d.
         .byte   $01,$98,$12,$01,$44,$22,$01,$58 ; A36E 01 98 12 01 44 22 01 58  ....D".X
         .byte   $22,$01,$04,$42,$01,$98,$42,$01 ; A376 22 01 04 42 01 98 42 01  "..B..B.
         .byte   $04,$52,$01,$38,$52,$01,$64,$52 ; A37E 04 52 01 38 52 01 64 52  .R.8R.dR
         .byte   $01,$98,$52,$01,$FF             ; A386 01 98 52 01 FF           ..R..
-LA38B:  .byte   $24,$00,$62,$10,$82,$20,$C4,$00 ; A38B 24 00 62 10 82 20 C4 00  $.b.. ..
+; 2 bytes per entry, terminated by $FF. 1st byte is coarse grid coords (top nybble = X, bottom = Y), 2nd byte is index into map_changes
+l00_bombs:
+        .byte   $24,$00,$62,$10,$82,$20,$C4,$00 ; A38B 24 00 62 10 82 20 C4 00  $.b.. ..
         .byte   $66,$30,$86,$40,$2A,$00,$CA,$00 ; A393 66 30 86 40 2A 00 CA 00  f0.@*...
         .byte   $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A39B 2C 00 6C 00 8C 00 CC 00  ,.l.....
+; terminator for l00_bombs
+l00_bombs_term:
         .byte   $FF                             ; A3A3 FF                       .
-LA3A4:  .byte   $00,$00,$AE,$A3,$B8,$A3,$C2,$A3 ; A3A4 00 00 AE A3 B8 A3 C2 A3  ........
-        .byte   $CC,$A3,$FE,$49,$9C,$FD,$04,$01 ; A3AC CC A3 FE 49 9C FD 04 01  ...I....
-        .byte   $64,$08,$02,$FF,$FE,$49,$9C,$FD ; A3B4 64 08 02 FF FE 49 9C FD  d....I..
-        .byte   $04,$FF,$34,$09,$02,$FF,$FE,$49 ; A3BC 04 FF 34 09 02 FF FE 49  ..4....I
-        .byte   $9C,$FD,$04,$00,$2C,$25,$05,$FF ; A3C4 9C FD 04 00 2C 25 05 FF  ....,%..
+; ----------------------------------------------------------------------------
+; 0000 = no change
+l00_map_changes:
+        .addr   L0000                           ; A3A4 00 00                    ..
+        .addr   l00_map_change_0                ; A3A6 AE A3                    ..
+        .addr   l00_map_change_1                ; A3A8 B8 A3                    ..
+        .addr   l00_map_change_2                ; A3AA C2 A3                    ..
+        .addr   l00_map_change_3                ; A3AC CC A3                    ..
+; ----------------------------------------------------------------------------
+l00_map_change_0:
+        .byte   $FE,$49,$9C,$FD,$04,$01,$64,$08 ; A3AE FE 49 9C FD 04 01 64 08  .I....d.
+        .byte   $02,$FF                         ; A3B6 02 FF                    ..
+l00_map_change_1:
+        .byte   $FE,$49,$9C,$FD,$04,$FF,$34,$09 ; A3B8 FE 49 9C FD 04 FF 34 09  .I....4.
+        .byte   $02,$FF                         ; A3C0 02 FF                    ..
+l00_map_change_2:
+        .byte   $FE,$49,$9C,$FD,$04,$00,$2C,$25 ; A3C2 FE 49 9C FD 04 00 2C 25  .I....,%
+        .byte   $05,$FF                         ; A3CA 05 FF                    ..
+l00_map_change_3:
         .byte   $FE,$49,$9C,$FD,$04,$00,$60,$25 ; A3CC FE 49 9C FD 04 00 60 25  .I....`%
-        .byte   $05,$FF,$00,$00,$00,$00,$00,$00 ; A3D4 05 FF 00 00 00 00 00 00  ........
-        .byte   $00,$00,$00,$00                 ; A3DC 00 00 00 00              ....
-LA3E0:  .byte   $FE,$33,$9C,$FD,$04,$00,$04,$05 ; A3E0 FE 33 9C FD 04 00 04 05  .3......
+        .byte   $05,$FF                         ; A3D4 05 FF                    ..
+; probably just filler
+zero_filler_a3d6:
+        .byte   $00,$00,$00,$00,$00,$00,$00,$00 ; A3D6 00 00 00 00 00 00 00 00  ........
+        .byte   $00,$00                         ; A3DE 00 00                    ..
+; level map data starts here
+l01_map:.byte   $FE,$33,$9C,$FD,$04,$00,$04,$05 ; A3E0 FE 33 9C FD 04 00 04 05  .3......
         .byte   $08,$34,$05,$0E,$7C,$05,$08,$14 ; A3E8 08 34 05 0E 7C 05 08 14  .4..|...
         .byte   $15,$04,$34,$15,$04,$5C,$15,$04 ; A3F0 15 04 34 15 04 5C 15 04  ..4..\..
         .byte   $7C,$15,$04,$04,$25,$10,$5C,$25 ; A3F8 7C 15 04 04 25 10 5C 25  |...%.\%
@@ -7071,9 +7242,9 @@
         lda     #$30                            ; BA13 A9 30                    .0
         sta     SAVMSC+1                        ; BA15 85 59                    .Y
         jsr     clear_screen_mem_jv             ; BA17 20 1E 80                  ..
-        lda     cur_level_map0                  ; BA1A AD D6 07                 ...
+        lda     cur_level_map                   ; BA1A AD D6 07                 ...
         sta     dm_progctr                      ; BA1D 85 C0                    ..
-        lda     cur_level_map0+1                ; BA1F AD D7 07                 ...
+        lda     cur_level_map+1                 ; BA1F AD D7 07                 ...
         sta     dm_progctr+1                    ; BA22 85 C1                    ..
         jsr     draw_map_jv                     ; BA24 20 00 80                  ..
         lda     #$30                            ; BA27 A9 30                    .0
@@ -7119,13 +7290,13 @@
 ; level is already drawn with all color regs set to black. for each color reg, wait 1 sec before turning it visible. this syncs up with the music because the music was written to sync with this actually
 sync_to_music:
         jsr     wait_1_sec                      ; BA71 20 9E BA                  ..
-        lda     cur_level_offs_46+3             ; BA74 AD F1 07                 ...
+        lda     cur_level_colpf2                ; BA74 AD F1 07                 ...
         sta     COLOR2                          ; BA77 8D C6 02                 ...
         jsr     wait_1_sec                      ; BA7A 20 9E BA                  ..
-        lda     cur_level_offs_46+2             ; BA7D AD F0 07                 ...
+        lda     cur_level_colpf1                ; BA7D AD F0 07                 ...
         sta     COLOR1                          ; BA80 8D C5 02                 ...
         jsr     wait_1_sec                      ; BA83 20 9E BA                  ..
-        lda     cur_level_offs_46+1             ; BA86 AD EF 07                 ...
+        lda     cur_level_colpf0                ; BA86 AD EF 07                 ...
         sta     COLOR0                          ; BA89 8D C4 02                 ...
         jsr     wait_1_sec                      ; BA8C 20 9E BA                  ..
         lda     #$00                            ; BA8F A9 00                    ..
@@ -7260,7 +7431,7 @@
         lda     #$BD                            ; BC88 A9 BD                    ..
         sta     work_level_sub1+1               ; BC8A 8D 85 07                 ...
         lda     #$4C                            ; BC8D A9 4C                    .L
-        sta     work_level_offs_46+7            ; BC8F 8D B5 07                 ...
+        sta     work_level_offs_50+3            ; BC8F 8D B5 07                 ...
 ; wait for score screen to finish (I think, anyway)
 wd_wait_scores:
         lda     work_level_sub1                 ; BC92 AD 84 07                 ...
-- 
cgit v1.2.3