aboutsummaryrefslogtreecommitdiff
path: root/jumpmanjr.dasm
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2016-09-02 00:00:39 -0400
committerB. Watson <yalhcru@gmail.com>2016-09-02 00:00:39 -0400
commit2501dc4ecbfc45170a84503a90eb15f5770e6918 (patch)
tree3b9ebc8179ab484f8293a989609f0561b9b92384 /jumpmanjr.dasm
parente9ec302bb089104385c020356dd47b64d6bd09a7 (diff)
downloadjumpmanjr-2501dc4ecbfc45170a84503a90eb15f5770e6918.tar.gz
bombs and level maps
Diffstat (limited to 'jumpmanjr.dasm')
-rw-r--r--jumpmanjr.dasm529
1 files changed, 350 insertions, 179 deletions
diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm
index 7da9faf..1d858f5 100644
--- a/jumpmanjr.dasm
+++ b/jumpmanjr.dasm
@@ -1,5 +1,5 @@
; da65 V2.15 - Git 104f898
-; Created: 2016-08-31 16:20:14
+; Created: 2016-09-01 23:57:51
; Input file: jumpmanjr.rom
; Page: 1
@@ -108,17 +108,21 @@ work_level_points_per_bomb:= $0790 ; points awarded per bomb pickup
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
@@ -137,17 +141,21 @@ cur_level_points_per_bomb:= $07D0 ; points awarded per bomb pickup
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
@@ -1294,8 +1302,8 @@ csm_loop:
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 ..
@@ -1351,7 +1359,7 @@ ej_loop:lda #$E6 ; 8777 A9 E6
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
@@ -1359,7 +1367,7 @@ ej_loop:lda #$E6 ; 8777 A9 E6
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)
@@ -1370,7 +1378,7 @@ check_bomb_coll:
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 .
@@ -1387,6 +1395,8 @@ bomb_pickup:
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 ...
@@ -1408,9 +1418,9 @@ bl_ok: cmp bombloc ; 87D7 C5 B6
; ----------------------------------------------------------------------------
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 .
@@ -1419,8 +1429,9 @@ mul_y: tya ; 87EA 98
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 ..
@@ -1441,7 +1452,7 @@ unkn1: lda ($B0),y ; 87F2 B1 B0
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 ..
@@ -1465,9 +1476,9 @@ check_ind_sub:
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 ...
@@ -1501,9 +1512,11 @@ erase_bomb:
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 `
; ----------------------------------------------------------------------------
@@ -1513,15 +1526,18 @@ sfx_bomb_pickup:
.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 `
; ----------------------------------------------------------------------------
@@ -3183,9 +3199,9 @@ setup_get_ready_dl:
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 ...
@@ -3207,13 +3223,13 @@ copy_level_desc_2:
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 ...
@@ -3570,7 +3586,7 @@ L9949: lda player_x_pos ; 9949 AD 7E 06
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 ..
@@ -3585,7 +3601,7 @@ L9967: clc ; 9967 18
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
@@ -4201,21 +4217,21 @@ level00_offs_19:
; 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
@@ -4234,10 +4250,21 @@ level00_sub_eol:
; 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 ...
@@ -4297,21 +4324,21 @@ level01_offs_19:
; 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
@@ -4330,10 +4357,21 @@ level01_sub_eol:
; 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 ...
@@ -4393,21 +4431,21 @@ level02_offs_19:
; 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
@@ -4426,10 +4464,21 @@ level02_sub_eol:
; 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 ...
@@ -4489,21 +4538,21 @@ level03_offs_19:
; 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
@@ -4522,10 +4571,21 @@ level03_sub_eol:
; 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 ...
@@ -4585,21 +4645,21 @@ level04_offs_19:
; 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
@@ -4618,10 +4678,21 @@ level04_sub_eol:
; 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 ...
@@ -4681,21 +4752,21 @@ level05_offs_19:
; 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
@@ -4714,10 +4785,21 @@ level05_sub_eol:
; 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 ...
@@ -4777,21 +4859,21 @@ level06_offs_19:
; 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
@@ -4810,10 +4892,21 @@ level06_sub_eol:
; 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 ...
@@ -4873,21 +4966,21 @@ level07_offs_19:
; 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
@@ -4906,10 +4999,21 @@ level07_sub_eol:
; 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 ...
@@ -4969,21 +5073,21 @@ level08_offs_19:
; 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
@@ -5002,10 +5106,21 @@ level08_sub_eol:
; 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 ...
@@ -5065,21 +5180,21 @@ level09_offs_19:
; 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
@@ -5098,10 +5213,21 @@ level09_sub_eol:
; 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 ...
@@ -5161,21 +5287,21 @@ level10_offs_19:
; 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
@@ -5194,10 +5320,21 @@ level10_sub_eol:
; 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 ...
@@ -5257,21 +5394,21 @@ level11_offs_19:
; 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
@@ -5290,10 +5427,21 @@ level11_sub_eol:
; 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 ...
@@ -5304,8 +5452,7 @@ level11_offs_58:
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
@@ -5318,24 +5465,48 @@ level00_map:
.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 |...%.\%
@@ -7063,9 +7234,9 @@ LBA00: lda #$40 ; BA00 A9 40
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
@@ -7111,13 +7282,13 @@ show_level_name:
; 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 ..
@@ -7252,7 +7423,7 @@ LBC5E: lda jiffy_timer_1 ; BC5E AD 1A 06
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 ...