aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2016-08-31 04:50:44 -0400
committerB. Watson <yalhcru@gmail.com>2016-08-31 04:50:44 -0400
commit8fefba0a2262d725dad7c25edc023c2590029126 (patch)
treeb73e9a3205bd8c55d0a0ffcd17ebb86e5fa1797d
parent01ecb0758b7c0c165bc6e5d61cf613c420bfe383 (diff)
downloadjumpmanjr-8fefba0a2262d725dad7c25edc023c2590029126.tar.gz
bomb_pickup stuff
-rw-r--r--Makefile2
-rw-r--r--jumpmanjr.dasm408
-rw-r--r--jumpmanjr.info83
-rw-r--r--leveldesc.info70
-rw-r--r--main.info13
-rw-r--r--mklevelinfo.pl5
6 files changed, 354 insertions, 227 deletions
diff --git a/Makefile b/Makefile
index eb342ae..0279bf1 100644
--- a/Makefile
+++ b/Makefile
@@ -18,6 +18,8 @@ leveldesc.info: mklevelinfo.pl
perl mklevelinfo.pl > leveldesc.info
html: jumpmanjr.html
+ git add jumpmanjr.html
+ git commit -m'regenerate jumpmanjr.html'
jumpmanjr.html: jumpmanjr.dasm
vim +TOhtml '+w!jumpmanjr.html' '+qall!' jumpmanjr.dasm
diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm
index 4273121..83e6524 100644
--- a/jumpmanjr.dasm
+++ b/jumpmanjr.dasm
@@ -1,5 +1,5 @@
; da65 V2.15 - Git 104f898
-; Created: 2016-08-30 17:25:09
+; Created: 2016-08-31 04:47:36
; Input file: jumpmanjr.rom
; Page: 1
@@ -11,6 +11,8 @@ L0000 := $0000
dm_ypos := $0054 ; see draw_map and level_maps.txt
dm_xpos := $0055 ; see draw_map and level_maps.txt
SAVMSC := $0058 ; OS's idea of the start of screen memory [redundant to set here?]
+blistptr := $00B4 ; bomb_pickup: points to current level's bomblist
+bombloc := $00B6 ; bomb_pickup: position of the bomb Jumpman just touched, on 8x8 coarse grid
dm_count := $00BE ; graphics object definition is this long
dm_length := $00BF ; see draw_map and level_maps.txt
dm_progctr := $00C0 ; see draw_map and level_maps.txt
@@ -100,14 +102,15 @@ work_level_num_bombs:= $078A ; number of bombs to pick up on
work_level_bullet_max:= $078B ; 0 = no bullets, range 0-4.
work_level_y_start:= $078C ; jumpman starting Y position
work_level_x_start:= $078D ; jumpman starting X position
-work_level_offs_14:= $078E ; points to $0600
+work_level_fudge_x:= $078E ; fudge factor for bomb locations, always $00
+work_level_fudge_y:= $078F ; fudge factor for bomb locations, always $06
work_level_points_per_bomb:= $0790 ; points awarded per bomb pickup (always $64 aka 100)
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_map2 := $079A ; map data
+work_level_bomblist:= $079A ; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
work_level_unkn_table1:= $079C ; unknown, pointer to a ROM table or $0000
work_level_offs_30:= $079E ; always $0000
work_level_sub_bomb:= $07A0 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -128,14 +131,15 @@ cur_level_num_bombs:= $07CA ; number of bombs to pick up on
cur_level_bullet_max:= $07CB ; 0 = no bullets, range 0-4.
cur_level_y_start:= $07CC ; jumpman starting Y position
cur_level_x_start:= $07CD ; jumpman starting X position
-cur_level_offs_14:= $07CE ; points to $0600
+cur_level_fudge_x:= $07CE ; fudge factor for bomb locations, always $00
+cur_level_fudge_y:= $07CF ; fudge factor for bomb locations, always $06
cur_level_points_per_bomb:= $07D0 ; points awarded per bomb pickup (always $64 aka 100)
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_map2 := $07DA ; map data
+cur_level_bomblist:= $07DA ; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
cur_level_unkn_table1:= $07DC ; unknown, pointer to a ROM table or $0000
cur_level_offs_30:= $07DE ; always $0000
cur_level_sub_bomb:= $07E0 ; called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine
@@ -1370,48 +1374,53 @@ check_bomb_coll:
bomb_pickup:
lda player_x_pos ; 87A8 AD 7E 06 .~.
clc ; 87AB 18 .
- adc work_level_offs_14 ; 87AC 6D 8E 07 m..
+ adc work_level_fudge_x ; 87AC 6D 8E 07 m..
and #$E0 ; 87AF 29 E0 ).
- sta $B6 ; 87B1 85 B6 ..
+ sta bombloc ; 87B1 85 B6 ..
clc ; 87B3 18 .
lda player_y_pos ; 87B4 AD 83 06 ...
- adc work_level_offs_14+1 ; 87B7 6D 8F 07 m..
+ adc work_level_fudge_y ; 87B7 6D 8F 07 m..
and #$E0 ; 87BA 29 E0 ).
lsr a ; 87BC 4A J
lsr a ; 87BD 4A J
lsr a ; 87BE 4A J
lsr a ; 87BF 4A J
- ora $B6 ; 87C0 05 B6 ..
- sta $B6 ; 87C2 85 B6 ..
- lda work_level_map2 ; 87C4 AD 9A 07 ...
- sta $B4 ; 87C7 85 B4 ..
- lda work_level_map2+1 ; 87C9 AD 9B 07 ...
- sta $B5 ; 87CC 85 B5 ..
+ ora bombloc ; 87C0 05 B6 ..
+ sta bombloc ; 87C2 85 B6 ..
+ lda work_level_bomblist ; 87C4 AD 9A 07 ...
+ sta blistptr ; 87C7 85 B4 ..
+ lda work_level_bomblist+1 ; 87C9 AD 9B 07 ...
+ sta blistptr+1 ; 87CC 85 B5 ..
ldy #$00 ; 87CE A0 00 ..
-L87D0: lda ($B4),y ; 87D0 B1 B4 ..
+; set Y to the index of the current bomb (or rts if we can't find it)
+search_bomblist:
+ lda (blistptr),y ; 87D0 B1 B4 ..
cmp #$FF ; 87D2 C9 FF ..
- bne L87D7 ; 87D4 D0 01 ..
+ bne bl_ok ; 87D4 D0 01 ..
rts ; 87D6 60 `
; ----------------------------------------------------------------------------
-L87D7: cmp $B6 ; 87D7 C5 B6 ..
- beq L87E0 ; 87D9 F0 05 ..
+bl_ok: cmp bombloc ; 87D7 C5 B6 ..
+ beq bomb_found ; 87D9 F0 05 ..
iny ; 87DB C8 .
iny ; 87DC C8 .
- jmp L87D0 ; 87DD 4C D0 87 L..
+ jmp search_bomblist ; 87DD 4C D0 87 L..
; ----------------------------------------------------------------------------
-L87E0: lda work_level_map1 ; 87E0 AD 98 07 ...
+bomb_found:
+ lda work_level_map1 ; 87E0 AD 98 07 ...
sta $B0 ; 87E3 85 B0 ..
lda work_level_map1+1 ; 87E5 AD 99 07 ...
sta $B1 ; 87E8 85 B1 ..
- tya ; 87EA 98 .
+; multiply Y by 1.5 (only works because Y will always be even at this point)
+mul_y: tya ; 87EA 98 .
sta $B2 ; 87EB 85 B2 ..
lsr a ; 87ED 4A J
clc ; 87EE 18 .
adc $B2 ; 87EF 65 B2 e.
tay ; 87F1 A8 .
- lda ($B0),y ; 87F2 B1 B0 ..
+; find out: why are we storing this at 06DC?
+unkn1: lda ($B0),y ; 87F2 B1 B0 ..
sta $06DC ; 87F4 8D DC 06 ...
iny ; 87F7 C8 .
lda ($B0),y ; 87F8 B1 B0 ..
@@ -1424,14 +1433,16 @@ L87E0: lda work_level_map1 ; 87E0 AD 98 07
jsr cue_sfx_jv ; 8809 20 06 80 ..
ldy $B2 ; 880C A4 B2 ..
iny ; 880E C8 .
- lda ($B4),y ; 880F B1 B4 ..
- beq L8856 ; 8811 F0 43 .C
+ lda (blistptr),y ; 880F B1 B4 ..
+ beq call_bomb_sub ; 8811 F0 43 .C
and #$F0 ; 8813 29 F0 ).
- beq L8831 ; 8815 F0 1A ..
+ beq check_ind_sub ; 8815 F0 1A ..
lsr a ; 8817 4A J
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)
+change_map:
lda work_level_unkn_table1 ; 881B AD 9C 07 ...
sta $B0 ; 881E 85 B0 ..
lda work_level_unkn_table1+1 ; 8820 AD 9D 07 ...
@@ -1442,14 +1453,18 @@ L87E0: lda work_level_map1 ; 87E0 AD 98 07
lda ($B0),y ; 882A B1 B0 ..
sta dm_progctr+1 ; 882C 85 C1 ..
jsr draw_map_jv ; 882E 20 00 80 ..
-L8831: ldy $B2 ; 8831 A4 B2 ..
+; see if this bomb calls an indirect sub (none of them do in this game, this is useless code)
+check_ind_sub:
+ ldy $B2 ; 8831 A4 B2 ..
iny ; 8833 C8 .
- lda ($B4),y ; 8834 B1 B4 ..
- beq L8856 ; 8836 F0 1E ..
+ lda (blistptr),y ; 8834 B1 B4 ..
+ beq call_bomb_sub ; 8836 F0 1E ..
and #$0F ; 8838 29 0F ).
- beq L8856 ; 883A F0 1A ..
+ beq call_bomb_sub ; 883A F0 1A ..
asl a ; 883C 0A .
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 ...
sta $B0 ; 8841 85 B0 ..
lda work_level_offs_30+1 ; 8843 AD 9F 07 ...
@@ -1460,20 +1475,26 @@ L8831: ldy $B2 ; 8831 A4 B2
lda ($B0),y ; 884E B1 B0 ..
sta $06E5 ; 8850 8D E5 06 ...
jsr L06E3 ; 8853 20 E3 06 ..
-L8856: lda work_level_sub_bomb ; 8856 AD A0 07 ...
+; call bomb pickup subroutine for this level (which might just do an RTS if there's no special action)
+call_bomb_sub:
+ lda work_level_sub_bomb ; 8856 AD A0 07 ...
sta $06E4 ; 8859 8D E4 06 ...
lda work_level_sub_bomb+1 ; 885C AD A1 07 ...
sta $06E5 ; 885F 8D E5 06 ...
jsr L06E3 ; 8862 20 E3 06 ..
+; add points to score for picking up bomb (theoretically different on every level, but really $64 aka 100 for all of them)
+bomb_add_points:
clc ; 8865 18 .
lda score ; 8866 AD 00 07 ...
adc work_level_points_per_bomb ; 8869 6D 90 07 m..
sta score ; 886C 8D 00 07 ...
- bcc L8879 ; 886F 90 08 ..
+ bcc erase_bomb ; 886F 90 08 ..
inc score+1 ; 8871 EE 01 07 ...
- bne L8879 ; 8874 D0 03 ..
+ bne erase_bomb ; 8874 D0 03 ..
inc score+2 ; 8876 EE 02 07 ...
-L8879: lda #$D9 ; 8879 A9 D9 ..
+; make the bomb disappear by drawing sh_blank in its location
+erase_bomb:
+ lda #$D9 ; 8879 A9 D9 ..
sta dm_progctr ; 887B 85 C0 ..
lda #$06 ; 887D A9 06 ..
sta dm_progctr+1 ; 887F 85 C1 ..
@@ -4159,9 +4180,12 @@ level00_y_start:
; jumpman starting X position
level00_x_start:
.byte $7C ; A00D 7C |
-; points to $0600
-level00_offs_14:
- .byte $00,$06 ; A00E 00 06 ..
+; fudge factor for bomb locations, always $00
+level00_fudge_x:
+ .byte $00 ; A00E 00 .
+; fudge factor for bomb locations, always $06
+level00_fudge_y:
+ .byte $06 ; A00F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level00_points_per_bomb:
.byte $64 ; A010 64 d
@@ -4183,9 +4207,11 @@ level00_map0:
; map data
level00_map1:
.addr LA366 ; A018 66 A3 f.
-; map data
-level00_map2:
- .addr LA38B ; A01A 8B A3 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level00_bomblist:
+ .byte $8B,$A3 ; A01A 8B A3 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level00_unkn_table1:
.addr LA3A4 ; A01C A4 A3 ..
@@ -4252,9 +4278,12 @@ level01_y_start:
; jumpman starting X position
level01_x_start:
.byte $7C ; A04D 7C |
-; points to $0600
-level01_offs_14:
- .byte $00,$06 ; A04E 00 06 ..
+; fudge factor for bomb locations, always $00
+level01_fudge_x:
+ .byte $00 ; A04E 00 .
+; fudge factor for bomb locations, always $06
+level01_fudge_y:
+ .byte $06 ; A04F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level01_points_per_bomb:
.byte $64 ; A050 64 d
@@ -4276,9 +4305,11 @@ level01_map0:
; map data
level01_map1:
.addr LA446 ; A058 46 A4 F.
-; map data
-level01_map2:
- .addr LA477 ; A05A 77 A4 w.
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level01_bomblist:
+ .byte $77,$A4 ; A05A 77 A4 w.
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level01_unkn_table1:
.addr L0000 ; A05C 00 00 ..
@@ -4345,9 +4376,12 @@ level02_y_start:
; jumpman starting X position
level02_x_start:
.byte $B4 ; A08D B4 .
-; points to $0600
-level02_offs_14:
- .byte $00,$06 ; A08E 00 06 ..
+; fudge factor for bomb locations, always $00
+level02_fudge_x:
+ .byte $00 ; A08E 00 .
+; fudge factor for bomb locations, always $06
+level02_fudge_y:
+ .byte $06 ; A08F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level02_points_per_bomb:
.byte $64 ; A090 64 d
@@ -4369,9 +4403,11 @@ level02_map0:
; map data
level02_map1:
.addr LA62F ; A098 2F A6 /.
-; map data
-level02_map2:
- .addr LA654 ; A09A 54 A6 T.
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level02_bomblist:
+ .byte $54,$A6 ; A09A 54 A6 T.
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level02_unkn_table1:
.addr L0000 ; A09C 00 00 ..
@@ -4438,9 +4474,12 @@ level03_y_start:
; jumpman starting X position
level03_x_start:
.byte $7C ; A0CD 7C |
-; points to $0600
-level03_offs_14:
- .byte $00,$06 ; A0CE 00 06 ..
+; fudge factor for bomb locations, always $00
+level03_fudge_x:
+ .byte $00 ; A0CE 00 .
+; fudge factor for bomb locations, always $06
+level03_fudge_y:
+ .byte $06 ; A0CF 06 .
; points awarded per bomb pickup (always $64 aka 100)
level03_points_per_bomb:
.byte $64 ; A0D0 64 d
@@ -4462,9 +4501,11 @@ level03_map0:
; map data
level03_map1:
.addr LA7D5 ; A0D8 D5 A7 ..
-; map data
-level03_map2:
- .addr LA806 ; A0DA 06 A8 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level03_bomblist:
+ .byte $06,$A8 ; A0DA 06 A8 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level03_unkn_table1:
.addr L0000 ; A0DC 00 00 ..
@@ -4531,9 +4572,12 @@ level04_y_start:
; jumpman starting X position
level04_x_start:
.byte $34 ; A10D 34 4
-; points to $0600
-level04_offs_14:
- .byte $00,$06 ; A10E 00 06 ..
+; fudge factor for bomb locations, always $00
+level04_fudge_x:
+ .byte $00 ; A10E 00 .
+; fudge factor for bomb locations, always $06
+level04_fudge_y:
+ .byte $06 ; A10F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level04_points_per_bomb:
.byte $64 ; A110 64 d
@@ -4555,9 +4599,11 @@ level04_map0:
; map data
level04_map1:
.addr LAB42 ; A118 42 AB B.
-; map data
-level04_map2:
- .addr LAB6D ; A11A 6D AB m.
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level04_bomblist:
+ .byte $6D,$AB ; A11A 6D AB m.
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level04_unkn_table1:
.addr LAB8A ; A11C 8A AB ..
@@ -4624,9 +4670,12 @@ level05_y_start:
; jumpman starting X position
level05_x_start:
.byte $34 ; A14D 34 4
-; points to $0600
-level05_offs_14:
- .byte $00,$06 ; A14E 00 06 ..
+; fudge factor for bomb locations, always $00
+level05_fudge_x:
+ .byte $00 ; A14E 00 .
+; fudge factor for bomb locations, always $06
+level05_fudge_y:
+ .byte $06 ; A14F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level05_points_per_bomb:
.byte $64 ; A150 64 d
@@ -4648,9 +4697,11 @@ level05_map0:
; map data
level05_map1:
.addr LA974 ; A158 74 A9 t.
-; map data
-level05_map2:
- .addr LA9A5 ; A15A A5 A9 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level05_bomblist:
+ .byte $A5,$A9 ; A15A A5 A9 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level05_unkn_table1:
.addr L0000 ; A15C 00 00 ..
@@ -4717,9 +4768,12 @@ level06_y_start:
; jumpman starting X position
level06_x_start:
.byte $7C ; A18D 7C |
-; points to $0600
-level06_offs_14:
- .byte $00,$06 ; A18E 00 06 ..
+; fudge factor for bomb locations, always $00
+level06_fudge_x:
+ .byte $00 ; A18E 00 .
+; fudge factor for bomb locations, always $06
+level06_fudge_y:
+ .byte $06 ; A18F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level06_points_per_bomb:
.byte $64 ; A190 64 d
@@ -4741,9 +4795,11 @@ level06_map0:
; map data
level06_map1:
.addr LACBA ; A198 BA AC ..
-; map data
-level06_map2:
- .addr LACE5 ; A19A E5 AC ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level06_bomblist:
+ .byte $E5,$AC ; A19A E5 AC ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level06_unkn_table1:
.addr LAD02 ; A19C 02 AD ..
@@ -4810,9 +4866,12 @@ level07_y_start:
; jumpman starting X position
level07_x_start:
.byte $7C ; A1CD 7C |
-; points to $0600
-level07_offs_14:
- .byte $00,$06 ; A1CE 00 06 ..
+; fudge factor for bomb locations, always $00
+level07_fudge_x:
+ .byte $00 ; A1CE 00 .
+; fudge factor for bomb locations, always $06
+level07_fudge_y:
+ .byte $06 ; A1CF 06 .
; points awarded per bomb pickup (always $64 aka 100)
level07_points_per_bomb:
.byte $64 ; A1D0 64 d
@@ -4834,9 +4893,11 @@ level07_map0:
; map data
level07_map1:
.addr LAE4C ; A1D8 4C AE L.
-; map data
-level07_map2:
- .addr LAE71 ; A1DA 71 AE q.
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level07_bomblist:
+ .byte $71,$AE ; A1DA 71 AE q.
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level07_unkn_table1:
.addr L0000 ; A1DC 00 00 ..
@@ -4903,9 +4964,12 @@ level08_y_start:
; jumpman starting X position
level08_x_start:
.byte $9E ; A20D 9E .
-; points to $0600
-level08_offs_14:
- .byte $00,$06 ; A20E 00 06 ..
+; fudge factor for bomb locations, always $00
+level08_fudge_x:
+ .byte $00 ; A20E 00 .
+; fudge factor for bomb locations, always $06
+level08_fudge_y:
+ .byte $06 ; A20F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level08_points_per_bomb:
.byte $64 ; A210 64 d
@@ -4927,9 +4991,11 @@ level08_map0:
; map data
level08_map1:
.addr LB072 ; A218 72 B0 r.
-; map data
-level08_map2:
- .addr LB0A3 ; A21A A3 B0 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level08_bomblist:
+ .byte $A3,$B0 ; A21A A3 B0 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level08_unkn_table1:
.addr L0000 ; A21C 00 00 ..
@@ -4996,9 +5062,12 @@ level09_y_start:
; jumpman starting X position
level09_x_start:
.byte $3C ; A24D 3C <
-; points to $0600
-level09_offs_14:
- .byte $00,$06 ; A24E 00 06 ..
+; fudge factor for bomb locations, always $00
+level09_fudge_x:
+ .byte $00 ; A24E 00 .
+; fudge factor for bomb locations, always $06
+level09_fudge_y:
+ .byte $06 ; A24F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level09_points_per_bomb:
.byte $64 ; A250 64 d
@@ -5020,9 +5089,11 @@ level09_map0:
; map data
level09_map1:
.addr LB237 ; A258 37 B2 7.
-; map data
-level09_map2:
- .addr LB25C ; A25A 5C B2 \.
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level09_bomblist:
+ .byte $5C,$B2 ; A25A 5C B2 \.
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level09_unkn_table1:
.addr L0000 ; A25C 00 00 ..
@@ -5089,9 +5160,12 @@ level10_y_start:
; jumpman starting X position
level10_x_start:
.byte $C4 ; A28D C4 .
-; points to $0600
-level10_offs_14:
- .byte $00,$06 ; A28E 00 06 ..
+; fudge factor for bomb locations, always $00
+level10_fudge_x:
+ .byte $00 ; A28E 00 .
+; fudge factor for bomb locations, always $06
+level10_fudge_y:
+ .byte $06 ; A28F 06 .
; points awarded per bomb pickup (always $64 aka 100)
level10_points_per_bomb:
.byte $64 ; A290 64 d
@@ -5113,9 +5187,11 @@ level10_map0:
; map data
level10_map1:
.addr LB38F ; A298 8F B3 ..
-; map data
-level10_map2:
- .addr LB3BD ; A29A BD B3 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level10_bomblist:
+ .byte $BD,$B3 ; A29A BD B3 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level10_unkn_table1:
.addr LB3DC ; A29C DC B3 ..
@@ -5182,9 +5258,12 @@ level11_y_start:
; jumpman starting X position
level11_x_start:
.byte $7C ; A2CD 7C |
-; points to $0600
-level11_offs_14:
- .byte $00,$06 ; A2CE 00 06 ..
+; fudge factor for bomb locations, always $00
+level11_fudge_x:
+ .byte $00 ; A2CE 00 .
+; fudge factor for bomb locations, always $06
+level11_fudge_y:
+ .byte $06 ; A2CF 06 .
; points awarded per bomb pickup (always $64 aka 100)
level11_points_per_bomb:
.byte $64 ; A2D0 64 d
@@ -5206,9 +5285,11 @@ level11_map0:
; map data
level11_map1:
.addr LB5D2 ; A2D8 D2 B5 ..
-; map data
-level11_map2:
- .addr LB5FD ; A2DA FD B5 ..
+; ----------------------------------------------------------------------------
+; addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.
+level11_bomblist:
+ .byte $FD,$B5 ; A2DA FD B5 ..
+; ----------------------------------------------------------------------------
; unknown, pointer to a ROM table or $0000
level11_unkn_table1:
.addr LB61A ; A2DC 1A B6 ..
@@ -5265,11 +5346,10 @@ LA366: .byte $04,$12,$01,$38,$02,$01,$64,$02 ; A366 04 12 01 38 02 01 64 02
.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.. ..
- .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.....
- .byte $FF ; A3A3 FF .
+ .byte $01,$98,$52,$01,$FF,$24,$00,$62 ; A386 01 98 52 01 FF 24 00 62 ..R..$.b
+ .byte $10,$82,$20,$C4,$00,$66,$30,$86 ; A38E 10 82 20 C4 00 66 30 86 .. ..f0.
+ .byte $40,$2A,$00,$CA,$00,$2C,$00,$6C ; A396 40 2A 00 CA 00 2C 00 6C @*...,.l
+ .byte $00,$8C,$00,$CC,$00,$FF ; A39E 00 8C 00 CC 00 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..
@@ -5297,12 +5377,11 @@ LA446: .byte $04,$02,$01,$38,$02,$01,$64,$02 ; A446 04 02 01 38 02 01 64 02
.byte $20,$22,$01,$7C,$22,$01,$38,$32 ; A45E 20 22 01 7C 22 01 38 32 ".|".82
.byte $01,$64,$32,$01,$04,$52,$01,$38 ; A466 01 64 32 01 04 52 01 38 .d2..R.8
.byte $52,$01,$64,$52,$01,$98,$52,$01 ; A46E 52 01 64 52 01 98 52 01 R.dR..R.
- .byte $FF ; A476 FF .
-LA477: .byte $22,$00,$62,$00,$82,$00,$C2,$00 ; A477 22 00 62 00 82 00 C2 00 ".b.....
- .byte $24,$00,$64,$00,$84,$00,$C4,$00 ; A47F 24 00 64 00 84 00 C4 00 $.d.....
- .byte $46,$00,$A6,$00,$68,$00,$88,$00 ; A487 46 00 A6 00 68 00 88 00 F...h...
- .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A48F 2C 00 6C 00 8C 00 CC 00 ,.l.....
- .byte $FF ; A497 FF .
+ .byte $FF,$22,$00,$62,$00,$82,$00,$C2 ; A476 FF 22 00 62 00 82 00 C2 .".b....
+ .byte $00,$24,$00,$64,$00,$84,$00,$C4 ; A47E 00 24 00 64 00 84 00 C4 .$.d....
+ .byte $00,$46,$00,$A6,$00,$68,$00,$88 ; A486 00 46 00 A6 00 68 00 88 .F...h..
+ .byte $00,$2C,$00,$6C,$00,$8C,$00,$CC ; A48E 00 2C 00 6C 00 8C 00 CC .,.l....
+ .byte $00,$FF ; A496 00 FF ..
; ----------------------------------------------------------------------------
; not sure what this actually does
electrocution_bomb_pickup:
@@ -5435,11 +5514,10 @@ LA62F: .byte $04,$02,$01,$04,$12,$01,$04,$22 ; A62F 04 02 01 04 12 01 04 22
.byte $01,$04,$32,$01,$04,$42,$01,$04 ; A637 01 04 32 01 04 42 01 04 ..2..B..
.byte $52,$01,$98,$02,$01,$98,$12,$01 ; A63F 52 01 98 02 01 98 12 01 R.......
.byte $98,$22,$01,$98,$32,$01,$98,$42 ; A647 98 22 01 98 32 01 98 42 ."..2..B
- .byte $01,$98,$52,$01,$FF ; A64F 01 98 52 01 FF ..R..
-LA654: .byte $22,$00,$24,$00,$26,$00,$28,$00 ; A654 22 00 24 00 26 00 28 00 ".$.&.(.
- .byte $2A,$00,$2C,$00,$C2,$00,$C4,$00 ; A65C 2A 00 2C 00 C2 00 C4 00 *.,.....
- .byte $C6,$00,$C8,$00,$CA,$00,$CC,$00 ; A664 C6 00 C8 00 CA 00 CC 00 ........
- .byte $FF ; A66C FF .
+ .byte $01,$98,$52,$01,$FF,$22,$00,$24 ; A64F 01 98 52 01 FF 22 00 24 ..R..".$
+ .byte $00,$26,$00,$28,$00,$2A,$00,$2C ; A657 00 26 00 28 00 2A 00 2C .&.(.*.,
+ .byte $00,$C2,$00,$C4,$00,$C6,$00,$C8 ; A65F 00 C2 00 C4 00 C6 00 C8 ........
+ .byte $00,$CA,$00,$CC,$00,$FF ; A667 00 CA 00 CC 00 FF ......
LA66D: .byte $00,$00,$00,$01,$7A,$01,$01,$66 ; A66D 00 00 00 01 7A 01 01 66 ....z..f
.byte $03,$86,$A6,$06,$4C,$4A,$01,$66 ; A675 03 86 A6 06 4C 4A 01 66 ....LJ.f
.byte $04,$86,$A6,$06,$A4,$CA,$01,$66 ; A67D 04 86 A6 06 A4 CA 01 66 .......f
@@ -5589,12 +5667,11 @@ LA7D5: .byte $40,$02,$01,$5C,$02,$01,$24,$12 ; A7D5 40 02 01 5C 02 01 24 12
.byte $60,$22,$01,$98,$22,$01,$18,$32 ; A7ED 60 22 01 98 22 01 18 32 `".."..2
.byte $01,$84,$32,$01,$3C,$42,$01,$60 ; A7F5 01 84 32 01 3C 42 01 60 ..2.<B.`
.byte $42,$01,$04,$52,$01,$98,$52,$01 ; A7FD 42 01 04 52 01 98 52 01 B..R..R.
- .byte $FF ; A805 FF .
-LA806: .byte $62,$00,$82,$00,$44,$00,$64,$00 ; A806 62 00 82 00 44 00 64 00 b...D.d.
- .byte $84,$00,$A4,$00,$26,$00,$66,$00 ; A80E 84 00 A4 00 26 00 66 00 ....&.f.
- .byte $86,$00,$C6,$00,$48,$00,$A8,$00 ; A816 86 00 C6 00 48 00 A8 00 ....H...
- .byte $6A,$00,$8A,$00,$2C,$00,$CC,$00 ; A81E 6A 00 8A 00 2C 00 CC 00 j...,...
- .byte $FF ; A826 FF .
+ .byte $FF,$62,$00,$82,$00,$44,$00,$64 ; A805 FF 62 00 82 00 44 00 64 .b...D.d
+ .byte $00,$84,$00,$A4,$00,$26,$00,$66 ; A80D 00 84 00 A4 00 26 00 66 .....&.f
+ .byte $00,$86,$00,$C6,$00,$48,$00,$A8 ; A815 00 86 00 C6 00 48 00 A8 .....H..
+ .byte $00,$6A,$00,$8A,$00,$2C,$00,$CC ; A81D 00 6A 00 8A 00 2C 00 CC .j...,..
+ .byte $00,$FF ; A825 00 FF ..
; ----------------------------------------------------------------------------
hellstones_sub3:
lda $0619 ; A827 AD 19 06 ...
@@ -5734,12 +5811,11 @@ LA974: .byte $24,$02,$01,$44,$02,$01,$58,$02 ; A974 24 02 01 44 02 01 58 02
.byte $40,$32,$01,$5C,$32,$01,$40,$42 ; A98C 40 32 01 5C 32 01 40 42 @2.\2.@B
.byte $01,$5C,$42,$01,$04,$52,$01,$3C ; A994 01 5C 42 01 04 52 01 3C .\B..R.<
.byte $52,$01,$60,$52,$01,$98,$52,$01 ; A99C 52 01 60 52 01 98 52 01 R.`R..R.
- .byte $FF ; A9A4 FF .
-LA9A5: .byte $42,$00,$62,$00,$82,$00,$A2,$00 ; A9A5 42 00 62 00 82 00 A2 00 B.b.....
- .byte $64,$00,$84,$00,$46,$00,$A6,$00 ; A9AD 64 00 84 00 46 00 A6 00 d...F...
- .byte $68,$00,$88,$00,$6A,$00,$8A,$00 ; A9B5 68 00 88 00 6A 00 8A 00 h...j...
- .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A9BD 2C 00 6C 00 8C 00 CC 00 ,.l.....
- .byte $FF ; A9C5 FF .
+ .byte $FF,$42,$00,$62,$00,$82,$00,$A2 ; A9A4 FF 42 00 62 00 82 00 A2 .B.b....
+ .byte $00,$64,$00,$84,$00,$46,$00,$A6 ; A9AC 00 64 00 84 00 46 00 A6 .d...F..
+ .byte $00,$68,$00,$88,$00,$6A,$00,$8A ; A9B4 00 68 00 88 00 6A 00 8A .h...j..
+ .byte $00,$2C,$00,$6C,$00,$8C,$00,$CC ; A9BC 00 2C 00 6C 00 8C 00 CC .,.l....
+ .byte $00,$FF ; A9C4 00 FF ..
; ----------------------------------------------------------------------------
LA9C6: jsr L8036 ; A9C6 20 36 80 6.
lda #$02 ; A9C9 A9 02 ..
@@ -5892,11 +5968,10 @@ LAB42: .byte $04,$02,$01,$44,$02,$01,$24,$16 ; AB42 04 02 01 44 02 01 24 16
.byte $22,$01,$24,$32,$01,$44,$32,$01 ; AB52 22 01 24 32 01 44 32 01 ".$2.D2.
.byte $64,$32,$01,$24,$52,$01,$44,$52 ; AB5A 64 32 01 24 52 01 44 52 d2.$R.DR
.byte $01,$64,$52,$01,$84,$52,$01,$98 ; AB62 01 64 52 01 84 52 01 98 .dR..R..
- .byte $52,$01,$FF ; AB6A 52 01 FF R..
-LAB6D: .byte $22,$10,$62,$20,$44,$30,$66,$40 ; AB6D 22 10 62 20 44 30 66 40 ".b D0f@
- .byte $86,$50,$C6,$60,$48,$70,$68,$80 ; AB75 86 50 C6 60 48 70 68 80 .P.`Hph.
- .byte $88,$90,$4C,$A0,$6C,$B0,$8C,$C0 ; AB7D 88 90 4C A0 6C B0 8C C0 ..L.l...
- .byte $AC,$00,$CC,$D0,$FF ; AB85 AC 00 CC D0 FF .....
+ .byte $52,$01,$FF,$22,$10,$62,$20,$44 ; AB6A 52 01 FF 22 10 62 20 44 R..".b D
+ .byte $30,$66,$40,$86,$50,$C6,$60,$48 ; AB72 30 66 40 86 50 C6 60 48 0f@.P.`H
+ .byte $70,$68,$80,$88,$90,$4C,$A0,$6C ; AB7A 70 68 80 88 90 4C A0 6C ph...L.l
+ .byte $B0,$8C,$C0,$AC,$00,$CC,$D0,$FF ; AB82 B0 8C C0 AC 00 CC D0 FF ........
LAB8A: .byte $00,$00,$A6,$AB,$B6,$AB,$C0,$AB ; AB8A 00 00 A6 AB B6 AB C0 AB ........
.byte $D3,$AB,$DD,$AB,$F0,$AB,$FA,$AB ; AB92 D3 AB DD AB F0 AB FA AB ........
.byte $04,$AC,$0E,$AC,$18,$AC,$22,$AC ; AB9A 04 AC 0E AC 18 AC 22 AC ......".
@@ -5941,11 +6016,10 @@ LACBA: .byte $04,$02,$01,$3C,$02,$01,$60,$02 ; ACBA 04 02 01 3C 02 01 60 02
.byte $22,$01,$24,$32,$01,$78,$32,$01 ; ACCA 22 01 24 32 01 78 32 01 ".$2.x2.
.byte $24,$42,$01,$78,$42,$01,$04,$52 ; ACD2 24 42 01 78 42 01 04 52 $B.xB..R
.byte $01,$3C,$52,$01,$60,$52,$01,$98 ; ACDA 01 3C 52 01 60 52 01 98 .<R.`R..
- .byte $52,$01,$FF ; ACE2 52 01 FF R..
-LACE5: .byte $22,$10,$62,$20,$82,$30,$C2,$40 ; ACE5 22 10 62 20 82 30 C2 40 ".b .0.@
- .byte $46,$50,$A6,$50,$48,$60,$A8,$60 ; ACED 46 50 A6 50 48 60 A8 60 FP.PH`.`
- .byte $4A,$70,$AA,$70,$2C,$80,$6C,$00 ; ACF5 4A 70 AA 70 2C 80 6C 00 Jp.p,.l.
- .byte $8C,$00,$CC,$90,$FF ; ACFD 8C 00 CC 90 FF .....
+ .byte $52,$01,$FF,$22,$10,$62,$20,$82 ; ACE2 52 01 FF 22 10 62 20 82 R..".b .
+ .byte $30,$C2,$40,$46,$50,$A6,$50,$48 ; ACEA 30 C2 40 46 50 A6 50 48 0.@FP.PH
+ .byte $60,$A8,$60,$4A,$70,$AA,$70,$2C ; ACF2 60 A8 60 4A 70 AA 70 2C `.`Jp.p,
+ .byte $80,$6C,$00,$8C,$00,$CC,$90,$FF ; ACFA 80 6C 00 8C 00 CC 90 FF .l......
LAD02: .byte $00,$00,$16,$AD,$16,$AD,$20,$AD ; AD02 00 00 16 AD 16 AD 20 AD ...... .
.byte $20,$AD,$2A,$AD,$34,$AD,$3E,$AD ; AD0A 20 AD 2A AD 34 AD 3E AD .*.4.>.
.byte $48,$AD,$58,$AD,$FE,$49,$9C,$FD ; AD12 48 AD 58 AD FE 49 9C FD H.X..I..
@@ -6036,11 +6110,10 @@ LAE4C: .byte $04,$02,$01,$98,$02,$01,$04,$22 ; AE4C 04 02 01 98 02 01 04 22
.byte $01,$98,$22,$01,$18,$34,$01,$84 ; AE54 01 98 22 01 18 34 01 84 .."..4..
.byte $34,$01,$04,$42,$01,$98,$42,$01 ; AE5C 34 01 04 42 01 98 42 01 4..B..B.
.byte $04,$52,$01,$38,$52,$01,$64,$52 ; AE64 04 52 01 38 52 01 64 52 .R.8R.dR
- .byte $01,$98,$52,$01,$FF ; AE6C 01 98 52 01 FF ..R..
-LAE71: .byte $22,$00,$C2,$00,$26,$00,$C6,$00 ; AE71 22 00 C2 00 26 00 C6 00 "...&...
- .byte $48,$00,$A8,$00,$2A,$00,$CA,$00 ; AE79 48 00 A8 00 2A 00 CA 00 H...*...
- .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; AE81 2C 00 6C 00 8C 00 CC 00 ,.l.....
- .byte $FF ; AE89 FF .
+ .byte $01,$98,$52,$01,$FF,$22,$00,$C2 ; AE6C 01 98 52 01 FF 22 00 C2 ..R.."..
+ .byte $00,$26,$00,$C6,$00,$48,$00,$A8 ; AE74 00 26 00 C6 00 48 00 A8 .&...H..
+ .byte $00,$2A,$00,$CA,$00,$2C,$00,$6C ; AE7C 00 2A 00 CA 00 2C 00 6C .*...,.l
+ .byte $00,$8C,$00,$CC,$00,$FF ; AE84 00 8C 00 CC 00 FF ......
LAE8A: .byte $03,$00,$00,$01,$7C,$01,$01,$00 ; AE8A 03 00 00 01 7C 01 01 00 ....|...
.byte $04,$0C,$AF,$10,$86,$00,$01,$0F ; AE92 04 0C AF 10 86 00 01 0F ........
.byte $FF ; AE9A FF .
@@ -6206,12 +6279,11 @@ LB073: .byte $02,$01,$24,$02,$01,$44,$02,$01 ; B073 02 01 24 02 01 44 02 01
.byte $22,$01,$78,$22,$01,$04,$38,$01 ; B08B 22 01 78 22 01 04 38 01 ".x"..8.
.byte $1C,$46,$01,$78,$42,$01,$04,$52 ; B093 1C 46 01 78 42 01 04 52 .F.xB..R
.byte $01,$58,$52,$01,$98,$52,$01 ; B09B 01 58 52 01 98 52 01 .XR..R.
-LB0A2: .byte $FF ; B0A2 FF .
-LB0A3: .byte $22,$00,$42,$00,$62,$00,$A2,$00 ; B0A3 22 00 42 00 62 00 A2 00 ".B.b...
- .byte $C2,$00,$64,$00,$84,$00,$A4,$00 ; B0AB C2 00 64 00 84 00 A4 00 ..d.....
- .byte $46,$00,$A6,$00,$28,$00,$4A,$00 ; B0B3 46 00 A6 00 28 00 4A 00 F...(.J.
- .byte $AA,$00,$2C,$00,$8C,$00,$CC,$00 ; B0BB AA 00 2C 00 8C 00 CC 00 ..,.....
- .byte $FF ; B0C3 FF .
+LB0A2: .byte $FF,$22,$00,$42,$00,$62,$00,$A2 ; B0A2 FF 22 00 42 00 62 00 A2 .".B.b..
+ .byte $00,$C2,$00,$64,$00,$84,$00,$A4 ; B0AA 00 C2 00 64 00 84 00 A4 ...d....
+ .byte $00,$46,$00,$A6,$00,$28,$00,$4A ; B0B2 00 46 00 A6 00 28 00 4A .F...(.J
+ .byte $00,$AA,$00,$2C,$00,$8C,$00,$CC ; B0BA 00 AA 00 2C 00 8C 00 CC ...,....
+ .byte $00,$FF ; B0C2 00 FF ..
; ----------------------------------------------------------------------------
LB0C4: jsr L8036 ; B0C4 20 36 80 6.
lda #$10 ; B0C7 A9 10 ..
@@ -6390,11 +6462,10 @@ LB237: .byte $04,$02,$01,$38,$02,$01,$7C,$02 ; B237 04 02 01 38 02 01 7C 02
.byte $01,$38,$12,$01,$64,$12,$01,$98 ; B23F 01 38 12 01 64 12 01 98 .8..d...
.byte $12,$01,$04,$22,$01,$98,$39,$01 ; B247 12 01 04 22 01 98 39 01 ..."..9.
.byte $58,$47,$01,$04,$52,$01,$38,$52 ; B24F 58 47 01 04 52 01 38 52 XG..R.8R
- .byte $01,$98,$52,$01,$FF ; B257 01 98 52 01 FF ..R..
-LB25C: .byte $22,$00,$62,$00,$A2,$00,$64,$00 ; B25C 22 00 62 00 A2 00 64 00 ".b...d.
- .byte $84,$00,$C4,$00,$26,$00,$C8,$00 ; B264 84 00 C4 00 26 00 C8 00 ....&...
- .byte $8A,$00,$2C,$00,$6C,$00,$CC,$00 ; B26C 8A 00 2C 00 6C 00 CC 00 ..,.l...
- .byte $FF ; B274 FF .
+ .byte $01,$98,$52,$01,$FF,$22,$00,$62 ; B257 01 98 52 01 FF 22 00 62 ..R..".b
+ .byte $00,$A2,$00,$64,$00,$84,$00,$C4 ; B25F 00 A2 00 64 00 84 00 C4 ...d....
+ .byte $00,$26,$00,$C8,$00,$8A,$00,$2C ; B267 00 26 00 C8 00 8A 00 2C .&.....,
+ .byte $00,$6C,$00,$CC,$00,$FF ; B26F 00 6C 00 CC 00 FF .l....
LB275: .byte $03,$A8,$B2,$0A,$A4,$20,$01,$56 ; B275 03 A8 B2 0A A4 20 01 56 ..... .V
.byte $FF ; B27D FF .
; ----------------------------------------------------------------------------
@@ -6480,11 +6551,11 @@ LB38F: .byte $04,$02,$01,$3A,$02,$01,$5A,$02 ; B38F 04 02 01 3A 02 01 5A 02
.byte $12,$01,$5A,$12,$01,$04,$22,$01 ; B39F 12 01 5A 12 01 04 22 01 ..Z...".
.byte $3A,$22,$01,$04,$32,$01,$78,$32 ; B3A7 3A 22 01 04 32 01 78 32 :"..2.x2
.byte $01,$98,$32,$01,$04,$52,$01,$38 ; B3AF 01 98 32 01 04 52 01 38 ..2..R.8
- .byte $52,$01,$60,$52,$01,$FF ; B3B7 52 01 60 52 01 FF R.`R..
-LB3BD: .byte $22,$10,$62,$20,$82,$30,$A2,$40 ; B3BD 22 10 62 20 82 30 A2 40 ".b .0.@
- .byte $C2,$50,$44,$60,$84,$70,$26,$80 ; B3C5 C2 50 44 60 84 70 26 80 .PD`.p&.
- .byte $66,$90,$28,$A0,$A8,$B0,$C8,$C0 ; B3CD 66 90 28 A0 A8 B0 C8 C0 f.(.....
- .byte $2C,$D0,$6C,$E0,$8C,$F0,$FF ; B3D5 2C D0 6C E0 8C F0 FF ,.l....
+ .byte $52,$01,$60,$52,$01,$FF,$22,$10 ; B3B7 52 01 60 52 01 FF 22 10 R.`R..".
+ .byte $62,$20,$82,$30,$A2,$40,$C2,$50 ; B3BF 62 20 82 30 A2 40 C2 50 b .0.@.P
+ .byte $44,$60,$84,$70,$26,$80,$66,$90 ; B3C7 44 60 84 70 26 80 66 90 D`.p&.f.
+ .byte $28,$A0,$A8,$B0,$C8,$C0,$2C,$D0 ; B3CF 28 A0 A8 B0 C8 C0 2C D0 (.....,.
+ .byte $6C,$E0,$8C,$F0,$FF ; B3D7 6C E0 8C F0 FF l....
LB3DC: .byte $00,$00,$FC,$B3,$06,$B4,$10,$B4 ; B3DC 00 00 FC B3 06 B4 10 B4 ........
.byte $06,$B4,$10,$B4,$1A,$B4,$24,$B4 ; B3E4 06 B4 10 B4 1A B4 24 B4 ......$.
.byte $2E,$B4,$38,$B4,$2E,$B4,$38,$B4 ; B3EC 2E B4 38 B4 2E B4 38 B4 ..8...8.
@@ -6639,11 +6710,10 @@ LB5D2: .byte $04,$02,$01,$20,$02,$01,$3C,$02 ; B5D2 04 02 01 20 02 01 3C 02
.byte $02,$01,$04,$22,$01,$98,$22,$01 ; B5E2 02 01 04 22 01 98 22 01 ..."..".
.byte $3C,$36,$01,$60,$36,$01,$04,$52 ; B5EA 3C 36 01 60 36 01 04 52 <6.`6..R
.byte $01,$3C,$52,$01,$60,$52,$01,$98 ; B5F2 01 3C 52 01 60 52 01 98 .<R.`R..
- .byte $52,$01,$FF ; B5FA 52 01 FF R..
-LB5FD: .byte $22,$10,$42,$20,$62,$00,$82,$00 ; B5FD 22 10 42 20 62 00 82 00 ".B b...
- .byte $A2,$30,$C2,$40,$26,$00,$C6,$00 ; B605 A2 30 C2 40 26 00 C6 00 .0.@&...
- .byte $68,$00,$88,$00,$2C,$00,$6C,$00 ; B60D 68 00 88 00 2C 00 6C 00 h...,.l.
- .byte $8C,$00,$CC,$00,$FF ; B615 8C 00 CC 00 FF .....
+ .byte $52,$01,$FF,$22,$10,$42,$20,$62 ; B5FA 52 01 FF 22 10 42 20 62 R..".B b
+ .byte $00,$82,$00,$A2,$30,$C2,$40,$26 ; B602 00 82 00 A2 30 C2 40 26 ....0.@&
+ .byte $00,$C6,$00,$68,$00,$88,$00,$2C ; B60A 00 C6 00 68 00 88 00 2C ...h...,
+ .byte $00,$6C,$00,$8C,$00,$CC,$00,$FF ; B612 00 6C 00 8C 00 CC 00 FF .l......
LB61A: .byte $00,$00,$24,$B6,$2E,$B6,$3E,$B6 ; B61A 00 00 24 B6 2E B6 3E B6 ..$...>.
.byte $4E,$B6,$FE,$49,$9C,$FD,$04,$00 ; B622 4E B6 FE 49 9C FD 04 00 N..I....
.byte $78,$43,$02,$FF,$FE,$49,$9C,$FD ; B62A 78 43 02 FF FE 49 9C FD xC...I..
diff --git a/jumpmanjr.info b/jumpmanjr.info
index c1b0d38..f978884 100644
--- a/jumpmanjr.info
+++ b/jumpmanjr.info
@@ -118,6 +118,19 @@ label { name "show_get_ready_prompt"; addr $9624; size 1; comment "only in multi
label { name "check_bomb_coll"; addr $87A0; size 1; comment "check whether Jumpman just touched a bomb (RTS if not)"; };
label { name "check_bomb_coll_jv"; addr $8033; size 1; comment "check whether Jumpman just touched a bomb (RTS if not)"; };
label { name "bomb_pickup"; addr $87A8; size 1; comment "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"; };
+label { name "erase_bomb"; addr $8879; size 1; comment "make the bomb disappear by drawing sh_blank in its location"; };
+label { name "bomb_add_points"; addr $8865; size 1; comment "add points to score for picking up bomb (theoretically different on every level, but really $64 aka 100 for all of them)"; };
+label { name "call_bomb_sub"; addr $8856; size 1; comment "call bomb pickup subroutine for this level (which might just do an RTS if there's no special action)"; };
+label { name "call_bomb_indirect_sub"; addr $883E; size 1; comment "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?)"; };
+label { name "search_bomblist"; addr $87D0; size 1; comment "set Y to the index of the current bomb (or rts if we can't find it)"; };
+label { name "bl_ok"; addr $87D7; size 1; };
+label { name "bomb_found"; addr $87E0; size 1; };
+label { name "bombloc"; addr $B6; size 1; comment "bomb_pickup: position of the bomb Jumpman just touched, on 8x8 coarse grid"; };
+label { name "mul_y"; addr $87EA; size 1; comment "multiply Y by 1.5 (only works because Y will always be even at this point)"; };
+label { name "unkn1"; addr $87F2; size 1; comment "find out: why are we storing this at 06DC?"; };
+label { name "change_map"; addr $881B; size 1; comment "this has to do with redrawing parts of the level (e.g. disappearing platforms on level00)"; };
+label { name "check_ind_sub"; addr $8831; size 1; comment "see if this bomb calls an indirect sub (none of them do in this game, this is useless code)"; };
+label { name "blistptr"; addr $B4; size 2; comment "bomb_pickup: points to current level's bomblist"; };
range { name "gr7_or_masks"; start $8143; end $8152; type bytetable; };
range { name "gr7_and_masks"; start $8153; end $8156; type bytetable; };
range { name "sfx_bomb_pickup"; start $8892; end $88A7; type bytetable; comment "played when a bomb is picked up"; };
@@ -587,14 +600,15 @@ label { name "work_level_num_bombs"; addr $078a; size 1; comment "number of bomb
label { name "work_level_bullet_max"; addr $078b; size 1; comment "0 = no bullets, range 0-4."; };
label { name "work_level_y_start"; addr $078c; size 1; comment "jumpman starting Y position"; };
label { name "work_level_x_start"; addr $078d; size 1; comment "jumpman starting X position"; };
-label { name "work_level_offs_14"; addr $078e; size 2; comment "points to $0600"; };
+label { name "work_level_fudge_x"; addr $078e; size 1; comment "fudge factor for bomb locations, always $00"; };
+label { name "work_level_fudge_y"; addr $078f; size 1; comment "fudge factor for bomb locations, always $06"; };
label { name "work_level_points_per_bomb"; addr $0790; size 1; comment "points awarded per bomb pickup (always $64 aka 100)"; };
label { name "work_level_time_bonus"; addr $0791; size 2; comment "amount of time bonus at start of level"; };
label { name "work_level_offs_19"; addr $0793; size 1; comment "always $00"; };
label { name "work_level_unkn_table0"; addr $0794; size 2; comment "pointer to ROM table or $06xx"; };
label { name "work_level_map0"; addr $0796; size 2; comment "map data"; };
label { name "work_level_map1"; addr $0798; size 2; comment "map data"; };
-label { name "work_level_map2"; addr $079a; size 2; comment "map data"; };
+label { name "work_level_bomblist"; addr $079a; size 2; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
label { name "work_level_unkn_table1"; addr $079c; size 2; comment "unknown, pointer to a ROM table or $0000"; };
label { name "work_level_offs_30"; addr $079e; size 2; comment "always $0000"; };
label { name "work_level_sub_bomb"; addr $07a0; size 2; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -616,14 +630,15 @@ label { name "cur_level_num_bombs"; addr $07ca; size 1; comment "number of bombs
label { name "cur_level_bullet_max"; addr $07cb; size 1; comment "0 = no bullets, range 0-4."; };
label { name "cur_level_y_start"; addr $07cc; size 1; comment "jumpman starting Y position"; };
label { name "cur_level_x_start"; addr $07cd; size 1; comment "jumpman starting X position"; };
-label { name "cur_level_offs_14"; addr $07ce; size 2; comment "points to $0600"; };
+label { name "cur_level_fudge_x"; addr $07ce; size 1; comment "fudge factor for bomb locations, always $00"; };
+label { name "cur_level_fudge_y"; addr $07cf; size 1; comment "fudge factor for bomb locations, always $06"; };
label { name "cur_level_points_per_bomb"; addr $07d0; size 1; comment "points awarded per bomb pickup (always $64 aka 100)"; };
label { name "cur_level_time_bonus"; addr $07d1; size 2; comment "amount of time bonus at start of level"; };
label { name "cur_level_offs_19"; addr $07d3; size 1; comment "always $00"; };
label { name "cur_level_unkn_table0"; addr $07d4; size 2; comment "pointer to ROM table or $06xx"; };
label { name "cur_level_map0"; addr $07d6; size 2; comment "map data"; };
label { name "cur_level_map1"; addr $07d8; size 2; comment "map data"; };
-label { name "cur_level_map2"; addr $07da; size 2; comment "map data"; };
+label { name "cur_level_bomblist"; addr $07da; size 2; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
label { name "cur_level_unkn_table1"; addr $07dc; size 2; comment "unknown, pointer to a ROM table or $0000"; };
label { name "cur_level_offs_30"; addr $07de; size 2; comment "always $0000"; };
label { name "cur_level_sub_bomb"; addr $07e0; size 2; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -645,14 +660,15 @@ range { name "level00_num_bombs"; start $a00a; end $a00a; type bytetable; commen
range { name "level00_bullet_max"; start $a00b; end $a00b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level00_y_start"; start $a00c; end $a00c; type bytetable; comment "jumpman starting Y position"; };
range { name "level00_x_start"; start $a00d; end $a00d; type bytetable; comment "jumpman starting X position"; };
-range { name "level00_offs_14"; start $a00e; end $a00f; type bytetable; comment "points to $0600"; };
+range { name "level00_fudge_x"; start $a00e; end $a00e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level00_fudge_y"; start $a00f; end $a00f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level00_points_per_bomb"; start $a010; end $a010; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level00_time_bonus"; start $a011; end $a012; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level00_offs_19"; start $a013; end $a013; type bytetable; comment "always $00"; };
range { name "level00_unkn_table0"; start $a014; end $a015; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level00_map0"; start $a016; end $a017; type addrtable; comment "map data"; };
range { name "level00_map1"; start $a018; end $a019; type addrtable; comment "map data"; };
-range { name "level00_map2"; start $a01a; end $a01b; type addrtable; comment "map data"; };
+range { name "level00_bomblist"; start $a01a; end $a01b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level00_unkn_table1"; start $a01c; end $a01d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level00_offs_30"; start $a01e; end $a01f; type bytetable; comment "always $0000"; };
range { name "level00_sub_bomb"; start $a020; end $a021; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -674,14 +690,15 @@ range { name "level01_num_bombs"; start $a04a; end $a04a; type bytetable; commen
range { name "level01_bullet_max"; start $a04b; end $a04b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level01_y_start"; start $a04c; end $a04c; type bytetable; comment "jumpman starting Y position"; };
range { name "level01_x_start"; start $a04d; end $a04d; type bytetable; comment "jumpman starting X position"; };
-range { name "level01_offs_14"; start $a04e; end $a04f; type bytetable; comment "points to $0600"; };
+range { name "level01_fudge_x"; start $a04e; end $a04e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level01_fudge_y"; start $a04f; end $a04f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level01_points_per_bomb"; start $a050; end $a050; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level01_time_bonus"; start $a051; end $a052; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level01_offs_19"; start $a053; end $a053; type bytetable; comment "always $00"; };
range { name "level01_unkn_table0"; start $a054; end $a055; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level01_map0"; start $a056; end $a057; type addrtable; comment "map data"; };
range { name "level01_map1"; start $a058; end $a059; type addrtable; comment "map data"; };
-range { name "level01_map2"; start $a05a; end $a05b; type addrtable; comment "map data"; };
+range { name "level01_bomblist"; start $a05a; end $a05b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level01_unkn_table1"; start $a05c; end $a05d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level01_offs_30"; start $a05e; end $a05f; type bytetable; comment "always $0000"; };
range { name "level01_sub_bomb"; start $a060; end $a061; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -703,14 +720,15 @@ range { name "level02_num_bombs"; start $a08a; end $a08a; type bytetable; commen
range { name "level02_bullet_max"; start $a08b; end $a08b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level02_y_start"; start $a08c; end $a08c; type bytetable; comment "jumpman starting Y position"; };
range { name "level02_x_start"; start $a08d; end $a08d; type bytetable; comment "jumpman starting X position"; };
-range { name "level02_offs_14"; start $a08e; end $a08f; type bytetable; comment "points to $0600"; };
+range { name "level02_fudge_x"; start $a08e; end $a08e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level02_fudge_y"; start $a08f; end $a08f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level02_points_per_bomb"; start $a090; end $a090; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level02_time_bonus"; start $a091; end $a092; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level02_offs_19"; start $a093; end $a093; type bytetable; comment "always $00"; };
range { name "level02_unkn_table0"; start $a094; end $a095; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level02_map0"; start $a096; end $a097; type addrtable; comment "map data"; };
range { name "level02_map1"; start $a098; end $a099; type addrtable; comment "map data"; };
-range { name "level02_map2"; start $a09a; end $a09b; type addrtable; comment "map data"; };
+range { name "level02_bomblist"; start $a09a; end $a09b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level02_unkn_table1"; start $a09c; end $a09d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level02_offs_30"; start $a09e; end $a09f; type bytetable; comment "always $0000"; };
range { name "level02_sub_bomb"; start $a0a0; end $a0a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -732,14 +750,15 @@ range { name "level03_num_bombs"; start $a0ca; end $a0ca; type bytetable; commen
range { name "level03_bullet_max"; start $a0cb; end $a0cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level03_y_start"; start $a0cc; end $a0cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level03_x_start"; start $a0cd; end $a0cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level03_offs_14"; start $a0ce; end $a0cf; type bytetable; comment "points to $0600"; };
+range { name "level03_fudge_x"; start $a0ce; end $a0ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level03_fudge_y"; start $a0cf; end $a0cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level03_points_per_bomb"; start $a0d0; end $a0d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level03_time_bonus"; start $a0d1; end $a0d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level03_offs_19"; start $a0d3; end $a0d3; type bytetable; comment "always $00"; };
range { name "level03_unkn_table0"; start $a0d4; end $a0d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level03_map0"; start $a0d6; end $a0d7; type addrtable; comment "map data"; };
range { name "level03_map1"; start $a0d8; end $a0d9; type addrtable; comment "map data"; };
-range { name "level03_map2"; start $a0da; end $a0db; type addrtable; comment "map data"; };
+range { name "level03_bomblist"; start $a0da; end $a0db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level03_unkn_table1"; start $a0dc; end $a0dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level03_offs_30"; start $a0de; end $a0df; type bytetable; comment "always $0000"; };
range { name "level03_sub_bomb"; start $a0e0; end $a0e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -761,14 +780,15 @@ range { name "level04_num_bombs"; start $a10a; end $a10a; type bytetable; commen
range { name "level04_bullet_max"; start $a10b; end $a10b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level04_y_start"; start $a10c; end $a10c; type bytetable; comment "jumpman starting Y position"; };
range { name "level04_x_start"; start $a10d; end $a10d; type bytetable; comment "jumpman starting X position"; };
-range { name "level04_offs_14"; start $a10e; end $a10f; type bytetable; comment "points to $0600"; };
+range { name "level04_fudge_x"; start $a10e; end $a10e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level04_fudge_y"; start $a10f; end $a10f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level04_points_per_bomb"; start $a110; end $a110; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level04_time_bonus"; start $a111; end $a112; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level04_offs_19"; start $a113; end $a113; type bytetable; comment "always $00"; };
range { name "level04_unkn_table0"; start $a114; end $a115; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level04_map0"; start $a116; end $a117; type addrtable; comment "map data"; };
range { name "level04_map1"; start $a118; end $a119; type addrtable; comment "map data"; };
-range { name "level04_map2"; start $a11a; end $a11b; type addrtable; comment "map data"; };
+range { name "level04_bomblist"; start $a11a; end $a11b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level04_unkn_table1"; start $a11c; end $a11d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level04_offs_30"; start $a11e; end $a11f; type bytetable; comment "always $0000"; };
range { name "level04_sub_bomb"; start $a120; end $a121; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -790,14 +810,15 @@ range { name "level05_num_bombs"; start $a14a; end $a14a; type bytetable; commen
range { name "level05_bullet_max"; start $a14b; end $a14b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level05_y_start"; start $a14c; end $a14c; type bytetable; comment "jumpman starting Y position"; };
range { name "level05_x_start"; start $a14d; end $a14d; type bytetable; comment "jumpman starting X position"; };
-range { name "level05_offs_14"; start $a14e; end $a14f; type bytetable; comment "points to $0600"; };
+range { name "level05_fudge_x"; start $a14e; end $a14e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level05_fudge_y"; start $a14f; end $a14f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level05_points_per_bomb"; start $a150; end $a150; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level05_time_bonus"; start $a151; end $a152; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level05_offs_19"; start $a153; end $a153; type bytetable; comment "always $00"; };
range { name "level05_unkn_table0"; start $a154; end $a155; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level05_map0"; start $a156; end $a157; type addrtable; comment "map data"; };
range { name "level05_map1"; start $a158; end $a159; type addrtable; comment "map data"; };
-range { name "level05_map2"; start $a15a; end $a15b; type addrtable; comment "map data"; };
+range { name "level05_bomblist"; start $a15a; end $a15b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level05_unkn_table1"; start $a15c; end $a15d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level05_offs_30"; start $a15e; end $a15f; type bytetable; comment "always $0000"; };
range { name "level05_sub_bomb"; start $a160; end $a161; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -819,14 +840,15 @@ range { name "level06_num_bombs"; start $a18a; end $a18a; type bytetable; commen
range { name "level06_bullet_max"; start $a18b; end $a18b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level06_y_start"; start $a18c; end $a18c; type bytetable; comment "jumpman starting Y position"; };
range { name "level06_x_start"; start $a18d; end $a18d; type bytetable; comment "jumpman starting X position"; };
-range { name "level06_offs_14"; start $a18e; end $a18f; type bytetable; comment "points to $0600"; };
+range { name "level06_fudge_x"; start $a18e; end $a18e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level06_fudge_y"; start $a18f; end $a18f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level06_points_per_bomb"; start $a190; end $a190; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level06_time_bonus"; start $a191; end $a192; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level06_offs_19"; start $a193; end $a193; type bytetable; comment "always $00"; };
range { name "level06_unkn_table0"; start $a194; end $a195; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level06_map0"; start $a196; end $a197; type addrtable; comment "map data"; };
range { name "level06_map1"; start $a198; end $a199; type addrtable; comment "map data"; };
-range { name "level06_map2"; start $a19a; end $a19b; type addrtable; comment "map data"; };
+range { name "level06_bomblist"; start $a19a; end $a19b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level06_unkn_table1"; start $a19c; end $a19d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level06_offs_30"; start $a19e; end $a19f; type bytetable; comment "always $0000"; };
range { name "level06_sub_bomb"; start $a1a0; end $a1a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -848,14 +870,15 @@ range { name "level07_num_bombs"; start $a1ca; end $a1ca; type bytetable; commen
range { name "level07_bullet_max"; start $a1cb; end $a1cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level07_y_start"; start $a1cc; end $a1cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level07_x_start"; start $a1cd; end $a1cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level07_offs_14"; start $a1ce; end $a1cf; type bytetable; comment "points to $0600"; };
+range { name "level07_fudge_x"; start $a1ce; end $a1ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level07_fudge_y"; start $a1cf; end $a1cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level07_points_per_bomb"; start $a1d0; end $a1d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level07_time_bonus"; start $a1d1; end $a1d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level07_offs_19"; start $a1d3; end $a1d3; type bytetable; comment "always $00"; };
range { name "level07_unkn_table0"; start $a1d4; end $a1d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level07_map0"; start $a1d6; end $a1d7; type addrtable; comment "map data"; };
range { name "level07_map1"; start $a1d8; end $a1d9; type addrtable; comment "map data"; };
-range { name "level07_map2"; start $a1da; end $a1db; type addrtable; comment "map data"; };
+range { name "level07_bomblist"; start $a1da; end $a1db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level07_unkn_table1"; start $a1dc; end $a1dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level07_offs_30"; start $a1de; end $a1df; type bytetable; comment "always $0000"; };
range { name "level07_sub_bomb"; start $a1e0; end $a1e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -877,14 +900,15 @@ range { name "level08_num_bombs"; start $a20a; end $a20a; type bytetable; commen
range { name "level08_bullet_max"; start $a20b; end $a20b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level08_y_start"; start $a20c; end $a20c; type bytetable; comment "jumpman starting Y position"; };
range { name "level08_x_start"; start $a20d; end $a20d; type bytetable; comment "jumpman starting X position"; };
-range { name "level08_offs_14"; start $a20e; end $a20f; type bytetable; comment "points to $0600"; };
+range { name "level08_fudge_x"; start $a20e; end $a20e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level08_fudge_y"; start $a20f; end $a20f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level08_points_per_bomb"; start $a210; end $a210; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level08_time_bonus"; start $a211; end $a212; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level08_offs_19"; start $a213; end $a213; type bytetable; comment "always $00"; };
range { name "level08_unkn_table0"; start $a214; end $a215; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level08_map0"; start $a216; end $a217; type addrtable; comment "map data"; };
range { name "level08_map1"; start $a218; end $a219; type addrtable; comment "map data"; };
-range { name "level08_map2"; start $a21a; end $a21b; type addrtable; comment "map data"; };
+range { name "level08_bomblist"; start $a21a; end $a21b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level08_unkn_table1"; start $a21c; end $a21d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level08_offs_30"; start $a21e; end $a21f; type bytetable; comment "always $0000"; };
range { name "level08_sub_bomb"; start $a220; end $a221; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -906,14 +930,15 @@ range { name "level09_num_bombs"; start $a24a; end $a24a; type bytetable; commen
range { name "level09_bullet_max"; start $a24b; end $a24b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level09_y_start"; start $a24c; end $a24c; type bytetable; comment "jumpman starting Y position"; };
range { name "level09_x_start"; start $a24d; end $a24d; type bytetable; comment "jumpman starting X position"; };
-range { name "level09_offs_14"; start $a24e; end $a24f; type bytetable; comment "points to $0600"; };
+range { name "level09_fudge_x"; start $a24e; end $a24e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level09_fudge_y"; start $a24f; end $a24f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level09_points_per_bomb"; start $a250; end $a250; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level09_time_bonus"; start $a251; end $a252; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level09_offs_19"; start $a253; end $a253; type bytetable; comment "always $00"; };
range { name "level09_unkn_table0"; start $a254; end $a255; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level09_map0"; start $a256; end $a257; type addrtable; comment "map data"; };
range { name "level09_map1"; start $a258; end $a259; type addrtable; comment "map data"; };
-range { name "level09_map2"; start $a25a; end $a25b; type addrtable; comment "map data"; };
+range { name "level09_bomblist"; start $a25a; end $a25b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level09_unkn_table1"; start $a25c; end $a25d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level09_offs_30"; start $a25e; end $a25f; type bytetable; comment "always $0000"; };
range { name "level09_sub_bomb"; start $a260; end $a261; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -935,14 +960,15 @@ range { name "level10_num_bombs"; start $a28a; end $a28a; type bytetable; commen
range { name "level10_bullet_max"; start $a28b; end $a28b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level10_y_start"; start $a28c; end $a28c; type bytetable; comment "jumpman starting Y position"; };
range { name "level10_x_start"; start $a28d; end $a28d; type bytetable; comment "jumpman starting X position"; };
-range { name "level10_offs_14"; start $a28e; end $a28f; type bytetable; comment "points to $0600"; };
+range { name "level10_fudge_x"; start $a28e; end $a28e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level10_fudge_y"; start $a28f; end $a28f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level10_points_per_bomb"; start $a290; end $a290; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level10_time_bonus"; start $a291; end $a292; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level10_offs_19"; start $a293; end $a293; type bytetable; comment "always $00"; };
range { name "level10_unkn_table0"; start $a294; end $a295; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level10_map0"; start $a296; end $a297; type addrtable; comment "map data"; };
range { name "level10_map1"; start $a298; end $a299; type addrtable; comment "map data"; };
-range { name "level10_map2"; start $a29a; end $a29b; type addrtable; comment "map data"; };
+range { name "level10_bomblist"; start $a29a; end $a29b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level10_unkn_table1"; start $a29c; end $a29d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level10_offs_30"; start $a29e; end $a29f; type bytetable; comment "always $0000"; };
range { name "level10_sub_bomb"; start $a2a0; end $a2a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -964,14 +990,15 @@ range { name "level11_num_bombs"; start $a2ca; end $a2ca; type bytetable; commen
range { name "level11_bullet_max"; start $a2cb; end $a2cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level11_y_start"; start $a2cc; end $a2cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level11_x_start"; start $a2cd; end $a2cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level11_offs_14"; start $a2ce; end $a2cf; type bytetable; comment "points to $0600"; };
+range { name "level11_fudge_x"; start $a2ce; end $a2ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level11_fudge_y"; start $a2cf; end $a2cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level11_points_per_bomb"; start $a2d0; end $a2d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level11_time_bonus"; start $a2d1; end $a2d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level11_offs_19"; start $a2d3; end $a2d3; type bytetable; comment "always $00"; };
range { name "level11_unkn_table0"; start $a2d4; end $a2d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level11_map0"; start $a2d6; end $a2d7; type addrtable; comment "map data"; };
range { name "level11_map1"; start $a2d8; end $a2d9; type addrtable; comment "map data"; };
-range { name "level11_map2"; start $a2da; end $a2db; type addrtable; comment "map data"; };
+range { name "level11_bomblist"; start $a2da; end $a2db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level11_unkn_table1"; start $a2dc; end $a2dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level11_offs_30"; start $a2de; end $a2df; type bytetable; comment "always $0000"; };
range { name "level11_sub_bomb"; start $a2e0; end $a2e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
diff --git a/leveldesc.info b/leveldesc.info
index d98c9f0..6918a60 100644
--- a/leveldesc.info
+++ b/leveldesc.info
@@ -7,14 +7,15 @@ label { name "work_level_num_bombs"; addr $078a; size 1; comment "number of bomb
label { name "work_level_bullet_max"; addr $078b; size 1; comment "0 = no bullets, range 0-4."; };
label { name "work_level_y_start"; addr $078c; size 1; comment "jumpman starting Y position"; };
label { name "work_level_x_start"; addr $078d; size 1; comment "jumpman starting X position"; };
-label { name "work_level_offs_14"; addr $078e; size 2; comment "points to $0600"; };
+label { name "work_level_fudge_x"; addr $078e; size 1; comment "fudge factor for bomb locations, always $00"; };
+label { name "work_level_fudge_y"; addr $078f; size 1; comment "fudge factor for bomb locations, always $06"; };
label { name "work_level_points_per_bomb"; addr $0790; size 1; comment "points awarded per bomb pickup (always $64 aka 100)"; };
label { name "work_level_time_bonus"; addr $0791; size 2; comment "amount of time bonus at start of level"; };
label { name "work_level_offs_19"; addr $0793; size 1; comment "always $00"; };
label { name "work_level_unkn_table0"; addr $0794; size 2; comment "pointer to ROM table or $06xx"; };
label { name "work_level_map0"; addr $0796; size 2; comment "map data"; };
label { name "work_level_map1"; addr $0798; size 2; comment "map data"; };
-label { name "work_level_map2"; addr $079a; size 2; comment "map data"; };
+label { name "work_level_bomblist"; addr $079a; size 2; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
label { name "work_level_unkn_table1"; addr $079c; size 2; comment "unknown, pointer to a ROM table or $0000"; };
label { name "work_level_offs_30"; addr $079e; size 2; comment "always $0000"; };
label { name "work_level_sub_bomb"; addr $07a0; size 2; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -36,14 +37,15 @@ label { name "cur_level_num_bombs"; addr $07ca; size 1; comment "number of bombs
label { name "cur_level_bullet_max"; addr $07cb; size 1; comment "0 = no bullets, range 0-4."; };
label { name "cur_level_y_start"; addr $07cc; size 1; comment "jumpman starting Y position"; };
label { name "cur_level_x_start"; addr $07cd; size 1; comment "jumpman starting X position"; };
-label { name "cur_level_offs_14"; addr $07ce; size 2; comment "points to $0600"; };
+label { name "cur_level_fudge_x"; addr $07ce; size 1; comment "fudge factor for bomb locations, always $00"; };
+label { name "cur_level_fudge_y"; addr $07cf; size 1; comment "fudge factor for bomb locations, always $06"; };
label { name "cur_level_points_per_bomb"; addr $07d0; size 1; comment "points awarded per bomb pickup (always $64 aka 100)"; };
label { name "cur_level_time_bonus"; addr $07d1; size 2; comment "amount of time bonus at start of level"; };
label { name "cur_level_offs_19"; addr $07d3; size 1; comment "always $00"; };
label { name "cur_level_unkn_table0"; addr $07d4; size 2; comment "pointer to ROM table or $06xx"; };
label { name "cur_level_map0"; addr $07d6; size 2; comment "map data"; };
label { name "cur_level_map1"; addr $07d8; size 2; comment "map data"; };
-label { name "cur_level_map2"; addr $07da; size 2; comment "map data"; };
+label { name "cur_level_bomblist"; addr $07da; size 2; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
label { name "cur_level_unkn_table1"; addr $07dc; size 2; comment "unknown, pointer to a ROM table or $0000"; };
label { name "cur_level_offs_30"; addr $07de; size 2; comment "always $0000"; };
label { name "cur_level_sub_bomb"; addr $07e0; size 2; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -65,14 +67,15 @@ range { name "level00_num_bombs"; start $a00a; end $a00a; type bytetable; commen
range { name "level00_bullet_max"; start $a00b; end $a00b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level00_y_start"; start $a00c; end $a00c; type bytetable; comment "jumpman starting Y position"; };
range { name "level00_x_start"; start $a00d; end $a00d; type bytetable; comment "jumpman starting X position"; };
-range { name "level00_offs_14"; start $a00e; end $a00f; type bytetable; comment "points to $0600"; };
+range { name "level00_fudge_x"; start $a00e; end $a00e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level00_fudge_y"; start $a00f; end $a00f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level00_points_per_bomb"; start $a010; end $a010; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level00_time_bonus"; start $a011; end $a012; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level00_offs_19"; start $a013; end $a013; type bytetable; comment "always $00"; };
range { name "level00_unkn_table0"; start $a014; end $a015; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level00_map0"; start $a016; end $a017; type addrtable; comment "map data"; };
range { name "level00_map1"; start $a018; end $a019; type addrtable; comment "map data"; };
-range { name "level00_map2"; start $a01a; end $a01b; type addrtable; comment "map data"; };
+range { name "level00_bomblist"; start $a01a; end $a01b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level00_unkn_table1"; start $a01c; end $a01d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level00_offs_30"; start $a01e; end $a01f; type bytetable; comment "always $0000"; };
range { name "level00_sub_bomb"; start $a020; end $a021; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -94,14 +97,15 @@ range { name "level01_num_bombs"; start $a04a; end $a04a; type bytetable; commen
range { name "level01_bullet_max"; start $a04b; end $a04b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level01_y_start"; start $a04c; end $a04c; type bytetable; comment "jumpman starting Y position"; };
range { name "level01_x_start"; start $a04d; end $a04d; type bytetable; comment "jumpman starting X position"; };
-range { name "level01_offs_14"; start $a04e; end $a04f; type bytetable; comment "points to $0600"; };
+range { name "level01_fudge_x"; start $a04e; end $a04e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level01_fudge_y"; start $a04f; end $a04f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level01_points_per_bomb"; start $a050; end $a050; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level01_time_bonus"; start $a051; end $a052; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level01_offs_19"; start $a053; end $a053; type bytetable; comment "always $00"; };
range { name "level01_unkn_table0"; start $a054; end $a055; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level01_map0"; start $a056; end $a057; type addrtable; comment "map data"; };
range { name "level01_map1"; start $a058; end $a059; type addrtable; comment "map data"; };
-range { name "level01_map2"; start $a05a; end $a05b; type addrtable; comment "map data"; };
+range { name "level01_bomblist"; start $a05a; end $a05b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level01_unkn_table1"; start $a05c; end $a05d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level01_offs_30"; start $a05e; end $a05f; type bytetable; comment "always $0000"; };
range { name "level01_sub_bomb"; start $a060; end $a061; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -123,14 +127,15 @@ range { name "level02_num_bombs"; start $a08a; end $a08a; type bytetable; commen
range { name "level02_bullet_max"; start $a08b; end $a08b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level02_y_start"; start $a08c; end $a08c; type bytetable; comment "jumpman starting Y position"; };
range { name "level02_x_start"; start $a08d; end $a08d; type bytetable; comment "jumpman starting X position"; };
-range { name "level02_offs_14"; start $a08e; end $a08f; type bytetable; comment "points to $0600"; };
+range { name "level02_fudge_x"; start $a08e; end $a08e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level02_fudge_y"; start $a08f; end $a08f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level02_points_per_bomb"; start $a090; end $a090; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level02_time_bonus"; start $a091; end $a092; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level02_offs_19"; start $a093; end $a093; type bytetable; comment "always $00"; };
range { name "level02_unkn_table0"; start $a094; end $a095; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level02_map0"; start $a096; end $a097; type addrtable; comment "map data"; };
range { name "level02_map1"; start $a098; end $a099; type addrtable; comment "map data"; };
-range { name "level02_map2"; start $a09a; end $a09b; type addrtable; comment "map data"; };
+range { name "level02_bomblist"; start $a09a; end $a09b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level02_unkn_table1"; start $a09c; end $a09d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level02_offs_30"; start $a09e; end $a09f; type bytetable; comment "always $0000"; };
range { name "level02_sub_bomb"; start $a0a0; end $a0a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -152,14 +157,15 @@ range { name "level03_num_bombs"; start $a0ca; end $a0ca; type bytetable; commen
range { name "level03_bullet_max"; start $a0cb; end $a0cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level03_y_start"; start $a0cc; end $a0cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level03_x_start"; start $a0cd; end $a0cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level03_offs_14"; start $a0ce; end $a0cf; type bytetable; comment "points to $0600"; };
+range { name "level03_fudge_x"; start $a0ce; end $a0ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level03_fudge_y"; start $a0cf; end $a0cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level03_points_per_bomb"; start $a0d0; end $a0d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level03_time_bonus"; start $a0d1; end $a0d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level03_offs_19"; start $a0d3; end $a0d3; type bytetable; comment "always $00"; };
range { name "level03_unkn_table0"; start $a0d4; end $a0d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level03_map0"; start $a0d6; end $a0d7; type addrtable; comment "map data"; };
range { name "level03_map1"; start $a0d8; end $a0d9; type addrtable; comment "map data"; };
-range { name "level03_map2"; start $a0da; end $a0db; type addrtable; comment "map data"; };
+range { name "level03_bomblist"; start $a0da; end $a0db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level03_unkn_table1"; start $a0dc; end $a0dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level03_offs_30"; start $a0de; end $a0df; type bytetable; comment "always $0000"; };
range { name "level03_sub_bomb"; start $a0e0; end $a0e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -181,14 +187,15 @@ range { name "level04_num_bombs"; start $a10a; end $a10a; type bytetable; commen
range { name "level04_bullet_max"; start $a10b; end $a10b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level04_y_start"; start $a10c; end $a10c; type bytetable; comment "jumpman starting Y position"; };
range { name "level04_x_start"; start $a10d; end $a10d; type bytetable; comment "jumpman starting X position"; };
-range { name "level04_offs_14"; start $a10e; end $a10f; type bytetable; comment "points to $0600"; };
+range { name "level04_fudge_x"; start $a10e; end $a10e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level04_fudge_y"; start $a10f; end $a10f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level04_points_per_bomb"; start $a110; end $a110; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level04_time_bonus"; start $a111; end $a112; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level04_offs_19"; start $a113; end $a113; type bytetable; comment "always $00"; };
range { name "level04_unkn_table0"; start $a114; end $a115; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level04_map0"; start $a116; end $a117; type addrtable; comment "map data"; };
range { name "level04_map1"; start $a118; end $a119; type addrtable; comment "map data"; };
-range { name "level04_map2"; start $a11a; end $a11b; type addrtable; comment "map data"; };
+range { name "level04_bomblist"; start $a11a; end $a11b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level04_unkn_table1"; start $a11c; end $a11d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level04_offs_30"; start $a11e; end $a11f; type bytetable; comment "always $0000"; };
range { name "level04_sub_bomb"; start $a120; end $a121; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -210,14 +217,15 @@ range { name "level05_num_bombs"; start $a14a; end $a14a; type bytetable; commen
range { name "level05_bullet_max"; start $a14b; end $a14b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level05_y_start"; start $a14c; end $a14c; type bytetable; comment "jumpman starting Y position"; };
range { name "level05_x_start"; start $a14d; end $a14d; type bytetable; comment "jumpman starting X position"; };
-range { name "level05_offs_14"; start $a14e; end $a14f; type bytetable; comment "points to $0600"; };
+range { name "level05_fudge_x"; start $a14e; end $a14e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level05_fudge_y"; start $a14f; end $a14f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level05_points_per_bomb"; start $a150; end $a150; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level05_time_bonus"; start $a151; end $a152; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level05_offs_19"; start $a153; end $a153; type bytetable; comment "always $00"; };
range { name "level05_unkn_table0"; start $a154; end $a155; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level05_map0"; start $a156; end $a157; type addrtable; comment "map data"; };
range { name "level05_map1"; start $a158; end $a159; type addrtable; comment "map data"; };
-range { name "level05_map2"; start $a15a; end $a15b; type addrtable; comment "map data"; };
+range { name "level05_bomblist"; start $a15a; end $a15b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level05_unkn_table1"; start $a15c; end $a15d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level05_offs_30"; start $a15e; end $a15f; type bytetable; comment "always $0000"; };
range { name "level05_sub_bomb"; start $a160; end $a161; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -239,14 +247,15 @@ range { name "level06_num_bombs"; start $a18a; end $a18a; type bytetable; commen
range { name "level06_bullet_max"; start $a18b; end $a18b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level06_y_start"; start $a18c; end $a18c; type bytetable; comment "jumpman starting Y position"; };
range { name "level06_x_start"; start $a18d; end $a18d; type bytetable; comment "jumpman starting X position"; };
-range { name "level06_offs_14"; start $a18e; end $a18f; type bytetable; comment "points to $0600"; };
+range { name "level06_fudge_x"; start $a18e; end $a18e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level06_fudge_y"; start $a18f; end $a18f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level06_points_per_bomb"; start $a190; end $a190; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level06_time_bonus"; start $a191; end $a192; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level06_offs_19"; start $a193; end $a193; type bytetable; comment "always $00"; };
range { name "level06_unkn_table0"; start $a194; end $a195; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level06_map0"; start $a196; end $a197; type addrtable; comment "map data"; };
range { name "level06_map1"; start $a198; end $a199; type addrtable; comment "map data"; };
-range { name "level06_map2"; start $a19a; end $a19b; type addrtable; comment "map data"; };
+range { name "level06_bomblist"; start $a19a; end $a19b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level06_unkn_table1"; start $a19c; end $a19d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level06_offs_30"; start $a19e; end $a19f; type bytetable; comment "always $0000"; };
range { name "level06_sub_bomb"; start $a1a0; end $a1a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -268,14 +277,15 @@ range { name "level07_num_bombs"; start $a1ca; end $a1ca; type bytetable; commen
range { name "level07_bullet_max"; start $a1cb; end $a1cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level07_y_start"; start $a1cc; end $a1cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level07_x_start"; start $a1cd; end $a1cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level07_offs_14"; start $a1ce; end $a1cf; type bytetable; comment "points to $0600"; };
+range { name "level07_fudge_x"; start $a1ce; end $a1ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level07_fudge_y"; start $a1cf; end $a1cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level07_points_per_bomb"; start $a1d0; end $a1d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level07_time_bonus"; start $a1d1; end $a1d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level07_offs_19"; start $a1d3; end $a1d3; type bytetable; comment "always $00"; };
range { name "level07_unkn_table0"; start $a1d4; end $a1d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level07_map0"; start $a1d6; end $a1d7; type addrtable; comment "map data"; };
range { name "level07_map1"; start $a1d8; end $a1d9; type addrtable; comment "map data"; };
-range { name "level07_map2"; start $a1da; end $a1db; type addrtable; comment "map data"; };
+range { name "level07_bomblist"; start $a1da; end $a1db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level07_unkn_table1"; start $a1dc; end $a1dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level07_offs_30"; start $a1de; end $a1df; type bytetable; comment "always $0000"; };
range { name "level07_sub_bomb"; start $a1e0; end $a1e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -297,14 +307,15 @@ range { name "level08_num_bombs"; start $a20a; end $a20a; type bytetable; commen
range { name "level08_bullet_max"; start $a20b; end $a20b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level08_y_start"; start $a20c; end $a20c; type bytetable; comment "jumpman starting Y position"; };
range { name "level08_x_start"; start $a20d; end $a20d; type bytetable; comment "jumpman starting X position"; };
-range { name "level08_offs_14"; start $a20e; end $a20f; type bytetable; comment "points to $0600"; };
+range { name "level08_fudge_x"; start $a20e; end $a20e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level08_fudge_y"; start $a20f; end $a20f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level08_points_per_bomb"; start $a210; end $a210; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level08_time_bonus"; start $a211; end $a212; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level08_offs_19"; start $a213; end $a213; type bytetable; comment "always $00"; };
range { name "level08_unkn_table0"; start $a214; end $a215; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level08_map0"; start $a216; end $a217; type addrtable; comment "map data"; };
range { name "level08_map1"; start $a218; end $a219; type addrtable; comment "map data"; };
-range { name "level08_map2"; start $a21a; end $a21b; type addrtable; comment "map data"; };
+range { name "level08_bomblist"; start $a21a; end $a21b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level08_unkn_table1"; start $a21c; end $a21d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level08_offs_30"; start $a21e; end $a21f; type bytetable; comment "always $0000"; };
range { name "level08_sub_bomb"; start $a220; end $a221; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -326,14 +337,15 @@ range { name "level09_num_bombs"; start $a24a; end $a24a; type bytetable; commen
range { name "level09_bullet_max"; start $a24b; end $a24b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level09_y_start"; start $a24c; end $a24c; type bytetable; comment "jumpman starting Y position"; };
range { name "level09_x_start"; start $a24d; end $a24d; type bytetable; comment "jumpman starting X position"; };
-range { name "level09_offs_14"; start $a24e; end $a24f; type bytetable; comment "points to $0600"; };
+range { name "level09_fudge_x"; start $a24e; end $a24e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level09_fudge_y"; start $a24f; end $a24f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level09_points_per_bomb"; start $a250; end $a250; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level09_time_bonus"; start $a251; end $a252; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level09_offs_19"; start $a253; end $a253; type bytetable; comment "always $00"; };
range { name "level09_unkn_table0"; start $a254; end $a255; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level09_map0"; start $a256; end $a257; type addrtable; comment "map data"; };
range { name "level09_map1"; start $a258; end $a259; type addrtable; comment "map data"; };
-range { name "level09_map2"; start $a25a; end $a25b; type addrtable; comment "map data"; };
+range { name "level09_bomblist"; start $a25a; end $a25b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level09_unkn_table1"; start $a25c; end $a25d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level09_offs_30"; start $a25e; end $a25f; type bytetable; comment "always $0000"; };
range { name "level09_sub_bomb"; start $a260; end $a261; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -355,14 +367,15 @@ range { name "level10_num_bombs"; start $a28a; end $a28a; type bytetable; commen
range { name "level10_bullet_max"; start $a28b; end $a28b; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level10_y_start"; start $a28c; end $a28c; type bytetable; comment "jumpman starting Y position"; };
range { name "level10_x_start"; start $a28d; end $a28d; type bytetable; comment "jumpman starting X position"; };
-range { name "level10_offs_14"; start $a28e; end $a28f; type bytetable; comment "points to $0600"; };
+range { name "level10_fudge_x"; start $a28e; end $a28e; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level10_fudge_y"; start $a28f; end $a28f; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level10_points_per_bomb"; start $a290; end $a290; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level10_time_bonus"; start $a291; end $a292; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level10_offs_19"; start $a293; end $a293; type bytetable; comment "always $00"; };
range { name "level10_unkn_table0"; start $a294; end $a295; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level10_map0"; start $a296; end $a297; type addrtable; comment "map data"; };
range { name "level10_map1"; start $a298; end $a299; type addrtable; comment "map data"; };
-range { name "level10_map2"; start $a29a; end $a29b; type addrtable; comment "map data"; };
+range { name "level10_bomblist"; start $a29a; end $a29b; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level10_unkn_table1"; start $a29c; end $a29d; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level10_offs_30"; start $a29e; end $a29f; type bytetable; comment "always $0000"; };
range { name "level10_sub_bomb"; start $a2a0; end $a2a1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
@@ -384,14 +397,15 @@ range { name "level11_num_bombs"; start $a2ca; end $a2ca; type bytetable; commen
range { name "level11_bullet_max"; start $a2cb; end $a2cb; type bytetable; comment "0 = no bullets, range 0-4."; };
range { name "level11_y_start"; start $a2cc; end $a2cc; type bytetable; comment "jumpman starting Y position"; };
range { name "level11_x_start"; start $a2cd; end $a2cd; type bytetable; comment "jumpman starting X position"; };
-range { name "level11_offs_14"; start $a2ce; end $a2cf; type bytetable; comment "points to $0600"; };
+range { name "level11_fudge_x"; start $a2ce; end $a2ce; type bytetable; comment "fudge factor for bomb locations, always $00"; };
+range { name "level11_fudge_y"; start $a2cf; end $a2cf; type bytetable; comment "fudge factor for bomb locations, always $06"; };
range { name "level11_points_per_bomb"; start $a2d0; end $a2d0; type bytetable; comment "points awarded per bomb pickup (always $64 aka 100)"; };
range { name "level11_time_bonus"; start $a2d1; end $a2d2; type wordtable; comment "amount of time bonus at start of level"; };
range { name "level11_offs_19"; start $a2d3; end $a2d3; type bytetable; comment "always $00"; };
range { name "level11_unkn_table0"; start $a2d4; end $a2d5; type addrtable; comment "pointer to ROM table or $06xx"; };
range { name "level11_map0"; start $a2d6; end $a2d7; type addrtable; comment "map data"; };
range { name "level11_map1"; start $a2d8; end $a2d9; type addrtable; comment "map data"; };
-range { name "level11_map2"; start $a2da; end $a2db; type addrtable; comment "map data"; };
+range { name "level11_bomblist"; start $a2da; end $a2db; type bytetable; comment "addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF."; };
range { name "level11_unkn_table1"; start $a2dc; end $a2dd; type addrtable; comment "unknown, pointer to a ROM table or $0000"; };
range { name "level11_offs_30"; start $a2de; end $a2df; type bytetable; comment "always $0000"; };
range { name "level11_sub_bomb"; start $a2e0; end $a2e1; type addrtable; comment "called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine"; };
diff --git a/main.info b/main.info
index 1fd0538..9029520 100644
--- a/main.info
+++ b/main.info
@@ -116,6 +116,19 @@ label { name "show_get_ready_prompt"; addr $9624; size 1; comment "only in multi
label { name "check_bomb_coll"; addr $87A0; size 1; comment "check whether Jumpman just touched a bomb (RTS if not)"; };
label { name "check_bomb_coll_jv"; addr $8033; size 1; comment "check whether Jumpman just touched a bomb (RTS if not)"; };
label { name "bomb_pickup"; addr $87A8; size 1; comment "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"; };
+label { name "erase_bomb"; addr $8879; size 1; comment "make the bomb disappear by drawing sh_blank in its location"; };
+label { name "bomb_add_points"; addr $8865; size 1; comment "add points to score for picking up bomb (theoretically different on every level, but really $64 aka 100 for all of them)"; };
+label { name "call_bomb_sub"; addr $8856; size 1; comment "call bomb pickup subroutine for this level (which might just do an RTS if there's no special action)"; };
+label { name "call_bomb_indirect_sub"; addr $883E; size 1; comment "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?)"; };
+label { name "search_bomblist"; addr $87D0; size 1; comment "set Y to the index of the current bomb (or rts if we can't find it)"; };
+label { name "bl_ok"; addr $87D7; size 1; };
+label { name "bomb_found"; addr $87E0; size 1; };
+label { name "bombloc"; addr $B6; size 1; comment "bomb_pickup: position of the bomb Jumpman just touched, on 8x8 coarse grid"; };
+label { name "mul_y"; addr $87EA; size 1; comment "multiply Y by 1.5 (only works because Y will always be even at this point)"; };
+label { name "unkn1"; addr $87F2; size 1; comment "find out: why are we storing this at 06DC?"; };
+label { name "change_map"; addr $881B; size 1; comment "this has to do with redrawing parts of the level (e.g. disappearing platforms on level00)"; };
+label { name "check_ind_sub"; addr $8831; size 1; comment "see if this bomb calls an indirect sub (none of them do in this game, this is useless code)"; };
+label { name "blistptr"; addr $B4; size 2; comment "bomb_pickup: points to current level's bomblist"; };
range { name "gr7_or_masks"; start $8143; end $8152; type bytetable; };
range { name "gr7_and_masks"; start $8153; end $8156; type bytetable; };
range { name "sfx_bomb_pickup"; start $8892; end $88A7; type bytetable; comment "played when a bomb is picked up"; };
diff --git a/mklevelinfo.pl b/mklevelinfo.pl
index 43c6588..1f1996f 100644
--- a/mklevelinfo.pl
+++ b/mklevelinfo.pl
@@ -10,14 +10,15 @@
11 => [ 1, 'bullet_max', '0 = no bullets, range 0-4.' ],
12 => [ 1, 'y_start', 'jumpman starting Y position' ],
13 => [ 1, 'x_start', 'jumpman starting X position' ],
- 14 => [ 2, 'offs', 'points to $0600' ],
+ 14 => [ 1, 'fudge_x', 'fudge factor for bomb locations, always $00' ],
+ 15 => [ 1, 'fudge_y', 'fudge factor for bomb locations, always $06' ],
16 => [ 1, 'points_per_bomb', 'points awarded per bomb pickup (always $64 aka 100)' ],
17 => [ 2, 'time_bonus', 'amount of time bonus at start of level' ],
19 => [ 1, 'offs', 'always $00' ],
20 => [ 2, 'unkn_table0', 'pointer to ROM table or $06xx' ],
22 => [ 2, 'map0', 'map data' ],
24 => [ 2, 'map1', 'map data' ],
- 26 => [ 2, 'map2', 'map data' ],
+ 26 => [ 2, 'bomblist', 'addr of list of bombs, indexed by player position on coarse 8x8 grid. terminated by $FF.' ],
28 => [ 2, 'unkn_table1', 'unknown, pointer to a ROM table or $0000' ],
30 => [ 2, 'offs', 'always $0000' ],
32 => [ 2, 'sub_bomb', 'called when a bomb is picked up. $06E6 for most levels (just an RTS), or else a ROM subroutine' ],