2119 ; ************************ 2120 ; * FIREBUG DRAW ROUTINE * 2121 ; * BY Kyle Peacock * 2122 ; ************************ 2123 ; 2124 .LOCAL 2125 ; 2126 DRAW 2127 LDA MAXBUGS ;# OF CHARS TO 2128 STA ?COUNT ;MODIFY. 2129 ?DRAW1 2130 LDX ?COUNT ;GET COUNTER. 2131 LDY TYPE,X ;CHARACTER TYPE. 2132 LDA PHASE,X ;TYPE PHASE. 2133 CMP ?INDEX+1,Y ;PHASE EXCEEDED? 2134 BCC ?DRAW3 ;NO! BRANCH! 2135 ?DRAW2 2136 LDA ?INDEX,Y ;RESET WITH 2137 STA PHASE,X ;PROPER PHASE. 2138 ?DRAW3 2139 CMP ?INDEX,Y ;CORRECT PHASE? 2140 BCC ?DRAW2 ;NO! BRANCH! 2141 ASL A ;PHASE TIMES 2. 2142 TAY ;MOVE A TO Y. 2143 LDA ?OFFSET,Y ;ADDR OF CHAR 2144 STA DRWLO ;DATA (LO BYTE) 2145 LDA ?OFFSET+1,Y ;HI BYTE OF 2146 STA DRWLO+1 ;CHAR DATA. 2147 LDA ?COUNT ;GET COUNTER. 2148 ASL A ;MULTIPLY BY 2. 2149 TAY ;MOVE A TO Y. 2150 LDA ?PLAYBASE,Y ;DESTINATION 2151 STA PLLO ;LO BYTE 2152 LDA ?PLAYBASE+1,Y ;& 2153 STA PLLO+1 ;HI BYTE. 2154 LDY #15 ;MOVE 16 BYTES. 2155 ?DRAW4 2156 LDA (DRWLO),Y ;GET DATA. 2157 STA (PLLO),Y ;SAVE DATA. 2158 DEY ;NEXT BYTE. 2159 BPL ?DRAW4 ;ALL DONE? 2160 DEC ?COUNT ;NEXT CHARACTER. 2161 BPL ?DRAW1 ;ALL DONE? 2162 DEC ?PHTIME ;DEC TIMER. 2163 BPL ?DRAW7 ;IF >0 BRANCH! 2164 LDA MOVETIME ;RESET PHASE 2165 STA ?PHTIME ;TIMER. 2166 LDX PLAYNO ;PLAYER NUMBER. 2167 LDA STICK0,X ;GET JOYSTICK. 2168 CMP #15 ;CENTERED? 2169 BEQ ?DRAW7 ;YES! BRANCH! 2170 INC PHASE ;INC FIREBUG PHASE. 2171 ?DRAW7 2172 DEC ?PHTIME+1 ;DEC TIMER. 2173 BPL ?DRAW9 ;IF >0 BRANCH. 2174 LDA PHASETIME ;RESET TIMER. 2175 STA ?PHTIME+1 ;SAVE IT. 2176 LDX MAXBUGS ;# OF CHARs 2177 ?DRAW8 2178 INC PHASE,X ;UPDATE PHASES. 2179 DEX ;HANDLE NEXT. 2180 BNE ?DRAW8 ;ALL DONE? 2181 ?DRAW9 2182 RTS ;ZOOOOOOM!!! 2183 ?COUNT 2184 .BYTE 0 ;COUNTER 2185 ?PHTIME 2186 .BYTE 3,3 ;TIMERS 2187 ; 2188 ?INDEX ; CHARACTER INDEX 2189 .BYTE 0,4,8,12,16 2190 .BYTE 21,31,37,40 2191 ; 2192 ?PLAYBASE 2193 .WORD [GAMESET+48] 2194 .WORD [GAMESET+64] 2195 .WORD [GAMESET+80] 2196 .WORD [GAMESET+96] 2197 .WORD [GAMESET+144] 2198 ; 2199 ?OFFSET 2200 .WORD FIREBUGUP1 2201 .WORD FIREBUGUP2 2202 .WORD FIREBUGUP3 2203 .WORD FIREBUGUP2 2204 .WORD FIREBUGRIGHT1 2205 .WORD FIREBUGRIGHT2 2206 .WORD FIREBUGRIGHT3 2207 .WORD FIREBUGRIGHT2 2208 .WORD FIREBUGLEFT1 2209 .WORD FIREBUGLEFT2 2210 .WORD FIREBUGLEFT3 2211 .WORD FIREBUGLEFT2 2212 .WORD FIREBUGDOWN1 2213 .WORD FIREBUGDOWN2 2214 .WORD FIREBUGDOWN3 2215 .WORD FIREBUGDOWN2 2216 .WORD ?BUG11 2217 .WORD ?BUG12 2218 .WORD ?BUG13 2219 .WORD ?BUG14 2220 .WORD ?BUG15 2221 .WORD ?BUG21 2222 .WORD ?BUG22 2223 .WORD ?BUG23 2224 .WORD ?BUG24 2225 .WORD ?BUG25 2226 .WORD ?BUG26 2227 .WORD ?BUG25 2228 .WORD ?BUG24 2229 .WORD ?BUG23 2230 .WORD ?BUG22 2231 .WORD ?EGG1 2232 .WORD ?EGG2 2233 .WORD ?EGG3 2234 .WORD ?EGG4 2235 .WORD ?EGG3 2236 .WORD ?EGG2 2237 .WORD BULLET1 2238 .WORD BULLET2 2239 .WORD BULLET3 2240 FIREBUGUP1 2241 .BYTE 12,2,9,194,53,202,53,2 2242 .BYTE 48,128,96,131,92,163,92,128 2243 FIREBUGUP2 2244 .BYTE 3,2,9,2,245,10,245,2 2245 .BYTE 192,128,96,128,95,160,95,128 2246 FIREBUGUP3 2247 .BYTE 12,2,9,2,53,202,53,194 2248 .BYTE 48,128,96,128,92,163,92,131 2249 FIREBUGRIGHT1 2250 .BYTE 12,51,25,153,153,25,51,12 2251 .BYTE 192,0,35,152,152,35,0,192 2252 FIREBUGRIGHT2 2253 .BYTE 51,51,25,153,153,25,51,51 2254 .BYTE 0,0,32,155,155,32,0,0 2255 FIREBUGRIGHT3 2256 .BYTE 204,51,25,153,153,25,51,204 2257 .BYTE 0,0,35,152,152,35,0,0 2258 FIREBUGLEFT1 2259 .BYTE 3,0,200,38,38,200,0,3 2260 .BYTE 48,204,100,102,102,100,204,48 2261 FIREBUGLEFT2 2262 .BYTE 0,0,8,230,230,8,0,0 2263 .BYTE 204,204,100,102,102,100,204,204 2264 FIREBUGLEFT3 2265 .BYTE 0,0,200,38,38,200,0,0 2266 .BYTE 51,204,100,102,102,100,204,51 2267 FIREBUGDOWN1 2268 .BYTE 2,53,202,53,194,9,2,12 2269 .BYTE 128,92,163,92,131,96,128,48 2270 FIREBUGDOWN2 2271 .BYTE 2,245,10,245,2,9,2,3 2272 .BYTE 128,95,160,95,128,96,128,192 2273 FIREBUGDOWN3 2274 .BYTE 194,53,202,53,2,9,2,12 2275 .BYTE 131,92,163,92,128,96,128,48 2276 ?BUG11 2277 .BYTE 48,12,2,9,9,50,192,0 2278 .BYTE 0,3,140,96,96,128,48,12 2279 ?BUG12 2280 .BYTE 0,240,14,9,9,14,48,48 2281 .BYTE 12,12,176,96,96,176,15,0 2282 ?BUG13 2283 .BYTE 0,0,242,9,9,2,12,12 2284 .BYTE 48,48,128,96,96,143,0,0 2285 ?BUG14 2286 .BYTE 3,0,2,57,201,2,3,0 2287 .BYTE 0,192,128,99,108,128,0,192 2288 ?BUG15 2289 .BYTE 12,3,2,9,57,194,0,0 2290 .BYTE 0,0,131,108,96,128,192,48 2291 ?BUG21 2292 .BYTE 0,0,0,1,1,8,160,32 2293 .BYTE 8,10,32,64,64,0,0,0 2294 ?BUG22 2295 .BYTE 0,0,0,1,1,40,8,0 2296 .BYTE 0,32,40,64,64,0,0,0 2297 ?BUG23 2298 .BYTE 0,0,0,1,9,2,0,0 2299 .BYTE 0,0,128,96,64,0,0,0 2300 ?BUG24 2301 .BYTE 0,0,2,9,1,0,0,0 2302 .BYTE 0,0,0,64,96,128,0,0 2303 ?BUG25 2304 .BYTE 0,8,40,1,1,0,0,0 2305 .BYTE 0,0,0,64,64,40,32,0 2306 ?BUG26 2307 .BYTE 32,160,8,1,1,0,0,0 2308 .BYTE 0,0,0,64,64,32,10,8 2309 ?EGG1 2310 .BYTE 0,0,0,171,171,0,0,0 2311 .BYTE 0,0,0,234,234,0,0,0 2312 ?EGG2 2313 .BYTE 0,0,14,40,40,14,0,0 2314 .BYTE 0,0,176,40,40,176,0,0 2315 ?EGG3 2316 .BYTE 0,50,2,8,8,2,50,0 2317 .BYTE 0,140,128,32,32,128,140,0 2318 ?EGG4 2319 .BYTE 194,2,2,0,0,2,2,194 2320 .BYTE 131,128,128,0,0,128,128,131 2321 BULLET1 2322 .BYTE 0,0,0,2,2,0,0,0 2323 .BYTE 0,0,0,128,128,0,0,0 2324 BULLET2 2325 .BYTE 0,0,1,4,4,1,0,0 2326 .BYTE 0,0,64,16,16,64,0,0 2327 BULLET3 2328 .BYTE 0,3,0,48,48,0,3,0 2329 .BYTE 0,192,0,12,12,0,192,0 2330 ; 2331 ; *************************** 2332 ; * FIREBUG CHARACTER USAGE * 2333 ; *************************** 2334 ; 2335 ; CHAR # REDEFINED CHARACTER 2336 ; 2337 ; 0 BLANK 2338 ; 1 BORDER 2339 ; 2 DIRT 2340 ; 3 DIRT 2341 ; 4 DIRT 2342 ; 5 DIRT 2343 ; 6 & 7 PLAYER'S FIREBUG 2344 ; 8 & 9 ENEMY BUG #1 2345 ; 10 & 11 ENEMY BUG #2 2346 ; 12 & 13 BABY FIREBUG 2347 ; 14 FIREBUG TRAIL 2348 ; 15 & 16 PROXIMITY BOMB 2349 ; 17 EXPLOSION 2350 ; 18 & 19 FIREBUG SPARK 2351 ;20,21,22,23,24 SPARK BARLINE 2352 ; ************************* 2353 ; * FIREBUG SPARK HANDLER * 2354 ; * BY Kyle Peacock * 2355 ; ************************* 2356 ; 2357 .LOCAL 2358 ; 2359 SPARK 2360 JSR STARTSPARK ;FIRING. 2361 JMP MOVESPARK ;MOVING. 2362 STARTSPARK 2363 DEC FIRETIME ;DEC TIMER. 2364 BNE ?RETURN ;IF <>0 BRANCH! 2365 LDA #$03 ;RESET TIMER. 2366 STA FIRETIME ;SAVE IT. 2367 LDX PLAYNO ;GET PLAYER #. 2368 LDA TRIG0,X ;GET TRIGGER. 2369 BNE ?RETURN ;IF <>0 BRANCH! 2370 LDA NOBULL,X ;FIRED BULLETS. 2371 CMP #$05 ;IF >=5, 2372 BCS ?RETURN ;BRANCH! 2373 LDA BULLETLINE+10 ;CHECK BAR 2374 CMP #24 ;LINE. 2375 BEQ ?RETURN ;IF CHR=24 BRANCH! 2376 LDX #$03 ;SET UP X. 2377 ?SEARCH 2378 LDA BULLDIR,X ;THIS BULLET 2379 CMP #$FF ;ACTIVE? 2380 BEQ ?FOUND ;NO! BRANCH! 2381 DEX ;YES, CHECK NEXT 2382 BPL ?SEARCH ;WORK AREA. 2383 JMP ?RETURN ;NONE AVAILABLE. 2384 ?FOUND 2385 INC NOBULL ;INC BULLETS FIRED. 2386 LDA BUGL ;FIREBUG'S LO 2387 STA BULLX,X ;ADDRESS. 2388 LDA BUGL+1 ;FIREBUG'S HI 2389 STA BULLY,X ;ADDRESS. 2390 LDA TYPE ;GET FIREBUG'S 2391 STA BULLDIR,X ;DIRECTION. 2392 LDA #20 ;SET SPARK LIFE. 2393 STA BULLTIME,X ;SAVE IT. 2394 LDA #6 ;SET UP FIRING 2395 STA BULLNOISE ;SOUND EFFECT. 2396 LDX BULLPNT ;DEC BAR LINE OF 2397 INC BULLETLINE,X ;REMAINING 2398 LDA BULLETLINE,X ;SPARKS. 2399 CMP #24 ;[DON'T ALLOW 2400 BNE ?RETURN ;SPARK EJECTION 2401 LDA BULLPNT ;IF NO SPARKS 2402 CMP #10 ;ARE ON BAR 2403 BEQ ?RETURN ;LINE.] 2404 DEC BULLPNT ;DEC POINTER. 2405 ?RETURN 2406 RTS ;GET OUT!!! 2407 MOVESPARK 2408 LDX #$03 ;HANDLE ALL. 2409 ?SPARKY 2410 LDA BULLDIR,X ;SPARK DIRECT. 2411 CMP #$FF ;IS IT $FF? 2412 BNE ?SPARKS ;NO! BRANCH! 2413 JMP ?NEXTBULL ;HANDLE NEXT. 2414 ?SPARKS 2415 LDA BULLX,X ;GET BULLET LO. 2416 STA ZLO ;SAVE IT. 2417 LDA BULLY,X ;GET BULLET HI. 2418 STA ZLO+1 ;SAVE IT. 2419 LDY #$00 ;CLEAR Y-REG. 2420 LDA (ZLO),Y ;GET CHAR. 2421 CMP #18 ;BULLET? 2422 BEQ ?BLANK ;YES. BRANCH! 2423 CMP #17 ;EXPLOSION? 2424 BNE ?NOBLANK ;YES! BRANCH! 2425 ?BLANK 2426 LDA #14 ;FIREBUG TRAIL. 2427 STA (ZLO),Y ;SAVE IT. 2428 INY ;INC POINTER. 2429 STA (ZLO),Y ;SAVE IT. 2430 ?NOBLANK 2431 LDA BULLDIR,X ;SPARK DIRECT. 2432 BPL ?REDRAW ;IF >0 BRANCH! 2433 LDA #$FF ;TURN OFF SPARK. 2434 STA BULLDIR,X ;SAVE IT. 2435 DEC NOBULL ;DEC FIRED SPARKS. 2436 JMP ?NEXTBULL ;HANDLE NEXT. 2437 ?REDRAW 2438 TAY ;MOVE A TO Y. 2439 LDA BULLX,X ;GET SPARK LO. 2440 CLC ;CLEAR CARRY. 2441 ADC ?LOADD,Y ;DIRECTION ADD. 2442 STA ZLO ;SAVE IT. 2443 LDA BULLY,X ;GET SPARK HI. 2444 ADC ?HIADD,Y ;DIRECTION ADD. 2445 STA ZLO+1 ;SAVE IT. 2446 LDY #$00 ;CLEAR Y-REG. 2447 LDA (ZLO),Y ;GET CHARACTER. 2448 AND #$7F ;CLEAR BIT 7. 2449 BEQ ?GO ;IF =0 BRANCH! 2450 CMP #14 ;IS IT =14? 2451 BEQ ?GO ;YES! BRANCH! 2452 ?STOP 2453 PHA ;SAVE CHARACTER. 2454 LDA #$80 ;BIT 7 ON. 2455 STA BULLDIR,X ;SAVE IT. 2456 PLA ;RESTORE CHAR. 2457 CMP #1 ;BORDER? 2458 BEQ ?NEXTBULL ;YES! BRANCH! 2459 CMP #15 ;BOMB? 2460 BEQ ?NEXTBULL ;YES! BRANCH! 2461 CMP #12 ;BABY FIREBUG? 2462 BEQ ?NEXTBULL ;YES! BRANCH! 2463 JSR ?POSITION ;SAVE NEW X&Y. 2464 LDA #17 ;EXPLOSION. 2465 STA (ZLO),Y ;SAVE IT. 2466 INY ;INC POINTER. 2467 STA (ZLO),Y ;SAVE IT. 2468 LDA #21 ;TURN ON DETO- 2469 STA BOOMNOISE ;NATION SOUND. 2470 BNE ?NEXTBULL ;BRANCH! 2471 ?GO 2472 LDA #18 ;BULLET. 2473 STA (ZLO),Y ;SAVE IT. 2474 INY ;INC POINTER. 2475 CLC ;INC CHAR. 2476 ADC #$01 2477 STA (ZLO),Y ;SAVE IT. 2478 JSR ?POSITION ;SAVE NEW X&Y. 2479 DEC BULLTIME,X ;DEC LIFETIME. 2480 BPL ?NEXTBULL ;IF >0 BRANCH! 2481 LDA #$01 ;FORCED HALT. 2482 BNE ?STOP ;BRANCH! 2483 ?NEXTBULL 2484 DEX ;DEC POINTER. 2485 BMI ?RETURN2 ;IF <0 BRANCH! 2486 JMP ?SPARKY ;JUMP ON IT. 2487 ?RETURN2 2488 RTS ;LATER Y'ALL... 2489 ?POSITION 2490 LDA ZLO ;GET NEW LO. 2491 STA BULLX,X ;SAVE IT. 2492 LDA ZLO+1 ;GET NEW HI. 2493 STA BULLY,X ;SAVE IT. 2494 RTS ;PLEASE LEAVE!!! 2495 ; 2496 ; DIRECTIONAL ADD ONs 2497 ; 2498 ?LOADD 2499 .BYTE 128,2,254,128 2500 ?HIADD 2501 .BYTE 255,0,255,0 2502 ; 2503 ; ********************* 2504 ; * EXPLOSION ROUTINE * 2505 ; * BY Tom Hudson * 2506 ; ********************* 2507 ; 2508 EXPLOD LDA #0 ;RESET... 2509 STA EXPPH ;EXP. PHASE 2510 LDA #66 ;AND START... 2511 STA EXNOISE ;EXP. SOUND 2512 EXPDLP LDA #17 ;SET UP... 2513 STA EXPCHR ;EXPLOSION CHAR. 2514 LDA EXPPH ;GET PHASE 2515 CMP #13 ;>12? 2516 BCC PH1 ;NO, PHASE 1 2517 SEC ;ADJUST INDEX... 2518 SBC #13 ;FOR PHASE 2 2519 LDY #0 ;AND SET UP... 2520 STY EXPCHR ;ERASE CHARACTER 2521 PH1 TAX ;PUT PHASE IN X 2522 LDA ELO ;AND ADD... 2523 CLC ;EXPLOSION... 2524 ADC EADDL,X ;ADDRESS... 2525 STA ELO2 ;OFFSET... 2526 LDA ELO+1 ;FOR THE BYTE... 2527 ADC EADDH,X ;TO BE... 2528 STA ELO2+1 ;CHANGED! 2529 LDY #0 ;NOW PUT... 2530 LDA EXPCHR ;EXPLOSION CHAR. 2531 STA (ELO2),Y ;ONTO DISPLAY 2532 INY 2533 STA (ELO2),Y 2534 JSR WAIT ;WAIT A LITTLE 2535 INC EXPPH ;NEXT PHASE 2536 LDA EXPPH ;GET PHASE 2537 CMP #26 ;ALL DONE? 2538 BNE EXPDLP ;NO, LOOP BACK! 2539 RTS ;BYE! 2540 ; 2541 ;TIME DELAY ROUTINE 2542 ; 2543 WAIT LDX #$03 ;THIS ROUTINE 2544 XLOOP LDY #$FF ;WASTES A LITTLE 2545 YLOOP DEY ;TIME SO THE 2546 BNE YLOOP ;EXPLOSIONS 2547 DEX ;CAN BE SEEN. 2548 BNE XLOOP 2549 RTS 2550 ; 2551 ; *************************** 2552 ; * PROXIMITY BOMB HANDLERS * 2553 ; * BY Tom Hudson * 2554 ; *************************** 2555 ; 2556 ARMBOM LDX BOMBCT ;GET # OF BOMBS 2557 ARMLP LDA ARMED,X ;GET ARMED FLAG 2558 CMP #$FF ;ARMED YET? 2559 BNE NXTBOM ;YES! 2560 LDA BOMBL,X ;GET BOMB... 2561 STA BLO ;ADDRESS... 2562 LDA BOMBH,X ;AND SAVE IT 2563 STA BLO+1 2564 LDY #0 ;GET CHAR... 2565 LDA (BLO),Y ;FROM DISPLAY 2566 CMP #15 ;IS IT BOMB? 2567 BEQ DONARM ;YUP, IT'S OK. 2568 CMP #12 ;IS IT BABY? 2569 BNE SETARM ;NO, ARM IT! 2570 LDA #$80 ;THIS CORRECTS A 2571 STA ARMED,X ;SMALL PROBLEM, 2572 BNE NXTBOM ;DISABLING BOMB 2573 SETARM LDA #15 ;RESTORE... 2574 STA (BLO),Y ;BOMB GRAPHIC... 2575 LDA #16 ;ON DISPLAY 2576 INY 2577 STA (BLO),Y 2578 BNE ARMIT ;SET ARM TIMER 2579 DONARM LDY #3 ;SCAN 4 DIRS. 2580 ARMSCAN LDA BLO ;ADD... 2581 CLC ;DIRECTION... 2582 ADC DIRADL,Y ;OFFSET... 2583 STA BLO2 ;TO BOMB... 2584 LDA BLO+1 ;ADDRESS 2585 ADC DIRADH,Y 2586 STA BLO2+1 2587 STY YTEMP ;SAVE Y REG. 2588 LDY #0 ;GET DESIRED... 2589 LDA (BLO2),Y ;DIRECTION BYTE 2590 CMP #18 ;SPARK? 2591 BEQ ARMIT ;YES, ARM IT! 2592 CMP #6 ;FIREBUG? 2593 BNE NOARM ;NO! 2594 ARMIT LDA #60 ;1 SECOND DELAY 2595 STA ARMED,X ;ARM IT! 2596 NXTBOM DEX ;NEXT BOMB 2597 BPL ARMLP ;LOOP IF MORE 2598 BMI DECBT ;NOW HANDLE TIME 2599 NOARM LDY YTEMP ;RESTORE Y REG 2600 DEY ;NEXT DIRECTION 2601 BMI NXTBOM ;NO MORE DIRS! 2602 JMP ARMSCAN ;LOOP IF MORE 2603 ; 2604 ;HANDLE BOMB TIMERS, DETONATE 2605 ; 2606 DECBT LDX BOMBCT ;GET # OF BOMBS 2607 DBLP LDA ARMED,X ;IS IT ARMED? 2608 BMI NOTARM ;NOT ARMED! 2609 LDA BOMBL,X ;LOAD POINTER... 2610 STA ELO ;WITH BOMB'S... 2611 LDA BOMBH,X ;ADDRESS 2612 STA ELO+1 2613 LDY #0 ;GET THE BYTE... 2614 LDA (ELO),Y ;FROM DISPLAY 2615 BNE BLOW1 ;IT'S OK. 2616 LDA #15 ;RESTORE IMAGE 2617 BNE BLOW2 2618 BLOW1 2619 LDA #$80 ;TOGGLE HI BIT 2620 EOR (ELO),Y ;TO FLASH BOMB 2621 BLOW2 2622 STA (ELO),Y ;RE-DRAW BOMB 2623 INY 2624 CLC 2625 ADC #1 2626 STA (ELO),Y 2627 LDA #$00 ;SET FUSE... 2628 STA AUDF4 ;FREQUENCY 2629 LDA #$88 ;TURN ON... 2630 STA AUDC4 ;FUSE SOUND! 2631 DEC ARMED,X ;DEC TIMER 2632 BNE NOTARM ;NO EXPLOSION YET 2633 LDA #$00 ;TURN OFF... 2634 STA AUDC4 ;FUSE SOUND 2635 LDA #$80 ;MARK THE BOMB... 2636 STA ARMED,X ;INACTIVE 2637 STX XTEMP ;SAVE X REG. 2638 STY YTEMP ;SAVE Y REG. 2639 JSR EXPLOD ;BOOM!!! 2640 LDX XTEMP ;RESTORE X 2641 LDY YTEMP ;RESTORE Y 2642 NOTARM DEX ;NEXT BOMB 2643 BPL DBLP ;LOOP IF MORE 2644 RTS ;BYE! 2645 ; 2646 ; ********************** 2647 ; * BABY FIREBUG MOVER * 2648 ; * BY Tom Hudson * 2649 ; ********************** 2650 ; 2651 BMOVE LDX EGGTOT ;GET BABY COUNT 2652 EGGLP STX EGGIX ;SAVE INDEX 2653 LDA EGGACT,X ;IS IT ACTIVE? 2654 BNE EACTIVE ;YES! 2655 JMP NXTEGG ;NO, NEXT BABY. 2656 EACTIVE LDA EGGL,X ;GET... 2657 STA HLO ;BABY ADDRESS... 2658 LDA EGGH,X ;AND SAVE IT 2659 STA HLO+1 2660 LDY #0 ;GET BABY'S... 2661 LDA (HLO),Y ;SCREEN BYTE 2662 CMP #12 ;IS IT OK? 2663 BEQ EGGOK ;YES! 2664 DEC EGGS ;NO, KILL ONE 2665 BMI ALLDEAD ;ALL DEAD! 2666 LDA #0 ;MARK BABY... 2667 STA EGGACT,X ;INACTIVE 2668 LDA #9 ;START EATING... 2669 STA EATNOISE ;SOUND 2670 JMP NXTEGG ;DO NEXT ONE 2671 ALLDEAD PLA ;CLEAR... 2672 PLA ;STACK, 2673 JMP GAMOVR ;GAME OVER!!! 2674 EGGOK LDA #3 ;TRY 4 DIRS. 2675 STA ETRY ;SAVE INDEX 2676 EGGDLP LDA RANDOM ;GET RANDOM... 2677 AND #3 ;DIRECTION 0-3 2678 TAY ;PUT IN Y REG. 2679 LDA EGGL,X ;GET... 2680 CLC ;BABY ADDRESS... 2681 ADC DIRADL,Y ;AND ADD... 2682 STA ADL ;DIRECTION... 2683 LDA EGGH,X ;OFFSET 2684 ADC DIRADH,Y 2685 STA ADL+1 2686 LDY #0 ;GET CHARACTER 2687 LDA (ADL),Y ;FROM SCREEN 2688 BEQ MOVEGG ;IT'S TUNNEL! 2689 CMP #14 ;BUG TUNNEL? 2690 BEQ MOVEGG ;YES! 2691 NEDIR DEC ETRY ;NEXT DIRECTION 2692 BPL EGGDLP ;LOOP IF MORE 2693 NXTEGG DEX ;NEXT BABY 2694 BPL EGGLP ;LOOP IF MORE 2695 RTS ;ALL DONE! 2696 MOVEGG LDA #14 ;ERASE BABY... 2697 STA (HLO),Y ;USING CHAR 14 2698 INY ;(BUG TRAIL) 2699 STA (HLO),Y 2700 DEY 2701 LDA #12 ;DRAW BABY... 2702 STA (ADL),Y ;IN NEW... 2703 INY ;LOCATION 2704 CLC 2705 ADC #1 2706 STA (ADL),Y 2707 LDA ADL ;UPDATE BABY'S 2708 STA EGGL,X ;ADDRESS 2709 LDA ADL+1 2710 STA EGGH,X 2711 JMP NXTEGG ;AND LOOP! 2712 ; 2713 ; ************************* 2714 ; * SCOREKEEPING ROUTINES * 2715 ; * BY Tom Hudson * 2716 ; ************************* 2717 ; 2718 ;ADD TO SCORE 2719 ; 2720 ADDSCO LDY #0 ;ZERO Y REG. 2721 SED ;DECIMAL MODE 2722 CLC ;CLEAR CARRY 2723 LDX #2 ;DO 3 DIGITS 2724 ASCLP LDA SCORE,X ;GET DIGIT 2725 ADC SCOADD,X ;ADD INCREMENT 2726 STA SCORE,X ;SAVE DIGIT 2727 STY SCOADD,X ;CLEAR INCREMENT 2728 DEX ;NEXT DIGIT 2729 BPL ASCLP ;LOOP IF MORE 2730 CLD ;NO MORE DECIMAL 2731 ; 2732 ;SHOW SCORE 2733 ; 2734 SHOSCO LDA #$10 ;COLOR 0 2735 STA SHCOLR ;SAVE IT 2736 LDX #0 ;DISPLAY INDEX 2737 LDY #0 ;DIGIT # 2738 SSCOLP LDA SCORE,Y ;GET DIGIT 2739 JSR SHOBCD ;SHOW ON SCREEN 2740 INX ;NEXT SCREEN POS 2741 INX ;(INC TWICE) 2742 INY ;NEXT DIGIT 2743 CPY #3 ;DONE ALL 3? 2744 BNE SSCOLP ;NO! 2745 RTS ;ALL DONE! 2746 ; 2747 ;SHOW 2 BCD DIGITS 2748 ; 2749 SHOBCD STA SHOBYT ;SAVE BCD BYTE 2750 AND #$0F ;GET LOW DIGIT 2751 ORA SHCOLR ;ADD COLOR 2752 STA SCOLIN+1,X ;SHOW IT! 2753 LDA SHOBYT ;GET BCD BYTE 2754 LSR A ;GET HI DIGIT 2755 LSR A 2756 LSR A 2757 LSR A 2758 ORA SHCOLR ;ADD COLOR 2759 STA SCOLIN,X ;SHOW IT! 2760 RTS ;ALL DONE! 2761 ; 2762 ;SHOW CURRENT LEVEL 2763 ; 2764 SHOLVL LDY #$50 ;COLOR 1 2765 STY SHCOLR ;SAVE COLOR 2766 LDA BCDLVL ;GET LEVEL # 2767 LDX #11 ;PUT IN 11TH BYTE 2768 JMP SHOBCD ;SHOW IT! 2769 ; 2770 ;SHOW # OF LIVES 2771 ; 2772 SHOLIV LDA LIVES ;GET # OF LIVES 2773 BMI ENDSHO ;<0!! 2774 ORA #$90 ;ADD COLOR 3 2775 STA SCOLIN+19 ;SHOW IT! 2776 ENDSHO 2777 RTS ;ALL DONE!