home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 82 / asm / source / crash / space82.asm < prev    next >
Encoding:
Assembly Source File  |  2001-07-01  |  13.9 KB  |  935 lines

  1. ; /      \      /
  2. ; \ pace  \    / ar
  3. ; /        \/\/     v1.0
  4. ;  by Joe Wingbermuehle
  5.  
  6. #INCLUDE "CRASH82.INC"
  7. .DB "SpaceWar v1.0 by Joe W",0
  8.     
  9. #define    max_aliens    15
  10.  
  11. ;---------= Variables =---------
  12. alien_num =    APD_BUF    ; number of aliens on field
  13. shipy =        APD_BUF+1    ; ship y
  14. shipx =        APD_BUF+2    ; ship x
  15. bullety =    APD_BUF+3    ; bullet y
  16. bulletx =    APD_BUF+4    ; bullet x
  17. bullet_active =    APD_BUF+5    ; is bullet active?
  18. bullet_dir =    APD_BUF+6    ; bullet direction
  19. active_ship =    APD_BUF+7    ; ship direction (specifies sprite)
  20. alien_timer =    APD_BUF+8    ; so alien doesn't move too fast
  21. dead =        APD_BUF+9    ; 1 if dead, 0 if alive
  22. bomb_map =    APD_BUF+10    ; count, x,y  3*10=30 bytes
  23. alien_map =    APD_BUF+40    ; type, phase, x, y, movx, movy, count
  24.                 ; 7*max_aliens bytes
  25. level =        APD_BUF+145    ; current level 0-15
  26. main_timer =    APD_BUF+146    ; move bullets twice before updating
  27. score =        APD_BUF+147    ; 2 bytes
  28.  
  29. ;---------= Beginning of Code =---------
  30. start_of_program:
  31.     ROM_CALL(CLEARLCD)
  32.     ld    hl,2*256+2
  33.     ld    (CURSOR_ROW),hl
  34.     ld    hl,title
  35.     ROM_CALL(D_LT_STR)
  36.     ld    hl,5*256+3
  37.     ld    (CURSOR_ROW),hl
  38.     ld    hl,about1
  39.     ROM_CALL(D_ZT_STR)
  40.     ld    de,2*256+4
  41.     ld    (CURSOR_ROW),de
  42.     ROM_CALL(D_ZT_STR)
  43.     ld    de,7
  44.     ld    (CURSOR_ROW),de
  45.     ROM_CALL(D_ZT_STR)
  46.     ld    hl,(high_score)
  47.     call    disphl
  48.     call    wait_key
  49.     xor    a
  50.     ld    (level),a
  51.     sbc    hl,hl
  52.     ld    (score),hl
  53. new_level:
  54.     ld    hl,level
  55.     inc    (hl)
  56.     call    BUFCLR
  57.     ld    a,1
  58.     ld    (active_ship),a
  59.     ld    hl,40*256+30
  60.     ld    (shipy),hl
  61.     call    draw_my_ship
  62. ;-----> Clear out some variables
  63.     xor    a
  64.     ld    (bullet_active),a
  65.     ld    (main_timer),a
  66.     ld    (alien_timer),a
  67.     ld    (dead),a
  68.     ld    hl,bomb_map
  69.     ld    b,(3*10)+(max_aliens*7)
  70. clear_vars:
  71.     ld    (hl),a
  72.     inc    hl
  73.     djnz    clear_vars
  74.     ld    a,r
  75.     ld    (data),a
  76.     ld    a,(level)
  77.     ld    (alien_num),a
  78. ;-----> Start up aliens
  79.     ld    b,a
  80.     ld    hl,alien_map
  81. spawn_loop:
  82.     push    bc
  83.     ld    b,3
  84.     call    rand
  85.     inc    a
  86.     ld    (hl),a    ; type
  87.     push    af
  88.     inc    hl
  89.     ld    (hl),0    ; phase
  90.     ld    d,h
  91.     ld    e,l
  92.     inc    hl
  93.     ld    (hl),85    ; x
  94.     inc    hl
  95.     ld    b,54
  96.     call    rand
  97.     inc    a
  98.     ld    (hl),a    ; y
  99.     inc    hl
  100.     ld    b,3
  101.     call    rand
  102.     dec    a
  103.     ld    (hl),a    ; movx
  104.     inc    hl
  105.     ld    b,3
  106.     call    rand
  107.     dec    a
  108.     ld    (hl),a    ; movy
  109.     inc    hl
  110.     ld    b,20
  111.     call    rand
  112.     inc    a
  113.     ld    (hl),a    ; count
  114.     pop    af
  115.     ld    b,0
  116.     push    hl
  117.     call    draw_alien_ship
  118.     pop    hl
  119.     inc    hl
  120.     pop    bc
  121.     djnz    spawn_loop
  122.  
  123. ;---------= Main Loop =---------
  124. main:    call    move_bullet
  125.     ld    a,(main_timer)
  126.     xor    %00000001
  127.     ld    (main_timer),a
  128.     jr    z,main
  129.     call    move_aliens
  130.     call    update_bombs
  131.     call    collision_chk
  132.     ld    a,(alien_num)
  133.     or    a
  134.     jp    z,winner
  135.     ld    a,(dead)
  136.     or    a
  137.     jr    nz,exit
  138.     call    CR_GRBCopy
  139.     ld    a,$FF
  140.     out    (1),a
  141.     ld    a,$FE
  142.     out    (1),a
  143.     in    a,(1)
  144.     cp    247
  145.     jp    z,mup
  146.     cp    251
  147.     jp    z,mright
  148.     sub    253
  149.     jp    z,mleft
  150.     dec    a
  151.     jp    z,mdown
  152.     ld    a,$BF
  153.     out    (1),a
  154.     in    a,(1)
  155.     cp    191
  156.     jp    z,pause
  157.     cp    223
  158.     jp    z,fire_missle
  159.     cp    127
  160.     jr    nz,main
  161. exit:    ROM_CALL(CLEARLCD)
  162.     ld    hl,4*256+2
  163.     ld    (CURSOR_ROW),hl
  164.     ld    hl,lost_text
  165. quit:    ROM_CALL(D_ZT_STR)
  166.     ld    hl,2*256+4
  167.     ld    (CURSOR_ROW),hl
  168.     ld    hl,level_text
  169.     ROM_CALL(D_ZT_STR)
  170.     ld    hl,(level)
  171.     ld    h,0
  172.     call    disphl
  173.     ld    hl,2*256+5
  174.     ld    (CURSOR_ROW),hl
  175.     ld    hl,score_text
  176.     ROM_CALL(D_ZT_STR)
  177.     ld    hl,(score)
  178.     push    hl
  179.     call    disphl
  180.     pop    hl
  181.     ld    de,(high_score)
  182.     call    hiscr
  183.     ld    (high_score),hl
  184.     jr    nz,not_nhs
  185.     ld    hl,1*256+7
  186.     ld    (CURSOR_ROW),hl
  187.     ld    hl,nhs_text
  188.     ROM_CALL(D_ZT_STR)
  189. not_nhs:
  190.     jp    wait_key
  191.  
  192. ;---------= Beat level or game =---------
  193. winner:    ld    a,(level)
  194.     cp    15
  195.     jp    nz,new_level
  196.     ROM_CALL(CLEARLCD)
  197.     ld    hl,4*256+2
  198.     ld    (CURSOR_ROW),hl
  199.     ld    hl,win_text
  200.     jr    quit
  201.  
  202. ;---------= Move Left =---------
  203. mleft:    call    draw_my_ship
  204.     ld    a,2
  205.     ld    (active_ship),a
  206.     ld    hl,shipx
  207.     ld    a,(hl)
  208.     dec    a
  209.     jr    nz,end_move
  210.     ld    a,89
  211.     jr    end_move
  212.  
  213. ;---------= Move Right =---------
  214. mright:    call    draw_my_ship
  215.     ld    a,1
  216.     ld    (active_ship),a
  217.     ld    hl,shipx
  218.     ld    a,(hl)
  219.     inc    a
  220.     cp    90
  221.     jr    nz,end_move
  222.     ld    a,1
  223.     jr    end_move
  224.  
  225. ;---------= Move Up =---------
  226. mup:    call    draw_my_ship
  227.     ld    a,3
  228.     ld    (active_ship),a
  229.     ld    hl,shipy
  230.     ld    a,(hl)
  231.     dec    a
  232.     jr    nz,end_move
  233.     ld    a,58
  234.     jr    end_move
  235.  
  236. ;---------= Move Down =---------
  237. mdown:    call    draw_my_ship
  238.     ld    a,4
  239.     ld    (active_ship),a
  240.     ld    hl,shipy
  241.     ld    a,(hl)
  242.     inc    a
  243.     cp    59
  244.     jr    nz,end_move
  245.     ld    a,1
  246. end_move:
  247.     ld    (hl),a
  248.     call    draw_my_ship
  249.     jp    main
  250.  
  251. ;---------= Fire a missle =---------
  252. fire_missle:
  253.     ld    a,(bullet_active)
  254.     or    a
  255.     jr    nz,fire_exit
  256.     ld    a,(active_ship)
  257.     ld    (bullet_dir),a
  258.     ld    hl,(shipy)
  259.     inc    h
  260.     inc    l
  261.     ld    (bullety),hl
  262.     ld    a,1
  263.     ld    (bullet_active),a
  264.     call    draw_bullet
  265. fire_exit:
  266.     jp    main
  267.  
  268. ;---------= Pause =---------
  269. pause:
  270. ;    call    getkey
  271. ;    call    getkey        ; for screen shot
  272.  
  273.     set    3,(iy+5)
  274.     ld    hl,3*256+2
  275.     ld    (CURSOR_ROW),hl
  276.     ld    hl,paused_text
  277.     ROM_CALL(D_ZT_STR)
  278.     ld    de,3*256+3
  279.     ld    (CURSOR_ROW),de
  280.     ROM_CALL(D_ZT_STR)
  281.     ld    hl,(level)
  282.     ld    h,0
  283.     call    disphl
  284.     ld    hl,3*256+4
  285.     ld    (CURSOR_ROW),hl
  286.     ld    hl,score_text
  287.     ROM_CALL(D_ZT_STR)
  288.     ld    hl,(score)
  289.     call    disphl
  290.     res    3,(iy+5)
  291.     call    wait_key
  292.     jp    main
  293.  
  294. ;---------= Draw my ship =---------
  295. draw_my_ship:
  296.     ld    ix,my_ships-5
  297.     ld    de,$0005
  298.     ld    bc,(active_ship-1)
  299. draw_my_ship_lp:
  300.     add    ix,de
  301.     djnz    draw_my_ship_lp
  302.     ld    hl,(shipy)
  303.     ld    a,h
  304.     ld    b,e
  305.     jp    sprite
  306.  
  307. ;---------= Update Bombs =---------
  308. update_bombs:
  309.     ld    b,10
  310.     ld    hl,bomb_map
  311. bomb_loop:
  312.     push    bc
  313.     push    hl
  314.     ld    a,(hl)
  315.     or    a
  316.     jr    z,bomb_not_active
  317.     dec    a
  318.     ld    (hl),a
  319.     ld    c,0
  320.     ld    ix,bomb
  321.     cp    21
  322.     jr    nz,bomb_skip0
  323.     inc    c
  324. bomb_skip0:
  325.     cp    11
  326.     jr    z,bomb_is1
  327.     cp    20
  328.     jr    nz,bomb_skip1
  329. bomb_is1:
  330.     ld    ix,bomb2
  331.     inc    c
  332. bomb_skip1:
  333.     cp    10
  334.     jr    z,bomb_is3
  335.     or    a
  336.     jr    nz,bomb_skip3
  337. bomb_is3:
  338.     ld    ix,bomb3
  339.     inc    c
  340. bomb_skip3:
  341.     inc    hl
  342.     inc    hl
  343.     ex    de,hl
  344.     ld    a,(de)
  345.     ld    l,a
  346.     dec    de
  347.     ld    a,(de)
  348.     ld    b,8
  349.     dec    c
  350.     call    z,sprite
  351. bomb_not_active:
  352.     pop    hl
  353.     inc    hl
  354.     inc    hl
  355.     inc    hl
  356.     pop    bc
  357.     djnz    bomb_loop
  358.     ret
  359.  
  360. ;---------= Move Bullet =---------
  361. move_bullet:
  362.     ld    a,(bullet_active)
  363.     or    a
  364.     ret    z
  365.     call    draw_bullet
  366.     ld    a,(bullet_dir)
  367.     dec    a
  368.     jr    nz,bul_nright
  369.     ld    a,(bulletx)
  370.     inc    a
  371.     ld    (bulletx),a
  372.     cp    92
  373.     jr    z,bullet_not_active
  374.     jr    bullet_still_active
  375. bul_nright:    ; left
  376.     dec    a
  377.     jr    nz,bul_nleft
  378.     ld    a,(bulletx)
  379.     dec    a
  380.     ld    (bulletx),a
  381.     jr    z,bullet_not_active
  382.     jr    bullet_still_active
  383. bul_nleft:    ; up
  384.     dec    a
  385.     jr    nz,bul_nup
  386.     ld    a,(bullety)
  387.     dec    a
  388.     ld    (bullety),a
  389.     jr    z,bullet_not_active
  390.     jr    bullet_still_active
  391. bul_nup:    ; down
  392.     ld    a,(bullety)
  393.     inc    a
  394.     ld    (bullety),a
  395.     cp    60
  396.     jr    nz,bullet_still_active
  397. bullet_not_active:
  398.     xor    a
  399.     ld    (bullet_active),a
  400.     ret
  401. bullet_still_active:
  402. ;---------= Draw Bullet =---------
  403. draw_bullet:
  404.     ld    ix,bullet
  405.     ld    hl,(bullety)
  406.     ld    a,h
  407.     ld    b,3
  408.     jp    sprite
  409.  
  410. ;---------= Check for Collision =---------
  411. collision_chk:
  412.     ld    b,max_aliens
  413.     ld    hl,alien_map
  414. collision_lp:
  415.     push    hl
  416.     ld    a,(hl)
  417.     or    a
  418.     jr    z,collision_sk2
  419.     inc    hl    ; phase
  420.     inc    hl    ; x
  421.     ld    a,(shipx)
  422.     sub    6
  423.     cp    (hl)
  424.     jr    nc,collision_sk1
  425.     add    a,10
  426.     cp    (hl)
  427.     jr    c,collision_sk1
  428.     inc    hl
  429.     ld    a,(shipy)
  430.     sub    6
  431.     cp    (hl)
  432.     jr    nc,collision_sk1
  433.     add    a,10
  434.     cp    (hl)
  435.     jr    c,collision_sk1
  436.     ld    a,1
  437.     ld    (dead),a
  438. collision_sk1:
  439.     ld    a,(bullet_active)
  440.     or    a
  441.     jr    z,collision_sk2
  442.     pop    hl
  443.     push    hl
  444.     inc    hl    ; phase
  445.     inc    hl    ; x
  446.     ld    a,(bulletx)
  447.     cp    (hl)
  448.     jr    c,collision_sk2
  449.     sub    6
  450.     cp    (hl)
  451.     jr    nc,collision_sk2    
  452.     inc    hl
  453.     ld    a,(bullety)
  454.     cp    (hl)
  455.     jr    c,collision_sk2
  456.     sub    6
  457.     cp    (hl)
  458.     jr    nc,collision_sk2
  459.     ex    de,hl
  460.     dec    de    ; x
  461.     dec    de    ; phase
  462.     dec    de    ; type
  463.     ld    a,(de)
  464.     ld    b,a
  465.     inc    de    ; phase
  466.     ld    a,(de)
  467.     call    draw_alien_ship
  468.     dec    de    ; type
  469.     xor    a
  470.     ld    (de),a
  471.     ld    hl,alien_num
  472.     dec    (hl)
  473.     ld    hl,(score)
  474.     inc    hl
  475.     ld    (score),hl
  476.     pop    hl
  477.     jr    collision_chk
  478. collision_sk2:
  479.     pop    hl
  480.     ld    de,$0007
  481.     add    hl,de
  482.     djnz    collision_lp
  483.     ld    b,10
  484.     ld    hl,bomb_map
  485. collision_lp2:
  486.     push    hl
  487.     ld    a,(hl)
  488.     or    a
  489.     jr    z,collision_sk3
  490.     cp    50
  491.     jr    nc,collision_sk3
  492.     inc    hl
  493.     ld    a,(shipx)
  494.     sub    8
  495.     cp    (hl)
  496.     jr    nc,collision_sk3
  497.     add    a,12
  498.     cp    (hl)
  499.     jr    c,collision_sk3
  500.     inc    hl
  501.     ld    a,(shipy)
  502.     sub    8
  503.     cp    (hl)
  504.     jr    nc,collision_sk3
  505.     add    a,12
  506.     cp    (hl)
  507.     jr    c,collision_sk3
  508.     ld    a,1
  509.     ld    (dead),a
  510. collision_sk3:
  511.     pop    hl
  512.     inc    hl
  513.     inc    hl
  514.     inc    hl
  515.     djnz    collision_lp2
  516.     ret
  517.  
  518. ;---------= Start a Bomb! =---------
  519. start_bomb:
  520.     push    de
  521.     ld    hl,bomb_map
  522.     ld    b,10
  523. find_bomb:
  524.     ld    a,(hl)
  525.     or    a
  526.     jr    nz,bomb_active
  527.     ld    (hl),$FF
  528.     inc    hl    ; x
  529.     ld    a,(de)
  530.     ld    (hl),a
  531.     inc    hl    ; y
  532.     inc    de
  533.     ld    a,(de)
  534.     ld    (hl),a
  535.     ex    de,hl
  536.     ld    a,(de)
  537.     ld    l,a
  538.     dec    de
  539.     ld    a,(de)
  540.     ld    ix,bomb
  541.     ld    b,8
  542.     call    sprite
  543.     pop    de
  544.     ret
  545. bomb_active:
  546.     inc    hl
  547.     inc    hl
  548.     inc    hl
  549.     djnz    find_bomb
  550.     pop    de
  551.     ret    ; oh well
  552.  
  553. ;---------= Move Aliens =---------
  554. move_aliens:
  555.     ld    a,(alien_timer)
  556.     xor    1
  557.     ld    (alien_timer),a
  558.     ret    z
  559.     ld    de,alien_map
  560.     ld    b,max_aliens
  561. move_alien_loop:
  562.     push    bc
  563.     push    de
  564.     ld    a,(de)    ; type
  565.     or    a
  566.     jr    z,alien_not_active
  567.     ld    b,a
  568.     inc    de
  569.     ld    a,(de)    ; phase
  570.     call    draw_alien_ship
  571.     ld    a,(de)
  572.     xor    1
  573.     ld    (de),a
  574.     inc    de    ; x
  575.     ld    l,e
  576.     ld    h,d
  577.     inc    de    ; y
  578.     inc    de    ; movx
  579.     ld    a,(de)
  580.     ld    b,(hl)
  581.     add    a,b
  582.     ld    (hl),a
  583.     jr    nz,alien_skip1
  584.     ld    a,86
  585.     ld    (hl),a
  586. alien_skip1:
  587.     cp    87
  588.     jr    nz,alien_skip2
  589.     ld    a,1
  590.     ld    (hl),a
  591. alien_skip2:
  592.     inc    hl
  593.     inc    de
  594.     ld    a,(de)
  595.     ld    b,(hl)
  596.     add    a,b
  597.     ld    (hl),a
  598.     jr    nz,alien_skip3
  599.     ld    a,54
  600.     ld    (hl),a
  601. alien_skip3:
  602.     cp    55
  603.     jr    nz,alien_skip4
  604.     ld    a,1
  605.     ld    (hl),a
  606. alien_skip4:
  607.     inc    de
  608.     ld    a,(de)    ; decrease count
  609.     dec    a
  610.     ld    (de),a
  611.     jr    nz,alien_still_active
  612.     push    de
  613. ;-----> Get new direction
  614.     dec    de
  615.     dec    de    ; movx
  616.     ld    b,3
  617.     call    rand
  618.     dec    a
  619.     ld    (de),a
  620.     inc    de
  621.     ld    b,3
  622.     call    rand
  623.     dec    a
  624.     ld    (de),a
  625.     inc    de
  626.     ld    b,20
  627.     call    rand
  628.     inc    a
  629.     ld    (de),a
  630.     dec    de
  631.     dec    de    ; y
  632.     dec    de    ; x
  633.     dec    de    ; phase
  634.     ld    a,(de)
  635.     ld    b,a
  636.     dec    de    ; type
  637.     ld    a,(de)
  638.     pop    de
  639. alien_still_active:
  640.     dec    de    ; movy
  641.     dec    de    ; movx
  642.     dec    de    ; y
  643.     dec    de    ; x
  644.     ld    b,100
  645.     call    rand
  646.     or    a
  647.     call    z,start_bomb
  648.     dec    de    ; phase
  649.     dec    de    ; type
  650.     ld    a,(de)
  651.     ld    b,a
  652.     inc    de    ; phase
  653.     ld    a,(de)
  654.     call    draw_alien_ship
  655. alien_not_active:
  656.     pop    hl
  657.     ld    de,$0007
  658.     add    hl,de
  659.     ex    de,hl
  660.     pop    bc
  661.     djnz    move_alien_loop
  662.     ret
  663.  
  664. ;---------= Draw Alien Ship =---------
  665. draw_alien_ship:
  666.     add    a,b    ; type+phase    (type starts at 1, phase at 0)
  667.     ld    ix,alien_ships-8
  668.     ld    bc,$0008
  669. draw_alien_ship_lp:
  670.     add    ix,bc
  671.     dec    a
  672.     jr    nz,draw_alien_ship_lp
  673.     push    de
  674.     inc    de    ; x
  675.     inc    de    ; y
  676.     ld    a,(de)
  677.     ld    l,a
  678.     dec    de    ; x
  679.     ld    a,(de)
  680.     ld    b,8
  681.     call    sprite
  682.     pop    de
  683.     ret
  684.  
  685. ;---------= Wait for a keypress =---------
  686. wait_key:
  687.     ld    b,50
  688. key_loop1:
  689.     ei
  690.     halt
  691.     djnz    key_loop1
  692. key_loop2:
  693.     call    GET_KEY
  694.     or    a
  695.     jr    z,key_loop2
  696.     ret
  697.  
  698. ;-------= BufClr =----------
  699. BUFCLR:
  700.         ld hl,$88B8
  701.         ld de,$88B9
  702.         ld bc,$2FF
  703.         ld (hl),0
  704.         ldir
  705.         ret
  706.  
  707. ;-----= Disp HL =------
  708. disphl:
  709.       ROM_CALL(D_HL_DECI)
  710.       ret
  711. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  712. ;-= Data -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  713. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  714. ;---------= Sprites =---------
  715. bullet:    .db    %01000000
  716.     .db    %11100000
  717.     .db    %01000000
  718. my_ships:
  719.     .db    %11000000    ; right
  720.     .db    %01100000
  721.     .db    %01111000
  722.     .db    %01100000
  723.     .db    %11000000
  724.     .db    %00011000    ; left
  725.     .db    %00110000
  726.     .db    %11110000
  727.     .db    %00110000
  728.     .db    %00011000
  729.     .db    %00100000    ; up
  730.     .db    %00100000
  731.     .db    %01110000
  732.     .db    %11111000
  733.     .db    %10001000
  734.     .db    %10001000    ; down
  735.     .db    %11111000
  736.     .db    %01110000
  737.     .db    %00100000
  738.     .db    %00100000
  739.  
  740. alien_ships:
  741.     ; type 1
  742.     .db    %00001100    ; phase 0
  743.     .db    %01101000
  744.     .db    %00101110
  745.     .db    %11100000
  746.     .db    %00000111
  747.     .db    %01110101
  748.     .db    %00010100
  749.     .db    %00110000
  750.  
  751.     .db    %00101100    ; phase 1
  752.     .db    %01001110
  753.     .db    %11101101
  754.     .db    %11100000
  755.     .db    %00000111
  756.     .db    %10110111
  757.     .db    %01110010
  758.     .db    %00110100
  759.     ; type 3 (types are in increments of 2)
  760.  
  761.     .db    %00111100
  762.     .db    %00011000
  763.     .db    %10011001
  764.     .db    %11111111
  765.     .db    %11111111
  766.     .db    %10011001
  767.     .db    %00011000
  768.     .db    %00111100
  769.  
  770.     .db    %00100100
  771.     .db    %01000010
  772.     .db    %10000001
  773.     .db    %00011000
  774.     .db    %00011000
  775.     .db    %10000001
  776.     .db    %01000010
  777.     .db    %00100100
  778.  
  779. bomb:    .db    %00000000
  780.     .db    %00000000
  781.     .db    %00011000
  782.     .db    %00111100
  783.     .db    %00111100
  784.     .db    %00011000
  785.     .db    %00000000
  786.     .db    %00000000
  787. bomb2:    .db    %00000000
  788.     .db    %00001000
  789.     .db    %01011010
  790.     .db    %00111100
  791.     .db    %00111110
  792.     .db    %01011000
  793.     .db    %00010010
  794.     .db    %00000000
  795. bomb3:    .db    %01010010
  796.     .db    %10101000
  797.     .db    %00011010
  798.     .db    %01101101
  799.     .db    %00110110
  800.     .db    %10011100
  801.     .db    %01100010
  802.     .db    %00010100
  803.  
  804. ;---------= Dialog =---------
  805. paused_text:
  806.     .db    " - Pause - ",0
  807. level_text:
  808.     .db    "Level:",0
  809. score_text:
  810.     .db    "Score:",0
  811. lost_text:
  812.     .db    "You Lost",0
  813. win_text:
  814.     .db    "You Won!",0
  815. high_text:
  816.     .db    "HiScore:",0
  817. nhs_text:
  818.     .db    "New High Score",0
  819. about1:    .db    "by Joe",0
  820. about2:    .db    "Wingbermuehle",0
  821. about3:    .db    "HiScore:",0
  822. high_score:
  823.     .dw    0
  824.  
  825. title:    .db    13
  826. sos_description:
  827.     .db    "SpaceWar v1.0 by Joe W"
  828.     .db    0
  829.  
  830. ;--------= Libs =---------
  831.  
  832. #define    data    APD_BUF+150    ; 2 bytes of data
  833.  
  834.     .dw    sprite    ; draw a sprite 1
  835.     .dw    rand    ; random number 2
  836.     .dw    hiscr    ; check for/set high score D
  837.  
  838. ;---------= XOR a sprite =---------
  839. ; b=size of sprite
  840. ; l=yc
  841. ; a=xc
  842. ; ix holds pointer
  843. sprite:    ld    e,l
  844.     ld    h,$00
  845.     ld    d,h
  846.     add    hl,de
  847.     add    hl,de
  848.     add    hl,hl
  849.     add    hl,hl
  850.     ld    e,a
  851.     and    $07
  852.     ld    c,a
  853.     srl    e
  854.     srl    e
  855.     srl    e
  856.     add    hl,de
  857.     ld    de,GRAPH_MEM
  858.     add    hl,de
  859.     push    ix
  860.     pop    de
  861. sl1:    push    bc
  862.     ld    a,(de)
  863.     ld    b,a
  864.     ld    a,c
  865.     or    a
  866.     jr    z,sl3
  867.     ld    c,$00
  868. sl2:    srl    b
  869.     rr    c
  870.     dec    a
  871.     jr    nz,sl2
  872. sl3:    ld    a,(hl)
  873.     xor    b
  874.     ld    (hl),a
  875.     inc    hl
  876.     ld    a,(hl)
  877.     xor    c
  878.     ld    (hl),a
  879.     ld    bc,$0B
  880.     add    hl,bc
  881.     inc    de
  882.     pop    bc
  883.     djnz    sl1
  884.     ret
  885.  
  886. ;---------= Random number generator =---------
  887. ; input b=upper bound
  888. ; ouput a=answer 0<=a<b
  889. ; all registers are preserved except: af and bc
  890. rand:    push    hl
  891.     push    de
  892.     ld    a,(data)
  893.     ld    c,a
  894.     xor    a
  895.     add    a,c
  896.     sla    c
  897.     sla    c
  898.     add    a,c
  899.     sla    c
  900.     sla    c
  901.     add    a,c
  902.     inc    a
  903.     ld    (data),a
  904.     rra
  905.     ld    hl,$0000
  906.     ld    e,a
  907.     ld    d,h
  908. randl:    add    hl,de
  909.     djnz    randl
  910.     ld    a,h
  911.     pop    de
  912.     pop    hl
  913. nomore:    ret
  914.  
  915. ;---------= High Score =---------
  916. ; Input: de=previous high score
  917. ;    hl=current score
  918. ; Output: hl=high score
  919. ;    z=1 (a=0) if new high score, z=0 (a=1) if not
  920. ; Registers destroyed: af, de, hl
  921. hiscr:    push    hl
  922.     xor    a
  923.     sbc    hl,de
  924.     jr    c,nohs
  925.     jr    z,nohs
  926.     pop    hl
  927.     or    a
  928.     ret
  929. nohs:    pop    hl
  930.     ex    de,hl
  931.     inc    a
  932.     ret 
  933.  
  934. .end
  935. END