home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / basq / source / mystic / intro / intro.asm < prev    next >
Encoding:
Assembly Source File  |  1993-06-20  |  10.3 KB  |  546 lines

  1. INCLUDE         D:\POWERU\PWRFUNC.INC
  2.  
  3.         MODPLAY        EQU    64
  4.         PICTUREDATA    EQU    MODPLAY+1369
  5.         MUZSAKDATA    EQU    PICTUREDATA+4048
  6.         SCREENMASK    EQU    MUZSAKDATA+13570
  7.         EXTERNDATA    EQU    SCREENMASK+4048
  8.  
  9. DOSSEG
  10. .386
  11. .MODEL USE16 SMALL
  12. .STACK
  13. .DATA
  14.  
  15.         INTERRUPTNUM        DB      5
  16.         SBADDRESS        DW      220H
  17.         SAMPLERATE        DW      22050
  18.         EYEDISTANCE        DW      512
  19.         ORIGO_X            DW    159
  20.         ORIGO_Y            DW    99
  21.         ORIGO_Z            DW    200
  22.         MODULEPLAYER        DW    0,0
  23.         CALC1            DW    0
  24.         CALC2            DW    0
  25.         CALC3            DW    0
  26.         CALC4            DW    0
  27.         CALC5            DW    0
  28.         CALC6            DW    0
  29.         CALC7            DW    0
  30.         CALC8            DW    0
  31.         CALC9            DW    0
  32.         SINALFA            DW    0
  33.         SINBETA            DW    0
  34.         SINGAMMA        DW    0
  35.         COSALFA            DW    0
  36.         COSBETA            DW    0
  37.         COSGAMMA        DW    0
  38.         NOTMEM            DB    '350KB MEMORY REQUIRED FOR RUNNING!!',13,10,'$'
  39.         INTROEVENTDATA        DW    RESETANGLES,0,0
  40.                     DW    RESETSM,0,0
  41.                     DW    EMPTYCIK,0,50
  42.                     DW    STARMOVING,0,735
  43.                     DW    SETROTATEDATA,0,0
  44.                     DW    SETMETADATA,0,0
  45.                     DW    METAMORPHING,1,METAMORPHLENGTH
  46.                     DW    ROTATEHEAD,0,250
  47.                     DW    SETDELAYVON,0,0
  48.                     DW    COPYFACE1,0,0
  49.                     DW    SETMETADATA,0,0
  50.                     DW    METAMORPHING,1,METAMORPHLENGTH
  51.                     DW    ROTATEHEAD2,0,200
  52.                     DW    PRESETFADING,0,0
  53.                     DW    FADEUPCIK,0,0
  54.                     DW    RESTORESTARS,0,0
  55.                     DW    SETMETADATA,0,0
  56.                     DW    METAMORPHING2,1,METAMORPHLENGTH2
  57.                     DW    0,0FFFFH
  58.         STARSPEED        DW      3
  59.         METAMORPHLENGTH        DW    185
  60.         METAMORPHLENGTH2    DW    768
  61.         METAMORPHCIK        DW    0
  62.         PRESENTBACKGRND        DW    1000;0
  63.         PREVIOUSBACKGRND    DW    0;0
  64.         STARS            DW    1500 DUP(0)
  65.         INCLUDE        DATAS.DB
  66.         INCLUDE         FACE.DAT
  67.  
  68.         COLORPRESET        DB    768 DUP(0)
  69.  
  70. .CODE
  71.  
  72. STARTUP:        ;/////////////////////
  73.         PUSH    DGROUP
  74.         POP    DS
  75.         ;/////////////////////
  76.         MOV    AX,SS
  77.         ADD    AX,EXTERNDATA
  78.         MOV    FS,AX
  79.         ;/////////////////////
  80.         MOV    AX,SS
  81.         ADD    AX,SCREENMASK
  82.         MOV    GS,AX
  83.         MOV    CX,64000
  84.         XOR    AL,AL
  85.         XOR    DI,DI
  86. ZEROSCREENMASK:    MOV    GS:[DI],AL
  87.         INC    DI
  88.         DEC    CX
  89.         JNZ    ZEROSCREENMASK
  90.         ;/////////////////////
  91.         MOV    AX,0A000H
  92.         MOV    ES,AX
  93.         ;/////////////////////
  94.         RET
  95.  
  96. ;------------------------------------------------------------------------------
  97.  
  98. INSTALLMUZAK:   PUSH    ES
  99.         XOR     BX,BX
  100.         XOR     AX,AX
  101.         MOV     DL,INTERRUPTNUM
  102.         CALL    DWORD PTR [MODULEPLAYER]
  103.         MOV     AX,SS
  104.         ADD     AX,MUZSAKDATA
  105.         MOV     ES,AX
  106.         XOR     DI,DI
  107.         MOV     BX,1
  108.         MOV     CX,BX
  109.         XOR     DX,DX
  110.         CALL    DWORD PTR [MODULEPLAYER]
  111.         POP     ES
  112.         MOV     AX,SAMPLERATE
  113.         MOV     BX,2
  114.         CALL    DWORD PTR [MODULEPLAYER]
  115.         MOV     BX,3
  116.         CALL    DWORD PTR [MODULEPLAYER]
  117.         RET
  118.  
  119. TURNOFFMUZAK:   MOV     BX,4
  120.         CALL    DWORD PTR [MODULEPLAYER]
  121.         RET
  122.  
  123. ;------------------------------------------------------------------------------
  124.  
  125. RESTORESTARS:    PUSHA
  126.         MOV    CX,500
  127.         MOV    AX,-250
  128.         LEA    SI,STARS
  129. SETEXITINGCIK:    MOV    [SI],AX
  130.         MOV    WORD PTR [SI+2],200
  131.         MOV    WORD PTR [SI+4],0
  132.         ADD    SI,6
  133.         ADD    AX,2
  134.         DEC    CX
  135.         JNZ    SETEXITINGCIK
  136.         LEA    SI,STARS
  137.         CALL    MAKEHEADDATA
  138.         POPA
  139.         RET
  140.  
  141. COPYFACE1:    PUSHA
  142.         LEA    SI,DATAS
  143.         CALL    MAKEHEADDATA
  144.         POPA
  145.         RET
  146.  
  147. MAKEHEADDATA:   MOV     CX,1500
  148.         XOR     DI,DI
  149.         LEA     DI,HEADDATA
  150. MAKEHEADDATACIK:LODSW
  151.         MOV     DS:[DI],AX
  152.         ADD     DI,2
  153.         DEC     CX
  154.         JNZ     MAKEHEADDATACIK
  155.         RET
  156.  
  157. RESETANGLES:    MOV     PRESENTANGLE_X,0
  158.         MOV     PRESENTANGLE_Y,0
  159.         MOV     PRESENTANGLE_Z,0
  160.         RET
  161.  
  162. SETDELAYVON:    MOV     PRESENTBACKGRND,10000
  163.         MOV     PREVIOUSBACKGRND,0
  164.         RET
  165.  
  166. SETDELAYVOFF:   RET
  167.  
  168. RESETSM:        PUSHA
  169.         MOV     CX,500
  170.         XOR     SI,SI
  171.         MOV     BP,3000
  172.         ADD     BP,PREVIOUSBACKGRND
  173. RESETSTARDATA:  MOV     RNDMAX,500
  174.         CALL    RANDOM
  175.         SUB     AX,250
  176.         MOV     FS:[SI],AX
  177.         MOV     RNDMAX,500
  178.         CALL    RANDOM
  179.         SUB     AX,250
  180.         MOV     FS:[SI+2],AX
  181.         MOV     RNDMAX,1224
  182.         CALL    RANDOM
  183.         ADD     AX,311
  184.         MOV     FS:[SI+4],AX
  185.         MOV     FS:[BP],WORD PTR 0FFFEH
  186.         MOV     FS:[BP+2],BYTE PTR 0
  187.         ADD     SI,6
  188.         ADD     BP,2
  189.         DEC     CX
  190.         JNZ     RESETSTARDATA
  191.         POPA
  192.         RET
  193.  
  194. SETMETADATA:    PUSHA
  195.         MOV     METAMORPHCIK,1
  196.         XOR     SI,SI
  197.         MOV     CX,1500
  198. SETMETADATACIK: MOV     AX,HEADDATA[SI]
  199.         MOV     BX,FS:[SI+25500];20000
  200.         SUB     AX,BX
  201.         MOV     FS:[SI+19500],BX;14000
  202.         MOV     FS:[SI+22500],AX;17000
  203.         ADD     SI,2
  204.         DEC     CX
  205.         JNZ     SETMETADATACIK
  206.         POPA
  207.         RET
  208.  
  209. EMPTYCIK:       RET
  210.  
  211. SETROTATEDATA:  PUSHA
  212.         MOV     CX,1500
  213.         XOR     SI,SI
  214. SETRDATACIK:    MOV     AX,FS:[SI]
  215.         MOV     FS:[SI+25500],AX;20000
  216.         ADD     SI,2
  217.         LOOP    SETRDATACIK
  218.         POPA
  219.         RET
  220.  
  221. ;------------------------------------------------------------------------------
  222.  
  223. PUTSTARS:       CLI
  224.         PUSHA
  225.         XOR     SI,SI
  226.         MOV     DI,3000
  227.         MOV     CX,500
  228.         MOV     BX,PREVIOUSBACKGRND
  229. PUTSTARSCIKPS:  PUSH    BX
  230.         PUSH    DI
  231.         MOV     BP,FS:[DI][BX]
  232.         MOV     ES:[BP],BYTE PTR 0
  233.         MOV     AX,FS:[SI]
  234.         MOV     BX,EYEDISTANCE
  235.         IMUL    BX
  236.         ADD     BX,FS:[SI+4]
  237.         ADD     BX,ORIGO_Z
  238.         MOV     DI,BX
  239.         IDIV    BX
  240.         ADD     AX,ORIGO_X
  241.         MOV     BX,0FFFFH
  242.         CMP     AX,0
  243.         JL      NOPUTPIXELPS
  244.         CMP     AX,319
  245.         JG      NOPUTPIXELPS
  246.         MOV     BP,AX
  247.         MOV     AX,FS:[SI+2]
  248.         MOV     BX,EYEDISTANCE
  249.         IMUL    BX
  250.         IDIV    DI
  251.         NEG     AX
  252.         ADD     AX,ORIGO_Y
  253.         MOV     BX,0FFFFH
  254.         CMP     AX,0
  255.         JL      NOPUTPIXELPS
  256.         CMP     AX,199
  257.         JG      NOPUTPIXELPS
  258.  
  259.         MOV    DX,AX
  260.         SHL    DX,8
  261.         SHL    AX,6
  262.         ADD    AX,DX
  263.  
  264.         ;MOV     BX,320
  265.         ;MUL     BX
  266.         ADD     BP,AX
  267.         MOV     BX,0FFFEH
  268.         OR      GS:[BP],BYTE PTR 0
  269.         JNZ     NOPUTPIXELPS
  270.         MOV     AX,DI
  271.         SHR     AX,4
  272.         INC     AL
  273.         CMP    AL,64
  274.         JA    NOPUTPIXELPS
  275.         MOV     BX,BP
  276.         MOV     ES:[BP],AL
  277. NOPUTPIXELPS:   POP     DI
  278.         MOV     BP,PRESENTBACKGRND
  279.         MOV     FS:[DI][BP],BX
  280.         POP     BX
  281.         ADD     SI,6
  282.         ADD     DI,2
  283.         DEC     CX
  284.         JNZ     PUTSTARSCIKPS
  285.         ADD     PRESENTBACKGRND,1000
  286.         CMP     PRESENTBACKGRND,10000
  287.         JBE     NOZPRBPS
  288.         MOV     PRESENTBACKGRND,0
  289. NOZPRBPS:       ADD     PREVIOUSBACKGRND,1000
  290.         CMP     PREVIOUSBACKGRND,10000
  291.         JBE     NOZPVBPS
  292.         MOV     PREVIOUSBACKGRND,0
  293. NOZPVBPS:       POPA
  294.         STI
  295.         RET
  296.  
  297. ;------------------------------------------------------------------------------
  298.  
  299. MOVESTARS:      MOV     CX,500
  300.         XOR     SI,SI
  301.         MOV     BP,3000
  302.         MOV     BX,-511
  303.         SUB     BX,ORIGO_Z
  304.         MOV     DI,PRESENTBACKGRND
  305.         SUB     DI,1000
  306.         JAE     MOVESTCIK
  307.         ;MOV     DI,10000
  308. MOVESTCIK:      CMP     WORD PTR FS:[BP][DI],0FFFFH
  309.         JZ      NEWSTAR
  310.         MOV     AX,FS:[SI+4]
  311.         SUB     AX,STARSPEED
  312.         CMP     AX,BX
  313.         JL      NEWSTAR
  314.         MOV     FS:[SI+4],AX
  315. RETMSCIK:       ADD     SI,6
  316.         ADD     BP,2
  317.         DEC    CX
  318.         JNZ    MOVESTCIK
  319.         RET
  320. NEWSTAR:    MOV    WORD PTR FS:[BP][DI],0FFFEH
  321.         MOV    RNDMAX,500
  322.         CALL    RANDOM
  323.         SUB    AX,250
  324.         MOV    FS:[SI],AX
  325.         MOV    RNDMAX,500
  326.         CALL    RANDOM
  327.         SUB    AX,250
  328.         MOV    FS:[SI+2],AX
  329.         MOV    WORD PTR FS:[SI+4],512
  330.         JMP    RETMSCIK
  331.  
  332. STARMOVING:    PUSHA
  333.         CALL    PUTSTARS
  334.         CALL    MOVESTARS
  335.         POPA
  336.         RET
  337.  
  338. ;------------------------------------------------------------------------------
  339.  
  340. METAMORPHING:    PUSHA
  341.         MOV    AX,METAMORPHLENGTH
  342.         CMP    METAMORPHCIK,AX
  343.         JZ    NOINCMETACIK
  344.         INC    METAMORPHCIK
  345. NOINCMETACIK:    MOV    CX,1500
  346.         XOR    SI,SI
  347.         MOV    BX,METAMORPHCIK
  348.         MOV    DI,METAMORPHLENGTH
  349. METASTARSCIK:    MOV    AX,FS:[SI+22500];17000
  350.         IMUL    BX
  351.         IDIV    DI
  352.         ADD    AX,FS:[SI+19500];14000
  353.         MOV    FS:[SI+25500],AX;20000
  354.         ADD    SI,2
  355.         DEC    CX
  356.         JNZ    METASTARSCIK
  357.         XOR    DI,DI
  358.         MOV    SI,25500;20000
  359.         MOV    CX,500
  360.         ADD    PRESENTANGLE_X,1;2
  361.         ;ADD    PRESENTANGLE_Y,2
  362.         ADD    PRESENTANGLE_Z,1;2
  363.         PUSH    BX
  364.         MOV    AX,FS
  365.         MOV    BX,AX
  366.         CALL    ROTATEPOINTS
  367.         POP    BX
  368.         CALL    PUTSTARS
  369.         POPA
  370.         RET
  371.  
  372. METAMORPHING2:    PUSHA
  373.         MOV    AX,METAMORPHLENGTH
  374.         CMP    METAMORPHCIK,AX
  375.         JZ    NOINCMETACIK2
  376.         INC    METAMORPHCIK
  377. NOINCMETACIK2:    MOV    CX,1500
  378.         XOR    SI,SI
  379.         MOV    BX,METAMORPHCIK
  380.         MOV    DI,METAMORPHLENGTH
  381. METASTARSCIK2:    MOV    AX,FS:[SI+22500];17000
  382.         IMUL    BX
  383.         IDIV    DI
  384.         ADD    AX,FS:[SI+19500];14000
  385.         MOV    FS:[SI+25500],AX;20000
  386.         ADD    SI,2
  387.         DEC    CX
  388.         JNZ    METASTARSCIK2
  389.         XOR    DI,DI
  390.         MOV    SI,25500;20000
  391.         MOV    CX,500
  392.         ADD    PRESENTANGLE_X,1
  393.         ADD    PRESENTANGLE_Z,2
  394.         ADD    ORIGO_Z,1
  395.         PUSH    BX
  396.         MOV    AX,FS
  397.         MOV    BX,AX
  398.         CALL    ROTATEPOINTS
  399.         POP    BX
  400.         CALL    PUTSTARS
  401.         POPA
  402.         RET
  403.  
  404.  
  405. ;------------------------------------------------------------------------------
  406.  
  407. ROTATEHEAD:    PUSHA
  408.         ADD    PRESENTANGLE_X,1;2
  409.         ADD    PRESENTANGLE_Y,1;2
  410.         ADD    PRESENTANGLE_Z,1;2
  411.         MOV    CX,500
  412.         MOV    SI,25500;20000
  413.         XOR    DI,DI
  414.         MOV    AX,FS
  415.         MOV    BX,AX
  416.         CALL    ROTATEPOINTS
  417.         CALL    PUTSTARS
  418.         POPA
  419.         RET
  420.  
  421. ROTATEHEAD2:    PUSHA
  422.         OR    PRESENTANGLE_X,0
  423.         JZ    NOADDXA
  424.         ADD    PRESENTANGLE_X,1;2
  425. NOADDXA:    OR    PRESENTANGLE_Y,0
  426.         JZ    NOADDYA
  427.         ADD    PRESENTANGLE_Y,1;2
  428. NOADDYA:    OR    PRESENTANGLE_Z,0
  429.         JZ    NOADDZA
  430.         ADD    PRESENTANGLE_Z,1;2
  431. NOADDZA:    SUB    ORIGO_Z,2
  432.         CMP    ORIGO_Z,0
  433.         JGE    NOZEROORIGO
  434.         MOV    ORIGO_Z,0
  435. NOZEROORIGO:    MOV    CX,500
  436.         MOV    SI,25500
  437.         XOR    DI,DI
  438.         MOV    AX,FS
  439.         MOV    BX,AX
  440.         CALL    ROTATEPOINTS
  441.         CALL    PUTSTARS
  442.         POPA
  443.         RET
  444.  
  445. PRESETFADING:    PUSHA
  446.         MOV    AX,SS
  447.         ADD    AX,PICTUREDATA
  448.         MOV    GS,AX
  449.         MOV    SI,64000
  450.         XOR    DI,DI
  451.  
  452.         MOV    CX,195
  453. COPYCOLORSCIK:    MOV    AL,GS:[SI]
  454.         MOV    COLORPRESET[DI],AL
  455.         INC    SI
  456.         INC    DI
  457.         DEC    CX
  458.         JNZ    COPYCOLORSCIK
  459.         MOV    AX,DS
  460.         LEA    BX,COLORPRESET
  461.         CALL    SETCOLORS
  462.         MOV    CX,32000
  463.         XOR    DI,DI
  464. PUTLOGO:    MOV    AX,GS:[DI]
  465.         STOSW
  466.         DEC    CX
  467.         JNZ    PUTLOGO
  468.         POPA
  469.         RET
  470.  
  471. FADEUPCIK:    PUSHA
  472.         MOV    AX,SS
  473.         ADD    AX,PICTUREDATA
  474.         MOV    BX,64000
  475.         CALL    SETCOLORS
  476.         POPA
  477.         RET
  478.  
  479. ;------------------------------------------------------------------------------
  480.  
  481. START:        CALL    STARTUP
  482.         MOV    AX,350
  483.         CALL    CHECKMEMORY
  484.         JNC    MEMORYOK
  485.         MOV    AH,9
  486.         LEA    DX,NOTMEM
  487.         INT    21H
  488.         JMP    EXIT
  489. MEMORYOK:    MOV    AX,13H
  490.         INT    10H
  491.         MOV    AX,SS
  492.         ADD    AX,PICTUREDATA
  493.         MOV    BX,64000
  494.         CALL    SETCOLORS
  495.         MOV    AX,SS
  496.         ADD    AX,MODPLAY
  497.         MOV    MODULEPLAYER[2],AX
  498.         MOV    MODULEPLAYER[0],0
  499.         CALL    INSTALLMUZAK
  500.  
  501.         XOR    SI,SI
  502. NEWORDER:       MOV    CX,INTROEVENTDATA[SI+2]
  503.         CMP    CX,0FFFFH
  504.         JZ    ENDMAINCIK
  505.         MOV    AX,INTROEVENTDATA[SI+4]
  506.         OR    CX,CX
  507.         JZ    NOEXTERNL
  508.         MOV    DI,AX
  509.         MOV    AX,DS:[DI]
  510. NOEXTERNL:      MOV    CX,AX
  511.         OR    CX,CX
  512.         JNZ    MAINCIK
  513.         CALL    INTROEVENTDATA[SI]
  514.         ADD    SI,6
  515.         JMP    NEWORDER
  516. MAINCIK:        CALL    WAITVERTRETRACE
  517.  
  518.         ;CALL    RTIMEON
  519.         MOV    BX,7
  520.         CALL    DWORD PTR [MODULEPLAYER]
  521.         CALL    INTROEVENTDATA[SI]
  522.  
  523.         MOV    AH,1
  524.         INT    16H
  525.         JZ    NOENDMAINCIK
  526.         XOR    AH,AH
  527.         INT    16H
  528.         JMP    ENDMAINCIK
  529. NOENDMAINCIK:   ;CALL    RTIMEOFF
  530.         LOOP    MAINCIK
  531.         ADD    SI,6
  532.         JMP    NEWORDER
  533.  
  534. ENDMAINCIK:     CALL    TURNOFFMUZAK
  535.         MOV    CX,32
  536. ENDFADECIK:    CALL    WAITVERTRETRACE
  537.         PUSH    CX
  538.         MOV    CX,100
  539. SELFLOOP:    LOOP    SELFLOOP
  540.         POP    CX
  541.         CALL    WAITVERTRETRACE
  542.         CALL    FADEDWCOLORS
  543.         LOOP    ENDFADECIK
  544.         JMP    FATALEXIT
  545. END START
  546.