diff options
Diffstat (limited to 'defender.info')
-rw-r--r-- | defender.info | 75 |
1 files changed, 68 insertions, 7 deletions
diff --git a/defender.info b/defender.info index 58b2e95..519fadb 100644 --- a/defender.info +++ b/defender.info @@ -12,8 +12,13 @@ label { name "rtclok_ok"; addr $800b; }; label { name "init_work_ram"; addr $a268; }; label { name "start_game"; addr $8100; comment "..."; }; label { name "show_game_type"; addr $811f; comment "draw the text for e.g. ONE PLAYER EASY"; }; +label { name "sgt_nextchar"; addr $813d; }; +label { name "sgt_done"; addr $8147; }; label { name "draw_title_text"; addr $8259; comment "draw the text for DEFENDER/SELECT GAME AND PRESS THE START BUTTON"; }; -label { name "draw_demo_text"; addr $8963; comment "draw the text for DEFENDER c 1982 ATARI, during the demo game"; }; +label { name "draw_demo_text"; addr $895c; comment "draw the text for DEFENDER c 1982 ATARI, during the demo game"; }; +label { name "ddt_draw"; addr $8963; }; +label { name "ddt_nextchar"; addr $8980; }; +label { name "ddt_done"; addr $898b; }; label { name "dtt_lo"; addr $8267; comment "lda #<title_text"; }; label { name "dtt_hi"; addr $826b; comment "lda #>title_text"; }; label { name "dtt_loop"; addr $8271; }; @@ -21,7 +26,7 @@ label { name "dtt_color"; addr $8279; comment "multicolor support. bytes with $F label { name "dtt_print"; addr $8288; }; label { name "dtt_inc_ptr"; addr $828b; }; label { name "dtt_done"; addr $8294; }; -label { name "check_consol"; addr $baa0; comment "see if start or select are pressed"; }; +label { name "read_consol"; addr $baa0; comment "see if start or select are pressed, set flags"; }; label { name "start_pressed"; addr $bac6; comment "user pressed start key, ignore if game is playing & not paused"; }; label { name "consol_done"; addr $bab4; comment "several code paths jump here instead of doing their own RTS"; }; label { name "ignore_start"; addr $bad1; comment "don't handle start key while game is playing & not paused"; }; @@ -50,8 +55,12 @@ label { name "level_ok"; addr $83d7; comment "ramp up the speed on odd-numbered label { name "set_game_type"; addr $80e6; }; label { name "update_title_colors"; addr $809a; comment "rotate colors"; }; label { name "update_title_sfx"; addr $80a6; comment "alter the drone sound's pitch"; }; -label { name "title_fx_ok"; addr $80b7; }; +label { name "tsi_show_gt"; addr $8092; }; +label { name "tsi_wait_to_draw"; addr $8095; }; +label { name "tsi_delay"; addr $80c8; }; +label { name "tsi_check_start"; addr $80b7; }; label { name "title_screen_idle"; addr $8078; comment "play & fade the drone while we wait for the user to press select or start"; }; +label { name "tsi_text"; addr $808f; comment "play & fade the drone while we wait for the user to press select or start"; }; label { name "init_title_screen"; addr $8031; }; label { name "init_drone"; addr $8d79; comment "start the drone sound you hear at the title screen & when starting/ending a level. Also silence channel 2 (the engine noise). In BASIC this would be: SOUND 1,0,0,0:SOUND 2,255,10,15:SOUND 3,254,10,15"; }; label { name "game_on"; addr $8369; comment "called when start button is pressed from title screen or pause mode"; }; @@ -99,12 +108,14 @@ label { name "hsp_loop"; addr $8899; }; label { name "hsp_check_demo"; addr $88ae; comment "don't ever kill the 'player' in demo mode (game_type==0)"; }; label { name "check_hyperspace_fatal"; addr $88b2; comment "kill player if RANDOM >= $AA (in other words, 33% of the time!)"; }; label { name "hsp_done"; addr $88bc; }; -label { name "draw_starfield"; addr $a832; comment "XXX don't know how this works yet"; }; +label { name "animate_starfield"; addr $a832; comment "XXX don't know how this works yet"; }; label { name "hyperspace_implosion"; addr $97e7; comment "looks like the ship explosion, but in reverse"; }; label { name "ship_explosion"; addr $97d9; comment "particles"; }; label { name "init_splosion"; addr $97f7; comment "calculate (ex|im)plosion particles for the player ship"; }; label { name "animate_explosion"; addr $9830; }; +label { name "ae_loop"; addr $983d; }; label { name "animate_implosion"; addr $9868; }; +label { name "ai_loop"; addr $9875; }; label { name "animate_splosion"; addr $9895; comment "called multiple times by animate_(im|ex)plosion. uses particles set up by init_splosion"; }; label { name "as_done"; addr $9961; }; label { name "is_loop"; addr $97f9; }; @@ -113,8 +124,20 @@ label { name "draw_scanner_border_and_planet"; addr $9fb1; comment "XXX don't kn label { name "add_cursprite_points"; addr $a7ae; comment "add points to score based on what kind of enemy we killed. does not include points for rescued humans nor end-of-level bonus."; }; label { name "add_points"; addr $a7b2; comment "this entry point takes a sprite type in A, used for end-of-level bonus (and...?)"; }; label { name "draw_scores"; addr $9442; comment "draw score digits in the HUDs for both players (but not lives nor smartbombs)"; }; -label { name "draw_2_score_digits"; addr $9483; comment "called 4 times for the 4 bytes of score. does division by 10."; }; -label { name "flash_score"; addr $93bc; comment "flash the score of the current player"; }; +label { name "dsc_ok"; addr $9458; }; +label { name "draw_score_2p"; addr $93e2; comment "draw current player's score in 2p mode. does nothing in 1p mode!"; }; +label { name "ds2p_p1"; addr $9426; comment "draw player 1's score since he's the current player"; }; +label { name "ds2_ok"; addr $93f8; }; +label { name "print_number"; addr $9483; comment "print number in A, at current cursor pos. range 0-99 (0-$63). does division by 10. suppress leading zeroes if leading_zero_flag is clear."; }; +label { name "pn_div10"; addr $9488; }; +label { name "pn_div10_loop"; addr $948d; }; +label { name "pn_draw"; addr $94b5; }; +label { name "pn_skip"; addr $94b8; }; +label { name "pn_div10_ok"; addr $949e; }; +label { name "clear_score"; addr $93bc; comment "print 7 spaces over the current player's score. used to flash the score of the current player"; }; +label { name "fs_set_y"; addr $93d2; }; +label { name "fs_next_char"; addr $93d9; }; +label { name "fs_done"; addr $93e1; }; label { name "copy_code_to_ram"; addr $a291; comment "copy is done because the code is self-modifying"; }; label { name "clr_ram_sprites_loop"; addr $a2aa; }; label { name "crsl_ok"; addr $a2b4; }; @@ -155,9 +178,22 @@ label { name "sbf_loop"; addr $9c0f; }; label { name "spawn_sprite"; addr $abed; comment "XXX does this apply to humanoids too?"; }; label { name "nl_wtf"; addr $83cb; comment "this branch should never be taken (means level was $FF, but it's clamped to $63 below)"; }; label { name "nl_drone"; addr $83ea; }; +label { name "nl_next_stars"; addr $83f8; }; +label { name "nl_delay"; addr $8414; }; label { name "level_cleared"; addr $8427; comment "decide whether or not to resurrect dead humans"; }; label { name "dont_repopulate"; addr $843f; }; label { name "div_5_loop"; addr $842c; }; +label { name "clear_enemy_explosions"; addr $845b; }; +label { name "cex_loop"; addr $845f; }; +label { name "prep_next_level"; addr $8465; comment "clean up game state, show prompt if in 2p mode"; }; +label { name "pnl_store_trig"; addr $8478; comment "store either TRIG0 or TRIG1"; }; +label { name "pnl_clear_player_shots"; addr $849a; }; +label { name "check_consol"; addr $8503; comment "handle start/select keys during gameplay (ignore if not paused)"; }; +label { name "cc_chk_start"; addr $8511; }; +label { name "cc_chk_keyboard"; addr $851c; comment "in demo mode, pressing any key returns to the title screen"; }; +label { name "check_paused"; addr $852a; }; +label { name "wait_draw_ok"; addr $853f; }; +label { name "check_spawn"; addr $854c; comment "see if it's time to spawn a lander wave or a baiter yet"; }; label { name "draw_p1_lives_and_bombs"; addr $86b0; comment "update HUD"; }; label { name "draw_p2_lives_and_bombs"; addr $8780; comment "update HUD"; }; label { name "move_ship"; addr $85c9; comment "only in non-demo game"; }; @@ -201,6 +237,16 @@ label { name "no_vert_move"; addr $ad98; comment "ship not moving up or down XXX label { name "move_up"; addr $ad90; comment "XXX how does this work?"; }; label { name "move_down"; addr $ad94; comment "XXX how does this work?"; }; label { name "demo_logic"; addr $88bd; comment "animate the demo-game ship"; }; +label { name "dl_hyperspace"; addr $894c; }; +label { name "dl_smartbomb"; addr $8952; }; +label { name "dl_done"; addr $8959; }; +label { name "dl_down"; addr $891c; comment "move the ship down"; }; +label { name "dl_vert_delta"; addr $88f0; comment "move the ship up or down, towards the sprite we're considering. actual movement ends up as the sum of all the calls here"; }; +label { name "dl_vert_move"; addr $88dd; }; +label { name "dl_vm_next"; addr $88e4; }; +label { name "dl_trigger"; addr $8946; }; +label { name "dl_check_move"; addr $88d1; comment "is it time to move the ship?"; }; +label { name "dl_check_hyper"; addr $892b; }; label { name "printchar"; addr $972e; comment "print the DSCII text character in the A reg"; }; label { name "pch_done"; addr $9757; }; label { name "print_copyright"; addr $9758; comment "print copyright symbol ($c0). it's double-wide, so 2 glyphs"; }; @@ -223,6 +269,14 @@ label { name "ab_next_sprite"; addr $9698; }; label { name "calc_bonus_index"; addr $96c7; comment "A = 7 + (level < 6 ? level : 5); // index into score_points_table"; }; label { name "cbi_add7"; addr $96cf; comment "add 7 because that's where the bonus amounts start, in score_points_table"; }; label { name "save_p1_state"; addr $89b9; comment "save game state to p1_sav_* area"; }; +label { name "sp1_loop"; addr $89bb; }; +label { name "sp1_skip"; addr $89cb; }; +label { name "sp2_loop"; addr $8a0f; }; +label { name "sp2_skip"; addr $8a1f; }; +label { name "lp1_loop"; addr $8a63; }; +label { name "lp1_skip"; addr $8a73; }; +label { name "lp2_loop"; addr $8ab7; }; +label { name "lp2_skip"; addr $8ac7; }; label { name "save_p2_state"; addr $8a0d; comment "save game state to p2_sav_* area"; }; label { name "load_p1_state"; addr $8a61; comment "restore game state from p1_sav_* area"; }; label { name "load_p2_state"; addr $8ab5; comment "restore game state from p2_sav_* area"; }; @@ -233,8 +287,13 @@ label { name "delay_loop"; addr $8874; comment "takes delay time in A. only ever label { name "dl_wait"; addr $8876; }; label { name "prompt_done"; addr $84ff; comment "either the prompt screen is finished, or we were in single-player mode & didn't need it"; }; label { name "print_p1_text"; addr $8b09; comment "print PLAYER ONE"; }; +label { name "pp1_next"; addr $8b15; }; +label { name "pp1_done"; addr $8b20; }; label { name "print_p2_text"; addr $8b3e; comment "print PLAYER TWO"; }; +label { name "pp2_next"; addr $8b4a; }; +label { name "pp2_done"; addr $8b55; }; label { name "clear_prompt_text"; addr $8b73; comment "print 40 spaces over the PLAYER (ONE|TWO) message"; }; +label { name "cpt_next_char"; addr $8b7f; }; # not sure 'spawn' is quite the right word here label { name "spawn_humanoid"; addr $aee6; comment "'spawn' not the right word. this does all the logic for humanoids (falling, hitting the ground)"; }; label { name "spawn_lander"; addr $b08e; }; @@ -251,6 +310,7 @@ label { name "baiter_check"; addr $bb7b; comment "decide whether to spawn a bait label { name "bc_done"; addr $bba2; }; label { name "bc_spawn"; addr $bb8d; comment "yes, spawn it"; }; label { name "get_random"; addr $8cf2; comment "variant of an LFSR. could have just use 'lda RANDOM', this is likely an artifact of Baker's Apple II heritage. Returns 'random' number in A."; }; +label { name "get_spawn_pos"; addr $8d0c; comment "pick a random, valid spot"; }; label { name "detonate_smartbomb"; addr $8bac; }; label { name "smartbomb_kill_stuff"; addr $8bd0; comment "kill every enemy on the screen"; }; label { name "kill_next"; addr $8bbd; }; @@ -334,6 +394,7 @@ label { name "screen_ptr"; addr $c0; size 2; comment "pointer to screen memory, # non-zp data addresses label { name "enemy_explosion_table"; addr $052b; size 128; comment "4 bytes per entry, 32 entries"; }; label { name "splosion_particles"; addr $0400; size 256; comment "page full of random garbage, generated by init_splosion, used/altered by animate_plosion"; }; +label { name "leading_zero_flag"; addr $0510; comment "bit 7 clear = skip leading zeroes in print_number. set = print leading zeroes ('01' instead of '1'"; }; label { name "plosion_x_start"; addr $0507; }; label { name "plosion_y_start"; addr $0508; }; label { name "plosion_x"; addr $0505; }; @@ -437,7 +498,7 @@ range { name "gttxt_2p_normal"; start $820f; end $8233; type bytetable; comment range { name "gttxt_2p_hard"; start $8234; end $8258; type bytetable; comment "' T W O P L A Y E R H A R D '"; }; range { name "title_text"; start $8295; end $8328; type bytetable; comment "cF, c5 are color codes. 'cF D E F E N D E RnlnlnlnlnlnlcF S E L E C T G A M E A N D P R E S Snlnl T H E S T A R T B U T T O Nnlnlnlnlc5 c) 1 9 8 2 A T A R I'"; }; range { name "table_8329"; start $8329; end $8368; type bytetable; comment "is this used at all?"; }; -range { name "power_10_table"; start $9507; end $9509; type bytetable; comment "1, 10, 100 aka 10*0, 10*1, 10*2. used by draw_2_score_digits. last byte appears to never get read."; }; +range { name "power_10_table"; start $9507; end $9509; type bytetable; comment "1, 10, 100 aka 10*0, 10*1, 10*2. used by print_number. last byte appears to never get read."; }; range { name "font"; start $950a; end $9641; type bytetable; comment "13 4x8 glyphs, 0 thru 9, space, left & right halves of copyright symbol. 2bpp, but only one color used (11). really 3x8 as rightmost column is blank (for spacing) in all glyphs. height is the full 8 (no blanks for spacing)."; }; label { name "font_letters"; addr $9572; comment "uppercase, 26 4x8 glyphs but no blank column for spacing (full 4x8). also J Q Z glyphs are graphics of some kind."; }; range { name "demo_text"; start $898f; end $89b8; type bytetable; comment "' D E F E N D E R c 1982 A T A R I '"; }; |