home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / AGGRESSN / MOTION.ZIP / MOTION / SUSIE28.S < prev    next >
Text File  |  1999-01-02  |  46KB  |  2,393 lines

  1. ;#########################################################################
  2. ;
  3. ; Susie by Creator 1995
  4. ; z/y rotation
  5. ;
  6. ; 256*240 double lined, 50Hz
  7. ;
  8. ;
  9. ;
  10. ; LIIKERADAN LASKEMINEN EI TOIMI!
  11. ;
  12. ; LIIKERATA OTETAAN TAULUKOSTA SERAAVASTI:
  13. ;
  14. ; X_POSITION.L
  15. ; Y_POSITION.L
  16. ; KATSELUSUUNTA.W (0-$ffff ON TAYSI YMPYRA)
  17. ; KALLISTUSKULMA.W (0-$7fff LAIDASTA LAITAAN, $4000 ON VAAKATASO. TAMAN PITAISI EKASSA
  18. ;            FRAMESSA OLLA $4000...)
  19. ;
  20.  
  21. USERCONTROL=0
  22.  
  23.  
  24. susie.run        = 1
  25. susie.superpixels    = 1
  26. susie.alltextures    = 0
  27.  
  28. susie.maxnumoftextures    = 4
  29. susie.linewidth        = 512*2
  30. susie.screenkorkeus    = 120
  31. susie.texturekorkeus    = 128
  32. susie.texturewidth    = 32
  33.  
  34. susie.points    = 69
  35.  
  36.     TEXT
  37.  
  38.     IFNE    susie.run
  39.  
  40.     INCLUDE    sqrt.x
  41.     *INCLUDE    a:\sqrt.x
  42.  
  43.  
  44.     OPT    d+,c-,p=68030,o+,ow-
  45.  
  46.     IFEQ    susie.alltextures
  47. memory    = 1700*1024
  48.     ELSE
  49. memory    = 2700*1024
  50.     ENDC
  51.  
  52. Overdose_Beyond_Braindamage
  53.     *include    a:\freeintc.s
  54.     include    freeintx.s
  55.     even
  56.  
  57. DEMO:
  58.     move.w    activepoint,d0
  59.     move.l    (activelist,pc,d0.w*4),a0
  60.     jsr    (a0)
  61.     rts
  62.  
  63.  
  64. activepoint    dc.w    0    
  65. activelist    
  66.     dc.l    susie.precalc
  67.  
  68.     DC.L    susie.DSP_LOAD
  69.     DC.L    susie.initwillie
  70.  
  71.     DC.L    susie.willie
  72.     dc.l    dummy
  73.     dc.l    viimeinen
  74.  
  75. address.screen1:DC.L    0
  76. address.screen2:DC.L    0
  77.  
  78. viimeinen
  79.     st     Space_Pressed
  80. dummy    rts
  81.     ENDC
  82.  
  83. susie.nullvbl:
  84.     rts
  85.  
  86. ;---------------------------------------------
  87.  
  88. tuomio_write
  89.     lea    $ffffa202.w,a1    
  90.     lea    $ffffa206.w,a0
  91.  
  92. .lp    btst    #1,(a1)        
  93.     beq.s    .lp        
  94.  
  95.     move.l    susie.sin_a,-2(a0)            ;skriivaa
  96.     move.l    susie.cos_a,-2(a0)            ;skriivaa
  97.     moveq    #0,d0
  98.     move.w    susie.x_pos,d0
  99.     move.l    d0,-2(a0)                ;skriivaa
  100.     move.w    susie.z_pos,(a0)            ;skriivaa
  101.     move.l    susie.perspektiivivakio(pc),-2(a0)
  102.     move.l    susie.seinakorkeus(pc),-2(a0)
  103.     tst.w    susie.feedmap(pc)
  104.     bne.s    .feed
  105.     move.l    #0,-2(a0)
  106.     rts
  107. .feed:
  108.     clr.w    susie.feedmap
  109.     clr.l    d0
  110.     move.w    susie.number_of_walls,d0
  111.     move.l    d0,-2(a0)
  112.     lea    susie.map,a1
  113.     subq.w    #1,d0
  114. .lp2    
  115.     move.w    4(a1),d1
  116.     sub.w    #$2000,d1
  117.     neg.w    d1
  118.     add.w    #$2000,d1
  119.     move.w    d1,(a0)
  120.     move.w    6(a1),(a0)
  121.  
  122.     move.w    (a1)+,d1
  123.     sub.w    #$2000,d1
  124.     neg.w    d1
  125.     add.w    #$2000,d1
  126.     move.w    d1,(a0)
  127.     move.w    (a1)+,(a0)
  128.     addq.l    #4,a1
  129.  
  130.     IFEQ    susie.alltextures
  131.     addq.l    #2,a1
  132.     move.w    #0,(a0)
  133.     ELSE
  134.     move.w    (a1)+,(a0)            ;x1 z1 x2 z2 txt
  135.     ENDC
  136.     dbf    d0,.lp2
  137.     rts
  138.  
  139. susie.perspektiivivakio:
  140.     DC.L    277*256
  141. susie.seinakorkeus
  142.     dc.l    277*128
  143. susie.feedmap:
  144.     DC.W    -1
  145. *tuomio_write
  146. *    lea    $ffffa202.w,a1    
  147. *    lea    $ffffa206.w,a0
  148. *
  149. *.lp    btst    #1,(a1)        
  150. *    beq.s    .lp        
  151. *
  152. *    move.l    susie.sin_a(pc),-2(a0)            ;skriivaa
  153. *    move.l    susie.cos_a(pc),-2(a0)            ;skriivaa
  154. *    moveq    #0,d0
  155. *    move.w    susie.x_pos(pc),d0
  156. *    move.l    d0,-2(a0)                ;skriivaa
  157. *    move.w    susie.z_pos(pc),(a0)            ;skriivaa
  158. *    move.w    susie.number_of_walls,d0
  159. *    lea    susie.map,a1
  160. *    move.w    d0,(a0)
  161. *    subq.w    #1,d0
  162. *.lp2    
  163. *    movem.w    (a1)+,d1-5
  164. *    move.w    d1,(a0)
  165. *    move.w    d2,(a0)
  166. *    move.w    d3,(a0)
  167. *    move.w    d4,(a0)
  168. *    move.w    d5,(a0)
  169. *    dbf    d0,.lp2
  170. *    rts
  171. *
  172. *; premodifoi karttaa...
  173. *
  174. susie.precmap:
  175. *    lea    susie.map,a1
  176. *    move.w    susie.number_of_walls,d7
  177. *    subq.w    #1,d7
  178. *.lp1:
  179. *    move.w    4(a1),d0
  180. *    sub.w    #$2000,d0
  181. *    neg.w    d0
  182. *    add.w    #$2000,d0
  183. *    move.w    6(a1),d1
  184. *    move.w    (a1),d2
  185. *    sub.w    #$2000,d2
  186. *    neg.w    d2
  187. *    add.w    #$2000,d2
  188. *    move.w    2(a1),d3
  189. *    IFEQ    susie.alltextures
  190. *    move.w    #0,d4
  191. *    ELSE
  192. *    move.w    8(a1),d4
  193. *    ENDC
  194. *    movem.w    d0-4,(a1)    ;x1 z1 x2 z2 txt
  195. *    lea    10(a1),a1
  196. *    dbf    d7,.lp1
  197.     rts
  198.  
  199. ;---------------------------------------------
  200.  
  201. tuomio_read
  202.     lea    $ffffa202.w,a1    
  203.     lea    $ffffa206.w,a0        ;read words..
  204.     move.l    address.freemem(pc),a2
  205.     add.l    #susie.z_buffer,a2
  206.  
  207. .lp    btst    #0,(a1)        
  208.     beq.s    .lp
  209.     move.w    #384-1,d0
  210. .lp2    
  211.     move.w    (a0),(a2)+
  212.     move.w    (a0),(a2)+
  213.     move.w    (a0),(a2)+        ;get z,txt,x_off
  214.     dbf    d0,.lp2
  215.     rts
  216.  
  217. ;---------------------------------------------
  218. ;  DSP ROUTINES..
  219. ;------------------------------------------------------------------------
  220.  
  221. susie.DSP_LOAD:
  222.     MOVE.W    #1,-(SP)
  223.     move.l    #(susie.dsp_code-susie.dsp_boot)/3,-(sp)
  224.     move.l    #susie.dsp_boot+9,-(sp)        ;devpac56:n headereita
  225.     MOVE.W    #$6e,-(SP)
  226.     TRAP    #14
  227.     LEA    12(SP),SP
  228.     tst.l    d0
  229.     bmi    reset            ;dsp melted beyond braindamage..
  230.     tst.l    d1
  231.     bmi    reset            ;dsp melted beyond braindamage..
  232.  
  233.     lea    $ffffa202.w,a1    
  234.     lea    $ffffa204.w,a0
  235. ;lataa main rout..
  236.     move    #(susie.dsp_end-susie.dsp_code)/3,d0
  237. .war    btst    #1,(a1)        
  238.     beq.s    .war
  239.     move.l    d0,(a0)            ;pituus
  240.  
  241.     subq.w    #1,d0
  242.     lea    susie.dsp_code+9(pc),a2
  243. .gwar
  244. .quark    btst    #1,(a1)        
  245.     beq.s    .quark
  246.     move.b    (a2)+,1(a0)            ;feedaa koodia
  247.     move.b    (a2)+,2(a0)            ;feedaa koodia
  248.     move.b    (a2)+,3(a0)            ;feedaa koodia
  249.     dbf    d0,.gwar
  250.  
  251.     move.l    #$babe,d0        ;testaa varmuuden vuoksi dsp rutiini..
  252. .lp    btst    #1,(a1)        
  253.     beq.s    .lp        
  254.     move.l    d0,(a0)    
  255. .lp2    btst    #0,(a1)        
  256.     beq.s    .lp2        
  257.     move.l    (a0),d1
  258.     lsl.l    #1,d0
  259.     cmp.l    d0,d1
  260.     bne    reset
  261.  
  262.     addq.w    #1,activepoint
  263.     rts
  264.  
  265. susie.dsp_boot
  266.     incbin    dsp\booter.p56
  267.     even
  268. susie.dsp_code
  269.     incbin    dsp\hukka14.p56
  270.     *incbin    a:\hukka14.p56
  271. susie.dsp_end
  272.     even
  273.  
  274. ;------------
  275. tuomioTV:
  276. .HHT    SET     $fe        ; Horizontal Hold Timer
  277. .HBB    SET     $a2-4        ; Horizontal Border Begin
  278. .HBE    SET     $1+32-4        ; Horizontal Border End
  279. .HDB    SET     $1+32-4        ; Horizontal Display Begin
  280. .HDE    SET     $a2-4        ; Horizontal Display End
  281.  
  282. .HSS    SET     $d8        ; Horizontal Synchro Start
  283.  
  284. .VFT    SET     $271        ; (31250/Hz!1) ; V FREQUENCY
  285. .VBB    SET     $249-242    ; V BORDER BLANK
  286. .VBE    SET     $59+8+244    ; ($265-$02f)/2 = 283 LINES
  287. .VDB    SET     $49+8        ; V DISPLAY SIZE (256 lines..)
  288. .VDE    SET     $249-8        ; ($237-$057)/2 = 240 LINES
  289. .VSS    SET     $26b        ; V SYNCHRO START (<FREQUENCY!)
  290. .VCLK    SET    $182        ; Video Clock
  291. .VCO    SET    $001        ; Video Control
  292. .WIDE    set    320        ; screen wide (words)
  293. .modulo    set    192        ; screen modulo
  294. .VMODE    set    $100        ; screen mode (true)
  295.  
  296.     dc.w    .HHT&$1ff,.HBB&$1ff,.HBE&$1ff,.HDB&$1ff,.HDE&$1ff,.HSS&$1ff
  297.     dc.w    .VFT&$3ff,.VBB&$3ff,.VBE&$3ff,.VDB&$3ff,.VDE&$3ff,.VSS&$3ff
  298.     dc.w    .VCLK&$1ff,.VCO&$00f
  299.     dc.l    .wide,.modulo,.vmode
  300.  
  301. susie.precalc:
  302.     move.l    address.freemem(pc),d0
  303.     add.l    #susie.ruutu+256,d0
  304.     clr.b    d0
  305.     move.l    d0,address.screen1
  306.     move.l    d0,d1
  307.     add.l    #512*192*2,d1
  308.     move.l    d1,address.screen2
  309.  
  310.     move.w    #-1,susie.feedmap
  311.  
  312.     bsr    susie.hdist
  313.     bsr    susie.precmap
  314.     bsr    susie.makefloor
  315.     bsr    susie.createsky
  316.     bsr    susie.prebspline
  317.     bsr    susie.scaletexture
  318.  
  319.     move.w    #0,susie.liikutus
  320.  
  321.     addq.w    #1,activepoint
  322.     rts
  323.  
  324. ; willien initointi
  325.  
  326. susie.initwillie:
  327. *    movec    cacr,d0
  328. *    bset    #0,d0
  329. *    bset    #8,d0
  330. *    movec    d0,cacr
  331.  
  332.     move.l    address.screen1,a1
  333.     move.l    a1,adr_screen1
  334.     moveq    #0,d1
  335.     move.w    #128*2-1,d6
  336. .ylp1:
  337.     move.w    #512/32-1,d7
  338. .xlp1:
  339.     REPT    16
  340.     move.l    d1,(a1)+
  341.     ENDR
  342.     dbf    d7,.xlp1
  343.     dbf    d6,.ylp1
  344.  
  345.     move.l    #tuomiotv,pointertv
  346.     jsr    middlesetscreen
  347.     move.w    #$2300,sr
  348.  
  349.     move.l    #willie_vbl,own_vbl
  350.     move.l    #rastatest,raster_adr
  351.     move.b    #8,raster_control
  352.     move.b    #1,raster_data
  353.     or.l    #$00010001,$fffffa06.w
  354.     or.l    #$00010001,$fffffa12.w
  355.  
  356.     IFNE    susie.superpixels
  357.     move.w    #$00c7,$ffff8282.w    hht
  358.     move.w    #$00a0-32,$ffff8284.w    hbb
  359.     move.w    #$001f*0,$ffff8286.w    hbe
  360.     move.w    #$02c7-8,$ffff8288.w    hdb
  361.     move.w    #$0096-8,$ffff828a.w    hde
  362.     move.w    #$00aa,$ffff828c.w    hss
  363.     move.w    #$0186,$ffff82c0.w    vclock
  364.     ENDC
  365.  
  366.     bsr    tuomio_write
  367.     addq.w    #1,activepoint
  368.     rts
  369.  
  370.  
  371. ; doomien main looppi
  372.  
  373. susie.willie:
  374.     move.l    address.screen1,d0
  375.     move.l    address.screen2,d1
  376.     move.l    d1,adr_screen1
  377.     move.l    d1,address.screen1
  378.     move.l    d0,address.screen2
  379.  
  380.     movec    cacr,d0
  381.     bclr    #8,d0
  382.     movec    d0,cacr
  383.  
  384.     bsr    susie.moveit
  385.     bsr    susie.hdist
  386.     bsr    tuomio_read
  387.     bsr    tuomio_write
  388.     bsr    susie.zrotate
  389.     bsr    susie.scalewalls
  390.     bsr    susie.drawalls
  391.  
  392.     movec    cacr,d0
  393.     bset    #8,d0
  394.     movec    d0,cacr
  395.     rts
  396. ;.tappo
  397. ;    move.w    #$40,$ffff8286.w
  398. ;    movec    cacr,d0
  399. ;    bset    #8,d0
  400. ;    movec    d0,cacr
  401. ;    rts
  402.  
  403. willie_vbl:
  404.     move.w    #$00ff,hsyncflag
  405.     move.l    #$0,$ffff9800.w
  406.     move.l    #rastaini,$120.w    ;raster_adr
  407.     move.w    firstmodulo(pc),$ffff820e.w
  408.  
  409.     IFNE    USERCONTROL
  410.     bsr    susie.readkeys
  411.     ENDC
  412.  
  413.     *move.w    susie.persxsin(pc),d0
  414.     *add.w    #1024,d0
  415.     *move.w    d0,susie.persxsin
  416.     *bsr    xsin
  417.     *ext.l    d1
  418.     *add.l    #227*256,d1
  419.     *move.l    d1,susie.perspektiivivakio
  420.  
  421.     *move.w    susie.persysin(pc),d0
  422.     *add.w    #673,d0
  423.     *move.w    d0,susie.persysin
  424.     *bsr    xsin
  425.     *ext.l    d1
  426.     *asr.l    #1,d1
  427.     *add.l    #227*128,d1
  428.     *move.l    d1,susie.seinakorkeus
  429.  
  430.     move.w    susie.dispxbeg(pc),d0
  431.     ble.s    .wok1
  432.     subq.w    #1,d0
  433.     move.w    d0,susie.dispxbeg
  434. .wok1:
  435.     move.w    susie.dispxend(pc),d1
  436.     ble.s    .wok1b
  437.     subq.w    #1,d1
  438.     move.w    d1,susie.dispxend
  439. .wok1b:
  440.     neg.w    d0
  441. *    add.w    #$00a0-32,d0
  442.     add.w    #$a0-8,d0
  443.     move.w    d0,$ffff8284.w    hbb
  444. *    add.w    #$001f*0,d1
  445.     add.w    #$1f+8,d1
  446.     move.w    d1,$ffff8286.w    hbe
  447.  
  448.     move.w    susie.dispybeg(pc),d2
  449.     ble.s    .wok2
  450.     subq.w    #1,d2
  451.     move.w    d2,susie.dispybeg
  452. .wok2:
  453.     move.w    susie.dispyend(pc),d3
  454.     cmp.w    #6,d3
  455.     ble.s    .wok2b
  456.     subq.w    #1,d3
  457.     move.w    d3,susie.dispyend
  458. .wok2b:
  459.     neg.w    d2
  460.  
  461.     add.w    d2,d2
  462.     add.w    #$249-8,d2
  463.     move.w    d2,$ffff82a4.w    vbb
  464.     add.w    d3,d3
  465.     add.w    #$49+8,d3
  466.     move.w    d3,$ffff82a6.w    vbe
  467.     rts
  468.  
  469. susie.dispxbeg:    DC.W    152
  470. susie.dispxend: DC.W    152
  471. susie.dispybeg:    DC.W    123
  472. susie.dispyend: DC.W    123
  473. susie.persxsin:    DC.W    0
  474. susie.persysin:    DC.W    0
  475.  
  476.     CNOP    0,4
  477.  
  478. rastaini:
  479.     move.l    #rastatest,$120.w    ;raster_adr
  480.     move.w    #$0,hsyncflag
  481.     rte
  482.  
  483. rastatest2:
  484.     rte
  485. rastatest:
  486.     move.w    #$1234,$ffff820e.w
  487. rastadr:move.l    #$12345678,$120.w
  488.     move.w    #$ff00,hsyncflag
  489.     rte
  490. rastend:
  491.     REPT    119/2
  492.     move.w    #$1234,$ffff820e.w
  493.     move.l    #$12345678,$120.w
  494.     move.w    #$ff00,hsyncflag
  495.     rte
  496.  
  497.     move.w    #$1234,$ffff820e.w
  498.     move.l    #$12345678,$120.w
  499.     move.w    #$ff00,hsyncflag
  500.     rte
  501.     ENDR
  502.     REPT    128-119
  503.     move.w    #$1234,$ffff820e.w
  504.     move.l    #$12345678,$120.w
  505.     move.w    #$00ff,hsyncflag
  506.     rte
  507.     ENDR
  508.  
  509. firstmodulo:
  510.     DC.W    0
  511. hsyncflag:
  512.     DC.W    0
  513.  
  514. turnspd:DC.W    0
  515. suunta    DC.W    0
  516. seinansuunta    DC.W    0
  517. z_spd:    DC.L    0
  518. x_spd:    DC.L    0
  519.  
  520.  
  521. susie.moveit:
  522.     lea    susie.liikku,a0
  523.     move.w    susie.liikutus,d0
  524.     add.w    d0,a0
  525.     add.w    #3*4,d0
  526. ;    cmp.w    #3*4*4*16,d0
  527.     cmp.w    #3*4*(susie.points)*16/4,d0
  528.     blt.s    .okqq
  529. ;    st    space_pressed
  530.     move.l    #.dummy,own_vbl
  531.     addq.w    #1,activepoint
  532.  
  533. .dummy    rts
  534.     
  535. .okqq:
  536.     move.w    d0,susie.liikutus
  537.  
  538.     move.l    (a0)+,d0
  539.     move.l    (a0)+,d1
  540.     move.l    d0,susie.x_pos
  541.     move.l    d1,susie.z_pos
  542.     move.w    (a0)+,d0
  543.     move.w    d0,d6
  544.     move.w    d0,seinansuunta
  545.     bsr    xsin
  546.     ext.l    d1
  547.     lsl.l    #8,d1
  548.     move.l    d1,susie.sin_a
  549.     move.w    d6,d0
  550.     bsr    xcos
  551.     ext.l    d1
  552.     lsl.l    #8,d1
  553.     move.l    d1,susie.cos_a
  554.     move.w    (a0)+,d0
  555.     sub.w    #$4000,d0
  556.     move.w    d0,susie.kalsin
  557.     rts
  558.  
  559.  
  560. *    move.l    address.freemem,a0
  561. *    add.l    #susie.liikerata,a0
  562. *    move.w    susie.liikepos(pc),d0
  563. *    lea    (a0,d0.w*8),a0
  564. *    addq.w    #3,d0
  565. *    cmp.w    #(susie.points-4)*64,d0
  566. *    blt.s    .posok
  567. *    sub.w    #(susie.points-4)*64,d0
  568. *.posok:
  569. *    move.w    d0,susie.liikepos
  570. *    move.l    (a0)+,d0
  571. *    move.l    d0,susie.x_pos
  572. *    move.l    (a0)+,d1
  573. *    move.l    d1,susie.z_pos
  574. *    neg.l    d0
  575. *    neg.l    d1
  576. *    move.l    address.freemem,a0
  577. *    add.l    #susie.liikerata2,a0
  578. *    move.w    susie.liikepos(pc),d2
  579. *    lea    (a0,d2.w*8),a0
  580. *    add.l    (a0)+,d0    ; erotus seuraavaan pisteeseen
  581. *    add.l    (a0)+,d1
  582. *    neg.l    d0
  583. **rts
  584.  
  585.  
  586.  
  587. *    move.w    suunta(pc),d0
  588. *    add.w    #192,d0
  589. *    move.w    d0,suunta
  590. *    move.w    d0,susie.kalsin
  591. *    move.w    d0,d7
  592. *    bsr    xsin
  593. *    move.w    d1,seinansuunta
  594. *    move.w    d1,d0
  595. *    move.w    d0,d7
  596. *    bsr    xsin
  597. *
  598. *    ext.l    d1
  599. *    move.l    d1,d2
  600. *    lsl.l    #8,d2
  601. *    move.l    d2,susie.sin_a
  602. *    move.l    d1,d6
  603. *    move.w    d7,d0
  604. *    bsr    xcos
  605. *    ext.l    d1
  606. *    move.l    d1,d0
  607. *    lsl.l    #8,d0
  608. *    move.l    d0,susie.cos_a
  609. * rts
  610.     OPT p=68882
  611.  
  612.     fmove.l    d0,fp2
  613.     fmove.l    d1,fp3
  614.     move.l    d0,d2
  615.     move.l    d1,d3
  616.     muls    d0,d0
  617.     muls    d1,d1
  618.     add.l    d0,d1
  619.     sqrt    d1,d0,d3
  620.     tst.w    d1
  621.     bne.s    .okie
  622.     move.l    #$ff000000,$ffff9800.w
  623.     bra    .nope
  624. .okie:
  625.     fmove.l    d1,fp1
  626.  
  627.     fdiv    fp1,fp2
  628.     fasin    fp2
  629.     fmovecr    #0,fp5
  630.     fadd    fp5,fp5
  631.     fdiv    fp5,fp2
  632.     fmul.l    #1<<16,fp2
  633.     fmove.w    fp2,d4
  634.     move.w    d4,d0
  635.     move.w    suunta(pc),d5
  636.     move.w    d4,suunta
  637.     sub.w    d5,d4
  638.     lsl.w    #4,d4
  639.  clr.w    d4
  640.     move.w    d4,susie.kalsin
  641.  
  642.     move.w    d0,d6
  643.     bsr    xsin
  644.     and.l    #$ffff,d1
  645.     lsl.l    #8,d1
  646.     move.l    d1,susie.sin_a
  647.     move.l    d6,d0
  648.     bsr    xcos
  649.     and.l    #$ffff,d1
  650.     lsl.l    #8,d1
  651.     move.l    d1,susie.cos_a
  652. .nope:
  653.     rts
  654.  
  655. *    bfffo    d0{0:31},d2
  656. *    bfffo    d1{0:31},d3
  657. *    cmp.w    d2,d3
  658. *    ble.s    .joude
  659. *    exg.l    d2,d3
  660. *.joude:
  661. *    sub.w    #8,d3
  662. *    bge.s    .joude2
  663. *    neg.w    d3
  664. *    ext.l    d3
  665. *    asr.l    d3,d0
  666. *    asr.l    d3,d1
  667. *.joude2:
  668.  
  669.     move.l    d0,d2        ; a
  670.     move.l    d1,d3        ; b
  671.     asr.l    #8,d0
  672.     asr.l    #8,d1
  673.     muls    d0,d0        ; a²
  674.     muls    d1,d1        ; b²
  675.     asr.l    #8,d0
  676.     asr.l    #8,d1
  677.     add.l    d0,d1        ; c²
  678.     SQRT    d1,d0,d4    ; c
  679.     and.l    #$ffff,d1
  680.     bne.s    .okh
  681.     moveq    #1,d1
  682. .okh:
  683.     lsl.l    #4,d2
  684.     lsl.l    #4,d3
  685.     divs.l    d1,d2    ; a/c = Sin alpha
  686.     divs.l    d1,d3    ; b/c = Cos alpha
  687.     lsl.l    #7,d2
  688.     lsl.l    #7,d3
  689.     and.l    #$ffffff,d2
  690.     and.l    #$ffffff,d3
  691.     move.l    d2,susie.sin_a
  692.     move.l    d3,susie.cos_a
  693.     rts
  694.  
  695. *    move.l    d0,d2        ; a
  696. *    move.l    d1,d3        ; b
  697. *    asr.l    #8,d0
  698. *    asr.l    #8,d1
  699. *    muls.w    d0,d0        ; a²
  700. *    muls.w    d1,d1        ; b²
  701. *    asr.l    d0
  702. *    asr.l    d1
  703. *    add.l    d0,d1
  704. *    SQRT    d1,d0,d4    ; c
  705. *    and.l    #$ffff,d1
  706. *    bne.s    .ok
  707. *    moveq    #1,d1
  708. *.ok:
  709. *    lsl.l    #8,d2
  710. *    lsl.l    #8,d3
  711. *    divs.l    d1,d2    ; a/c = Sin alpha
  712. *    divs.l    d1,d3    ; b/c = Cos alpha
  713. *    move.l    d2,susie.sin_a
  714. *    move.l    d3,susie.cos_a
  715.  
  716. *    swap    d0
  717. *    swap    d1
  718. *
  719. *    divu    d0,d1        ; tan Alpha
  720. *
  721. *    move.l    oldx(pc),d2
  722. *    move.l    d0,oldx
  723. *    sub.l    d2,d0        ; Dx
  724. *    bpl.s    .xok1
  725. *    neg.l    d0
  726. *.xok1:
  727. *    move.l    oldz(pc),d2
  728. *    move.l    d1,oldz
  729. *    sub.l    d2,d1        ; Dz
  730. *    bpl.s    .zok1
  731. *    neg.l    d1
  732. *.zok1:
  733. *
  734. *    asr.l    #8,d0
  735. *    asr.l    #8,d1
  736. *    move.l    d0,d2
  737. *    mulu.l    d2,d2
  738. *    move.l    d1,d3
  739. *    mulu.l    d3,d3
  740. *    add.l    d2,d3
  741. *    sqrt    d3        ; c
  742. * ljdfcvkl
  743.     rts
  744.  
  745. susie.liikepos:
  746.     DC.W    0
  747.  
  748. susie.scalewalls:
  749.     move.l    address.freemem,d0
  750.     add.l    #susie.htab+4,d0
  751.     and.w    #-4,d0
  752.     move.l    d0,htbaddr+2
  753.     move.l    d0,a5
  754.     lea    512*8-80*8(a5),a5
  755.  
  756.     move.w    susie.skew(pc),d0
  757.     move.w    d0,d1
  758.     ext.l    d1            ; y-offsetin muutos/pystyline
  759.     move.l    d1,a4
  760.     muls    #-192,d0
  761.     asr.l    d0
  762.     move.l    d0,d4 
  763.  
  764.     move.l    address.freemem(pc),a6
  765.     add.l    #susie.z_buffer,a6
  766.     addq.l    #6,a6
  767.     move.w    susie.cosalpha(pc),d5        ; scalea korkeus z-rotaation mukaan
  768.     move.w    #192-1,d7
  769.  
  770.  move.l    address.screen1,d0
  771.  add.l    #susie.linewidth*2+0*susie.linewidth*susie.screenkorkeus/2-96+32+8,d0
  772.  
  773.  move.l    address.freemem,a1
  774.  add.l    #susie.sky+15*2,a1
  775.  move.w    seinansuunta(pc),d6
  776.  lsr.w    #7,d6
  777.  and.w    #$ff,d6
  778.  mulu    #320,d6
  779.  asr.l    #8,d6
  780.  sub.w    #320,d6
  781.  neg.w    d6
  782.  muls    #80*2,d6
  783.  add.l    d6,a1
  784.  
  785.  move.l    #$00020002,$ffff8a20.w
  786.  move.l    #-1,$ffff8a28.w
  787.  move.w    #-1,$ffff8a2c.w
  788.  move.l    #2<<16+((susie.linewidth-2)&$ffff),$ffff8a2e.w
  789.  move.w    #$0203,$ffff8a3a.w
  790.  
  791.     moveq    #2,d1
  792.     swap    d1
  793. .slp1:
  794.     move.w    (a6)+,d6        ; seinan korkeus
  795.     cmp.w    #$7f,d6
  796.     ble.s    .okie
  797.     move.w    #$7f,d6
  798. .okie:
  799.     muls    d5,d6            ; scalea korkeus z-rotaation mukaan
  800.     lsr.l    #7,d6
  801.     move.w    d6,(a5)+        ; korkeus
  802.     asr.w    d6
  803.  
  804.     move.w    d6,d1            ; seinan korkeus/2
  805.     sub.w    #susie.screenkorkeus/2+2,d1    ; taivaan korkeus ilman kallistusta
  806.     neg.w    d1
  807.  
  808.     neg.w    d6
  809.     lsl.w    #8,d6
  810.     add.w    d4,d6
  811.     move.w    d6,(a5)+            ; y-alkukohta
  812.  
  813.     move.w    (a6)+,d6            ; texture id
  814.     move.w    (a6)+,d2            ; texture offset
  815.  
  816.     move.l    d4,d3
  817.     asr.l    #8,d3                ; kallistus
  818.     add.w    d3,d1                ; taivaan korkeus kallistuksen kanssa
  819.     tst.w    d1
  820.     ble.s    .nooon
  821.     add.w    d3,d3
  822.     ext.l    d3
  823.     neg.l    d3
  824.     add.l    a1,d3
  825.     move.l    d0,a0
  826.  
  827.     move.l    d3,$ffff8a24.w
  828.     move.l    a0,$ffff8a32.w
  829.     move.l    d1,$ffff8a36.w
  830.     move.w    #$c040,$ffff8a3c.w
  831. .nooon:
  832.  
  833.     lsl.w    #7,d6
  834.     and.w    #$1f,d2            ; Jostain syysta texturen x-position on
  835.                     ; valilla 1-32 eika 0-31!!!
  836.     or.w    d2,d6
  837.     addq.l    #6,a6
  838.     move.w    d6,(a5)+
  839.     move.w    d4,(a5)+
  840.     add.l    a4,d4
  841. .done:
  842.  lea    80*2(a1),a1
  843.  addq.l    #4,d0
  844.     dbf    d7,.slp1
  845.     rts
  846.  
  847. ; Piirra seinat
  848.  
  849.  
  850. susie.hdist:
  851.     move.w    susie.skew(pc),d0
  852.     move.w    d0,d1
  853.     asr.w    #1,d0
  854.     neg.w    d0
  855.     swap    d1
  856.     clr.w    d1
  857.     asr.l    #8,d1            ; x-offsetin muutos/vaakaline
  858.     move.w    d1,a5
  859.     move.l    a5,d4
  860.     neg.l    d4
  861.     lea    rastatest(pc),a0
  862.     lea    rastadr+2(pc),a1
  863.     move.w    #192,d0            ; modulo
  864.     moveq    #127-1,d7
  865.     add.l    d4,d4
  866.     move.l    d4,d1
  867.     lsl.l    #6-1,d1
  868.     swap    d1
  869.     add.w    d0,d1
  870.     move.w    d1,firstmodulo
  871.     clr.l    d1
  872.     clr.l    d2
  873. .lp1:
  874.     swap    d1
  875.     swap    d2
  876.     sub.w    d1,d2
  877.     add.w    d0,d2
  878.  
  879.     move.w    d2,2(a0)
  880.     lea    rastend-rastatest(a0),a0
  881.     move.l    a0,(a1)
  882.     lea    rastend-rastatest(a1),a1
  883.     swap    d1
  884.     move.l    d1,d2
  885.     add.l    d4,d1
  886.     dbf    d7,.lp1
  887.     rts
  888.  
  889.  
  890. ; pyorita z-akselin ympari
  891.  
  892. susie.zangle:    DC.W    0
  893. susie.adz:    DC.W    1
  894. susie.cosalpha:    DC.W    0
  895. susie.skew:    DC.W    0
  896. susie.kalsin:    DC.W    0
  897.  
  898. susie.zrotate:
  899.     move.w    susie.kalsin(pc),d0
  900.     bsr    xsin
  901.     asr.w    #3,d1
  902.  move.w    d1,d0
  903.  asr.w    #2,d0
  904.  sub.w    d0,d1
  905.     move.w    d1,d7
  906.     move.w    d1,d0
  907.     bsr    xcos
  908.     asr.w    #8,d1
  909.     move.w    d1,susie.cosalpha
  910.     move.w    d7,d0
  911.     bsr    xsin
  912.     asr.w    #8,d1
  913.     add.w    d1,d1
  914.     move.w    d1,susie.skew
  915.     rts
  916.     
  917.  
  918. basen    =    $36
  919.  
  920. susie.drawalls:
  921.  
  922. ; make halftone table and init blitter registers
  923.  
  924.     lea    $ffff8a00+basen.w,a0
  925.     lea    susie.floor,a2
  926.     lea    32-basen(a0),a1
  927.     moveq    #16-1,d7
  928. .lp1:
  929.     move.w    (a2)+,-(a1)
  930.     dbf    d7,.lp1
  931.     move.l    #2<<16+2,$20-basen(a0)
  932.     moveq    #-1,d1
  933.     move.l    d1,$28-basen(a0)
  934.     move.w    d1,$2c-basen(a0)
  935.     move.w    #$0103,$3a-basen(a0)
  936.  
  937.     move.l    address.screen1,d3
  938.     add.l    #susie.linewidth*4+susie.linewidth*susie.screenkorkeus/2-96+32+8,d3 +128,d3
  939.  
  940. htbaddr:move.l    #$12345678,a6
  941.     lea    512*8-80*8(a6),a6
  942.     move.w    #192-1,d7
  943.     move.l    (a6)+,d2
  944.     move.w    (a6)+,d0    ; texture xpos
  945.     move.w    (a6)+,d5
  946.     move.l    #2<<16+((susie.linewidth-2)&$ffff),a4
  947.     move.l    #-susie.linewidth<<16+((-susie.linewidth)&$ffff),a5
  948.     move.l    a4,$2e-basen(a0)
  949.     move.l    #$0203c040,a2
  950.     move.w    #$0203,$3a-basen(a0)
  951.     bra.w    cc
  952.  
  953.     CNOP    0,4
  954. aa:
  955. susie.waitblit:
  956.     tst.w    $38-basen(a0)
  957.     beq.s    nokia
  958.     move.b    #$80,$3c-basen(a0)
  959.     bra.s    susie.waitblit
  960. nokia:
  961.     rts
  962. cc:
  963. .xlp1:
  964.     move.w    d2,a3        ; y-alkukohta << 8
  965.     move.l    a3,d6        ; extendattuna
  966.     clr.b    d6
  967.     lsl.l    #2,d6        ; << 2... linen leveys 1024 bytea
  968.     add.l    d3,d6        ; screen address
  969.     addq.l    #4,d3
  970.  
  971.     move.w    #2,d2
  972.     swap    d2        
  973.     move.l    d2,d4        ; korkeus
  974.     move.w    d0,d5
  975.     and.w    #$7f,d0
  976.     mulu    d4,d0        ; seinan korkeus*texture xpos
  977.     add.l    d0,d0
  978.     move.w    d4,d1
  979.     and.w    #-128,d5
  980.     or.w    d5,d4
  981.     neg.w    d4
  982.     asr.w    d1        ; seinan korkeus/2
  983.     sub.w    #64,d1
  984.     neg.w    d1
  985.  
  986.     swap    d1
  987.     move.l    d1,d5
  988.     move.w    #4,d1
  989.  
  990.     swap    d1
  991.     addq.w    #3,d1
  992.     asr.w    #2,d1
  993.  
  994.     clr.w    d5
  995.     asr.l    #6,d5
  996.     neg.l    d5
  997.     add.l    d6,d5            ; destination address for roof
  998.     add.l    #64*2*susie.linewidth-512*2,d5
  999.  
  1000.     lea    susie.textureposit+128*4*susie.maxnumoftextures,a3
  1001.  
  1002. .hlp:
  1003.     tst.w    hsyncflag(pc)
  1004.     beq.s    .hlp
  1005.     sf    hsyncflag    ; Clearaa ylempi byte
  1006.  
  1007. ; floor [1/2]
  1008.  
  1009.     move.l    a5,$2e-basen(a0)
  1010.     move.l    d5,$32-basen(a0)
  1011.     addq.l    #2,d5
  1012.     move.l    d1,$36-basen(a0)
  1013.     move.l    #$0103c000,$3a-basen(a0)
  1014.     nop
  1015.  
  1016. ; floor [2/2]
  1017.  
  1018.     move.l    d1,$36-basen(a0)
  1019.     move.l    d5,$32-basen(a0)
  1020.     move.w    #$c000,$3c-basen(a0)
  1021.     add.l    (a3,d4.w*4),d0    ; scaletun texturen alkuosoite
  1022.     nop
  1023.  
  1024. ; wall
  1025.  
  1026.     move.l    d2,d4
  1027.     move.l    (a6)+,d2
  1028.     move.l    d0,a1
  1029.     move.w    (a6)+,d0
  1030.     move.w    (a6)+,d5
  1031.  
  1032.     tst.w    d4
  1033.     beq.s    .nollura
  1034.     move.l    a1,$24-basen(a0)
  1035.     move.l    d4,$36-basen(a0)
  1036.     move.l    a4,$2e-basen(a0)
  1037.     move.l    d6,$32-basen(a0)
  1038.     move.l    a2,$3a-basen(a0)
  1039. .nollura:
  1040.     dbf    d7,.xlp1
  1041.     rts
  1042.  
  1043. bb:
  1044.     IFGT    (bb-aa)-(200)
  1045.     FAIL
  1046.     ENDC
  1047.  
  1048.  
  1049. ; prescalea tekstuuri wall-rutiinia varten
  1050.  
  1051. susie.scaletexture:
  1052.     bsr    susie.makeskyfade
  1053.  
  1054.     move.l    address.freemem,a2
  1055.     add.l    #susie.textures,a2
  1056.  
  1057.     move.l    #dualtexturescaletab1,address.dualtexturescaletab
  1058.     lea    susie.textureposit+128*4*3,a1
  1059.     move.l    #susie.pic1+14,susie.ctexture
  1060.     bsr    susie.scale
  1061.     IFEQ    susie.alltextures
  1062.     rts
  1063.     ENDC
  1064.     move.l    #dualtexturescaletab2,address.dualtexturescaletab
  1065.     lea    susie.textureposit+128*4*2,a1
  1066.     move.l    #susie.pic2+14,susie.ctexture
  1067.     bsr    susie.scale
  1068.     lea    susie.textureposit+128*4*1,a1
  1069.     move.l    #susie.pic3+14,susie.ctexture
  1070.     bsr    susie.scale
  1071.     lea    susie.textureposit,a1
  1072.     move.l    #susie.pic4+14,susie.ctexture
  1073.  
  1074. susie.scale:
  1075.     move.w    #28,.blurcnt
  1076.     move.l    a2,(a1)+
  1077.     move.w    #127,d6            ; seinan korkeus
  1078.     move.w    #128-2,d7        ; korkeuksien maara
  1079. .sizelp1:
  1080.     swap    d7
  1081.     move.w    (scaletab,d6.l*2),d1
  1082.     sub.w    #128-2,d1
  1083.     neg.w    d1
  1084.     move.w    #197,d0
  1085.     mulu    d1,d0
  1086.     add.l    d0,d0
  1087.     move.l    d0,a3
  1088.     move.w    #184,d0
  1089.     mulu    d1,d0
  1090.     asr.l    #4,d0
  1091.     move.w    d0,a4
  1092.     move.w    #167,d0
  1093.     mulu    d1,d0
  1094.     asr.l    #7,d0
  1095.     move.w    d0,a5
  1096.  
  1097.     move.l    susie.ctexture(pc),a6
  1098.     moveq    #susie.texturewidth-1,d4
  1099.     move.l    #susie.texturekorkeus<<16,d0
  1100.     clr.l    d1
  1101.     move.l    a2,(a1)+
  1102.     move.l    a1,-(sp)
  1103.     divu.l    d6,d1:d0        ; texture y step
  1104.     cmp.w    #127,([address.dualtexturescaletab],d6.l*2)
  1105.     beq.s    .nodouble
  1106.     bsr    doubletexture
  1107.     bra.s    .nosingle
  1108. .nodouble:
  1109.     bsr    singletexture
  1110. .nosingle:
  1111.     subq.l    #1,d6
  1112.     swap    d7
  1113.     move.w    d7,d2
  1114.     and.w    #$3,d2
  1115.     bne.s    .ok
  1116.     move.w    .blurcnt,d2
  1117.     beq.s    .ok
  1118.     subq.w    #1,d2
  1119.     move.w    d2,.blurcnt
  1120.     movem.l    d0-7/a0-6,-(sp)
  1121.     bsr    blurtexture
  1122.     movem.l    (sp)+,d0-7/a0-6
  1123. .ok:
  1124.     move.l    (sp)+,a1
  1125.     dbf    d7,.sizelp1
  1126.     rts
  1127. .blurcnt:DC.W    0
  1128.  
  1129. singletexture:
  1130.     clr.l    d1
  1131.     move.w    d6,d5            ; linen korkeus
  1132.     subq.w    #1,d5
  1133.     move.l    a2,-(sp)
  1134. .ylp1:
  1135.     move.l    d1,d2
  1136.     swap    d2            ; texture y line
  1137.     ext.l    d2
  1138.     move.l    d2,d3
  1139.     add.l    d2,d2
  1140.     add.l    d3,d2            ; *3
  1141.     lsl.l    #5,d2            ; *linen leveys
  1142.     lea    (a6,d2.l),a0
  1143.  
  1144.     move.w    (scaletab,d6.l*2),d7
  1145.     clr.w    d2
  1146.     move.b    (a0)+,d2
  1147.     mulu    d7,d2
  1148.     add.l    d2,d2
  1149.     add.l    a3,d2
  1150.     and.w    #$f800,d2
  1151.  
  1152.     clr.w    d3
  1153.     move.b    (a0)+,d3
  1154.     mulu    d7,d3
  1155.     lsr.l    #4,d3
  1156.     add.l    a4,d3
  1157.     and.w    #$7e0,d3
  1158.     or.w    d3,d2
  1159.  
  1160.     clr.w    d3
  1161.     move.b    (a0)+,d3
  1162.     mulu    d7,d3
  1163.     lsr.l    #7,d3
  1164.     add.l    a5,d3
  1165.     and.w    #$f8,d3
  1166.     lsr.w    #3,d3
  1167.     or.w    d3,d2
  1168.     move.w    d2,(a2)+
  1169.     add.l    d0,d1            ; texture y pos
  1170.     dbf    d5,.ylp1
  1171.  
  1172. ******* ALALAIDAN EKA BLURLINE *************
  1173.  
  1174.     lsr.w    #2,d2
  1175.     and.w    #$3800!$1e0!$7,d2
  1176.     lea    susie.floor+15*2,a1
  1177.     move.w    d6,d3
  1178.     asr.w    #3,d3
  1179.     neg.w    d3
  1180.     move.w    (a1,d3.w*2),d3
  1181.     lsr.w    d3
  1182.     and.w    #$7800!$3e0!$f,d3
  1183.     add.w    d3,d2
  1184.     lsr.w    d3
  1185.     and.w    #$3800!$1e0!$7,d3
  1186.     add.w    d3,d2
  1187.     move.w    d2,-2(a2)
  1188.  
  1189. ******* YLALAIDAN EKA BLURLINE *************
  1190.  
  1191.     lea    susie.skyshade+63*2(pc),a1
  1192.     move.w    d6,d3
  1193.     asr.w    #1,d3
  1194.     neg.w    d3
  1195.     move.w    (a1,d3.w*2),d3
  1196.     lsr.w    d3
  1197.     and.w    #$7800!$3e0!$f,d3
  1198.     move.l    (sp),a1
  1199.     move.w    (a1),d2
  1200.     lsr.w    #2,d2
  1201.     and.w    #$3800!$1e0!$7,d2
  1202.     add.w    d3,d2
  1203.     lsr.w    d3
  1204.     and.w    #$3800!$1e0!$7,d3
  1205.     add.w    d3,d2
  1206.     move.w    d2,(a1)
  1207.  
  1208. ******* ALALAIDAN TOINEN BLURLINE *************
  1209.  
  1210.     move.w    -4(a2),d2
  1211.     lsr.w    d2
  1212.     and.w    #$7800!$3e0!$f,d2
  1213.     move.w    d2,d3
  1214.     lsr.w    d3
  1215.     and.w    #$3800!$1e0!$7,d3
  1216.     add.w    d3,d2
  1217.     lea    susie.floor+15*2,a1
  1218.     move.w    d6,d3
  1219.     asr.w    #3,d3
  1220.     neg.w    d3
  1221.     move.w    (a1,d3.w*2),d3
  1222.     lsr.w    #2,d3
  1223.     and.w    #$3800!$1e0!$7,d3
  1224.     add.w    d3,d2
  1225.     move.w    d2,-4(a2)
  1226.  
  1227. ******* YLALAIDAN TOKA BLURLINE *************
  1228.  
  1229.     lea    susie.skyshade+63*2(pc),a1
  1230.     move.w    d6,d3
  1231.     asr.w    #1,d3
  1232.     neg.w    d3
  1233.     move.w    (a1,d3.w*2),d3
  1234.     lsr.w    #2,d3
  1235.     and.w    #$3800!$1e0!$7,d3
  1236.     move.l    (sp)+,a1
  1237.     move.w    2(a1),d2
  1238.     lsr.w    d2
  1239.     and.w    #$7800!$3e0!$f,d2
  1240.     add.w    d2,d3
  1241.     lsr.w    d2
  1242.     and.w    #$3800!$1e0!$7,d2
  1243.     add.w    d2,d3
  1244.     move.w    d3,2(a1)
  1245.  
  1246.     addq.l    #3,a6
  1247.     dbf    d4,singletexture
  1248.     rts
  1249.  
  1250. doubletexture:
  1251.     clr.l    d1
  1252.     move.w    d6,d5            ; linen korkeus
  1253.     subq.w    #1,d5
  1254.     move.l    a2,-(sp)
  1255. .ylp1:
  1256.     move.l    d1,d2
  1257.     move.l    d1,-(sp)    
  1258.     swap    d2            ; texture y line
  1259.     ext.l    d2
  1260.     move.l    d2,d3
  1261.     add.l    d2,d2
  1262.     add.l    d3,d2            ; *3
  1263.     lsl.l    #5,d2            ; *linen leveys
  1264.     move.l    a6,a0
  1265.     add.l    d2,a0
  1266.     lea    32*3*128+14(a0),a1
  1267.     move.w    (scaletab,d6.l*2),d7
  1268.     clr.w    d2
  1269.     move.b    (a0)+,d2
  1270.     move.w    (dualtexturescaletab1,d6.l*2),d1
  1271.     mulu    d1,d2
  1272.     sub.w    #128,d1
  1273.     neg.w    d1
  1274.     clr.w    d3
  1275.     move.b    (a1)+,d3
  1276.     mulu    d1,d3
  1277.     add.w    d3,d2
  1278.     asr.l    #7,d2
  1279.     mulu    d7,d2
  1280.     add.l    d2,d2
  1281.     add.l    a3,d2
  1282.     and.w    #$f800,d2
  1283.     move.w    d2,(a2)
  1284.  
  1285.     clr.w    d3
  1286.     move.b    (a0)+,d3
  1287.     move.w    (dualtexturescaletab1,d6.l*2),d1
  1288.     mulu    d1,d3
  1289.     sub.w    #128,d1
  1290.     neg.w    d1
  1291.     clr.w    d2
  1292.     move.b    (a1)+,d2
  1293.     mulu    d1,d2
  1294.     add.w    d2,d3
  1295.     asr.l    #7,d3
  1296.     mulu    d7,d3
  1297.     lsr.l    #4,d3
  1298.     add.l    a4,d3
  1299.     and.w    #$7e0,d3
  1300.     or.w    d3,(a2)
  1301.  
  1302.     clr.w    d3
  1303.     move.b    (a0)+,d3
  1304.     move.w    (dualtexturescaletab1,d6.l*2),d1
  1305.     mulu    d1,d3
  1306.     sub.w    #128,d1
  1307.     neg.w    d1
  1308.     clr.w    d2
  1309.     move.b    (a1)+,d2
  1310.     mulu    d1,d2
  1311.     add.w    d2,d3
  1312.     asr.l    #7,d3
  1313.     mulu    d7,d3
  1314.     lsr.l    #7,d3
  1315.     add.l    a5,d3
  1316.     and.w    #$f8,d3
  1317.     lsr.w    #3,d3
  1318.     or.w    d3,d2
  1319.     move.w    (a2),d2
  1320.     or.w    d3,d2
  1321.     move.w    d2,(a2)+
  1322.     move.l    (sp)+,d1
  1323.     add.l    d0,d1            ; texture y pos
  1324.     dbf    d5,.ylp1
  1325.  
  1326. ******* ALALAIDAN EKA BLURLINE *************
  1327.  
  1328.     lsr.w    #2,d2
  1329.     and.w    #$3800!$1e0!$7,d2
  1330.     lea    susie.floor+15*2,a1
  1331.     move.w    d6,d3
  1332.     asr.w    #3,d3
  1333.     neg.w    d3
  1334.     move.w    (a1,d3.w*2),d3
  1335.     lsr.w    d3
  1336.     and.w    #$7800!$3e0!$f,d3
  1337.     add.w    d3,d2
  1338.     lsr.w    d3
  1339.     and.w    #$3800!$1e0!$7,d3
  1340.     add.w    d3,d2
  1341.     move.w    d2,-2(a2)
  1342.  
  1343. ******* YLALAIDAN EKA BLURLINE *************
  1344.  
  1345.     lea    susie.skyshade+15*2(pc),a1
  1346.     move.w    d6,d3
  1347.     asr.w    #3,d3
  1348.     neg.w    d3
  1349.     move.w    (a1,d3.w*2),d3
  1350.     lsr.w    d3
  1351.     and.w    #$7800!$3e0!$f,d3
  1352.     move.l    (sp),a1
  1353.     move.w    (a1),d2
  1354.     lsr.w    #2,d2
  1355.     and.w    #$3800!$1e0!$7,d2
  1356.     add.w    d3,d2
  1357.     lsr.w    d3
  1358.     and.w    #$3800!$1e0!$7,d3
  1359.     add.w    d3,d2
  1360.     move.w    d2,(a1)
  1361.  
  1362. ******* ALALAIDAN TOINEN BLURLINE *************
  1363.  
  1364.     move.w    -4(a2),d2
  1365.     lsr.w    d2
  1366.     and.w    #$7800!$3e0!$f,d2
  1367.     move.w    d2,d3
  1368.     lsr.w    d3
  1369.     and.w    #$3800!$1e0!$7,d3
  1370.     add.w    d3,d2
  1371.     lea    susie.floor+15*2,a1
  1372.     move.w    d6,d3
  1373.     asr.w    #3,d3
  1374.     neg.w    d3
  1375.     move.w    (a1,d3.w*2),d3
  1376.     lsr.w    #2,d3
  1377.     and.w    #$3800!$1e0!$7,d3
  1378.     add.w    d3,d2
  1379.     move.w    d2,-4(a2)
  1380.  
  1381. ******* YLALAIDAN TOKA BLURLINE *************
  1382.  
  1383.     lea    susie.skyshade+15*2(pc),a1
  1384.     move.w    d6,d3
  1385.     asr.w    #3,d3
  1386.     neg.w    d3
  1387.     move.w    (a1,d3.w*2),d3
  1388.     lsr.w    #2,d3
  1389.     and.w    #$3800!$1e0!$7,d3
  1390.     move.l    (sp)+,a1
  1391.     move.w    2(a1),d2
  1392.     lsr.w    d2
  1393.     and.w    #$7800!$3e0!$f,d2
  1394.     add.w    d2,d3
  1395.     lsr.w    d2
  1396.     and.w    #$3800!$1e0!$7,d2
  1397.     add.w    d2,d3
  1398.     move.w    d3,2(a1)
  1399.  
  1400.     addq.l    #3,a6
  1401.     dbf    d4,doubletexture
  1402.     rts
  1403.  
  1404. xtratexture:
  1405.     DC.L    0
  1406.  
  1407. blurpix:MACRO
  1408.     REPT    3
  1409.     clr.w    d0
  1410.     move.b    \1(a0),d0
  1411.     clr.w    d1
  1412.     move.b    \2(a0),d1
  1413.     add.w    d1,d0
  1414.     move.b    \3(a0),d1
  1415.     add.w    d1,d0
  1416.     move.b    \4(a0),d1
  1417.     add.w    d1,d0
  1418.     asr.w    #3,d0
  1419.     move.b    (a0)+,d1
  1420.     add.w    d1,d0
  1421.     asr.w    d1
  1422.     add.w    d1,d0
  1423.     asr.w    d0
  1424.     move.b    d0,(a1)+
  1425.     ENDR
  1426.     ENDM
  1427.  
  1428. blurtexture:
  1429.     move.l    susie.ctexture(pc),a0
  1430.     move.l    address.screen1,a1
  1431.  
  1432.     BLURPIX    127*32*3,32*3,31*3,3
  1433.     moveq    #30/2-1,d7
  1434. .xlpupper:
  1435.     BLURPIX    127*32*3,32*3,-3,3
  1436.     BLURPIX    127*32*3,32*3,-3,3
  1437.     dbf    d7,.xlpupper
  1438.     BLURPIX    127*32*3,32*3,-3,-31*3
  1439.  
  1440.     moveq    #126-1,d6
  1441. .ylp1:
  1442.     BLURPIX    -32*3,32*3,31*3,3
  1443.     moveq    #30/3-1,d7
  1444. .xlp1:
  1445.     BLURPIX    -32*3,32*3,-3,3
  1446.     BLURPIX    -32*3,32*3,-3,3
  1447.     BLURPIX    -32*3,32*3,-3,3
  1448.     dbf    d7,.xlp1
  1449.     BLURPIX    -32*3,32*3,-3,-31*3
  1450.     dbf    d6,.ylp1
  1451.  
  1452.     BLURPIX    -32*3,-127*32*3,31*3,3
  1453.     moveq    #30/2-1,d7
  1454. .xlplower:
  1455.     BLURPIX    -32*3,-127*32*3,-3,3
  1456.     BLURPIX    -32*3,-127*32*3,-3,3
  1457.     dbf    d7,.xlplower
  1458.     BLURPIX    -32*3,-127*32*3,-3,-31*3
  1459.  
  1460.     move.l    address.screen1,a0
  1461.     move.l    susie.ctexture(pc),a1
  1462.     move.w    #128*32/4-1,d7
  1463. .lp1:
  1464.     move.l    (a0)+,(a1)+
  1465.     move.l    (a0)+,(a1)+
  1466.     move.l    (a0)+,(a1)+
  1467.     dbf    d7,.lp1
  1468.     rts
  1469.  
  1470. susie.makeskyfade:
  1471.     move.l    address.freemem(pc),a0
  1472.     add.l    #susie.sky+16*2,a0
  1473.     lea    susie.skyshade(pc),a1
  1474.     moveq    #64-1,d7
  1475. .ylp1:
  1476.     move.w    80*2*80(a0),d1
  1477.     move.w    80*2*160(a0),d2
  1478.     move.w    (80*2*240,a0.l),d3
  1479.     move.w    (a0)+,d0
  1480.     lsr.w    #2,d0
  1481.     lsr.w    #2,d1
  1482.     lsr.w    #2,d2
  1483.     lsr.w    #2,d3
  1484.     and.w    #$3800!$1e0!$7,d0
  1485.     and.w    #$3800!$1e0!$7,d1
  1486.     and.w    #$3800!$1e0!$7,d2
  1487.     and.w    #$3800!$1e0!$7,d3
  1488.     add.w    d1,d0
  1489.     add.w    d2,d0
  1490.     add.w    d3,d0
  1491.     move.w    d0,(a1)+
  1492.     dbf    d7,.ylp1
  1493.     rts
  1494.  
  1495. susie.ctexture:
  1496.     DC.L    0
  1497.  
  1498. address.dualtexturescaletab:
  1499.     DC.L    0
  1500.  
  1501. dualtexturescaletab1:
  1502.     DCB.W    128-31,127
  1503. n    SET    127
  1504.     REPT    31
  1505.     DC.w    n
  1506. n    SET    n-4
  1507.     ENDR
  1508.  
  1509. dualtexturescaletab2:
  1510.     DCB.W    128,127
  1511.  
  1512. scaletab:
  1513. n    SET    0
  1514.     REPT    63
  1515.     DC.W    n
  1516. n    SET    n+2
  1517.     ENDR
  1518.     REPT    65
  1519.     DC.W    n
  1520.     ENDR
  1521.  
  1522.  
  1523. susie.skyshade:
  1524.     DS.W    64
  1525.  
  1526. susie.createsky:
  1527.     lea    susie.skygfx,a0
  1528.     move.l    address.screen1,a1
  1529.     move.w    #80-1,d6
  1530. .ylp1:
  1531.     move.w    #320-1,d7
  1532. .xlp1:
  1533.     move.w    (a0)+,(a1)
  1534.     lea    80*2(a1),a1
  1535.     dbf    d7,.xlp1
  1536.     sub.l    #80*2*320-2,a1
  1537.     dbf    d6,.ylp1
  1538.  
  1539.     move.l    address.screen1,a0
  1540.     move.l    address.freemem,a1
  1541.     add.l    #susie.sky,a1
  1542.     move.w    #320-1,d6
  1543. .ylp1b:
  1544.     move.w    #80-1,d7
  1545. .xlp1b:
  1546.     move.w    (a0)+,d0
  1547.     move.w    d0,(a1)+
  1548.     dbf    d7,.xlp1b
  1549.     dbf    d6,.ylp1b
  1550.  
  1551.     move.l    address.freemem,a0
  1552.     add.l    #susie.sky,a0
  1553.     move.w    #512-320-1,d6
  1554. .ylp1c:
  1555.     move.w    #80-1,d7
  1556. .xlp1c:
  1557.     move.w    (a0)+,d0
  1558.     move.w    d0,(a1)+
  1559.     dbf    d7,.xlp1c
  1560.     dbf    d6,.ylp1c
  1561.     rts
  1562.  
  1563. ; -----    prelaske liikerata ---------------------
  1564.  
  1565.     ;Dc.w    0
  1566.  
  1567. susie.splinecoords:
  1568.     Dc.w    340,960
  1569.     Dc.w    380,880
  1570.     Dc.w    360,800
  1571.     Dc.w    280,720
  1572.     Dc.w    220,680
  1573.     Dc.w    160,640
  1574.     Dc.w    140,560
  1575.     Dc.w    140,460
  1576.     Dc.w    160,400
  1577.     Dc.w    200,480
  1578.     Dc.w    200,580
  1579.     Dc.w    240,660
  1580.     Dc.w    300,700
  1581.     Dc.w    360,680
  1582.     Dc.w    380,600
  1583.     Dc.w    340,520
  1584.     Dc.w    280,460
  1585.     Dc.w    260,400
  1586.     Dc.w    320,320
  1587.     Dc.w    400,320
  1588.     Dc.w    520,340
  1589.     Dc.w    580,380
  1590.     Dc.w    580,520
  1591.     Dc.w    540,600
  1592.     Dc.w    520,680
  1593.     Dc.w    480,680
  1594.     Dc.w    440,660
  1595.     Dc.w    420,640
  1596.     Dc.w    380,680
  1597.     Dc.w    380,760
  1598.     Dc.w    420,800
  1599.     Dc.w    480,840
  1600.     Dc.w    560,860
  1601.     Dc.w    620,820
  1602.     Dc.w    700,780
  1603.     Dc.w    740,740
  1604.     Dc.w    760,680
  1605.     Dc.w    780,600
  1606.     Dc.w    800,540
  1607.     Dc.w    820,460
  1608.     Dc.w    800,380
  1609.     Dc.w    740,340
  1610.     Dc.w    640,340
  1611.     Dc.w    500,340
  1612.     Dc.w    420,340
  1613.     Dc.w    400,320
  1614.     Dc.w    400,260
  1615.     Dc.w    440,200
  1616.     Dc.w    500,160
  1617.     Dc.w    520,200
  1618.     Dc.w    480,240
  1619.     Dc.w    440,260
  1620.     Dc.w    420,300
  1621.     Dc.w    360,380
  1622.     Dc.w    360,440
  1623.     Dc.w    340,500
  1624.     Dc.w    340,560
  1625.     Dc.w    340,640
  1626.     Dc.w    380,700
  1627.     Dc.w    400,740
  1628.     Dc.w    460,800
  1629.     Dc.w    500,820
  1630.     Dc.w    560,860
  1631.     Dc.w    580,900
  1632.     Dc.w    560,960
  1633.     Dc.w    480,1000
  1634.     Dc.w    360,1000
  1635.     Dc.w    340,960
  1636.     Dc.w    380,880
  1637.     Dc.w    360,800
  1638.  
  1639. susie.splinecoords2:
  1640.     Dc.w    340,940
  1641.     Dc.w    380,860
  1642.     Dc.w    340,780
  1643.     Dc.w    260,700
  1644.     Dc.w    200,660
  1645.     Dc.w    140,620
  1646.     Dc.w    140,540
  1647.     Dc.w    140,440
  1648.     Dc.w    160,420
  1649.     Dc.w    180,480
  1650.     Dc.w    220,620
  1651.     Dc.w    260,660
  1652.     Dc.w    320,680
  1653.     Dc.w    360,660
  1654.     Dc.w    380,580
  1655.     Dc.w    320,500
  1656.     Dc.w    260,440
  1657.     Dc.w    260,380
  1658.     Dc.w    340,320
  1659.     Dc.w    420,320
  1660.     Dc.w    540,360
  1661.     Dc.w    560,400
  1662.     Dc.w    580,540
  1663.     Dc.w    540,620
  1664.     Dc.w    500,680
  1665.     Dc.w    460,680
  1666.     Dc.w    420,660
  1667.     Dc.w    400,660
  1668.     Dc.w    380,720
  1669.     Dc.w    400,760
  1670.     Dc.w    440,800
  1671.     Dc.w    500,840
  1672.     Dc.w    580,840
  1673.     Dc.w    640,800
  1674.     Dc.w    700,760
  1675.     Dc.w    740,720
  1676.     Dc.w    760,660
  1677.     Dc.w    780,580
  1678.     Dc.w    800,520
  1679.     Dc.w    780,420
  1680.     Dc.w    760,380
  1681.     Dc.w    720,340
  1682.     Dc.w    620,340
  1683.     Dc.w    500,360
  1684.     Dc.w    400,320
  1685.     Dc.w    380,300
  1686.     Dc.w    400,240
  1687.     Dc.w    460,180
  1688.     Dc.w    500,180
  1689.     Dc.w    500,220
  1690.     Dc.w    460,240
  1691.     Dc.w    420,280
  1692.     Dc.w    400,300
  1693.     Dc.w    360,400
  1694.     Dc.w    340,460
  1695.     Dc.w    340,520
  1696.     Dc.w    340,580
  1697.     Dc.w    340,660
  1698.     Dc.w    380,720
  1699.     Dc.w    420,760
  1700.     Dc.w    480,820
  1701.     Dc.w    520,840
  1702.     Dc.w    540,860
  1703.     Dc.w    560,900
  1704.     Dc.w    540,940
  1705.     Dc.w    480,980
  1706.     Dc.w    360,980
  1707.     Dc.w    340,940
  1708.     Dc.w    380,860
  1709.     Dc.w    340,780
  1710.  
  1711. susie.prebspline:
  1712.     lea    susie.splinecoords+4(pc),a0
  1713. *    move.l    address.freemem(pc),a5
  1714. *    add.l    #susie.liikerata,a5
  1715.     lea    susie.liikku,a5
  1716.  
  1717. *    bsr    .calcit
  1718. *    lea    susie.splinecoords2+4(pc),a0
  1719. *    move.l    address.freemem(pc),a5
  1720. *    add.l    #susie.liikerata2,a5
  1721. .calcit:
  1722.     moveq    #susie.points-4,d6
  1723. .klp:
  1724.     move.w    #16-1,d7
  1725. .tlp:
  1726.     move.w    d7,d0
  1727.  add.w    d0,d0
  1728.  add.w    d0,d0
  1729.     sub.w    #63,d0
  1730.     neg.w    d0        ; t
  1731.     ext.l    d0
  1732.     lsl.l    #2,d0
  1733.     lsl.l    #8,d0
  1734.     move.l    #1*256*256,d2
  1735.     move.l    #4*256*256,d3
  1736.     move.l    #1*256*256,d4
  1737.  
  1738.     REPT    3
  1739.     sub.l    d0,d2
  1740.     add.l    d0,d4
  1741.     ENDR
  1742.  
  1743.     move.l    d0,-(sp)
  1744.     mulu.l    d0,d0        ; t^2
  1745.     clr.w    d0
  1746.     swap    d0
  1747.     REPT    3
  1748.     add.l    d0,d2
  1749.     add.l    d0,d4
  1750.     ENDR
  1751.     REPT    6
  1752.     sub.l    d0,d3
  1753.     ENDR
  1754.  
  1755.     mulu.l    (sp)+,d0        ; t^3
  1756.     clr.w    d0
  1757.     swap    d0
  1758.     sub.l    d0,d2
  1759.     REPT    3
  1760.     add.l    d0,d3
  1761.     sub.l    d0,d4
  1762.     ENDR
  1763.     move.l    d0,d5
  1764.  
  1765.     clr.l    d0
  1766.     divs.l    #6,d0:d2        ; d2 = k1
  1767.     clr.l    d0
  1768.     divs.l    #6,d0:d3        ; d3 = k2
  1769.     clr.l    d0
  1770.     divs.l    #6,d0:d4        ; d4 = k3
  1771.     clr.l    d0
  1772.     divs.l    #6,d0:d5        ; d5 = k4
  1773.  
  1774. ; x = k1*px(k-1)+k2*px(k)+k3*px(k+1)+k4*px(k+2)
  1775. ; y = k1*py(k-1)+k2*py(k)+k3*py(k+1)+k4*py(k+2)
  1776.  
  1777.     move.w    -4(a0),d0
  1778.     ext.l    d0
  1779.     mulu.l    d2,d0
  1780.     move.l    d0,d1
  1781.     move.w    (a0),d0
  1782.     ext.l    d0
  1783.     mulu.l    d3,d0
  1784.     add.l    d0,d1
  1785.     move.w    4(a0),d0
  1786.     ext.l    d0
  1787.     mulu.l    d4,d0
  1788.     add.l    d0,d1
  1789.     move.w    8(a0),d0
  1790.     ext.l    d0
  1791.     mulu.l    d5,d0
  1792.     add.l    d0,d1        ; x
  1793.     move.l    d1,a4
  1794.  
  1795.     move.w    -4+2(a0),d0
  1796.     ext.l    d0
  1797.     mulu.l    d2,d0
  1798.     move.l    d0,d1
  1799.     move.w    2(a0),d0
  1800.     ext.l    d0
  1801.     mulu.l    d3,d0
  1802.     add.l    d0,d1
  1803.     move.w    4+2(a0),d0
  1804.     ext.l    d0
  1805.     mulu.l    d4,d0
  1806.     add.l    d0,d1
  1807.     move.w    8+2(a0),d0
  1808.     ext.l    d0
  1809.     mulu.l    d5,d0
  1810.     add.l    d0,d1        ; x
  1811.     move.l    a4,d0
  1812.  
  1813.     neg.l    d0
  1814.     lsl.l    #2,d0
  1815.     lsl.l    #2,d1
  1816.     add.l    #$2800<<16,d0
  1817.     add.l    #$1800<<16,d1
  1818.     move.l    d0,(a5)+
  1819.     move.l    d1,(a5)+
  1820.     move.w    .ang,d0
  1821.     move.w    d0,d5
  1822.     bsr    xsin
  1823.     move.w    d1,(a5)+
  1824.     sub.w    #128,.ang
  1825.     move.w    d1,(a5)+
  1826.  
  1827.     dbf    d7,.tlp
  1828. *    lea    -8(a5),a5
  1829.     addq.l    #4,a0
  1830.     dbf    d6,.klp
  1831.     rts
  1832. .ang:    DC.W    0
  1833.  
  1834. susie.readkeys:
  1835.     move.w    suunta(pc),d0
  1836.     move.w    d0,d7
  1837.     bsr    xsin
  1838.     ext.l    d1
  1839.     move.l    d1,d2
  1840.     lsl.l    #8,d2
  1841.     move.l    d2,susie.sin_a
  1842.     move.l    d1,d6
  1843.     move.w    d7,d0
  1844.     bsr    xcos
  1845.     ext.l    d1
  1846.     move.l    d1,d0
  1847.     lsl.l    #8,d0
  1848.     move.l    d0,susie.cos_a
  1849.     lsl.l    #2,d1
  1850.     move.l    d6,d2
  1851.     lsl.l    #2,d2
  1852.     move.b    $fffffc02.w,d0
  1853.     move.l    z_spd(pc),d3
  1854.     move.l    x_spd(pc),d4
  1855.  
  1856.  
  1857.     IFNE    USERCONTROL
  1858.     tst.b    keytab+$2a
  1859.     bne.s    .up
  1860.     tst.b    keytab+$48
  1861.     beq.s    .no_up
  1862. .up:
  1863.     add.l    d1,d3
  1864.     sub.l    d2,d4
  1865. .no_up
  1866.     tst.b    keytab+$38
  1867.     bne.s    .down
  1868.     tst.b    keytab+$50
  1869.     beq.s    .no_down
  1870. .down:
  1871.     sub.l    d1,d3
  1872.     add.l    d2,d4
  1873. .no_down
  1874.     ENDC
  1875.  
  1876.     move.l    d3,d5
  1877.     asr.l    #3,d5
  1878.     sub.l    d5,d3
  1879.     move.l    d3,z_spd
  1880.  
  1881.     move.l    d4,d5
  1882.     asr.l    #3,d5
  1883.     sub.l    d5,d4
  1884.     move.l    d4,x_spd
  1885.     add.l    susie.z_pos,d3
  1886.     and.l    #$7fffffff,d3
  1887.     move.l    d3,susie.z_pos
  1888.     add.l    susie.x_pos,d4
  1889.     and.l    #$7fffffff,d4
  1890.     move.l    d4,susie.x_pos
  1891.  
  1892.     move.w    turnspd(pc),d1
  1893.     move.w    susie.kalsin(pc),d2
  1894.     
  1895.     IFNE    USERCONTROL
  1896.     tst.b    keytab+$4b
  1897.     beq.s    .no_vasen
  1898.     add.w    #64,d1
  1899.     add.w    #256,d2
  1900. .no_vasen
  1901.     tst.b    keytab+$4d
  1902.     beq.s    .no_oikea
  1903.     sub.w    #64,d1
  1904.     sub.w    #256,d2
  1905. .no_oikea
  1906.     ENDC
  1907.  
  1908.     move.w    d2,susie.kalsin
  1909.     move.w    d1,d2
  1910.     asr.w    #3,d2
  1911.     sub.w    d2,d1
  1912.     move.w    d1,turnspd
  1913.  
  1914.     asr.w    d1
  1915.     add.w    d1,suunta
  1916.  
  1917.     move.w    susie.kalsin(pc),d2
  1918.     move.w    d2,d1
  1919.     asr.w    #6,d1
  1920.     sub.w    d1,d2
  1921.     move.w    d2,susie.kalsin
  1922.     rts
  1923.  
  1924. susie.makefloor:
  1925.     lea    susie.floordata+16*6,a0
  1926.     lea    susie.floor,a1
  1927.     moveq    #16-1,d6
  1928. .clp1:
  1929.     subq.l    #6,a0
  1930.     movem.w    (a0),d0-2
  1931.     lsl.w    #8,d0
  1932.     and.w    #$f800,d0
  1933.     lsl.w    #3,d1
  1934.     and.w    #$0fe0,d1
  1935.     or.w    d1,d0
  1936.     lsr.w    #3,d2
  1937.     and.w    #$1f,d2
  1938.     or.w    d2,d0
  1939.     move.w    d0,(a1)+
  1940.     dbf    d6,.clp1
  1941.     rts
  1942.     
  1943. ******* Susien datat **************************************************
  1944.  
  1945.         DATA
  1946.  
  1947. splinedrawn:    DC.W    0
  1948. curcor:        DC.W    0
  1949.  
  1950. susie.floor:
  1951.         DC.W    11<<11+10<<6+12
  1952.         DC.W    10<<11+9<<6+11
  1953.         DC.W    9<<11+8<<6+10
  1954.         DC.W    8<<11+7<<6+9
  1955.         DC.W    7<<11+6<<6+8
  1956.         DC.W    6<<11+5<<6+7
  1957.         DC.W    5<<11+4<<6+6
  1958.         DC.W    4<<11+3<<6+5
  1959.         DC.W    3<<11+2<<6+4
  1960.         DC.W    2<<11+1<<6+3
  1961.         DC.W    1<<11+0<<6+2
  1962.         DC.W    0<<11+0<<6+2
  1963.         DC.W    0<<11+0<<6+1
  1964.         DC.W    0<<11+0<<6+1
  1965.         DC.W    0<<11+0<<6+0
  1966.         DC.W    12<<11+11<<6+13
  1967.  
  1968. susie.floordata:
  1969.     dc.w    110,91,72    ; vika arvo
  1970.     dc.w    185,171,153    ; eka arvo
  1971.     dc.w    177,163,144
  1972.     dc.w    170,155,135
  1973.     dc.w    161,145,127
  1974.     dc.w    155,138,121
  1975.     dc.w    151,133,116
  1976.     dc.w    148,130,112
  1977.     dc.w    144,127,106
  1978.     dc.w    138,121,100
  1979.     dc.w    133,116,95
  1980.     dc.w    129,111,91
  1981.     dc.w    125,106,86
  1982.     dc.w    121,102,82
  1983.     dc.w    118,99,79
  1984.     dc.w    114,95,75
  1985.  
  1986. susie.sin_a:        DC.l    $0
  1987. susie.cos_a:        DC.l    $7fffff
  1988. susie.x_pos:        DC.W    8248,0 $4000,0
  1989. susie.z_pos:        DC.W    7196,0 $3800,0
  1990. susie.number_of_walls:
  1991.     dc.w    345
  1992.     dc.w    116
  1993.     dc.w    70
  1994.     dc.w    44
  1995.     DC.W    8*12
  1996.     dc.w    35
  1997.  
  1998. susie.map:
  1999. ; doom-map RAM:circle.s
  2000. ;    dc.w    345
  2001.     dc.w    7965,7711,8029,7711,1
  2002.     dc.w    8029,7711,8093,7711,1
  2003.     dc.w    8093,7711,8157,7711,1
  2004.     dc.w    8157,7711,8157,7775,1
  2005.     dc.w    8157,7775,8157,7839,1
  2006.     dc.w    8157,7839,8212,7870,2
  2007.     dc.w    8157,7903,8157,7967,1
  2008.     dc.w    8157,7967,8157,8031,1
  2009.     dc.w    8157,8031,8214,8064,2
  2010.     dc.w    8214,8064,8157,8095,2
  2011.     dc.w    8212,7870,8157,7903,2
  2012.     dc.w    8157,8095,8157,8159,1
  2013.     dc.w    8157,8159,8157,8223,1
  2014.     dc.w    8157,8223,8213,8255,2
  2015.     dc.w    8213,8255,8157,8287,2
  2016.     dc.w    8157,8287,8157,8351,1
  2017.     dc.w    8157,8351,8157,8415,1
  2018.     dc.w    8157,8415,8213,8447,2
  2019.     dc.w    8157,8479,8157,8543,1
  2020.     dc.w    8157,8543,8157,8607,1
  2021.     dc.w    8157,8607,8093,8607,1
  2022.     dc.w    8093,8607,8029,8607,1
  2023.     dc.w    8029,8607,7965,8607,1
  2024.     dc.w    7965,8607,7965,8543,1
  2025.     dc.w    7965,8543,7965,8479,1
  2026.     dc.w    7965,8479,7965,8415,1
  2027.     dc.w    7965,8415,7937,8354,1
  2028.     dc.w    7937,8354,7915,8291,1
  2029.     dc.w    7915,8291,7901,8226,1
  2030.     dc.w    7901,8226,7895,8159,1
  2031.     dc.w    7895,8159,7901,8093,1
  2032.     dc.w    7901,8093,7914,8027,1
  2033.     dc.w    7914,8027,7935,7963,1
  2034.     dc.w    7935,7963,7965,7903,1
  2035.     dc.w    7965,7903,7965,7839,1
  2036.     dc.w    7965,7839,7965,7775,1
  2037.     dc.w    7965,7775,7965,7711,1
  2038.     dc.w    8213,8447,8157,8479,2
  2039.     dc.w    8861,7711,8861,7775,3
  2040.     dc.w    8861,7775,8861,7839,3
  2041.     dc.w    8861,7839,8861,7903,3
  2042.     dc.w    8861,7903,8892,7963,3
  2043.     dc.w    8892,7963,8912,8027,3
  2044.     dc.w    8912,8027,8924,8092,3
  2045.     dc.w    8924,8092,8927,8160,3
  2046.     dc.w    8927,8160,8925,8226,3
  2047.     dc.w    8925,8226,8911,8291,3
  2048.     dc.w    8911,8291,8891,8355,3
  2049.     dc.w    8891,8355,8861,8415,3
  2050.     dc.w    8861,8415,8861,8479,3
  2051.     dc.w    8861,8479,8861,8543,3
  2052.     dc.w    8861,8543,8861,8607,3
  2053.     dc.w    8861,8607,8797,8607,3
  2054.     dc.w    8797,8607,8733,8607,3
  2055.     dc.w    8733,8607,8669,8607,3
  2056.     dc.w    8669,8607,8669,8543,3
  2057.     dc.w    8669,8543,8669,8479,3
  2058.     dc.w    8607,8431,8669,8415,0
  2059.     dc.w    8669,8415,8669,8351,3
  2060.     dc.w    8669,8351,8669,8287,3
  2061.     dc.w    8669,8287,8607,8271,0
  2062.     dc.w    8607,8271,8545,8255,0
  2063.     dc.w    8545,8255,8607,8239,0
  2064.     dc.w    8607,8239,8669,8223,0
  2065.     dc.w    8669,8479,8607,8463,0
  2066.     dc.w    8607,8463,8545,8447,0
  2067.     dc.w    8545,8447,8607,8431,0
  2068.     dc.w    8669,8223,8669,8159,3
  2069.     dc.w    8669,8159,8669,8095,3
  2070.     dc.w    8669,8095,8607,8079,0
  2071.     dc.w    8607,8079,8545,8063,0
  2072.     dc.w    8545,8063,8607,8047,0
  2073.     dc.w    8607,8047,8669,8031,0
  2074.     dc.w    8669,8031,8669,7967,3
  2075.     dc.w    8669,7967,8669,7903,3
  2076.     dc.w    8669,7903,8607,7887,0
  2077.     dc.w    8607,7887,8545,7871,0
  2078.     dc.w    8545,7871,8607,7855,0
  2079.     dc.w    8607,7855,8669,7839,0
  2080.     dc.w    8669,7839,8669,7775,3
  2081.     dc.w    8669,7775,8669,7711,3
  2082.     dc.w    8669,7711,8733,7711,3
  2083.     dc.w    8733,7711,8797,7711,3
  2084.     dc.w    8797,7711,8861,7711,3
  2085.     dc.w    8407,8849,8466,8875,0
  2086.     dc.w    8466,8875,8497,8932,0
  2087.     dc.w    8497,8932,8559,8951,0
  2088.     dc.w    8559,8951,8619,8927,0
  2089.     dc.w    8619,8927,8662,8879,0
  2090.     dc.w    8662,8879,8724,8862,0
  2091.     dc.w    8724,8862,8781,8892,0
  2092.     dc.w    8781,8892,8792,8956,0
  2093.     dc.w    8792,8956,8765,9015,0
  2094.     dc.w    8765,9015,8719,9060,0
  2095.     dc.w    8719,9060,8667,9098,0
  2096.     dc.w    8667,9098,8613,9134,0
  2097.     dc.w    8613,9134,8557,9166,0
  2098.     dc.w    8557,9166,8498,9191,0
  2099.     dc.w    8498,9191,8437,9212,0
  2100.     dc.w    8437,9212,8373,9216,0
  2101.     dc.w    8373,9216,8320,9179,0
  2102.     dc.w    8320,9179,8291,9121,0
  2103.     dc.w    8291,9121,8227,9111,0
  2104.     dc.w    8227,9111,8166,9131,0
  2105.     dc.w    8166,9131,8116,9171,0
  2106.     dc.w    8116,9171,8053,9186,0
  2107.     dc.w    8053,9186,7995,9156,0
  2108.     dc.w    7995,9156,7995,9092,0
  2109.     dc.w    7995,9092,8033,9040,0
  2110.     dc.w    8033,9040,8094,9020,0
  2111.     dc.w    8094,9020,8158,9018,0
  2112.     dc.w    8158,9018,8222,9013,0
  2113.     dc.w    8222,9013,8275,8976,0
  2114.     dc.w    8275,8976,8315,8926,0
  2115.     dc.w    8315,8926,8346,8869,0
  2116.     dc.w    8346,8869,8407,8849,0
  2117.     dc.w    8155,7288,8155,7224,0
  2118.     dc.w    8155,7224,8219,7224,0
  2119.     dc.w    8219,7224,8219,7288,0
  2120.     dc.w    8219,7288,8155,7288,0
  2121.     dc.w    8411,7288,8411,7224,0
  2122.     dc.w    8411,7224,8475,7224,0
  2123.     dc.w    8475,7224,8475,7288,0
  2124.     dc.w    8475,7288,8411,7288,0
  2125.     dc.w    8667,7288,8667,7224,0
  2126.     dc.w    8667,7224,8731,7224,0
  2127.     dc.w    8731,7224,8731,7288,0
  2128.     dc.w    8731,7288,8667,7288,0
  2129.     dc.w    8923,7288,8923,7224,0
  2130.     dc.w    8923,7224,8987,7224,0
  2131.     dc.w    8987,7224,8987,7288,0
  2132.     dc.w    8987,7288,8923,7288,0
  2133.     dc.w    9179,7288,9179,7224,3
  2134.     dc.w    9179,7224,9243,7224,3
  2135.     dc.w    9243,7224,9243,7288,3
  2136.     dc.w    9243,7288,9179,7288,3
  2137.     dc.w    6929,7568,6945,7630,3
  2138.     dc.w    6945,7630,6961,7692,3
  2139.     dc.w    6961,7692,6977,7754,3
  2140.     dc.w    6977,7754,6993,7816,3
  2141.     dc.w    6993,7816,7009,7878,3
  2142.     dc.w    7009,7878,7025,7940,3
  2143.     dc.w    7025,7940,7042,8002,3
  2144.     dc.w    7042,8002,7058,8064,3
  2145.     dc.w    7058,8064,7074,8126,3
  2146.     dc.w    7074,8126,7091,8188,3
  2147.     dc.w    7091,8188,7106,8251,3
  2148.     dc.w    7106,8251,7123,8313,3
  2149.     dc.w    7123,8313,7139,8375,3
  2150.     dc.w    7139,8375,7155,8437,3
  2151.     dc.w    7155,8437,7171,8499,3
  2152.     dc.w    7171,8499,7187,8561,3
  2153.     dc.w    7187,8561,7125,8578,0
  2154.     dc.w    7125,8578,7109,8516,3
  2155.     dc.w    7109,8516,7092,8454,3
  2156.     dc.w    7092,8454,7076,8392,3
  2157.     dc.w    7076,8392,7060,8330,3
  2158.     dc.w    7060,8330,7044,8268,3
  2159.     dc.w    7044,8268,7028,8206,3
  2160.     dc.w    7028,8206,7012,8144,3
  2161.     dc.w    7012,8144,6995,8082,3
  2162.     dc.w    6995,8082,6979,8020,3
  2163.     dc.w    6979,8020,6963,7958,3
  2164.     dc.w    6963,7958,6947,7896,3
  2165.     dc.w    6947,7896,6931,7834,3
  2166.     dc.w    6931,7834,6915,7772,3
  2167.     dc.w    6915,7772,6898,7710,3
  2168.     dc.w    6898,7710,6883,7647,3
  2169.     dc.w    6883,7647,6866,7583,3
  2170.     dc.w    6866,7583,6929,7568,0
  2171.     dc.w    7632,6954,7600,7010,3
  2172.     dc.w    7600,7010,7569,7066,3
  2173.     dc.w    7569,7066,7538,7122,3
  2174.     dc.w    7538,7122,7506,7178,3
  2175.     dc.w    7506,7178,7475,7235,3
  2176.     dc.w    7475,7235,7443,7291,3
  2177.     dc.w    7443,7291,7412,7348,3
  2178.     dc.w    7412,7348,7355,7317,0
  2179.     dc.w    7355,7317,7386,7260,3
  2180.     dc.w    7386,7260,7418,7204,3
  2181.     dc.w    7418,7204,7449,7148,3
  2182.     dc.w    7449,7148,7481,7092,3
  2183.     dc.w    7481,7092,7513,7036,3
  2184.     dc.w    7513,7036,7544,6980,3
  2185.     dc.w    7544,6980,7577,6921,3
  2186.     dc.w    7577,6921,7632,6954,0
  2187.     dc.w    8840,9632,8899,9606,1
  2188.     dc.w    8899,9606,8958,9579,1
  2189.     dc.w    8958,9579,9016,9548,1
  2190.     dc.w    9016,9548,9071,9515,1
  2191.     dc.w    9071,9515,9123,9477,1
  2192.     dc.w    9123,9477,9174,9437,1
  2193.     dc.w    9174,9437,9224,9397,1
  2194.     dc.w    9224,9397,9272,9354,1
  2195.     dc.w    9272,9354,9318,9309,1
  2196.     dc.w    9318,9309,9360,9260,1
  2197.     dc.w    9360,9260,9400,9209,1
  2198.     dc.w    9400,9209,9439,9158,1
  2199.     dc.w    9439,9158,9477,9106,1
  2200.     dc.w    9477,9106,9513,9052,1
  2201.     dc.w    9513,9052,9546,8997,1
  2202.     dc.w    9546,8997,9577,8941,1
  2203.     dc.w    9577,8941,9634,8971,2
  2204.     dc.w    9634,8971,9690,9002,2
  2205.     dc.w    9690,9002,9746,9033,2
  2206.     dc.w    7153,6942,7112,6892,2
  2207.     dc.w    7112,6892,7071,6842,2
  2208.     dc.w    9746,9033,9712,9091,1
  2209.     dc.w    9712,9091,9677,9147,1
  2210.     dc.w    9677,9147,9639,9203,1
  2211.     dc.w    9639,9203,9601,9258,1
  2212.     dc.w    9601,9258,9559,9311,1
  2213.     dc.w    9559,9311,9514,9361,1
  2214.     dc.w    9514,9361,9468,9411,1
  2215.     dc.w    9468,9411,9421,9459,1
  2216.     dc.w    9421,9459,9373,9505,1
  2217.     dc.w    9373,9505,9322,9549,1
  2218.     dc.w    9322,9549,9269,9591,1
  2219.     dc.w    9269,9591,9215,9630,1
  2220.     dc.w    9215,9630,9160,9669,1
  2221.     dc.w    9160,9669,9102,9707,1
  2222.     dc.w    9102,9707,9044,9743,1
  2223.     dc.w    9044,9743,8983,9777,1
  2224.     dc.w    8983,9777,8922,9808,1
  2225.     dc.w    8922,9808,8894,9750,2
  2226.     dc.w    8894,9750,8867,9691,2
  2227.     dc.w    8867,9691,8840,9632,2
  2228.     dc.w    9715,8625,9733,8563,1
  2229.     dc.w    9733,8563,9751,8501,1
  2230.     dc.w    9751,8501,9763,8438,1
  2231.     dc.w    9763,8438,9768,8374,1
  2232.     dc.w    9768,8374,9772,8310,1
  2233.     dc.w    9772,8310,9775,8246,1
  2234.     dc.w    9775,8246,9775,8182,1
  2235.     dc.w    9775,8182,9773,8120,1
  2236.     dc.w    9773,8120,9768,8056,1
  2237.     dc.w    9768,8056,9762,7992,1
  2238.     dc.w    9762,7992,9754,7928,1
  2239.     dc.w    9754,7928,9743,7864,1
  2240.     dc.w    9743,7864,9730,7801,1
  2241.     dc.w    9730,7801,9715,7738,1
  2242.     dc.w    9715,7738,9777,7721,2
  2243.     dc.w    9777,7721,9839,7703,2
  2244.     dc.w    9839,7703,9901,7685,0
  2245.     dc.w    9901,7685,9963,7667,2
  2246.     dc.w    9963,7667,10025,7649,2
  2247.     dc.w    10025,8715,9963,8697,2
  2248.     dc.w    9963,8697,9901,8679,2
  2249.     dc.w    9901,8679,9839,8661,2
  2250.     dc.w    9839,8661,9777,8643,2
  2251.     dc.w    9777,8643,9715,8625,2
  2252.     dc.w    9427,7178,9386,7128,1
  2253.     dc.w    9386,7128,9343,7080,1
  2254.     dc.w    9343,7080,9300,7032,1
  2255.     dc.w    9300,7032,9253,6988,1
  2256.     dc.w    9253,6988,9204,6946,1
  2257.     dc.w    9204,6946,9154,6906,1
  2258.     dc.w    9154,6906,9102,6868,1
  2259.     dc.w    9102,6868,9049,6832,1
  2260.     dc.w    9049,6832,8993,6800,1
  2261.     dc.w    8993,6800,8935,6771,1
  2262.     dc.w    8935,6771,8966,6715,2
  2263.     dc.w    8966,6715,8996,6658,2
  2264.     dc.w    8996,6658,9027,6602,2
  2265.     dc.w    9027,6602,9057,6545,2
  2266.     dc.w    9629,7019,9578,7058,2
  2267.     dc.w    9578,7058,9528,7098,2
  2268.     dc.w    9528,7098,9478,7138,2
  2269.     dc.w    9478,7138,9427,7178,2
  2270.     dc.w    8606,6635,8544,6617,1
  2271.     dc.w    8544,6617,8481,6603,1
  2272.     dc.w    8481,6603,8417,6595,1
  2273.     dc.w    8417,6595,8353,6590,1
  2274.     dc.w    8353,6590,8289,6586,1
  2275.     dc.w    8289,6586,8225,6584,1
  2276.     dc.w    8225,6584,8161,6581,1
  2277.     dc.w    8161,6581,8097,6580,1
  2278.     dc.w    8097,6580,8033,6581,1
  2279.     dc.w    8033,6581,7969,6583,1
  2280.     dc.w    7969,6583,7904,6588,1
  2281.     dc.w    7904,6588,7841,6602,1
  2282.     dc.w    7841,6602,7779,6619,1
  2283.     dc.w    7779,6619,7717,6638,1
  2284.     dc.w    7717,6638,7656,6659,1
  2285.     dc.w    7656,6659,7596,6682,1
  2286.     dc.w    7596,6682,7537,6708,1
  2287.     dc.w    7537,6708,7478,6735,1
  2288.     dc.w    7478,6735,7420,6763,1
  2289.     dc.w    7420,6763,7363,6793,1
  2290.     dc.w    7363,6793,7306,6824,1
  2291.     dc.w    7306,6824,7253,6861,1
  2292.     dc.w    7253,6861,7202,6900,1
  2293.     dc.w    7202,6900,7153,6942,1
  2294.     dc.w    8642,6511,8624,6573,2
  2295.     dc.w    8624,6573,8606,6635,2
  2296.     dc.w    6954,7141,6912,7190,1
  2297.     dc.w    6912,7190,6873,7241,1
  2298.     dc.w    6873,7241,6835,7293,1
  2299.     dc.w    6835,7293,6801,7348,1
  2300.     dc.w    6801,7348,6770,7404,1
  2301.     dc.w    6770,7404,6739,7461,1
  2302.     dc.w    6739,7461,6711,7519,1
  2303.     dc.w    6711,7519,6688,7579,1
  2304.     dc.w    6688,7579,6668,7640,1
  2305.     dc.w    6668,7640,6648,7701,1
  2306.     dc.w    6648,7701,6631,7763,1
  2307.     dc.w    6631,7763,6616,7826,1
  2308.     dc.w    6616,7826,6604,7889,1
  2309.     dc.w    6604,7889,6596,7953,1
  2310.     dc.w    6596,7953,6588,8017,1
  2311.     dc.w    6588,8017,6582,8081,1
  2312.     dc.w    6582,8081,6579,8145,1
  2313.     dc.w    6579,8145,6579,8209,1
  2314.     dc.w    6579,8209,6583,8273,1
  2315.     dc.w    6583,8273,6588,8337,1
  2316.     dc.w    6588,8337,6595,8401,1
  2317.     dc.w    6595,8401,6604,8465,1
  2318.     dc.w    6604,8465,6617,8528,1
  2319.     dc.w    6617,8528,6554,8542,2
  2320.     dc.w    6554,8542,6491,8556,2
  2321.     dc.w    6491,8556,6428,8571,2
  2322.     dc.w    6428,8571,6365,8586,2
  2323.     dc.w    6365,8586,6302,8600,2
  2324.     dc.w    6707,6933,6757,6974,2
  2325.     dc.w    6757,6974,6806,7016,2
  2326.     dc.w    6806,7016,6856,7057,2
  2327.     dc.w    6856,7057,6905,7099,2
  2328.     dc.w    6905,7099,6954,7141,2
  2329.     dc.w    6774,8955,6807,9010,1
  2330.     dc.w    6807,9010,6842,9064,1
  2331.     dc.w    6842,9064,6878,9117,1
  2332.     dc.w    6878,9117,6917,9168,1
  2333.     dc.w    6917,9168,6956,9219,1
  2334.     dc.w    6956,9219,6908,9262,2
  2335.     dc.w    6908,9262,6858,9303,2
  2336.     dc.w    6858,9303,6809,9345,2
  2337.     dc.w    6606,9050,6661,9017,2
  2338.     dc.w    6661,9017,6718,8986,2
  2339.     dc.w    6718,8986,6774,8955,2
  2340.     dc.w    6809,9345,6771,9298,1
  2341.     dc.w    6771,9298,6734,9250,1
  2342.     dc.w    6734,9250,6698,9202,1
  2343.     dc.w    6698,9202,6662,9153,1
  2344.     dc.w    6662,9153,6632,9103,1
  2345.     dc.w    6632,9103,6606,9050,1
  2346.  
  2347.  
  2348. susie.textureposit:
  2349.         DCB.L    128*susie.maxnumoftextures,0        ; osoitteet joista eri kokoiset texturet loytyy
  2350.  
  2351. susie.pic1:    *INCBIN    a:\tmap6.ppm
  2352.         INCBIN    susie\tmap1.ppm
  2353. susie.pic2:    *INCBIN    a:\tmap2.ppm
  2354.         INCBIN    susie\tmap2.ppm
  2355. susie.pic3:    *INCBIN    a:\tmap5.ppm
  2356.         INCBIN    susie\tmap9.ppm
  2357. susie.pic4:    *INCBIN    a:\tmap6.ppm
  2358.         INCBIN    susie\tmap6.ppm
  2359.         INCBIN    susie\tmap11.ppm
  2360.         EVEN
  2361.  
  2362. susie.skygfx:
  2363.         *INCBIN    a:\t320x80.bin
  2364.         INCBIN    susie\t320x80.bin
  2365.         EVEN
  2366.  
  2367. susie.liikutus:DC.W    0
  2368. susie.liikku:    DCB.L    susie.points*16*3,0
  2369. susie.liikend:
  2370.  
  2371.         RSRESET
  2372.  
  2373.         RS.W    128*512
  2374. susie.ruutu:    RS.W    512*192*2+128
  2375.  
  2376.         IFEQ    susie.alltextures
  2377. susie.textures:    RS.W    2*susie.texturewidth*128*128/2
  2378.         ELSE
  2379. susie.textures:    RS.W    4*susie.texturewidth*128*128/2
  2380.         ENDC
  2381. *susie.liikerata:RS.L    susie.points*64*2+2
  2382. *susie.liikerata2:RS.L    susie.points*64*2+2
  2383. susie.sky:    RS.W    512*80
  2384. susie.z_buffer:    RS.W    384*3            ; korkeus 0-128,seinä id 0,txt offset 0-128 
  2385. susie.htab:    RS.L    256*5*2+1
  2386. susie.memend:    RS.W    0
  2387.  
  2388.         IFGE    susie.memend-memory
  2389.         FAIL
  2390.         ENDC
  2391.  
  2392. *******************************************************************
  2393.