;z80 ;zx-spectrum ;assembler ;INTRO+BUMPMAP Dark/X-Trade'97 ;******************************* ;* BUMPMAP KILL STS!!! * ;* SELF-KILLING CODE * ;* ONE ASSEMBLY - ONE START * ;******************************* ;***** REMOVED INT-TABLE ******* ;- TIME CONSTANTS -------------- TFLBEG EQU 360;FLAME BEGIN TFLEND EQU 575;FLAME END TLGBEG EQU 145;SHOW LOGO TPRES EQU 199;SHOW "PRESENTS" TFLEXIT EQU 672;EXIT INTRO 672 TRGBEG EQU 767;START RAGE TRGHIDE EQU 1392;HIDE RAGE TRGEND EQU 1442;END RAGE LGCOLR EQU #47;LOGO COLOR BMCOLR EQU #06;BUMP COLOR ;SHARED INT EQU #5E00 INT2 EQU INT+#0100+(INT[)+1 INTSP EQU #5B90 MUSICI EQU #C000 MUSIC EQU MUSICI+6 ;- INTRO SPECIFIC -------------- WDT EQU 64 HGT EQU 20;----CHANGE FSTR EQU #1C;FLAME START Y LSTR EQU #00 LOGOX EQU 3 LWDT EQU 26 LHGT EQU 10 CHUNKY EQU #8000 DTBASE EQU #9400;,288 LSATB EQU #9E00 LOGODT EQU #A000; FDTAB EQU #B000;1K -DITHER TAB FSATB EQU #B400;SCR ADDRESS FLBASE EQU #B500;,#680 ;- BUMPMAP SPECIFIC ------------ CSTB EQU #F800;COS/SIN [512] BUMPSRC EQU #C000;SOURCE BUMPMAP BMOTMP EQU #8000;XY OFFS TEMP LSRC EQU #6400;LIGHT SRC SPRT ;SIZE=#1800 ;X/Y/X/Y IN SEGMENT LSCNT EQU #2E TMPCOS EQU LSRC+(LSCNT') BSATB EQU #DB00;SCR0 ADR BDTAB EQU #DC00;1K -DITHER TAB BMOFFS EQU #E000;X/Y OFFSETS BMBASE EQU #F800;BUMPMAP CODE LSL4 EQU #FF00;C<<4 SMOOTH EQU 21;_<_'__''_ OFFSET EQU #3E;ADR CORRECTION LZ EQU 8;'>'_'_ _''.'':'_ ;__"_"'> "'_+:___ _''-__ '':'_ SCALE EQU 1 RADX EQU 18*SCALE RADY EQU 7*SCALE STEPX EQU #02A2 STEPY EQU #0333 HSTEP EQU 1 ;__"_"'> "':<_-:_> ' SCALE __+ ;_T_ SCALING ;_____:'_> _-__ WSTRT EQU #00;*8 PIX WHGT EQU #18;MAX=#18 BBANK EQU #57 BANKM EQU #56;MUSIC BANK ;------------------------------- ; SCREEN 0, ATTR #00 ; MUSIC WAS INSTALLED ORG #6000 DI LD (MAINSP),SP ; LD A,BANKM:OUT (#FD) ; LD HL,LMUS ; LD BC,ELMUS-LMUS ; LD DE,MUSICI:LDIR LD A,#57:OUT (#FD) LD A,LGCOLR CALL CLSCR LD HL,INT LD A,H:LD I,A IM 2 INC A LD (HL),A:INC L JR NZ,$-2 INC H:LD (HL),A LD A,#C3 LD (INT2),A LD HL,INTSRV LD (INT2+1),HL XOR A:LD (USTAT),A LD H,A,L,A:LD (TIME),HL LD A,#37:LD (ISV2A),A LD A,#5F:LD (BANK),A EI CALL PART0 LD HL,USTAT:SET 0,(HL) LD A,BMCOLR CALL CLATTR LD A,BBANK:CALL SBANK CALL BINIT LOOP7 HALT LD HL,(TIME) LD DE,TRGBEG OR A:SBC HL,DE JR C,LOOP7 LD HL,0 LD (ISV1+1),HL LD HL,#8000 LD (ISV2+1),HL LD A,BBANK:CALL SBANK LOOP8 LD HL,BANK LD A,(HL) XOR 8:LD (HL),A EI:HALT LSPOS LD DE,0;INT-MODIFIED CALL BUMPMAP JR LOOP8 MAINSP EQU $+1 EXIT LD SP,0 LD HL,#C9FB,(INTSRV),HL LD A,BANKM:OUT (#FD) CALL HATR0 EI:HALT CALL MUSIC RET ;H,L-LIGHT SOURCE Y,X POS BUMPMAP LD (BMP2+1),SP LD A,OFFSET+LSCNT:ADD A,D NEG:LD D,A LD A,E:OR #80:NEG:LD E,A LD B,LSL4[ EXX LD B,BDTAB[ LD HL,BSATB+WSTRT*4 LD A,(BANK) AND 8:JR Z,BMP1 LD L,#80+WSTRT*4 BMP1 LD LX,WHGT*2 LD SP,BMOFFS+(WSTRT') JP BMBASE BMP2 LD SP,0 RET INTSRV LD (ISP+1),SP LD (ISP1+1),SP LD SP,INTSP PUSH AF,HL,DE,BC,IX EXX:EXA PUSH AF,HL,DE,BC,IY LD A,(BANK):XOR 8 PUSH AF LD (ISP2+1),SP ISP LD SP,0 POP HL:LD (INTJP+1),HL LD (ISP3+1),SP LD SP,(ISP2+1) AND 8:OR BANKM:OUT (#FD),A CALL MUSIC LD HL,(TIME) LD DE,TRGEND OR A:SBC HL,DE JP NC,EXIT LD HL,USTAT:BIT 0,(HL) JP Z,ISV LD A,#50:OUT (#FD),A ISV1 LD HL,0 LD BC,STEPY ADD HL,BC LD (ISV1+1),HL LD L,H:LD H,CSTB[ LD D,(HL) ISV2 LD HL,0 LD BC,STEPX ADD HL,BC LD (ISV2+1),HL LD L,H:LD H,(CSTB[)+1 LD E,(HL) ;.2 SRL E:SRL D;SCALING LD HL,LSPOS+2 LD (HL),D:DEC HL ISV2A SCF:JR NC,ISV2B LD (HL),E ISV2B LD HL,(TIME) LD DE,TRGHIDE OR A:SBC HL,DE JR C,ISP1 LD A,#B7:LD (ISV2A),A LD HL,LSPOS+1 LD A,(HL) ADD A,HSTEP CP #80:JR C,$+4:LD A,#80 LD (HL),A ;RESTORE BUMP OFFSETS (BANK #50) LD HL,0:LD (#BFBE),HL ISP1 LD HL,0:LD A,H SUB BMOFFS[:JR C,ISV0 CP #18:JR NC,ISV0 LD SP,HL:POP HL LD A,BBANK:OUT (#FD),A PUSH HL ISV0 LD HL,(TIME) INC HL LD (TIME),HL ISP2 LD SP,0 POP AF:OUT (#FD),A POP IY,BC,DE,HL,AF EXX:EXA POP IX,BC,DE,HL,AF ISP3 LD SP,0 EI INTJP JP 0 ;A-COLOR CLATTR CALL HIDEATR CLSCR LD HL,#57FF LD B,A:LD C,0 CALL CLATR LD HL,#D7FF CLATR LD (HL),C:DEC HL BIT 6,H:JR NZ,CLATR INC HL LD A,H:ADD A,#18:LD H,A CLAT1 LD (HL),B:INC HL:LD A,H RRA:JR NC,CLAT1 RRA:JR NC,CLAT1 RET HIDEATR LD HL,BANK LD (HL),#5F EI:HALT HATR0 LD HL,#5800 LD DE,#5801 LD BC,#02FF LD (HL),L LDIR RET BINIT ;BUMP INIT PROG CALL VECTRZ LD DE,BDTAB LD HL,DTDAT2 CALL CRDTB LD IX,BSATB CALL CRSATB CALL DCRBMC CALL CRCOS LD A,#50:CALL SBANK LD HL,TMPCOS+#0100 LD DE,CSTB LD BC,512 LDIR LD HL,LSRC+((LSCNT-1)') LD DE,HL:INC D LD A,LSCNT CCOS3 LD BC,256:LDIR DEC H,H DEC A:JR NZ,CCOS3 RET SBANK LD (BANK),A OUT (#FD),A RET ;VARS BANK DB 0 LOGOCOL DB 0 TIME DW 0 USTAT DB 0 ;PART (0) ;RNDENA (1) ;PRES (2) ;***************************** ; CURRENT ADDRESS #61CC ;THIS CODE WILL B KILLED BY cstb ; AND CLEAR MEM UP TO #6400 ! ;***************************** ;__'":_ '':'_'_: __'__ _ '__"'> CRCOS LD HL,COSDAT LD DE,TMPCOS LD BC,#0100 LDIR ;CLEAR LIGHT SRC - LSRC,#2700 LD HL,0 LD DE,HL ADD HL,SP LD SP,LSRC+(LSCNT') _LD BC,((LSCNT<<4)[)+((LSCNT)<<12)+1 CLSRC .8 PUSH DE DJNZ $-8 DEC C:JR NZ,CLSRC LD SP,HL LD IX,OCTSTEP LD HL,LSRC+((LSCNT-1)')+#80 LD DE,HL:DEC E EXX LD LY,0 CCOS1 LD A,LY:LD L,A LD H,TMPCOS[ LD A,(HL):AND #F0 LD (CCOS2A+1),A;RADIUS LD C,(IX),B,(IX+1) INC IX,IX LD HL,0:LD (CCOS2+1),HL CCOS2 LD HL,0:ADD HL,BC LD (CCOS2+1),HL LD A,H:EXA LD L,H:LD H,TMPCOS[ LD E,(HL) CCOS2A LD H,0 LD D,0:LD L,D CALL MUL+4*4 EXX LD (HL),A:INC L LD (DE),A:DEC E EXX EXA:CP #80 JR C,CCOS2 EXX DEC H:LD L,#80 DEC D:LD E,#7F EXX LD A,LY:ADD A,4:LD LY,A CP #80:JR C,CCOS1 LD HL,TMPCOS LD DE,TMPCOS+#0100 LD BC,TMPCOS+#0240 CCOS4 LD A,(HL):INC L EXX LD E,A LD H,(RADX*2)<<2 EXA LD D,0:LD L,D CALL MUL+2*4 ADD A,32*SCALE-RADX EXA LD E,A LD H,(RADY*2)<<2 LD L,D CALL MUL+2*4 ADD A,24*SCALE-RADY EXX LD (DE),A:EXA LD (BC),A INC C,E JR NZ,CCOS4 RET MUL .8 ADD HL,HL:JR NC,$+3:ADD HL,DE LD A,H RET ;128/WIDTH OCTSTEP DS 8,"@2104" DS 4,"@3104" DS 8,"@4404" DS 6,"@6A04" DS 4,"@9204" DS 4,"@BE04" DW #04EC,#051F DS 4,"@5505" DW #0591,#05D1,#0618 DW #0666,#071C,#0788 DW #0800,#0925,#0AAB DW #0E39,#199A COSDAT INCB "COSFF" PART0 LD HL,SCRDAT LD DE,LOGODT LD BC,#0820 LDIR CALL FINIT LD A,#0F LD (LOGOCOL),A LOOP LD HL,BANK LD A,(HL) XOR #0A:LD (HL),A EI:HALT LD HL,(TIME) LD DE,TLGBEG OR A:SBC HL,DE JR C,LOOP1 LD HL,(TIME) LD DE,TLGBEG+2 OR A:SBC HL,DE JR NC,LOOP1 CALL DITLOGO LOOP1 LD HL,(TIME) LD DE,TFLBEG OR A:SBC HL,DE JR C,LOOP5 LD HL,(TIME) LD DE,TFLEND XOR A:SBC HL,DE JR C,LOOP4 LD HL,USTAT:SET 1,(HL) LOOP4 CALL FLAME LOOP5 LD HL,(TIME) LD DE,TPRES OR A:SBC HL,DE JR C,LOOP6 LD HL,USTAT:SET 2,(HL) LOOP6 LD HL,(TIME) LD DE,TFLEXIT OR A:SBC HL,DE JP C,LOOP RET FLAME LD HL,USTAT:BIT 1,(HL) JR NZ,RNDOFF CALL RND FLAM LD DE,CHUNKY LD HL,CHUNKY+256+255 LD B,#0F EXX LD HL,FSATB+FSTR*2 FLM1 LD B,FDTAB[ LD LX,HGT-1 FLM2 LD E,(HL):INC L LD D,(HL):INC L CALL FLBASE EXX INC H:LD L,#FF INC D:LD E,0 EXX DEC LX:JR NZ,FLM2 RET RNDOFF LD A,(LOGOCOL) SUB 1:JR NC,$+3 XOR A LD (LOGOCOL),A CALL DITLOGO LD HL,CHUNKY+(HGT-1)*256 LD B,WDT:XOR A LD (HL),A:INC L DJNZ $-2 JR FLAM RND LD DE,CHUNKY+(HGT-1)*256 RND0 LD HL,#1021 LD B,WDT RND1 ADD HL,HL JR NC,RND2 LD A,R:XOR L OR 10:LD L,A RND2 LD A,L AND #3F LD (DE),A:INC E DJNZ RND1 LD (RND0+1),HL RET ;SP-DATA ;C-MASK ;HL-SCR ;IY-JUMP DITLOGO DI LD (DLG5+1),SP LD HL,LSATB+LSTR*2 DLG1 LD (DLG3+1),HL LD LX,LHGT*8/4 LD IY,DLG4 LD A,(LOGOCOL) CP #0F JR C,$+4:LD A,#0F ADD A,A,A,A ADD A,DTDAT]:LD E,A ADC A,DTDAT[:SUB E LD D,A LD BC,DE EXX LD SP,LOGODT DLG2 LD B,4 DLG3 LD HL,0 LD E,(HL):INC L LD D,(HL):INC L LD (DLG3+1),HL EX DE,HL EXX LD A,(DE):INC DE EXX LD C,A JP DTBASE DLG4 DJNZ DLG3 EXX LD DE,BC EXX DEC LX:JR NZ,DLG2 DLG5 LD SP,0 EI RET ;-FLAME PART OF INTSERVER ISV LD A,(BANK):XOR #0A OUT (#FD),A ISVA LD A,#42;FLAME XOR #40 LD (ISVA+1),A LD E,A,D,A LD SP,#DB00 LD B,20 .8 PUSH DE DJNZ $-8 LD SP,#D937 XOR A LD HL,USTAT:BIT 2,(HL) JR Z,PRSN0 PRSN LD A,#42 XOR 1 LD (PRSN+1),A PRSN0 LD E,A:LD D,A LD B,2 PRSN1 .6 PUSH DE LD HL,11-32 ADD HL,SP:LD SP,HL DJNZ PRSN1 JP ISV0 ;---------------- FINIT LD HL,0:LD DE,HL ADD HL,SP LD SP,CHUNKY+(HGT') LD C,HGT FILL1 LD B,#10 .8 PUSH DE DJNZ $-8 DEC C:JR NZ,FILL1 LD SP,HL CALL DCFLM LD DE,FDTAB LD HL,DTDAT CALL CRDTB LD IX,FSATB LD HL,#C000 CALL CSAT ;SCREEN ADR TABS ;1*1+LOGOX LD HL,#C000+LOGOX LD IX,LSATB CLSAT LD B,128 CLSAT0 LD (IX+0),L LD (IX+1),H .2 INC IX INC H:LD A,H AND 7:JR NZ,CLSAT1 LD A,L:ADD A,#20:LD L,A JR C,CLSAT1 LD A,H:SUB 8:LD H,A CLSAT1 DJNZ CLSAT0 RET ;DEPACKING BUMP DATA ;2 DEPTH (4b) PACKED IN ONE BYTE DPCBMAP LD HL,BUMPDAT LD DE,BUMPSRC LD C,48 DPBM1 LD B,32 DPBM2 LD A,(HL) .4 RRCA AND #0F :CP 9 JR C,$+4:LD A,8 LD (DE),A:INC E LD A,(HL):INC HL AND #0F :CP 9 JR C,$+4:LD A,8 LD (DE),A:INC E DJNZ DPBM2 XOR A:LD (DE),A INC D:LD E,A DEC C:JR NZ,DPBM1 LD (DE),A:INC E JR NZ,$-2 RET ;':_'___+_-__ ;X/Y OFFSET=(LZ-Z1)*(Z2-Z1)+X/Y VECTRZ LD A,#50:CALL SBANK CALL DPCBMAP LD HL,BUMPSRC LD IX,BMOTMP PUSH HL,IX VCT1 LD C,(HL):INC L;Z1 CALL VCTX ADD A,L:DEC A LD (IX+0),A INC LX,LX BIT 6,L JR Z,VCT1 DEC LX:INC IX INC H:LD L,0 LD A,H:CP (BUMPSRC[)+48 JR C,VCT1 POP IX,HL INC LX LD LY,64 VCT3 LD B,48 VCT4 LD C,(HL):INC H;Z1 CALL VCTX LD C,A LD A,H:DEC A AND #3F ADD A,C LD (IX+0),A LD DE,#80 ADD IX,DE DJNZ VCT4 INC L:LD H,BUMPSRC[ INC LX,LX:LD HX,BMOTMP[ DEC LY:JR NZ,VCT3 LD HL,BMOTMP LD DE,BMOFFS LD BC,#1800 PUSH HL,DE,BC LDIR LD A,BBANK:CALL SBANK POP BC,DE,HL LDIR LD HL,LSL4 LD C,#0F MLSL LD A,L:AND C .4 RLCA LD (HL),A:INC L JR NZ,MLSL RET VCTX LD A,(HL);Z2 SUB C EXA;Z2-Z1 [+-] LD A,LZ SUB C;LZ-Z1 PUSH HL LD E,A EXA;+-SIGN JR NC,$+6:NEG:RR C LD L,0:LD D,L .3 ADD A,A LD H,A .5 ADD HL,HL:JR NC,$+3:ADD HL,DE LD A,L CP SMOOTH:JR C,$+4:LD A,SMOOTH RL C:JR C,$+4:NEG ;BUMP OUT=C (IN=NC) POP HL RET ;SCREEN ADDRESS TABLE 4*4 ;IX-TABLE ADR (___'_'>%) CRSATB LD HL,#4000 CALL CSAT LD HL,#C000 LD LX,#80 CSAT LD B,48 CSAT0 LD (IX+0),L LD (IX+1),H .2 INC IX LD A,H:ADD A,4:LD H,A AND 7:JR NZ,CSAT1 LD A,L:ADD A,#20:LD L,A JR C,CSAT1 LD A,H:SUB 8:LD H,A CSAT1 DJNZ CSAT0 RET ;CREATE DITHER TABLE ;DE-TABLE ADR ;HL-DITHER DAT CRDTB LD (CRDD1+1),HL LD BC,4:ADD HL,BC LD (CRDD2+1),HL EX DE,HL CRDT0 LD A,L:AND #F0 .2 RRCA CRDD1 LD DE,DTDAT ADD A,E:LD E,A ADC A,D:SUB E:LD D,A LD B,4 CRDT1 LD A,(DE):INC DE AND #F0 LD (HL),A:INC H DJNZ CRDT1 LD A,L:AND #0F .2 RLCA CRDD2 LD DE,DTDAT+4 ADD A,E:LD E,A ADC A,D:SUB E:LD D,A LD B,4 CRDT2 DEC DE:LD A,(DE) AND #0F DEC H:OR (HL) LD (HL),A DJNZ CRDT2 INC L:JR NZ,CRDT0 RET ;DCR FLAME CODE DCFLM LD DE,FLBASE LD B,0 LD A,WDT/4 DCFLM1 LD HL,FLCD LD C,EFLCD-FLCD LDIR LD HL,DTCD1 LD C,DTCD2-DTCD1 LDIR LD HL,FLCD LD C,EFLCD-FLCD LDIR LD HL,DTCD2 LD C,EDCD-DTCD2 LDIR DEC A:JR NZ,DCFLM1 DEC DE LD A,#C9:LD (DE),A LD A,LWDT/2 LD DE,DTBASE DCDIT1 LD HL,DTCD LD C,EDTCD-DTCD LDIR DEC A JR NZ,DCDIT1 DEC DE:EX DE,HL LD (HL),#FD:INC HL LD (HL),#E9 RET ;DCR BUMPMAP CODE DCRBMC LD DE,BMBASE LD HL,BMPC LD BC,BMPC1-BMPC LDIR PUSH HL LD A,16 DCRBC LD HL,BMCD LD C,EBMCD-BMCD LDIR LD HL,DTCD1 LD C,DTCD2-DTCD1 LDIR LD HL,BMCD LD C,EBMCD-BMCD LDIR LD HL,DTCD2 LD C,EDCD-DTCD2 LDIR DEC A:JR NZ,DCRBC DEC DE POP HL LD C,BMPC2-BMPC1 LDIR LD A,#C9:LD (DE),A RET ;FLAME MAIN LOOP ;HL-CHUNKY+64 ;DE-CHUNKY ;B=#0F-MASK ;DE'-SCR ;B'-DTAB ;LITTLE PIECE OF LAME CODE ;TRY TO RIP X-PLAYER2.1 4 GS! ;WHICH I START TO CODE ;AT THE END OF THIS DEMO FLCD EXX LD A,(DE) ADD A,(HL):INC L ADD A,(HL):INC L ADD A,(HL):DEC L LD C,A RRA:SRL A JR Z,$+3:DEC A LD (DE),A:INC E LD A,(DE) ADD A,(HL):INC L ADD A,(HL):INC L ADD A,(HL):DEC L RRA:SRL A JR Z,$+3:DEC A LD (DE),A:INC E RRA:RRA XOR C AND B;#0F XOR C EXX LD C,A EFLCD ;DITLOGO MAIN LOOP ;SP-DATA ;C-MASK ;HL-SCR DTCD POP DE LD A,E:AND C LD (HL),A:INC L LD A,D:AND C LD (HL),A:INC L EDTCD ;BUMPMAP MAIN LOOP (64 PIX) ;DE - SCREEN ;BC - DTAB ;E' - LIGHT SOURCE X POS ;D' - -(#3E+LSCNT+LS Y POS) ;B' - TABLE "<<4" BMCD EXX POP HL ADD HL,DE LD C,(HL) LD A,(BC) POP HL ADD HL,DE OR (HL) EXX LD C,A EBMCD DTCD1 .3 LD A,(BC),(DE),A:INC B,D LD A,(BC),(DE),A:INC E DTCD2 .3 LD A,(BC),(DE),A:DEC B,D LD A,(BC),(DE),A:INC E EDCD BMPC LD E,(HL):INC L LD D,(HL):INC L BMPC1 DEC LX:JP NZ,BMBASE JP BMP2 BMPC2 DTDAT ;16 COLORS DITHER DATA DB #00,#00,#00,#00 DTDAT2 DB #00,#00,#00,#00 DB #88,#00,#00,#00 DB #88,#00,#22,#00 DB #AA,#00,#22,#00 DB #AA,#00,#AA,#00 DB #AA,#44,#AA,#00 DB #AA,#44,#AA,#11 DB #AA,#55,#AA,#55 DB #AA,#DD,#AA,#77 DB #AA,#77,#AA,#FF DB #AA,#FF,#AA,#FF DB #AA,#FF,#BB,#FF DB #EE,#FF,#BB,#FF DB #EE,#FF,#FF,#FF DB #FF,#FF,#FF,#FF DB #00,#00,#00,#00 BUMPDAT INCB "RAGE16" SCRDAT INCB "intrc" LMUS INCB "M.EXE" ELMUS ECODE