├── README.md ├── TABLES ├── LEVEL ├── NEMESIS ├── PLOT └── GAME /README.md: -------------------------------------------------------------------------------- 1 | # Nemesis-the-Warlock 2 | C64 Source Code to Nemesis the Warlock 3 | (c)Michael J Archer 4 | 5 | One of the first examples of sprite duplication to have tall sprites using same sprite number. Using the overlapping technique. 6 | A shout out to an old friend Simon Nickol, and also Stavros Fasoulas who I beleive was one of the first people to discover this thechnique, I'm not 100% sure from memory if this was correct. 7 | 8 | Development Started on 29th December 1986 9 | The Source code was cross compiled via a BBC Micro computer witha parallel data link between the BBC user port and C64 port. 10 | The C64 had a modified ROM which I hotlinked my communication code which copyied itself to zero page, to allow entire memory to download to. 11 | This long since gone, but I have the Cable still, and the download side on the BBC was written into a custom BBC SWR (Side Ways Rom) 12 | -------------------------------------------------------------------------------- /TABLES: -------------------------------------------------------------------------------- 1 | ; ********************* ; * ALL ALIENS TABLES * ; * FOR HIS ANIMATION * ; ********************* S1 EQU 53 S2 EQU 53+14 BL EQU BLSPR ; BLANK BN EQU BLNEM ; BLANK ;************************* ; ACTION 0 ; WARRIOR WALK ADDITION WWALKTAB DB 01,01,01,01,01,01 DB 01,01,01,01,01,01 ; WARRIOR WALK TOP WWALKSTT DB 00,00,02,02,04,04 DB 06,06,08,08,10,10 ; WARRIOR WALK BOTTOM WWALKSTB DB 01,01,03,03,05,05 DB 07,07,09,09,11,11 ;************************* WDIESTT1 DB 00+12,02+12,04+12,06+12 DB 09+12,12+12 DB BL+00,BL+00,BL+00,BL+00 WDIESTB1 DB 01+12,03+12,05+12,07+12 DB 10+12,13+12 DB 15+12,17+12,19+12,21+12 WDIESTS1 DB BL+00,BL+00,BL+00,08+12 DB 11+12,14+12 DB 16+12,18+12,20+12,22+12 DIEMOVTX1 DB 00,04,05,05,06,05 DB 02,02,02 ; -1 -2 -1 06 -2 DIEMOVTY1 DB -1,-3,-4,-5,06,-1 DB 00,00,00 WDIESTT2 DB 37,39,41,43,45,47,49 DB BL,BL WDIESTB2 DB 38,40,42,44,46,48,50 DB 51,52 DIEMOVTX2 DB 02,02,02,02,02,02,02 DB 02,02 DIEMOVTY2 DB -1,-3,-2,-1,-1,00,00 DB 00,00 ;************************* ; ACTION 6a ; GROUND TO ZOMBIE 1 ; FOR TWO SPRITES ONLY CHANGET1 DB BL+00,BL+00,BL+00,BL+00 DB BL+00,BL+00,BL+00,BL+00 DB BL+00,BL+00,35+S2,37+S2 DB 39+S2,41+S2,43+S2,45+S2 CHANGEB1 DB 25+S2,26+S2,27+S2,28+S2 DB 29+S2,30+S2,31+S2,32+S2 DB 33+S2,34+S2,36+S2,38+S2 DB 40+S2,42+S2,44+S2,46+S2 ; *********************** ; ACTION 6b ; GROUND TO ZOMBIE 2 ; FOR THREE SPRITES ONLY CHANGET2 DB BL+00,BL+00,BL+00,BL+00 DB BL+00,BL+00,59+S2,62+S2 DB BL+00,BL+00,BL+00,BL+00 DB BL+00,75+S2,78+S2,81+S2 DB 84+S2,87+S2,90+S2,93+S2 DB 96+S2,99+S2,102+S2,105+S2 DB 108+S2 CHANGEB2 DB 47+S2,49+S2,51+S2,53+S2 DB 55+S2,57+S2,60+S2,63+S2 DB 65+S2,67+S2,69+S2,71+S2 DB 73+S2,76+S2,79+S2,82+S2 DB 85+S2,88+S2,91+S2,94+S2 DB 97+S2,100+S2,103+S2,106+S2 DB 109+S2 CHANGES2 DB 48+S2,50+S2,52+S2,54+S2 DB 56+S2,58+S2,61+S2,64+S2 DB 66+S2,68+S2,70+S2,72+S2 DB 74+S2,77+S2,80+S2,83+S2 DB 86+S2,89+S2,92+S2,95+S2 DB 98+S2,101+S2,104+S2,107+S2 DB 110+S2 ;************************* ;************************* ; ZOMBIE WALK ADDITION ZWALKTAB DB 1,1,1,1,1,1,1 ; ACTION 7 ; ZOMBIE WALK TOP ZWALKSTT DB 00+S1,02+S1,04+S1,06+S1 DB 08+S1,10+S1,12+S1 ; BOTTOM ZWALKSTB DB 01+S1,03+S1,05+S1,07+S1 DB 09+S1,11+S1,13+S1 ;************************* ;************************* ; ACTION 8 ;************************* ; ACTION 9 ; ZOMBIE DIE TOP ZDIESTT DB 00+S2,02+S2,04+S2,06+S2 DB 08+S2,10+S2,12+S2,14+S2 DB 16+S2,18+S2,20+S2,BL+00 DB BL+00,BL+00,BL+00 ; BOTTOM ZDIESTB DB 01+S2,03+S2,05+S2,07+S2 DB 09+S2,11+S2,13+S2,15+S2 DB 17+S2,19+S2,21+S2,22+S2 DB 23+S2,24+S2,BL+00 ;************************* ; ********************** ; * ALL NEMESIS TABLES * ; * FOR HIS ANIMATION * ; ********************** ; HOW MUCH TO ADD TO FRAME ; X POS ON WALKING WALKTAB DB 01,01,01,02,03 DB 01,01,01,02,02 ; NEMESIS WALK TOP WALKSTT DB 00,02,04,06,08 DB 10,12,14,16,18 ; NEMESIS WALK BOTTOM WALKSTB DB 01,03,05,07,09 DB 11,13,15,17,19 ; DUCK TOP DUCKSTT DB 00+78,02+78,04+78 ; DUCK BOTTOM DUCKSTB DB 01+78,03+78,05+78 ; BANG TOP BANGSTT DB 00+20,02+20,04+20,07+20 DB 10+20,12+20,15+20,18+20 DB 21+20,12+20 ; BANG BOTTOM BANGSTB DB 01+20,03+20,06+20,09+20 DB 11+20,14+20,17+20,20+20 DB 23+20,14+20 ; BANG SIDE BANGSTS DB BN+00,BN+00,05+20,08+20 DB BN+00,13+20,16+20,19+20 DB 22+20,13+20 ; SWIPE TOP SWIPESTT DB 00+44,02+44,04+44,06+44 DB 09+44,12+44,14+44,16+44 DB 18+44,20+44,23+44,26+44 DB 28+44,31+44,16+44 ; SWIPE BOTTOM SWIPESTB DB 01+44,03+44,05+44,08+44 DB 11+44,13+44,15+44,17+44 DB 19+44,22+44,25+44,27+44 DB 30+44,33+44,17+44 ; SWIPE SIDE SWIPESTS DB BN+00,BN+00,BN+00,07+44 DB 10+44,BN+00,BN+00,BN+00 DB BN+00,21+44,24+44,BN+00 DB 29+44,32+44,BN+00 ; DIE TOP DIESTT DB 71,72,73,BN,BN,BN DB BN,BN ; DIE BOTTOM DIESTB DB 74,75,76,77,78,79,80,81 ; SPIT FRAMES SPITT DB 87,88,89,90,91,92,93 ; GENERAL TABLES PIXT DB %11000000,%00110000 DB %00001100,%00000011 IPIXT DB %00111111,%11001111 DB %11110011,%11111100 DROPTAB DB 1,1,2,2,2,2,3,3,3,3 DB 3,3,4,4,4,4,4,4,4,5,5 DB 5,5,5,5,5,5,5,5,5,5,5 ; OLD ONE DB 1,2,2,3,3,3,4,4,4,4 DB 5,5,5,5,5,6,6,6,6,6,6 DB 6,6,6,6,6,6,6,6,6,6,6 JUMPTAB DB 5,4,4,3,3,2,2,1 INFO "R.TABLES " -------------------------------------------------------------------------------- /LEVEL: -------------------------------------------------------------------------------- 1 | ; ROUTINES TO DO WITH ; THE LEVELS ; WHAT YOU ARE STANDING ON WHERE LDA Y+0 ; YOUR Y CORDINATE LOOKUP LSR A LSR A LSR A TAY LDA X+0 ; YOUR X CORDINATE SEC SBC #12 LSR A LSR A CLC ADC MAPTL-1,Y STA MIKE2 LDA MAPTH-1,Y ADC #0 STA MIKE2+1 LDY #1 LDA (MIKE2),Y RTS ; WHAT ALIENS ARE STANDING ON AWHERE LDA Y+0,X LOOKUP2 LSR A LSR A LSR A TAY LDA X+0,X SEC SBC #12 LSR A LSR A CLC ADC MAPTL-1,Y STA MIKE2 LDA MAPTH-1,Y ADC #0 STA MIKE2+1 LDY #1 LDA (MIKE2),Y RTS ; PLOT LEVEL AT X,Y LENGH A DISPL LDY LEVEL LDA LEVELTL,Y STA MIKE2 LDA LEVELTH,Y STA MIKE2+1 MOROFL LDY #0 LDA (MIKE2),Y ; X CMP #255 BEQ EXIT6 TAX STX TEMP INY LDA (MIKE2),Y ; Y STA SPARE INY LDA (MIKE2),Y ; LENGTH SEC SBC TEMP LDY SPARE JSR PLATFORM LDA MIKE2 CLC ADC #3 STA MIKE2 BCC MOROFL INC MIKE2+1 BNE MOROFL EXIT6 JMP PAMMO PLATFORM JSR PLEVEL LDA YTEMP CMP #15 BCC NOBOG RTS NOBOG LDA SPARE ; HALF OF LSR A ; LENGTH CLC ; + START X ADC XTEMP ; MINUS 1 TAX ; AS 3 CHARS DEX ; FOR STEM LDY YTEMP ; 1 CHAR INY ; BELOW JSR MEMXY LDY #2 COLSTUF LDA #0 ; COL3 0 STA (TEMP2),Y ; NYBBLE LDA #%10001001 ; COL1 8 STA (TEMP3),Y ; COL2 9 DEY BPL COLSTUF LDY #23 STEMS LDA YTEMP AND #1 BEQ RANDY LDA JOIN1,Y BNE ALLW RANDY LDA JOIN2,Y ALLW STA MERG5+1 STA DAT+1 MERG5 LDA SBACKD AND (TEMP),Y DAT ORA #255 STA (TEMP),Y ; ALL THREE DEY BPL STEMS LDA TEMP CLC ADC #8 STA TEMP BCC NOCC INC TEMP+1 NOCC LDX YTEMP ; ON PLAT INX ; PAST THE BIG BIT INX ; ONTO NEW PART DOWNLO LDA TEMP CLC ADC #< 320 STA TEMP LDA TEMP+1 ADC #> 320 STA TEMP+1 LDA TEMP2 CLC ADC #40 STA TEMP2 BCC COLB INC TEMP2+1 COLB LDA TEMP3 CLC ADC #40 STA TEMP3 BCC COLB2 INC TEMP3+1 COLB2 LDY #7 WIZARD TXA AND #1 BEQ JOAT LDA BOTSTEM,Y BNE JOAT2 JOAT LDA JOINSTEM,Y JOAT2 STA MERG6+1 STA DATV+1 MERG6 LDA SBACKD AND (TEMP),Y DATV ORA #255 STA (TEMP),Y DEY BPL WIZARD LDY #1 LDA #0 ; COL3 0 STA (TEMP2),Y ; NYBBLE LDA #%10001001 ; COL1 8 STA (TEMP3),Y ; COL2 9 INX ; REPEAT CPX #17 ; UNTIL BOTTOM BCC DOWNLO ; OF SCREEN RTS PLEVEL STX XTEMP STY YTEMP STA SPARE SEC SBC #1 STA MIKE STA MIKE+1 ; HANGING JSR MEMXY LDY SPARE ALLOF LDA #0 ; COL3 0 STA (TEMP2),Y ; NYBBLE LDA #%10001001 ; COL1 8 STA (TEMP3),Y ; COL2 9 LDA #255 ; LEVEL THERE STA (TEMP4),Y ; IN MAP DEY BPL ALLOF LDY #7 STL LDA SLEVEL,Y ; START STA MERGE1+1 MERGE1 LDA SBACKD AND (TEMP),Y ; TRY OUT ORA SLEVEL,Y STA (TEMP),Y ; SCREEN DEY BPL STL LDA TEMP CLC ADC #8 STA TEMP BCC STOREB INC TEMP+1 STOREB LDA TEMP CLC ADC #&40 STA TEMP2 LDA TEMP+1 ADC #1 STA TEMP2+1 LOOFT1 LDY #7 MNL1 LDA MLEVEL1,Y ; MIDDLE 1 STA (TEMP),Y ; SCREEN DEY BPL MNL1 LDA TEMP CLC ADC #8 STA TEMP BCC PT1 INC TEMP+1 PT1 DEC MIKE BEQ ENDOFPL LDY #7 MNL2 LDA MLEVEL2,Y ; MIDDLE 2 STA (TEMP),Y ; SCREEN DEY BPL MNL2 LDA TEMP CLC ADC #8 STA TEMP BCC PT2 INC TEMP+1 PT2 DEC MIKE BEQ ENDOFPL LDY #7 MNL3 LDA MLEVEL3,Y ; MIDDLE 3 STA (TEMP),Y ; SCREEN DEY BPL MNL3 LDA TEMP CLC ADC #8 STA TEMP BCC PT3 INC TEMP+1 PT3 DEC MIKE BNE LOOFT1 ENDOFPL LDY #7 ETL LDA ELEVEL,Y ; END STA MERGE2+1 MERGE2 LDA SBACKD AND (TEMP),Y ; TRY OUT ORA ELEVEL,Y STA (TEMP),Y ; SCREN DEY BPL ETL LDA YTEMP CMP #16 ; 17 BCS ENDOFHA GOAHEAD LDY #7 MNL4 LDA HANG1,Y ; HANGING 1 STA MERGE3+1 MERGE3 LDA SBACKD AND (TEMP2),Y ; TRY OUT ORA HANG1,Y ; TRY OUT STA (TEMP2),Y ; SCREEN DEY BPL MNL4 LDA TEMP2 CLC ADC #8 STA TEMP2 BCC PT4 INC TEMP2+1 PT4 DEC MIKE+1 BEQ ENDOFHA LDY #7 MNL5 LDA HANG2,Y ; HANGING 2 STA MERGE4+1 MERGE4 LDA SBACKD AND (TEMP2),Y ; TRY OUT ORA HANG2,Y STA (TEMP2),Y ; SCREEN DEY BPL MNL5 LDA TEMP2 CLC ADC #8 STA TEMP2 BCC PT5 INC TEMP2+1 PT5 DEC MIKE+1 BNE GOAHEAD ENDOFHA RTS ; WORK OUT MEM FOR X,Y ; FOR BIT MAP SCREEN ; AND COLOUR MEMORY MEMXY LDA #0 STA TEMP+1 TXA ASL A ROL TEMP+1 ASL A ROL TEMP+1 ASL A ROL TEMP+1 CLC ADC M320L,Y STA TEMP ; SCREEN LOW LDA TEMP+1 ADC M320H,Y STA TEMP+1 ; SCREEN HIGH TXA CLC ADC MAPTL,Y STA TEMP2 ; NYBBLE LOW STA TEMP3 ; COLOUR LOW STA TEMP4 ; MAP LOW LDA MAPTH,Y ADC #0 ; ???? STA TEMP4+1 ; MAP HIGH ADC #>(SCREEN-MAP) STA TEMP3+1 ; COLOUR HIGH ADC #>(NYBBLE-SCREEN) STA TEMP2+1 ; NYBBLE HIGH EXIT2 RTS PAMMO LDY #1 LDA (MIKE2),Y ; X CMP #255 BEQ EXIT2 TAX INY LDA (MIKE2),Y ; Y TAY JSR MEMXY LDY #7 AMPL LDA AMMO,Y STA MERGE5+1 MERGE5 LDA SBACKD AND (TEMP),Y ORA AMMO,Y STA (TEMP),Y DEY BPL AMPL INY LDA #%10111100 STA (TEMP3),Y ; COLOUR LDA #%00000000 STA (TEMP2),Y ; NYBBLR LDA #128 STA (TEMP4),Y ; MAP LDA MIKE2 CLC ADC #2 STA MIKE2 BCC PAMMO INC MIKE2+1 BNE PAMMO AMMO DB &00,&00,&3C,&E7 DB &E9,&E7,&E9,&F7 ; 0 SLEVEL DB &FF,&EE,&9E,&19 DB &25,&6,&A,&2 ; 1 MLEVEL1 DB &FF,&FF,&BB,&7B DB &B6,&6D,&DF,&FF ; 2 MLEVEL2 DB &FF,&FF,&AF,&9B DB &9B,&B9,&7D,&FF ; 3 MLEVEL3 DB &FF,&FF,&EF,&EB DB &DB,&6E,&7F,&CC ; 4 ELEVEL DB &FF,&BB,&B6,&B4 DB &98,&90,&A0,&80 ; 5 HANG1 DB &FF,&FF,&33,&30 DB &30,&0,&0,&0 ; 6 HANG2 DB &FF,&FF,&CF,&CF DB &3,&C0,&3,&0 ; 7 BOTSTEM DB &D7,&DC,&37,&DB DB &EC,&3B,&EB,&D9 ; 15 JOIN1 DB &FF,&FF,&3B,&EB DB &F9,&CE,&3,&3 ; 16 DB &FF,&F3,&F3,&DC DB &5C,&AF,&D7,&E7 ; 17 DB &FF,&FF,&F7,&BC DB &70,&BC,&CC,&C0 ; 18 JOINSTEM DB &EF,&DB,&DC,&37 DB &DB,&EC,&3B,&E7 ; 19 JOIN2 DB &FF,&3F,&3F,&D DB &3E,&39,&37,&F ; 20 DB &FF,&FF,&F3,&BF DB &7F,&BD,&5D,&9D ; 21 DB &FF,&FC,&FC,&CC DB &70,&70,&C0,&C0 ; MEM LOW AT (0 TO 17) M320L DB &00,&40,&80,&C0 DB &00,&40,&80,&C0 DB &00,&40,&80,&C0 DB &00,&40,&80,&C0 DB &00,&40,&80,&C0 DB &00,&40,&80,&C0 DB &00 M320H DB &60,&61,&62,&63 DB &65,&66,&67,&68 DB &6A,&6B,&6C,&6D DB &6F,&70,&71,&72 DB &74,&75,&76,&77 DB &79,&7A,&7B,&7C DB &7E MAPTL DB &00,&28,&50,&78 DB &A0,&C8,&F0,&18 DB &40,&68,&90,&B8 DB &E0,&08,&30,&58 DB &80,&A8,&D0,&F8 DB &20,&48,&70,&98 DB &C0 MAPTH DB >MAP,>MAP DB >MAP,>MAP DB >MAP,>MAP DB >MAP,(>MAP)+1 DB (>MAP)+1,(>MAP)+1 DB (>MAP)+1,(>MAP)+1 DB (>MAP)+1,(>MAP)+2 DB (>MAP)+2,(>MAP)+2 DB (>MAP)+2,(>MAP)+2 DB (>MAP)+2,(>MAP)+2 DB (>MAP)+3,(>MAP)+3 DB (>MAP)+3,(>MAP)+3 DB (>MAP)+3 LEVELTL DB < LEVEL1,< LEVEL2 DB < LEVEL3,< LEVEL4 DB < LEVEL5,< LEVEL6 DB < LEVEL7,< LEVEL8 DB < LEVEL9,< LEVEL10 DB < LEVEL11,< LEVEL12 DB < LEVEL13,< LEVEL14 DB < LEVEL15,< LEVEL16 DB < LEVEL17,< LEVEL18 DB < LEVEL19,< LEVEL20 DB < LEVEL21,< LEVEL22 LEVELTH DB > LEVEL1,> LEVEL2 DB > LEVEL3,> LEVEL4 DB > LEVEL5,> LEVEL6 DB > LEVEL7,> LEVEL8 DB > LEVEL9,> LEVEL10 DB > LEVEL11,> LEVEL12 DB > LEVEL13,> LEVEL14 DB > LEVEL15,> LEVEL16 DB > LEVEL17,> LEVEL18 DB > LEVEL19,> LEVEL20 DB > LEVEL21,> LEVEL22 ; Y=2 TO 17 ; X=0 TO 39 LEVEL1 DB 10,4,39,5,6,11 DB 10,8,32,31,10,36 DB 10,12,32,3,14,11,0,16,39 DB 255,27,15,31,15,35,15,255 LEVEL2 DB 0,4,6,7,5,11,12,6,17 DB 32,4,39,29,6,39,26,8,39 DB 23,10,39,20,12,39,17,14,39 DB 0,16,39,255,7,15,15,15 DB 18,13,21,11,24,9,255 LEVEL3 DB 8,4,16,17,5,26,27,6,34 DB 35,7,39,29,8,34,5,9,28 DB 0,11,8,9,12,23,0,14,14 DB 15,15,26,27,16,39,255 DB 22,14,8,8,36,6,255 LEVEL4 DB 12,5,26,8,7,29,34,8,39 DB 6,9,12,26,9,33,10,13,27 DB 0,15,6,7,16,22,255 DB 4,14,36,7,255 LEVEL5 DB 0,8,22,24,8,36,23,11,31 DB 18,14,26,11,16,28,255 DB 13,15,24,13,26,10,255 LEVEL6 DB 24,8,39,0,9,7,8,10,12 DB 13,11,23,6,12,12,0,13,5 DB 6,14,10,11,15,16,17,14,24 DB 22,13,28,29,12,39,255 DB 12,14,15,14,2,8,255 LEVEL7 DB 0,4,7,0,6,19,31,4,39 DB 21,6,39,8,14,15,0,16,7 DB 26,14,32,33,16,39,255 DB 37,15,2,15,255 LEVEL8 DB 15,4,22,0,9,13,31,10,38 DB 25,13,39,0,16,39,255 DB 31,12,33,12,35,12,37,12 DB 33,9,35,9,37,9,255 LEVEL9 DB 0,2,10,0,4,9,0,6,13,0,8,15 DB 1,10,12,11,12,16 DB 26,6,34,31,9,39,19,11,27 DB 0,16,39,255 DB 255 LEVEL10 DB 0,4,4,0,8,6,0,12,8 DB 0,16,13,30,4,39,32,7,39 DB 33,10,39,31,13,39 DB 26,16,39,255 DB 4,7,5,11,7,15,33,15 DB 33,12,255 LEVEL11 DB 0,4,7,0,8,8,0,12,9 DB 0,16,10,28,4,39,29,8,39 DB 30,12,39,31,16,39,255 DB 7,7,8,11,9,15,30,7,31,11 DB 32,15,255 LEVEL12 DB 0,16,7,16,16,26,27,7,31 DB 33,7,39,11,8,25,22,11,29 DB 26,13,33,27,14,34,28,15,35 DB 29,16,39,255 DB 18,7,12,7,255 LEVEL13 DB 34,3,39,27,4,33,19,5,26 DB 11,6,18,0,7,10,10,8,14 DB 15,9,34,35,10,39,31,11,34 DB 27,12,30,23,13,26,19,14,23 DB 15,15,18,0,16,14,255 DB 6,15,29,3,255 LEVEL14 DB 2,6,13,13,7,17,9,8,13 DB 9,10,13,5,11,9,1,12,5 DB 5,13,9,0,16,13,13,11,17 DB 17,12,21,21,13,25 DB 25,8,29,27,10,29 DB 25,12,29,31,6,39,255 DB 6,5,8,5,10,5,255 LEVEL15 DB 4,3,8,17,3,21,30,3,34 DB 35,3,39,12,4,16,25,4,29 DB 29,5,33,0,6,8,16,6,20 DB 21,6,25,34,6,38,8,7,12 DB 13,8,17,30,8,34,33,10,37 DB 4,11,8,15,11,19,25,11,32 DB 0,12,4,23,12,28,10,13,14 DB 15,13,19,29,3,33,33,14,37 DB 6,15,10,21,15,25,26,15,30 DB 2,16,6,17,16,21,33,16,37 DB 255,32,2,23,5,29,10,12,12 DB 8,14,34,13,255 LEVEL16 DB 0,6,33,35,6,39,0,8,4 DB 6,8,39,0,10,26,28,10,39 DB 0,12,11,13,12,39,0,14,20 DB 22,14,39,0,16,39,255,255 LEVEL17 DB 0,6,8,9,7,14,15,8,23 DB 2,9,7,11,11,16,17,13,21 DB 0,14,7,32,9,39,27,10,31 DB 31,11,35,27,12,31 DB 31,13,35,27,14,31,0,16,39 DB 255,12,6,19,7,255 LEVEL18 DB 0,7,16,20,7,24,25,7,29 DB 30,8,34,35,8,39,0,15,28 DB 29,16,39,255,1,14,3,14 DB 5,14,7,14,28,6,32,7,255 LEVEL19 DB 10,5,14,21,6,25,4,7,8 DB 34,7,39,0,9,5,26,9,30 DB 14,10,18,5,12,9,1,14,5 DB 17,14,21,6,15,10,32,16,36 DB 255,35,15,9,14,20,13,255 LEVEL20 DB 0,6,32,35,6,39 DB 0,16,39,255 DB 3,15,4,15,5,15,6,15,7,15 DB 8,15,9,15,10,15,11,15 DB 12,15,13,15,14,15,15,15 DB 255 LEVEL21 DB 15,6,19,5,8,10,25,8,29 DB 11,10,15,16,13,20,9,14,13 DB 0,16,5,20,16,24,35,16,39 DB 255,255 LEVEL22 DB 6,2,10,16,2,20,27,2,31 DB 9,3,12,25,3,28,11,4,14 DB 23,4,26,13,5,24,11,7,14 DB 16,7,20,23,7,26,13,8,24 DB 11,9,14,23,9,26,16,10,20 DB 16,12,20,16,14,20,16,15,21 DB 15,16,22,255,255 HOWMANY DB &15,&20,&20,&21,&13 DB &17,&20,&35,&20,&09 DB &10,&20,&30,&30,&25 DB &35,&25,&45,&20,&60 DB &10,&99 COLTAB DB 11,12,2,5,11,14,6,7,13 DB 14,9,12,10,11,2,14,8 DB 5,4,6,9,2 ; EXIT TYPE ; 0 LEFT 1 RIGHT 2 UP 3 DOWN EXITTAB DB 1,2,2,2,0,3,3,0 DB 2,2,2,1,2,1,3,1 DB 2,1,3,1,3,3 TOPYTAB DB 0,16,16,24,0,0,0,0 DB 16,16,16,0,0,0,0,0 DB 32,0,0,0,0,0 TORQDEL DB 22,21,20,19,18,17,16 DB 15,14,13,12,11,10,9 DB 8,7,6,5,3,2,1 ; UTILITIES FOR GAME CLEAR ; WIPE BITMAP COLOUR RAM ; AND NYBBLES ( NOT ALL OF ) ; ONLY 17 LINES STA COLL+1 LDY #63 LDA #%00000000 WIPESPR STA 253*64+BANK,Y STA 254*64+BANK,Y STA 255*64+BANK,Y DEY BPL WIPESPR LDX #< NYBBLE LDY #> NYBBLE JSR WIPCOL LDX #< SCREEN LDY #> SCREEN COLL LDA #%00010000 JSR WIPCOL LDA #0 LDX #< MAP ; SCREEN LDY #> MAP ; MAP ASWELL WIPCOL STA COLVAL+1 STX MIKE STY MIKE+1 LDX #17 ACRB LDY #39 COLVAL LDA #0 ACROSS STA (MIKE),Y DEY BPL ACROSS LDA MIKE CLC ADC #40 STA MIKE BCC NONC INC MIKE+1 NONC DEX BNE ACRB LDX #17 LDA #< BITMAP STA TEMP LDA #> BITMAP STA TEMP+1 LNWIP LDA TEMP STA MIKE LDA TEMP+1 STA MIKE+1 LDA #0 TAY LLW STA (MIKE),Y INY BNE LLW INC MIKE+1 LLW2 STA (MIKE),Y INY CPY #319-255 BNE LLW2 LDA TEMP CLC ADC #< 320 STA TEMP LDA TEMP+1 ADC #> 320 STA TEMP+1 DEX BNE LNWIP RTS ; SCAN JOYSTICK JOYSTICK LDA CIA1 ; PORT 1 A ;LDA CIA1+1 ; PORT 2 B AND #%00011111 EOR #%00011111 STA JOY LDA #0 LSR JOY ROL A STA UP LDA #0 LSR JOY ROL A STA DOWN LDA #0 LSR JOY ROL A STA LEFT LDA #0 LSR JOY ROL A STA RIGHT LDA #0 LSR JOY ROL A STA FIRE RTS ; CALL WITH A=NUMBER TO ADD ; ADD NUMBER TO YOUR SCORE SADD SED CLC ADC SCOREV+0 STA SCOREV+0 LDA SCOREV+1 ADC #0 STA SCOREV+1 LDA SCOREV+2 ADC #0 STA SCOREV+2 CLD RTS INFO "R.LEVEL " -------------------------------------------------------------------------------- /NEMESIS: -------------------------------------------------------------------------------- 1 | ORG &8000 ; NEMESIS SOURCE ; STARTED 29/12/1986 ; COPYRIGHT 1986/87 ; MICHAEL ARCHER SYNC EQU &02 LEFT EQU SYNC+1 RIGHT EQU LEFT+1 UP EQU RIGHT+1 DOWN EQU UP+1 FIRE EQU DOWN+1 JOY EQU FIRE+1 ; 1 TEMP EQU JOY+1 ; 2 TEMP2 EQU TEMP+2 ; 2 TEMP3 EQU TEMP2+2 ; 2 TEMP4 EQU TEMP3+2 MIKE EQU TEMP4+2 ; 2 MIKE2 EQU MIKE+2 ; 2 SPARE EQU MIKE2+2 ; 1 XTEMP EQU SPARE+1 ; 1 YTEMP EQU XTEMP+1 ; 1 ATEMP EQU YTEMP+1 ; ALIEN BYTE'S NEWX EQU ATEMP+3 ; START OF NEWY EQU NEWX+1 ; NEW SCREEN X EQU NEWY+1 ; ALL X'S SIDEX EQU X+5 ; GUN,SWORD Y EQU SIDEX+5 ; AND Y POS. SIDEY EQU Y+5 ; ALONG SIDES FRAME EQU SIDEY+5 ; WALKING DIRECTION EQU FRAME+5 ; FACEING ACTION EQU DIRECTION+5; DOING WHAT COUNT EQU ACTION+5 ; FRAME NUMBER TOGGLE EQU COUNT+6 ; EVERY OTHER MOVES EQU TOGGLE+4 ; ZOMBIE COUNT SPRITEV0 EQU MOVES+4 ; ALL SPRITE SPRITEV1 EQU SPRITEV0+5 ; POINTERS SIDEB EQU SPRITEV1+5 ; GUN,SWORD BULLETX EQU SIDEB+3 ; BULLET BULLETX2 EQU BULLETX+6 ; FOR DETECT. BULLETY EQU BULLETX2+6 ; CORDS BULLETML EQU BULLETY+6 ; MEMORY LOW BULLETMH EQU BULLETML+6 ; AND HIGH WBULLET EQU BULLETMH+6 ; WHOES DBULLET EQU WBULLET+6 ; DIRECTION BEHIND1 EQU DBULLET+6 ; BEHIND THE BEHIND2 EQU BEHIND1+6 ; BULLET BULLETS EQU BEHIND2+6 ; HOW MANY BREATH EQU BULLETS+1 ; FLAMES ? BREATHD EQU BREATH+1 ; DIRECTION BREATHF EQU BREATHD+1 ; FRAME LEVEL EQU BREATHF+1 ; GESS WHAT! EXIT EQU LEVEL+1 ; WHERE TOPY EQU EXIT+1 ; LESS Y CORD SCOREV EQU TOPY+1 ; 3 BYTES ENERGY EQU SCOREV+3 ; HOW MUCH HITS EQU ENERGY+1 ; HIT ENEMYS TOKILL EQU HITS+4 ; TO KILL IRQTEMP EQU TOKILL+1 ; NEVER EVER NMIHOLD EQU IRQTEMP+1 ; USE OK. YTABLE EQU NMIHOLD+3 SEEDP EQU YTABLE+10 ; POINTER SEEDC EQU SEEDP+1 ; COUNTER FACE EQU SEEDC+1 SEED EQU FACE+1 ; 10 BYTES ; 1 FOR EACH WARRIOR/ZOMBIE ; 2 FOR BRING ON NEMESIS ; 4 BYTES FOR BRING ON ; NMIHOLD+0 A ; NMIHOLD+1 X ; NMIHOLD+2 Y VIC EQU &D000 RASTER EQU VIC+18 BORDER EQU VIC+32 COLOUR0 EQU VIC+33 CIA1 EQU &DC00 CIA2 EQU &DD00 FG0 EQU &ED40 ; SID 0 FG1 EQU &ED41 ; SID 1 FG2 EQU &ED42 ; SID 2 FLUSH EQU &ED43 EFFECTS EQU &ED46 TUNEON EQU &E009 TUNEOFF EQU &E00C REFRESH EQU &E00F ; EQU &0200 TO &04FF FREE MAP EQU &0500 ; MAP DATA SCROLL EQU &0900 ; FOR TEXT TORQSTORE EQU &0E00 ; TORQUMADOR SBACKD EQU &1000 ; MERGE DATA VALUES EQU &1100 ; 0 TO 255 REVERSE EQU &1200 ; REVERSE TABLE SPSTART EQU &1300 ; SOFT SPRITES NEMSTART EQU &B800 ; ALL NEMESIS BANK EQU &4000 ; BANK 2 16K SCREEN EQU &5C00 ; COLOR 1000B BITMAP EQU &6000 ; 8K NYBBLE EQU &D800 ; 1K SPRITE0 EQU SCREEN+1016 ; POINTERS SPRITE1 EQU SPRITE0+1 SPRITE2 EQU SPRITE1+1 SPRITE3 EQU SPRITE2+1 SPRITE4 EQU SPRITE3+1 SPRITE5 EQU SPRITE4+1 SPRITE6 EQU SPRITE5+1 SPRITE7 EQU SPRITE6+1 ; SPRITES &1100 TO &4000 ; EVERYTHING BUT NEMESIS ; SPRITES &BB00 + ; ALL NEMESIS ; HEART AT &4000 ON ; NORMAL SPRITE POINTERS USED RUN MAIN ;DW NMI ;DW NMI ;DB &C3,&C2,&CD,&38,&30 FIRST STA NMIHOLD LDA VIC+25 AND #1 BEQ NORA STA VIC+25 STA VIC+26 SCRON LDA #%00101011 ; 11 STA VIC+17 LDA RASTER CMP #185 ; 6 BEQ MULTI LDA #%00001000 STA VIC+22 STX NMIHOLD+1 STY NMIHOLD+2 JSR REFRESH LDY NMIHOLD+2 LDX NMIHOLD+1 LDA #185 ; 6 STA RASTER LDA NMIHOLD RTI MULTI CMP &D012 BEQ MULTI LDA #%00011000 STA VIC+22 LDA #108 ; 7 STA RASTER NORA LDA NMIHOLD RTI IRQ STA NMIHOLD LDA VIC+25 AND #1 BEQ NORA STA VIC+25 STA VIC+26 LDA RASTER BEQ SCON SCOF LDA #%00100011 ; +- 16 STA VIC+17 SPRIT LDA #%00000000 STA VIC+21 LDA #160-24 ; SCORE STA VIC+8 ; SPR 4 LDA #160+24 STA VIC+14 ; SPR 7 LDA #252 STA VIC+9 ; SPR 4 STA VIC+15 ; SPR 7 LDA #253 STA SPRITE4 LDA #254 STA SPRITE7 LDA #12 STA VIC+43 STA VIC+46 ; COLOUR SPR7 LDA #%10010000; EXPAND Y STA VIC+23 STA VIC+29 ; EXPAND X LDA #0 STA RASTER LDA NMIHOLD RTI SCON LDA #%00101011 ; +- 16 STA VIC+17 COLMODET LDA #%00011000 STA VIC+22 ; MULTI/HIRES COLBG LDA #11 STA COLOUR0 LDA #14 STA VIC+39 ; COLOUR SPR0 LDA #%00000000; NO EXPAND Y STA VIC+23 STA VIC+29 ; NO EXPAND X STA VIC+38 ; SMC1 LDA #%11111111 STA VIC+28 ; MULTICOL SPR LDA #6 STA VIC+37 ; SMC0 LDA #12 STA VIC+40 ; COLOUR SPR1 STA VIC+41 STA VIC+42 STA VIC+43 STA VIC+45 SIDEC LDA #255 ; SIDEC STA VIC+44 LDA #0 STA IRQTEMP LDA X+0 ; NEMESIS ASL A ROR IRQTEMP STA VIC+0 LDA X+1 ; ENEMY 0 ASL A ROR IRQTEMP STA VIC+2 LDA X+2 ; ENEMY 1 ASL A ROR IRQTEMP STA VIC+4 LDA X+3 ; ENEMY 2 ASL A ROR IRQTEMP STA VIC+6 LDA X+4 ; ENEMY 3 ASL A ROR IRQTEMP STA VIC+8 LDA SIDEX+0 ; NEMESIS ASL A ; GUN ETC. ROR IRQTEMP STA VIC+10 LDA SIDEX+1 ; ENEMY 0 ASL A ; GUN ETC. ROR IRQTEMP STA VIC+12 LDA SIDEX+2 ; ENEMY 1 ASL A ; GUN ETC. ROR IRQTEMP STA VIC+14 LDA IRQTEMP STA VIC+16 YCOR0 LDA #255 ; NEMESIS STA VIC+1 STA VIC+11 ; HIS GUN YCOR1 LDA #255 ; ENEMY 0 STA VIC+3 CLC ; 0 OR 21 ADC SIDEY+1 ; GUN,ETC STA VIC+13 YCOR2 LDA #255 ; ENEMY 1 STA VIC+5 CLC ; ??? ADC SIDEY+2 ; GUN,ETC STA VIC+15 YCOR3 LDA #255 ; ENEMY 2 STA VIC+7 YCOR4 LDA #255 ; ENEMY 3 STA VIC+9 LDA #099 ; NEMESIS STA SPRITE0 ; ALLSO 104 LDA #100 ; ENEMY 0 STA SPRITE1 ; ALLSO 105 LDA #101 ; ENEMY 1 STA SPRITE2 ; ALLSO 106 LDA #102 ; ENEMY 2 STA SPRITE3 ; ALLSO 107 LDA #103 ; ENEMY 3 STA SPRITE4 ; ALLSO 108 LDA #109 ; NEMESIS STA SPRITE5 ; GUN,SWORD LDA #110 ; ENEMY GUN, STA SPRITE6 ; SWORD 0 LDA #111 ; ENEMY GUN, STA SPRITE7 ; SWORD 1 LDA #< SPRIRQ1 STA &FFFE LDA #> SPRIRQ1 STA &FFFF RAST1 LDA #70 ; CHANGES STA RASTER LDA NMIHOLD NMI RESET RTI SPRIRQ1 STA NMIHOLD LDA #1 STA VIC+25 POV1 LDA #255 POI1 STA SPRITE0 CORD1 LDA #255 SPR1 STA VIC+1 BRA1 JMP POV2 LDA #< SPRIRQ2 STA &FFFE LDA #> SPRIRQ2 STA &FFFF RAST2 LDA #80 STA RASTER LDA NMIHOLD RTI SPRIRQ2 STA NMIHOLD LDA #1 STA VIC+25 POV2 LDA #255 POI2 STA SPRITE0 CORD2 LDA #255 SPR2 STA VIC+1 BRA2 JMP POV3 LDA #< SPRIRQ3 STA &FFFE LDA #> SPRIRQ3 STA &FFFF RAST3 LDA #90 STA RASTER LDA NMIHOLD RTI SPRIRQ3 STA NMIHOLD LDA #1 STA VIC+25 POV3 LDA #255 POI3 STA SPRITE0 CORD3 LDA #255 SPR3 STA VIC+1 BRA3 JMP POV4 LDA #< SPRIRQ4 STA &FFFE LDA #> SPRIRQ4 STA &FFFF RAST4 LDA #100 STA RASTER LDA NMIHOLD RTI SPRIRQ4 STA NMIHOLD LDA #1 STA VIC+25 POV4 LDA #255 POI4 STA SPRITE0 CORD4 LDA #255 SPR4 STA VIC+1 BRA4 JMP POV5 LDA #< SPRIRQ5 STA &FFFE LDA #> SPRIRQ5 STA &FFFF RAST5 LDA #110 STA RASTER LDA NMIHOLD RTI SPRIRQ5 STA NMIHOLD LDA #1 STA VIC+25 POV5 LDA #255 POI5 STA SPRITE0 CORD5 LDA #255 SPR5 STA VIC+1 BRA5 JMP POV6 LDA #< SPRIRQ6 STA &FFFE LDA #> SPRIRQ6 STA &FFFF RAST6 LDA #192 STA RASTER LDA NMIHOLD RTI SPRIRQ6 STA NMIHOLD LDA #1 STA VIC+25 POV6 LDA #255 POI6 STA SPRITE0 ; +2 CORD6 LDA #255 SPR6 STA VIC+1 BRA6 JMP POV7 LDA #< SPRIRQ7 STA &FFFE LDA #> SPRIRQ7 STA &FFFF RAST7 LDA #80 STA RASTER LDA NMIHOLD RTI SPRIRQ7 STA NMIHOLD LDA #1 STA VIC+25 POV7 LDA #255 POI7 STA SPRITE0 CORD7 LDA #255 SPR7 STA VIC+1 BRA7 JMP POV8 LDA #< SPRIRQ8 STA &FFFE LDA #> SPRIRQ8 STA &FFFF RAST8 LDA #90 STA RASTER LDA NMIHOLD RTI SPRIRQ8 STA NMIHOLD LDA #1 STA VIC+25 POV8 LDA #255 POI8 STA SPRITE0 CORD8 LDA #255 SPR8 STA VIC+1 BRA8 JMP POV9 LDA #< SPRIRQ9 STA &FFFE LDA #> SPRIRQ9 STA &FFFF RAST9 LDA #100 STA RASTER LDA NMIHOLD RTI SPRIRQ9 STA NMIHOLD LDA #1 STA VIC+25 POV9 LDA #255 POI9 STA SPRITE0 CORD9 LDA #255 SPR9 STA VIC+1 BRA9 JMP POVA LDA #< SPRIRQA STA &FFFE LDA #> SPRIRQA STA &FFFF RASTA LDA #110 STA RASTER LDA NMIHOLD RTI SPRIRQA STA NMIHOLD LDA #1 STA VIC+25 POVA LDA #255 POIA STA SPRITE0 LDA #< SORT1 STA &FFFE LDA #> SORT1 STA &FFFF DEC SYNC LDA #183 ; HUMMM 9 STA RASTER LDA NMIHOLD RTI SORT1 STA NMIHOLD LDA RASTER SMOOTH CMP RASTER BEQ SMOOTH LDA #0 STA COLOUR0 LDA #%00011000 STA VIC+22 STX NMIHOLD+1 STY NMIHOLD+2 LDA #44 ; HEART STA VIC+0 ; SPR 0 STA VIC+4 ; SPR 2 LDA #44+24 STA VIC+2 ; SPR 1 STA VIC+6 ; SPR 3 LDA #196 STA VIC+1 ; SPR 0 STA VIC+3 ; SPR 2 LDA #193+24 STA VIC+5 ; SPR 1 STA VIC+7 ; SPR 3 LDA ENERGY AND #%11110000 LSR A LSR A TAX STX SPRITE0 INX STX SPRITE1 INX STX SPRITE2 INX STX SPRITE3 LDX #96 STX SPRITE4 INX STX SPRITE5 INX STX SPRITE6 LDA #130 ; SPR 4 STA VIC+8 LDA #214 ; SPR 4 STA VIC+9 LDA #242 ; SPR 5 STA VIC+10 LDA #250-9 ; SPR 5 STA VIC+11 LDA #60 STA VIC+12 ; SPR 6 LDA #250-9 STA VIC+13 ; SPR 6 LDA #%00001111 STA VIC+28 ; MULTICOL SPR LDA #0 STA VIC+16 ; NO MSB LDA #8 STA VIC+39 ; COLOUR SPR0 STA VIC+40 ; COLOUR SPR1 STA VIC+41 ; COLOUR SPR2 STA VIC+42 ; COLOUR SPR3 LDA #0 STA VIC+43 ; COLOUR SPR4 STA VIC+44 ; COLOUR SPR5 STA VIC+45 ; COLOUR SPR6 LDA #2 STA VIC+37 ; SMC0 LDA #9 STA VIC+38 ; CMC1 TURNOF2 LDA #%00000000 ; TURN ON STA VIC+21 ; ALL SPRITES STA VIC+25 JSR EFFECTS ; MEGA MEGA MEGA ROUTINE LDA Y+0 CMP #137 BCC TRE1 LDA #137 TRE1 CLC ADC #6 STA YCOR0+1 ADC #19 STA YTABLE+0 ADC #19 ; 18 STA YTABLE+5 ; TURN OFF LDA Y+1 CMP #137 BCC TRE2 LDA #137 TRE2 CLC ADC #6 STA YCOR1+1 ADC #19 STA YTABLE+1 ADC #19 ; 18 STA YTABLE+6 ; TURN OFF LDA Y+2 CMP #137 BCC TRE3 LDA #137 TRE3 CLC ADC #6 STA YCOR2+1 ADC #19 STA YTABLE+2 ADC #19 ; 18 STA YTABLE+7 ; TURN OFF LDA Y+3 CMP #137 BCC TRE4 LDA #137 TRE4 CLC ADC #6 STA YCOR3+1 ADC #19 STA YTABLE+3 ADC #19 STA YTABLE+8 ; TURN OFF LDA Y+4 CMP #137 BCC TRE5 LDA #137 TRE5 CLC ADC #6 STA YCOR4+1 ADC #19 STA YTABLE+4 ADC #19 STA YTABLE+9 ; TURN OFF LDA YTABLE+0 JSR SORT STA RAST1+1 ; VALUE CLC ADC #2 STA CORD1+1 ; NEW CORD LDA CORDNT,X STA SPR1+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV1+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI1+1 ; VALUE LDA YTABLE+1 JSR SORT LDY #&2C STA RAST2+1 ; VALUE CLC ADC #2 STA CORD2+1 LDA RAST1+1 CLC ADC #2 CMP RAST2+1 BCC NSAME1 LDY #&4C NSAME1 STY BRA1 LDA CORDNT,X STA SPR2+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV2+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI2+1 ; VALUE LDA YTABLE+2 JSR SORT LDY #&2C STA RAST3+1 ; VALUE CLC ADC #2 STA CORD3+1 LDA RAST2+1 CLC ADC #2 CMP RAST3+1 BCC NSAME2 LDY #&4C NSAME2 STY BRA2 LDA CORDNT,X STA SPR3+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV3+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI3+1 ; VALUE LDA YTABLE+3 JSR SORT LDY #&2C STA RAST4+1 ; VALUE CLC ADC #2 STA CORD4+1 LDA RAST3+1 CLC ADC #2 CMP RAST4+1 BCC NSAME3 LDY #&4C NSAME3 STY BRA3 LDA CORDNT,X STA SPR4+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV4+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI4+1 ; VALUE LDA YTABLE+4 JSR SORT LDY #&2C STA RAST5+1 ; VALUE CLC ADC #2 STA CORD5+1 LDA RAST4+1 CLC ADC #2 CMP RAST5+1 BCC NSAME4 LDY #&4C NSAME4 STY BRA4 LDA CORDNT,X STA SPR5+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV5+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI5+1 ; VALUE LDA YTABLE+5 JSR SORT LDY #&2C STA RAST6+1 ; VALUE CLC ADC #2 STA CORD6+1 LDA RAST5+1 CLC ADC #2 CMP RAST6+1 BCC NSAME5 LDY #&4C NSAME5 STY BRA5 LDA CORDNT,X STA SPR6+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV6+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI6+1 ; VALUE LDA YTABLE+6 JSR SORT LDY #&2C STA RAST7+1 ; VALUE CLC ADC #2 STA CORD7+1 LDA RAST6+1 CLC ADC #2 CMP RAST7+1 BCC NSAME6 LDY #&4C NSAME6 STY BRA6 LDA CORDNT,X STA SPR7+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV7+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI7+1 ; VALUE LDA YTABLE+7 JSR SORT LDY #&2C STA RAST8+1 ; VALUE CLC ADC #2 STA CORD8+1 LDA RAST7+1 CLC ADC #2 CMP RAST8+1 BCC NSAME7 LDY #&4C NSAME7 STY BRA7 LDA CORDNT,X STA SPR8+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV8+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI8+1 ; VALUE LDA YTABLE+8 JSR SORT LDY #&2C STA RAST9+1 ; VALUE CLC ADC #2 STA CORD9+1 LDA RAST8+1 CLC ADC #2 CMP RAST9+1 BCC NSAME8 LDY #&4C NSAME8 STY BRA8 LDA CORDNT,X STA SPR9+1 ; NUMBER LDA BOTV,X ; BOTTOM STA POV9+1 ; SPRITE LDA WHSPR,X ; POINTER STA POI9+1 ; VALUE LDA YTABLE+9 JSR SORT LDY #&2C STA RASTA+1 ; VALUE LDA RAST9+1 CLC ADC #2 CMP RASTA+1 BCC NSAME9 LDY #&4C NSAME9 STY BRA9 LDA WHSPR,X STA POIA+1 LDX NMIHOLD+1 LDY NMIHOLD+2 LDA #< IRQ STA &FFFE LDA #> IRQ STA &FFFF LDA #249 ; 250 STA RASTER LDA NMIHOLD RTI SORT CMP YTABLE+9 BCC LES1 LDX #9 LDA YTABLE+9 LES1 CMP YTABLE+8 BCC LES2 LDX #8 LDA YTABLE+8 LES2 CMP YTABLE+7 BCC LES3 LDX #7 LDA YTABLE+7 LES3 CMP YTABLE+6 BCC LES4 LDX #6 LDA YTABLE+6 LES4 CMP YTABLE+5 BCC LES5 LDX #5 LDA YTABLE+5 LES5 CMP YTABLE+4 BCC LES6 LDX #4 LDA YTABLE+4 LES6 CMP YTABLE+3 BCC LES7 LDX #3 LDA YTABLE+3 LES7 CMP YTABLE+2 BCC LES8 LDX #2 LDA YTABLE+2 LES8 CMP YTABLE+1 BCC LES9 LDX #1 LDA YTABLE+1 LES9 CMP YTABLE+0 BCC LESA LDX #0 LDA YTABLE+0 LESA LDY #255 STY YTABLE+0,X RTS WHSPR DB < SPRITE0 DB < SPRITE1 DB < SPRITE2 DB < SPRITE3 DB < SPRITE4 DB < SPRITE0 DB < SPRITE1 DB < SPRITE2 DB < SPRITE3 DB < SPRITE4 CORDNT DB 1,3,5,7,9 DB 47,47,47,47,47 ; NOT USED IN VIC CHIP INFO "R.NEMESIS " -------------------------------------------------------------------------------- /PLOT: -------------------------------------------------------------------------------- 1 | ; MAIN SPRITE BLOCK COPY ; ROUTINE SPRITETL DB <((099*64)+BANK) ; NEMTOP DB <((100*64)+BANK) ; 0 DB <((101*64)+BANK) ; 1 DB <((102*64)+BANK) ; 2 DB <((103*64)+BANK) ; 3 DB <((104*64)+BANK) ; NEMBOT DB <((105*64)+BANK) ; 0 DB <((106*64)+BANK) ; 1 DB <((107*64)+BANK) ; 2 DB <((108*64)+BANK) ; 3 DB <((109*64)+BANK) ; S1 DB <((110*64)+BANK) ; S2 DB <((111*64)+BANK) ; S3 SPRITETH DB >((099*64)+BANK) ; NEMTOP DB >((100*64)+BANK) ; 0 DB >((101*64)+BANK) ; 1 DB >((102*64)+BANK) ; 2 DB >((103*64)+BANK) ; 3 DB >((104*64)+BANK) ; NEMBOT DB >((105*64)+BANK) ; 0 DB >((106*64)+BANK) ; 1 DB >((107*64)+BANK) ; 2 DB >((108*64)+BANK) ; 3 DB >((109*64)+BANK) ; S1 DB >((110*64)+BANK) ; S2 DB >((111*64)+BANK) ; S3 BOTV DB 104,105,106,107,108 DB 255,255,255,255,255 WHATRR DB 0,1,2,3,4,0,1,2,3,4 DB 0,1,2 ; PLOT NEMESIS SPRITES PLOTNEM STA SPARE LDA #> NEMSTART ; NEMESIS BNE STRE ; PLOT ALL OTHER SPRITES PLOTSPR STA SPARE ; ALL ALIENS LDA #> SPSTART ; AND THINGS STRE STA SHANGEB+1 LDA SPRITETL,X STA TEMP2 LDA SPRITETH,X STA TEMP2+1 LDA SPARE LSR A LSR A CLC SHANGEB ADC #> SPSTART ; START OF STA TEMP+1 ; SPRITES LDA #0 ROR SPARE ROR A ROR SPARE ROR A STA TEMP LDY WHATRR,X LDA DIRECTION,Y BMI RVSED JMP NORWAY RVSED LDY #60 LDA (TEMP),Y TAX LDA REVERSE,X LDY #62 STA (TEMP2),Y ; 62 LDA (TEMP),Y TAX LDA REVERSE,X LDY #60 STA (TEMP2),Y ; 60 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 61 LDY #57 LDA (TEMP),Y TAX LDA REVERSE,X LDY #59 STA (TEMP2),Y ; 59 LDA (TEMP),Y TAX LDA REVERSE,X LDY #57 STA (TEMP2),Y ; 57 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 58 LDY #54 LDA (TEMP),Y TAX LDA REVERSE,X LDY #56 STA (TEMP2),Y ; 56 LDA (TEMP),Y TAX LDA REVERSE,X LDY #54 STA (TEMP2),Y ; 54 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 55 LDY #51 LDA (TEMP),Y TAX LDA REVERSE,X LDY #53 STA (TEMP2),Y ; 53 LDA (TEMP),Y TAX LDA REVERSE,X LDY #51 STA (TEMP2),Y ; 51 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 52 LDY #48 LDA (TEMP),Y TAX LDA REVERSE,X LDY #50 STA (TEMP2),Y ; 50 LDA (TEMP),Y TAX LDA REVERSE,X LDY #48 STA (TEMP2),Y ; 48 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 49 LDY #45 LDA (TEMP),Y TAX LDA REVERSE,X LDY #47 STA (TEMP2),Y ; 47 LDA (TEMP),Y TAX LDA REVERSE,X LDY #45 STA (TEMP2),Y ; 45 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 46 LDY #42 LDA (TEMP),Y TAX LDA REVERSE,X LDY #44 STA (TEMP2),Y ; 44 LDA (TEMP),Y TAX LDA REVERSE,X LDY #42 STA (TEMP2),Y ; 42 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 43 LDY #39 LDA (TEMP),Y TAX LDA REVERSE,X LDY #41 STA (TEMP2),Y ; 41 LDA (TEMP),Y TAX LDA REVERSE,X LDY #39 STA (TEMP2),Y ; 39 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 40 LDY #36 LDA (TEMP),Y TAX LDA REVERSE,X LDY #38 STA (TEMP2),Y ; 38 LDA (TEMP),Y TAX LDA REVERSE,X LDY #36 STA (TEMP2),Y ; 36 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 37 LDY #33 LDA (TEMP),Y TAX LDA REVERSE,X LDY #35 STA (TEMP2),Y ; 35 LDA (TEMP),Y TAX LDA REVERSE,X LDY #33 STA (TEMP2),Y ; 33 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 34 LDY #30 LDA (TEMP),Y TAX LDA REVERSE,X LDY #32 STA (TEMP2),Y ; 32 LDA (TEMP),Y TAX LDA REVERSE,X LDY #30 STA (TEMP2),Y ; 30 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 31 LDY #27 LDA (TEMP),Y TAX LDA REVERSE,X LDY #29 STA (TEMP2),Y ; 29 LDA (TEMP),Y TAX LDA REVERSE,X LDY #27 STA (TEMP2),Y ; 27 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 28 LDY #24 LDA (TEMP),Y TAX LDA REVERSE,X LDY #26 STA (TEMP2),Y ; 26 LDA (TEMP),Y TAX LDA REVERSE,X LDY #24 STA (TEMP2),Y ; 24 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 25 LDY #21 LDA (TEMP),Y TAX LDA REVERSE,X LDY #23 STA (TEMP2),Y ; 23 LDA (TEMP),Y TAX LDA REVERSE,X LDY #21 STA (TEMP2),Y ; 21 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 22 LDY #18 LDA (TEMP),Y TAX LDA REVERSE,X LDY #20 STA (TEMP2),Y ; 20 LDA (TEMP),Y TAX LDA REVERSE,X LDY #18 STA (TEMP2),Y ; 18 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 19 LDY #15 LDA (TEMP),Y TAX LDA REVERSE,X LDY #17 STA (TEMP2),Y ; 17 LDA (TEMP),Y TAX LDA REVERSE,X LDY #15 STA (TEMP2),Y ; 15 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 16 LDY #12 LDA (TEMP),Y TAX LDA REVERSE,X LDY #14 STA (TEMP2),Y ; 14 LDA (TEMP),Y TAX LDA REVERSE,X LDY #12 STA (TEMP2),Y ; 12 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 13 LDY #9 LDA (TEMP),Y TAX LDA REVERSE,X LDY #11 STA (TEMP2),Y ; 11 LDA (TEMP),Y TAX LDA REVERSE,X LDY #9 STA (TEMP2),Y ; 9 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 10 LDY #6 LDA (TEMP),Y TAX LDA REVERSE,X LDY #8 STA (TEMP2),Y ; 8 LDA (TEMP),Y TAX LDA REVERSE,X LDY #6 STA (TEMP2),Y ; 6 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 7 LDY #3 LDA (TEMP),Y TAX LDA REVERSE,X LDY #5 STA (TEMP2),Y ; 5 LDA (TEMP),Y TAX LDA REVERSE,X LDY #3 STA (TEMP2),Y ; 3 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 4 LDY #0 LDA (TEMP),Y TAX LDA REVERSE,X LDY #2 STA (TEMP2),Y ; 2 LDA (TEMP),Y TAX LDA REVERSE,X LDY #0 STA (TEMP2),Y ; 0 INY LDA (TEMP),Y TAX LDA REVERSE,X STA (TEMP2),Y ; 1 RTS NORWAY LDY #62 ; 62 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 61 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 60 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 59 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 58 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 57 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 56 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 55 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 54 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 53 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 52 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 51 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 50 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 49 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 48 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 47 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 46 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 45 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 44 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 43 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 42 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 41 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 40 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 39 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 38 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 37 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 36 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 35 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 34 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 33 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 32 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 31 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 30 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 29 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 28 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 27 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 26 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 25 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 24 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 23 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 22 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 21 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 20 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 19 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 18 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 17 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 16 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 15 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 14 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 13 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 12 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 11 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 10 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 9 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 8 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 7 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 6 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 5 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 4 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 3 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 2 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 1 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y DEY ; 0 LDA (TEMP),Y TAX LDA VALUES,X STA (TEMP2),Y RTS RANDOM LDA SEED+0,X ASL A ASL A CLC ADC SEED+0,X CLC ADC #21 STA SEED+0,X TORQQ RTS TORQ DEC SEEDC BNE TORQQ SEEDD LDA #255 ; BODGE STA SEEDC LDX SEEDP LDA SEED+4,X ASL A ASL A CLC ADC SEED+4,X CLC ADC #21 STA SEED+4,X STA MIKE STA MIKE2 LDY #> TORQSTORE STY MIKE2+1 INY STY MIKE+1 ; PHY.STORE LDY #0 LDA (MIKE),Y AND PIXT,X STA TEMP3 LDA (MIKE2),Y AND IPIXT,X ORA TEMP3 STA (MIKE2),Y INX CPX #4 BNE PA LDX #0 PA STX SEEDP LDY #(7*8)-1 LL LDA TORQSTORE,Y STA &7EF8,Y LDA TORQSTORE+(7*8),Y STA &7DB8,Y LDA TORQSTORE+(14*8),Y STA &7C78,Y LDA TORQSTORE+(21*8),Y STA &7B38,Y DEY BPL LL LDY #(3*8)-1 LL3 LDA TORQSTORE+(28*8),Y STA &7A08,Y DEY BPL LL3 LDY #7 LL4 LDA TORQSTORE+(31*8),Y STA &78D0,Y DEY BPL LL4 LDA FACE CLC ADC #1 BEQ HEAP STA FACE HEAP RTS CLE LDY #(7*8)-1 LL5 LDA #%00000000 ; CO1 STA &7EF8,Y STA &7DB8,Y STA &7C78,Y STA &7B38,Y DEY BPL LL5 LDY #(3*8)-1 LL6 STA &7A08,Y DEY BPL LL6 LDY #7 LL7 STA &78D0,Y DEY BPL LL7 INY G STA TORQSTORE,Y DEY BNE G RTS ; PLOT OTHER NUMBERS INTO ; THERE SPRITE POINTERS PANNELS LDA #< (96*64+BANK) STA MIKE LDA #> (96*64+BANK) STA MIKE+1 LDA BREATH JSR NUMB2 ; 0 TO 9 LDA #< (97*64+BANK) STA MIKE LDA #> (97*64+BANK) STA MIKE+1 LDA BULLETS ; 00 TO 99 JSR VALUE LDA #< (98*64+BANK) STA MIKE LDA #> (98*64+BANK) STA MIKE+1 LDA TOKILL ; 00 TO 99 JSR VALUE ; POKE SCORE VALUE IN ; SPRITE AREAS LDA #0 STA SPARE LDA #<(253*64+BANK) STA MIKE LDA #>(253*64+BANK) STA MIKE+1 LDA SCOREV+2 JSR ONEB LDA SCOREV+1 JSR ONEB LDA SCOREV+0 ONEB STA MIKE2 AND #&F0 LSR A LSR A LSR A LSR A JSR NUMB LDA MIKE2 AND #&0F NUMB ASL A ASL A ASL A TAX LDY #0 LDA NUMBERS+0,X STA (MIKE),Y LDY #1*3 LDA NUMBERS+1,X STA (MIKE),Y LDY #2*3 LDA NUMBERS+2,X STA (MIKE),Y LDY #3*3 LDA NUMBERS+3,X STA (MIKE),Y LDY #4*3 LDA NUMBERS+4,X STA (MIKE),Y LDY #5*3 LDA NUMBERS+5,X STA (MIKE),Y LDY #6*3 LDA NUMBERS+6,X STA (MIKE),Y LDY #7*3 LDA NUMBERS+7,X STA (MIKE),Y LDY SPARE LDA ADDM,Y STA MIKE INC SPARE RTS ADDM DB <((253*64)+BANK+01) DB <((253*64)+BANK+02) DB <((254*64)+BANK+00) DB <((254*64)+BANK+01) DB <((254*64)+BANK+02) VALUE STA MIKE2 AND #&F0 LSR A LSR A LSR A LSR A JSR NUMB2 LDA MIKE2 AND #&0F NUMB2 ASL A ASL A ASL A TAX LDY #0 LDA NUMBERS+0,X STA (MIKE),Y LDY #1*3 LDA NUMBERS+1,X STA (MIKE),Y LDY #2*3 LDA NUMBERS+2,X STA (MIKE),Y LDY #3*3 LDA NUMBERS+3,X STA (MIKE),Y LDY #4*3 LDA NUMBERS+4,X STA (MIKE),Y LDY #5*3 LDA NUMBERS+5,X STA (MIKE),Y LDY #6*3 LDA NUMBERS+6,X STA (MIKE),Y LDY #7*3 LDA NUMBERS+7,X STA (MIKE),Y INC MIKE RTS ; UNCOMPACK THE SCROLL PSCROLL LDA #< SCROLL STA read_byte+1 LDA #> SCROLL STA read_byte+2 LDA #< BITMAP STA MIKE LDA #> BITMAP STA MIKE+1 unpack JSR read_byte TAX BMI special unpack2 JSR read_byte LDY #0 STA (MIKE),Y INC MIKE BNE no_c INC MIKE+1 LDA MIKE+1 CMP #&75 BCS nov no_c DEX BNE unpack2 BEQ unpack special AND #&7F TAX JSR read_byte LDY #0 store STA (MIKE),Y STA MIKE2 INC MIKE BNE no_cry INC MIKE+1 LDA MIKE+1 CMP #&75 BCS nov LDA MIKE2 no_cry DEX BNE store BEQ unpack read_byte LDA &FFFF ; SMC INC read_byte+1 BNE nov INC read_byte+2 nov RTS CREDITS LDA #< TITLEMES STA MESAGE+1 LDA #> TITLEMES STA MESAGE+2 LDA #9 STA YTEMP LDA #< &6A08 STA MIKE2 LDA #> &6A08 STA MIKE2+1 LDA #38 STA XLENGTH+1 STA XSIZEADD+1 LDA #0 STA INVB1+1 STA INVB2+1 STA INVB3+1 STA WIPEB+1 JSR MORTEXT LDA #16 STA XLENGTH+1 STA XSIZEADD+1 LDA #255 STA INVB1+1 STA INVB2+1 STA INVB3+1 STA WIPEB+1 RTS ; PRINT TEXT MESSAGE A PTEXT ASL A TAY LDA MESSAGE,Y STA MESAGE+1 LDA MESSAGE+1,Y STA MESAGE+2 LDA #13 STA YTEMP LDA #< &61A0 STA MIKE2 LDA #> &61A0 STA MIKE2+1 MORTEXT LDA MIKE2 STA TEMP LDA MIKE2+1 STA TEMP+1 LDX #0 MESAGE LDA &FFFF,X CMP #32 BEQ WIPOUT CMP #"," BEQ COMMER CMP #"." BEQ FULLS JSR TTEXT PLEA LDA TEMP CLC ADC #8 STA TEMP BCC HII INC TEMP+1 HII INX XLENGTH CPX #16 BNE MESAGE LDA MIKE2 CLC ADC #< 320 STA MIKE2 LDA MIKE2+1 ADC #> 320 STA MIKE2+1 LDA MESAGE+1 CLC XSIZEADD ADC #16 STA MESAGE+1 BCC NOHBS INC MESAGE+2 NOHBS DEC YTEMP BNE MORTEXT RTS TTEXT LDY #0 STY MIKE+1 CMP #"A" BCS NORTEX CLC ADC #55-48 NORTEX SEC SBC #55 ; A=10 ASL A ; 0=0 ROL MIKE+1 ASL A ROL MIKE+1 ASL A ROL MIKE+1 ;CLC ADC #< NUMBERS STA MIKE LDA MIKE+1 ADC #> NUMBERS STA MIKE+1 LDY #7 PLCHAR3 LDA (MIKE),Y INVB1 EOR #255 ; ? STA (TEMP),Y DEY BPL PLCHAR3 RTS WIPOUT LDY #7 WIPEB LDA #255 WIPO2 STA (TEMP),Y DEY BPL WIPO2 JMP PLEA FULLS LDY #7 FULL2 LDA FULLSTOP,Y INVB2 EOR #255 STA (TEMP),Y DEY BPL FULL2 JMP PLEA COMMER LDY #7 COMM2 LDA COMMOR,Y INVB3 EOR #255 STA (TEMP),Y DEY BPL COMM2 JMP PLEA FULLSTOP DB %00000000 DB %00000000 DB %00000000 DB %00000000 DB %00000000 DB %00011000 DB %00011000 DB %00000000 COMMOR DB %00000000 DB %00000000 DB %00000000 DB %00000000 DB %00000000 DB %00011000 DB %00011000 DB %00100000 NUMBERS DB &0,&FC,&66,&66,&6E,&76,&66,&BC DB &0,&18,&38,&58,&18,&1C,&18,&20 DB &0,&FC,&6,&7E,&C4,&C0,&FE,&42 DB &0,&FC,&8E,&3C,&6,&6,&7E,&84 DB &0,&1C,&18,&30,&64,&FE,&C,&18 DB &0,&FE,&C2,&E0,&7E,&6,&7E,&84 DB &0,&7E,&C0,&FC,&C6,&E6,&7C,&80 DB &0,&FC,&8C,&C,&C,&E,&C,&10 DB &0,&7C,&66,&3C,&66,&66,&7E,&80 DB &0,&FE,&CC,&CC,&7C,&E,&C,&10 ; LETTERS DB &0,&5E,&36,&66,&5E,&66,&66,&88 DB &0,&F8,&64,&7C,&66,&62,&7E,&80 DB &0,&FC,&62,&60,&60,&62,&7E,&80 DB &0,&FC,&66,&66,&66,&66,&7E,&80 DB &0,&FE,&62,&68,&78,&62,&7E,&C2 DB &0,&FE,&62,&78,&60,&70,&60,&80 DB &0,&FE,&62,&60,&6E,&66,&7E,&80 DB &0,&66,&66,&5E,&66,&66,&66,&88 DB &0,&0C,&38,&18,&18,&1C,&18,&20 DB &0,&FE,&CC,&CC,&C,&C,&38,&40 DB &0,&E6,&6C,&78,&78,&6C,&66,&80 DB &0,&E0,&60,&60,&60,&62,&7E,&82 DB &0,&BC,&76,&56,&56,&46,&66,&88 DB &0,&66,&76,&6E,&66,&77,&66,&88 DB &0,&FC,&66,&66,&66,&66,&3C,&C0 DB &0,&FC,&66,&7C,&60,&70,&60,&80 DB &0,&FC,&66,&66,&66,&66,&3C,&2 DB &0,&FC,&66,&64,&78,&6C,&66,&80 DB &0,&7E,&C0,&FC,&66,&6,&7E,&84 DB &0,&FE,&BA,&18,&18,&1C,&18,&20 DB &0,&EC,&66,&66,&66,&66,&7C,&80 DB &0,&66,&26,&66,&76,&3C,&58,&0 DB &0,&E6,&66,&56,&56,&56,&7C,&80 DB &0,&66,&34,&18,&18,&2C,&66,&C0 DB &0,&C6,&6C,&38,&18,&1C,&18,&20 DB &0,&FE,&8C,&18,&30,&62,&FE,&82 MESSAGE DW TEXT1 DW TEXT2 DW TEXT3 DW TEXT4 DW TEXT5 TEXT1 DEFM " " DEFM " " DEFM " " DEFM " WELL YOU VILE " DEFM " ALIEN, " DEFM " " DEFM " SO YOU THINK " DEFM " YOU CAN BEAT " DEFM " THE GRAND " DEFM " MASTER OF " DEFM " TERMIGHT. " DEFM " " TEXT2 DEFM " " DEFM " " DEFM " YOU MAY OF " DEFM "ESCAPED WARLOCK," DEFM " BUT YOU ARE " DEFM " TRAPPED IN A " DEFM " PIT OF MY MIND." DEFM " " DEFM " FOR ALL " DEFM " " DEFM " ETERNITY. " DEFM " " TEXT3 DEFM " " DEFM " " DEFM " YOU MAY RUN " DEFM " NEMESIS, BUT " DEFM " YOU CAN NEVER " DEFM " HIDE, " DEFM " " DEFM " " DEFM " FROM MY EVER " DEFM " CHASING SPIRIT." DEFM " " DEFM " " TEXT4 DEFM " " DEFM "I HAVE DEFEATED " DEFM " YOU WARLOCK. " DEFM " " DEFM " I CAN NOW " DEFM " CLEANSE THE " DEFM " GALAXY OF ALL " DEFM "ALIEN PRESENCE. " DEFM " " DEFM " AND YOUR " DEFM " BANISHED SOUL " DEFM " WILL ONLY LIVE " DEFM " IN MY DREAMS..." TEXT5 DEFM " NEMESIS " DEFM " ADVANCES TO " DEFM " TORQUEMADA AND " DEFM " PLUNDGES HIS " DEFM " SWORD EXESSUS " DEFM " THROUGH HIS " DEFM " HEART. " DEFM " AND HIS SOUL IS" DEFM " RELEASED TO THE" DEFM " STARS WITH " DEFM " TORQUEMADAS " DEFM " DYING VOICE " DEFM "I WILL REVENG..." ; ************************************** TITLEMES DEFM "PROGRAMMED BY GRAFIX BY MUSIC BY " DEFM " " DEFM "MICHAEL ARCHER DAVE DEW ROB HUBBARD" DEFM " " DEFM " GAME CONCEPT BY " DEFM " " DEFM "DAVE DEW JAS AUSTIN MICHAEL ARCHER" DEFM " " DEFM "NEMESIS THE WARLOCK. IPC MAGAZINE 1987" INFO "R.PLOT " -------------------------------------------------------------------------------- /GAME: -------------------------------------------------------------------------------- 1 | BLNEM EQU 95 BLSPR EQU 179 ; START IF MAIN CODE MAIN SEI CLD LDX #255 TXS LDA #< NMI STA &FFFA LDA #> NMI STA &FFFB LDA #< RESET STA &FFFC LDA #> RESET STA &FFFD LDA #%00100101 STA &01 LDA #%10010110 ; BANK 2 STA CIA2 LDA #%01111000 ; &1C00 SCR. STA VIC+24 ; B.M IN MID. LDY #0 STY CIA1+2 ; BUG IN RECIEVE STY BANK+&3FFF STY BORDER STY COLOUR0 LDA #127 STA CIA1+13 STA CIA2+13 LDA CIA1+13 LDA CIA2+13 LDA #&60 STA MIKE+1 LDA #&F1 STA MIKE2+1 LDA #&75 STA TEMP+1 LDA #&40 STA TEMP STA MIKE2 LDX #10 LDY #0 STY MIKE STY COLBG+1 CRAP2 LDA (MIKE2),Y ; PANNEL STORE STA (TEMP),Y ; TO SCREEN LDA (MIKE),Y ; TITLE SC STA (MIKE2),Y ; TO STORE INY BNE CRAP2 INC MIKE2+1 INC MIKE+1 INC TEMP+1 DEX BNE CRAP2 SHOPAN LDA &FC00+&000,Y ; NYBBLE STA &D800+&2A8,Y LDA &D800+&000,Y AND #%00001111 STA &FC00+&000,Y LDA &FD40+&000,Y ; SCREEN STA &5C00+&2A8,Y LDA &5C00+&000,Y STA &FD40+&000,Y INY BNE SHOPAN RESTOF LDA &FC00+&100,Y ; NYBBLE STA &D800+&3A8,Y LDA &D800+&100,Y AND #%00001111 STA &FC00+&100,Y LDA &FD40+&100,Y ; SCREEN STA &5C00+&3A8,Y LDA &5C00+&100,Y STA &FD40+&100,Y LDA &F140+&A00,Y STA &7540+&A00,Y INY CPY #&40 BNE RESTOF LITTLEEX LDA &F140+&A00,Y STA &7540+&A00,Y INY CPY #&C0 BNE LITTLEEX CLI HERE LDY #HERE-MAIN LDA #0 LOOSE STA MAIN,Y DEY BNE LOOSE AGAIN JSR SCREENOFF LDA #0 ; PANNEL STA TURNOF2+1 ; SPRITES OFF STA SPRIT+1 ; VIC+21 SEI LDA #< FIRST STA &FFFE LDA #> FIRST STA &FFFF LDA #1 STA VIC+25 STA VIC+26 LDA #108 STA RASTER CLI JSR CLE LDA #%00010000 JSR CLEAR JSR NEMTEXT JSR CREDITS JSR SCREENON JSR TUNEON JSR WAIT_FIRE JSR TUNEOFF LDA #0 JSR FLUSH LDA #1 JSR FLUSH LDA #2 JSR FLUSH LDA #0 STA Y+0 STA Y+1 STA Y+2 STA Y+3 STA Y+4 SEI LDA #< IRQ STA &FFFE LDA #> IRQ STA &FFFF CLI JSR SCREENOFF JSR SETHIRES LDA #%01110000 JSR CLEAR JSR PSCROLL LDA #0 JSR PTEXT JSR SCREENON JSR WAIT_FIRE JSR SETUP JSR PLAYGAME JMP AGAIN NEMTEXT LDA #&60 STA MIKE+1 LDA #&F1 STA MIKE2+1 LDA #&40 STA MIKE2 LDX #8 LDY #0 STY MIKE STY COLBG+1 CRAP LDA (MIKE2),Y STA (MIKE),Y INY BNE CRAP INC MIKE2+1 INC MIKE+1 DEX BNE CRAP LDY #&BF LASTB LDA &F140+&800,Y STA &6000+&800,Y DEY CPY #255 BNE LASTB INY MOVSCRE LDA &FC00,Y ; SCREEN STA &D800,Y LDA &FD40,Y ; NYBBLE STA &5C00,Y INY BNE MOVSCRE RESTOF2 LDA &FD00,Y ; SCREEN STA &D900,Y LDA &FE40,Y ; NYBBLE STA &5D00,Y INY CPY #&18 BNE RESTOF2 RTS WAIT_FIRE JSR JOYSTICK LDA FIRE BEQ WAIT_FIRE LET_GO JSR JOYSTICK ; MAY NOT NEED LDA FIRE BNE LET_GO RTS SCREENON LDA SCON+1 ORA #%00010000 STA SCON+1 LDA SCOF+1 ORA #%00010000 STA SCOF+1 LDA SCRON+1 ORA #%00010000 STA SCRON+1 RTS SCREENOFF LDA SCON+1 AND #%11101111 STA SCON+1 LDA SCOF+1 AND #%11101111 STA SCOF+1 LDA SCRON+1 AND #%11101111 STA SCRON+1 RTS SETMULTI LDA COLMODET+1 ORA #%00010000 STA COLMODET+1 LDA SCOF+1 AND #%11110111 STA SCOF+1 RTS SETHIRES LDA COLMODET+1 AND #%11101111 STA COLMODET+1 LDA SCOF+1 ORA #%00001000 STA SCOF+1 LDA #0 STA COLBG+1 RTS ; SETUP FOR EACH NEW GAME SETUP LDA #0 STA LEVEL LDA #0 STA SCOREV+0 STA SCOREV+1 STA SCOREV+2 LDA #1 ; FLAMES STA BREATH LDA #14 STA NEWX LDA #17*8 STA NEWY RTS ; SETUP FOR EACH NEW SCREEN NEWSCREEN JSR SCREENOFF JSR SETMULTI LDA #144 ; SEEDED STA SEED+0 ; FOR LDA #164 ; ENEMY STA SEED+1 ; MOVEMENT LDA #23 STA SEED+2 LDA #60 STA SEED+3 LDA #76 ; BRING STA SEED+4 ; ON LDA #90 ; TORQ STA SEED+5 ; FACE LDA #100 STA SEED+6 LDA #43 STA SEED+7 LDA #BLNEM ; BLANK STA SIDEB+0 ; NEMESIS GUN LDA #BLSPR STA SIDEB+1 ; ENEMY'S STA SIDEB+2 ; GUN JSR SETB LDA #0 STA SIDEY+1 ; AT TOP STA SIDEY+2 ; OF ALIEN SPR STA ENERGY STA BULLETS STA SEEDP ; SEED POINTER LDY LEVEL ; AMOUNT TO LDA HOWMANY,Y ; KILL FOR ;LDA #2 ; C&VG DEMO STA TOKILL ; EACH NEW LDA #%00010000 JSR CLEAR ; CLS JSR CLE ; WIPE TORQ. JSR CLEARSPR ; WIPE SPRITES JSR DISPL ; LEVEL PLOT LDA #255 ; PANNEL STA TURNOF2+1 ; SPRITES ON LDY LEVEL LDA COLTAB,Y STA COLBG+1 LDA EXITTAB,Y STA EXIT LDA TOPYTAB,Y STA TOPY LDA NEWX STA X+0 LDA NEWY STA Y+0 LDA #0 STA COUNT+0 STA FACE STA DIRECTION+0 LDA #1 STA ACTION+0 LDA TORQDEL,Y STA SEEDC ; COUNTER STA SEEDD+1 ; SMC JMP SCREENON SETB LDY #4 SETB2 LDA #0 STA FRAME,Y STA WBULLET,Y STA TOGGLE,Y ; 0 1 FRAME LDA #12 ; FALL DOWN STA ACTION,Y DEY BPL SETB2 LDA #0 STA WBULLET+5 RTS DEAD1 JSR ALLOFF LDA #%01110000 JSR CLEAR BIT DIRECTION+0 BPL FACRIY LDA X+0 SEC SBC #12 JMP STTID FACRIY LDA X+0 CLC ADC #12 STTID STA SIDEX+0 LDA #%11111111 STA TURNOF2+1 STA SPRIT+1 LDA #84 LDX #0 JSR PLOTNEM LDA #86 LDX #5 JSR PLOTNEM LDA #85 LDX #10 JSR PLOTNEM LDA #0 STA ENERGY JSR SCREENON PLENTY3 LDA #64+7 STA FG2 LDA #25 STA TEMP PLENTY4 LDA Y+0 CLC ADC #6 CMP #18*8 BCS ENDOFSY STA Y+0 LDA ENERGY CLC ADC #10 CMP #56*4 BCC OKS5 LDA #00 OKS5 STA ENERGY JSR DELAY LDA SYNC SMOOT CMP SYNC BEQ SMOOT DEC TEMP BNE PLENTY4 BEQ PLENTY3 ENDOFSY LDA #2 JMP FLUSH DEAD2 BIT DIRECTION+0 BPL FACRIYU LDA X+0 SEC SBC #12 JMP STTIDU FACRIYU LDA X+0 CLC ADC #12 STTIDU STA SIDEX+0 LDA #84 LDX #0 JSR PLOTNEM LDA #86 LDX #5 JSR PLOTNEM LDA #85 LDX #10 JSR PLOTNEM LDA #0 STA ENERGY PLENT2 LDA #64+7 STA FG2 LDA #25 STA TEMP PLENTY JSR JOYSTICK LDA FIRE BNE ENDOFS LDA Y+0 SEC SBC #1 BEQ ENDOFS STA Y+0 LDA ENERGY CLC ADC #10 CMP #56*4 BCC OKS LDA #00 OKS STA ENERGY JSR DELAY LDA SYNC SMOO CMP SYNC BEQ SMOO DEC TEMP BNE PLENTY BEQ PLENT2 ENDOFS LDA #2 JMP FLUSH PAUSE LDA &DC01 CMP #223 BNE NPAUSE LETGO LDA &DC01 CMP #223 BEQ LETGO PAUSE2 LDA &DC01 CMP #223 BNE PAUSE2 LETGO2 LDA &DC01 CMP #223 BEQ LETGO2 NPAUSE RTS PLAYGAME JSR NEWSCREEN JSR WALKR ; MOVE YOU A BIT JSR ALIENS ; FIRST SHOW LDA #%11111111 STA SPRIT+1 STALIVE JSR PAUSE JSR MANYOF LDA Y CMP #18*8 BCC BURP TUFLUCK JSR DEAD1 ; MOVE DOWN JSR ALLOFF LDA #1 ; FALL IN JSR PTEXT ; PIT JSR SCREENON JSR WAIT_FIRE JMP ENDOFS BURP LDA ENERGY CMP #56*4 ; ??? BCS COPDIT LDA TOKILL BNE STALIVE JMP DONESC COPDIT JSR DEAD2 ; MOVE UP SCR JSR ALLOFF LDA #3 JSR PTEXT JSR SCREENON LDA #64+6 STA FG0 LDA #64+12 STA FG1 LDA #4 STA TEMP+1 LDA #0 STA TEMP LDA #1 ; HOW MANY STA SEEDC STA SEEDD+1 FACEP JSR TORQ DEC TEMP BNE FACEP DEC TEMP+1 BNE FACEP LDA #0 JSR FLUSH LDA #1 JSR FLUSH JMP WAIT_FIRE BODGE DB 0 ; 0 LEFT 1 RIGHT 2 UP 3 DOWN DONESC LDA #0 STA ENERGY STA BODGE DONESC2 JSR PAUSE JSR MANYOF LDA BODGE EOR #1 STA BODGE CLC ADC ENERGY CMP #56*4 BCC OKSR BCS COPDIT OKSR STA ENERGY LDA Y CMP TOPY BNE NAT LDX #2 JMP GOTHY NAT CMP #18*8 BCC TRX LDX #3 ; IF EXIT NOT CPX EXIT ; BOTTOM YOUR BEQ GOTHY ; DEAD JMP TUFLUCK TRX LDA X CMP #12 BNE OTHEE LDX #0 JMP GOTHY OTHEE CMP #159 BNE NOWHR LDX #1 JMP GOTHY NOWHR LDX #5 GOTHY CPX EXIT BNE DONESC2 CPX #0 BNE FROG1 LDA Y+0 STA NEWY LDA #148+12 STA NEWX BNE PLOP FROG1 CPX #1 BNE NEWWY LDA Y+0 STA NEWY LDA #14 STA NEWX BNE PLOP NEWWY CPX #2 BNE TOPIC LDA X+0 STA NEWX LDA #16*8 STA NEWY BNE PLOP TOPIC LDA X+0 STA NEWX LDA #8 STA NEWY PLOP LDA #101 STA COUNT+6 JSR ALLOFF ADDTOSC LDA #&10 ; BONUS 1000 JSR SADD DEC COUNT+6 BNE ADDTOSC LDA BREATH ; 0 TO 9 ONLY CLC ADC #1 CMP #3 BCS NOMORE STA BREATH NOMORE LDA LEVEL CLC ADC #1 CMP #22 ; LOTS OF BCC HOMANY LDA #4 ; MEGA GOOD JSR PTEXT JSR SCREENON JMP WAIT_FIRE HOMANY STA LEVEL ; AT THIS GAME LDA #2 JSR PTEXT JSR SCREENON JSR WAIT_FIRE JMP PLAYGAME ALLOFF JSR SCREENOFF LDA #0 ; PANNEL STA TURNOF2+1 ; SPRITES OFF STA SPRIT+1 ; VIC+21 STA COLBG+1 ; BACKG COLOUR STA Y+0 STA Y+1 STA Y+2 STA Y+3 STA Y+4 JSR CLE LDA #%01110000 JSR CLEAR JSR SETHIRES JMP PSCROLL ; *********************** MANYOF JSR JOYSTICK JSR MOVEYOU JSR ALIENS JSR BULLOFF ; CHECK JSR BULLON JSR TORQ ; HIS FACE ;LDA X ;STA SCOREV+2 ;LDA Y ;STA SCOREV+1 ;LDA FACE ;STA SCOREV+0 JSR PANNELS ; NEW SCORE ; BULLETS BREATH TOKILL ; HOW BODGY !!!!!!!!!! DELAY LDA SYNC SK1 CMP SYNC BEQ SK1 LDA SYNC SK2 CMP SYNC BEQ SK2 RTS ACTTABL DB < WALK ; 0 DB < FALL ; 1 DB < JUMP ; 2 DB < DUCK ; 3 DB < BANG ; 4 DB < UBANG ; 5 DB < DBANG ; 6 DB < SWIPE ; 7 DB < USWIPE ; 8 DB < DSWIPE ; 9 DB < DIE ; 10 DB < SPIT ; 11 ACTTABH DB > WALK ; MISTER COOL DB > FALL ; DOWN NNNNnnn DB > JUMP ; UP UP & AWAY DB > DUCK ; HOWZAT !!!! DB > BANG ; READY TO SHOOT DB > UBANG ; WAIT FOR FIRE DB > DBANG ; DO A FIRE DB > SWIPE ; SWING SWORD DB > USWIPE; WAIT FOR FIRE DB > DSWIPE; DO A SWIPE DB > DIE ; DROP DEAD PUNK! DB > SPIT ; THE DOG ?? MOVEYOU LDY ACTION LDA ACTTABL,Y STA SOMETHING+1 LDA ACTTABH,Y STA SOMETHING+2 SOMETHING JSR &FFFF LDA ACTION CMP #11 BNE TTFN TTFN2 JMP IGNORTH TTFN CMP #0 BNE TTFN2 LDA &DC01 CMP #239 BNE NOSP LDA X+0 BIT DIRECTION BMI FACLLE CMP #148+12 BCS NOSP BCC OKY FACLLE CMP #12 BCC NOSP OKY LDA BREATH BEQ NOSP SEC SBC #1 STA BREATH ; 3M LDA #11 STA ACTION LDA DIRECTION STA BREATHD ; DIRECTION LDA #0 STA BREATHF ; FRAME LDA #7 STA SIDEC+1 JMP IGNORTH NOSP LDA ACTION BNE CHFIR LDA DOWN BEQ CHFIR LDA #0 STA COUNT LDA #3 ; DUCK STA ACTION BNE SKIP CHFIR LDA FIRE BEQ NRTH LDA ACTION ; FIRST BNE NRTH ; FIRE LDA BULLETS ; NO MORE BEQ NONLEF ; NO AMO LEFT LDA #4 ; READY FIRE DB &2C NONLEF LDA #7 ; READY SWIPE STA ACTION LDA #0 STA COUNT NRTH LDA UP BEQ SKIP LDA ACTION ; IF WALKING BNE SKIP LDA #2 ; JUMP ACTION STA ACTION LDA #0 STA COUNT SKIP BIT DIRECTION+0 BPL FACRI LDA X+0 SEC SBC #12 JMP STTI FACRI LDA X+0 CLC ADC #12 STTI STA SIDEX+0 LDA #12 ; SPRITE STA SIDEC+1 ; COLOUR IGNORTH LDX #0 LDA SPRITEV0 JSR PLOTNEM LDX #5 LDA SPRITEV1 JSR PLOTNEM LDX #10 LDA SIDEB+0 JMP PLOTNEM SPIT LDY BREATHF LDA SPITT,Y STA SIDEB+0 INY CPY #7 BNE PLEN LDY #0 PLEN STY BREATHF LDA SIDEX+0 BIT BREATHD BMI LEFTFF CLC ADC #4 CMP #148+12 BCS TAKEOF BCC HITWHAT LEFTFF SEC SBC #4 CMP #12 BCC TAKEOF HITWHAT STA SIDEX+0 LDA Y+0 CLC ADC #8 STA YTEMP LDY #4 THELOT JSR DETECTI6 DEY BNE THELOT JMP WALKYOU TAKEOF LDA #BLNEM STA SIDEB+0 LDA #0 STA ACTION VIDCOM RTS DETECTI6 JSR DETECTIO6 BCC VIDCOM LDA ACTION,Y CMP #8 BEQ ZOMBEEEE CMP #4 ; IF DOING BCS VIDCOM ; THESE LDA #&20 ; 20 TO SCORE JSR SADD ; SOUND EFFECTS SED LDA TOKILL SEC SBC #1 BCC AMOATN5 STA TOKILL AMOATN5 CLD LDA DIRECTION+0,Y CMP DIRECTION+0 BNE GOODONE5 EOR #255 STA DIRECTION+0,Y GOODONE5 LDA #4 ; WARRIOR DIE SDER STA ACTION+0,Y LDA #0 STA COUNT+0,Y STA HITS-1,Y RTS ZOMBEEEE LDA #&40 ; 20 TO SCORE JSR SADD ; SOUND EFFECTS LDA DIRECTION+0,Y EOR #-1 STA DIRECTION+0,Y LDA #9 ; ZOMBIE DIE JSR SDER JMP TAKEOF DETECTIO6 LDA SIDEX+0 CMP X,Y ; SOTWARE BCC LESSTHANA LDA X,Y CLC ADC #12 ; PIXELS X CMP SIDEX+0 BCS GREATERA NO_HITA RTS LESSTHANA ADC #12 ; PIXELS X CMP X,Y BCC NO_HITA GREATERA LDA YTEMP CMP Y,Y BCC LESSTHANB LDA Y,Y CLC ; 6 ADC #42-6 ; PIXELS Y CMP YTEMP RTS LESSTHANB ADC #6 ; PIXELS Y CMP Y,Y RTS ; DIRECTION=0 FACEING RIGHT ; ACTION 0 WALK JSR WALKYOU JSR WHERE ; CHECK BNE TELL LDY #0 ; FALL DOWN STY COUNT INY STY ACTION TELL RTS WALKYOU LDA RIGHT BEQ LIVE BIT DIRECTION BPL ALRSET INC DIRECTION ALRSET JMP WALKR LIVE LDA LEFT BEQ TELL BIT DIRECTION BMI ALRSET2 DEC DIRECTION ALRSET2 JMP WALKL WALKR LDA FRAME CLC ADC #1 CMP #10 BCC SM LDA #0 SM STA FRAME TAY LDA WALKSTT,Y STA SPRITEV0 LDA WALKSTB,Y STA SPRITEV1 LDA X CLC ADC WALKTAB,Y CMP #148+12 BCS SMER STA X SMER RTS WALKL LDA FRAME CLC ADC #1 CMP #10 BCC SM2 LDA #0 SM2 STA FRAME TAY LDA WALKSTT,Y STA SPRITEV0 LDA WALKSTB,Y STA SPRITEV1 LDA X SEC SBC WALKTAB,Y CMP #12 BCC SMER2 STA X SMER2 RTS ; ACTION 1 FALL LDY COUNT LDA Y CLC ADC DROPTAB,Y STA SPARE CMP #2*8 ; 19 BCC NOYET CMP #18*8 BCS NOYET JSR LOOKUP ; SEE IF NEW CMP #255 BNE NOYET LDA SPARE AND #&F8 STA Y LDA #0 ; BACK TO STA ACTION ; WALKING RTS NOYET LDA SPARE STA Y INC COUNT JMP WALKYOU ; ACTION 2 JUMP LDY COUNT LDA Y SEC SBC JUMPTAB,Y STA Y INC COUNT LDA COUNT CMP #8 BNE SWARVE LDA #1 ; FALL STA ACTION STA COUNT RTS SWARVE JMP WALKYOU ; ACTION 3 DUCK LDY COUNT LDA DUCKSTT,Y STA SPRITEV0 LDA DUCKSTB,Y STA SPRITEV1 LDA DOWN BEQ BACKUP INY CPY #3 BEQ TRYPICK UPAGA STY COUNT RTS BACKUP DEY BPL UPAGA LDA #0 STA ACTION FUDGE RTS TRYPICK JSR WHERE LDA MIKE2 SEC SBC #40 STA MIKE2 LDA MIKE2+1 SBC #0 STA MIKE2+1 LDA (MIKE2),Y CMP #128 BNE FUDGE LDA #64+2 ; BEEP STA FG2 LDA #0 STA (MIKE2),Y LDA Y+0 LSR A LSR A LSR A TAY DEY DEY LDA X+0 SEC SBC #12 LSR A LSR A TAX JSR MEMXY LDY #15 LDA #0 WIPEH STA (TEMP),Y DEY CPY #8 BNE WIPEH LDA #&12 STA BULLETS RTS ; ACTION 4 BANG LDY COUNT LDA BANGSTT,Y STA SPRITEV0 LDA BANGSTB,Y STA SPRITEV1 LDA BANGSTS,Y STA SIDEB+0 INY CPY #6 BEQ NEXMOV STY COUNT RTS ; ACTION 5 UBANG LDA FIRE BNE FER LDA DOWN ORA RIGHT ORA LEFT BNE BACKTOW RTS FER LDA BULLETS ; NO MORE BNE AMOL ; AMO LEFT LDA #7 ; SWIPE STA ACTION LDA #0 STA COUNT SORP RTS AMOL LDA WBULLET+0 ; IF ONE ON BEQ THISN LDA WBULLET+5 ; OR MORE ON BNE SORP ; SCREEN THISN SED LDA BULLETS SEC SBC #1 BCC AMOATN STA BULLETS ; PONY AMOATN CLD LDA #6 STA ACTION LDA #0 STA COUNT RTS ; ACTION 6 DBANG LDY COUNT LDA BANGSTT+5,Y STA SPRITEV0 LDA BANGSTB+5,Y STA SPRITEV1 LDA BANGSTS+5,Y STA SIDEB+0 INY STY COUNT CPY #5 BEQ NEXMOV CPY #2 BNE MOJO LDA #64+8 STA FG0 LDA #64+12 STA FG1 JMP DOBULL BACKTOW LDA #BLNEM ; BLANK STA SIDEB+0 LDA #0 ; WALKING STA ACTION JMP WALKYOU NEXMOV LDA #5 ; WAIT FIRE STA ACTION MOJO RTS ; ACTION 7 SWIPE LDY COUNT LDA SWIPESTT,Y STA SPRITEV0 LDA SWIPESTB,Y STA SPRITEV1 LDA SWIPESTS,Y STA SIDEB+0 INY CPY #8 BEQ NEXMOY STY COUNT RTS NEXMOY LDA #8 STA ACTION RTS ; ACTION 8 USWIPE LDA FIRE BNE FER2 LDA LEFT ORA RIGHT ORA DOWN BNE BACKTOW RTS FER2 LDA #9 STA ACTION LDY #0 STY COUNT CANTW RTS ; ACTION 9 DSWIPE LDY COUNT LDA SWIPESTT+7,Y STA SPRITEV0 LDA SWIPESTB+7,Y STA SPRITEV1 LDA SWIPESTS+7,Y STA SIDEB+0 INY STY COUNT CPY #8 BEQ NEXMOY CPY #2 ; 3 BEQ VAMP CPY #5 BNE CANTW LDA #64+0 STA FG2 RTS VAMP LDA #64+0 ; SWISH STA FG2 LDA Y+0 CLC ADC #18 STA YTEMP LDY #1 JSR DETECTIO2 BCS HITIT2 INY ; 2 JSR DETECTIO2 BCS HITIT2 INY ; 3 JSR DETECTIO2 BCS HITIT2 INY ; 4 JSR DETECTIO2 BCC CANTW HITIT2 LDA #64+1 ; SQUELCH 1 STA FG0 LDA #64+13 ; ?????? STA FG1 LDA ACTION,Y CMP #8 BEQ ZOMBEEE CMP #4 ; IF DOING BCS SLAG ; THESE LDA HITS-1,Y ; WHAT ONE CLC ADC #1 CMP #1 ; 2 HITS BCS ITSDEAD2 ; FOR WARRIOR STOK3 STA HITS-1,Y SLAG RTS ITSDEAD2 LDA #&20 ; 20 TO SCORE JSR SADD ; SOUND EFFECTS SED LDA TOKILL SEC SBC #1 BCC AMOATN3 STA TOKILL AMOATN3 CLD LDA DIRECTION+0,Y CMP DIRECTION+0 BNE GOODONE2 EOR #255 STA DIRECTION+0,Y GOODONE2 LDA #4 ; WARRIOR DIE TIOF3 STA ACTION+0,Y LDA #0 STA HITS-1,Y STA COUNT+0,Y RTS ZOMBEEE LDA HITS-1,Y CLC ADC #1 CMP #4 ; 4 HITS BCC STOK3 ; FOR ZOMBIE LDA #&40 ; 20 TO SCORE JSR SADD LDA DIRECTION+0,Y EOR #-1 STA DIRECTION+0,Y LDA #9 ; ZOMBIE DIE BNE TIOF3 DETECTIO2 LDA SIDEX+0 CMP X,Y ; SOTWARE BCC LESSTHAN3 LDA X,Y CLC ADC #12 ; PIXELS X CMP SIDEX+0 BCS GREATER3 NO_HIT2 RTS LESSTHAN3 ADC #12 ; PIXELS X CMP X,Y BCC NO_HIT2 GREATER3 LDA YTEMP CMP Y,Y BCC LESSTHAN4 LDA Y,Y CLC ; 6 ADC #42-7 ; PIXELS Y CMP YTEMP RTS LESSTHAN4 ADC #1 ; PIXELS Y CMP Y,Y RTS ; ACTION 6 DIE LDY COUNT LDA DIESTT,Y STA SPRITEV0 LDA DIESTB,Y STA SPRITEV1 INY CPY #8 BEQ NEXMOV3 STY COUNT FLIP RTS NEXMOV3 LDA #0 ; GAME OVER STA ACTION RTS DOBULL LDX #0 LDA WBULLET+0 BEQ SECONB LDX #5 SECONB LDA Y CMP #32 BCC FLIP BIT DIRECTION+0 BMI PANT LDA X CMP #&94 BCS FLIP BCC HELO PANT LDA X CMP #&1C BCC FLIP HELO BIT DIRECTION+0 BMI MINYOR LDA X ; YOUR CORD CLC ADC #0 ;12 BNE LEFTATN MINYOR LDA X SEC SBC #20 ;28 LEFTATN STA BULLETX+0,X LDA Y+0 ; YOUR CORD CLC ADC #10 STA BULLETY+0,X LDA DIRECTION+0 STA DBULLET+0,X LDA #255 STA WBULLET+0,X LDA Y+0 JMP HERK WORKMEM LDA DIRECTION+0,X STA DBULLET+0,X LDA #128 STA WBULLET+0,X LDA Y+0,X ; YOUR CORD CLC ADC #4 STA BULLETY+0,X HERK SEC SBC #30 ; HOW MANY LSR A LSR A LSR A TAY LDA #0 ; WORK OUT SCMEM X,Y STA TEMP+1 LDA BULLETX+0,X ; X CORD AND #%11111100 ASL A ; DIV4*8 ROL TEMP+1 ; =AND &FC *2 CLC ADC M320L,Y STA BULLETML,X; SCREEN LOW LDA TEMP+1 ADC M320H,Y STA BULLETMH,X; SCREEN HIGH JMP EW BULLON LDX #0 ; NEMESIS 0 JSR EW LDX #5 ; NEMESIS 1 JSR EW LDX #1 ; ALIEN 0 JSR EW LDX #2 ; ALIEN 1 JSR EW LDX #3 ; ALIEN 2 JSR EW LDX #4 ; ALIEN 3 EW LDA WBULLET,X ; ANY THERE BNE THERE1 ; YES THERE RTS THERE1 LDA BULLETML,X STA MIKE LDA BULLETMH,X STA MIKE+1 LDY #0 LDA (MIKE),Y STA BEHIND1,X LDA #%11111111 STA (MIKE),Y INY CPY #8 BNE COLO1 LDA MIKE CLC ADC #< 320-8 STA MIKE LDA MIKE+1 ADC #> 320-8 STA MIKE+1 COLO1 LDA (MIKE),Y STA BEHIND2,X LDA #%11111111 STA (MIKE),Y RTS BULLOFF LDX #4 ; ALIEN 3 JSR ISTHER LDX #3 ; ALIEN 2 JSR ISTHER LDX #2 ; ALIEN 1 JSR ISTHER LDX #1 ; ALIEN 0 JSR ISTHER LDX #5 ; NEMESIS 1 JSR ISTHER LDX #0 ; NEMESIS 0 ISTHER LDA WBULLET,X BNE THERE2 RTS THERE2 LDA BULLETML,X STA MIKE LDA BULLETMH,X STA MIKE+1 LDY #0 LDA BEHIND1,X STA (MIKE),Y INY CPY #8 BNE COLO2 LDA MIKE CLC ADC #< 320-8 STA MIKE LDA MIKE+1 ADC #> 320-8 STA MIKE+1 COLO2 LDA BEHIND2,X STA (MIKE),Y LDA DBULLET,X BMI FACELEFT LDA BULLETML,X CLC ADC #8 STA BULLETML,X BCC NOHIO1 INC BULLETMH,X NOHIO1 LDA BULLETX,X CLC ADC #4 CMP #160 BCC FOFF BCS TIOF FACELEFT LDA BULLETML,X SEC SBC #8 STA BULLETML,X BCS NOHIO2 DEC BULLETMH,X NOHIO2 LDA BULLETX,X SEC SBC #4 CMP #200 BCC FOFF TIOF LDA #0 ; TURN OFF STA WBULLET,X ; BULLET BOO RTS FOFF STA BULLETX,X CLC ADC #12 STA BULLETX2,X CPX #0 ; NEMESIS BEQ DOALLALNS ; BULLET CPX #5 ; NEMESIS BEQ DOALLALNS ; 2nd BULLET LDY #0 ; OTHERWISE JSR DETECTION ; ENEMYS BCC BOO LDA #64+9 ; OUCH ! 1 STA FG2 LDA ENERGY CLC ADC #1 CMP #56*4+1 BCS POO STA ENERGY POO JMP TIOF ; NEMESIS ; ???? ; HAS BEEN HIT DOALLALNS LDY #1 JSR DETECTION BCS GOTONE INY ; 2 JSR DETECTION BCS GOTONE INY ; 3 JSR DETECTION BCS GOTONE INY ; 4 JSR DETECTION BCC BOO GOTONE LDA ACTION,Y CMP #8 BEQ ZOMBEE CMP #4 ; IF DOING BCS BOO ; THESE LDA #64+4 ; SPLAT 2 STA FG0 LDA #64+13 STA FG1 LDA HITS-1,Y ; WHAT ONE CLC ADC #1 CMP #1 ; 2 HITS BCS ITSDEAD ; FOR WARRIOR STOK STA HITS-1,Y JMP TIOF ITSDEAD LDA #&10 ; 10 TO SCORE JSR SADD SED LDA TOKILL SEC SBC #1 BCC AMOATN2 STA TOKILL AMOATN2 CLD LDA DIRECTION+0,Y CMP DBULLET+0,X BNE GOODONE EOR #255 STA DIRECTION+0,Y GOODONE LDA #4 ; WARRIOR DIE FLABB STA ACTION+0,Y LDA #0 STA HITS-1,Y STA COUNT+0,Y JMP TIOF ZOMBEE LDA #64+5 STA FG0 LDA #64+12 STA FG1 LDA HITS-1,Y CLC ADC #1 CMP #4 ; 4 HITS BCC STOK ; FOR ZOMBIE LDA #&80 ; 20 TO SCORE JSR SADD LDA DIRECTION+0,Y EOR #-1 STA DIRECTION+0,Y LDA #9 ; ZOMBIE DIE BNE FLABB DETECTION LDA BULLETX2,X ; SILLY CMP X,Y ; SOTWARE BCC LESSTHAN1 LDA X,Y CLC ADC #12 ; PIXELS X CMP BULLETX2,X BCS GREATER NO_HIT RTS LESSTHAN1 ADC #2 ; PIXELS X CMP X,Y BCC NO_HIT GREATER LDA BULLETY,X CMP Y,Y BCC LESSTHAN2 LDA Y,Y CLC ; 6 ADC #42-10 ; PIXELS Y CMP BULLETY,X RTS LESSTHAN2 ADC #1 ; PIXELS Y CMP Y,Y RTS ; SET ALL SPRITE POINTERS ; TO BLANK AND WIPE THEM OUT CLEARSPR LDX #0 ; WIPE LDA #BLNEM ; OUT NEMESIS JSR PLOTNEM ; TOP LDX #1 ; ALIEN 0 LDA #BLSPR ; TOP JSR PLOTSPR LDX #2 ; ALIEN 1 LDA #BLSPR ; TOP JSR PLOTSPR LDX #3 ; ALIEN 2 LDA #BLSPR ; TOP JSR PLOTSPR LDX #4 ; ALIEN 3 LDA #BLSPR ; TOP JSR PLOTSPR LDX #5 ; NEMESIS LDA #BLNEM ; BOTTOM JSR PLOTNEM LDX #6 ; ALIEN 0 LDA #BLSPR ; BOTTOM JSR PLOTSPR LDX #7 ; ALIEN 1 LDA #BLSPR ; BOTTOM JSR PLOTSPR LDX #8 ; ALIEN 2 LDA #BLSPR ; BOTTOM JSR PLOTSPR LDX #9 ; ALIEN 3 LDA #BLSPR ; BOTTOM JSR PLOTNEM LDX #10 ; NEMESIS LDA #BLNEM ; SIDE JSR PLOTSPR LDX #11 ; SIDE 0 LDA #BLSPR JSR PLOTSPR LDX #12 ; SIDE 1 LDA #BLSPR JMP PLOTNEM ; ********************** ; * ALL ALIEN MOVEMENT * ; * ROUTINES * ; ********************** AACTTABL DB < WWALK ; 0 DB < WFALL ; 1 DB < WJUMP ; 2 DB < WBANG ; 3 DB < WDIE ; 4 DB < WFALLD ; 5 DB < TWITCH ; 6 DB < TOZOMB ; 7 DB < ZWALK ; 8 DB < ZDIE ; 9 DB < PBOD ; 10 DB < AALIEN ; 11 DB < FALLA ; 12 AACTTABH DB > WWALK ; WARRIOR WALK DB > WFALL ; WARRIOR FALL DB > WJUMP ; WARRIOR JUMP DB > WBANG ; WARRIOR FIRE DB > WDIE ; WARRIOR DIE1 DB > WFALLD ; FALLING DIE DB > TWITCH ; BEFORE BURSTS DB > TOZOMB ; CHANGE TO ZOMBIE DB > ZWALK ; ZOMBIE WALK DB > ZDIE ; ZOMBIE DIE DB > PBOD ; PLOT BODY DB > AALIEN ; ANOTHER AL. DB > FALLA ; WARRIOR ALIENS LDX #1 JSR ALIENUP LDX #2 JSR ALIENUP LDX #3 JSR ALIENUP LDX #4 ALIENUP LDY ACTION+0,X LDA AACTTABL,Y STA MOVEM+1 LDA AACTTABH,Y STA MOVEM+2 MOVEM JSR &FFFF JSR HITNEMMY BCC NHITTH LDA ACTION+0,X CMP #8 ; ZOMBIE WALK BNE NOSOEF LDA #64+5 ; SPLAT 3 STA FG0 LDA #64+12 STA FG1 LDA ENERGY CLC ADC #1 CMP #56*4+1 BCS NOSOEF STA ENERGY NOSOEF LDA ENERGY CLC ADC #1 CMP #56*4+1 BCS NHITTH STA ENERGY NHITTH CPX #3 BCS RET2 LDA DIRECTION+0,X BPL FACRI5 LDA X+0,X SEC SBC #12 JMP STTI4 FACRI5 LDA X+0,X CLC ADC #12 STTI4 STA SIDEX+0,X RET2 LDA VALUES+5,X ; ADD 5 STA ATEMP ; SPR NUMBER LDA SPRITEV1+0,X STA ATEMP+1 ; POINTER STX ATEMP+2 LDA SPRITEV0+0,X JSR PLOTSPR LDX ATEMP LDA ATEMP+1 JSR PLOTSPR LDY ATEMP+2 CPY #3 BCS RET LDX VALUES+10,Y LDA SIDEB+0,Y JMP PLOTSPR RET RTS HITNEMMY LDA ACTION+0 ; IF DUCK CMP #3 BNE PASE LDA Y+0 CLC ADC #13 STA YTEMP LDA #42-7-13 ; -6 STA ATEMP JMP STRDET PASE LDA Y+0 STA YTEMP LDA #42-7 ; -6 STA ATEMP STRDET LDA X+0,X ; SILLY CMP X+0 ; SOTWARE BCC LESSTHAN6 LDA X+0 CLC ADC #12 ; PIXELS X CMP X+0,X BCS GREATER6 NO_HIT6 RTS LESSTHAN6 ADC #12 ; PIXELS X CMP X+0 BCC NO_HIT6 GREATER6 LDA Y+0,X CMP YTEMP BCC LESSTHAN7 LDA YTEMP CLC ADC ATEMP ; PIXELS Y CMP Y+0,X RTS LESSTHAN7 ADC #42-7 ; PIXELS Y CMP YTEMP RTS ; DIRECTION=0 FACEING RIGHT ; ACTION 0 WWALK JSR AWALK JSR RANDOM CMP #"M" BEQ FONZE CMP #"A" BNE SODIT FONZE LDA #2 BNE FLAPPER SODIT LDA WBULLET+0,X BNE FONZE2 ;CMP #"D" ;BEQ FIREE ;CMP #"L" ;BEQ FIREE CMP #"T" BNE FONZE2 FIREE LDA #3 BNE FLAPPER FONZE2 JSR AWHERE ; CHECK CMP #255 BEQ OPLAT ; ON PLAT JSR RANDOM AND #3 BEQ REVD ;CMP #3 ; TAKE ;BEQ REVD ; OUT FLAPPER STA ACTION+0,X ; FALL JUMP LDA #0 STA COUNT+0,X RTS REVD LDA DIRECTION+0,X EOR #255 ; REVERSED STA DIRECTION+0,X OPLAT RTS AWALK LDA FRAME+0,X CLC ADC #1 CMP #12 ; 6 BCC ASM LDA #0 ASM STA FRAME+0,X TAY LDA WWALKSTT,Y STA SPRITEV0+0,X LDA WWALKSTB,Y STA SPRITEV1+0,X LDA DIRECTION+0,X BMI AWALK2 ; GOING RIGHT LDA X+0,X CLC ADC WWALKTAB,Y CMP #148+12 BCS REVD STA X+0,X RTS AWALK2 LDA X+0,X SEC SBC WWALKTAB,X CMP #12 BCC REVD STA X+0,X RTS ; ACTION 1 WFALL LDY COUNT+0,X LDA Y+0,X CLC ADC DROPTAB,Y STA SPARE CMP #2*8 BCC NOYET2 CMP #18*8 BCS DELETI2 JSR LOOKUP2 ; SEE IF NEW CMP #255 BNE NOYET2 LDA SPARE AND #&F8 STA Y+0,X LDA #0 ; WALK STA ACTION+0,X ; ACTION LDA #0 STA COUNT+0,X RTS NOYET2 LDA SPARE STA Y+0,X INC COUNT+0,X JMP AWALK DELETI2 LDA #12 STA ACTION+0,X RTS ; ACTION 2 WJUMP LDY COUNT+0,X LDA Y+0,X SEC SBC JUMPTAB,Y STA Y+0,X INC COUNT+0,X LDA COUNT+0,X CMP #8 BNE SWARVE2 LDA #1 ; FALL STA ACTION+0,X STA COUNT+0,X CANT2 RTS SWARVE2 JMP AWALK ; ACTION 3 WBANG LDA WBULLET+0,X BNE CANT2 LDA #0 STA ACTION+0,X LDA DIRECTION+0,X BMI PANT2 LDA X+0,X CMP #&94 BCS CANT2 BCC HELOO PANT2 LDA X+0,X CMP #&1C BCC CANT2 HELOO LDA DIRECTION+0,X BMI MINYOR2 LDA X+0,X BNE LEFTATN2 MINYOR2 LDA X+0,X SEC SBC #12 LEFTATN2 STA BULLETX+0,X JSR WORKMEM JMP AWALK ; ACTION 4 WDIE CPX #3 BCC WDIE1 LDY COUNT+0,X ; TWO SPRITES LDA WDIESTT2,Y STA SPRITEV0+0,X LDA WDIESTB2,Y STA SPRITEV1+0,X LDA DIRECTION+0,X BPL FACRI6R LDA X+0,X CLC ADC DIEMOVTX2,Y CMP #148+8 BCS OTHERW STA X+0,X JMP STTI6R FACRI6R LDA X+0,X CMP #13 BCC OTHERW SEC SBC DIEMOVTX2,Y STA X+0,X STTI6R LDA Y+0,X CLC ADC DIEMOVTY2,Y STA Y+0,X INY CPY #9 BNE NEXMOV9R LDA #5 ; GO TO STA ACTION+0,X ; FALL LDY #0 NEXMOV9R STY COUNT+0,X RTS OTHERW LDA DIRECTION+0,X EOR #255 STA DIRECTION+0,X RTS WDIE1 LDY COUNT+0,X ; THREE SPRITES LDA WDIESTT1,Y STA SPRITEV0+0,X LDA WDIESTB1,Y STA SPRITEV1+0,X LDA WDIESTS1,Y STA SIDEB+0,X LDA DIRECTION+0,X BPL FACRI6 LDA X+0,X CLC ADC DIEMOVTX1,Y CMP #148+8 ;+12 BCS OTHERW STA X+0,X JMP STTI6 FACRI6 LDA X+0,X CMP #13 BCC OTHERW SEC SBC DIEMOVTX1,Y STA X+0,X STTI6 LDA Y+0,X CLC ADC DIEMOVTY1,Y STA Y+0,X LDA #21 STA SIDEY+0,X INY CPY #6 BCC NEXMOV9 BEQ STOPHER CPY #9 BCC NEXMOV9 ; PLOT BODY LDA #10 STA ACTION+0,X RTS STOPHER LDA #5 ; GO TO STA ACTION+0,X ; FALL LDY #0 NEXMOV9 STY COUNT+0,X RTS ; ACTION 5 WFALLD CPX #3 BCC WFALL1 LDY COUNT+0,X ; TWO SPRITES LDA DIRECTION+0,X BPL TAKEAWAY1 LDA X+0,X CLC ADC #2 CMP #148+12 BCS ATEDGE BCC NTHRH TAKEAWAY1 LDA X+0,X SEC SBC #2 CMP #13 BCC ATEDGE BCS NTHRH WFALL1 LDY COUNT+0,X ; THREE SPRITES LDA DIRECTION+0,X BPL TAKEAWAY LDA X+0,X CLC ADC #2 CMP #148+4 ;+12 BCS ATEDGE BCC NTHRH TAKEAWAY LDA X+0,X SEC SBC #2 CMP #13+12 BCC ATEDGE NTHRH STA X+0,X ATEDGE LDA Y+0,X CLC ADC DROPTAB,Y STA SPARE CMP #2*8 BCC NOYET3 CMP #18*8 BCS DELETI JSR LOOKUP2 ; SEE IF NEW CMP #255 BNE NOYET3 LDA SPARE AND #&F8 STA Y+0,X LDA #10 ; PLOT BODY STA ACTION+0,X ; ACTION RTS NOYET3 LDA SPARE STA Y+0,X INC COUNT+0,X RTS DELETI LDA #12 STA ACTION+0,X RTS ; ACTION 6 TWITCH INC COUNT+0,X LDA COUNT+0,X CMP #60 ; HOW MANY BNE STHERY LDA #0 STA COUNT+0,X LDA #7 STA ACTION+0,X RTS STHERY CPX #3 BCS TWITCH1 JSR RANDOM AND #%00001100 LSR A LSR A TAY LDA CHANGET2+0,Y STA SPRITEV0+0,X LDA CHANGEB2+0,Y STA SPRITEV1+0,X LDA CHANGES2,Y STA SIDEB+0,X SOEFX CPY #1 BNE NOSSE LDA #64+10 STA FG0 LDA #64+13 STA FG1 NOSSE RTS TWITCH1 JSR RANDOM AND #%00001100 LSR A LSR A TAY LDA CHANGET1,Y STA SPRITEV0+0,X LDA CHANGEB1,Y STA SPRITEV1+0,X JMP SOEFX ; ACTION 7 TOZOMB LDA TOGGLE-1,X EOR #-1 STA TOGGLE-1,X BEQ OPLAT2 CPX #3 BCC TOZOMB1 LDY COUNT+0,X LDA CHANGET1,Y STA SPRITEV0+0,X LDA CHANGEB1,Y STA SPRITEV1+0,X INY STY COUNT+0,X CPY #7 BEQ TOSEFX CPY #16 BNE NEXMOV7 ZOMWL LDA #BLSPR STA SIDEB+0,X LDA #8 ; ZOMBIE STA ACTION+0,X ; WALKING LDY #0 STY MOVES-1,X NEXMOV7 STY COUNT+0,X RTS TOSEFX LDA #64+4 STA FG0 LDA #64+13 STA FG1 RTS TOZOMB1 LDY COUNT+0,X LDA CHANGET2,Y STA SPRITEV0+0,X LDA CHANGEB2,Y STA SPRITEV1+0,X LDA CHANGES2,Y STA SIDEB+0,X INY CPY #25 BEQ ZOMWL STY COUNT+0,X CPY #5 BNE DESD LDA #64+7 STA FG2 DESD RTS ; ACTION 8 ; DIRECTION=0 FACEING RIGHT ZWALK JSR EWALK JSR AWHERE ; CHECK CMP #255 BEQ OPLAT2 ; ON PLAT LDA DIRECTION+0,X EOR #255 ; REVERSED STA DIRECTION+0,X INC MOVES-1,X LDA MOVES-1,X CMP #5 BNE OPLAT2 LDA #9 ; ZOMBIE DIE STA ACTION+0,X LDA #0 STA COUNT+0,X OPLAT2 RTS EWALK LDA FRAME+0,X CLC ADC #1 CMP #7 BCC ASM2 LDA #0 ASM2 STA FRAME+0,X TAY LDA ZWALKSTT,Y STA SPRITEV0+0,X LDA ZWALKSTB,Y STA SPRITEV1+0,X LDA DIRECTION+0,X BMI AWALK3 ; GOING RIGHT LDA X+0,X CLC ADC ZWALKTAB,Y CMP #148+12 BCS JREVD STA X+0,X RTS AWALK3 LDA X+0,X CMP #12 BEQ JREVD SEC SBC ZWALKTAB,X STA X+0,X RTS ; ACTION 9 ZDIE LDA TOGGLE-1,X EOR #-1 STA TOGGLE-1,X BEQ OPLAT2 LDY COUNT+0,X LDA ZDIESTT,Y STA SPRITEV0+0,X LDA ZDIESTB,Y STA SPRITEV1+0,X LDA #0 STA SIDEY+0,X INY STY COUNT+0,X CPY #10 BEQ SPLL CPY #15 BNE NEXTMOV8 LDY #12 ; NEW STY ACTION+0,X ; WARRIOR NEXTMOV8 RTS SPLL LDA #64+1 STA FG0 RTS JREVD LDA DIRECTION+0,X EOR #255 STA DIRECTION+0,X RTS ; ACTION 10 PBOD STX XTEMP LDA #BLSPR ; BL STA SPRITEV0+0,X STA SPRITEV1+0,X STA SIDEB+0,X LDA Y+0,X LSR A LSR A LSR A TAY DEY DEY LDA DIRECTION+0,X BPL PERF CPX #3 ; DAVE BCC MINDER LDA X+0,X CLC ADC #4 JMP SPLO MINDER LDA X+0,X SEC SBC #4 JMP SPLO PERF LDA X+0,X SEC SPLO SBC #12 LSR A LSR A TAX CPX #39 BCC UIR LDX #0 UIR JSR MEMXY LDX XTEMP ; 1 & 2 LDY WHONE-1,X LDA X+0,X STA LASTX,Y LDA Y+0,X STA LASTY,Y CPX #3 ; BIG BODYIES BCS SMONES LDY #(5*8)-1 LDA DIRECTION+0,X BMI REVERD SUCKT2 LDA BODYLE2,Y STA SBACK1+1 SBACK1 LDA SBACKD AND (TEMP),Y ORA BODYLE2,Y STA (TEMP),Y DEY BPL SUCKT2 JMP INTOMAP REVERD LDA RBODYLE2,Y STA RSBACK1+1 RSBACK1 LDA SBACKD AND (TEMP),Y ORA RBODYLE2,Y STA (TEMP),Y DEY BPL REVERD INTOMAP LDY #0 JSR C INY JSR C JMP LASTFEW SMONES LDY #(3*8)-1 SUCKT LDA BODYLE1,Y STA SBACK2+1 SBACK2 LDA SBACKD AND (TEMP),Y ORA BODYLE1,Y STA (TEMP),Y DEY BPL SUCKT LASTFEW INY ; 0 JSR C INY ; 1 JSR C INY ; 2 C LDA #%00000000; NYBBLE STA (TEMP2),Y LDA #%01101100; COLOUR STA (TEMP3),Y LDA #255 ; IN MAP STA (TEMP4),Y LDA #11 STA ACTION+0,X RTS ; ANOTHER ALIEN ; DELAY ; BRING ON ZOMBIE/WORRIOR ? ; ACTION 11 AALIEN JSR RANDOM CMP #230 BCS ZOXS LDA FACE SEC SK SBC SEEDD+1 BCS SK ADC SEEDD+1 BNE FALLA ZOXS LDY WHONE-1,X LDA LASTX,Y STA X+0,X ORA LASTY,Y BEQ FALLA LDA LASTY,Y STA Y+0,X LDA #6 ; TWITCH STA ACTION+0,X ; ZOMBIE LDA #0 STA COUNT+0,X RTS ; BRING ON WARRIOR ONLY ; ACTION 12 FALLA LDA #1 ; FALL STA ACTION+0,X STA COUNT+0,X LDA DIRTV+0,X STA DIRECTION+0,X JSR RANDOM AND #3 TAY LDA ALIENPOST,Y STA X+0,X LDA #0 STA Y+0,X CPX #3 BCS SHIT LDA #BLSPR STA SIDEB+0,X SHIT RTS LASTX DB 0,0 LASTY DB 0,0 WHONE DB 0,0,1,1 DIRTV DB 0,255,255,0 ALIENPOST DB 0+14,45+12,90+12,172-14 BODYLE1 DB &C,&3F,&3F,&FF,&FF,&FF,&FF,&3C DB &54,&77,&FF,&FF,&77,&77,&77,&FC DB &C0,&F0,&F0,&FC,&FC,&FC,&FC,&F0 BODYLE2 DB &0,&3,&E,&E,&3F,&D,&F,&3F DB &3C,&EB,&EB,&9F,&77,&DE,&FF,&CF DB &0,&F0,&FF,&FF,&AB,&96,&75,&FF DB &F,&FE,&AF,&9F,&FC,&EB,&EB,&FC DB &0,&C0,&C0,&70,&F0,&FC,&FF,&FF RBODYLE2 DB &0,&3,&3,&D,&F,&3F,&FF,&FF DB &F0,&BF,&FA,&F6,&3F,&EB,&EB,&3F DB &0,&F,&FF,&FF,&EA,&96,&5D,&FF DB &3C,&EB,&EB,&F6,&DD,&B7,&FF,&F3 DB &0,&C0,&B0,&B0,&FC,&70,&F0,&FC INFO "R.GAME " --------------------------------------------------------------------------------