aboutsummaryrefslogtreecommitdiff
path: root/jumpmanjr.info
diff options
context:
space:
mode:
Diffstat (limited to 'jumpmanjr.info')
-rw-r--r--jumpmanjr.info79
1 files changed, 49 insertions, 30 deletions
diff --git a/jumpmanjr.info b/jumpmanjr.info
index 0589e61..852e4b1 100644
--- a/jumpmanjr.info
+++ b/jumpmanjr.info
@@ -55,6 +55,11 @@ label { name "score_below_1m"; addr $B7EE; };
label { name "spellbound_letters"; addr $AF58; comment "called at end of Spellbound, adds up letter bonus"; };
label { name "spellbound_got_all"; addr $AF5E; comment "got all the bombs"; };
label { name "bonus_250_pts"; addr $AF96; comment "per letter"; };
+label { name "b250_hi_ok"; addr $AFB4; };
+label { name "ltr_loop"; addr $AF6D; };
+label { name "ltr_delay"; addr $AF86; comment "wait approx 1/3 second so user can see what happened"; };
+label { name "ltr_wait"; addr $AF8B; };
+label { name "ltr_skip"; addr $AF92; };
label { name "epyx_jumpman"; addr $AEAF; comment "letters for level08, spellbound (not ASCII or screencodes though)"; };
label { name "init_level"; addr $9682; comment "call start subroutine for current level"; };
@@ -125,7 +130,7 @@ label { name "next_player_jv"; addr $8027; comment "used in multiplayer games, a
label { name "mul_player_11"; addr $9A7C; comment "multiply current player number by 11, return result in Y"; };
label { name "add_11"; addr $9A82; };
label { name "return_y"; addr $9A8A; };
-label { name "save_struct_player"; addr $9A8C; };
+label { name "save_struct_user"; addr $9A8C; };
label { name "setup_blank_dlist"; addr $8AE0; comment "show blank screen with empty display list"; };
label { name "setup_blank_dlist_jv"; addr $803C; comment "show blank screen with empty display list"; };
label { name "draw_level"; addr $BA00; comment "calls draw_map, plays level intro music, shows level name"; };
@@ -175,7 +180,7 @@ label { name "blistptr"; addr $B4; size 2; comment "bomb_pickup: points to curre
range { name "gr7_or_masks"; start $8143; end $8152; type bytetable; };
range { name "gr7_and_masks"; start $8153; end $8156; type bytetable; };
range { name "sfx_bomb_pickup"; start $8892; end $88A7; type bytetable; comment "played when a bomb is picked up"; };
-range { name "data_8dfa"; start $8DFA; end $8DFF; type bytetable; };
+range { name "sfx_bonus_tick"; start $8DFA; end $8DFF; type bytetable; comment "played when bonus timer is decremented"; };
range { name "bullet_table"; start $8F43; end $8f72; type bytetable; comment "used by bullet_logic"; };
label { name "sfx_bullet"; addr $8f59; size 1; comment "bang!"; };
label { name "play_sfx_bullet"; addr $8EFB; size 1; comment "let player hear report"; };
@@ -297,21 +302,21 @@ label { name "demo_mode"; addr $B96B; comment "display all the levels, happens i
label { name "show_letter"; addr $9160; comment "$3000 is screen memory, at this point"; };
label { name "title_letters"; addr $928F; comment "JUMPMAN JUNIOR in screen codes with high bit set"; };
-label { name "is_player_dead"; addr $9AD2; };
-label { name "check_lives"; addr $9AE5; comment "if player hasn't been eliminated, but is out of lives, eliminate him"; };
-label { name "player_alive"; addr $9AF5; comment "found the next player that isn't dead"; };
-label { name "load_struct_player"; addr $9A9B; };
+label { name "is_user_dead"; addr $9AD2; };
+label { name "check_lives"; addr $9AE5; comment "if user hasn't been eliminated, but is out of lives, eliminate him"; };
+label { name "user_alive"; addr $9AF5; comment "found the next user that isn't dead"; };
+label { name "load_struct_user"; addr $9A9B; };
label { name "lsp_loop"; addr $9A9D; };
label { name "ssp_loop"; addr $9A8E; };
label { name "look_for_alive"; addr $9ACB; };
-label { name "next_player_num"; addr $9AB8; comment "wraparound to 1 if > total players"; };
+label { name "next_user_num"; addr $9AB8; comment "wraparound to 1 if > total users"; };
label { name "mul_11_table_minus_one"; addr $9afb; comment "1-indexed"; };
range { name "mul_11_table"; start $9AFC; end $9aff; type bytetable; };
-range { name "num_player_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; };
+range { name "num_players_dli_service"; start $9578; end $959a; type code; comment "DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e"; };
range { name "dli_service_2"; start $bdc7; end $bdd1; type code; comment "DLI service routine, changes COLBK, address gets stored in $6ae/$6af by code at $bc3c"; };
-label { name "numplayer_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; };
-range { name "numplayer_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; };
+label { name "numplayers_screen_data_minus_one"; addr $959a; comment "1-indexed loop copies from here+1"; };
+range { name "numplayers_screen_data"; start $959b; end $95ff; type bytetable; comment "'number of players?', gets copied to $3800, see option_key_handler"; };
range { name "sfx_add_life_bonus"; start $b896; end $b8a6; type bytetable; comment "played when adding bonus per life at end of level"; };
range { name "mul_25_table"; start $b8a7; end $b8be; type wordtable; comment "multiply by 25"; };
range { name "falling_table_1"; start $8a39; end $8a7f; type bytetable; };
@@ -375,7 +380,7 @@ range { name "l02_map_bombs"; start $A446; end $a476; type bytetable; };
range { name "l02_bombs"; start $A477; end $a496; type bytetable; };
range { name "l02_bombs_term"; start $A497; end $a497; type bytetable; };
-range { name "data_a542"; start $A542; end $A5EF; type bytetable; comment "dunno, referenced by electrocution_bomb_pickup"; };
+range { name "elec_bomb_table"; start $A542; end $A5EF; type bytetable; comment "dunno exactly how it's used yet, referenced by electrocution_bomb_pickup"; };
range { name "l03_map"; start $A5F0; end $a62e; type bytetable; comment "level map data starts here"; };
range { name "l03_map_bombs"; start $a62f; end $a653; type bytetable; };
range { name "l03_bombs"; start $a654; end $a66b; type bytetable; };
@@ -383,8 +388,8 @@ range { name "l03_bombs_term"; start $a66c; end $a66c; type bytetable; };
range { name "l03_unkn"; start $a66d; end $a684; type bytetable; };
range { name "sfx_electrocution"; start $A52D; end $A53C; type bytetable; };
-range { name "dumbwaiter_player"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; };
-range { name "dw_platform_player"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; };
+range { name "dumbwaiter_sprite"; start $a782; end $a78f; type bytetable; comment "the dumbwaiters from level03. stored upside-down. trailing 00's might just be filler."; };
+range { name "dw_platform_sprite"; start $A685; end $a68b; type bytetable; comment "horizontally moving platforms from level03"; };
range { name "l04_map"; start $a790; end $a7d4; type bytetable; comment "level map data starts here"; };
range { name "l04_map_bombs"; start $a7d5; end $a805; type bytetable; };
@@ -397,7 +402,8 @@ range { name "l05_bombs"; start $ab6d; end $ab88; type bytetable; };
range { name "l05_bombs_term"; start $ab89; end $ab89; type bytetable; };
range { name "l05_map_changes"; start $ab8a; end $ac5f; type bytetable; };
-range { name "data_table_a8fd"; start $a8fd; end $a91f; type bytetable; comment "dunno, referenced hellstones_sub0"; };
+range { name "hellstone_deltas_1"; start $a8fd; end $a91f; type bytetable; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; };
+label { name "hellstone_deltas_2"; addr $a905; size 8; comment "dunno, look like movement deltas, referenced by hellstones_sub0"; };
range { name "l06_map"; start $a920; end $a973; type bytetable; };
range { name "l06_map_bombs"; start $a974; end $a9a4; type bytetable; };
range { name "l06_bombs"; start $a9a5; end $a9c4; type bytetable; };
@@ -415,7 +421,7 @@ range { name "l07_bombs"; start $ace5; end $ad00; type bytetable; };
range { name "l07_bombs_term"; start $ad01; end $ad01; type bytetable; };
range { name "l07_map_changes"; start $ad02; end $ad67; type bytetable; };
-range { name "data_table_adc7"; start $adc7; end $addf; type bytetable; comment "dunno, referenced by routines at $AD9E and $ADB5"; };
+range { name "zigzag_deltas"; start $adc7; end $addf; type bytetable; comment "kind of a sine wave shape. used for either X or Y delta, depending on the direction the bullet is moving"; };
range { name "l08_map"; start $ade0; end $ae4b; type bytetable; };
range { name "l08_map_bombs"; start $ae4c; end $ae70; type bytetable; };
range { name "l08_bombs"; start $ae71; end $ae88; type bytetable; };
@@ -468,8 +474,8 @@ range { name "l12_unkn0"; start $b658; end $b690; type bytetable; };
range { name "walls_down_rope"; start $aa90; end $aabb; type bytetable; comment "map data for center down-rope, referenced by walls_bomb_sub"; };
range { name "data_aac8"; start $aac8; end $aacf; type bytetable; comment "non-map data, dunno what for. grouped with the level 5 stuff, but doesn't seem to be used by level 5"; };
label { name "walls_up_rope"; addr $aaa6; comment "map data for center up-rope, referenced walls_bomb_sub"; };
-range { name "data_table_aea4"; start $aea4; end $af0f; type bytetable; comment "dunno"; };
-range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound)"; };
+range { name "spellbound_table"; start $aea4; end $af0f; type bytetable; comment "used by spellbound, dunno exactly how yet"; };
+range { name "sfx_letter_bonus"; start $AFCB; end $afff; type bytetable; comment "played once per correct letter at end of level08 (spellbound). trailing 00's are filler."; };
label { name "cue_letter_sfx"; addr $AFB9; comment "play sfx_letter_bonus"; };
label { name "stub"; addr $8405; comment "just an RTS"; };
range { name "data_table_85b6"; start $85b6; end $85bd; type bytetable; comment "used in vblank_imm_isr, not sure for what yet"; };
@@ -509,9 +515,9 @@ range { name "scores_screen_dlist"; start $8C52; end $8C67; type bytetable; comm
label { name "reyalp_msg_minus_one"; addr $8c67; };
label { name "show_reyalp_msg"; addr $8BC0; comment "shows PLAYER (backwards loop)"; };
label { name "reyalp_msg_loop"; addr $8BC2; };
-label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player number"; };
+label { name "check_10th"; addr $8BC8; comment "replace 10th char with the ASCII player (user) number"; };
label { name "continue_loop"; addr $8BD5; };
-label { name "check_alive"; addr $8BE9; comment "player still has lives left?"; };
+label { name "check_alive"; addr $8BE9; comment "user still has lives left?"; };
label { name "no_cross"; addr $8BEF; };
label { name "what_are_we_waiting_for"; addr $8C39; comment "I *think* we're waiting for the music to finish playing..."; };
@@ -545,7 +551,7 @@ label { name "inc_done"; addr $823F; size 1; };
label { name "wait_3_sec"; addr $8C4A; comment "wait 192 jiffies: 3.2 sec (ntsc), 3.84 sec (pal)"; };
label { name "not_alive"; addr $8BEB; comment "no, show a cross instead of a space"; };
label { name "store_space"; addr $8BE2; comment "$AF is the character to show after the score (space for alive, cross for dead)"; };
-range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "player spelled backwards: ' 0 # REYALP '"; };
+range { name "reyalp_msg"; start $8C68; end $8C7a; type bytetable; comment "PLAYER spelled backwards: ' 0 # REYALP '"; };
range { name "scores_msg"; start $8C7b; end $8C81; type bytetable; comment "' SCORES' in color 3"; };
range { name "blank_dlist_8add"; start $8ADD; end $8adf; type bytetable; comment "yet another jump-to-itself empty display list"; };
range { name "blank_dlist_8aeb"; start $8AEB; end $8aed; type bytetable; comment "another jump-to-itself empty display list"; };
@@ -559,9 +565,9 @@ label { name "disable_start_opt"; addr $94EC; comment "disable start and option
label { name "init_speed"; addr $952a; comment "initialize speed to -1"; };
label { name "wait_for_speed"; addr $952F; comment "wait for keyboard IRQ handler to set a speed <= 8"; };
label { name "speed_to_ascii"; addr $9540; comment "convert to ASCII digit"; };
-label { name "add_11_to_x"; addr $953B; comment "11-byte per-player struct?"; };
-label { name "struct_player_lives_offsets_minus_one"; addr $8C88; };
-label { name "struct_player_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed player"; };
+label { name "add_11_to_x"; addr $953B; comment "11-byte per-user struct?"; };
+label { name "struct_user_lives_offsets_minus_one"; addr $8C88; };
+label { name "struct_user_lives_offsets"; addr $8C89; comment "lookup table, offset from $713 to lives for indexed user"; };
label { name "show_scores_screen"; addr $8C22; comment "set dlist shadow to scores_screen_dlist"; };
label { name "display_speed"; addr $9542; comment "show it to the user"; };
label { name "speed_value"; addr $06F9; comment "decoded speed (1-8)"; };
@@ -577,7 +583,7 @@ label { name "title_screen_data_minus_one"; addr $91ce; };
label { name "copy_title_screen"; addr $902A; };
label { name "wait_until_9c_is_0e"; addr $906E; comment "some ISR is writing to $9c..."; };
label { name "funky_init_loop"; addr $90C8; comment "lot going on here, not understood yet"; };
-label { name "player_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; };
+label { name "end_scores_screen"; addr $8B80; comment "show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI"; };
label { name "read_joystick"; addr $84AC; comment "always joystick #1 (all players use the same joystick and pass it around)"; };
label { name "check_joystick_enabled"; addr $84A4; comment "read the joystick if not disabled"; };
label { name "fake_read_trigger"; addr $84CD; comment "??"; };
@@ -589,7 +595,7 @@ label { name "update_dli_vector"; addr $8523; comment "update DLI vector, if the
label { name "setup_get_ready_dl"; addr $964A; comment "06ac/06ad gets address of get_ready_dlist (why not SDLSTL/H?)"; };
label { name "end_of_level_bonus"; addr $B800; };
label { name "keycode_table_minus_one"; addr $9c18; };
-range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed before starting game"; };
+range { name "keyboard_isr"; start $9C00; end $9c18; type code; comment "only use of keyboard is to enter player speed(s) before starting game"; };
range { name "keycode_table"; start $9C19; end $9c20; type bytetable; };
#label { name "mul_25_table"; addr $B8A7; size 2; };
@@ -599,9 +605,14 @@ label { name "init_page6_loop"; addr $837e; };
# these are so far only for player 1
label { name "number_of_players"; addr $06f4; size 1; comment "0 for single-player game, otherwise range 1-3 (2 to 4 players)"; };
label { name "score_minus_one"; addr $06ff; size 1; };
-label { name "score"; addr $0700; size 3; };
+label { name "score"; addr $0700; size 3; comment "aka work_user, 11 bytes"; };
label { name "level"; addr $06f6; size 1; };
label { name "lives"; addr $070a; size 1; };
+label { name "struct_user_1"; addr $070b; comment "11 bytes"; };
+label { name "struct_user_2"; addr $0716; comment "11 bytes"; };
+label { name "struct_user_3"; addr $0721; comment "11 bytes"; };
+label { name "struct_user_4"; addr $072c; comment "11 bytes"; };
+
label { name "current_player"; addr $06fe; size 1; comment "*think* this ranges 1-4, not 0-3"; };
label { name "player_speed"; addr $0624; size 1; };
label { name "initial_speed"; addr $0625; size 1; };
@@ -654,7 +665,7 @@ label { name "option_key_handler"; addr $9489; size 1; comment "called via optio
label { name "level_finished"; addr $8E00; size 1; };
label { name "level_finished_jv"; addr $802D; size 1; };
-label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100;"; };
+label { name "decrement_time_bonus"; addr $8DCE; size 1; comment "bonus -= 100, play sfx_bonus_tick"; };
label { name "decrement_time_bonus_jv"; addr $8021; size 1; comment "bonus -= 100;"; };
label { name "check_bonus_0"; addr $8DD7; size 1; comment "don't decrement if bonus == 0"; };
label { name "dec_done"; addr $8DF9; size 1; };
@@ -705,9 +716,11 @@ label { name "afterlife"; addr $9600; comment "multiple code paths jump here. re
label { name "code_bd52"; addr $BD52; comment "referenced by code at $BC83"; };
label { name "crumble_gameboard"; addr $8D00; comment "just lost your last life"; };
label { name "crumble_gameboard_jv"; addr $8030; comment "just lost your last life"; };
-label { name "init_page_7"; addr $9A5C; };
-label { name "init_page_7_jv"; addr $8024; };
-range { name "data_9a71"; start $9A71; end $9a7b; type bytetable; comment "used by code above"; };
+label { name "init_struct_users"; addr $9A5C; comment "work_user and struct_user_{1..4}, 11 * 5 (55 aka $37) bytes"; };
+label { name "init_struct_users_jv"; addr $8024; };
+label { name "isu_next_su"; addr $9A5E; };
+label { name "isu_next_byte"; addr $9A60; };
+range { name "struct_users_init_contents"; start $9A71; end $9a7b; type bytetable; comment "work_user and struct_user_1 to _4 are initialized to this"; };
range { name "data_af10"; start $AF10; end $AF1B; type bytetable; comment "looks almost like code but it's bogus"; };
range { name "l_equals"; start $8CFD; end $8CFF; type bytetable; comment "L= (for lives display)"; };
label { name "add_extra_life"; addr $8CE4; comment "plays sfx_extra_life"; };
@@ -724,6 +737,7 @@ label { name "num_tmp"; addr $0665; size 1; comment "temp used by print_number";
label { name "num_in"; addr $D0; size 3; comment "print_number input. 3-byte number (LSB first as usual) to be printed"; };
label { name "num_out"; addr $D3; size 2; comment "area of (screen) memory where print_number stores its output"; };
label { name "num_color"; addr $D5; size 1; comment "print_number adds this to numeric screencode output. normally 0, set to $80 on the end-of-game screen."; };
+label { name "bomb_idx"; addr $B2; size 1; comment "bomb that was just picked up (times 2, suitable for index into a table of words)"; };
label { name "print_bonus"; addr $867E; comment "print remaining bonus time; work_level_points_per_bomb should read work_level_time_bonus-1"; };
label { name "print_bonus_jv"; addr $800F; comment "print remaining bonus time"; };
label { name "pnum_done"; addr $8667; };
@@ -756,6 +770,11 @@ label { name "dm_x_with_offset"; addr $C6; size 1; comment "graphics object X of
label { name "dm_y_with_offset"; addr $C7; size 1; comment "graphics object Y offset, plus dm_xpos"; };
label { name "dm_screen_addr"; addr $C4; size 2; comment "points to byte to write gfx data to"; };
label { name "calc_screen_addr"; addr $80D0; size 1; comment "calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr"; };
+label { name "sa_hi_ok_1"; addr $80FD; size 1; };
+label { name "mul40_loop"; addr $80DA; size 1; };
+label { name "sa_hi_ok_2"; addr $8138; size 1; };
+label { name "sa_tmp_1"; addr $BD; size 1; comment "used by calc_screen_addr"; };
+label { name "sa_tmp_2"; addr $C8; size 1; comment "used by calc_screen_addr"; };
label { name "store_rts"; addr $83B6; comment "store an RTS at $06E6, which will get JSR'ed to by unused level subroutines"; };
label { name "well_done_screen"; addr $BC00; comment "the WELL DONE screen, when you beat all the levels. after this, the game plays random levels."; };
label { name "cue_woop_sound"; addr $B4D3; };